{"version":3,"mappings":"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AAI,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,IAAK,GAAI,EAAG,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,GAAI,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,IAAK,EAC9nC,CAAG,CAAC,EAAG,EAAE,EAAE,OACX,MAAY,CAEZ,CAYA,SAASD,GAAKE,EAAKC,EAAMC,EAAU,CAM/B,KAAK,IAAMF,EAAM,EAMjB,KAAK,KAAOC,EAAO,EAMnB,KAAK,SAAW,CAAC,CAACC,CACtB,CAyBAJ,GAAK,UAAU,WAEf,OAAO,eAAeA,GAAK,UAAW,aAAc,CAAE,MAAO,EAAI,CAAE,EAQnE,SAASK,GAAOx/Q,EAAK,CACjB,OAAQA,GAAOA,EAAI,cAAmB,EAC1C,CAQAm/Q,GAAK,OAASK,GAOd,IAAIC,GAAY,GAOZC,GAAa,GAQjB,SAASC,GAAQzsR,EAAOqsR,EAAU,CAC9B,IAAIv/Q,EAAK4/Q,EAAWrzQ,EACpB,OAAIgzQ,GACArsR,KAAW,GACPqZ,EAAS,GAAKrZ,GAASA,EAAQ,OAC/B0sR,EAAYF,GAAWxsR,CAAK,EACxB0sR,GACOA,GAEf5/Q,EAAM6/Q,GAAS3sR,GAAQA,EAAQ,GAAK,EAAI,GAAK,EAAG,EAAI,EAChDqZ,IACAmzQ,GAAWxsR,CAAK,EAAI8M,GACjBA,KAEP9M,GAAS,GACLqZ,EAAS,MAAQrZ,GAASA,EAAQ,OAClC0sR,EAAYH,GAAUvsR,CAAK,EACvB0sR,GACOA,GAEf5/Q,EAAM6/Q,GAAS3sR,EAAOA,EAAQ,EAAI,GAAK,EAAG,EAAK,EAC3CqZ,IACAkzQ,GAAUvsR,CAAK,EAAI8M,GAChBA,GAEf,CASAm/Q,GAAK,QAAUQ,GAQf,SAASG,GAAW5sR,EAAOqsR,EAAU,CACjC,GAAI,MAAMrsR,CAAK,EACX,OAAOqsR,EAAWQ,GAAQC,GAC9B,GAAIT,EAAU,CACV,GAAIrsR,EAAQ,EACR,OAAO6sR,GACX,GAAI7sR,GAAS+sR,GACT,OAAOC,EACnB,KAAW,CACH,GAAIhtR,GAAS,oBACT,OAAOitR,GACX,GAAIjtR,EAAQ,GAAKktR,IACb,OAAOC,EACd,CACD,OAAIntR,EAAQ,EACD4sR,GAAW,CAAC5sR,EAAOqsR,CAAQ,EAAE,IAAG,EACpCM,GAAU3sR,EAAQotR,GAAkB,EAAIptR,EAAQotR,GAAkB,EAAGf,CAAQ,CACxF,CASAJ,GAAK,WAAaW,GASlB,SAASD,GAASU,EAASC,EAAUjB,EAAU,CAC3C,OAAO,IAAIJ,GAAKoB,EAASC,EAAUjB,CAAQ,CAC/C,CAWAJ,GAAK,SAAWU,GAShB,IAAIY,GAAU,KAAK,IASnB,SAASC,GAAWr7Q,EAAKk6Q,EAAUoB,EAAO,CACtC,GAAIt7Q,EAAI,SAAW,EACf,MAAM,MAAM,cAAc,EAC9B,GAAIA,IAAQ,OAASA,IAAQ,YAAcA,IAAQ,aAAeA,IAAQ,YACtE,OAAO26Q,GASX,GARI,OAAOT,GAAa,UAEpBoB,EAAQpB,EACRA,EAAW,IAEXA,EAAW,CAAC,CAAEA,EAElBoB,EAAQA,GAAS,GACbA,EAAQ,GAAK,GAAKA,EAClB,MAAM,WAAW,OAAO,EAE5B,IAAIvxR,EACJ,IAAKA,EAAIiW,EAAI,QAAQ,GAAG,GAAK,EACzB,MAAM,MAAM,iBAAiB,EAC5B,GAAIjW,IAAM,EACX,OAAOsxR,GAAWr7Q,EAAI,UAAU,CAAC,EAAGk6Q,EAAUoB,CAAK,EAAE,MAQzD,QAHIC,EAAed,GAAWW,GAAQE,EAAO,CAAC,CAAC,EAE3CntR,EAASwsR,GACJ,EAAI,EAAG,EAAI36Q,EAAI,OAAQ,GAAK,EAAG,CACpC,IAAI9J,EAAO,KAAK,IAAI,EAAG8J,EAAI,OAAS,CAAC,EACjCnS,EAAQ,SAASmS,EAAI,UAAU,EAAG,EAAI9J,CAAI,EAAGolR,CAAK,EACtD,GAAIplR,EAAO,EAAG,CACV,IAAIq6L,EAAQkqF,GAAWW,GAAQE,EAAOplR,CAAI,CAAC,EAC3C/H,EAASA,EAAO,IAAIoiM,CAAK,EAAE,IAAIkqF,GAAW5sR,CAAK,CAAC,CAC5D,MACYM,EAASA,EAAO,IAAIotR,CAAY,EAChCptR,EAASA,EAAO,IAAIssR,GAAW5sR,CAAK,CAAC,CAE5C,CACD,OAAAM,EAAO,SAAW+rR,EACX/rR,CACX,CAUA2rR,GAAK,WAAauB,GASlB,SAASG,GAAUpmR,EAAK8kR,EAAU,CAC9B,OAAI,OAAO9kR,GAAQ,SACRqlR,GAAWrlR,EAAK8kR,CAAQ,EAC/B,OAAO9kR,GAAQ,SACRimR,GAAWjmR,EAAK8kR,CAAQ,EAE5BM,GAASplR,EAAI,IAAKA,EAAI,KAAM,OAAO8kR,GAAa,UAAYA,EAAW9kR,EAAI,QAAQ,CAC9F,CASA0kR,GAAK,UAAY0B,GAUjB,IAAIC,GAAiB,MAOjBC,IAAiB,GAAK,GAOtBT,GAAiBQ,GAAiBA,GAOlCb,GAAiBK,GAAiBA,GAOlCF,IAAiBH,GAAiB,EAOlCe,GAAarB,GAAQoB,GAAc,EAMnCf,GAAOL,GAAQ,CAAC,EAMpBR,GAAK,KAAOa,GAMZ,IAAID,GAAQJ,GAAQ,EAAG,EAAI,EAM3BR,GAAK,MAAQY,GAMb,IAAIkB,GAAMtB,GAAQ,CAAC,EAMnBR,GAAK,IAAM8B,GAMX,IAAIC,GAAOvB,GAAQ,EAAG,EAAI,EAM1BR,GAAK,KAAO+B,GAMZ,IAAIC,GAAUxB,GAAQ,EAAE,EAMxBR,GAAK,QAAUgC,GAMf,IAAId,GAAYR,GAAS,GAAc,WAAc,EAAK,EAM1DV,GAAK,UAAYkB,GAMjB,IAAIH,GAAqBL,GAAS,GAAc,GAAc,EAAI,EAMlEV,GAAK,mBAAqBe,GAM1B,IAAIC,GAAYN,GAAS,EAAG,YAAc,EAAK,EAM/CV,GAAK,UAAYgB,GAMjB,IAAIiB,GAAgBjC,GAAK,UAMzBiC,GAAc,MAAQ,UAAiB,CACnC,OAAO,KAAK,SAAW,KAAK,MAAQ,EAAI,KAAK,GACjD,EAMAA,GAAc,SAAW,UAAoB,CACzC,OAAI,KAAK,UACI,KAAK,OAAS,GAAKd,IAAmB,KAAK,MAAQ,GACzD,KAAK,KAAOA,IAAkB,KAAK,MAAQ,EACtD,EASAc,GAAc,SAAW,SAAkBT,EAAO,CAE9C,GADAA,EAAQA,GAAS,GACbA,EAAQ,GAAK,GAAKA,EAClB,MAAM,WAAW,OAAO,EAC5B,GAAI,KAAK,OAAQ,EACb,MAAO,IACX,GAAI,KAAK,aACL,GAAI,KAAK,GAAGR,EAAS,EAAG,CAGpB,IAAIkB,EAAYvB,GAAWa,CAAK,EAC5BW,EAAM,KAAK,IAAID,CAAS,EACxBE,EAAOD,EAAI,IAAID,CAAS,EAAE,IAAI,IAAI,EACtC,OAAOC,EAAI,SAASX,CAAK,EAAIY,EAAK,MAAO,EAAC,SAASZ,CAAK,CAC3D,KACG,OAAO,IAAM,KAAK,IAAK,EAAC,SAASA,CAAK,EAQ9C,QAHIC,EAAed,GAAWW,GAAQE,EAAO,CAAC,EAAG,KAAK,QAAQ,EAC1Da,EAAM,KACNhuR,EAAS,KACA,CACT,IAAIiuR,EAASD,EAAI,IAAIZ,CAAY,EAC7Bc,EAASF,EAAI,IAAIC,EAAO,IAAIb,CAAY,CAAC,EAAE,MAAK,IAAO,EACvDe,EAASD,EAAO,SAASf,CAAK,EAElC,GADAa,EAAMC,EACFD,EAAI,OAAQ,EACZ,OAAOG,EAASnuR,EAEhB,KAAOmuR,EAAO,OAAS,GACnBA,EAAS,IAAMA,EACnBnuR,EAAS,GAAKmuR,EAASnuR,CAE9B,CACL,EAMA4tR,GAAc,YAAc,UAAuB,CAC/C,OAAO,KAAK,IAChB,EAMAA,GAAc,oBAAsB,UAA+B,CAC/D,OAAO,KAAK,OAAS,CACzB,EAMAA,GAAc,WAAa,UAAsB,CAC7C,OAAO,KAAK,GAChB,EAMAA,GAAc,mBAAqB,UAA8B,CAC7D,OAAO,KAAK,MAAQ,CACxB,EAMAA,GAAc,cAAgB,UAAyB,CACnD,GAAI,KAAK,WAAY,EACjB,OAAO,KAAK,GAAGjB,EAAS,EAAI,GAAK,KAAK,MAAM,gBAEhD,QADI1lR,EAAM,KAAK,MAAQ,EAAI,KAAK,KAAO,KAAK,IACnCmnR,EAAM,GAAIA,EAAM,GAChB,EAAAnnR,EAAO,GAAKmnR,GADOA,IACxB,CAEJ,OAAO,KAAK,MAAQ,EAAIA,EAAM,GAAKA,EAAM,CAC7C,EAMAR,GAAc,OAAS,UAAkB,CACrC,OAAO,KAAK,OAAS,GAAK,KAAK,MAAQ,CAC3C,EAMAA,GAAc,IAAMA,GAAc,OAMlCA,GAAc,WAAa,UAAsB,CAC7C,MAAO,CAAC,KAAK,UAAY,KAAK,KAAO,CACzC,EAMAA,GAAc,WAAa,UAAsB,CAC7C,OAAO,KAAK,UAAY,KAAK,MAAQ,CACzC,EAMAA,GAAc,MAAQ,UAAiB,CACnC,OAAQ,KAAK,IAAM,KAAO,CAC9B,EAMAA,GAAc,OAAS,UAAkB,CACrC,OAAQ,KAAK,IAAM,KAAO,CAC9B,EAOAA,GAAc,OAAS,SAAgBxoE,EAAO,CAG1C,OAFK4mE,GAAO5mE,CAAK,IACbA,EAAQioE,GAAUjoE,CAAK,GACvB,KAAK,WAAaA,EAAM,UAAa,KAAK,OAAS,KAAQ,GAAMA,EAAM,OAAS,KAAQ,EACjF,GACJ,KAAK,OAASA,EAAM,MAAQ,KAAK,MAAQA,EAAM,GAC1D,EAQAwoE,GAAc,GAAKA,GAAc,OAOjCA,GAAc,UAAY,SAAmBxoE,EAAO,CAChD,MAAO,CAAC,KAAK,GAAmBA,CAAK,CACzC,EAQAwoE,GAAc,IAAMA,GAAc,UAQlCA,GAAc,GAAKA,GAAc,UAOjCA,GAAc,SAAW,SAAkBxoE,EAAO,CAC9C,OAAO,KAAK,KAAqBA,CAAK,EAAI,CAC9C,EAQAwoE,GAAc,GAAKA,GAAc,SAOjCA,GAAc,gBAAkB,SAAyBxoE,EAAO,CAC5D,OAAO,KAAK,KAAqBA,CAAK,GAAK,CAC/C,EAQAwoE,GAAc,IAAMA,GAAc,gBAQlCA,GAAc,GAAKA,GAAc,gBAOjCA,GAAc,YAAc,SAAqBxoE,EAAO,CACpD,OAAO,KAAK,KAAqBA,CAAK,EAAI,CAC9C,EAQAwoE,GAAc,GAAKA,GAAc,YAOjCA,GAAc,mBAAqB,SAA4BxoE,EAAO,CAClE,OAAO,KAAK,KAAqBA,CAAK,GAAK,CAC/C,EAQAwoE,GAAc,IAAMA,GAAc,mBAQlCA,GAAc,GAAKA,GAAc,mBAQjCA,GAAc,QAAU,SAAiBxoE,EAAO,CAG5C,GAFK4mE,GAAO5mE,CAAK,IACbA,EAAQioE,GAAUjoE,CAAK,GACvB,KAAK,GAAGA,CAAK,EACb,MAAO,GACX,IAAIipE,EAAU,KAAK,WAAY,EAC3BC,EAAWlpE,EAAM,aACrB,OAAIipE,GAAW,CAACC,EACL,GACP,CAACD,GAAWC,EACL,EAEN,KAAK,SAGFlpE,EAAM,OAAS,EAAM,KAAK,OAAS,GAAOA,EAAM,OAAS,KAAK,MAASA,EAAM,MAAQ,EAAM,KAAK,MAAQ,EAAM,GAAK,EAFhH,KAAK,IAAIA,CAAK,EAAE,WAAY,EAAG,GAAK,CAGnD,EASAwoE,GAAc,KAAOA,GAAc,QAMnCA,GAAc,OAAS,UAAkB,CACrC,MAAI,CAAC,KAAK,UAAY,KAAK,GAAGjB,EAAS,EAC5BA,GACJ,KAAK,IAAG,EAAG,IAAIc,EAAG,CAC7B,EAOAG,GAAc,IAAMA,GAAc,OAOlCA,GAAc,IAAM,SAAaW,EAAQ,CAChCvC,GAAOuC,CAAM,IACdA,EAASlB,GAAUkB,CAAM,GAI7B,IAAIC,EAAM,KAAK,OAAS,GACpBC,EAAM,KAAK,KAAO,MAClBC,EAAM,KAAK,MAAQ,GACnBC,EAAM,KAAK,IAAM,MAEjBC,EAAML,EAAO,OAAS,GACtBM,EAAMN,EAAO,KAAO,MACpBO,EAAMP,EAAO,MAAQ,GACrBQ,EAAMR,EAAO,IAAM,MAEnBS,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EACrC,OAAAA,GAAOR,EAAMI,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMI,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMI,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMI,EACbI,GAAO,MACA3C,GAAU6C,GAAO,GAAMC,EAAMH,GAAO,GAAMC,EAAK,KAAK,QAAQ,CACvE,EAOArB,GAAc,SAAW,SAAkBwB,EAAY,CACnD,OAAKpD,GAAOoD,CAAU,IAClBA,EAAa/B,GAAU+B,CAAU,GAC9B,KAAK,IAAIA,EAAW,IAAK,EACpC,EAQAxB,GAAc,IAAMA,GAAc,SAOlCA,GAAc,SAAW,SAAkBl5D,EAAY,CACnD,GAAI,KAAK,OAAQ,EACb,OAAO83D,GAKX,GAJKR,GAAOt3D,CAAU,IAClBA,EAAa24D,GAAU34D,CAAU,GAGjCk3D,GAAM,CACN,IAAIC,EAAMD,GAAK,IAAI,KAAK,IACL,KAAK,KACLl3D,EAAW,IACXA,EAAW,IAAI,EAClC,OAAO23D,GAASR,EAAKD,GAAK,SAAQ,EAAI,KAAK,QAAQ,CACtD,CAED,GAAIl3D,EAAW,OAAQ,EACnB,OAAO83D,GACX,GAAI,KAAK,GAAGG,EAAS,EACjB,OAAOj4D,EAAW,QAAUi4D,GAAYH,GAC5C,GAAI93D,EAAW,GAAGi4D,EAAS,EACvB,OAAO,KAAK,QAAUA,GAAYH,GAEtC,GAAI,KAAK,aACL,OAAI93D,EAAW,WAAY,EAChB,KAAK,IAAK,EAAC,IAAIA,EAAW,IAAG,CAAE,EAE/B,KAAK,IAAK,EAAC,IAAIA,CAAU,EAAE,MACnC,GAAIA,EAAW,WAAY,EAC9B,OAAO,KAAK,IAAIA,EAAW,IAAK,GAAE,MAGtC,GAAI,KAAK,GAAG84D,EAAU,GAAK94D,EAAW,GAAG84D,EAAU,EAC/C,OAAOlB,GAAW,KAAK,SAAU,EAAG53D,EAAW,SAAU,EAAE,KAAK,QAAQ,EAK5E,IAAI85D,EAAM,KAAK,OAAS,GACpBC,EAAM,KAAK,KAAO,MAClBC,EAAM,KAAK,MAAQ,GACnBC,EAAM,KAAK,IAAM,MAEjBC,EAAMl6D,EAAW,OAAS,GAC1Bm6D,EAAMn6D,EAAW,KAAO,MACxBo6D,EAAMp6D,EAAW,MAAQ,GACzBq6D,EAAMr6D,EAAW,IAAM,MAEvBs6D,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EACrC,OAAAA,GAAOR,EAAMI,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMK,EACbE,GAAOC,IAAQ,GACfA,GAAO,MACPA,GAAOP,EAAMG,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMM,EACbC,GAAOC,IAAQ,GACfA,GAAO,MACPA,GAAOP,EAAMI,EACbE,GAAOC,IAAQ,GACfA,GAAO,MACPA,GAAON,EAAME,EACbG,GAAOC,IAAQ,GACfA,GAAO,MACPD,GAAOR,EAAMO,EAAMN,EAAMK,EAAMJ,EAAMG,EAAMF,EAAMC,EACjDI,GAAO,MACA3C,GAAU6C,GAAO,GAAMC,EAAMH,GAAO,GAAMC,EAAK,KAAK,QAAQ,CACvE,EAQArB,GAAc,IAAMA,GAAc,SAQlCA,GAAc,OAAS,SAAgByB,EAAS,CAG5C,GAFKrD,GAAOqD,CAAO,IACfA,EAAUhC,GAAUgC,CAAO,GAC3BA,EAAQ,OAAQ,EAChB,MAAM,MAAM,kBAAkB,EAGlC,GAAIzD,GAAM,CAIN,GAAI,CAAC,KAAK,UACN,KAAK,OAAS,aACdyD,EAAQ,MAAQ,IAAMA,EAAQ,OAAS,GAEvC,OAAO,KAEX,IAAIxD,GAAO,KAAK,SAAWD,GAAK,MAAQA,GAAK,OACzC,KAAK,IACL,KAAK,KACLyD,EAAQ,IACRA,EAAQ,IACpB,EACQ,OAAOhD,GAASR,EAAKD,GAAK,SAAQ,EAAI,KAAK,QAAQ,CACtD,CAED,GAAI,KAAK,OAAQ,EACb,OAAO,KAAK,SAAWW,GAAQC,GACnC,IAAI8C,EAAQtB,EAAKxkR,EACjB,GAAK,KAAK,SA6BH,CAKH,GAFK6lR,EAAQ,WACTA,EAAUA,EAAQ,cAClBA,EAAQ,GAAG,IAAI,EACf,OAAO9C,GACX,GAAI8C,EAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,EACvB,OAAO3B,GACXlkR,EAAM+iR,EACT,KAvCmB,CAGhB,GAAI,KAAK,GAAGI,EAAS,EAAG,CACpB,GAAI0C,EAAQ,GAAG5B,EAAG,GAAK4B,EAAQ,GAAG1B,EAAO,EACrC,OAAOhB,GACN,GAAI0C,EAAQ,GAAG1C,EAAS,EACzB,OAAOc,GAGP,IAAI8B,EAAW,KAAK,IAAI,CAAC,EAEzB,OADAD,EAASC,EAAS,IAAIF,CAAO,EAAE,IAAI,CAAC,EAChCC,EAAO,GAAG9C,EAAI,EACP6C,EAAQ,aAAe5B,GAAME,IAEpCK,EAAM,KAAK,IAAIqB,EAAQ,IAAIC,CAAM,CAAC,EAClC9lR,EAAM8lR,EAAO,IAAItB,EAAI,IAAIqB,CAAO,CAAC,EAC1B7lR,EAG3B,SAAmB6lR,EAAQ,GAAG1C,EAAS,EAC3B,OAAO,KAAK,SAAWJ,GAAQC,GACnC,GAAI,KAAK,aACL,OAAI6C,EAAQ,WAAY,EACb,KAAK,IAAK,EAAC,IAAIA,EAAQ,IAAG,CAAE,EAChC,KAAK,IAAK,EAAC,IAAIA,CAAO,EAAE,MAC5B,GAAIA,EAAQ,WAAY,EAC3B,OAAO,KAAK,IAAIA,EAAQ,IAAK,GAAE,MACnC7lR,EAAMgjR,EACd,CAkBI,IADAwB,EAAM,KACCA,EAAI,IAAIqB,CAAO,GAAG,CAGrBC,EAAS,KAAK,IAAI,EAAG,KAAK,MAAMtB,EAAI,SAAQ,EAAKqB,EAAQ,SAAQ,CAAE,CAAC,EAWpE,QAPIG,EAAO,KAAK,KAAK,KAAK,IAAIF,CAAM,EAAI,KAAK,GAAG,EAC5C/1N,EAASi2N,GAAQ,GAAM,EAAIvC,GAAQ,EAAGuC,EAAO,EAAE,EAI/CC,EAAYnD,GAAWgD,CAAM,EAC7BI,EAAYD,EAAU,IAAIJ,CAAO,EAC9BK,EAAU,WAAY,GAAIA,EAAU,GAAG1B,CAAG,GAC7CsB,GAAU/1N,EACVk2N,EAAYnD,GAAWgD,EAAQ,KAAK,QAAQ,EAC5CI,EAAYD,EAAU,IAAIJ,CAAO,EAKjCI,EAAU,OAAQ,IAClBA,EAAYhC,IAEhBjkR,EAAMA,EAAI,IAAIimR,CAAS,EACvBzB,EAAMA,EAAI,IAAI0B,CAAS,CAC1B,CACD,OAAOlmR,CACX,EAQAokR,GAAc,IAAMA,GAAc,OAOlCA,GAAc,OAAS,SAAgByB,EAAS,CAK5C,GAJKrD,GAAOqD,CAAO,IACfA,EAAUhC,GAAUgC,CAAO,GAG3BzD,GAAM,CACN,IAAIC,GAAO,KAAK,SAAWD,GAAK,MAAQA,GAAK,OACzC,KAAK,IACL,KAAK,KACLyD,EAAQ,IACRA,EAAQ,IACpB,EACQ,OAAOhD,GAASR,EAAKD,GAAK,SAAQ,EAAI,KAAK,QAAQ,CACtD,CAED,OAAO,KAAK,IAAI,KAAK,IAAIyD,CAAO,EAAE,IAAIA,CAAO,CAAC,CAClD,EAQAzB,GAAc,IAAMA,GAAc,OAQlCA,GAAc,IAAMA,GAAc,OAMlCA,GAAc,IAAM,UAAe,CAC/B,OAAOvB,GAAS,CAAC,KAAK,IAAK,CAAC,KAAK,KAAM,KAAK,QAAQ,CACxD,EAOAuB,GAAc,IAAM,SAAaxoE,EAAO,CACpC,OAAK4mE,GAAO5mE,CAAK,IACbA,EAAQioE,GAAUjoE,CAAK,GACpBinE,GAAS,KAAK,IAAMjnE,EAAM,IAAK,KAAK,KAAOA,EAAM,KAAM,KAAK,QAAQ,CAC/E,EAOAwoE,GAAc,GAAK,SAAYxoE,EAAO,CAClC,OAAK4mE,GAAO5mE,CAAK,IACbA,EAAQioE,GAAUjoE,CAAK,GACpBinE,GAAS,KAAK,IAAMjnE,EAAM,IAAK,KAAK,KAAOA,EAAM,KAAM,KAAK,QAAQ,CAC/E,EAOAwoE,GAAc,IAAM,SAAaxoE,EAAO,CACpC,OAAK4mE,GAAO5mE,CAAK,IACbA,EAAQioE,GAAUjoE,CAAK,GACpBinE,GAAS,KAAK,IAAMjnE,EAAM,IAAK,KAAK,KAAOA,EAAM,KAAM,KAAK,QAAQ,CAC/E,EAOAwoE,GAAc,UAAY,SAAmB+B,EAAS,CAGlD,OAFI3D,GAAO2D,CAAO,IACdA,EAAUA,EAAQ,UACjBA,GAAW,MAAQ,EACb,KACFA,EAAU,GACRtD,GAAS,KAAK,KAAOsD,EAAU,KAAK,MAAQA,EAAY,KAAK,MAAS,GAAKA,EAAW,KAAK,QAAQ,EAEnGtD,GAAS,EAAG,KAAK,KAAQsD,EAAU,GAAK,KAAK,QAAQ,CACpE,EAQA/B,GAAc,IAAMA,GAAc,UAOlCA,GAAc,WAAa,SAAoB+B,EAAS,CAGpD,OAFI3D,GAAO2D,CAAO,IACdA,EAAUA,EAAQ,UACjBA,GAAW,MAAQ,EACb,KACFA,EAAU,GACRtD,GAAU,KAAK,MAAQsD,EAAY,KAAK,MAAS,GAAKA,EAAW,KAAK,MAAQA,EAAS,KAAK,QAAQ,EAEpGtD,GAAS,KAAK,MAASsD,EAAU,GAAK,KAAK,MAAQ,EAAI,EAAI,GAAI,KAAK,QAAQ,CAC3F,EAQA/B,GAAc,IAAMA,GAAc,WAOlCA,GAAc,mBAAqB,SAA4B+B,EAAS,CAIpE,GAHI3D,GAAO2D,CAAO,IACdA,EAAUA,EAAQ,SACtBA,GAAW,GACPA,IAAY,EACZ,OAAO,KAEP,IAAI7D,EAAO,KAAK,KAChB,GAAI6D,EAAU,GAAI,CACd,IAAI9D,EAAM,KAAK,IACf,OAAOQ,GAAUR,IAAQ8D,EAAY7D,GAAS,GAAK6D,EAAW7D,IAAS6D,EAAS,KAAK,QAAQ,CACzG,KAAe,QAAIA,IAAY,GACZtD,GAASP,EAAM,EAAG,KAAK,QAAQ,EAE/BO,GAASP,IAAU6D,EAAU,GAAK,EAAG,KAAK,QAAQ,CAErE,EAQA/B,GAAc,KAAOA,GAAc,mBAQnCA,GAAc,MAAQA,GAAc,mBAMpCA,GAAc,SAAW,UAAoB,CACzC,OAAK,KAAK,SAEHvB,GAAS,KAAK,IAAK,KAAK,KAAM,EAAK,EAD/B,IAEf,EAMAuB,GAAc,WAAa,UAAsB,CAC7C,OAAI,KAAK,SACE,KACJvB,GAAS,KAAK,IAAK,KAAK,KAAM,EAAI,CAC7C,EAOAuB,GAAc,QAAU,SAAiBp3K,EAAI,CACzC,OAAOA,EAAK,KAAK,UAAW,EAAG,KAAK,UAAS,CACjD,EAMAo3K,GAAc,UAAY,UAAqB,CAC3C,IAAIlqK,EAAK,KAAK,KACVksK,EAAK,KAAK,IACd,MAAO,CACHA,EAAY,IACZA,IAAQ,EAAI,IACZA,IAAO,GAAK,IACZA,IAAO,GACPlsK,EAAY,IACZA,IAAQ,EAAI,IACZA,IAAO,GAAK,IACZA,IAAO,EACf,CACA,EAMAkqK,GAAc,UAAY,UAAqB,CAC3C,IAAIlqK,EAAK,KAAK,KACVksK,EAAK,KAAK,IACd,MAAO,CACHlsK,IAAO,GACPA,IAAO,GAAK,IACZA,IAAQ,EAAI,IACZA,EAAY,IACZksK,IAAO,GACPA,IAAO,GAAK,IACZA,IAAQ,EAAI,IACZA,EAAY,GACpB,CACA,EASAjE,GAAK,UAAY,SAAmB5gH,EAAOghH,EAAUv1K,EAAI,CACrD,OAAOA,EAAKm1K,GAAK,YAAY5gH,EAAOghH,CAAQ,EAAIJ,GAAK,YAAY5gH,EAAOghH,CAAQ,CACpF,EAQAJ,GAAK,YAAc,SAAqB5gH,EAAOghH,EAAU,CACrD,OAAO,IAAIJ,GACP5gH,EAAM,CAAC,EACPA,EAAM,CAAC,GAAM,EACbA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,EACPA,EAAM,CAAC,GAAM,EACbA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAK,GACZghH,CACR,CACA,EAQAJ,GAAK,YAAc,SAAqB5gH,EAAOghH,EAAU,CACrD,OAAO,IAAIJ,GACP5gH,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAM,EACbA,EAAM,CAAC,EACPA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAK,GACZA,EAAM,CAAC,GAAM,EACbA,EAAM,CAAC,EACPghH,CACR,CACA,2DC1yCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBA,MAAMJ,GAENkE,IAAuBC,IAChB,SAASC,GAAUp5F,EAAK,CAC3B,OAAOg1F,GAAK,WAAWh1F,EAAK,GAAM,EAAE,CACxC,CAGA,MAAMq5F,GAAKD,GAAU,kBAAkB,EAEjCE,GAAKF,GAAU,kBAAkB,EAEjCG,GAAKH,GAAU,kBAAkB,EACvC,SAASI,GAASlpR,EAAK,CACnB,OAAOA,EAAI,IAAIA,EAAI,KAAK,EAAE,CAAC,CAC/B,CACA,SAASmpR,GAAMlxR,EAAGs8C,EAAQ60O,EAAU,CAChC,MAAMtlH,EAAQ7rK,EAAE,MAAMs8C,EAAQA,EAAS60O,CAAQ,EAC/C,OAAO1E,GAAK,UAAU,MAAM,KAAK5gH,CAAK,EAAG,GAAM,EAAI,CACvD,CACA,SAASulH,GAAQpxR,EAAGs8C,EAAQ,CACxB,OAAO40O,GAAMlxR,EAAGs8C,EAAQ,CAAC,CAC7B,CACA,SAAS+0O,GAAQrxR,EAAGs8C,EAAQ,CACxB,OAAO40O,GAAMlxR,EAAGs8C,EAAQ,CAAC,CAC7B,CACA,SAASg1O,GAASvpR,EAAK60N,EAAO,CAE1B,OAAOA,IAAU,EAAI70N,EAAMA,EAAI,KAAK60N,CAAK,EAAE,GAAG70N,EAAI,IAAI,GAAK60N,CAAK,CAAC,CACrE,CACA,SAAS20D,GAAUz0R,EAAGC,EAAGy0R,EAAMX,GAAU,kBAAkB,EAAG,CAE1D,IAAIxzR,EAAIP,EAAE,IAAIC,CAAC,EAAE,IAAIy0R,CAAG,EACxBn0R,EAAIA,EAAE,IAAIA,EAAE,KAAK,EAAE,CAAC,EACpB,IAAIK,EAAIX,EAAE,IAAIM,CAAC,EAAE,IAAIm0R,CAAG,EACxB,OAAA9zR,EAAIA,EAAE,IAAIA,EAAE,KAAK,EAAE,CAAC,EACpBA,EAAIA,EAAE,IAAI8zR,CAAG,EACN9zR,CACX,CAGA,SAAS+zR,IAAuBz0R,EAAGC,EAAGC,EAAGC,EAAGE,EAAGK,EAAG,CAC9CL,EAAIA,EAAE,IAAIL,CAAC,EACXU,EAAI4zR,GAAS5zR,EAAE,IAAIL,CAAC,EAAE,IAAIF,CAAC,EAAG,EAAE,EAChC,MAAMkB,EAAIhB,EACV,OAAAA,EAAIA,EAAE,IAAIJ,CAAC,EACXI,EAAIA,EAAE,IAAIH,CAAC,EACXQ,EAAIA,EAAE,IAAI4zR,GAASj0R,EAAG,EAAE,CAAC,EAClB,CAACA,EAAE,IAAIF,CAAC,EAAGO,EAAE,IAAIW,CAAC,CAAC,CAC9B,CACA,SAASqzR,GAA0B1xR,EAAGs8C,EAAQj/C,EAAGK,EAAG,CAChD,OAAO+zR,IAAuBL,GAAQpxR,EAAGs8C,CAAM,EAAG80O,GAAQpxR,EAAGs8C,EAAS,CAAC,EAAG80O,GAAQpxR,EAAGs8C,EAAS,EAAE,EAAG80O,GAAQpxR,EAAGs8C,EAAS,EAAE,EAAGj/C,EAAGK,CAAC,CACpI,CACA,SAASi0R,IAAa3xR,EAAGmlC,EAAMnlC,EAAE,OAAQ,CACrC,GAAImlC,GAAO,EAAG,CACV,MAAMqsP,EAAMR,GAAG,IAAI7rP,EAAM,CAAC,EACpB9nC,EAAI+zR,GAAQpxR,EAAG,CAAC,EAAE,IAAIgxR,EAAE,EACxBtzR,EAAI0zR,GAAQpxR,EAAGmlC,EAAM,CAAC,EACtB9mC,EAAIizR,GAAS5zR,EAAG,EAAE,EAAE,IAAI8zR,CAAG,EAAE,IAAIn0R,CAAC,EAClCe,EAAIkzR,GAASj0R,EAAG,EAAE,EAAE,IAAIK,CAAC,EAAE,IAAI8zR,CAAG,EACxC,OAAOD,GAAUlzR,EAAGD,EAAGozR,CAAG,CAClC,CACI,GAAIrsP,GAAO,EAAG,CACV,MAAMqsP,EAAMR,GAAG,IAAI7rP,EAAM,CAAC,EACpB9nC,EAAIg0R,GAAQrxR,EAAG,CAAC,EACtB,OAAOuxR,GAAUl0R,EAAE,IAAI,CAAC,EAAE,IAAI8nC,CAAG,EAAGksP,GAAQrxR,EAAGmlC,EAAM,CAAC,EAAGqsP,CAAG,CACpE,CACI,GAAIrsP,EAAM,EAAG,CACT,MAAM9nC,EAAI2C,EAAE,CAAC,EACPtC,EAAIsC,EAAEmlC,GAAO,CAAC,EACd9mC,EAAI2B,EAAEmlC,EAAM,CAAC,EACbjoC,EAAIG,GAAKK,GAAK,GACdP,EAAIgoC,GAAO9mC,GAAK,GACtB,OAAO4yR,GAASD,GAAG,IAAI9zR,CAAC,EAAE,IAAI4zR,GAAG,IAAI3zR,CAAC,CAAC,CAAC,EAAE,IAAI6zR,EAAE,CACxD,CACI,OAAOA,EACX,CACA,SAASY,IAAc5xR,EAAGmlC,EAAMnlC,EAAE,OAAQ,CACtC,MAAMwxR,EAAMR,GAAG,IAAI7rP,EAAM,CAAC,EACpB9nC,EAAI+zR,GAAQpxR,EAAG,CAAC,EAAE,IAAI+wR,EAAE,EACxBrzR,EAAI0zR,GAAQpxR,EAAG,CAAC,EAChB3B,EAAI+yR,GAAQpxR,EAAGmlC,EAAM,CAAC,EAAE,IAAIqsP,CAAG,EAC/BpzR,EAAIgzR,GAAQpxR,EAAGmlC,EAAM,EAAE,EAAE,IAAI6rP,EAAE,EACrC,OAAOO,GAAUD,GAASj0R,EAAE,IAAIK,CAAC,EAAG,EAAE,EAAE,IAAI4zR,GAASjzR,EAAG,EAAE,CAAC,EAAE,IAAID,CAAC,EAAGf,EAAE,IAAIi0R,GAAS5zR,EAAE,IAAIszR,EAAE,EAAG,EAAE,CAAC,EAAE,IAAI3yR,CAAC,EAAGmzR,CAAG,CACnH,CACA,SAASK,IAAc7xR,EAAGmlC,EAAMnlC,EAAE,OAAQ,CACtC,MAAMwxR,EAAMR,GAAG,IAAI7rP,EAAM,CAAC,EACpB9nC,EAAI+zR,GAAQpxR,EAAG,CAAC,EAAE,IAAIgxR,EAAE,EACxBtzR,EAAI0zR,GAAQpxR,EAAG,CAAC,EAChB3B,EAAI+yR,GAAQpxR,EAAGmlC,EAAM,CAAC,EAAE,IAAIqsP,CAAG,EAC/BpzR,EAAIgzR,GAAQpxR,EAAGmlC,EAAM,EAAE,EAAE,IAAI6rP,EAAE,EAC/B9zR,EAAIo0R,GAASj0R,EAAE,IAAIK,CAAC,EAAG,EAAE,EAAE,IAAI4zR,GAASjzR,EAAG,EAAE,CAAC,EAAE,IAAID,CAAC,EACrDjB,EAAIo0R,GAAUr0R,EAAGG,EAAE,IAAIi0R,GAAS5zR,EAAE,IAAIszR,EAAE,EAAG,EAAE,CAAC,EAAE,IAAI3yR,CAAC,EAAGmzR,CAAG,EAC3D7zR,EAAIyzR,GAAQpxR,EAAG,EAAE,EAAE,IAAIwxR,CAAG,EAC1B/yR,EAAI2yR,GAAQpxR,EAAG,EAAE,EACjBxB,EAAItB,EAAE,IAAIk0R,GAAQpxR,EAAGmlC,EAAM,EAAE,CAAC,EAAE,IAAIqsP,CAAG,EACvCjzR,EAAIpB,EAAE,IAAIi0R,GAAQpxR,EAAGmlC,EAAM,EAAE,CAAC,EAAE,IAAIqsP,CAAG,EAC7C,OAAOD,GAAUD,GAAS3zR,EAAE,IAAIc,CAAC,EAAG,EAAE,EAAE,IAAI6yR,GAAS9yR,EAAG,EAAE,CAAC,EAAE,IAAID,CAAC,EAAGZ,EAAE,IAAI2zR,GAAS7yR,EAAE,IAAIpB,CAAC,EAAG,EAAE,CAAC,EAAE,IAAImB,CAAC,EAAGgzR,CAAG,CAClH,CACO,SAASM,IAAc9xR,EAAGmlC,EAAMnlC,EAAE,OAAQ,CAC7C,MAAM+xR,EAAOtF,GAAK,WAAW,GAAI,EAAI,EACrC,GAAItnP,GAAO,GACP,OAAIA,GAAO,GACAwsP,IAAa3xR,EAAGmlC,CAAG,EAGnBysP,IAAc5xR,EAAGmlC,CAAG,EAG9B,GAAIA,GAAO,GACZ,OAAO0sP,IAAc7xR,EAAGmlC,CAAG,EAI/B,IAAIloC,EAAI80R,EACJ70R,EAAI60R,EAAK,IAAIhB,EAAE,EAAE,IAAI,GAAG,EACxB5zR,EAAI8zR,GAAS/zR,EAAE,IAAI8zR,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,IAAIA,EAAE,EACvCj0R,EAAI,CAAC0vR,GAAK,MAAOA,GAAK,KAAK,EAC3BzvR,EAAI,CAACyvR,GAAK,MAAOA,GAAK,KAAK,EAC/BxvR,EAAIA,EAAE,IAAI+zR,EAAE,EAAE,IAAII,GAAQpxR,EAAG,CAAC,CAAC,EAC/B,IAAIs8C,EAAS,EAEb,MAAM8K,GAAQjiB,EAAM,GAAM,GAAK,GACzB6sP,EAAS5qO,GAAQjiB,EAAM,EAAK,IAAM,GACxC,GACIloC,EAAIq0R,GAASr0R,EAAE,IAAIC,CAAC,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,CAAC,CAAC,EAAG,EAAE,EAAE,IAAIy0O,EAAE,EACvE7zR,EAAIo0R,GAASp0R,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,EAAG,EAAE,EAAE,IAAIy0O,EAAE,EACjE9zR,EAAIA,EAAE,IAAID,EAAE,CAAC,CAAC,EACdE,EAAIA,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,EAC3Cn/C,EAAIm0R,GAASn0R,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAG,EAAE,EAAE,IAAI+zR,EAAE,EACpCh0R,EAAI20R,GAA0B1xR,EAAGs8C,EAAQv/C,EAAE,CAAC,EAAE,IAAIg0R,EAAE,EAAG9zR,EAAE,IAAID,EAAE,CAAC,CAAC,CAAC,EAClEA,EAAI00R,GAA0B1xR,EAAGs8C,EAAS,GAAIn/C,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAGE,EAAE,IAAIk0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,CAAC,EACzF,CAACn/C,EAAGF,CAAC,EAAI,CAACA,EAAGE,CAAC,EACdm/C,GAAU,SACLA,IAAW8K,GACpB,MAAMoqO,EAAMT,GAAG,IAAI5zR,EAAE,IAAI,GAAI,EAAE,IAAI,CAAC,CAAC,EAErC,OAAAm/C,EAAS01O,EACTh1R,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAE,IAAKmoC,EAAM,EAAK,EAAE,EAC9BpoC,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAE,IAAIC,EAAE,CAAC,CAAC,EACpBA,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAE,IAAID,EAAE,CAAC,CAAC,EACpBE,EAAIq0R,GAASr0R,EAAE,IAAIC,CAAC,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,CAAC,CAAC,EAAG,EAAE,EAAE,IAAIk1O,CAAG,EACxEt0R,EAAIo0R,GAASp0R,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,EAAG,EAAE,EAAE,IAAIk1O,CAAG,EAClEv0R,EAAIA,EAAE,IAAID,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EACrBE,EAAIA,EAAE,IAAIH,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAIq0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,CAAC,EAClDn/C,EAAIm0R,GAASn0R,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAG,EAAE,EAAE,IAAIw0R,CAAG,EACrCz0R,EAAI20R,GAA0B1xR,EAAGs8C,EAAQv/C,EAAE,CAAC,EAAE,IAAIy0R,CAAG,EAAGv0R,EAAE,IAAID,EAAE,CAAC,CAAC,CAAC,EACnEA,EAAI00R,GAA0B1xR,EAAGs8C,EAAS,GAAIn/C,EAAE,IAAIH,EAAE,CAAC,CAAC,EAAGE,EAAE,IAAIk0R,GAAQpxR,EAAGs8C,EAAS,EAAE,CAAC,CAAC,EACzF,CAACn/C,EAAGF,CAAC,EAAI,CAACA,EAAGE,CAAC,EACPo0R,GAAUA,GAAUx0R,EAAE,CAAC,EAAGC,EAAE,CAAC,EAAGw0R,CAAG,EAAE,IAAIP,GAAS/zR,CAAC,EAAE,IAAI4zR,EAAE,CAAC,EAAE,IAAI3zR,CAAC,EAAGo0R,GAAUx0R,EAAE,CAAC,EAAGC,EAAE,CAAC,EAAGw0R,CAAG,EAAE,IAAIv0R,CAAC,EAAGu0R,CAAG,CACvH,CC1KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBO,SAASS,GAAkBzxR,EAAO+7Q,EAAO,CAC5C,OAAIA,IAAU,SACH2V,GAAa1xR,CAAK,EAEtB2xR,GAAa,CAAC3xR,CAAK,EAAG+7Q,CAAK,CACtC,CACA,SAAS6V,IAAmB/0R,EAAGk/Q,EAAO,CAClC,OAAQl/Q,aAAa,cAAgBk/Q,IAAU,WAC1Cl/Q,aAAa,YAAck/Q,IAAU,SACrCl/Q,aAAa,YAAck/Q,IAAU,MAC9C,CACO,SAAS4V,GAAa90R,EAAGk/Q,EAAO,CACnC,GAAIA,IAAU,SACV,MAAM,IAAI,MAAM,2CAA2C,EAQ/D,GANI,MAAM,QAAQl/Q,CAAC,IACfA,EAAI6oP,GAAQ7oP,CAAC,GAEbssD,GAAK,EAAC,QAAQ,OAAO,GACrB0oO,IAA8Bh1R,EAAGk/Q,CAAK,EAEtC6V,IAAmB/0R,EAAGk/Q,CAAK,EAC3B,OAAOl/Q,EAEX,GAAIk/Q,GAAS,MAAQA,IAAU,WAAaA,IAAU,YAClD,OAAO,IAAI,aAAal/Q,CAAC,EAExB,GAAIk/Q,IAAU,QACf,OAAO,IAAI,WAAWl/Q,CAAC,EAEtB,GAAIk/Q,IAAU,OAAQ,CACvB,MAAM+V,EAAO,IAAI,WAAWj1R,EAAE,MAAM,EACpC,QAAS4C,EAAI,EAAGA,EAAIqyR,EAAK,OAAQ,EAAEryR,EAC3B,KAAK,MAAM5C,EAAE4C,CAAC,CAAC,IAAM,IACrBqyR,EAAKryR,CAAC,EAAI,GAGlB,OAAOqyR,CACf,KAEQ,OAAM,IAAI,MAAM,qBAAqB/V,CAAK,EAAE,CAEpD,CAYO,SAAS7yP,IAAM,CAClB,OAAOigC,GAAG,EAAG,SAAS,IAAK,CAC/B,CAiBO,SAASunO,IAAMjgR,EAAMshR,EAAc,CACtC,OAAO5oO,GAAG,EAAG,SAAS,MAAM14C,EAAMshR,CAAY,CAClD,CASO,SAASL,GAAalyR,EAAGwyR,EAAW,QAAS,CAChD,OAAAA,EAAWA,GAAY,QAChB7oO,GAAG,EAAG,SAAS,OAAO3pD,EAAGwyR,CAAQ,CAC5C,CASO,SAASC,GAAa5mH,EAAO2mH,EAAW,QAAS,CACpD,OAAAA,EAAWA,GAAY,QAChB7oO,GAAG,EAAG,SAAS,OAAOkiH,EAAO2mH,CAAQ,CAChD,CACO,SAAS3uH,GAAaxmK,EAAG,CAE5B,OAAIssD,GAAK,EAAC,SAAS,cAAgB,KACxBA,GAAK,EAAC,SAAS,aAAatsD,CAAC,EAG7BkvR,GAAoBlvR,CAAC,CAEpC,CAoBO,SAAS6oP,GAAQt9O,EAAK9H,EAAS,GAAI4xR,EAAiB,GAAO,CAI9D,GAHI5xR,GAAU,OACVA,EAAS,CAAE,GAEX,OAAO8H,GAAQ,WAAa,OAAOA,GAAQ,UAC3C,OAAOA,GAAQ,UAAY+pR,GAAe/pR,CAAG,GAAKA,GAAO,MACzDi7J,GAAaj7J,CAAG,GAAK8pR,EACrB5xR,EAAO,KAAK8H,CAAG,UAEV,MAAM,QAAQA,CAAG,GAAKi7J,GAAaj7J,CAAG,EAC3C,QAAS3I,EAAI,EAAGA,EAAI2I,EAAI,OAAQ,EAAE3I,EAC9BimP,GAAQt9O,EAAI3I,CAAC,EAAGa,EAAQ4xR,CAAc,MAGzC,CACD,IAAIE,EAAW,GACf,UAAWltR,KAAO,OAAO,KAAKkD,CAAG,EAEzB,qBAAqB,KAAKlD,CAAG,IAC7BktR,EAAW,KAAK,IAAIA,EAAU,OAAOltR,CAAG,CAAC,GAGjD,QAASzF,EAAI,EAAGA,GAAK2yR,EAAU3yR,IAE3BimP,GAAQt9O,EAAI3I,CAAC,EAAGa,EAAQ4xR,CAAc,CAElD,CACI,OAAO5xR,CACX,CCpLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBO,MAAM+xR,GAAS,CAClB,YAAYC,EAAc/hR,EAAQ,CAC9B,KAAK,aAAe+hR,EACpB,KAAK,OAAS/hR,EACVA,GAAU,OACV,KAAK,OAAS,IAAI3H,IAE9B,CACI,cAAcozQ,EAAYuW,EAAQt0R,EAAG,CACjC,IAAI83I,EACJ,MAAMy8I,EAAsB,IAAM,CAC9Bz8I,EAAU93I,EAAG,CAChB,EACD,IAAI2xB,EACJ,MAAM00C,EAAQmuN,GAAU,EACxB,GAAI,KAAK,aAAa,iBAClB7iQ,EAAQ,KAAK,aAAa,KAAK4iQ,CAAmB,MAEjD,CACDA,EAAqB,EACrB,UAAW3sP,KAAUkwG,EACjBlwG,EAAO,SAAU,EAErBjW,EAAQ,QAAQ,QAAQ,CAAE,SAAU6iQ,GAAQ,EAAKnuN,EAAO,CACpE,CACQ,GAAInb,GAAK,EAAC,QAAQ,8BAA8B,EAC5C,QAAS1pD,EAAI,EAAGA,EAAIs2I,EAAQ,OAAQt2I,IAAK,CACrC,MAAMomC,EAASkwG,EAAQt2I,CAAC,EAGxBomC,EAAO,KAAI,EAAG,KAAK6sP,GAAc,CAC7BC,IAA0BD,EAAY7sP,EAAO,MAAOm2O,CAAU,CAClF,CAAiB,CACjB,CAWQ,MATsB,CAClB,WAAAA,EACA,QAAAjmI,EACA,OAAAw8I,EACA,OAAQ3iQ,EAAM,KAAKgjQ,GAAUA,EAAO,QAAQ,EAC5C,UAAWhjQ,EAAM,KAAKgjQ,GAAUA,EAAO,qBAAuB,KAC1DA,EAAO,oBAAqB,EAC5B,EAAE,CACT,CAET,CACI,iBAAiBC,EAAe,CAC5B,KAAM,CAAE,WAAA7W,EAAY,QAAAjmI,EAAS,OAAA+8I,EAAQ,OAAAP,EAAQ,UAAAQ,CAAS,EAAKF,EAC3D98I,EAAQ,QAAQz1I,GAAU,CACtB,QAAQ,IAAI,CAACA,EAAO,KAAI,EAAIwyR,EAAQC,CAAS,CAAC,EAAE,KAAKC,GAAkB,CACnE,KAAK,OAAO,iBAAiBhX,EAAY17Q,EAAQ0yR,EAAe,CAAC,EAAGA,EAAe,CAAC,EAAGT,EAAQS,EAAe,CAAC,CAAC,CAChI,CAAa,CACb,CAAS,CACT,CACA,CACO,SAASL,IAA0B7U,EAAM/B,EAAOC,EAAY,CAC/D,GAAID,IAAU,UAEV,MAAO,GAEX,QAASt8Q,EAAI,EAAGA,EAAIq+Q,EAAK,OAAQr+Q,IAAK,CAClC,MAAMsX,EAAM+mQ,EAAKr+Q,CAAC,EAClB,GAAI,MAAMsX,CAAG,GAAK,CAAC,SAASA,CAAG,EAE3B,eAAQ,KAAK,SAASA,CAAG,sBAAsBilQ,CAAU,GAAG,EACrD,EAEnB,CACI,MAAO,EACX,CACO,IAAAiX,IAAA,KAAa,CAChB,iBAAiBhsR,EAAM3G,EAAQw9Q,EAAMgV,EAAQP,EAAQQ,EAAW,CAC5D,MAAMx9Q,EAAO,OAAOu9Q,GAAW,SAAWI,GAAc,GAAGJ,CAAM,KAAM,CAAC,EACpEA,EAAO,MACLK,EAAaD,GAAcjsR,EAAM,EAAE,EACnCo2Q,EAAO/8Q,EAAO,KACd+H,EAAO/H,EAAO,KACdw7Q,EAAQoX,GAAc5yR,EAAO,MAAM,SAAU,EAAE,EAAE,EACvD,IAAI8yR,EAAyB,GAC7B,UAAWnsR,KAAQsrR,EAAQ,CACvB,MAAMl2Q,EAAQk2Q,EAAOtrR,CAAI,EACzB,GAAIoV,GAAS,KAAM,CAGf,MAAMg3Q,EAAah3Q,EAAM,OAAS/b,EAAO,MACnCgzR,EAAYD,EAAW,OAC7BD,GACI,GAAGnsR,CAAI,KAAKqsR,CAAS,KAAKA,EAAY,EAAID,EAAa,EAAE,GAC7E,CACA,CACQ,QAAQ,IAAI,KAAKF,CAAU,MAAO59Q,CAAI,MAAO8nQ,CAAI,KAAKvB,CAAK,MAAOzzQ,CAAI,MAAO+qR,CAAsB,MAAOL,CAAS,GAAI,mBAAoB,YAAa,aAAc,gBAAiB,eAAgB,kBAAkB,CACjO,CACA,EC9GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBO,SAASQ,IAAqBC,EAAMC,EAAI/2R,EAAG,CAG9C,MAAMg3R,EAAe,CAAE,EACjBC,EAAa,CAAE,EACrB,QAASl0R,EAAI,EAAGA,EAAIg0R,EAAG,OAAQh0R,IAC3Bi0R,EAAaD,EAAGh0R,CAAC,EAAE,EAAE,EAAI,GAE7B,QAASA,EAAI,EAAGA,EAAI+zR,EAAK,OAAQ/zR,IAAK,CAClC,MAAMggB,EAAO+zQ,EAAK/zR,CAAC,EACbm0R,EAAan0Q,EAAK,OACxB,UAAW47N,KAAau4C,EAAY,CAChC,MAAMv3Q,EAAQu3Q,EAAWv4C,CAAS,EAClC,IAAIw4C,EAAgB,GACpB,QAASnW,EAAI,EAAGA,EAAI+V,EAAG,OAAQ/V,IAC3B,GAAIgW,EAAar3Q,EAAM,EAAE,EAAG,CACxBoD,EAAK,QAAQ,QAAQomB,GAAU6tP,EAAa7tP,EAAO,EAAE,EAAI,EAAI,EAC7DguP,EAAgB,GAChBF,EAAWl0Q,EAAK,EAAE,EAAI,GACtB,KACpB,CAEY,GAAIo0Q,EACA,KAEhB,CACA,CAEI,MAAMC,EAAiB,CAAE,EACzBA,EAAep3R,EAAE,EAAE,EAAI,GACvB,MAAMq3R,EAAW,CAAE,EACnB,QAASt0R,EAAI+zR,EAAK,OAAS,EAAG/zR,GAAK,EAAGA,IAAK,CACvC,MAAMggB,EAAO+zQ,EAAK/zR,CAAC,EACbm0R,EAAan0Q,EAAK,OAExB,QAASi+P,EAAI,EAAGA,EAAIj+P,EAAK,QAAQ,OAAQi+P,IACrC,GAAIoW,EAAer0Q,EAAK,QAAQi+P,CAAC,EAAE,EAAE,EAAG,CACpC,UAAWriC,KAAau4C,EACpBE,EAAeF,EAAWv4C,CAAS,EAAE,EAAE,EAAI,GAC3C04C,EAASt0Q,EAAK,EAAE,EAAI,GAExB,KAChB,CAEA,CAEI,MAAMu0Q,EAAe,CAAE,EACvB,QAASv0R,EAAI,EAAGA,EAAI+zR,EAAK,OAAQ/zR,IAAK,CAClC,MAAMggB,EAAO+zQ,EAAK/zR,CAAC,EACnB,GAAIk0R,EAAWl0Q,EAAK,EAAE,GAAKs0Q,EAASt0Q,EAAK,EAAE,EAAG,CAE1C,MAAMw0Q,EAAe,CAAE,EACvB,UAAW54C,KAAa57N,EAAK,OAAQ,CACjC,MAAMy0Q,EAAYz0Q,EAAK,OAAO47N,CAAS,EACnCq4C,EAAaQ,EAAU,EAAE,IACzBD,EAAa54C,CAAS,EAAI64C,EAE9C,CAEY,MAAMC,EAAa,OAAO,OAAO,GAAI10Q,CAAI,EACzC00Q,EAAW,OAASF,EACpBE,EAAW,QAAU10Q,EAAK,QAC1Bu0Q,EAAa,KAAKG,CAAU,CACxC,CACA,CACI,OAAOH,CACX,CAQO,SAASI,IAAuBC,EAA8BL,EAAcM,EAAM7kQ,EAAK,CAE1F,QAAShwB,EAAIu0R,EAAa,OAAS,EAAGv0R,GAAK,EAAGA,IAAK,CAC/C,MAAMggB,EAAOu0Q,EAAav0R,CAAC,EACrB80R,EAAM,CAAE,EAYd,GAXA90Q,EAAK,QAAQ,QAAQ5e,GAAK,CACtB,MAAM2zR,EAAaH,EAA6BxzR,EAAE,EAAE,EAChD2zR,GAAc,KACdD,EAAI,KAAKC,CAAU,EAKnBD,EAAI,KAAK,IAAI,CAE7B,CAAS,EACG90Q,EAAK,UAAY,KACjB,MAAM,IAAI,MAAM,4DACLA,EAAK,UAAU,GAAG,EAGjC,MAAMg1Q,EAAiBh1Q,EAAK,SAAS80Q,CAAG,EACxC,UAAWl5C,KAAa57N,EAAK,OAAQ,CACjC,GAAI,EAAE47N,KAAao5C,GACf,MAAM,IAAI,MAAM,iCAAiCp5C,CAAS,gCACxB,OAAO,KAAKo5C,CAAc,CAAC,GAAG,EAGpE,MAAMC,EAAKJ,EAAK,IAAMG,EAAep5C,CAAS,EAAC,CAAE,EACjD,GAAIq5C,EAAG,QAAU,UACb,MAAM,IAAI,MAAM,4BAA4Bj1Q,EAAK,UAAU,2BACpD47N,CAAS,wCAAwCq5C,EAAG,KAAK,GAAG,EAEvE,MAAMj4R,EAAIgjB,EAAK,OAAO47N,CAAS,EAC/B,GAAI,CAACs5C,GAAiBD,EAAG,MAAOj4R,EAAE,KAAK,EACnC,MAAM,IAAI,MAAM,4BAA4BgjB,EAAK,UAAU,4BACnD47N,CAAS,gBAAgBq5C,EAAG,KAAK,mDACVj4R,EAAE,KAAK,GAAG,EAE7C,GAAI43R,EAA6B53R,EAAE,EAAE,GAAK,KACtC43R,EAA6B53R,EAAE,EAAE,EAAIi4R,MAEpC,CACD,MAAME,EAAcP,EAA6B53R,EAAE,EAAE,EACrD43R,EAA6B53R,EAAE,EAAE,EAAIgzB,EAAImlQ,EAAaF,CAAE,EACxDE,EAAY,QAAS,CACrC,CACA,CACA,CACA,CCpJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBA,MAAMC,GAAwB,GAExBC,GAA6B,EAE7BC,GAAwB,EACvB,SAASC,IAAelX,EAAMhC,EAAOC,EAAOkZ,EAAS,CACxD,MAAM1W,EAAUD,GAAexC,CAAK,EAC9BoZ,EAAYC,IAAwBrX,EAAMhC,EAAOC,EAAOwC,CAAO,EAC/DlB,EAAOvB,EAAM,OACbsZ,EAAYC,GAAkBvX,EAAMhC,EAAOC,EAAOwC,EAAS2W,CAAS,EACpEn0P,EAAQ,CAAC,QAAQ,EACvB,OAAIk0P,IACAl0P,EAAM,KAAK,YAAYg7O,CAAK,EAAE,EAC9Bh7O,EAAM,KAAK,WAAWs8O,CAAI,EAAE,EAC5Bt8O,EAAM,KAAK,aAAa+6O,CAAK,GAAG,EAChC/6O,EAAM,KAAK,WAAW,GAE1BA,EAAM,KAAKq0P,EAAU,IAAIp5R,GAAK,OAASA,CAAC,EAAE,KAAK;AAAA,CAAI,CAAC,EAC7C+kC,EAAM,KAAK;AAAA,CAAI,CAC1B,CACA,SAASo0P,IAAwBrX,EAAMhC,EAAOC,EAAOwC,EAAS,CAC1D,MAAMtiR,EAAIygR,GAAcZ,CAAK,EACvBwZ,EAAU/W,EAAQA,EAAQ,OAAS,CAAC,EACpC2W,EAAY,IAAI,MAAMI,CAAO,EAAE,KAAK,CAAC,EACrCjY,EAAOvB,EAAM,OACbyZ,EAAiBxZ,IAAU,YAAcyZ,GAAoB1X,CAAI,EAAIA,EAC3E,GAAIT,EAAO,EACP,QAAS/Q,EAAM,EAAGA,EAAMrwQ,EAAIq5R,EAAShpB,IAAO,CACxC,MAAMxwN,EAASwwN,EAAMgpB,EACrB,QAAS5X,EAAI,EAAGA,EAAI4X,EAAS5X,IACzBwX,EAAUxX,CAAC,EAAI,KAAK,IAAIwX,EAAUxX,CAAC,EAAG+X,GAAYF,EAAez5O,EAAS4hO,CAAC,EAAG,EAAG3B,CAAK,EAAE,MAAM,CAE9G,CAEI,OAAOmZ,CACX,CACA,SAASO,GAAYluR,EAAKmuR,EAAK3Z,EAAO,CAClC,IAAI4Z,EACJ,OAAI,MAAM,QAAQpuR,CAAG,EACjBouR,EAAS,GAAG,WAAWpuR,EAAI,CAAC,EAAE,QAAQwtR,EAAqB,CAAC,CAAC,MACtD,WAAWxtR,EAAI,CAAC,EAAE,QAAQwtR,EAAqB,CAAC,CAAC,IAEnDvxP,GAASj8B,CAAG,EACjBouR,EAAS,IAAIpuR,CAAG,IAEXw0Q,IAAU,OACf4Z,EAASC,GAAgBruR,CAAG,EAG5BouR,EAAS,WAAWpuR,EAAI,QAAQwtR,EAAqB,CAAC,EAAE,SAAU,EAE/DhY,GAAS4Y,EAAQD,CAAG,CAC/B,CACA,SAASE,GAAgBr5R,EAAG,CACxB,OAAOA,IAAM,EAAI,QAAU,MAC/B,CACA,SAAS84R,GAAkBvX,EAAMhC,EAAOC,EAAOwC,EAAS2W,EAAW/sH,EAAS,GAAM,CAC9E,MAAM0tH,EAAoB9Z,IAAU,YAAc,EAAI,EAChD1zQ,EAAOyzQ,EAAM,CAAC,EACduB,EAAOvB,EAAM,OACnB,GAAIuB,IAAS,EAAG,CACZ,GAAItB,IAAU,YAAa,CACvB,MAAM+Z,EAAeN,GAAoB1X,CAAI,EAC7C,MAAO,CAAC2X,GAAYK,EAAa,CAAC,EAAG,EAAG/Z,CAAK,CAAC,CAC1D,CACQ,OAAIA,IAAU,OACH,CAAC6Z,GAAgB9X,EAAK,CAAC,CAAC,CAAC,EAE7B,CAACA,EAAK,CAAC,EAAE,SAAQ,CAAE,CAClC,CACI,GAAIT,IAAS,EAAG,CACZ,GAAIh1Q,EAAOwsR,GAAuB,CAC9B,MAAMkB,EAAgBjB,GAA6Be,EACnD,IAAIG,EAAY,MAAM,KAAKlY,EAAK,MAAM,EAAGiY,CAAa,CAAC,EACnDE,EAAW,MAAM,KAAKnY,EAAK,OAAOz1Q,EAAOysR,IAA8Be,EAAmBxtR,EAAOwtR,CAAiB,CAAC,EACvH,OAAI9Z,IAAU,cACVia,EAAYR,GAAoBQ,CAAS,EACzCC,EAAWT,GAAoBS,CAAQ,GAEpC,CACH,IACID,EAAU,IAAI,CAACv5R,EAAGgD,IAAMg2R,GAAYh5R,EAAGy4R,EAAUz1R,CAAC,EAAGs8Q,CAAK,CAAC,EACtD,KAAK,IAAI,EACd,UACAka,EACK,IAAI,CAACx5R,EAAGgD,IAAMg2R,GAAYh5R,EAAGy4R,EAAU7sR,EAAOysR,GAA6Br1R,CAAC,EAAGs8Q,CAAK,CAAC,EACrF,KAAK,IAAI,EACd,GACP,CACb,CAGQ,MAAO,CACH,KAHgBA,IAAU,YAAcyZ,GAAoB1X,CAAI,EAChE,MAAM,KAAKA,CAAI,GAGC,IAAI,CAACrhR,EAAGgD,IAAMg2R,GAAYh5R,EAAGy4R,EAAUz1R,CAAC,EAAGs8Q,CAAK,CAAC,EACxD,KAAK,IAAI,EACd,GACP,CACT,CAEI,MAAMma,EAAWpa,EAAM,MAAM,CAAC,EACxBqa,EAAa5X,EAAQ,MAAM,CAAC,EAC5B6X,EAAS7X,EAAQ,CAAC,EAAIsX,EACtB90P,EAAQ,CAAE,EAChB,GAAI14B,EAAOwsR,GAAuB,CAC9B,QAASp1R,EAAI,EAAGA,EAAIq1R,GAA4Br1R,IAAK,CACjD,MAAM6kE,EAAQ7kE,EAAI22R,EACZxvO,EAAM0d,EAAQ8xN,EACpBr1P,EAAM,KAAK,GAAGs0P,GAAkBvX,EAAK,MAAMx5M,EAAO1d,CAAG,EAAGsvO,EAAUna,EAAOoa,EAAYjB,EAAW,EAAK,CAAc,CAC/H,CACQn0P,EAAM,KAAK,KAAK,EAChB,QAASthC,EAAI4I,EAAOysR,GAA4Br1R,EAAI4I,EAAM5I,IAAK,CAC3D,MAAM6kE,EAAQ7kE,EAAI22R,EACZxvO,EAAM0d,EAAQ8xN,EACpBr1P,EAAM,KAAK,GAAGs0P,GAAkBvX,EAAK,MAAMx5M,EAAO1d,CAAG,EAAGsvO,EAAUna,EAAOoa,EAAYjB,EAAWz1R,IAAM4I,EAAO,EAAe,CACxI,CACA,KAEQ,SAAS5I,EAAI,EAAGA,EAAI4I,EAAM5I,IAAK,CAC3B,MAAM6kE,EAAQ7kE,EAAI22R,EACZxvO,EAAM0d,EAAQ8xN,EACpBr1P,EAAM,KAAK,GAAGs0P,GAAkBvX,EAAK,MAAMx5M,EAAO1d,CAAG,EAAGsvO,EAAUna,EAAOoa,EAAYjB,EAAWz1R,IAAM4I,EAAO,EAAe,CACxI,CAEI,MAAMguR,EAAMhZ,IAAS,EAAI,IAAM,GAC/Bt8O,EAAM,CAAC,EAAI,KAAO14B,EAAO,EAAI04B,EAAM,CAAC,EAAIs1P,EAAM,IAC9C,QAAS52R,EAAI,EAAGA,EAAIshC,EAAM,OAAS,EAAGthC,IAClCshC,EAAMthC,CAAC,EAAI,IAAMshC,EAAMthC,CAAC,EAAI42R,EAEhC,IAAIC,EAAa;AAAA,EACjB,QAAS72R,EAAI,EAAGA,EAAI49Q,EAAM59Q,IACtB62R,GAAc;AAAA,EAElB,OAAAv1P,EAAMA,EAAM,OAAS,CAAC,EAClB,IAAMA,EAAMA,EAAM,OAAS,CAAC,EAAI,KAAOonI,EAAS,GAAKmuH,GAClDv1P,CACX,CACA,SAASy0P,GAAoB1X,EAAM,CAC/B,MAAMyY,EAAgB,CAAE,EACxB,QAAS92R,EAAI,EAAGA,EAAIq+Q,EAAK,OAAQr+Q,GAAK,EAClC82R,EAAc,KAAK,CAACzY,EAAKr+Q,CAAC,EAAGq+Q,EAAKr+Q,EAAI,CAAC,CAAC,CAAC,EAE7C,OAAO82R,CACX,CCjKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BO,MAAMC,EAAa,CACtB,YAAY1a,EAAOC,EAAOvyO,EAAQ,CAI9B,GAHA,KAAK,MAAQuyO,EACb,KAAK,MAAQD,EAAM,MAAO,EAC1B,KAAK,KAAO2a,GAAmB3a,CAAK,EAChCtyO,GAAU,KAAM,CAChB,MAAMvtC,EAAIutC,EAAO,OACjBktP,EAAYz6R,IAAM,KAAK,KAAM,IAAM,qBAAqBA,CAAC,oDAC3B,KAAK,IAAI,IAAI,CACvD,CACQ,GAAI8/Q,IAAU,YACV,MAAM,IAAI,MAAM,4JAEkB,EAEtC,KAAK,OAASvyO,GAAUmtP,GAAuB5a,EAAO,KAAK,IAAI,EAC/D,KAAK,QAAUuC,GAAexC,CAAK,CAC3C,CASI,IAAI97Q,KAAUk/Q,EAAM,CACZA,EAAK,SAAW,IAChBA,EAAO,CAAC,CAAC,GAEbwX,EAAYxX,EAAK,SAAW,KAAK,KAAM,IAAM,uCAAuCA,EAAK,MAAM,0BACxE,KAAK,IAAI,GAAG,EACnC,MAAMh8Q,EAAQ,KAAK,WAAWg8Q,CAAI,EAClC,KAAK,OAAOh8Q,CAAK,EAAIlD,CAC7B,CAQI,OAAOk/Q,EAAM,CACLA,EAAK,SAAW,IAChBA,EAAO,CAAC,CAAC,GAEb,IAAIz/Q,EAAI,EACR,UAAWm3R,KAAO1X,EAAM,CACpB,GAAI0X,EAAM,GAAKA,GAAO,KAAK,MAAMn3R,CAAC,EAAG,CACjC,MAAM8iC,EAAM,qCAAqC28O,CAAI,oBAC/B,KAAK,KAAK,GAChC,MAAM,IAAI,MAAM38O,CAAG,CACnC,CACY9iC,GACZ,CACQ,IAAIyD,EAAQg8Q,EAAKA,EAAK,OAAS,CAAC,EAChC,QAASz/Q,EAAI,EAAGA,EAAIy/Q,EAAK,OAAS,EAAG,EAAEz/Q,EACnCyD,GAAS,KAAK,QAAQzD,CAAC,EAAIy/Q,EAAKz/Q,CAAC,EAErC,OAAO,KAAK,OAAOyD,CAAK,CAChC,CACI,WAAWg8Q,EAAM,CACb,GAAI,KAAK,OAAS,EACd,MAAO,GAEN,GAAI,KAAK,OAAS,EACnB,OAAOA,EAAK,CAAC,EAEjB,IAAIh8Q,EAAQg8Q,EAAKA,EAAK,OAAS,CAAC,EAChC,QAASz/Q,EAAI,EAAGA,EAAIy/Q,EAAK,OAAS,EAAG,EAAEz/Q,EACnCyD,GAAS,KAAK,QAAQzD,CAAC,EAAIy/Q,EAAKz/Q,CAAC,EAErC,OAAOyD,CACf,CACI,WAAWA,EAAO,CACd,GAAI,KAAK,OAAS,EACd,MAAO,CAAE,EAER,GAAI,KAAK,OAAS,EACnB,MAAO,CAACA,CAAK,EAEjB,MAAMg8Q,EAAO,IAAI,MAAM,KAAK,MAAM,MAAM,EACxC,QAASz/Q,EAAI,EAAGA,EAAIy/Q,EAAK,OAAS,EAAG,EAAEz/Q,EACnCy/Q,EAAKz/Q,CAAC,EAAI,KAAK,MAAMyD,EAAQ,KAAK,QAAQzD,CAAC,CAAC,EAC5CyD,GAASg8Q,EAAKz/Q,CAAC,EAAI,KAAK,QAAQA,CAAC,EAErC,OAAAy/Q,EAAKA,EAAK,OAAS,CAAC,EAAIh8Q,EACjBg8Q,CACf,CACI,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,MAC1B,CAMI,UAAW,CACP,OAAO2X,GAAS,EAAG,WAAW,KAAK,OAAQ,KAAK,MAAO,KAAK,KAAK,CACzE,CACA,CAEA,IAAIA,GAAY,KAEZC,GAAY,KAYT,SAASC,IAAiB/lR,EAAI,CACjC6lR,GAAY7lR,CAChB,CAMO,SAASgmR,IAAar4Q,EAAS,CAClCm4Q,GAAYn4Q,CAChB,CAsBO,MAAMs4Q,EAAO,CAChB,YAAYnb,EAAOC,EAAOJ,EAAQjzP,EAAI,CAElC,KAAK,KAAO,GACZ,KAAK,mBAAqB,GAC1B,KAAK,MAAQozP,EAAM,MAAO,EAC1B,KAAK,MAAQC,GAAS,UACtB,KAAK,KAAO0a,GAAmB3a,CAAK,EACpC,KAAK,QAAUwC,GAAexC,CAAK,EACnC,KAAK,OAASH,EACd,KAAK,GAAKjzP,EACV,KAAK,SAAY,KAAK,KAAO,EAAI,KAAK,KAAK,SAAU,EAAG,QAChE,CACI,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,MAC1B,CAMI,MAAM,QAAS,CACX,MAAMo1P,EAAO,MAAM,KAAK,KAAM,EAC9B,OAAOgZ,GAAU,OAAO,KAAK,MAAO,KAAK,MAAOhZ,CAAI,CAC5D,CAKI,YAAa,CACT,OAAOgZ,GAAU,OAAO,KAAK,MAAO,KAAK,MAAO,KAAK,UAAU,CACvE,CAOI,MAAM,OAAQ,CACV,MAAMhZ,EAAO,MAAM,KAAK,KAAM,EAC9B,OAAOY,GAAc,KAAK,MAAOZ,EAAM,KAAK,QAAU,WAAW,CACzE,CAOI,WAAY,CACR,OAAOY,GAAc,KAAK,MAAO,KAAK,WAAY,KAAK,QAAU,WAAW,CACpF,CAOI,MAAM,MAAO,CACT,KAAK,gBAAiB,EACtB,MAAMroQ,EAAOwgR,GAAS,EAAG,KAAK,KAAK,MAAM,EACzC,GAAI,KAAK,QAAU,SAAU,CACzB,MAAMxrH,EAAQ,MAAMh1J,EACpB,GAAI,CACA,OAAOg1J,EAAM,IAAInuK,GAAKg6R,GAAkBh6R,CAAC,CAAC,CAC1D,MACuB,CACP,MAAM,IAAI,MAAM,+FACqC,CACrE,CACA,CACQ,OAAOmZ,CACf,CAmCI,UAAUnN,EAAS,CACf,YAAK,gBAAiB,EACf2tR,GAAS,EAAG,UAAU,KAAK,OAAQ3tR,CAAO,CACzD,CAOI,UAAW,CACP,KAAK,gBAAiB,EACtB,MAAMmN,EAAOwgR,GAAS,EAAG,SAAS,KAAK,MAAM,EAC7C,GAAI,KAAK,QAAU,SACf,GAAI,CACA,OAAOxgR,EAAK,IAAInZ,GAAKg6R,GAAkBh6R,CAAC,CAAC,CACzD,MACuB,CACP,MAAM,IAAI,MAAM,+FACqC,CACrE,CAEQ,OAAOmZ,CACf,CAEI,MAAM,OAAQ,CACV,KAAK,gBAAiB,EACtB,MAAMA,EAAO,MAAMwgR,GAAS,EAAG,KAAK,KAAK,MAAM,EAC/C,OAAI,KAAK,QAAU,SACRxgR,EAGA,IAAI,WAAWA,EAAK,MAAM,CAE7C,CAMI,SAAU,CACF,KAAK,aAGL,KAAK,WACL,KAAK,UAAU,QAAS,EAE5BwgR,GAAW,EAAC,cAAc,IAAI,EAC9B,KAAK,mBAAqB,GAClC,CACI,IAAI,YAAa,CACb,OAAO,KAAK,kBACpB,CACI,iBAAkB,CACd,GAAI,KAAK,WACL,MAAM,IAAI,MAAM,qBAAqB,CAEjD,CASI,MAAM5B,EAAU,GAAO,CACnB,OAAO6B,GAAU,MAAM,KAAM7B,CAAO,CAC5C,CAKI,OAAQ,CACJ,YAAK,gBAAiB,EACf6B,GAAU,MAAM,IAAI,CACnC,CAMI,SAAS7B,EAAU,GAAO,CACtB,MAAMnX,EAAO,KAAK,SAAU,EAC5B,OAAOkX,IAAelX,EAAM,KAAK,MAAO,KAAK,MAAOmX,CAAO,CACnE,CACI,KAAKlZ,EAAO,CACR,YAAK,gBAAiB,EACf+a,GAAU,KAAK,KAAM/a,CAAK,CACzC,CACI,SAASob,EAAY,GAAMlwR,EAAM80Q,EAAO,CACpC,YAAK,gBAAiB,EACf8a,GAAW,EAAC,aAAa,KAAMM,EAAWlwR,EAAM80Q,CAAK,CACpE,CACA,CACA,OAAO,eAAekb,GAAQ,OAAO,YAAa,CAC9C,MAAQniR,GAMG,CAAC,CAACA,GAAYA,EAAS,MAAQ,MAAQA,EAAS,UAAY,MAC/DA,EAAS,iBAAmB,IAExC,CAAC,EACM,SAASsiR,KAAuB,CAInC,OAAO/lC,GAAU,SAAU,IAChB4lC,EACV,CACL,CAEAG,IAAsB,EAMf,MAAMC,WAAiBJ,EAAO,CACjC,YAAYK,EAAcH,EAAWlwR,EAAMswR,EAAU,CACjD,MAAMD,EAAa,MAAOA,EAAa,MAAOA,EAAa,OAAQC,CAAQ,EAC3E,KAAK,UAAYJ,EACjB,KAAK,KAAOlwR,CACpB,CASI,OAAO85E,EAAU,CACb,GAAIA,EAAS,QAAU,KAAK,MACxB,MAAM,IAAI,MAAM,2BAA2BA,EAAS,KAAK,yBAClC,KAAK,KAAK,cAAc,EAEnD,GAAI,CAAC4zM,GAAiB5zM,EAAS,MAAO,KAAK,KAAK,EAC5C,MAAM,IAAI,MAAM,2BAA2BA,EAAS,KAAK,yBAClC,KAAK,KAAK,cAAc,EAEnD81M,GAAW,EAAC,cAAc,IAAI,EAC9B,KAAK,OAAS91M,EAAS,OACvB81M,KAAY,OAAO,KAAM,IAAmB,CACpD,CACI,SAAU,CACNA,GAAW,EAAC,gBAAgB,IAAI,EAChC,KAAK,mBAAqB,EAClC,CACA,CACA,OAAO,eAAeQ,GAAU,OAAO,YAAa,CAChD,MAAQviR,GACGA,aAAoBmiR,IAAUniR,EAAS,QAAU,MACpDA,EAAS,kBAAkB,QAEvC,CAAC,EC1bD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,IAAI0iR,IACV,SAAUA,EAAM,CACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,KACbA,EAAK,GAAQ,IACjB,GAAGA,KAASA,GAAO,GAAG,EAGtB,IAAIC,IACH,SAAUA,EAAmB,CAC1BA,EAAkB,QAAa,UAC/BA,EAAkB,MAAW,QAC7BA,EAAkB,KAAU,QAC5BA,EAAkB,UAAe,WACrC,GAAGA,KAAsBA,GAAoB,GAAG,EAChD,IAAIC,IACH,SAAUA,EAAkB,CACzBA,EAAiB,QAAa,UAC9BA,EAAiB,MAAW,QAC5BA,EAAiB,KAAU,OAC3BA,EAAiB,UAAe,WACpC,GAAGA,KAAqBA,GAAmB,GAAG,EAC9C,IAAIC,IACH,SAAUA,EAAqB,CAC5BA,EAAoB,QAAa,UACjCA,EAAoB,MAAW,UAC/BA,EAAoB,KAAU,UAC9BA,EAAoB,UAAe,WACvC,GAAGA,KAAwBA,GAAsB,GAAG,EACpD,IAAIC,IACH,SAAUA,EAAuB,CAC9BA,EAAsB,QAAa,YACnCA,EAAsB,MAAW,YACjCA,EAAsB,KAAU,YAChCA,EAAsB,UAAe,WACzC,GAAGA,KAA0BA,GAAwB,GAAG,EACxD,MAAMC,IAAgB,CAClB,QAAWF,GACX,MAASF,GACT,KAAQC,GACR,UAAaE,EACjB,EACO,SAASE,GAAW5rR,EAAOC,EAAO,CACrC,GAAID,IAAU,UAAYC,IAAU,SAAU,CAC1C,GAAID,IAAU,UAAYC,IAAU,SAChC,MAAO,SAEX,MAAM,IAAI,MAAM,kBAAkBD,CAAK,SAASC,CAAK,EAAE,CAC/D,CACI,OAAO0rR,IAAc3rR,CAAK,EAAEC,CAAK,CACrC,CAKO,SAAS4rR,GAAYvuP,EAAQ,CAChC,OAAOA,GAAU,MAAQ,OAAOA,GAAW,UAAY,YAAaA,GAChEA,EAAO,mBAAmB,YAClC,CACO,SAASwuP,GAAaxuP,EAAQ,CACjC,OAAO,OAAO,UAAc,KAAeA,GAAU,MACjD,OAAOA,GAAW,UAAY,WAAYA,GAC1CA,EAAO,kBAAkB,SACjC,CCnFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBO,SAASyuP,GAAep7R,EAAGK,EAAG,CACjC,GAAIL,EAAE,QAAUK,EAAE,MACd,MAAO,CAACL,EAAGK,CAAC,EAEhB,MAAM6+Q,EAAQ+b,GAAWj7R,EAAE,MAAOK,EAAE,KAAK,EACzC,MAAO,CAACL,EAAE,KAAKk/Q,CAAK,EAAG7+Q,EAAE,KAAK6+Q,CAAK,CAAC,CACxC,CACO,SAASmc,IAAiBr7R,EAAGK,EAAG,CACnConI,EAAOznI,EAAE,QAAUK,EAAE,MAAO,IAAM,2BAA2BL,EAAE,KAAK,gBACrDK,EAAE,KAAK,oBAAoB,CAC9C,CAgBO,SAASi7R,GAAsB73R,EAAQ,CAC1C,MAAM6J,EAAO,CAAE,EAEf,OAAAiuR,GAAoB93R,EAAQ6J,EADf,IAAI,GACqB,EAC/BA,CACX,CACA,SAASiuR,GAAoBC,EAAWluR,EAAMijB,EAAM,CAChD,GAAIirQ,GAAa,KACb,OAEJ,GAAIA,aAAqBpB,GAAQ,CAC7B9sR,EAAK,KAAKkuR,CAAS,EACnB,MACR,CACI,GAAI,CAACjuQ,IAAWiuQ,CAAS,EACrB,OAGJ,MAAMjtQ,EAAWitQ,EACjB,UAAWv6R,KAAKstB,EAAU,CACtB,MAAM7jB,EAAM6jB,EAASttB,CAAC,EACjBsvB,EAAK,IAAI7lB,CAAG,IACb6lB,EAAK,IAAI7lB,CAAG,EACZ6wR,GAAoB7wR,EAAK4C,EAAMijB,CAAI,EAE/C,CACA,CAEA,SAAShD,IAAWtd,EAAK,CACrB,OAAO,MAAM,QAAQA,CAAG,GAAK,OAAOA,GAAQ,QAChD,CC3EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BA,SAASwrR,GAA6BC,EAAkB,CACpD,OAAOA,EAAiB,YAAc,IAC1C,CACA,MAAMC,EAAY,CACd,aAAc,CAEV,KAAK,oBAAsB,CAAE,EAC7B,KAAK,eAAiB,EACtB,KAAK,SAAW,EAChB,KAAK,WAAa,EAClB,KAAK,iBAAmB,EACxB,KAAK,eAAiB,EAItB,KAAK,cAAgB,EAGrB,KAAK,YAAc,EACnB,KAAK,WAAa,CAAE,EAKpB,KAAK,kBAAoB,CAAE,EAC3B,KAAK,YAAc,EACnB,KAAK,WAAa,IAAI,QACtB,KAAK,UAAY,GACjB,KAAK,cAAgB,CACjB,SAAU,EACV,WAAY,EACZ,UAAW,EACX,QAAS,CAAE,EACX,OAAQ,KACR,IAAI,aAAc,CACd,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI16R,GAAKA,EAAE,IAAI,CAAC,CAAC,CACxE,CACS,CACT,CACI,SAAU,CACN,UAAW26R,KAAgB,KAAK,oBAC5B,KAAK,oBAAoBA,CAAY,EAAE,QAAS,CAE5D,CACA,CACA,MAAMC,EAAO,CACT,YAAYzY,EAAK,CACb,KAAK,IAAMA,EACX,KAAK,SAAW,CAAE,EAClB,KAAK,gBAAkB,CAAE,EACzB,KAAK,qBAAuB,EAC5B,KAAK,MAAQ,IAAIuY,EACzB,CACI,MAAM,OAAQ,CACV,GAAI,KAAK,oBAAsB,KAC3B,OAAO,KAAK,mBAAmB,KAAK,IAAM,EAAG,EAEjD,GAAI,KAAK,iBAAmB,KACxB,OAEJ,MAAMG,EAAiB,KAAK,kBAAmB,EAC/C,QAASl5R,EAAI,EAAGA,EAAIk5R,EAAe,OAAQl5R,IAAK,CAC5C,MAAM+rR,EAAcmN,EAAel5R,CAAC,EAEpC,GADgB,MAAM,KAAK,kBAAkB+rR,CAAW,EAAE,QAC7C,CACT,MAAM,KAAK,WAAWA,CAAW,EACjC,MAChB,CACA,CACQ,MAAM,IAAI,MAAM,wEACH,CACrB,CACI,IAAI,SAAU,CACV,GAAI,KAAK,oBAAsB,KAC3B,MAAM,IAAI,MAAM,YAAY,KAAK,WAAW,qHAEzB,EAEvB,GAAI,KAAK,iBAAmB,KAAM,CAC9B,KAAM,CAAE,KAAAvkR,EAAM,UAAA2xR,GAAc,KAAK,gCAAiC,EAClE,GAAIA,EACA,MAAM,IAAI,MAAM,iCAAiC3xR,CAAI,qHAEG,EAE5D,KAAK,WAAWA,CAAI,CAChC,CACQ,OAAO,KAAK,eACpB,CACI,cAAe,CACX,OAAO,OAAO,KAAK,KAAK,eAAe,CAC/C,CACI,YAAYukR,EAAa,CACrB,GAAI,EAAEA,KAAe,KAAK,UAGtB,GAAIA,KAAe,KAAK,gBAAiB,CACrC,KAAM,CAAE,UAAAoN,CAAW,EAAG,KAAK,kBAAkBpN,CAAW,EACxD,GAAIoN,EAEA,OAAO,IAE3B,KAEgB,QAAO,KAGf,OAAO,KAAK,SAASpN,CAAW,CACxC,CACI,mBAAmBA,EAAa,CAC5B,OAAMA,KAAe,KAAK,gBAGnB,KAAK,gBAAgBA,CAAW,EAAE,QAF9B,IAGnB,CACI,gBAAgBA,EAAaqN,EAAS/xM,EAAW,EAAG,CAChD,OAAI0kM,KAAe,KAAK,iBACpBM,GAAS,GAAGN,CAAW,oEACgB,EAChC,KAEX,KAAK,gBAAgBA,CAAW,EAAI,CAAE,QAAAqN,EAAS,SAAA/xM,CAAU,EAClD,GACf,CACI,MAAM,WAAW0kM,EAAa,CAC1B,GAAI,KAAK,gBAAgBA,CAAW,GAAK,KACrC,MAAM,IAAI,MAAM,iBAAiBA,CAAW,yBAAyB,EAGzE,GADA,KAAK,YAAcA,EACf,KAAK,SAASA,CAAW,GAAK,KAAM,CACpC,KAAK,gBAAkB,KACvB,KAAM,CAAE,QAAAl1Q,EAAS,UAAAsiR,CAAS,EAAK,KAAK,kBAAkBpN,CAAW,EAEjE,GAAI,EADWoN,EAAY,MAAMtiR,EAAUA,GAEvC,MAAO,EAEvB,CACQ,YAAK,gBAAkB,KAAK,SAASk1Q,CAAW,EAChD,KAAK,uBAAwB,EAE7B,KAAK,SAAW,IAAI6G,IAAS,KAAK,eAAe,EAC1C,EACf,CACI,wBAAyB,CACL1G,GAAqB,KAAK,WAAW,EAC7C,QAAQmN,GAAU,CAClBA,EAAO,WAAa,MACpBA,EAAO,UAAU,KAAK,eAAe,CAErD,CAAS,CACT,CACI,yBAAyBtN,EAAa,CAClBG,GAAqBH,CAAW,EACxC,QAAQsN,GAAU,CAClBA,EAAO,aAAe,MACtBA,EAAO,YAAY,KAAK,SAAStN,CAAW,CAAC,CAE7D,CAAS,CACT,CAOI,kBAAkBA,EAAa,CAC3B,MAAMuN,EAAuB,KAAK,gBAAgBvN,CAAW,EAC7D,GAAIuN,GAAwB,KACxB,MAAM,IAAI,MAAM,6BAA6BvN,CAAW,0BAA0B,EAEtF,GAAI,CACA,MAAM/P,EAAUsd,EAAqB,QAAS,EAM9C,GAAItd,GAAW,EAAEA,aAAmBG,KAChC,OAAOH,EAAQ,MAAS,WAAY,CACpC,MAAMud,EAAY,EAAE,KAAK,qBACnB1iR,EAAUmlQ,EACX,KAAKwd,GAEFD,EAAY,KAAK,qBACV,IAEX,KAAK,SAASxN,CAAW,EAAIyN,EAC7B,KAAK,mBAAqB,KACnB,GACV,EACI,MAAMv3Q,IAEHs3Q,EAAY,KAAK,uBAGrB,KAAK,mBAAqB,KAC1BlN,GAAS,6BAA6BN,CAAW,SAAS,EAC1DM,GAASpqQ,EAAI,OAASA,EAAI,OAAO,GAC1B,GACV,EACD,YAAK,mBAAqBpL,EACnB,CAAE,QAAAA,EAAS,UAAW,EAAM,CACnD,KAEgB,aAAK,SAASk1Q,CAAW,EAAI/P,EACtB,CAAE,QAAS,GAAM,UAAW,EAAO,CAE1D,OACe/5P,EAAK,CACRoqQ,UAAS,6BAA6BN,CAAW,SAAS,EAC1DM,GAASpqQ,EAAI,OAASA,EAAI,OAAO,EAC1B,CAAE,QAAS,GAAO,UAAW,EAAO,CACvD,CACA,CACI,cAAc8pQ,EAAa,CACvB,GAAI,EAAEA,KAAe,KAAK,iBACtB,MAAM,IAAI,MAAM,GAAGA,CAAW,gCAAgC,EAE9D,KAAK,cAAgBA,GAAe,KAAK,oBAAsB,MAG/D,KAAK,uBAELA,KAAe,KAAK,WACpB,KAAK,yBAAyBA,CAAW,EACzC,KAAK,SAASA,CAAW,EAAE,QAAS,EACpC,OAAO,KAAK,SAASA,CAAW,GAEpC,OAAO,KAAK,gBAAgBA,CAAW,EAEnC,KAAK,cAAgBA,IACrB,KAAK,mBAAqB,KAC1B,KAAK,YAAc,KACnB,KAAK,gBAAkB,KAEnC,CACI,mBAAoB,CAChB,GAAI,OAAO,KAAK,KAAK,eAAe,EAAE,SAAW,EAC7C,MAAM,IAAI,MAAM,+BAA+B,EAEnD,OAAO,OAAO,KAAK,KAAK,eAAe,EAAE,KAAK,CAAC3uR,EAAGK,IAEvC,KAAK,gBAAgBA,CAAC,EAAE,SAC3B,KAAK,gBAAgBL,CAAC,EAAE,QAC/B,CACT,CACI,iCAAkC,CAC9B,MAAM87R,EAAiB,KAAK,kBAAmB,EAC/C,QAASl5R,EAAI,EAAGA,EAAIk5R,EAAe,OAAQl5R,IAAK,CAC5C,MAAM+rR,EAAcmN,EAAel5R,CAAC,EAC9B,CAAE,QAAA6W,EAAS,UAAAsiR,CAAS,EAAK,KAAK,kBAAkBpN,CAAW,EACjE,GAAIoN,GAAatiR,EACb,MAAO,CAAE,KAAMk1Q,EAAa,UAAAoN,CAAW,CAEvD,CACQ,MAAM,IAAI,MAAM,wEACH,CACrB,CACI,SAASnd,EAASE,EAAQ,CACtB,MAAMjvP,EAAO,KAAK,MAAM,WAAW,IAAIivP,CAAM,EACvCud,EAAaxsQ,EAAK,QAClB8c,EAAS,KAAK,SAASmyO,CAAM,EAC7B7pP,EAAWonQ,EAAW,SAASvd,CAAM,EAG3Cud,EAAW,YAAYvd,EAAQ,EAAI,EACnCjvP,EAAK,QAAU+uP,EACfA,EAAQ,KAAKE,EAAQnyO,EAAQ9c,EAAK,MAAOA,EAAK,MAAOoF,CAAQ,EACzD,KAAK,0BAGL,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,OAAS,CAAC,GAEhF,CACI,KAAKqnQ,EAAUnoR,EAAI,CACf,IAAI/J,EAAO,KACX,GAAI+J,GAAM,KAAM,CAEZ,GAAI,OAAOmoR,GAAa,WACpB,MAAM,IAAI,MAAM,qCAAqC,EAEzDnoR,EAAKmoR,CACjB,KACa,CAED,GAAI,OAAOA,GAAa,UAAY,EAAEA,aAAoB,QACtD,MAAM,IAAI,MAAM,gFACgB,EAEpC,GAAI,OAAOnoR,GAAO,WACd,MAAM,IAAI,MAAM,gFACkB,EAEtC/J,EAAOkyR,CAGnB,CACQ,IAAI74R,EACJ,OAAO,KAAK,UAAU,IAAM,KAAK,WAAW2G,CAAI,EAAG,IAAM,KAAK,SAAS3G,CAAM,EAAG,KAC5EA,EAAS0Q,EAAI,EACT1Q,aAAkB,SAClB,QAAQ,MAAM,yCAAyC,EAEpDA,EACV,CACT,CACI,UAAUgkE,EAAO1d,EAAK3oD,EAAG,CACrBqmE,EAAO,EACP,GAAI,CACA,MAAMx6D,EAAM7L,EAAG,EACf,OAAA2oD,EAAK,EACE98C,CACnB,OACe+/C,EAAI,CACP,MAAAjD,EAAK,EACCiD,CAClB,CACA,CACI,cAAe,CACX,OAAO6uO,GAAO,cACtB,CACI,gBAAiB,CACb,OAAOA,GAAO,gBACtB,CAOI,MAAMj8R,EAAG,CACL,MAAMC,EAAI08R,EAAO,UAAUvU,GAAU,CAAE,EAAApoR,CAAC,CAAE,EACpC81R,EAAS,CAAE,EAAA91R,CAAG,EACd48R,EAAQC,IAAQ,CAClB,EAAG,IAAM,CACL,MAAMvd,EAAQ,UACRwd,EAAa,CAAE,EAAGD,CAAI,EACtB3uG,EAAQ,CAAE,MAAAoxF,CAAO,EACvB,OAAOqd,EAAO,UAAUrX,GAAMwX,EAE9B5uG,CAAK,CACrB,CACA,GACc6uG,EAAQ,CAAE,EAChB,YAAK,YAAY,KAAK,MAAM,YAAY,KAAMjH,EAAQ,CAAC71R,CAAC,EAAG28R,EAAMG,EAAO,EAAE,EACnE98R,CACf,CAcI,UAAUs/Q,EAAYuW,EAAQ5nG,EAAO,CAUjC,GATI,KAAK,aAAe,MAMpB,KAAK,QAGL,EADc4gG,GAAUvP,EAAY,KAAK,WAAW,GAAK,MAEzD,MAAM,IAAI,MAAM,WAAWA,CAAU,iCAAiC,KAAK,WAAW,GAAG,EAE7F,OAAO,KAAK,cAAc,CAAE,WAAAA,EAAY,OAAAuW,EAAQ,MAAA5nG,CAAK,CAAE,CAC/D,CACI,wBAAyB,CACrB,OAAO,KAAK,IAAI,QAAQ,SAAS,CACzC,CACI,sBAAsBqxF,EAAYyd,EAAkBC,EAAU,CAC1D,MAAMC,EAAkB,KAAK,QAAQ,WAAY,EAEjD,IAAIC,EAAmB,EACvBF,EAAS,QAAQhtQ,GAAQ,CAGrBktQ,GAAqBltQ,EAAK,QAAU,YAAc,EAAI,CAClE,CAAS,EAMD,MAAMmtQ,EAAW,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,OAAS,CAAC,EAC/EC,EAAgBH,EAAkBF,EAAmBG,EAAmBC,EAC9E,GAAIC,EAAgB,EAChB,MAAM,IAAI,MAAM,YAAY,KAAK,WAAW,kCACpCA,CAAa,6BAA6B9d,CAAU,GAAG,CAE3E,CAMI,cAAc+d,EAAc,CACxB,IAAIhkJ,EACAyjJ,EAAQ,CAAE,EACd,MAAMQ,EAAW,KAAK,SAAU,EAC1BC,EAAoB,KAAK,MAAM,SAC/BC,EAAqB,KAAK,MAAM,WAClC,KAAK,0BACL,KAAK,MAAM,kBAAkB,KAAK,CAAC,EAEvC,IAAIC,EACA,KAAK,aAAe,MAMpB,KAAK,QAET,IAAI11P,EACJ,MAAM21P,EAAoB9B,GAA6ByB,CAAY,EAC/DA,EAAa,WACb,KAAK,MAAM,aAAe,KAAO,KAAK,MAAM,YAAY,KAAO,GAInE,GAAIzB,GAA6ByB,CAAY,EAAG,CAC5C,KAAM,CAAE,WAAA/d,EAAY,OAAAuW,EAAQ,MAAA5nG,CAAO,EAAGovG,EAClC,KAAK,aAAe,MAMpB,KAAK,QAET,MAAMjB,EAASvN,GAAUvP,EAAY,KAAK,WAAW,EACrD0a,EAAYoC,GAAU,KAAM,IAAM,kCAAkC9c,CAAU,kBAAkB,KAAK,WAAW,GAAG,EACnHme,EAAa,IAAM,CACf,MAAMV,EAAmB,KAAK,QAAQ,WAAY,EAClDh1P,EAAMq0P,EAAO,WAAW,CAAE,OAAAvG,EAAQ,MAAA5nG,EAAO,QAAS,KAAK,QAAS,EAChE,MAAM+uG,EAAW,MAAM,QAAQj1P,CAAG,EAAIA,EAAM,CAACA,CAAG,EAC5C,KAAK,0BACL,KAAK,sBAAsBu3O,EAAYyd,EAAkBC,CAAQ,EAErE,MAAMW,EAAaX,EAAS,IAAKY,GAIzBA,EAAQ,MAAQ,KACTA,EAEJ,KAAK,yBAAyBA,CAAO,CAC/C,EAKD,GAAIN,EAAU,CACV,MAAMO,EAAgB,KAAK,sBAAsBve,EAAYuW,EAAQ8H,CAAU,EAC/Eb,EAAQ,KAAK,2BAA2Be,CAAa,CACzE,CACgB,OAAOF,CACV,CACb,KACa,CACD,KAAM,CAAE,YAAAG,CAAW,EAAKT,EAElBU,EAAYC,GAAY,CAIrBV,IAGLR,EAAQkB,EAAQ,IAAIC,GAAU,KAAK,KAAK,KAAK,MAAMA,CAAM,CAAC,CAAC,EAC9D,EACDR,EAAa,IAAM,CACf,MAAMV,EAAmB,KAAK,QAAQ,WAAY,EAClDh1P,EAAM,KAAK,KAAK,IAAM+1P,EAAY,KAAK,QAASC,CAAQ,CAAC,EACzD,MAAMG,EAAQ,MAAM,QAAQn2P,CAAG,EAAIA,EAAM,CAACA,CAAG,EAC7C,OAAI,KAAK,0BAEL,KAAK,sBAAsB21P,EAAmBX,EAAkBmB,CAAI,EAEjEA,CACV,CACb,CAIQ,KAAM,CAAE,OAAArI,EAAQ,MAAA5nG,CAAK,EAAKovG,EACpBc,EAAgBvC,GAA6ByB,CAAY,EAC3D,KACAA,EAAa,cACjB,IAAIlH,EACJ,YAAK,UAEL,IAAM,KAAK,MAAM,cAAe,IAAM,KAAK,MAAM,cAAe,IAAM,CAC9D,CAAC,KAAK,IAAI,QAAQ,OAAO,GAAK,CAAC,KAAK,MAAM,UAC1C98I,EAAUokJ,EAAY,GAGtBtH,EAAgB,KAAK,SAAS,cAAcuH,EAAmB7H,EAAQ,IAAM4H,GAAY,EACrF,KAAK,IAAI,QAAQ,OAAO,GACxB,KAAK,SAAS,iBAAiBtH,CAAa,EAEhD98I,EAAU88I,EAAc,QAExC,CAAS,EACGmH,GACA,KAAK,YAAYI,EAAmB7H,EAAQx8I,EAAS8kJ,EAAerB,EAAO7uG,CAAK,EAEhF,KAAK,MAAM,WACX,KAAK,MAAM,cAAc,QAAQ,KAAK,CAClC,KAAMyvG,EACN,WAAY,KAAK,MAAM,SAAWH,EAClC,mBAAoB,KAAK,MAAM,SAC/B,aAAc,KAAK,MAAM,WAAaC,EACtC,qBAAsB,KAAK,MAAM,WACjC,YAAa,OAAO,KAAK3H,CAAM,EAAE,IAAIrtR,GAAOqtR,EAAOrtR,CAAG,GAAK,KAAOqtR,EAAOrtR,CAAG,EAAE,MAAQ,IAAI,EAC1F,aAAc6wI,EAAQ,IAAIzyI,GAAQA,EAAK,KAAK,EAC5C,aAAcuvR,EAAc,OAC5B,UAAWA,EAAc,SACzC,CAAa,EAEG,MAAM,QAAQpuP,CAAG,EAAIsxG,EAAUA,EAAQ,CAAC,CACxD,CAMI,2BAA2B2kJ,EAAS,CAEhC,OADcA,EAAQ,IAAIC,GAAU,KAAK,KAAK,KAAK,MAAMA,CAAM,CAAC,CAAC,CAEzE,CAQI,sBAAsB3e,EAAYuW,EAAQx8I,EAAS,CAC/C,MAAM+kJ,EAAapP,GAAY1P,CAAU,EACzC,GAAI8e,GAAc,KAAM,CACpB,MAAMC,EAAeD,EAAW,cAAgB,CAAE,EAC5CE,EAAgBF,EAAW,eAAiB,CAAE,EAGpD,IAAIG,EACAH,EAAW,eACXpE,EAAY,MAAM,QAAQnE,CAAM,EAAG,IAAM,wDAAwD,EACjG0I,EAAqB,OAAO,KAAK1I,CAAM,EAAE,IAAKrtR,GAAQqtR,EAAOrtR,CAAG,CAAC,GAGjE+1R,EAAqBF,EAAa,IAAK1/C,GAAck3C,EAAOl3C,CAAS,CAAC,EAE1E,MAAM6/C,EAAsBnlJ,EAAQ,OAAO,CAACt1I,EAAGhB,IAAMu7R,EAAcv7R,CAAC,CAAC,EACrE,OAAOw7R,EAAmB,OAAOC,CAAmB,CAChE,CAOQ,MAAO,CAAE,CACjB,CAMI,WAAW1xP,EAAQsyO,EAAOC,EAAON,EAAS,CACtC,GAAIjyO,GAAU,KACV,MAAM,IAAI,MAAM,+CAA+C,EAEnEuyO,EAAQA,GAAS,UACjBN,EAAUA,GAAW,KAAK,QAC1B,IAAI0f,EAAc3xP,EACduyO,IAAU,UAAYqf,GAAc5xP,EAAO,CAAC,CAAC,IAC7C2xP,EAAc3xP,EAAO,IAAI5rC,GAAKy9R,GAAkBz9R,CAAC,CAAC,GAEtD,MAAM+9Q,EAASF,EAAQ,MAAM0f,EAAarf,EAAOC,CAAK,EAChD1/Q,EAAI,IAAI46R,GAAOnb,EAAOC,EAAOJ,EAAQ,KAAK,cAAc,EAG9D,GAFA,KAAK,YAAYt/Q,EAAGo/Q,CAAO,EAEvBM,IAAU,SAAU,CACpB,MAAMrvP,EAAO,KAAK,MAAM,WAAW,IAAIivP,CAAM,EACvC2f,EAAWld,IAAqB+c,CAAW,EACjD,KAAK,MAAM,UAAYG,EAAW5uQ,EAAK,MACvCA,EAAK,MAAQ4uQ,CACzB,CACQ,OAAOj/R,CACf,CAOI,qBAAqBs/Q,EAAQG,EAAOC,EAAON,EAAS,CAChDM,EAAQA,GAAS,UACjB,MAAMwf,EAAa,CAAE,OAAA5f,EAAQ,MAAAG,EAAO,MAAAC,CAAO,EAC3C,OAAO,KAAK,yBAAyBwf,EAAY9f,CAAO,CAChE,CAMI,yBAAyB8f,EAAY9f,EAAS,CAC1C,KAAM,CAAE,OAAAE,EAAQ,MAAAG,EAAO,MAAAC,CAAO,EAAGwf,EAC3Bl/R,EAAI,IAAI46R,GAAOnb,EAAOC,EAAOJ,EAAQ,KAAK,cAAc,EAC9D,YAAK,YAAYt/Q,EAAGo/Q,CAAO,EACpBp/Q,CACf,CACI,aAAai7R,EAAcH,EAAY,GAAMlwR,EAAM80Q,EAAO,CACtD90Q,EAAOA,GAAQ,KAAK,eAAc,EAAG,SAAU,EAC3C80Q,GAAS,MAAQA,IAAUub,EAAa,QACxCA,EAAeA,EAAa,KAAKvb,CAAK,GAE1C,MAAMx/Q,EAAI,IAAI86R,GAASC,EAAcH,EAAWlwR,EAAM,KAAK,cAAc,EACzE,GAAI,KAAK,MAAM,oBAAoB1K,EAAE,IAAI,GAAK,KAC1C,MAAM,IAAI,MAAM,sBAAsBA,EAAE,IAAI,yBAAyB,EAEzE,YAAK,MAAM,oBAAoBA,EAAE,IAAI,EAAIA,EACzC,KAAK,OAAOA,EAAG,KAAK,OAAO,EACpBA,CACf,CACI,YAAYM,EAAG4+Q,EAAS,CACpB,KAAK,MAAM,aACP5+Q,EAAE,QAAU,UACZ,KAAK,MAAM,mBAIf,IAAIwuK,EAAQ,EACRxuK,EAAE,QAAU,aAAeA,EAAE,QAAU,WACvCwuK,EAAQxuK,EAAE,KAAO2+R,GAAqB3+R,EAAE,KAAK,GAEjD,KAAK,MAAM,UAAYwuK,EAClB,KAAK,MAAM,WAAW,IAAIxuK,EAAE,MAAM,IACnC,KAAK,MAAM,iBACX,KAAK,MAAM,WAAW,IAAIA,EAAE,OAAQ,CAChC,QAAS4+Q,GAAW,KAAK,QACzB,MAAO5+Q,EAAE,MACT,MAAOA,EAAE,MACT,MAAAwuK,CAChB,CAAa,GAECxuK,aAAaw6R,IACf,KAAK,MAAMx6R,CAAC,CAExB,CAMI,OAAOA,EAAG4+Q,EAAS,CACf,KAAK,YAAY5+Q,EAAG4+Q,CAAO,EAC3B,KAAK,QAAQ,OAAO5+Q,EAAE,MAAM,CACpC,CACI,aAAa8+Q,EAAQF,EAAS,CACtB,KAAK,MAAM,WAAW,IAAIE,CAAM,GAChC,KAAK,MAAM,WAAW,IAAIA,CAAM,EAAE,UAAYF,IAC9C,KAAK,MAAM,WAAW,OAAOE,CAAM,EACnC,KAAK,MAAM,iBAEvB,CACI,cAAc9+Q,EAAG,CACb,GAAI,CAAC,KAAK,MAAM,WAAW,IAAIA,EAAE,MAAM,EACnC,OAEJ,MAAM6vB,EAAO,KAAK,MAAM,WAAW,IAAI7vB,EAAE,MAAM,EAQ/C,GAPA,KAAK,MAAM,aACPA,EAAE,QAAU,WACZ,KAAK,MAAM,mBACX,KAAK,MAAM,UAAY6vB,EAAK,OAI5B7vB,EAAE,QAAU,aAAeA,EAAE,QAAU,SAAU,CACjD,MAAMwuK,EAAQxuK,EAAE,KAAO2+R,GAAqB3+R,EAAE,KAAK,EACnD,KAAK,MAAM,UAAYwuK,CACnC,CAEY3+I,EAAK,QAAQ,YAAY7vB,EAAE,MAAM,GACjC,KAAK,aAAaA,EAAE,OAAQ6vB,EAAK,OAAO,CAKpD,CACI,kBAAmB,CACf,UAAWm/L,KAAW,KAAK,MAAM,oBAAqB,CAClD,MAAMtvN,EAAI,KAAK,MAAM,oBAAoBsvN,CAAO,EAChD,KAAK,gBAAgBtvN,CAAC,CAClC,CACA,CACI,gBAAgBA,EAAG,CACf,KAAK,cAAcA,CAAC,EAChB,KAAK,MAAM,oBAAoBA,EAAE,IAAI,GAAK,MAC1C,OAAO,KAAK,MAAM,oBAAoBA,EAAE,IAAI,CAExD,CACI,QAAS,CACL,MAAMmwB,EAAO,KAAK,QAAQ,OAAQ,EAClC,OAAAA,EAAK,WAAa,KAAK,MAAM,WAC7BA,EAAK,eAAiB,KAAK,MAAM,eACjCA,EAAK,SAAW,KAAK,MAAM,SACvB,KAAK,MAAM,iBAAmB,IAC9BA,EAAK,WAAa,GACdA,EAAK,SAAW,OAChBA,EAAK,QAAU,CAAE,GAErBA,EAAK,QAAQ,KAAK,uEACW,GAE1BA,CACf,CACI,MAAM,QAAQ1c,EAAO,CACjB,KAAK,MAAM,UAAY,GACvB,MAAMyrR,EAAa,KAAK,MAAM,SACxBC,EAAkB,KAAK,MAAM,WACnC,KAAK,MAAM,cAAc,QAAU,CAAE,EACrC,KAAK,MAAM,cAAc,OAAS,MAAM1rR,EAAO,EAC/C,KAAK,MAAM,UAAY,GACvB,KAAK,MAAM,cAAc,UAAY,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,QAAQ,IAAIpS,GAAKA,EAAE,kBAAkB,CAAC,EAChH,KAAK,MAAM,cAAc,SAAW,KAAK,MAAM,SAAW69R,EAC1D,KAAK,MAAM,cAAc,WACrB,KAAK,MAAM,WAAaC,EAC5B,UAAW5C,KAAU,KAAK,MAAM,cAAc,QAC1CA,EAAO,aAAe,MAAMA,EAAO,aACnCA,EAAO,UAAY,MAAMA,EAAO,UAEpC,OAAO,KAAK,MAAM,aAC1B,CACI,UAAW,CACP,OAAO,KAAK,MAAM,cAAgB,GAAK,KAAK,MAAM,cAAgB,CAC1E,CACI,YAAY9c,EAAYuW,EAAQx8I,EAAS4lJ,EAAenC,EAAO7uG,EAAO,CAClE,MAAMixG,EAAW,CAAE,GAAI,KAAK,MAAM,iBAAkB,WAAA5f,EAAY,OAAAuW,EAAQ,QAAAx8I,EAAS,MAAAyjJ,CAAO,EAClFsB,EAAapP,GAAY1P,CAAU,EACrC8e,GAAc,OACda,EAAgBb,EAAW,UAE3Ba,GAAiB,OACjBC,EAAS,SAAYrH,IAGjBA,EAAMA,EAAI,IAAI,CAAC+E,EAAI75R,IAAM,CACrB,GAAI65R,GAAM,KAAM,CACZ,MAAMzzP,EAASkwG,EAAQt2I,CAAC,EAClBq+Q,EAAO+d,GAAyBh2P,EAAO,KAAMA,EAAO,KAAK,EAC/D,OAAO,KAAK,WAAWi4O,EAAMj4O,EAAO,MAAOA,EAAO,KAAK,CAC/E,CACoB,OAAOyzP,CAC3B,CAAiB,EAGMqC,EAAcpH,EAAI,OAAS,EAAIA,EAAMA,EAAI,CAAC,EAAGiF,EAAO7uG,CAAK,IAGxE,KAAK,MAAM,WAAW,KAAKixG,CAAQ,CAC3C,CACI,KAAKt7R,EAAQ,CACT,OAAAA,EAAO,KAAO,GACPA,CACf,CACI,WAAY,CACJ,KAAK,MAAM,gBAAkB,IAC7B,KAAK,MAAM,WAAa,CAAE,GAE9B,KAAK,MAAM,eACnB,CACI,SAAU,CACN,KAAK,MAAM,eACnB,CAKI,WAAW2G,EAAM,CACb,MAAM60R,EAAY,CACd,MAAO,CAAE,EACT,KAAM,gBACN,GAAI,KAAK,MAAM,aAClB,EACG70R,IACA60R,EAAU,KAAO70R,GAErB,KAAK,MAAM,WAAW,KAAK60R,CAAS,EACpC,KAAK,MAAM,YAAcA,CACjC,CAKI,SAASx7R,EAAQ,CACb,MAAMy7R,EAAyB5D,GAAsB73R,CAAM,EACrD07R,EAA4B,IAAI,IAAID,EAAuB,IAAI1/R,GAAKA,EAAE,EAAE,CAAC,EAE/E,QAASoD,EAAI,EAAGA,EAAI,KAAK,MAAM,YAAY,MAAM,OAAQA,IAAK,CAC1D,MAAMk7R,EAAS,KAAK,MAAM,YAAY,MAAMl7R,CAAC,EACzC,CAACk7R,EAAO,MAAQ,CAACqB,EAA0B,IAAIrB,EAAO,EAAE,GACxDA,EAAO,QAAS,CAEhC,CACQ,MAAMsB,EAAW,KAAK,MAAM,WAAW,IAAK,EAC5C,KAAK,MAAM,YAAc,KAAK,MAAM,WAAW,SAAW,EACtD,KACA,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW,OAAS,CAAC,EAE1DF,EAAuB,QAAQpB,GAAU,CAGjC,CAACA,EAAO,MAAQA,EAAO,UAAYsB,EAAS,IAC5C,KAAK,MAAMtB,CAAM,CAEjC,CAAS,CACT,CAOI,UAAU18R,EAAGw1R,EAAI6F,EAAI4C,EAAmB,GAAO,CAE3C,GADAxF,EAAYjD,EAAG,OAAS,EAAG,IAAM,2CAA2C,EACxE6F,GAAM,MAAQA,EAAG,QAAU,UAC3B,MAAM,IAAI,MAAM,0CAA0CA,EAAG,KAAK,GAAG,EAEzE,MAAM58R,EAAI,KAAK,UAAU,IAAM,KAAK,UAAS,EAAI,IAAM,KAAK,QAAO,EAAI,IAAM,KAAK,KAAK,UAAWuB,CAAC,CAAC,EACpGy4R,EAAYh6R,aAAau6R,GAAQ,IAAM,gDAAgD,EAEvF,MAAMjD,EAAeT,IAAqB,KAAK,MAAM,WAAYE,EAAI/2R,CAAC,EACtE,GAAI,CAACw/R,GAAoBlI,EAAa,SAAW,GAAKP,EAAG,OAAS,EAC9D,MAAM,IAAI,MAAM,qIAEL,EAEf,OAAO,KAAK,KAAK,WAAY,IAAM,CAC/B,MAAM0I,EAAyB,CAAE,EACjCA,EAAuBz/R,EAAE,EAAE,EAAK48R,GAAc8C,IAAK1/R,EAAE,KAAK,EAE1D03R,IAAuB+H,EAAwBnI,EAE/C/1R,GAAK,KAAK,KAAKA,CAAC,EAEhBwxB,GAAG,EACH,MAAM4sQ,EAAQ5I,EAAG,IAAIh3R,GAAK0/R,EAAuB1/R,EAAE,EAAE,CAAC,EACtD,OAAI,KAAK,MAAM,gBAAkB,IAG7B,KAAK,MAAM,WAAW,QAAQgjB,GAAQ,CAClC,UAAWk7Q,KAAUl7Q,EAAK,MACtBk7Q,EAAO,QAAS,CAExC,CAAiB,EACD,KAAK,MAAM,WAAa,MAErB,CAAE,MAAOj+R,EAAG,MAAA2/R,CAAO,CACtC,CAAS,CACT,CACI,WAAWp+R,EAAG,CACVy4R,SAAY4F,GAAgBr+R,CAAC,EAAG,IAAM,mDAAmD,EAClF,IAAIs0R,IAAW,CAClBmE,EAAYnE,EAAO,MAAMl2R,GAAKA,aAAa46R,EAAM,EAAG,IAAM,kEAC7C,EACb,IAAIntR,EACJ,MAAMyyR,EAAW,CAAE,EACnBhK,EAAO,QAAQ,CAACl2Q,EAAO5c,IAAM,CACzB88R,EAAS98R,CAAC,EAAI4c,CAC9B,CAAa,EACD,MAAMm+Q,EAAc,CAAC/5R,EAAG+7R,KACpB1yR,EAAM7L,EAAM,GAAGs0R,EAAQiK,CAAK,EAC5B9F,EAAY5sR,EAAI,iBAAiBmtR,GAAQ,IAAM,4FACL,EAC1CP,EAAY4F,GAAgBxyR,EAAI,QAAQ,EAAG,IAAM,kGACD,EACzCA,EAAI,OAET+wR,EAAgB,CAACvB,EAAIE,IAAU,CACjC,MAAMiD,EAAU3yR,EAAI,SAASwvR,EAAIE,CAAK,EAChC6C,EAAQ,MAAM,QAAQI,CAAO,EAAIA,EAAU,CAACA,CAAO,EACzD/F,EAAY2F,EAAM,SAAW9J,EAAO,OAAQ,IAAM,qKAEU,EAC5DmE,EAAY2F,EAAM,MAAMhgS,GAAKA,aAAa46R,EAAM,EAAG,IAAM,sIAE5B,EAC7B,MAAMyF,EAAU,CAAE,EAClB,OAAAL,EAAM,QAAQ,CAAChD,EAAM55R,IAAM,CACvBi9R,EAAQj9R,CAAC,EAAI,IAAM45R,CACvC,CAAiB,EACMqD,CACV,EACD,OAAO,KAAK,cAAc,CACtB,YAAAlC,EACA,cAAAK,EACA,OAAQ0B,CACxB,CAAa,CACJ,CACT,CACI,SAAS5gB,EAAQ,CAGb,OADa,KAAK,MAAM,WAAW,IAAIA,CAAM,EACjC,QAAQ,SAASA,CAAM,CAC3C,CACI,KAAKA,EAAQ,CAGT,OADa,KAAK,MAAM,WAAW,IAAIA,CAAM,EACjC,QAAQ,KAAKA,CAAM,CACvC,CACI,UAAUA,EAAQzyQ,EAAS,CAGvB,OADa,KAAK,MAAM,WAAW,IAAIyyQ,CAAM,EACjC,QAAQ,UAAUA,EAAQzyQ,CAAO,CACrD,CACI,MAAM,KAAK8G,EAAO,CACd,MAAMs0D,EAAQp7C,GAAK,EACbyzQ,EAAa,MAAM,KAAK,QAAQ,KAAK3sR,CAAK,EAChD,OAAA2sR,EAAW,OAASzzQ,GAAG,EAAKo7C,EACrBq4N,CACf,CAOI,MAAMr8R,EAAQ,CACV,OAAI,KAAK,MAAM,aAAe,OAC1BA,EAAO,QAAU,KAAK,MAAM,YAAY,GACxC,KAAK,MAAM,YAAY,MAAM,KAAKA,CAAM,GAErCA,CACf,CACI,IAAI,qBAAsB,CACtB,OAAO,KAAK,MAAM,mBAC1B,CAKI,OAAQ,CAEJ,KAAK,uBACL,KAAK,MAAM,QAAS,EACpB,KAAK,IAAI,MAAO,EAChB,KAAK,MAAQ,IAAIk4R,GACjB,UAAWhN,KAAe,KAAK,SAC3B,KAAK,yBAAyBA,CAAW,EACzC,KAAK,SAASA,CAAW,EAAE,QAAS,EACpC,OAAO,KAAK,SAASA,CAAW,EAEpC,KAAK,YAAc,KACnB,KAAK,gBAAkB,KACvB,KAAK,mBAAqB,IAClC,CACA,CACAkN,GAAO,aAAe,EACtBA,GAAO,eAAiB,EAExB,SAAS0D,IAAKtgB,EAAO,CACjB,MAAMtyO,EAASo1O,GAAmBlC,GAAcZ,CAAK,EAAG,SAAS,EACjE,OAAOsd,EAAO,WAAW5vP,EAAQsyO,EAAO,SAAS,CACrD,CACO,SAAS8gB,IAAkB,CAC9B,MAAM58M,EAAKogM,GAAoB,EAC/B,GAAIpgM,EAAG,WAAa,KAAM,CACtB,MAAM16B,EAAc,IAAI+5N,IAAYr/L,CAAE,EACtCA,EAAG,UAAY,IAAI04M,GAAOpzO,CAAW,CAC7C,CACI,OAAA46N,IAAqBlgM,EAAG,UAAU,GAAG,EAGrC+2M,IAAiB,IAAM/2M,EAAG,SAAS,EAC5BA,EAAG,SACd,CACO,MAAMo5M,EAASwD,GAAiB,EAOhC,SAASntQ,IAAI5yB,EAAGK,EAAG,CAEtB,MAAMq1R,EAAS,CAAE,EAAA11R,EAAG,EAAAK,CAAG,EACvB,OAAOk8R,EAAO,UAAUzY,GAAK4R,CAAM,CACvC,CClgCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDO,SAASn8N,KAAY,CACxB,OAAQ,OAAO,OAAW,KAAe,OAAO,UAAY,MAEvD,OAAO,kBAAsB,GACtC,CCzDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBA,MAAM6pN,GAAM92N,GAAK,EAKjB82N,GAAI,aAAa,QAAS,IAAM,GAAO4c,GAAc,CAC7CA,GACA,QAAQ,KAAK,6IAEgC,CAErD,CAAC,EAED5c,GAAI,aAAa,aAAc,IAAM6c,KAAuB,EAE5D7c,GAAI,aAAa,UAAW,IAAO,OAAO,QAAY,KACjD,OAAO,QAAQ,SAAa,KAC5B,OAAO,QAAQ,SAAS,KAAS,GAAY,EAElDA,GAAI,aAAa,YAAa,IAAM,OAAO,UAAc,KAAe,WAAa,MACjF,UAAU,WAAa,MAAQ,SAAS,KAAK,UAAU,SAAS,GAChE,aAAa,KAAK,UAAU,MAAM,CAAC,EAEvCA,GAAI,aAAa,YAAa,IAAM,OAAO,UAAc,KAAe,WAAa,MACjF,UAAU,WAAa,MAAQ,SAAS,KAAK,UAAU,SAAS,GAChE,QAAQ,KAAK,UAAU,MAAM,CAAC,EAKlCA,GAAI,aAAa,OAAQ,IAAM,EAAK,EAKpCA,GAAI,aAAa,qCAAsC,IAAMA,GAAI,QAAQ,OAAO,CAAC,EAEjFA,GAAI,aAAa,+BAAgC,IAAM,EAAI,EAE3DA,GAAI,aAAa,UAAW,IAAM,EAAK,EAEvCA,GAAI,aAAa,+BAAgC,IAAMA,GAAI,QAAQ,OAAO,CAAC,EAE3EA,GAAI,aAAa,sBAAuB,IAAM,EAAK,EAEnDA,GAAI,aAAa,wCAAyC,IAAM,EAAK,EAErEA,GAAI,aAAa,uBAAwB,IAAM,EAAK,EClEpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBO,SAAS8c,GAAWx1R,EAAKw0Q,EAAO,CACnC,IAAIihB,EAAYz1R,EAChB,GAAI87J,GAAa97J,CAAG,EAChB,OAAOw0Q,IAAU,SAAW,CAAE,EAAG,CAACx0Q,EAAI,MAAM,EAEhD,GAAIwwR,GAAYxwR,CAAG,EAAG,CAClB,MAAM01R,EAAe11R,EAAI,UAAY,OACrC,MAAO,CAACA,EAAI,OAAQA,EAAI,MAAQ01R,EAAa,MAAM,CAC3D,SACajF,GAAazwR,CAAG,EACrB,MAAO,CAACA,EAAI,OAAO,MAAQw0Q,GAAS,KAAO,EAAIoC,GAAgBpC,CAAK,EAAE,EAE1E,GAAI,CAAC,MAAM,QAAQx0Q,CAAG,EAClB,MAAO,GAEX,MAAMu0Q,EAAQ,CAAE,EAChB,KAAO,MAAM,QAAQkhB,CAAS,GAC1B35H,GAAa25H,CAAS,GAAKjhB,IAAU,UACrCD,EAAM,KAAKkhB,EAAU,MAAM,EAC3BA,EAAYA,EAAU,CAAC,EAE3B,OAAI,MAAM,QAAQz1R,CAAG,GACjB4hD,GAAK,EAAC,QAAQ,oCAAoC,GAClD+zO,GAA2B31R,EAAKu0Q,EAAO,EAAE,EAEtCA,CACX,CACA,SAASohB,GAA2B31R,EAAKu0Q,EAAOqhB,EAAS,CAErD,GADAA,EAAUA,GAAW,CAAE,EACnB,CAAE,MAAM,QAAQ51R,CAAG,GAAM,CAAC87J,GAAa97J,CAAG,EAAG,CAC7C+8H,EAAOw3I,EAAM,SAAW,EAAG,IAAM,eAAeqhB,EAAQ,KAAK,IAAI,CAAC,0DACtBrhB,EAAM,CAAC,CAAC,WAAW,EAC/D,MACR,CACIx3I,EAAOw3I,EAAM,OAAS,EAAG,IAAM,eAAeqhB,EAAQ,KAAK,IAAI,CAAC,+CACtC51R,EAAI,MAAM,WAAW,EAC/C+8H,EAAO/8H,EAAI,SAAWu0Q,EAAM,CAAC,EAAG,IAAM,eAAeqhB,EAAQ,KAAK,IAAI,CAAC,iBAAiBrhB,EAAM,CAAC,CAAC,sBACvEv0Q,EAAI,MAAM,WAAW,EAC9C,MAAM61R,EAAWthB,EAAM,MAAM,CAAC,EAC9B,QAASr8Q,EAAI,EAAGA,EAAI8H,EAAI,OAAQ,EAAE9H,EAC9By9R,GAA2B31R,EAAI9H,CAAC,EAAG29R,EAAUD,EAAQ,OAAO19R,CAAC,CAAC,CAEtE,CACA,SAAS49R,GAAYC,EAAeC,EAAaC,EAASC,EAAc,CACpE,GAAIH,IAAkB,oBAGtB,IAAIA,GAAiB,KACjB,MAAM,IAAI,MAAM,gCAAgC,EAEpD,GAAIA,IAAkB,WAAaA,IAAkBC,GACjDD,IAAkB,WAAaC,IAAgB,SAC/C,MAAM,IAAI,MAAM,aAAaC,CAAO,gBAAgBC,CAAY,aACtDH,CAAa,oBAAoBC,CAAW,SAAS,EAEvE,CACO,SAASG,EAAgBjhS,EAAG+gS,EAASC,EAAcE,EAAe,UAAW,CAChF,GAAIlhS,aAAaw6R,GACb,OAAAoG,GAAYM,EAAclhS,EAAE,MAAO+gS,EAASC,CAAY,EACjDhhS,EAEX,IAAImhS,EAAgBvf,GAAW5hR,CAAC,EAQhC,GALImhS,IAAkB,UAClB,CAAC,OAAQ,QAAS,SAAS,EAAE,QAAQD,CAAY,GAAK,IACtDC,EAAgBD,GAEpBN,GAAYM,EAAcC,EAAeJ,EAASC,CAAY,EACzDhhS,GAAK,MACL,CAAC4mK,GAAa5mK,CAAC,GAAK,CAAC,MAAM,QAAQA,CAAC,GAAK,OAAOA,GAAM,UACnD,OAAOA,GAAM,WAAa,OAAOA,GAAM,SAAW,CACtD,MAAMiiB,EAAOjiB,GAAK,KAAO,OAASA,EAAE,YAAY,KAChD,MAAM,IAAI,MAAM,aAAa+gS,CAAO,gBAAgBC,CAAY,8CAC1B/+Q,CAAI,GAAG,CACrD,CACI,MAAMm/Q,EAAgBd,GAAWtgS,EAAGmhS,CAAa,EAC7C,CAACv6H,GAAa5mK,CAAC,GAAK,CAAC,MAAM,QAAQA,CAAC,IACpCA,EAAI,CAACA,CAAC,GAGV,MAAM+sC,EAASo0P,IAAkB,SAC7BjM,GAAal1R,EAAGmhS,CAAa,EAC7Bl4C,GAAQjpP,EAAG,CAAE,EAHM,EAGU,EACjC,OAAO28R,EAAO,WAAW5vP,EAAQq0P,EAAeD,CAAa,CACjE,CACO,SAASE,GAAqB9nO,EAAKwnO,EAASC,EAAcE,EAAe,UAAW,CACvF,GAAI,CAAC,MAAM,QAAQ3nO,CAAG,EAClB,MAAM,IAAI,MAAM,YAAYwnO,CAAO,cAAcC,CAAY,6CAC3B,EAGtC,OADgBznO,EACD,IAAI,CAAC35D,EAAG,IAAMqhS,EAAgBrhS,EAAG,GAAGmhS,CAAO,IAAI,CAAC,IAAKC,EAAcE,CAAY,CAAC,CACnG,CCnHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBO,MAAMI,GAAkB,OAMxB,SAASp9R,EAAG1C,EAAG,CAClB,MAAMmpC,EAAO,OAAO,KAAKnpC,CAAC,EAC1B,GAAImpC,EAAK,SAAW,EAChB,MAAM,IAAI,MAAM,yGAETA,EAAK,MAAM,QAAQ,EAE9B,IAAI42P,EAAS52P,EAAK,CAAC,EACnB,MAAMp2B,EAAK/S,EAAE+/R,CAAM,EAEfA,EAAO,SAAS,GAAG,IACnBA,EAASA,EAAO,UAAU,EAAGA,EAAO,OAAS,CAAC,GAGlDA,EAASA,EAASD,GAElB,MAAME,EAAK,IAAIn1R,IAAS,CACpBswR,EAAO,WAAW4E,CAAM,EACxB,GAAI,CACA,MAAM19R,EAAS0Q,EAAG,GAAGlI,CAAI,EACzB,OAAIghB,GAAUxpB,CAAM,GAChB,QAAQ,MAAM,yCAAyC,EAE3D84R,EAAO,SAAS94R,CAAM,EACfA,CACnB,OACeupD,EAAI,CACP,MAAAuvO,EAAO,SAAS,IAAI,EACdvvO,CAClB,CACK,EACD,cAAO,eAAeo0O,EAAI,OAAQ,CAAE,MAAOD,EAAQ,aAAc,GAAM,EAEhEC,CACX,CC1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASC,IAASC,EAAMC,EAAM,CAC1B,MAAMC,EAAQX,EAAgBS,EAAM,OAAQ,SAAS,EAC/CG,EAAQZ,EAAgBU,EAAM,OAAQ,SAAS,EACrDG,GAAuBF,EAAM,MAAOC,EAAM,MAAO,yBAAyBD,EAAM,KAAK,QAAQC,EAAM,KAAK,uCAC/D,EACzC,MAAM/L,EAAS,CAAE,KAAM8L,EAAO,KAAMC,CAAO,EAC3C,OAAOlF,EAAO,UAAUlX,GAASqQ,CAAM,CAC3C,CACO,MAAMh6F,GAA0B53L,EAAG,CAAE,SAAAu9R,IAAU,ECjDtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBO,SAASM,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,EAAO,CAC5D,GAAIA,GAAS,KACTA,EAAQsC,GAAW70O,CAAM,UAEpBuyO,IAAU,YACf,MAAM,IAAI,MAAM,kFACwB,EAE5C,GAAIic,GAAaxuP,CAAM,GAAKuuP,GAAYvuP,CAAM,EAAG,CAC7C,GAAIuyO,IAAU,WAAaA,IAAU,QACjC,MAAM,IAAI,MAAM,2FACmCA,CAAK,GAAG,EAE/D,OAAOqd,EAAO,QAAQ,wBAAwB5vP,EAAQsyO,GAAS+hB,EAAe9hB,CAAK,CAC3F,CACI,GAAI,CAAC14G,GAAa75H,CAAM,GAAK,CAAC,MAAM,QAAQA,CAAM,GAC9C,OAAOA,GAAW,UAAY,OAAOA,GAAW,WAChD,OAAOA,GAAW,SAClB,MAAM,IAAI,MAAM,0HAC2C,EAG/D,GAAIsyO,GAAS,KAAM,CACfiD,GAAmCjD,CAAK,EACxC,MAAM2iB,EAAe/hB,GAAcZ,CAAK,EAClC4iB,EAAehiB,GAAcmhB,CAAa,EAChDv5J,EAAOm6J,IAAiBC,EAAc,IAAM,iCAAiC5iB,CAAK,6BAC3E2iB,CAAY,mBAAmBC,CAAY,EAAE,EACpD,QAAS,EAAI,EAAG,EAAIb,EAAc,OAAQ,EAAE,EAAG,CAC3C,MAAMc,EAAWd,EAAc,CAAC,EAC1Be,EAAoB,IAAMf,EAAc,OAAS,EACnDc,IAAajiB,GAAcZ,EAAM,MAAM,CAAC,CAAC,EACzC,GACJx3I,EAAOu5J,EAAc,CAAC,IAAM/hB,EAAM,CAAC,GAAK,CAAC8iB,EAAmB,IAAM,gDAC1Df,CAAa,wCACP/hB,CAAK,KAAK,CACpC,CACA,CACI,MAAI,CAACz4G,GAAa75H,CAAM,GAAK,CAAC,MAAM,QAAQA,CAAM,IAC9CA,EAAS,CAACA,CAAM,GAEpBsyO,EAAQA,GAAS+hB,EACjBr0P,EAASuyO,IAAU,SACf4V,GAAanoP,EAAQuyO,CAAK,EAC1Br2B,GAAQl8M,EAAQ,CAAE,EAAE,EAAI,EACrB4vP,EAAO,WAAW5vP,EAAQsyO,EAAOC,CAAK,CACjD,CClEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoMO,SAAS4e,GAAOnxP,EAAQsyO,EAAOC,EAAO,CACzC,MAAM8hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,OAAOyiB,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCvMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBO,MAAM8iB,GAAuB,CAChC,QAAW,EACX,QAAW,EACX,MAAS,EACT,OAAU,EACV,MAAS,EACT,KAAQ,EACR,UAAa,CACjB,ECjBO,MAAMC,EAAqB,CAQ9B,OAAO,KAAKpjP,EAAS,CACjB,OAAO,IAAIojP,GAAqBpjP,CAAO,EAAE,MAAO,CACxD,CACI,YAAYA,EAAS,CAiBjB,GAhBA,KAAK,OAAS,CAAE,EAChB,KAAK,mBAAqB,EACtBA,GAAW,OAITA,aAAmB,QACrBA,EAAU,CAACA,CAAO,GAEtBA,EAAUA,EAAQ,IAAKqjP,GACfC,GAAkBD,CAAkB,EAC7BA,EAAmB,OAEvBA,CACV,EAEGrjP,EAAQ,SAAW,GACnB,OAEJ,KAAK,kBAAoBA,EAAQ,CAAC,EAAE,WACpC,IAAI4oB,EAAQ,EACZ,QAAS7kE,EAAI,EAAGA,EAAIi8C,EAAQ,OAAQj8C,IAAK,CACrC,MAAMwuB,EAASytB,EAAQj8C,CAAC,EAEpBA,IAAMi8C,EAAQ,OAAS,GACvBztB,EAAO,aAAe,KAAK,oBAG3B,KAAK,kBAAoB,QAG7B,MAAM24B,EAAM0d,EAAQr2C,EAAO,WAC3B,KAAK,OAAO,KAAK,CAAE,OAAAA,EAAQ,MAAAq2C,EAAO,IAAA1d,EAAK,EACvC0d,EAAQ1d,CACpB,CAEY,KAAK,OAAO,SAAW,IACvB,KAAK,WAAa,GAEtB,KAAK,WAAa,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAAE,GAC9D,CACI,MAAM0d,EAAQ,EAAG1d,EAAM,KAAK,WAAY,CAGpC,GAAI,KAAK,OAAO,SAAW,EACvB,OAAO,IAAI,YAAY,CAAC,EAQ5B,GALA0d,EAAQ,MAAM,OAAOA,CAAK,CAAC,EAAI,EAAIA,EACnC1d,EAAM,MAAM,OAAOA,CAAG,CAAC,EAAI,EAAIA,EAE/B0d,EAAQ,KAAK,IAAI,EAAGA,CAAK,EACzB1d,EAAM,KAAK,IAAI,KAAK,WAAYA,CAAG,EAC/BA,GAAO0d,EACP,OAAO,IAAI,YAAY,CAAC,EAE5B,MAAM26N,EAAkB,KAAK,iBAAiB36N,CAAK,EACnD,GAAI26N,IAAoB,GAGpB,MAAM,IAAI,MAAM,uCAAuC36N,CAAK,EAAE,EAElE,MAAMj8D,EAAOu+C,EAAM0d,EACb46N,EAAe,IAAI,YAAY72R,CAAI,EACnC82R,EAAc,IAAI,WAAWD,CAAY,EAC/C,IAAIE,EAAS,EACb,QAAS3/R,EAAIw/R,EAAiBx/R,EAAI,KAAK,OAAO,OAAQA,IAAK,CACvD,MAAM4/R,EAAQ,KAAK,OAAO5/R,CAAC,EAErB6/R,EADch7N,EAAQ86N,EACKC,EAAM,MACjCE,EAAcH,EAEdI,EADY,KAAK,IAAI54O,EAAKy4O,EAAM,GAAG,EACZA,EAAM,MAC7BI,EAAc,IAAI,WAAWJ,EAAM,OAAQC,EAAYE,EAAWF,CAAU,EAGlF,GAFAH,EAAY,IAAIM,EAAaF,CAAW,EACxCH,GAAUK,EAAY,OAClB74O,EAAMy4O,EAAM,IACZ,KAEhB,CACQ,OAAOH,CACf,CAII,iBAAiBQ,EAAW,CACxB,GAAI,KAAK,OAAO,SAAW,GAAKA,EAAY,GACxCA,GAAa,KAAK,WAClB,MAAO,GAGX,GAAI,KAAK,mBAAqB,KAC1B,YAAK,mBAAqB,KAAK,MAAMA,EAAY,KAAK,iBAAiB,EAChE,KAAK,mBAKhB,SAASC,EAAMN,EAAO,CAClB,OAAIK,EAAYL,EAAM,MACX,GAEPK,GAAaL,EAAM,IACZ,EAEJ,CACnB,CAEQ,GAAIM,EAAM,KAAK,OAAO,KAAK,kBAAkB,CAAC,IAAM,EAChD,OAAO,KAAK,mBAKhB,MAAMz8R,EAAQ+oJ,IAAO,KAAK,OAAQ0zI,CAAK,EACvC,OAAIz8R,IAAU,GACH,IAEX,KAAK,mBAAqBA,EACnB,KAAK,mBACpB,CACA,CAWO,SAAS+oJ,IAAO2zI,EAAa7hC,EAAS,CAEzC,IAAI3yF,EAAM,EACN1lI,EAAMk6P,EAAY,OACtB,KAAOx0H,GAAO1lI,GAAK,CACf,MAAMm6P,EAAS,KAAK,OAAOn6P,EAAM0lI,GAAO,CAAC,EAAIA,EACvC8gD,EAAO6xC,EAAQ6hC,EAAYC,CAAM,CAAC,EACxC,GAAI3zE,IAAS,EACT,OAAO2zE,EAEF3zE,EAAO,EACZxmL,EAAMm6P,EAGNz0H,EAAMy0H,EAAS,CAE3B,CACI,MAAO,EACX,CC7KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBA,MAAMC,GAA0B,EAkBzB,eAAeC,IAAcrF,EAASsF,EAAO,CAEhD,MAAMC,EAAQ,CAAE,EACVC,EAAe,CAAE,EACjBpyO,EAAQ,MAAM,QAAQ4sO,CAAO,EAC/BA,EAAQ,IAAIC,GAAUA,EAAO,IAAI,EACjC,OAAO,KAAKD,CAAO,EACvB,QAAS,EAAI,EAAG,EAAI5sO,EAAM,OAAQ,EAAE,EAAG,CACnC,MAAM7mD,EAAO6mD,EAAM,CAAC,EACdzxD,EAAI,MAAM,QAAQq+R,CAAO,EAAIA,EAAQ,CAAC,EAAE,OAASA,EAAQzzR,CAAI,EACnE,GAAI5K,EAAE,QAAU,WAAaA,EAAE,QAAU,SAAWA,EAAE,QAAU,QAC5DA,EAAE,QAAU,UAAYA,EAAE,QAAU,YACpC,MAAM,IAAI,MAAM,gCAAgC4K,CAAI,MAAM5K,EAAE,KAAK,EAAE,EAEvE,MAAM8jS,EAAO,CAAE,KAAAl5R,EAAM,MAAO5K,EAAE,MAAO,MAAOA,EAAE,KAAO,EACrD,GAAIA,EAAE,QAAU,SAAU,CACtB,MAAM+jS,EAAY,IAAI,QAAQ,MAAOngS,GAAY,CAC7C,MAAM69Q,EAAO,MAAMzhR,EAAE,MAAO,EACtBgkS,EAAgBviB,EAAK,OAAO,CAAC5hR,EAAG2B,IAAM3B,EAAI2B,EAAE,OAAQ,CAAC,EACvDiiS,GAA0BhiB,EAAK,OAC7BzyG,EAAQ,IAAI,WAAWg1H,CAAa,EAC1C,IAAIvkP,EAAS,EACb,QAASr8C,EAAI,EAAGA,EAAIq+Q,EAAK,OAAQr+Q,IAAK,CAClC,MAAM8H,EAAMu2Q,EAAKr+Q,CAAC,EACZ6gS,EAAgB,IAAI,WAAW,IAAI,YAAY,CAAC/4R,EAAI,MAAM,CAAC,EAAE,MAAM,EACzE8jK,EAAM,IAAIi1H,EAAexkP,CAAM,EAC/BA,GAAUgkP,GACVz0H,EAAM,IAAI9jK,EAAKu0C,CAAM,EACrBA,GAAUv0C,EAAI,MAClC,CACgBtH,EAAQorK,CAAK,CAC7B,CAAa,EACD60H,EAAa,KAAKE,CAAS,CACvC,MAEYF,EAAa,KAAK7jS,EAAE,MAAM,EAE1B2jS,GAAS,OACTG,EAAK,MAAQH,GAEjBC,EAAM,KAAKE,CAAI,CACvB,CACI,MAAMI,EAAe,MAAM,QAAQ,IAAIL,CAAY,EACnD,MAAO,CAAE,KAAMM,IAAuBD,CAAY,EAAG,MAAAN,CAAO,CAChE,CAiBO,SAASQ,GAAcC,EAAYT,EAAO,CAE7C,MAAMU,EAAkB,IAAI7B,GAAqB4B,CAAU,EACrDj8P,EAAM,CAAE,EACd,IAAIm8P,EACA9kP,EAAS,EACb,UAAWqkP,KAAQF,EAAO,CACtB,MAAMh5R,EAAOk5R,EAAK,KACZpkB,EAAQokB,EAAK,MACbrkB,EAAQqkB,EAAK,MACb93R,EAAOq0Q,GAAcZ,CAAK,EAChC,IAAItyO,EACJ,GAAI,iBAAkB22P,EAAM,CACxB,MAAMU,EAAeV,EAAK,aAC1B,GAAIU,EAAa,QAAU,SAAWA,EAAa,QAAU,UACzD,GAAI,EAAE,QAASA,GAAgB,UAAWA,GACtC,MAAM,IAAI,MAAM,UAAUV,EAAK,IAAI,sBAAsBU,EAAa,KAAK,qDACnB,UAGvDA,EAAa,QAAU,WAC5B,GAAI9kB,IAAU,UACV,MAAM,IAAI,MAAM,UAAUokB,EAAK,IAAI,sBAAsBU,EAAa,KAAK,oDACpB9kB,CAAK,GAAG,MAInE,OAAM,IAAI,MAAM,UAAUokB,EAAK,IAAI,mCACTU,EAAa,KAAK,wEAEL,EAE3C,MAAMC,EAAyBjC,GAAqBgC,EAAa,KAAK,EAChEE,EAAaJ,EAAgB,MAAM7kP,EAAQA,EAASzzC,EAAOy4R,CAAsB,EACjFE,EAAkBH,EAAa,QAAU,QAC3C,IAAI,WAAWE,CAAU,EACzB,IAAI,YAAYA,CAAU,EAC9B,GAAIhlB,IAAU,UACV,GAAI8kB,EAAa,QAAU,SAAWA,EAAa,QAAU,SAAU,CACnEr3P,EAAS,IAAI,aAAaw3P,EAAe,MAAM,EAC/C,QAASvhS,EAAI,EAAGA,EAAIuhS,EAAe,OAAQvhS,IAAK,CAC5C,MAAMlD,EAAIykS,EAAevhS,CAAC,EAC1B+pC,EAAO/pC,CAAC,EAAIlD,EAAIskS,EAAa,MAAQA,EAAa,GAC1E,CACA,SACyBA,EAAa,QAAU,UACxBD,IAAkB,SAClBA,EAAgBK,IAAmB,GAEvCz3P,EAASo3P,EAAcI,CAAc,MAGrC,OAAM,IAAI,MAAM,iCAAiCH,EAAa,KAAK,2BACrC,UAG7B9kB,IAAU,QAAS,CACxB,GAAI8kB,EAAa,QAAU,SAAWA,EAAa,QAAU,SACzD,MAAM,IAAI,MAAM,iCAAiCA,EAAa,KAAK,yBACvC,EAEhCr3P,EAAS,IAAI,WAAWw3P,EAAe,MAAM,EAC7C,QAASvhS,EAAI,EAAGA,EAAIuhS,EAAe,OAAQvhS,IAAK,CAC5C,MAAMlD,EAAIykS,EAAevhS,CAAC,EAC1B+pC,EAAO/pC,CAAC,EAAI,KAAK,MAAMlD,EAAIskS,EAAa,MAAQA,EAAa,GAAG,CACpF,CACA,KAEgB,OAAM,IAAI,MAAM,gCAAgC55R,CAAI,MAAM80Q,CAAK,EAAE,EAErEjgO,GAAUzzC,EAAOy4R,CAC7B,SACiB/kB,IAAU,SAAU,CACzB,MAAM1zQ,EAAOq0Q,GAAcyjB,EAAK,KAAK,EACrC32P,EAAS,CAAE,EACX,QAAS/pC,EAAI,EAAGA,EAAI4I,EAAM5I,IAAK,CAC3B,MAAMsuI,EAAa,IAAI,YAAY4yJ,EAAgB,MAAM7kP,EAAQA,EAASgkP,EAAuB,CAAC,EAAE,CAAC,EACrGhkP,GAAUgkP,GACV,MAAMz0H,EAAQ,IAAI,WAAWs1H,EAAgB,MAAM7kP,EAAQA,EAASiyF,CAAU,CAAC,EAC/EvkG,EAAO,KAAK6hI,CAAK,EACjBvvH,GAAUiyF,CAC1B,CACA,KACa,CACD,MAAMmzJ,EAAcrC,GAAqB9iB,CAAK,EACxCglB,EAAaJ,EAAgB,MAAM7kP,EAAQA,EAASzzC,EAAO64R,CAAW,EAC5E,GAAInlB,IAAU,UACVvyO,EAAS,IAAI,aAAau3P,CAAU,UAE/BhlB,IAAU,QACfvyO,EAAS,IAAI,WAAWu3P,CAAU,UAE7BhlB,IAAU,OACfvyO,EAAS,IAAI,WAAWu3P,CAAU,UAE7BhlB,IAAU,YAAa,CAC5BvyO,EAAS,IAAI,aAAau3P,CAAU,EACpC,MAAM5C,EAAO,IAAI,aAAa30P,EAAO,OAAS,CAAC,EACzCkwC,EAAQ,IAAI,aAAalwC,EAAO,OAAS,CAAC,EAChD,QAAS/pC,EAAI,EAAGA,EAAI0+R,EAAK,OAAQ1+R,IAC7B0+R,EAAK1+R,CAAC,EAAI+pC,EAAO/pC,EAAI,CAAC,EACtBi6E,EAAMj6E,CAAC,EAAI+pC,EAAO/pC,EAAI,EAAI,CAAC,EAE/B,MAAM0hS,EAAaxG,GAAOwD,EAAMriB,EAAO,SAAS,EAC1CslB,EAAczG,GAAOjhN,EAAOoiM,EAAO,SAAS,EAClDr3O,EAAIx9B,CAAI,EAAIsxL,GAAQ4oG,EAAYC,CAAW,EAC3CD,EAAW,QAAS,EACpBC,EAAY,QAAS,CACrC,KAEgB,OAAM,IAAI,MAAM,gCAAgCn6R,CAAI,MAAM80Q,CAAK,EAAE,EAErEjgO,GAAUzzC,EAAO64R,CAC7B,CACYnlB,IAAU,cACVt3O,EAAIx9B,CAAI,EAAI0zR,GAAOnxP,EAAQsyO,EAAOC,CAAK,EAEnD,CACI,OAAOt3O,CACX,CAIO,SAAS+7P,IAAuB/M,EAAI,CAEvC,GAAIA,IAAO,KACP,MAAM,IAAI,MAAM,wBAAwB,KAAK,UAAUA,CAAE,CAAC,EAAE,EAEhE,IAAI4N,EAAkB,EAQtB,MAAMC,EAAe,CAAE,EACvB7N,EAAG,QAASh3R,GAAM,CAKd,GAJA4kS,GAAmB5kS,EAAE,WAErB6kS,EAAa,KAAK7kS,EAAE,aAAeA,EAAE,OAAO,WAAaA,EACrD,IAAIA,EAAE,YAAYA,CAAC,CAAC,EACpB,EAAEA,aAAa,cAAgBA,aAAa,YAC5CA,aAAa,YACb,MAAM,IAAI,MAAM,mCAAmCA,EAAE,YAAY,IAAI,EAAE,CAGnF,CAAK,EACD,MAAMC,EAAI,IAAI,WAAW2kS,CAAe,EACxC,IAAIvlP,EAAS,EACb,OAAAwlP,EAAa,QAAS7kS,GAAM,CACxBC,EAAE,IAAI,IAAI,WAAWD,EAAE,MAAM,EAAGq/C,CAAM,EACtCA,GAAUr/C,EAAE,UACpB,CAAK,EACMC,EAAE,MACb,CAEA,MAAM6kS,GAAgB,OAAO,OAAW,MACnC,OAAO,KAAS,KAAe,OAAO,KAAS,KAC5C,OAAO,KAAS,KAUjB,SAASC,GAAiBrvR,EAAK,CAClC,OAAIovR,GACO,OAAO,WAAWpvR,EAAK,MAAM,EAEjC,IAAI,KAAK,CAACA,CAAG,CAAC,EAAE,IAC3B,CAOO,SAASsvR,IAA0BxzQ,EAAQ,CAC9C,GAAIszQ,GACA,OAAO,OAAO,KAAKtzQ,CAAM,EAAE,SAAS,QAAQ,EAEhD,MAAM2tB,EAAM,IAAI,WAAW3tB,CAAM,EACjC,IAAIzuB,EAAI,GACR,QAASC,EAAI,EAAGzD,EAAI4/C,EAAI,OAAQn8C,EAAIzD,EAAGyD,IACnCD,GAAK,OAAO,aAAao8C,EAAIn8C,CAAC,CAAC,EAEnC,OAAO,KAAKD,CAAC,CACjB,CAOO,SAASkiS,IAA0BvvR,EAAK,CAC3C,GAAIovR,GAAe,CACf,MAAM3lP,EAAM,OAAO,KAAKzpC,EAAK,QAAQ,EACrC,OAAOypC,EAAI,OAAO,MAAMA,EAAI,WAAYA,EAAI,WAAaA,EAAI,UAAU,CAC/E,CACI,MAAMp8C,EAAI,KAAK2S,CAAG,EACZ8b,EAAS,IAAI,WAAWzuB,EAAE,MAAM,EACtC,QAASC,EAAI,EAAGA,EAAID,EAAE,OAAQ,EAAEC,EAC5BwuB,EAAO,IAAI,CAACzuB,EAAE,WAAWC,CAAC,CAAC,EAAGA,CAAC,EAEnC,OAAOwuB,EAAO,MAClB,CAUO,SAAS0zQ,IAAwBjmP,EAAS,CAC7C,OAAOojP,GAAqB,KAAKpjP,CAAO,CAC5C,CAQO,SAASqyG,GAASt9I,EAAM,CAC3B,MAAMmxR,EAAY,IAElB,IADAnxR,EAAOA,EAAK,KAAM,EACXA,EAAK,SAASmxR,CAAS,GAC1BnxR,EAAOA,EAAK,MAAM,EAAGA,EAAK,OAAS,CAAC,EAExC,MAAMkqC,EAAQlqC,EAAK,MAAMmxR,CAAS,EAClC,OAAOjnP,EAAMA,EAAM,OAAS,CAAC,CACjC,CAUO,SAASknP,GAA8BC,EAAWC,EAAU,CAC/D,MAAMzhS,EAAS,CACX,cAAewhS,EAAU,cACzB,OAAQA,EAAU,OAClB,YAAaA,EAAU,YACvB,YAAaA,EAAU,YACvB,gBAAiBC,CACpB,EACD,OAAID,EAAU,WAAa,OACvBxhS,EAAO,UAAYwhS,EAAU,WAE7BA,EAAU,qBAAuB,OACjCxhS,EAAO,oBAAsBwhS,EAAU,qBAEvCA,EAAU,kBAAoB,OAC9BxhS,EAAO,iBAAmBwhS,EAAU,kBAEpCA,EAAU,sBAAwB,OAClCxhS,EAAO,qBAAuBwhS,EAAU,sBAExCA,EAAU,gBAAkB,OAC5BxhS,EAAO,eAAiBwhS,EAAU,gBAE/BxhS,CACX,CAYO,SAAS0hS,GAA6BC,EAAWC,EAAaxB,EAAY,CAC7E,MAAMyB,EAAiB,CACnB,cAAeF,EAAU,cACzB,OAAQA,EAAU,OAClB,YAAaA,EAAU,YACvB,YAAaA,EAAU,WAC1B,EAID,GAHIA,EAAU,gBAAkB,OAC5BE,EAAe,eAAiBF,EAAU,gBAE1CA,EAAU,iBAAmB,KAAM,CACnC,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,uDAAuD,EAE3E,GAAI,CAACxB,EACD,MAAM,IAAI,MAAM,sDAAsD,EAE1EyB,EAAe,YAAcD,EAC7BC,EAAe,WAAazB,CACpC,CACI,OAAIuB,EAAU,WAAa,OACvBE,EAAe,UAAYF,EAAU,WAErCA,EAAU,qBAAuB,OACjCE,EAAe,oBAAsBF,EAAU,qBAE/CA,EAAU,kBAAoB,OAC9BE,EAAe,iBAAmBF,EAAU,kBAE5CA,EAAU,sBAAwB,OAClCE,EAAe,qBAAuBF,EAAU,sBAE7CE,CACX,CAUO,eAAeC,GAAyBH,EAAWI,EAAa,CACnE,IAAIH,EACAxB,EACJ,OAAIuB,EAAU,iBAAmB,OAC7B,CAACC,EAAaxB,CAAU,EAAI,MAAM2B,EAAYJ,EAAU,eAAe,GAEpED,GAA6BC,EAAWC,EAAaxB,CAAU,CAC1E,CAMO,SAAS4B,GAA6BH,EAAgB,CACzD,GAAIA,EAAe,yBAAyB,YACxC,MAAM,IAAI,MAAM,qDAAqD,EAEzE,MAAO,CACH,UAAW,IAAI,KACf,kBAAmB,OACnB,mBAAoBA,EAAe,eAAiB,KAChD,EACAX,GAAiB,KAAK,UAAUW,EAAe,aAAa,CAAC,EACjE,iBAAkBA,EAAe,aAAe,KAC5C,EACAX,GAAiB,KAAK,UAAUW,EAAe,WAAW,CAAC,EAC/D,gBAAiBA,EAAe,YAAc,KAC1C,EACA,IAAIrD,GAAqBqD,EAAe,UAAU,EAAE,UAC3D,CACL,CAQO,SAASI,GAAeC,EAAiB,CAC5C,MAAMN,EAAc,CAAE,EACtB,UAAWzmO,KAAS+mO,EAChBN,EAAY,KAAK,GAAGzmO,EAAM,OAAO,EAErC,OAAOymO,CACX,CAOA,SAASO,KAA6B,CAClC,MAAMC,EAAmBjjS,GAAM,CAC3B,IAAIvB,EAAIuB,GAAK,GACTtC,EAAI,EACR,KAAQ,EAAAe,EAAI,UACRf,GAAK,QACLe,IAAM,EAEV,OAAAA,GAAK,SACLf,GAAK,UACEe,EAAIf,CACd,EACKwlS,EAAe,IAAI,YAAY,IAAI,EACzCA,EAAa,CAAC,EAAI,EAClB,QAASljS,EAAI,EAAGA,EAAI,KAAMA,IACtBkjS,EAAaljS,CAAC,EAAIijS,EAAgBjjS,CAAC,EAEvC,QAASA,EAAI,KAAMA,EAAI,KAAMA,IACzBkjS,EAAaljS,CAAC,EAAI,WAAeA,EAAI,MAAS,IAElD,OAAOkjS,CACX,CAOA,SAASC,KAA8B,CACnC,MAAMC,EAAgB,IAAI,YAAY,EAAE,EACxCA,EAAc,CAAC,EAAI,EACnBA,EAAc,EAAE,EAAI,WACpBA,EAAc,EAAE,EAAI,WACpBA,EAAc,EAAE,EAAI,WACpB,QAASpjS,EAAI,EAAGA,EAAI,GAAIA,IACpBojS,EAAcpjS,CAAC,EAAIA,GAAK,GAE5B,QAASA,EAAI,GAAIA,EAAI,GAAIA,IACrBojS,EAAcpjS,CAAC,EAAI,YAAeA,EAAI,IAAO,IAEjD,OAAOojS,CACX,CAOA,SAASC,KAA4B,CACjC,MAAMC,EAAc,IAAI,YAAY,EAAE,EACtC,QAAStjS,EAAI,EAAGA,EAAI,GAAIA,IACpBsjS,EAAYtjS,CAAC,EAAI,KAErB,OAAAsjS,EAAY,CAAC,EAAIA,EAAY,EAAE,EAAI,EAC5BA,CACX,CAQO,SAAS9B,KAAoB,CAIhC,MAAM0B,EAAeF,IAA4B,EAC3CI,EAAgBD,IAA6B,EAC7CG,EAAcD,IAA2B,EAC/C,OAAQ9B,GAAmB,CACvB,MAAM/yQ,EAAS,IAAI,YAAY,EAAI+yQ,EAAe,MAAM,EAClDgC,EAAmB,IAAI,YAAY/0Q,CAAM,EAC/C,QAAS/qB,EAAQ,EAAGA,EAAQ89R,EAAe,OAAQ99R,IAAS,CACxD,MAAM+/R,EAAcjC,EAAe99R,CAAK,EAClCggS,EAAcP,EAAaI,EAAYE,GAAe,EAAE,GAAKA,EAAc,KAAM,EACnFJ,EAAcI,GAAe,EAAE,EACnCD,EAAiB9/R,CAAK,EAAIggS,CACtC,CACQ,OAAO,IAAI,aAAaj1Q,CAAM,CACjC,CACL,CC/iBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,MAAMk1Q,EAAiB,CAC1B,aAAc,CACV,KAAK,YAAc,CAAE,EACrB,KAAK,YAAc,CAAE,CAC7B,CACI,OAAO,aAAc,CACjB,OAAIA,GAAiB,UAAY,OAC7BA,GAAiB,SAAW,IAAIA,IAE7BA,GAAiB,QAChC,CAOI,OAAO,mBAAmBC,EAAY,CAClCD,GAAiB,YAAa,EAAC,YAAY,KAAKC,CAAU,CAClE,CAOI,OAAO,mBAAmBC,EAAY,CAClCF,GAAiB,YAAa,EAAC,YAAY,KAAKE,CAAU,CAClE,CASI,OAAO,gBAAgBjpR,EAAK,CACxB,OAAO+oR,GAAiB,YAAY/oR,EAAK,MAAM,CACvD,CASI,OAAO,gBAAgBA,EAAKkpR,EAAa,CACrC,OAAOH,GAAiB,YAAY/oR,EAAK,OAAQkpR,CAAW,CACpE,CACI,OAAO,YAAYlpR,EAAKmpR,EAAaD,EAAa,CAC9C,MAAME,EAAgB,CAAE,EAIxB,OAHgBD,IAAgB,OAC5BJ,GAAiB,YAAW,EAAG,YAC/BA,GAAiB,YAAW,EAAG,aAC3B,QAAQlsI,GAAU,CACtB,MAAMt4I,EAAUs4I,EAAO78I,EAAKkpR,CAAW,EACnC3kR,IAAY,MACZ6kR,EAAc,KAAK7kR,CAAO,CAE1C,CAAS,EACM6kR,CACf,CACA,CACO,MAAMC,IAAsBC,GAAeP,GAAiB,mBAAmBO,CAAU,EACnFC,IAAsBD,GAAeP,GAAiB,mBAAmBO,CAAU,EACnFE,IAAmBxpR,GAAQ+oR,GAAiB,gBAAgB/oR,CAAG,EAC/DypR,IAAkB,CAACzpR,EAAKkpR,IAAgBH,GAAiB,gBAAgB/oR,EAAKkpR,CAAW,ECpFtG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBA,MAAMQ,GAAgB,eAChBC,GAAmB,EAInBC,GAAmB,eAInBC,GAAkB,mBAYxB,SAASC,IAAsB,CAC3B,GAAI,CAAC/6O,GAAG,EAAG,QAAQ,YAAY,EAI3B,MAAM,IAAI,MAAM,yFACW,EAG/B,MAAMg7O,EAAY,OAAO,OAAW,IAAc,KAAO,OACnDtL,EAAUsL,EAAU,WAAaA,EAAU,cAC7CA,EAAU,iBAAmBA,EAAU,aACvCA,EAAU,cACd,GAAItL,GAAW,KACX,MAAM,IAAI,MAAM,2DAA2D,EAE/E,OAAOA,CACX,CACA,SAASuL,GAAcC,EAAa,CAChC,MAAM73L,EAAK63L,EAAY,OACvB73L,EAAG,kBAAkBw3L,GAAkB,CAAE,QAAS,WAAW,CAAE,EAC/Dx3L,EAAG,kBAAkBy3L,GAAiB,CAAE,QAAS,WAAW,CAAE,CAClE,CAMA,MAAMK,EAAiB,CACnB,YAAYC,EAAW,CAEnB,GADA,KAAK,UAAYL,GAAqB,EAClCK,GAAa,MAAQ,CAACA,EACtB,MAAM,IAAI,MAAM,gEAAgE,EAEpF,KAAK,UAAYA,CACzB,CACI,MAAM,KAAKpC,EAAgB,CAEvB,GAAIA,EAAe,yBAAyB,YACxC,MAAM,IAAI,MAAM,0FACY,EAEhC,OAAO,KAAK,eAAe,KAAK,UAAWA,CAAc,CACjE,CACI,MAAM,MAAO,CACT,OAAO,KAAK,eAAe,KAAK,SAAS,CACjD,CAeI,eAAeoC,EAAWpC,EAAgB,CACtC,OAAO,IAAI,QAAQ,CAACliS,EAASC,IAAW,CACpC,MAAMmkS,EAAc,KAAK,UAAU,KAAKP,GAAeC,EAAgB,EACvEM,EAAY,gBAAkB,IAAMD,GAAcC,CAAW,EAC7DA,EAAY,UAAY,IAAM,CAC1B,MAAM73L,EAAK63L,EAAY,OACvB,GAAIlC,GAAkB,KAAM,CAExB,MAAMqC,EAAUh4L,EAAG,YAAYw3L,GAAkB,UAAU,EAErDS,EADaD,EAAQ,YAAYR,EAAgB,EACzB,IAAI,KAAK,SAAS,EAChDS,EAAW,UAAY,IAAM,CACzB,GAAIA,EAAW,QAAU,KACrB,OAAAj4L,EAAG,MAAO,EACHtsG,EAAO,IAAI,MAAM,gCAAgC,KAAK,SAAS,iBACnD,CAAC,EAGpBD,EAAQwkS,EAAW,OAAO,cAAc,CAE/C,EACDA,EAAW,QAAUzjS,IACjBwrG,EAAG,MAAO,EACHtsG,EAAOukS,EAAW,KAAK,GAElCD,EAAQ,WAAa,IAAMh4L,EAAG,MAAO,CACzD,KACqB,CAMD21L,EAAe,WAAarD,GAAqB,KAAKqD,EAAe,UAAU,EAC/E,MAAMuC,EAAqBpC,GAA6BH,CAAc,EAEhEwC,EAASn4L,EAAG,YAAYy3L,GAAiB,WAAW,EAC1D,IAAIW,EAAYD,EAAO,YAAYV,EAAe,EAC9CY,EACJ,GAAI,CACAA,EACID,EAAU,IAAI,CAAE,UAAW,KAAK,UAAW,mBAAAF,EAAoB,CAC3F,OAC2B1jS,EAAO,CACV,OAAOd,EAAOc,CAAK,CAC3C,CACoB,IAAIwjS,EACJK,EAAe,UAAY,IAAM,CAE7BL,EAAUh4L,EAAG,YAAYw3L,GAAkB,WAAW,EACtD,MAAMc,EAAaN,EAAQ,YAAYR,EAAgB,EACvD,IAAIe,EACJ,GAAI,CACAA,EAAkBD,EAAW,IAAI,CAC7B,UAAW,KAAK,UAChB,eAAA3C,EACA,mBAAAuC,CAChC,CAA6B,CAC7B,OAC+B1jS,EAAO,CAEV,OAAOd,EAAOc,CAAK,CAC/C,CACwB+jS,EAAgB,UAAY,IAAM9kS,EAAQ,CAAE,mBAAAykS,CAAkB,CAAE,EAChEK,EAAgB,QAAU/jS,GAAS,CAG/B4jS,EAAYD,EAAO,YAAYV,EAAe,EAC9C,MAAMe,EAAoBJ,EAAU,OAAO,KAAK,SAAS,EACzDI,EAAkB,UAAY,KAC1Bx4L,EAAG,MAAO,EACHtsG,EAAO6kS,EAAgB,KAAK,GAEvCC,EAAkB,QAAUhkS,IACxBwrG,EAAG,MAAO,EACHtsG,EAAO6kS,EAAgB,KAAK,EAE1C,CACJ,EACDF,EAAe,QAAU7jS,IACrBwrG,EAAG,MAAO,EACHtsG,EAAO2kS,EAAe,KAAK,GAEtCF,EAAO,WAAa,IAAM,CAClBH,GAAW,KACXh4L,EAAG,MAAO,EAGVg4L,EAAQ,WAAa,IAAMh4L,EAAG,MAAO,CAE5C,CACrB,CACa,EACD63L,EAAY,QAAUrjS,GAASd,EAAOmkS,EAAY,KAAK,CACnE,CAAS,CACT,CACA,CACAC,GAAiB,WAAa,eAEvB,MAAMW,GAAmB7qR,GACvB+uC,GAAG,EAAG,QAAQ,YAAY,GAIvB,CAAC,MAAM,QAAQ/uC,CAAG,GAAKA,EAAI,WAAWkqR,GAAiB,UAAU,EAC1DY,IAAiB9qR,EAAI,MAAMkqR,GAAiB,WAAW,MAAM,CAAC,EAJlE,KAWfnB,GAAiB,mBAAmB8B,EAAe,EACnD9B,GAAiB,mBAAmB8B,EAAe,EAkB5C,SAASC,IAAiBX,EAAW,CACxC,OAAO,IAAID,GAAiBC,CAAS,CACzC,CACA,SAASY,IAAiBjgS,EAAK,CAC3B,OAAOA,EAAI,WAAWo/R,GAAiB,UAAU,EAC7Cp/R,EAAI,MAAMo/R,GAAiB,WAAW,MAAM,EAC5Cp/R,CACR,CACO,MAAMkgS,GAAwB,CACjC,aAAc,CACV,KAAK,UAAYlB,GAAqB,CAC9C,CACI,MAAM,YAAa,CACf,OAAO,IAAI,QAAQ,CAACjkS,EAASC,IAAW,CACpC,MAAMmkS,EAAc,KAAK,UAAU,KAAKP,GAAeC,EAAgB,EACvEM,EAAY,gBAAkB,IAAMD,GAAcC,CAAW,EAC7DA,EAAY,UAAY,IAAM,CAC1B,MAAM73L,EAAK63L,EAAY,OACjBgB,EAAK74L,EAAG,YAAYy3L,GAAiB,UAAU,EAU/CqB,EATQD,EAAG,YAAYpB,EAAe,EASZ,OAAQ,EACxCqB,EAAkB,UAAY,IAAM,CAChC,MAAM7gQ,EAAM,CAAE,EACd,UAAWnhC,KAAQgiS,EAAkB,OACjC7gQ,EAAInhC,EAAK,SAAS,EAAIA,EAAK,mBAE/BrD,EAAQwkC,CAAG,CACd,EACD6gQ,EAAkB,QAAUtkS,IACxBwrG,EAAG,MAAO,EACHtsG,EAAOolS,EAAkB,KAAK,GAEzCD,EAAG,WAAa,IAAM74L,EAAG,MAAO,CACnC,EACD63L,EAAY,QAAUrjS,GAASd,EAAOmkS,EAAY,KAAK,CACnE,CAAS,CACT,CACI,MAAM,YAAY5zR,EAAM,CACpB,OAAAA,EAAO00R,IAAiB10R,CAAI,EACrB,IAAI,QAAQ,CAACxQ,EAASC,IAAW,CACpC,MAAMmkS,EAAc,KAAK,UAAU,KAAKP,GAAeC,EAAgB,EACvEM,EAAY,gBAAkB,IAAMD,GAAcC,CAAW,EAC7DA,EAAY,UAAY,IAAM,CAC1B,MAAM73L,EAAK63L,EAAY,OACjBM,EAASn4L,EAAG,YAAYy3L,GAAiB,WAAW,EACpDW,EAAYD,EAAO,YAAYV,EAAe,EAC9CsB,EAAiBX,EAAU,IAAIn0R,CAAI,EACzC,IAAI+zR,EACJe,EAAe,UAAY,IAAM,CAC7B,GAAIA,EAAe,QAAU,KACzB,OAAA/4L,EAAG,MAAO,EACHtsG,EAAO,IAAI,MAAM,gCAAgCuQ,CAAI,iBACzC,CAAC,EAEnB,CAED,MAAMu0R,EAAoBJ,EAAU,OAAOn0R,CAAI,EACzC+0R,EAAkB,IAAM,CAE1BhB,EAAUh4L,EAAG,YAAYw3L,GAAkB,WAAW,EAEtD,MAAMyB,EADajB,EAAQ,YAAYR,EAAgB,EACjB,OAAOvzR,CAAI,EACjDg1R,EAAmB,UAAY,IAAMxlS,EAAQslS,EAAe,OAAO,kBAAkB,EACrFE,EAAmB,QAAUzkS,GAASd,EAAOqlS,EAAe,KAAK,CACpE,EAGDP,EAAkB,UAAYQ,EAC9BR,EAAkB,QAAUhkS,IACxBwkS,EAAiB,EACjBh5L,EAAG,MAAO,EACHtsG,EAAOqlS,EAAe,KAAK,EAE9D,CACiB,EACDA,EAAe,QAAUvkS,IACrBwrG,EAAG,MAAO,EACHtsG,EAAOqlS,EAAe,KAAK,GAEtCZ,EAAO,WAAa,IAAM,CAClBH,GAAW,KACXh4L,EAAG,MAAO,EAGVg4L,EAAQ,WAAa,IAAMh4L,EAAG,MAAO,CAE5C,CACJ,EACD63L,EAAY,QAAUrjS,GAASd,EAAOmkS,EAAY,KAAK,CACnE,CAAS,CACT,CACA,CC7UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBA,MAAMqB,GAAiB,IACjBC,GAAc,sBACdC,GAAc,OACdC,IAAwB,iBACxBC,IAAsB,eACtBC,IAAqB,cACrBC,IAAwB,iBA2B9B,SAASC,GAAax1R,EAAM,CACxB,MAAO,CACH,KAAM,CAACk1R,GAAal1R,EAAMm1R,EAAW,EAAE,KAAKF,EAAc,EAC1D,SAAU,CAACC,GAAal1R,EAAMo1R,GAAqB,EAAE,KAAKH,EAAc,EACxE,YAAa,CAACC,GAAal1R,EAAMq1R,GAAmB,EAAE,KAAKJ,EAAc,EACzE,WAAY,CAACC,GAAal1R,EAAMs1R,GAAkB,EAAE,KAAKL,EAAc,EACvE,cAAe,CAACC,GAAal1R,EAAMu1R,GAAqB,EAAE,KAAKN,EAAc,CAChF,CACL,CACA,SAASQ,GAAY9+P,EAAM,CACvB,UAAWliC,KAAO,OAAO,OAAOkiC,CAAI,EAChC,OAAO,aAAa,WAAWliC,CAAG,CAE1C,CAQA,SAASihS,IAAoBjhS,EAAK,CAC9B,MAAMy1C,EAAQz1C,EAAI,MAAMwgS,EAAc,EACtC,GAAI/qP,EAAM,OAAS,EACf,MAAM,IAAI,MAAM,uBAAuBz1C,CAAG,EAAE,EAEhD,OAAOy1C,EAAM,MAAM,EAAGA,EAAM,OAAS,CAAC,EAAE,KAAK+qP,EAAc,CAC/D,CACA,SAASP,IAAiBjgS,EAAK,CAC3B,OAAOA,EAAI,WAAWkhS,GAAoB,UAAU,EAChDlhS,EAAI,MAAMkhS,GAAoB,WAAW,MAAM,EAC/ClhS,CACR,CAMA,MAAMkhS,EAAoB,CACtB,YAAY7B,EAAW,CACnB,GAAI,CAACp7O,GAAG,EAAG,QAAQ,YAAY,GAAK,OAAO,OAAW,KAClD,OAAO,OAAO,aAAiB,IAK/B,MAAM,IAAI,MAAM,yDAAyD,EAG7E,GADA,KAAK,GAAK,OAAO,aACbo7O,GAAa,MAAQ,CAACA,EACtB,MAAM,IAAI,MAAM,oEAAoE,EAExF,KAAK,UAAYA,EACjB,KAAK,KAAO0B,GAAa,KAAK,SAAS,CAC/C,CAUI,MAAM,KAAK9D,EAAgB,CACvB,GAAIA,EAAe,yBAAyB,YACxC,MAAM,IAAI,MAAM,0FACY,EAE3B,CACD,MAAMkE,EAAW,KAAK,UAAUlE,EAAe,aAAa,EACtDD,EAAc,KAAK,UAAUC,EAAe,WAAW,EACvDuC,EAAqBpC,GAA6BH,CAAc,EAGhEmE,EAAexH,GAAqB,KAAKqD,EAAe,UAAU,EACxE,GAAI,CACA,KAAK,GAAG,QAAQ,KAAK,KAAK,KAAM,KAAK,UAAUuC,CAAkB,CAAC,EAClE,KAAK,GAAG,QAAQ,KAAK,KAAK,SAAU2B,CAAQ,EAC5C,KAAK,GAAG,QAAQ,KAAK,KAAK,YAAanE,CAAW,EAClD,KAAK,GAAG,QAAQ,KAAK,KAAK,WAAYT,IAA0B6E,CAAY,CAAC,EAI7E,MAAM1pP,EAAW,CACb,OAAQulP,EAAe,OACvB,YAAaA,EAAe,YAC5B,YAAaA,EAAe,YAC5B,UAAWA,EAAe,WAAa,KACnCA,EAAe,UACf,OACJ,oBAAqBA,EAAe,qBAAuB,KACvDA,EAAe,oBACf,OACJ,iBAAkBA,EAAe,kBAAoB,KACjDA,EAAe,iBACf,OACJ,qBAAsBA,EAAe,sBAAwB,KACzDA,EAAe,qBACf,OACJ,eAAgBA,EAAe,gBAAkB,KAC7CA,EAAe,eACf,MACP,EACD,YAAK,GAAG,QAAQ,KAAK,KAAK,cAAe,KAAK,UAAUvlP,CAAQ,CAAC,EAC1D,CAAE,mBAAA8nP,CAAoB,CAC7C,MACwB,CAER,MAAAwB,GAAY,KAAK,IAAI,EACf,IAAI,MAAM,yBAAyB,KAAK,SAAS,yGAE7BxB,EAAmB,kBAAkB,sBACvCA,EAAmB,gBAAgB,qBACpCA,EAAmB,eAAe,GAAG,CAC5E,CACA,CACA,CASI,MAAM,MAAO,CACT,MAAMh4Q,EAAO,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC,EACvD,GAAIA,GAAQ,KACR,MAAM,IAAI,MAAM,kDAAkD,KAAK,SAAS,GAAG,EAEvF,GAAIA,EAAK,oBAAsB,OAC3B,MAAM,IAAI,MAAM,2EACG,EAEvB,MAAM+X,EAAM,CAAE,EAER4hQ,EAAW,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC,EAC/D,GAAIA,GAAY,KACZ,MAAM,IAAI,MAAM,4CAA4C,KAAK,SAAS,eACzD,EAErB5hQ,EAAI,cAAgB4hQ,EAEpB,MAAMnE,EAAc,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,WAAW,CAAC,EACrE,GAAIA,GAAe,KACf,MAAM,IAAI,MAAM,gDAAgD,KAAK,SAAS,gBAC5D,EAEtBz9P,EAAI,YAAcy9P,EAElB,MAAMqE,EAAiB,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAa,EAC9D,GAAIA,GAAkB,KAAM,CACxB,MAAM3pP,EAAW,KAAK,MAAM2pP,CAAc,EAC1C9hQ,EAAI,OAASmY,EAAS,OACtBnY,EAAI,YAAcmY,EAAS,YAC3BnY,EAAI,YAAcmY,EAAS,YACvBA,EAAS,WAAa,OACtBnY,EAAI,UAAYmY,EAAS,WAEzBA,EAAS,qBAAuB,OAChCnY,EAAI,oBAAsBmY,EAAS,qBAEnCA,EAAS,kBAAoB,OAC7BnY,EAAI,iBAAmBmY,EAAS,kBAEhCA,EAAS,sBAAwB,OACjCnY,EAAI,qBAAuBmY,EAAS,sBAEpCA,EAAS,gBAAkB,OAC3BnY,EAAI,eAAiBmY,EAAS,eAE9C,CAEQ,MAAM4pP,EAAmB,KAAK,GAAG,QAAQ,KAAK,KAAK,UAAU,EAC7D,GAAIA,GAAoB,KACpB,MAAM,IAAI,MAAM,wDACR,KAAK,SAAS,gBAAgB,EAE1C,OAAA/hQ,EAAI,WAAai9P,IAA0B8E,CAAgB,EACpD/hQ,CACf,CACA,CACA2hQ,GAAoB,WAAa,kBAE1B,MAAMK,GAAsBrsR,GAC1B+uC,GAAG,EAAG,QAAQ,YAAY,GAIvB,CAAC,MAAM,QAAQ/uC,CAAG,GAAKA,EAAI,WAAWgsR,GAAoB,UAAU,EAC7DM,IAAoBtsR,EAAI,MAAMgsR,GAAoB,WAAW,MAAM,CAAC,EAJxE,KAWfjD,GAAiB,mBAAmBsD,EAAkB,EACtDtD,GAAiB,mBAAmBsD,EAAkB,EAyB/C,SAASC,IAAoBnC,EAAW,CAC3C,OAAO,IAAI6B,GAAoB7B,CAAS,CAC5C,CACO,MAAMoC,GAA2B,CACpC,aAAc,CACVriK,EAAOn7E,GAAG,EAAG,QAAQ,YAAY,EAAG,IAAM,0CAA0C,EACpFm7E,EAAO,OAAO,OAAW,KACrB,OAAO,OAAO,aAAiB,IAAa,IAAM,yDAAyD,EAC/G,KAAK,GAAK,OAAO,YACzB,CACI,MAAM,YAAa,CACf,MAAM7/F,EAAM,CAAE,EACRpQ,EAASsxQ,GAAcD,GACvBl0B,EAASk0B,GAAiBE,GAChC,QAASnmS,EAAI,EAAGA,EAAI,KAAK,GAAG,OAAQ,EAAEA,EAAG,CACrC,MAAMyF,EAAM,KAAK,GAAG,IAAIzF,CAAC,EACzB,GAAIyF,EAAI,WAAWmvB,CAAM,GAAKnvB,EAAI,SAASssQ,CAAM,EAAG,CAChD,MAAM+yB,EAAY4B,IAAoBjhS,CAAG,EACzCu/B,EAAI8/P,CAAS,EAAI,KAAK,MAAM,KAAK,GAAG,QAAQr/R,CAAG,CAAC,CAChE,CACA,CACQ,OAAOu/B,CACf,CACI,MAAM,YAAYh0B,EAAM,CACpBA,EAAO00R,IAAiB10R,CAAI,EAC5B,MAAM22B,EAAO6+P,GAAax1R,CAAI,EAC9B,GAAI,KAAK,GAAG,QAAQ22B,EAAK,IAAI,GAAK,KAC9B,MAAM,IAAI,MAAM,8BAA8B32B,CAAI,GAAG,EAEzD,MAAMic,EAAO,KAAK,MAAM,KAAK,GAAG,QAAQ0a,EAAK,IAAI,CAAC,EAClD,OAAA8+P,GAAY9+P,CAAI,EACT1a,CACf,CACA,CCxTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BA,MAAMk6Q,GAAoB,MACnB,MAAMC,EAA0B,CACnC,aAAc,CACV,KAAK,SAAW,CAAE,CAC1B,CACI,OAAO,aAAc,CACjB,OAAIA,GAA0B,UAAY,OACtCA,GAA0B,SAAW,IAAIA,IAEtCA,GAA0B,QACzC,CAOI,OAAO,gBAAgBC,EAAQ77M,EAAS,CACpCq5C,EAAOwiK,GAAU,KAAM,IAAM,uCAAuC,EAChEA,EAAO,SAASF,EAAiB,IACjCE,EAASA,EAAO,MAAM,EAAGA,EAAO,QAAQF,EAAiB,CAAC,GAE9DtiK,EAAOwiK,EAAO,OAAS,EAAG,IAAM,qCAAqC,EACrE,MAAMn5P,EAAWk5P,GAA0B,YAAa,EACxDviK,EAAO32F,EAAS,SAASm5P,CAAM,GAAK,KAAM,IAAM,2DAA2DA,CAAM,IAAI,EACrHn5P,EAAS,SAASm5P,CAAM,EAAI77M,CACpC,CACI,OAAO,WAAW67M,EAAQ,CACtB,MAAM77M,EAAU47M,GAA0B,YAAW,EAAG,SAASC,CAAM,EACvE,GAAI77M,GAAW,KACX,MAAM,IAAI,MAAM,yCAAyC67M,CAAM,GAAG,EAEtE,OAAO77M,CACf,CACI,OAAO,YAAa,CAChB,OAAO,OAAO,KAAK47M,GAA0B,YAAW,EAAG,QAAQ,CAC3E,CACA,CASA,SAASE,GAAS3sR,EAAK,CACnB,GAAIA,EAAI,QAAQwsR,EAAiB,IAAM,GACnC,MAAM,IAAI,MAAM,6EAETC,GAA0B,WAAU,EAAG,KAAK,GAAG,CAAC,EAAE,EAE7D,MAAO,CACH,OAAQzsR,EAAI,MAAMwsR,EAAiB,EAAE,CAAC,EACtC,KAAMxsR,EAAI,MAAMwsR,EAAiB,EAAE,CAAC,CACvC,CACL,CACA,eAAeI,GAAmBtkO,EAAWukO,EAASC,EAAe,GAAO,CACxE5iK,EAAO5hE,IAAcukO,EAAS,IAAM,wCAAwCvkO,CAAS,GAAG,EACxF,MAAMykO,EAAehE,GAAiB,gBAAgBzgO,CAAS,EAC/D4hE,EAAO6iK,EAAa,OAAS,EAAG,IAAM,kEAAkEzkO,CAAS,GAAG,EACpH4hE,EAAO6iK,EAAa,OAAS,EAAG,IAAM,yCAAyCA,EAAa,MAAM,kCAC9DzkO,CAAS,GAAG,EAChD,MAAM0kO,EAAcD,EAAa,CAAC,EAC5BE,EAAelE,GAAiB,gBAAgB8D,CAAO,EAC7D3iK,EAAO+iK,EAAa,OAAS,EAAG,IAAM,uEAC3BJ,CAAO,GAAG,EACrB3iK,EAAO+iK,EAAa,OAAS,EAAG,IAAM,yCAAyCF,EAAa,MAAM,uCACzDF,CAAO,GAAG,EACnD,MAAMK,EAAcD,EAAa,CAAC,EAC5BE,EAAeR,GAASrkO,CAAS,EAAE,OACnC8kO,EAAaT,GAASrkO,CAAS,EAAE,KACjC+kO,EAAaF,IAAiBR,GAASrkO,CAAS,EAAE,OAClDy/N,EAAiB,MAAMiF,EAAY,KAAM,EAI3CF,GAAgBO,GAChB,MAAMZ,GAA0B,WAAWU,CAAY,EAClD,YAAYC,CAAU,EAE/B,MAAME,EAAa,MAAMJ,EAAY,KAAKnF,CAAc,EAIxD,OAAI+E,GAAgB,CAACO,GACjB,MAAMZ,GAA0B,WAAWU,CAAY,EAClD,YAAYC,CAAU,EAExBE,EAAW,kBACtB,CAoCA,eAAeC,KAAa,CACxB,MAAMC,EAAUf,GAA0B,WAAY,EAChDpiQ,EAAM,CAAE,EACd,UAAWqiQ,KAAUc,EAAS,CAC1B,MAAMC,EAAY,MAAMhB,GAA0B,WAAWC,CAAM,EAAE,WAAY,EACjF,UAAWr2R,KAAQo3R,EAAW,CAC1B,MAAMztR,EAAM0sR,EAASF,GAAoBn2R,EACzCg0B,EAAIrqB,CAAG,EAAIytR,EAAUp3R,CAAI,CACrC,CACA,CACI,OAAOg0B,CACX,CAkCA,eAAeqjQ,IAAY1tR,EAAK,CAC5B,MAAM2tR,EAAgBhB,GAAS3sR,CAAG,EAElC,OADgBysR,GAA0B,WAAWkB,EAAc,MAAM,EAC1D,YAAYA,EAAc,IAAI,CACjD,CAgDA,eAAeC,IAAUtlO,EAAWukO,EAAS,CAEzC,OAAOD,GAAmBtkO,EAAWukO,EAAS,EAAY,CAC9D,CA+CA,eAAegB,IAAUvlO,EAAWukO,EAAS,CAEzC,OAAOD,GAAmBtkO,EAAWukO,EAAS,EAAY,CAC9D,CChTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBO,MAAMiB,GAAgB,CACzB,aAAc,CAEV,KAAK,YAAc,mBACnB,KAAK,aAAe,CAAE,EACtB,KAAK,oBAAsB,EAC3B,KAAK,iBAAmB,EAChC,CACI,MAAMz3R,EAAMwW,EAAM,CACd,OAAO,MAAMxW,EAAMwW,CAAI,CAC/B,CACI,KAAM,CACF,OAAO,YAAY,IAAK,CAChC,CACI,OAAO5W,EAAM2hR,EAAU,CACnB,GAAIA,IAAa,SAAWA,IAAa,OACrC,MAAM,IAAI,MAAM,kDAAkDA,CAAQ,EAAE,EAEhF,OAAI,KAAK,aAAe,OACpB,KAAK,YAAc,IAAI,aAEpB,KAAK,YAAY,OAAO3hR,CAAI,CAC3C,CACI,OAAOg7J,EAAO2mH,EAAU,CACpB,OAAO,IAAI,YAAYA,CAAQ,EAAE,OAAO3mH,CAAK,CACrD,CAKI,iBAAiB88H,EAAa5/Q,EAAO,CACjC,GAAI,OAAO,OAAW,KAClB,CAAC4gC,GAAK,EAAC,QAAQ,sBAAsB,EAAG,CACxC,WAAWg/O,EAAa5/Q,CAAK,EAC7B,MACZ,CACQ,KAAK,aAAa,KAAK4/Q,CAAW,EAClC,WAAW,IAAM,CACb,OAAO,YAAY,CAAE,KAAM,KAAK,YAAa,MAAO,KAAK,aAAa,OAAS,CAAC,EAAI,GAAG,CAC1F,EAAE5/Q,CAAK,EACH,KAAK,mBACN,KAAK,iBAAmB,GACxB,OAAO,iBAAiB,UAAYlmB,GAAU,CAC1C,GAAIA,EAAM,SAAW,QAAUA,EAAM,KAAK,OAAS,KAAK,YAAa,CACjEA,EAAM,gBAAiB,EACvB,MAAM8lS,EAAc,KAAK,aAAa9lS,EAAM,KAAK,KAAK,EACtD8lS,EAAa,EACb,KAAK,sBACD,KAAK,sBAAwB,KAAK,aAAa,SAC/C,KAAK,aAAe,CAAE,EACtB,KAAK,oBAAsB,EAEnD,CACa,EAAE,EAAI,EAEnB,CACI,aAAatrS,EAAG,CACZ,OAAOkvR,GAAoBlvR,CAAC,CACpC,CACA,CACA,GAAIssD,GAAK,EAAC,IAAI,YAAY,EAAG,CACzBA,GAAK,EAAC,YAAY,UAAW,IAAI++O,GAAiB,EAElD,GAAI,CACArB,GAA0B,gBAAgBT,GAAoB,WAAY,IAAIO,GAA4B,CAClH,MACgB,CAChB,CAEI,GAAI,CACAE,GAA0B,gBAAgBvC,GAAiB,WAAY,IAAIc,GAAyB,CAC5G,MACgB,CAChB,CACA,CChGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBO,MAAMgD,IAAe,CAExB,YAAa,IAAM,QAAQ,YAAY,CAC3C,EACA,IAAIC,GAYG,MAAMC,GAAa,CACtB,aAAc,CAEV,KAAK,KAAO,QAAQ,MAAM,EAG1B,KAAK,YAAc,IAAI,KAAK,KAAK,WACzC,CACI,MAAM73R,EAAMshR,EAAc,CACtB,OAAI5oO,GAAK,EAAC,OAAO,OAAS,KACfA,GAAG,EAAG,OAAO,MAAM14C,EAAMshR,CAAY,GAE5CsW,IAAe,OACfA,GAAcD,IAAa,YAAa,GAErCC,GAAY53R,EAAMshR,CAAY,EAC7C,CACI,KAAM,CACF,MAAMx8Q,EAAO,QAAQ,OAAQ,EAC7B,OAAOA,EAAK,CAAC,EAAI,IAAOA,EAAK,CAAC,EAAI,GAC1C,CACI,OAAOlF,EAAM2hR,EAAU,CACnB,GAAIA,IAAa,SAAWA,IAAa,OACrC,MAAM,IAAI,MAAM,sDAAsDA,CAAQ,EAAE,EAEpF,OAAO,KAAK,YAAY,OAAO3hR,CAAI,CAC3C,CACI,OAAOg7J,EAAO2mH,EAAU,CACpB,OAAI3mH,EAAM,SAAW,EACV,GAEJ,IAAI,KAAK,KAAK,YAAY2mH,CAAQ,EAAE,OAAO3mH,CAAK,CAC/D,CACI,aAAaxuK,EAAG,CACZ,OAAO,KAAK,KAAK,MAAM,eAAeA,CAAC,GAChC,KAAK,KAAK,MAAM,aAAaA,CAAC,GAC9B,KAAK,KAAK,MAAM,aAAaA,CAAC,GAC9B,KAAK,KAAK,MAAM,oBAAoBA,CAAC,CACpD,CACA,CACIssD,GAAK,EAAC,IAAI,SAAS,GAAK,CAACA,KAAM,IAAI,YAAY,GAC/CA,GAAK,EAAC,YAAY,OAAQ,IAAIm/O,GAAc,EC3EhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CO,SAASr6Q,GAAO6tP,EAAOC,EAAQ,UAAWvyO,EAAQ,CACrD,OAAAuyO,EAAQA,GAAS,UACjBwsB,GAAwCzsB,CAAK,EACtC,IAAI0a,GAAa1a,EAAOC,EAAOvyO,CAAM,CAChD,CChDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASg/P,IAAM/rS,EAAGs/Q,EAAO,CACrB,MAAM0sB,EAAK/K,EAAgBjhS,EAAG,IAAK,MAAM,EAEzC,GAAI,CAACisS,IAAkB3sB,CAAK,EACxB,MAAM,IAAI,MAAM,mCAAmCA,CAAK,EAAE,EAE9D,GAAIA,IAAU,UAAY0sB,EAAG,QAAU,UACnC1sB,IAAU,UAAY0sB,EAAG,QAAU,SACnC,MAAM,IAAI,MAAM,uCAAuC,EAE3D,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,MAAAoxF,CAAO,EACvB,OAAOqd,EAAO,UAAUrX,GAAMwQ,EAAQ5nG,CAAK,CAC/C,CACO,MAAMg+G,GAAuBhoS,EAAG,CAAE,MAAA6nS,IAAO,EC/ChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASI,IAAOnsS,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAS,mBAAmB,CACvC,EAGxB,OAAO28R,EAAO,UAAUvU,GAAU0N,CAAM,CAC5C,CACO,MAAMtsI,GAAwBtlJ,EAAG,CAAE,OAAAioS,IAAQ,ECzClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6BO,SAASC,GAAMpsS,EAAGw4R,EAAU,GAAO,CACtC,QAAQ,IAAIx4R,EAAE,SAASw4R,CAAO,CAAC,CACnC,CC/BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBA2H,GAAiB,EAYjB,MAAM9F,IAAY,CACd,OAAA7oQ,GACJ,KAAI06Q,GACA,MAAA1iJ,GACA,MAAA4iJ,EACJ,EACA7R,IAAaF,GAAS,ECrCtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwEO,SAASgS,IAAS,CACrB,OAAO1P,CACX,CAmGO,SAAS9E,GAAK6E,EAAUnoR,EAAI,CAC/B,OAAOooR,EAAO,KAAKD,EAAUnoR,CAAE,CACnC,CAYO,SAASkkP,GAAQmjC,EAAW,CACfF,GAAsBE,CAAS,EACvC,QAAQsC,GAAUA,EAAO,QAAO,CAAE,CAC9C,CAiCO,SAASp0I,GAAKjmJ,EAAQ,CACzB,OAAO84R,EAAO,KAAK94R,CAAM,CAC7B,CA4CO,SAASyoS,GAAWvd,EAAa,CACpC,OAAO4N,EAAO,WAAW5N,CAAW,CACxC,CAQO,SAAS7gI,KAAQ,CACpB,OAAOyuI,EAAO,MAAO,CACzB,CAgDO,SAAS4P,GAAgB/hS,EAAM4xR,EAAS/xM,EAAW,EAAG,CACzD,OAAOsyM,EAAO,gBAAgBnyR,EAAM4xR,EAAS/xM,CAAQ,CACzD,CC3UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASmiN,IAAKpsS,EAAGK,EAAG,CAChB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EACtC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUzY,GAAK4R,CAAM,CACvC,CACO,MAAM9iQ,GAAsB9uB,EAAG,CAAE,KAAAsoS,IAAM,ECnD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+CA,SAASC,IAAUrsS,EAAGK,EAAG,CACrB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,UAAU,EACvC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,UAAU,EAC3C,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU7U,GAAUgO,CAAM,CAC5C,CACO,MAAM4W,GAA2BxoS,EAAG,CAAE,UAAAuoS,IAAW,ECtDxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASE,IAAKvsS,EAAGK,EAAG,CAChB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EAEtC,GADA,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAC5BsL,EAAG,QAAU,SAAWtL,EAAG,QAAU,QACrC,OAAO05L,GAASpuL,EAAItL,CAAE,EAE1B,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EACzBk7E,EAAQ,CAAE,EAEhB,OAAOyuG,EAAO,UAAU1V,GAAS6O,EAAQ5nG,CAAK,CAClD,CACO,MAAMyjG,GAAsBztR,EAAG,CAAE,KAAAyoS,IAAM,EC1D9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASC,IAAKxsS,EAAGK,EAAG,CAChB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EACtC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUxS,GAAU2L,CAAM,CAC5C,CACO,MAAMvB,GAAsBrwR,EAAG,CAAE,KAAA0oS,IAAM,ECrD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASC,IAAK7sS,EAAG,CACb,MAAMgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,KAAK,EACxC,GAAIgsS,EAAG,QAAU,YAAa,CAC1B,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EACxB,OAAOrP,EAAO,UAAUjX,GAAYoQ,CAAM,CAClD,KACS,CACD,MAAMA,EAAS,CAAE,EAAGkW,CAAI,EACxB,OAAOrP,EAAO,UAAU5Y,GAAK+R,CAAM,CAC3C,CACA,CACO,MAAMgX,GAAsB5oS,EAAG,CAAE,KAAA2oS,IAAM,EC3C9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+BA,SAASE,IAAM/sS,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAU3Y,GAAM8R,CAAM,CACxC,CACO,MAAMkX,IAAuB9oS,EAAG,CAAE,MAAA6oS,IAAO,ECpChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAOjtS,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAU1Y,GAAO6R,CAAM,CACzC,CACO,MAAMoX,IAAwBhpS,EAAG,CAAE,OAAA+oS,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASE,IAAMlP,EAAS,CACpBhE,EAAY,MAAM,QAAQgE,CAAO,EAAG,IAAM,4DAA4D,EACtGhE,EAAYgE,EAAQ,QAAU,EAAG,IAAM,uDAChCA,EAAQ,MAAM,EAAE,EACvB,MAAMmP,EAAWnP,EAAQ,IAAI,CAACr+R,EAAGoD,IAAMi+R,EAAgBrhS,EAAG,UAAUoD,CAAC,GAAI,MAAM,CAAC,EAC1EqqS,EAAcD,EAAS,CAAC,EAC9BA,EAAS,QAAQxtS,GAAK,CAClB,GAAIA,EAAE,QAAUytS,EAAY,MACxB,MAAM,IAAI,MAAM,0DAA0D,CAEtF,CAAK,EACDD,EAAS,QAAQxtS,GAAK,CAClB,GAAI,CAACs4R,GAAiBt4R,EAAE,MAAOytS,EAAY,KAAK,EAC5C,MAAM,IAAI,MAAM,0DAA0D,CAEtF,CAAK,EACD,MAAMvX,EAASsX,EACf,OAAOzQ,EAAO,UAAUxY,GAAM2R,CAAM,CACxC,CACO,MAAMwX,IAAuBppS,EAAG,CAAE,MAAAipS,IAAO,ECrDhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASI,IAAKvtS,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAE5C,MAAM1X,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,MAAM,CACxB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAChC,OAAO7Q,EAAO,UAAUvY,GAAK0R,EAAQ5nG,CAAK,CAC9C,CACO,MAAMtvB,IAAsB16J,EAAG,CAAE,KAAAqpS,IAAM,ECvD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASE,IAAKztS,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAE5C,MAAM1X,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,MAAM,CACxB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAChC,OAAO7Q,EAAO,UAAUtY,GAAKyR,EAAQ5nG,CAAK,CAC9C,CAEO,MAAM1L,IAAsBt+K,EAAG,CAAE,KAAAupS,IAAM,ECxD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASC,IAAQ1tS,EAAGg2L,EAAO,EAAG,CAE1B,MAAM8/F,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAQ,CACnB,EAClBkuL,EAAQ,CAAE,KAAA8H,CAAM,EACtB,OAAO2mG,EAAO,UAAUrY,GAAQwR,EAAQ5nG,CAAK,CACjD,CACO,MAAMy/G,IAAyBzpS,EAAG,CAAE,QAAAwpS,IAAS,EClDpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAQ5tS,EAAGg2L,EAAO,EAAG,CAE1B,MAAM8/F,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAQ,CACnB,EAClBkuL,EAAQ,CAAE,KAAA8H,CAAM,EACtB,OAAO2mG,EAAO,UAAUpY,GAAQuR,EAAQ5nG,CAAK,CACjD,CACO,MAAM2/G,IAAyB3pS,EAAG,CAAE,QAAA0pS,IAAS,EClDpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+BA,SAASE,IAAM9tS,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUnY,GAAMsR,CAAM,CACxC,CACO,MAAMiY,IAAuB7pS,EAAG,CAAE,MAAA4pS,IAAO,ECpChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAOhuS,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAUlY,GAAOqR,CAAM,CACzC,CACO,MAAMmY,IAAwB/pS,EAAG,CAAE,OAAA8pS,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAMluS,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUjY,GAAMoR,CAAM,CACxC,CACO,MAAMqY,IAAuBjqS,EAAG,CAAE,MAAAgqS,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAOhuS,EAAGK,EAAG,CAClB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,OAAO,EACpC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,OAAO,EACxC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU/X,GAAOkR,CAAM,CACzC,CACO,MAAMuY,IAAwBnqS,EAAG,CAAE,OAAAkqS,IAAQ,EC5ClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAOtuS,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAUhY,GAAOmR,CAAM,CACzC,CACO,MAAMyY,IAAwBrqS,EAAG,CAAE,OAAAoqS,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCO,SAASE,GAAsB5X,EAAY6X,EAAa3sB,EAASmX,EAAKyV,EAAa,OAAQC,EAAW,CAKzG,MAAMC,EAAgBhY,EAAW,CAAC,EAC5BiY,EAAe,CAAC,GAAGJ,EAAaG,CAAa,EAC7CE,EAAcC,GAAwBL,CAAU,EACtD,OAAOM,GAAkBpY,EAAYiY,EAAc/sB,EAAS6sB,EAAW1V,EAAK,KAAyB,KAAsB6V,CAAW,CAC1I,CACO,SAASG,GAAkBC,EAASC,EAAYrtB,EAAS6sB,EAAW1V,EAAKmW,EAAcV,EAAa,eAAgB,CACvH,KAAM,CAACW,EAAcC,CAAW,EAAIC,GAAgBJ,CAAU,EAC9D,IAAIV,EACJ,GAAIC,IAAe,eACfD,EAAc,CAACY,EAAcC,EAAaJ,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,UAE3DR,IAAe,gBACpBD,EAAc,CAACY,EAAcC,EAAaJ,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,MAGhE,OAAM,IAAI,MAAM,sBAAsBR,CAAU,EAAE,EAEtD,OAAOM,GAAkBE,EAAST,EAAa3sB,EAAS6sB,EAAW1V,EAAKmW,EAAc,GAAOV,CAAU,CAC3G,CAIO,SAASc,GAAkBN,EAASC,EAAYrtB,EAAS6sB,EAAW1V,EAAKmW,EAAcV,EAAa,QAAS,CAChH,KAAM,CAACe,EAAaJ,EAAcC,CAAW,EAAII,GAAiBP,CAAU,EAC5E,IAAIV,EACAK,EACJ,GAAIJ,IAAe,QACfI,EAAc,eACdL,EACI,CAACgB,EAAaJ,EAAcC,EAAaJ,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,UAE9DR,IAAe,QACpBI,EAAc,gBACdL,EACI,CAACgB,EAAaJ,EAAcC,EAAaJ,EAAQ,CAAC,EAAGA,EAAQ,CAAC,CAAC,MAGnE,OAAM,IAAI,MAAM,sBAAsBR,CAAU,EAAE,EAEtD,OAAOiB,GAAkBT,EAAST,EAAa3sB,EAAS6sB,EAAW1V,EAAK,GAAO6V,EAAaM,CAAY,CAC5G,CAKO,SAASJ,GAAkBE,EAAST,EAAa3sB,EAAS6sB,EAAW1V,EAAKmW,EAAcQ,EAAY,GAAOlB,EAAa,eAAgB,CAC3I,GAAI,CAACmB,EAAWC,EAAUC,EAASC,CAAU,EAAI,CAAC,GAAI,GAAI,GAAI,EAAE,EAChE,GAAItB,IAAe,eACf,CAACmB,EAAWC,EAAUC,EAASC,CAAU,EAAId,UAExCR,IAAe,gBACpB,CAACmB,EAAWG,EAAYF,EAAUC,CAAO,EAAIb,MAG7C,OAAM,IAAI,MAAM,sBAAsBR,CAAU,EAAE,EAEtD,KAAM,CAACW,EAAcC,EAAe,CAAAW,CAAc,EAAIxB,EAChD,CAACyB,EAAcC,CAAW,EAAIZ,GAAgBztB,CAAO,EACrD,CAACsuB,EAAgBC,CAAa,EAAId,GAAgBZ,CAAS,EAC3D2B,EAAwBC,GAAuBlB,EAAce,CAAc,EAC3EI,EAAuBD,GAAuBjB,EAAae,CAAa,EACxE,CAAE,QAAAI,EAAS,UAAAC,EAAW,SAAAC,CAAQ,EAAKC,IAAiB3X,EAAK6W,EAAUC,EAASG,EAAcC,EAAaG,EAAuBE,EAAsBpB,EAAcV,CAAU,EAC5KmC,EAAcjB,EAAYK,EAAiBD,EAAaC,EAC9D,IAAIa,EACJ,OAAIpC,IAAe,gBACfoC,EAAW,CAACjB,EAAWgB,EAAaH,EAAWC,CAAQ,EAElDjC,IAAe,iBACpBoC,EAAW,CAACjB,EAAWa,EAAWC,EAAUE,CAAW,GAEpD,CACH,UAAAhB,EACA,WAAAnB,EACA,SAAAoB,EACA,QAAAC,EACA,WAAAC,EACA,UAAAU,EACA,SAAAC,EACA,YAAAE,EACA,QAAAJ,EACA,aAAAP,EACA,YAAAC,EACA,aAAAd,EACA,YAAAC,EACA,sBAAAgB,EACA,qBAAAE,EACA,eAAAJ,EACA,cAAAC,EACA,QAAAnB,EACA,SAAA4B,EACA,YAAArC,CACH,CACL,CAKO,SAASkB,GAAkBT,EAAST,EAAa3sB,EAAS6sB,EAAW1V,EAAK2W,EAAY,GAAOlB,EAAa,eAAgBU,EAAc,CAC3I,GAAI,CAACS,EAAWkB,EAASjB,EAAUC,EAASC,CAAU,EAAI,CAAC,GAAI,GAAI,GAAI,GAAI,EAAE,EAC7E,GAAItB,IAAe,eACf,CAACmB,EAAWkB,EAASjB,EAAUC,EAASC,CAAU,EAAId,UAEjDR,IAAe,gBACpB,CAACmB,EAAWG,EAAYe,EAASjB,EAAUC,CAAO,EAAIb,MAGtD,OAAM,IAAI,MAAM,sBAAsBR,CAAU,EAAE,EAEtD,KAAM,CAACe,EAAaJ,EAAcC,EAAe,CAAAW,CAAc,EAAIxB,EAC7D,CAACuC,EAAad,EAAcC,CAAW,EAAIT,GAAiB5tB,CAAO,EACnE,CAACmvB,EAAeb,EAAgBC,CAAa,EAAIX,GAAiBf,CAAS,EAC3EuC,EAAuBX,GAAuBd,EAAawB,CAAa,EACxEX,EAAwBC,GAAuBlB,EAAce,CAAc,EAC3EI,EAAuBD,GAAuBjB,EAAae,CAAa,EACxE,CAAE,QAAAI,EAAS,SAAAU,EAAU,UAAAT,EAAW,SAAAC,GAAaS,IAAmBnY,EAAK8X,EAASjB,EAAUC,EAASiB,EAAad,EAAcC,EAAae,EAAsBZ,EAAuBE,EAAsBpB,CAAY,EACxNyB,EAAcjB,EAAYK,EAAiBD,EAAaC,EAC9D,IAAIa,EACJ,OAAIpC,IAAe,gBACfoC,EAAW,CAACjB,EAAWgB,EAAaM,EAAUT,EAAWC,CAAQ,EAE5DjC,IAAe,iBACpBoC,EAAW,CAACjB,EAAWsB,EAAUT,EAAWC,EAAUE,CAAW,GAE9D,CACH,UAAAhB,EACA,WAAAnB,EACA,QAAAqC,EACA,SAAAjB,EACA,QAAAC,EACA,WAAAC,EACA,SAAAmB,EACA,UAAAT,EACA,SAAAC,EACA,YAAAE,EACA,QAAAJ,EACA,YAAAO,EACA,aAAAd,EACA,YAAAC,EACA,YAAAV,EACA,aAAAJ,EACA,YAAAC,EACA,qBAAA4B,EACA,sBAAAZ,EACA,qBAAAE,EACA,cAAAS,EACA,eAAAb,EACA,cAAAC,EACA,QAAAnB,EACA,SAAA4B,EACA,YAAArC,CACH,CACL,CACA,SAAS4C,IAAqBnC,EAASoC,EAAW3X,EAAQ4X,EAASnC,EAAc,CACzEmC,GAAW,OACXA,EAAUC,GAAkBtC,EAASoC,EAAW3X,CAAM,GAE1D,MAAM8X,EAAYvC,EAAQ,CAAC,EACrBwC,EAAYxC,EAAQ,CAAC,EACrByC,EAAaC,IAAOH,EAAYH,EAAY,EAAIC,GAAW5X,EAAS,EAAGyV,CAAY,EACnFyC,EAAaD,IAAOF,EAAYJ,EAAY,EAAIC,GAAW5X,EAAS,EAAGyV,CAAY,EACzF,MAAO,CAACuC,EAAYE,CAAU,CAClC,CACA,SAASC,IAAqB5C,EAAST,EAAaoC,EAAa/uB,EAASyvB,EAASnC,EAAc,CACzFmC,GAAW,OACXA,EAAUC,GAAkBtC,EAAST,EAAY,CAAC,EAAG3sB,EAAQ,CAAC,CAAC,GAEnE,MAAMgvB,EAAW,CAAC,EAAG,EAAG,EAAGD,CAAW,EACtC,QAASpqS,EAAQ,EAAGA,EAAQ,EAAGA,IACvByoS,EAAQzoS,CAAK,EAAI,EAAI8qS,GAAW9C,EAAYhoS,CAAK,IACjDqqS,EAASrqS,CAAK,EAAImrS,IAAO1C,EAAQzoS,CAAK,EAAIgoS,EAAYhoS,CAAK,EAAI,EAAI8qS,GAAWzvB,EAAQr7Q,CAAK,EACvF,EAAG2oS,CAAY,GAG3B,OAAO0B,CACX,CACO,SAASU,GAAkB5a,EAAY0a,EAAW3X,EAAQoY,EAAW,EAAG,CAC3E,MAAMC,EAAqBzB,GAAuBe,EAAWS,CAAQ,EACrE,OAAO,KAAK,OAAOnb,EAAW,CAAC,GAAK+C,EAAS,GAAKA,EAASqY,GAAsB,CAAC,CACtF,CACA,SAASzC,GAAgBjkN,EAAO,CAC5B,OAAI,OAAOA,GAAU,SACV,CAACA,EAAOA,EAAOA,CAAK,EAE3BA,EAAM,SAAW,EACV,CAACA,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAG,CAAC,EAE1BA,CACX,CACA,SAASokN,GAAiBpkN,EAAO,CAC7B,OAAO,OAAOA,GAAU,SAAW,CAACA,EAAOA,EAAOA,CAAK,EAAIA,CAC/D,CAYA,SAASilN,GAAuBpB,EAAY4C,EAAU,CAClD,OAAIA,GAAY,EACL5C,EAEJA,GAAcA,EAAa,IAAM4C,EAAW,EACvD,CACA,SAASnB,IAAiB3X,EAAK6W,EAAUC,EAASG,EAAcC,EAAad,EAAcC,EAAaF,EAAcV,EAAY,CAC9H,IAAI+B,EACAC,EACAC,EACJ,GAAI,OAAO1X,GAAQ,SAAU,CAEzBwX,EAAU,CAAE,IAAKxX,EAAK,OAAQA,EAAK,KAAMA,EAAK,MAAOA,EAAK,KADzCA,IAAQ,EAAK,QAAU,QACiC,EACzE,MAAM6X,EAAWO,IAAqB,CAACvB,EAAUC,CAAO,EAAGV,EAAca,EAAcjX,EAAKmW,CAAY,EACxGsB,EAAYI,EAAS,CAAC,EACtBH,EAAWG,EAAS,CAAC,CAC7B,SACa7X,IAAQ,OAAQ,CACrByX,EAAY,KAAK,KAAKZ,EAAWI,CAAY,EAC7CS,EAAW,KAAK,KAAKZ,EAAUI,CAAW,EAC1C,MAAM8B,EAAiB,KAAK,IAAI,GAAIvB,EAAY,GAAKR,EAAeb,EAAeS,CAAQ,EACrFoC,EAAgB,KAAK,IAAI,GAAIvB,EAAW,GAAKR,EAAcb,EAAcS,CAAO,EAChF5vH,EAAM,KAAK,MAAM8xH,EAAiB,CAAC,EACnCz+F,EAASy+F,EAAiB9xH,EAC1BC,EAAO,KAAK,MAAM8xH,EAAgB,CAAC,EACnCz+F,EAAQy+F,EAAgB9xH,EAC9BqwH,EAAU,CAAE,IAAAtwH,EAAK,OAAAqzB,EAAQ,KAAApzB,EAAM,MAAAqzB,EAAO,KAAM,MAAQ,CAC5D,SACawlF,IAAQ,QACbwX,EAAU,CAAE,IAAK,EAAG,OAAQ,EAAG,KAAM,EAAG,MAAO,EAAG,KAAM,OAAS,EACjEC,EAAY,KAAK,MAAMZ,EAAWT,EAAe,GAAKa,CAAY,EAClES,EAAW,KAAK,MAAMZ,EAAUT,EAAc,GAAKa,CAAW,UAEzD,OAAOlX,GAAQ,SAAU,CAC9B,MAAM94G,EAAMuuH,IAAe,eAAiBzV,EAAI,CAAC,EAAE,CAAC,EAAIA,EAAI,CAAC,EAAE,CAAC,EAC1DzlF,EAASk7F,IAAe,eAAiBzV,EAAI,CAAC,EAAE,CAAC,EAAIA,EAAI,CAAC,EAAE,CAAC,EAC7D74G,EAAOsuH,IAAe,eAAiBzV,EAAI,CAAC,EAAE,CAAC,EAAIA,EAAI,CAAC,EAAE,CAAC,EAC3DxlF,EAAQi7F,IAAe,eAAiBzV,EAAI,CAAC,EAAE,CAAC,EAAIA,EAAI,CAAC,EAAE,CAAC,EAIlEwX,EAAU,CAAE,IAAAtwH,EAAK,OAAAqzB,EAAQ,KAAApzB,EAAM,MAAAqzB,EAAO,KAHrBtzB,IAAQ,GAAKqzB,IAAW,GAAKpzB,IAAS,GAAKqzB,IAAU,EAClE,QACA,UACiD,EACrDi9F,EAAYkB,IAAO9B,EAAWT,EAAelvH,EAAMqzB,GAAU08F,EAAe,EAAGd,CAAY,EAC3FuB,EAAWiB,IAAO7B,EAAUT,EAAclvH,EAAOqzB,GAAS08F,EAAc,EAAGf,CAAY,CAC/F,KAEQ,OAAM,MAAM,8BAA8BnW,CAAG,EAAE,EAEnD,MAAO,CAAE,QAAAwX,EAAS,UAAAC,EAAW,SAAAC,CAAU,CAC3C,CACA,SAASS,IAAmBnY,EAAK8X,EAASjB,EAAUC,EAASiB,EAAad,EAAcC,EAAaV,EAAaJ,EAAcC,EAAaF,EAAc,CACvJ,IAAIqB,EACAU,EACAT,EACAC,EAIJ,GAHI1X,IAAQ,UACRA,EAAM,GAEN,OAAOA,GAAQ,SAAU,CAEzBwX,EAAU,CACN,IAAKxX,EACL,OAAQA,EACR,KAAMA,EACN,MAAOA,EACP,MAAOA,EACP,KAAMA,EACN,KARaA,IAAQ,EAAK,QAAU,QASvC,EACD,MAAM6X,EAAWgB,IAAqB,CAACf,EAASjB,EAAUC,EAAS,CAAC,EAAG,CAACN,EAAaJ,EAAcC,CAAW,EAAG,EAAG,CAAC0B,EAAad,EAAcC,CAAW,EAAGlX,EAAKmW,CAAY,EAC/K+B,EAAWL,EAAS,CAAC,EACrBJ,EAAYI,EAAS,CAAC,EACtBH,EAAWG,EAAS,CAAC,CAC7B,SACa7X,IAAQ,OAAQ,CACrBkY,EAAW,KAAK,KAAKJ,EAAUC,CAAW,EAC1CN,EAAY,KAAK,KAAKZ,EAAWI,CAAY,EAC7CS,EAAW,KAAK,KAAKZ,EAAUI,CAAW,EAC1C,MAAMgC,GAAiBhB,EAAW,GAAKH,EAAcvB,EAAcsB,EAC7DkB,GAAkBvB,EAAY,GAAKR,EAAeb,EAAeS,EACjEoC,GAAiBvB,EAAW,GAAKR,EAAcb,EAAcS,EAC7DqC,EAAQ,KAAK,MAAMD,EAAgB,CAAC,EACpCE,EAAOF,EAAgBC,EACvBjyH,EAAM,KAAK,MAAM8xH,EAAiB,CAAC,EACnCz+F,EAASy+F,EAAiB9xH,EAC1BC,EAAO,KAAK,MAAM8xH,EAAgB,CAAC,EACnCz+F,EAAQy+F,EAAgB9xH,EAC9BqwH,EAAU,CAAE,IAAAtwH,EAAK,OAAAqzB,EAAQ,KAAApzB,EAAM,MAAAqzB,EAAO,MAAA2+F,EAAO,KAAAC,EAAM,KAAM,MAAQ,CACzE,KAEQ,OAAM,MAAM,8BAA8BpZ,CAAG,EAAE,EAEnD,MAAO,CAAE,QAAAwX,EAAS,SAAAU,EAAU,UAAAT,EAAW,SAAAC,CAAU,CACrD,CAOA,SAASiB,GAAMruS,EAAO6rS,EAAc,CAChC,GAAI,CAACA,EACD,OAAO,KAAK,MAAM7rS,CAAK,EAE3B,OAAQ6rS,EAAY,CAChB,IAAK,QAED,OAAO,KAAK,MAAM7rS,CAAK,EAC3B,IAAK,OAED,OAAO,KAAK,KAAKA,CAAK,EAC1B,IAAK,QACD,OAAO,KAAK,MAAMA,CAAK,EAC3B,QACI,MAAM,IAAI,MAAM,wBAAwB6rS,CAAY,EAAE,CAClE,CACA,CACO,SAASkD,GAAkBhnN,EAAO,CACrC,KAAM,CAACinN,EAAMC,EAAMC,CAAI,EAAIlD,GAAgBjkN,CAAK,EAChD,OAAOinN,IAAS,GAAKC,IAAS,GAAKC,IAAS,CAChD,CACO,SAASC,GAA+B5wB,EAAS6sB,EAAW,CAC/D,OAAO2D,GAAkBxwB,CAAO,GAAKwwB,GAAkB3D,CAAS,CACpE,CACO,SAASgE,GAA8B5lQ,EAAQ,CAClD,OAAOwiQ,GAAgBxiQ,CAAM,EAAE,MAAMxpC,GAASA,EAAQ,CAAC,CAC3D,CAQO,SAASwrS,GAAwBL,EAAY,CAChD,GAAIA,IAAe,OACf,MAAO,eAEN,GAAIA,IAAe,OACpB,MAAO,gBAGP,MAAM,IAAI,MAAM,sBAAsBA,CAAU,EAAE,CAE1D,CAgBO,SAASkE,GAA0BC,EAAQ5Z,EAAK6Z,EAAiB,CACpE,GAAIA,GAAmB,KAAM,CACzB,GAAI,OAAO7Z,GAAQ,SACf,MAAM,MAAM,YAAY4Z,CAAM,uDACPC,CAAe,gBAAgB7Z,CAAG,GAAG,EAE3D,GAAI,OAAOA,GAAQ,SACpBgB,EAAY8Y,GAAW9Z,CAAG,EAAG,IAAM,YAAY4Z,CAAM,uDAC9BC,CAAe,gBAAgB7Z,CAAG,GAAG,UAEvD,OAAOA,GAAQ,SACpBA,EAAI,QAAQx5R,GAAK,CACbA,EAAE,QAAQK,GAAK,CACXm6R,EAAY8Y,GAAWjzS,CAAC,EAAG,IAAM,YAAY+yS,CAAM,uDAC5BC,CAAe,gBAAgBhzS,CAAC,GAAG,CAC9E,CAAiB,CACjB,CAAa,MAGD,OAAM,MAAM,YAAY+yS,CAAM,gCAAgC5Z,CAAG,EAAE,CAE/E,CACA,CC9aA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAAS+Z,IAAShzS,EAAGq/Q,EAAO,CAExB,MAAMyW,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,UAAW,mBAAmB,CACzC,EAClBkuL,EAAQ,CAAE,MAAAmxF,CAAO,EACvB,OAAOsd,EAAO,UAAUpR,GAASuK,EAAQ5nG,CAAK,CAClD,CACO,MAAM+kH,GAA0B/uS,EAAG,CAAE,SAAA8uS,IAAU,ECpDtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASE,IAASlzS,EAAGmvS,EAAYrtB,EAASmX,EAAK6Z,EAAiB,CAC5D,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,UAAW,SAAS,EACjD2uS,EAAY,EAClB1U,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,wEAC7D7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD,IAAIyE,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,mDAAmDA,EAAI,IAAI,GAAG,EAChGE,GAAoC,UAAWra,EAAK6Z,CAAe,EACnE,MAAMhd,EAAS,CAAE,EAAGsd,CAAK,EACnBllH,EAAQ,CAAE,WAAAihH,EAAY,QAAArtB,EAAS,IAAAmX,EAAK,gBAAA6Z,CAAiB,EAE3D,IAAIzlS,EAAMsvR,EAAO,UAAU9X,GAASiR,EAAQ5nG,CAAK,EAEjD,OADA7gL,EAAM6+R,GAAK7+R,EAAK2+R,EAAG,KAAK,EACpBqH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMkmS,GAA0BrvS,EAAG,CAAE,SAAAgvS,IAAU,ECrEtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4DA,SAASM,IAAWxzS,EAAGmvS,EAAYrtB,EAASmX,EAAK6Z,EAAiBpE,EAAa,QAAS,CACpF,MAAM1C,EAAK/K,EAAgBjhS,EAAG,IAAK,YAAa,SAAS,EACzD,IAAIyzS,EAAMzH,EACN0H,EAAe,GACf1H,EAAG,OAAS,IACZ0H,EAAe,GACfD,EAAMR,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAE7E/R,EAAYwZ,EAAI,OAAS,EAAG,IAAM,qDAAqDA,EAAI,IAAI,GAAG,EAClGxZ,EAAYyU,IAAe,QAAS,IAAM,gFACbA,CAAU,EAAE,EACzCzU,EAAa,OAAOnY,GAAY,UAAYA,EAAU,GACjD,MAAM,QAAQA,CAAO,GAAKA,EAAQ,CAAC,EAAI,GAAKA,EAAQ,CAAC,EAAI,GACtDA,EAAQ,CAAC,EAAI,EAAI,IAAM,oDAAoDA,CAAO,GAAG,EAC7F8wB,GAA0B,YAAa3Z,EAAK6Z,CAAe,EAC3D,MAAMhd,EAAS,CAAE,EAAG2d,CAAK,EACnBvlH,EAAQ,CAAE,WAAAihH,EAAY,QAAArtB,EAAS,IAAAmX,EAAK,gBAAA6Z,EAAiB,WAAApE,CAAY,EAEvE,IAAIrhS,EAAMsvR,EAAO,UAAU5X,GAAW+Q,EAAQ5nG,CAAK,EAEnD,OADA7gL,EAAM6+R,GAAK7+R,EAAKomS,EAAI,KAAK,EACrBC,EACOT,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAEzEA,CACX,CACO,MAAMsmS,IAA4BzvS,EAAG,CAAE,WAAAsvS,IAAY,ECrF1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8DA,SAASI,IAAQ3V,EAASjoG,EAAO,EAAG,CAChCnuD,EAAOo2J,EAAQ,QAAU,EAAG,IAAM,oCAAoC,EACtE,MAAMmP,EAAW/L,GAAqBpD,EAAS,UAAW,SAAU,mBAAmB,EASvF,GARImP,EAAS,CAAC,EAAE,QAAU,aACtBA,EAAS,QAAQlP,GAAU,CACvB,GAAIA,EAAO,QAAU,YACjB,MAAM,IAAI,MAAM;AAAA,uBACTA,EAAO,KAAK,IAAI,CAEvC,CAAS,EAEDkP,EAAS,SAAW,EACpB,OAAO5jJ,GAAM4jJ,EAAS,CAAC,CAAC,EAE5B,MAAMtX,EAASsX,EACTn5R,EAAO,CAAE,KAAA+hL,CAAM,EACrB,OAAO2mG,EAAO,UAAUhX,GAAQmQ,EAAQ7hR,CAAI,CAChD,CACO,MAAM4/R,GAAyB3vS,EAAG,CAAE,QAAA0vS,IAAS,EChFpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAQ1zS,EAAGK,EAAGszS,EAAa,GAAOC,EAAa,GAAO,CAC3D,IAAI11L,EAAK2iL,EAAgB7gS,EAAG,IAAK,QAAQ,EACrC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,QAAQ,EACzC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EACzBk7E,EAAQ,CAAE,WAAA6lH,EAAY,WAAAC,CAAY,EACxC,OAAOrX,EAAO,UAAU1X,GAAa6Q,EAAQ5nG,CAAK,CACtD,CACO,MAAM+lH,GAAyB/vS,EAAG,CAAE,QAAA4vS,IAAS,EC7CpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASI,IAASl0S,EAAG,CAEjB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,UAAW,SAAS,CAC/B,EACxB,OAAO28R,EAAO,UAAUnQ,GAASsJ,CAAM,CAC3C,CACO,MAAMqe,GAA0BjwS,EAAG,CAAE,SAAAgwS,IAAU,ECrCtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsDA,SAASE,IAAOp0S,EAAGq0S,EAAOzoS,EAAM,CAC5B,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,QAAS,mBAAmB,EAC/D,GAAIgsS,EAAG,OAAS,EACZ,MAAM,IAAI,MAAM,gCAAgC,EAEpD,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,MAAAmmH,EAAO,KAAAzoS,CAAM,EAC7B,OAAO+wR,EAAO,UAAUvQ,GAAO0J,EAAQ5nG,CAAK,CAChD,CACO,MAAMomH,GAAwBpwS,EAAG,CAAE,OAAAkwS,IAAQ,EC/DlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASG,IAAMv0S,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAQ,SAAS,CAC5B,EACxB,OAAO28R,EAAO,UAAU9O,GAAMiI,CAAM,CACxC,CACO,MAAM0e,GAAuBtwS,EAAG,CAAE,MAAAqwS,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASE,IAAeC,EAAYC,EAAYC,EAAUh7R,EAAMxY,EAAGE,EAAG,CAClE,MAAMuzS,EAAc5T,EAAgByT,EAAY,aAAc,eAAe,EACvEI,EAAc7T,EAAgB0T,EAAY,aAAc,eAAe,EACvEI,EAAY9T,EAAgB2T,EAAU,WAAY,eAAe,EACjEI,EAAQ/T,EAAgBrnR,EAAM,OAAQ,eAAe,EACrDy8F,EAAK4qL,EAAgB7/R,EAAG,IAAK,eAAe,EAC5C2lH,EAAKk6K,EAAgB3/R,EAAG,IAAK,eAAe,EAC5CkoL,EAAWqqH,GAAO,CAACmB,EAAOjuL,CAAE,EAAG,CAAC,EAChCkuL,EAAWhB,GAAOzqH,EAAUsrH,CAAW,EACvCznS,EAAM2lB,GAAIiiR,EAAUF,CAAS,EAE7BlF,EAAYxiS,EAAI,MAAM,CAAC,EACvB6nS,EAAY7nS,EAAI,MAAM,CAAC,EAAI,EAC3B8nS,EAAY,CAACtF,EAAWqF,CAAS,EACjClyS,EAAIsxS,GAAMjnS,EAAK,CAAC,EAAG,CAAC,EAAG8nS,CAAS,EAChCl0B,EAAIqzB,GAAMjnS,EAAK,CAAC,EAAG6nS,CAAS,EAAGC,CAAS,EACxC3zS,EAAI8yS,GAAMjnS,EAAK,CAAC,EAAG6nS,EAAY,CAAC,EAAGC,CAAS,EAC5C/wS,EAAIkwS,GAAMjnS,EAAK,CAAC,EAAG6nS,EAAY,CAAC,EAAGC,CAAS,EAC5CC,EAAOpiR,GAAIuhQ,GAAI4f,GAAQnxS,CAAC,EAAGwxS,GAAKvzB,CAAC,CAAC,EAAGsT,GAAIl+K,EAAI89L,GAAQnhR,GAAI6hR,EAAarzS,CAAC,CAAC,CAAC,CAAC,EAC1E6zS,EAAO9gB,GAAIigB,GAAKY,CAAI,EAAGjB,GAAQ/vS,CAAC,CAAC,EACvC,MAAO,CAACgxS,EAAMC,CAAI,CACtB,CACO,MAAMC,IAAgCpxS,EAAG,CAAE,eAAAuwS,IAAgB,EC/DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqEA,SAASc,IAAgBv1S,EAAGw1S,EAAYC,EAAO,CAC3C,MAAMzJ,EAAK/K,EAAgBjhS,EAAG,IAAK,gBAAgB,EAC7C01S,EAAOF,EAAW,OAAO,CAAC,EAAG/0S,IAAM,EAAIA,CAAC,EAC9Cw5R,EAAY+R,EAAG,MAAQ,EAAIwJ,EAAW,OAAQ,IAAM,iBAAiBxJ,EAAG,IAAI,2CAA2CwJ,EAAW,MAAM,EAAE,EAC1Ivb,EAAYwb,EAAM,SAAWD,EAAW,OAAQ,IAAM,mBAAmBC,EAAM,MAAM,8CAA8CD,EAAW,MAAM,EAAE,EACtJvb,EAAY+R,EAAG,MAAM,CAAC,EAAI0J,IAAS,EAAG,IAAM,yBAAyB1J,EAAG,MAAM,CAAC,CAAC,sEAC9CwJ,EAAW,KAAK,KAAK,CAAC,QAAQE,CAAI,EAAE,EACtE,MAAM5f,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,WAAAsnH,EAAY,MAAAC,CAAO,EACnC,OAAO9Y,EAAO,UAAUzX,GAAgB4Q,EAAQ5nG,CAAK,CACzD,CACO,MAAMynH,GAAiCzxS,EAAG,CAAE,gBAAAqxS,IAAiB,EC/E7D,SAASK,IAAM51S,EAAG,CACrB,IAAIozS,EACJ,OAAIpzS,EAAE,OAAS,GAAKA,EAAE,OAAS,EAC3BozS,EAAMH,GAAQjzS,EAAG,CAAC,EAAG,EAAG,EAAGA,EAAE,IAAI,CAAC,EAE7BA,EAAE,OAAS,EAChBozS,EAAMH,GAAQjzS,EAAG,CAAC,EAAG,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,CAAC,CAAC,EAE1CA,EAAE,OAAS,EAChBozS,EAAMH,GAAQjzS,EAAG,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,CAAC,CAAC,EAGxDozS,EAAMpzS,EAEHozS,CACX,CChBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASyC,IAAW71S,EAAG81S,EAAMC,EAAU12P,EAAQ4sI,EAAO+pH,EAAiB,CAC/DA,GAAmB,OACnBA,EAAkB,MAEtB,MAAMhK,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCi2S,EAAQhV,EAAgB6U,EAAM,OAAQ,WAAW,EACjDI,EAAYjV,EAAgB8U,EAAU,WAAY,WAAW,EACnE,IAAII,EACAlqH,GAAS,OACTkqH,EAASlV,EAAgBh1G,EAAO,QAAS,WAAW,GAExD,IAAImqH,EACA/2P,GAAU,OACV+2P,EAAUnV,EAAgB5hP,EAAQ,SAAU,WAAW,GAE3D46O,EAAYgc,EAAM,OAASC,EAAU,KAAM,IAAM,8EAC/B,EAClBjc,EAAYmc,GAAW,MAAQH,EAAM,OAASG,EAAQ,KAAM,IAAM,4EAChD,EAClBnc,EAAYkc,GAAU,MAAQF,EAAM,OAASE,EAAO,KAAM,IAAM,2EAC9C,EAElB,MAAMrgB,EAAS,CACX,EAFQ8f,IAAM5J,CAAE,EAGhB,MAAOmK,EACP,OAAQC,EACR,KAAMH,EACN,SAAUC,CACb,EACKhoH,EAAQ,CAAE,gBAAA8nH,CAAiB,EAE3B3oS,EAAMsvR,EAAO,UAAU5U,GAAgB+N,EAAQ5nG,CAAK,EAC1D,OAAO+kH,GAAQ5lS,EAAK2+R,EAAG,KAAK,CAChC,CACO,MAAMqK,GAA4BnyS,EAAG,CAAE,WAAA2xS,IAAY,ECpE1D,SAASS,IAAat2S,EAAG81S,EAAMC,EAAU12P,EAAQ4sI,EAAO+pH,EAAiB,CACrE,MAAMhK,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCi2S,EAAQhV,EAAgB6U,EAAM,OAAQ,WAAW,EACjDI,EAAYjV,EAAgB8U,EAAU,WAAY,WAAW,EACnE,IAAII,EACAlqH,GAAS,OACTkqH,EAASlV,EAAgBh1G,EAAO,QAAS,WAAW,GAExD,IAAImqH,EACJ,OAAI/2P,GAAU,OACV+2P,EAAUnV,EAAgB5hP,EAAQ,SAAU,WAAW,GAE3D46O,EAAY+R,EAAG,OAAS,EAAG,IAAM,uDAC1BA,EAAG,IAAI,GAAG,EACjB/R,EAAYgc,EAAM,OAAS,GAAKA,EAAM,OAAS,EAAG,IAAM,oEACxCA,EAAM,IAAI,GAAG,EAC7Bhc,EAAYic,EAAU,OAAS,GAAKA,EAAU,OAAS,EAAG,IAAM,wEAC5CA,EAAU,IAAI,GAAG,EACjCC,GAAU,MACVlc,EAAYkc,EAAO,OAAS,GAAKA,EAAO,OAAS,EAAG,IAAM,qEACtCA,EAAO,IAAI,GAAG,EAElCC,GAAW,MACXnc,EAAYmc,EAAQ,OAAS,GAAKA,EAAQ,OAAS,EAAG,IAAM,sEACxCA,EAAQ,IAAI,GAAG,EAEhCC,GAAUrK,EAAIiK,EAAOC,EAAWE,EAASD,EAAQH,CAAe,CAC3E,CACO,MAAMO,IAA8BryS,EAAG,CAAE,aAAAoyS,IAAc,EC5B9D,SAASE,IAAax2S,EAAG81S,EAAMC,EAAU12P,EAAQ4sI,EAAO+pH,EAAiB,CACrE,MAAMhK,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCi2S,EAAQhV,EAAgB6U,EAAM,OAAQ,WAAW,EACjDI,EAAYjV,EAAgB8U,EAAU,WAAY,WAAW,EACnE,IAAII,EACAlqH,GAAS,OACTkqH,EAASlV,EAAgBh1G,EAAO,QAAS,WAAW,GAExD,IAAImqH,EACJ,OAAI/2P,GAAU,OACV+2P,EAAUnV,EAAgB5hP,EAAQ,SAAU,WAAW,GAE3D46O,EAAY+R,EAAG,OAAS,EAAG,IAAM,uDAC1BA,EAAG,IAAI,GAAG,EACjB/R,EAAYgc,EAAM,OAAS,GAAKA,EAAM,OAAS,EAAG,IAAM,oEACxCA,EAAM,IAAI,GAAG,EAC7Bhc,EAAYic,EAAU,OAAS,GAAKA,EAAU,OAAS,EAAG,IAAM,wEAC5CA,EAAU,IAAI,GAAG,EACjCC,GAAU,MACVlc,EAAYkc,EAAO,OAAS,GAAKA,EAAO,OAAS,EAAG,IAAM,qEACtCA,EAAO,IAAI,GAAG,EAElCC,GAAW,MACXnc,EAAYmc,EAAQ,OAAS,GAAKA,EAAQ,OAAS,EAAG,IAAM,sEACxCA,EAAQ,IAAI,GAAG,EAEhCC,GAAUrK,EAAIiK,EAAOC,EAAWE,EAASD,EAAQH,CAAe,CAC3E,CACO,MAAMS,IAA8BvyS,EAAG,CAAE,aAAAsyS,IAAc,EC5B9D,SAASE,IAAa12S,EAAG81S,EAAMC,EAAU12P,EAAQ4sI,EAAO+pH,EAAiB,CACrE,MAAMhK,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCi2S,EAAQhV,EAAgB6U,EAAM,OAAQ,WAAW,EACjDI,EAAYjV,EAAgB8U,EAAU,WAAY,WAAW,EACnE,IAAII,EACAlqH,GAAS,OACTkqH,EAASlV,EAAgBh1G,EAAO,QAAS,WAAW,GAExD,IAAImqH,EACJ,OAAI/2P,GAAU,OACV+2P,EAAUnV,EAAgB5hP,EAAQ,SAAU,WAAW,GAE3D46O,EAAY+R,EAAG,OAAS,EAAG,IAAM,uDAC1BA,EAAG,IAAI,GAAG,EACjB/R,EAAYgc,EAAM,OAAS,GAAKA,EAAM,OAAS,EAAG,IAAM,oEACxCA,EAAM,IAAI,GAAG,EAC7Bhc,EAAYic,EAAU,OAAS,GAAKA,EAAU,OAAS,EAAG,IAAM,wEAC5CA,EAAU,IAAI,GAAG,EACjCC,GAAU,MACVlc,EAAYkc,EAAO,OAAS,GAAKA,EAAO,OAAS,EAAG,IAAM,qEACtCA,EAAO,IAAI,GAAG,EAElCC,GAAW,MACXnc,EAAYmc,EAAQ,OAAS,GAAKA,EAAQ,OAAS,EAAG,IAAM,sEACxCA,EAAQ,IAAI,GAAG,EAEhCC,GAAUrK,EAAIiK,EAAOC,EAAWE,EAASD,EAAQH,CAAe,CAC3E,CACO,MAAMW,IAA8BzyS,EAAG,CAAE,aAAAwyS,IAAc,EC3C9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASE,IAAU52S,EAAG62S,EAASjrS,EAAM,CACjC,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,UAAU,EACvC82S,EAAW7V,EAAgB4V,EAAS,UAAW,UAAU,EAC/D5c,EAAY+R,EAAG,QAAU,QAAS,IAAM,yDACJA,EAAG,KAAK,EAAE,EAC9C/R,EAAYruR,GAAQ,EAAG,IAAM,sCAAsCA,CAAI,GAAG,EAC1EquR,EAAY6c,EAAS,OAAS9K,EAAG,MAAQ8K,EAAS,OAAS,EAAG,IAAM,gGAC9B9K,EAAG,KAAK,oBACvC8K,EAAS,KAAK,GAAG,EACxB,MAAMhhB,EAAS,CAAE,EAAGkW,EAAI,QAAS8K,CAAU,EACrC5oH,EAAQ,CAAE,KAAAtiL,CAAM,EACtB,OAAO+wR,EAAO,UAAUxX,GAAU2Q,EAAQ5nG,CAAK,CACnD,CACO,MAAM6oH,GAA2B7yS,EAAG,CAAE,UAAA0yS,IAAW,ECnDxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASI,IAAYh3S,EAAGC,EAAG,CACvB,MAAM+rS,EAAK/K,EAAgBjhS,EAAG,IAAK,YAAY,EACzCi3S,EAAKhW,EAAgBhhS,EAAG,IAAK,YAAY,EAC/C,GAAI,CAAC8/Q,GAAYisB,EAAG,MAAOiL,EAAG,KAAK,EAC/B,MAAM,IAAI,MAAM,oDAAoDjL,EAAG,KAAK,QAAQiL,EAAG,KAAK,EAAE,EAElG,GAAIjL,EAAG,QAAU,SAAWiL,EAAG,QAAU,QACrC,MAAM,IAAI,MAAM,wEAAwEjL,EAAG,KAAK,mBAAmBiL,EAAG,KAAK,EAAE,EAEjI,MAAMnhB,EAAS,CAAE,EAAGkW,EAAI,EAAGiL,CAAI,EAC/B,OAAOta,EAAO,UAAUvX,GAAY0Q,CAAM,CAC9C,CACO,MAAMohB,IAA6BhzS,EAAG,CAAE,YAAA8yS,IAAa,ECrD5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASG,IAAeC,EAAIC,EAAI,CAC5B,MAAMC,EAAcrW,EAAgBmW,EAAI,KAAM,gBAAiB,OAAO,EAChEG,EAActW,EAAgBoW,EAAI,KAAM,gBAAiB,OAAO,EACtE,GAAIC,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,oEACAA,EAAY,IAAI,EAAE,EAEtC,GAAIC,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,qEACAA,EAAY,IAAI,EAAE,EAEtC,MAAMzhB,EAAS,CAAE,GAAIwhB,EAAa,GAAIC,CAAa,EACnD,OAAO5a,EAAO,UAAUtX,GAAeyQ,CAAM,CACjD,CACO,MAAM0hB,IAAgCtzS,EAAG,CAAE,eAAAizS,IAAgB,EChDlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASM,IAAaz3S,EAAGq/Q,EAAO,CAC5B,IAAIz/P,EAAQqhR,EAAgBjhS,EAAG,cAAe,GAAG,EACjD,MAAM03S,EAAS93R,EAAM,MAErB,GADA0iQ,GAAmCjD,CAAK,EACpCA,EAAM,OAASz/P,EAAM,KACrB,MAAM,IAAI,MAAM,+BAA+By/P,EAAM,MAAM,iBAAiBz/P,EAAM,IAAI,GAAG,EAE7F,GAAIy/P,EAAM,OAASz/P,EAAM,KAAM,CAC3B,MAAM8gQ,EAAW9gQ,EAAM,MAAM,MAAO,EACpC,KAAO8gQ,EAAS,OAASrB,EAAM,QAC3BqB,EAAS,QAAQ,CAAC,EAEtB9gQ,EAAQqzR,GAAQrzR,EAAO8gQ,CAAQ,CACvC,CACI,MAAMkW,EAAah3Q,EAAM,MACnB+3R,EAAO,MAAM,KAAKt4B,CAAK,EAC7B,QAASr8Q,EAAIq8Q,EAAM,OAAS,EAAGr8Q,GAAK,EAAGA,IACnC,GAAI4zR,EAAW5zR,CAAC,IAAMq8Q,EAAMr8Q,CAAC,EACzB20S,EAAK30S,CAAC,EAAI,UAEL4c,EAAM,MAAM5c,CAAC,IAAM,EACxB,MAAM,IAAI,MAAM,mBAAmB00S,CAAM,6BAA6Br4B,CAAK,IAAI,EAIvF,GADas4B,EAAK,IAAI,CAACn4S,EAAGwD,IAAMxD,EAAI,EAAIwD,EAAI,EAAE,EAAE,OAAOA,GAAKA,GAAK,CAAC,EACzD,SAAW,EAChB,OAAOwmJ,GAAM5pI,CAAK,EAGtB,MAAMk2Q,EAAS,CAAE,EAAGl2Q,CAAO,EACrBsuK,EAAQ,CAAE,KAAAypH,CAAM,EACtB,OAAOhb,EAAO,UAAU7O,GAAMgI,EAAQ5nG,CAAK,CAC/C,CACO,MAAM0pH,GAA8B1zS,EAAG,CAAE,aAAAuzS,IAAc,ECtE9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASI,IAAM73S,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAQ,SAAS,CAC5B,EACxB,OAAO28R,EAAO,UAAUpX,GAAMuQ,CAAM,CACxC,CACO,MAAMgiB,IAAuB5zS,EAAG,CAAE,MAAA2zS,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASluQ,GAAK01O,EAAO97Q,EAAO+7Q,EAAO,CAC/BgD,GAAmCjD,CAAK,EACxCC,EAAQA,GAASsC,GAAWr+Q,CAAK,EACjC,MAAM2qL,EAAQ,CAAE,MAAAmxF,EAAO,MAAA97Q,EAAO,MAAA+7Q,CAAO,EACrC,OAAOqd,EAAO,UAAUhV,GAAM,GAAIz5F,CAAK,CAC3C,CCvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAAS6pH,IAAa/3S,EAAGg4S,EAAcC,EAAc,CACjD,MAAMjM,EAAK/K,EAAgBjhS,EAAG,IAAK,aAAa,EAGhD,GAFAi6R,EAAa+d,GAAgBC,EAAe,IAAM,uBAAuBD,CAAY,wCACnDC,CAAY,IAAI,EAC9CD,IAAiBC,EACjB,OAAOtuQ,GAAKqiQ,EAAG,MAAOgM,EAAchM,EAAG,KAAK,EAEhD,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,aAAA8pH,EAAc,aAAAC,CAAc,EAC5C,OAAOtb,EAAO,UAAUnX,GAAasQ,EAAQ5nG,CAAK,CACtD,CACO,MAAMgqH,GAA8Bh0S,EAAG,CAAE,aAAA6zS,IAAc,EClC9D,SAASI,IAAUla,EAAS,CACxB,OAAO4V,GAAO5V,EAAS,CAAa,CACxC,CACO,MAAMma,IAA2Bl0S,EAAG,CAAE,UAAAi0S,IAAW,ECaxD,SAASE,IAAUpa,EAASjoG,EAAM,CAC9B,OAAO69G,GAAO5V,EAASjoG,CAAI,CAC/B,CACO,MAAMsiH,IAA2Bp0S,EAAG,CAAE,UAAAm0S,IAAW,ECCxD,SAASE,IAAUta,EAASjoG,EAAM,CAC9B,OAAO69G,GAAO5V,EAASjoG,CAAI,CAC/B,CACO,MAAMwiH,IAA2Bt0S,EAAG,CAAE,UAAAq0S,IAAW,EC1BxD,SAASE,IAAUxa,EAASjoG,EAAM,CAC9B,OAAO69G,GAAO5V,EAASjoG,CAAI,CAC/B,CACO,MAAM0iH,IAA2Bx0S,EAAG,CAAE,UAAAu0S,IAAW,ECbxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuDA,SAASE,IAAQ34S,EAAG0zB,EAAQouP,EAASmX,EAAKyV,EAAa,OAAQC,EAAY,CAAC,EAAG,CAAC,EAAGmE,EAAiB,CAChG,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAU,SAAS,EAChD44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,SAAU,SAAS,EACrE,IAAI0/Q,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,uDAAuDA,EAAI,IAAI,GAAG,EACpGnZ,EAAY2e,EAAQ,OAAS,EAAG,IAAM,wDAC/BA,EAAQ,IAAI,GAAG,EACtBtF,GAAoC,SAAUra,EAAK6Z,CAAe,EAClE,MAAM/B,EAAUrC,IAAe,OAAS0E,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,CAAC,EAClEnZ,EAAY8W,IAAY6H,EAAQ,MAAM,CAAC,EAAG,IAAM,oCAAoC7H,CAAO,uCAC7D6H,EAAQ,MAAM,CAAC,CAAC,GAAG,EACjD3e,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,uEAC7D7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD1U,EAAY4e,GAAwClK,CAAS,EAAG,IAAM,yDAAyD,EAC/H1U,EAAY4e,GAAwC/2B,CAAO,EAAG,IAAM,mDAAmD,EACvH,MAAMgU,EAAS,CAAE,EAAGsd,EAAK,OAAQwF,CAAS,EACpC1qH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,WAAAyV,EAAY,UAAAC,EAAW,gBAAAmE,CAAiB,EAEhEzlS,EAAMsvR,EAAO,UAAU/W,GAAQkQ,EAAQ5nG,CAAK,EAClD,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMyrS,GAAyB50S,EAAG,CAAE,QAAAy0S,IAAS,EClDpD,SAASI,IAAQ/4S,EAAG0zB,EAAQimQ,EAAQV,EAAKyV,EAAa,MAAOqD,EAAW,EAAGe,EAAiB,CACxF,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,QAAQ,EACrC44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,QAAQ,EAC1D,IAAIslR,EAAMhN,EACNiN,EAAe,GACfjN,EAAG,OAAS,IACZiN,EAAe,GACfD,EAAM/F,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEnD/R,EAAY+e,EAAI,OAAS,EAAG,IAAM,uDAAuDA,EAAI,IAAI,GAAG,EACpG/e,EAAY2e,EAAQ,OAAS,EAAG,IAAM,wDAC/BA,EAAQ,IAAI,GAAG,EACtBtF,GAAoC,SAAUra,EAAK6Z,CAAe,EAClE7Y,EAAY+e,EAAI,MAAM,CAAC,IAAMJ,EAAQ,MAAM,CAAC,EAAG,IAAM,oCAAoCI,EAAI,MAAM,CAAC,CAAC,uCACvEJ,EAAQ,MAAM,CAAC,CAAC,GAAG,EACjD3e,EAAYkZ,GAAyCxZ,EAAQoY,CAAQ,EAAG,IAAM,oEAC5DpY,CAAM,kBAAkBoY,CAAQ,GAAG,EACrD9X,EAAY4e,GAAwC9G,CAAQ,EAAG,IAAM,yDAAyD,EAC9H9X,EAAY4e,GAAwClf,CAAM,EAAG,IAAM,kDAAkD,EACrHM,EAAYyU,IAAe,MAAO,IAAM,sCAAsCA,CAAU,uCAAuC,EAC/H,MAAMwK,EAAWjG,GAAQ2F,EAAS,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,CAAC,CAAC,EACrFO,EAAUlG,GAAQ+F,EAAK,CAACA,EAAI,MAAM,CAAC,EAAG,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAIpE3rS,EAAMyrS,GAAOK,EAASD,EAHZ,CAAC,EAAGvf,CAAM,EAGqBV,EADtB,OADP,CAAC,EAAG8Y,CAAQ,EAEmDe,CAAe,EAChG,OAAImG,EACOhG,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE7C4lS,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,CAClE,CACO,MAAM+rS,IAAyBl1S,EAAG,CAAE,QAAA60S,IAAS,ECjEpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASM,IAAqB3B,EAAQ7a,EAAInpQ,EAAQouP,EAASmX,EAAKyV,EAAa,OAAQoE,EAAiB,CAClG7Y,EAAYyd,EAAO,SAAW7a,EAAG,KAAM,IAAM,sBACrC6a,EAAO,MAAM,qBAAqB7a,EAAG,IAAI,cAAc,EAC/D,IAAIyc,EAAW5B,EACX6B,EAAO1c,EACPwW,EAAe,GACfxW,EAAG,OAAS,IACZwW,EAAe,GACfkG,EAAOtG,GAAQpW,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,EAC7Dyc,EAAW,CAAC,EAAG5B,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,GAElDzd,EAAYqf,EAAS,SAAW,EAAG,IAAM,qEAClCA,EAAS,MAAM,GAAG,EACzBrf,EAAYsf,EAAK,OAAS,EAAG,IAAM,4DACvBA,EAAK,IAAI,EAAE,EACvBtf,EAAYvmQ,EAAO,OAAS,EAAG,IAAM,gEACzBA,EAAO,IAAI,EAAE,EACzB,MAAMq9Q,EAAUrC,IAAe,OAAS4K,EAAS,CAAC,EAAIA,EAAS,CAAC,EAC1DnI,EAAWzC,IAAe,OAAS6K,EAAK,MAAM,CAAC,EAAIA,EAAK,MAAM,CAAC,EACrEtf,EAAY8W,IAAYr9Q,EAAO,MAAM,CAAC,EAAG,IAAM,4CAA4Cq9Q,CAAO,uCAC9Dr9Q,EAAO,MAAM,CAAC,CAAC,GAAG,EACtDumQ,EAAYkX,IAAaz9Q,EAAO,MAAM,CAAC,EAAG,IAAM,6CAA6Cy9Q,CAAQ,wCAChEz9Q,EAAO,MAAM,CAAC,CAAC,GAAG,EACvD4/Q,GAAoC,iBAAkBra,EAAK6Z,CAAe,EAC1E,MAAMhd,EAAS,CAAE,GAAIyjB,EAAM,OAAA7lR,CAAQ,EAC7Bw6J,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,WAAAyV,EAAY,gBAAAoE,EAAiB,WAAYwG,CAAU,EAE3EjsS,EAAMsvR,EAAO,UAAU7W,GAAqBgQ,EAAQ5nG,CAAK,EAC/D,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMmsS,GAAsCt1S,EAAG,CAAE,qBAAAm1S,IAAsB,ECxD9E,SAASI,IAAiBz5S,EAAG0zB,EAAQgmR,EAAa53B,EAASmX,EAAK6Z,EAAiB,CAC7E,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,iBAAiB,EAC9C44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,iBAAiB,EACnE,OAAO8lR,GAAoBE,EAAa1N,EAAI4M,EAAS92B,EAASmX,EAAK,OAAQ6Z,CAAe,CAC9F,CACO,MAAM6G,IAAkCz1S,EAAG,CAAE,iBAAAu1S,IAAkB,EC5BtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuDA,SAASG,IAAQ55S,EAAG0zB,EAAQouP,EAASmX,EAAKyV,EAAa,QAASC,EAAY,CAAC,EAAG,EAAG,CAAC,EAAG,CACnF,MAAM3C,EAAK/K,EAAgBjhS,EAAG,IAAK,QAAQ,EACrC44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,QAAQ,EAC1D,IAAI+/Q,EAAMzH,EACN0H,EAAe,GACf1H,EAAG,OAAS,IACZ0H,EAAe,GACfD,EAAMR,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAE7E/R,EAAYwZ,EAAI,OAAS,EAAG,IAAM,uDAAuDA,EAAI,IAAI,GAAG,EACpGxZ,EAAY2e,EAAQ,OAAS,EAAG,IAAM,wDAC/BA,EAAQ,IAAI,GAAG,EACtB3e,EAAYwZ,EAAI,MAAM,CAAC,IAAMmF,EAAQ,MAAM,CAAC,EAAG,IAAM,oCAAoCnF,EAAI,MAAM,CAAC,CAAC,uCACvEmF,EAAQ,MAAM,CAAC,CAAC,GAAG,EACjD3e,EAAYyY,GAA+B5wB,EAAS6sB,CAAS,EAAG,IAAM,uEACnD7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD1U,EAAYyU,IAAe,QAAS,IAAM,sCAAsCA,CAAU,yCAAyC,EACnIzU,EAAY0Y,GAA8BhE,CAAS,EAAG,IAAM,yDAAyD,EACrH1U,EAAY0Y,GAA8B7wB,CAAO,EAAG,IAAM,mDAAmD,EAC7G,MAAMgU,EAAS,CAAE,EAAG2d,EAAK,OAAQmF,CAAS,EACpC1qH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,WAAAyV,EAAY,UAAAC,CAAW,EAE/CthS,EAAMsvR,EAAO,UAAU5W,GAAQ+P,EAAQ5nG,CAAK,EAClD,OAAIwlH,EACOT,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAEzEA,CACX,CACO,MAAMwsS,IAAyB31S,EAAG,CAAE,QAAA01S,IAAS,ECnFpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASE,IAAqBpC,EAAQ7a,EAAInpQ,EAAQouP,EAASmX,EAAK,CAC5DgB,EAAYyd,EAAO,SAAW7a,EAAG,KAAM,IAAM,sBACrC6a,EAAO,MAAM,qBAAqB7a,EAAG,IAAI,cAAc,EAC/D,IAAIkd,EAAWrC,EACXsC,EAAOnd,EACP6W,EAAe,GACf7W,EAAG,OAAS,IACZ6W,EAAe,GACfsG,EAAO/G,GAAQpW,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,EAC1Ekd,EAAW,CAAC,EAAGrC,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,GAE7D,MAAM3G,EAAUgJ,EAAS,CAAC,EACpB5I,EAAW6I,EAAK,MAAM,CAAC,EAC7B/f,EAAY8f,EAAS,SAAW,EAAG,IAAM,qEAClCA,EAAS,MAAM,GAAG,EACzB9f,EAAY+f,EAAK,OAAS,EAAG,IAAM,4DACvBA,EAAK,IAAI,EAAE,EACvB/f,EAAYvmQ,EAAO,OAAS,EAAG,IAAM,gEACzBA,EAAO,IAAI,EAAE,EACzBumQ,EAAY8W,IAAYr9Q,EAAO,MAAM,CAAC,EAAG,IAAM,4CAA4Cq9Q,CAAO,uCAC9Dr9Q,EAAO,MAAM,CAAC,CAAC,GAAG,EACtDumQ,EAAYkX,IAAaz9Q,EAAO,MAAM,CAAC,EAAG,IAAM,6CAA6Cy9Q,CAAQ,wCAChEz9Q,EAAO,MAAM,CAAC,CAAC,GAAG,EACvD,MAAMoiQ,EAAS,CAAE,GAAIkkB,EAAM,OAAAtmR,CAAQ,EAC7Bw6J,EAAQ,CAAE,IAAA+qG,EAAK,QAAAnX,EAAS,WAAYi4B,CAAU,EAE9C1sS,EAAMsvR,EAAO,UAAU1W,GAAuB6P,EAAQ5nG,CAAK,EACjE,OAAIwlH,EACOT,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAEzEA,CACX,CACO,MAAM4sS,IAAsC/1S,EAAG,CAAE,qBAAA41S,IAAsB,ECjD9E,SAASI,IAAiBl6S,EAAG0zB,EAAQgmR,EAAa53B,EAASmX,EAAK,CAC5D,MAAM+S,EAAK/K,EAAgBjhS,EAAG,IAAK,iBAAiB,EAC9C44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,iBAAiB,EACnE,OAAOumR,IAAoBP,EAAa1N,EAAI4M,EAAS92B,EAASmX,CAAG,CACrE,CACO,MAAMkhB,IAAkCj2S,EAAG,CAAE,iBAAAg2S,IAAkB,EC3BtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAKp6S,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,SAAS,CAC3B,EACxB,OAAO28R,EAAO,UAAUzW,GAAK4P,CAAM,CACvC,CACO,MAAMukB,IAAsBn2S,EAAG,CAAE,KAAAk2S,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAMt6S,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAQ,SAAS,CAC5B,EACxB,OAAO28R,EAAO,UAAUxW,GAAM2P,CAAM,CACxC,CACO,MAAMykB,IAAuBr2S,EAAG,CAAE,MAAAo2S,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASE,IAASx6S,EAAGg2L,EAAO,EAAGykH,EAAY,GAAOC,EAAU,GAAO,CAE/D,MAAM5kB,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,SAAS,CACpB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,UAAAykH,EAAW,QAAAC,CAAS,EAC1C,OAAO/d,EAAO,UAAUvW,GAAS0P,EAAQ5nG,CAAK,CAClD,CACO,MAAMysH,IAA0Bz2S,EAAG,CAAE,SAAAs2S,IAAU,ECjDtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASI,IAAQ56S,EAAGg2L,EAAO,EAAGykH,EAAY,GAAOC,EAAU,GAAO,CAE9D,MAAM5kB,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAQ,CACnB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,UAAAykH,EAAW,QAAAC,CAAS,EAC1C,OAAO/d,EAAO,UAAUtW,GAAQyP,EAAQ5nG,CAAK,CACjD,CACO,MAAM2sH,IAAyB32S,EAAG,CAAE,QAAA02S,IAAS,ECjDpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwCA,SAASE,IAAe96S,EAAG62S,EAASjrS,EAAMmvS,EAAe,GAAO,CAC5D,MAAM/O,EAAK/K,EAAgBjhS,EAAG,IAAK,eAAe,EAC5C82S,EAAW7V,EAAgB4V,EAAS,UAAW,eAAe,EACpE5c,EAAY+R,EAAG,QAAU,QAAS,IAAM,8DACJA,EAAG,KAAK,EAAE,EAC9C/R,EAAY+R,EAAG,MAAQ,EAAG,IAAM,sEACpBA,EAAG,IAAI,GAAG,EACtB/R,EAAYruR,GAAQ,EAAG,IAAM,sCAAsCA,CAAI,GAAG,EAC1EquR,EAAY6c,EAAS,OAAS9K,EAAG,MAAQ8K,EAAS,OAAS,EAAG,IAAM,+FAClC9K,EAAG,KAAK,oBACnC8K,EAAS,KAAK,GAAG,EACxB,MAAMhhB,EAAS,CAAE,EAAGkW,EAAI,QAAS8K,CAAU,EACrC5oH,EAAQ,CAAE,KAAAtiL,EAAM,aAAAmvS,CAAc,EACpC,OAAOpe,EAAO,UAAUpW,GAAeuP,EAAQ5nG,CAAK,CACxD,CACO,MAAM8sH,IAAgC92S,EAAG,CAAE,eAAA42S,IAAgB,ECvDlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0DA,SAASG,IAAcj7S,EAAGk7S,EAAWxM,EAAa,OAAQ,CACtD,MAAM1C,EAAK/K,EAAgBjhS,EAAG,IAAK,eAAgB,SAAS,EACtDm7S,EAAezM,IAAe,OAAU1C,EAAG,MAAM,CAAC,EAAIA,EAAG,MAAM,CAAC,EAChEoP,EAAc1M,IAAe,OAAU1C,EAAG,MAAM,CAAC,EAAIA,EAAG,MAAM,CAAC,EAC/DqP,EAAc3M,IAAe,OAAU1C,EAAG,MAAM,CAAC,EAAIA,EAAG,MAAM,CAAC,EACrE/R,EAAYihB,EAAY,EAAG,IAAM,sDAAsDA,CAAS,EAAE,EAClGjhB,EAAYkhB,EAAcD,GAAa,EAAG,IAAM;AAAA,MAC9CC,CAAW,QAAQD,CAAS;AAAA,MAC5BlP,EAAG,KAAK,EAAE,EACZ/R,EAAYmhB,EAAaF,GAAa,EAAG,IAAM;AAAA,MAC7CE,CAAU,QAAQF,CAAS;AAAA,UACvBlP,EAAG,KAAK,EAAE,EAChB/R,EAAaohB,GAAcH,EAAYA,KAAe,EAAI,IAAM,8CAA8CA,EAAYA,CAAS,WAAWG,CAAU,sCAAsCrP,EAAG,KAAK,EAAE,EACxM,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,UAAAgtH,EAAW,WAAAxM,CAAY,EACvC,OAAO/R,EAAO,UAAUnW,GAAcsP,EAAQ5nG,CAAK,CACvD,CACO,MAAMotH,IAA+Bp3S,EAAG,CAAE,cAAA+2S,IAAe,EC3EhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoEA,SAASM,IAAiBv7S,EAAG0zB,EAAQouP,EAASmX,EAAKyV,EAAa,OAAQC,EAAY,CAAC,EAAG,CAAC,EAAGmE,EAAiB,CACzG,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,kBAAmB,SAAS,EACzD44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,kBAAmB,SAAS,EAC9E,IAAI0/Q,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,gEACtBA,EAAI,IAAI,GAAG,EACvBnZ,EAAY2e,EAAQ,OAAS,EAAG,IAAM,iEAC/BA,EAAQ,IAAI,GAAG,EACtB,MAAM5I,EAAatB,IAAe,OAAS0E,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,CAAC,EACrEnZ,EAAY+V,IAAe4I,EAAQ,MAAM,CAAC,EAAG,IAAM,uDAC3C5I,CAAU,mDACJ4I,EAAQ,MAAM,CAAC,CAAC,GAAG,EACjCtF,GAAoC,kBAAmBra,EAAK6Z,CAAe,EAC3E,MAAMhd,EAAS,CAAE,EAAGsd,EAAK,OAAQwF,CAAS,EACpC1qH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,WAAAyV,EAAY,UAAAC,EAAW,gBAAAmE,CAAiB,EAEhEzlS,EAAMsvR,EAAO,UAAUlW,GAAuBqP,EAAQ5nG,CAAK,EACjE,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMmuS,GAAkCt3S,EAAG,CAAE,iBAAAq3S,IAAkB,EC/FtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASE,IAAMz7S,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAU/V,GAAMkP,CAAM,CACxC,CACO,MAAM4lB,IAAuBx3S,EAAG,CAAE,MAAAu3S,IAAO,EChDhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDA,SAASE,IAAY37S,EAAG0zB,EAAQouP,EAASmX,EAAK0V,EAAY,CAAC,EAAG,CAAC,EAAGD,EAAa,OAAQ,CACnF,MAAM1C,EAAK/K,EAAgBjhS,EAAG,IAAK,YAAY,EACzC44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,YAAY,EAC9DumQ,EAAY+R,EAAG,OAAS,GAAKA,EAAG,OAAS,EAAG,IAAM,gEAC3CA,EAAG,IAAI,GAAG,EACjB/R,EAAY2e,EAAQ,OAAS,EAAG,IAAM,4DAC/BA,EAAQ,IAAI,GAAG,EACtB3e,EAAYyU,IAAe,OAAQ,IAAM,gFACZA,CAAU,EAAE,EACzC,IAAI0E,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZoH,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,EAC5DqH,EAAe,IAEnBpZ,EAAYmZ,EAAI,MAAM,CAAC,IAAMwF,EAAQ,MAAM,CAAC,EAAG,IAAM,oEAAoExF,EAAI,MAAM,CAAC,CAAC,OAAOwF,EAAQ,MAAM,CAAC,CAAC,EAAE,EAC9J,MAAM9iB,EAAS,CAAE,EAAGsd,EAAK,OAAQwF,CAAS,EACpC1qH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,UAAA0V,CAAW,EAEnCthS,EAAMsvR,EAAO,UAAU9V,GAAYiP,EAAQ5nG,CAAK,EACtD,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMuuS,IAA6B13S,EAAG,CAAE,YAAAy3S,IAAa,EC9E5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBO,SAASE,GAAiB3M,EAAS4B,EAAU,CAChD,MAAMgL,EAAS5M,EAAQ,OACjB6M,EAAO,CAAE,EACf,QAAS/4S,EAAI,EAAGA,EAAI84S,EAAQ94S,IAAK,CAC7B,MAAMg5S,EAAMF,EAAS,EAAI94S,EACnB5C,EAAI8uS,EAAQ8M,CAAG,GAAK,GAChBlL,EAASA,EAAS,OAAS,EAAI9tS,CAAC,GAAK,GACvC,GAAK5C,IAAM,GACf27S,EAAK,QAAQC,CAAG,CAE5B,CACI,OAAOD,CACX,CAKO,SAASE,IAAiB/M,EAAS4B,EAAU,CAChD,MAAMjtS,EAAS,CAAE,EACjB,QAASb,EAAI,EAAGA,EAAI8tS,EAAS,OAAQ9tS,IAAK,CACtC,MAAMk5S,EAAQhN,EAAQA,EAAQ,OAASlsS,EAAI,CAAC,EACtCm5S,EAAUrL,EAAS,OAAS9tS,EAAI,EAChCo5S,EAAStL,EAASqL,CAAO,GAC3BD,GAAS,MAASA,IAAU,GAAKE,EAAS,IAC1Cv4S,EAAO,QAAQs4S,CAAO,CAElC,CACI,OAAOt4S,CACX,CACO,SAASw4S,GAA2Bz8B,EAAQC,EAAQ,CACvD,MAAMtgR,EAAI,KAAK,IAAIqgR,EAAO,OAAQC,EAAO,MAAM,EACzCh8Q,EAAS,IAAI,MAAMtE,CAAC,EAC1B,QAASyD,EAAI,EAAGA,EAAIzD,EAAGyD,IAAK,CACxB,IAAI5C,EAAIw/Q,EAAOA,EAAO,OAAS58Q,EAAI,CAAC,EAChC5C,GAAK,OACLA,EAAI,GAER,IAAIK,EAAIo/Q,EAAOA,EAAO,OAAS78Q,EAAI,CAAC,EAIpC,GAHIvC,GAAK,OACLA,EAAI,GAEJL,IAAM,EACNyD,EAAOtE,EAAIyD,EAAI,CAAC,EAAIvC,UAEfA,IAAM,EACXoD,EAAOtE,EAAIyD,EAAI,CAAC,EAAI5C,UAEfA,IAAMK,EAAG,CACd,MAAM67S,EAAS,wDACR18B,CAAM,QAAQC,CAAM,IAC3B,MAAM,MAAMy8B,CAAM,CAC9B,MAEYz4S,EAAOtE,EAAIyD,EAAI,CAAC,EAAI5C,CAEhC,CACI,OAAOyD,CACX,CClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAAS04S,IAAOn8S,EAAGK,EAAG,CAClB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,QAAS,mBAAmB,EACzD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,QAAS,mBAAmB,EAC7D,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUrV,GAAOwO,CAAM,CACzC,CACO,MAAM0mB,GAAwBt4S,EAAG,CAAE,OAAAq4S,IAAQ,EC7ClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6CA,SAASE,IAAO7kF,EAAWx3N,EAAGK,EAAG,CAC7B,MAAM69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,OAAO,EACpC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,OAAO,EACpCi8S,EAAazb,EAAgBrpE,EAAW,YAAa,QAAS,MAAM,EAIpE+kF,EAAiBN,GAA2BA,GAA2BK,EAAW,MAAOp+L,EAAG,KAAK,EAAGtL,EAAG,KAAK,EAC5G4pM,EAAwBhF,GAAY8E,EAAYC,CAAc,EAC9DE,EAAgBjF,GAAYt5L,EAAIq+L,CAAc,EAC9CG,EAAgBlF,GAAY5kM,EAAI2pM,CAAc,EAC9C7mB,EAAS,CACX,UAAW8mB,EACX,EAAGC,EACH,EAAGC,CACN,EACD,OAAOngB,EAAO,UAAUvmB,GAAQ0f,CAAM,CAC1C,CACO,MAAMinB,GAAwB74S,EAAG,CAAE,OAAAu4S,IAAQ,EC/DlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASO,IAAWh9S,EAAG,CAEnB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,WAAW,CACtB,EACxB,OAAO28R,EAAO,UAAUtO,GAAWyH,CAAM,CAC7C,CACO,MAAMmnB,GAA4B/4S,EAAG,CAAE,WAAA84S,IAAY,ECtC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDA,SAASE,IAAU98S,EAAGK,EAAG,CAErB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EACtC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAMmqM,EAAYxrB,GAAIrzK,EAAItL,CAAE,EACtBoqM,EAAQH,GAAUE,CAAS,EAC3BE,EAAcb,GAAMxpM,EAAIoqM,CAAK,EACnC,OAAOL,GAAMM,EAAaD,EAAOD,CAAS,CAC9C,CACO,MAAMG,IAA2Bp5S,EAAG,CAAE,UAAAg5S,IAAW,EC/DxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASK,IAAKnrK,EAAIC,EAAI,CAClB,MAAMmrK,EAAMvc,EAAgB7uJ,EAAI,KAAM,KAAK,EACrCqrK,EAAMxc,EAAgB5uJ,EAAI,KAAM,KAAK,EAC3C4nJ,GAAaujB,EAAI,OAAS,GAAKA,EAAI,OAAS,KAAOC,EAAI,OAAS,GAAKA,EAAI,OAAS,GAAI,IAAM,+DACrFD,EAAI,IAAI,QAAQC,EAAI,IAAI,GAAG,EAClC,MAAMC,EAAWF,EAAI,OAAS,EAAIA,EAAI,KAAOA,EAAI,MAAM,CAAC,EAClDG,EAAWF,EAAI,OAAS,EAAIA,EAAI,KAAOA,EAAI,MAAM,CAAC,EAGxD,GAFAxjB,EAAYyjB,IAAYC,EAAS,IAAM,gEAChCD,CAAO,QAAQC,CAAO,GAAG,EAC5BH,EAAI,OAAS,GAAKC,EAAI,OAAS,EAAG,CAClC,MAAMG,EAAO3K,GAAQuK,EAAK,CAAC,EAAG,EAAE,CAAC,EAC3BK,EAAO5K,GAAQwK,EAAK,CAAC,GAAI,CAAC,CAAC,EAC3BK,EAAO7J,GAAO2J,EAAMC,CAAI,EAC9B,OAAO5K,GAAQ6K,EAAM,EAAE,CAC/B,SACaN,EAAI,OAAS,GAAKC,EAAI,OAAS,EAAG,CACvC,MAAMG,EAAO3K,GAAQuK,EAAK,CAAC,EAAG,EAAE,CAAC,EAC3BK,EAAO5K,GAAQwK,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAChDK,EAAO7J,GAAO2J,EAAMC,CAAI,EAC9B,OAAO5K,GAAQ6K,EAAM,CAACA,EAAK,IAAI,CAAC,CACxC,SACaN,EAAI,OAAS,GAAKC,EAAI,OAAS,EAAG,CACvC,MAAMI,EAAO5K,GAAQwK,EAAK,CAAC,GAAI,CAAC,CAAC,EAC3BK,EAAO7J,GAAOuJ,EAAKK,CAAI,EAC7B,OAAO5K,GAAQ6K,EAAM,CAACA,EAAK,IAAI,CAAC,CACxC,KACS,CACD,MAAMD,EAAO5K,GAAQwK,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAEtD,OADaxJ,GAAOuJ,EAAKK,CAAI,CAErC,CACA,CACO,MAAME,IAAsB75S,EAAG,CAAE,KAAAq5S,IAAM,ECtE9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgGO,SAASS,IAAQC,KAAahgB,EAAS,CAC1C,MAAMmP,EAAWnP,EAAQ,IAAI,CAACr+R,EAAGoD,IAAMi+R,EAAgBrhS,EAAG,UAAUoD,CAAC,GAAI,QAAQ,CAAC,EAC5EkrL,EAAQ,CAAE,SAAA+vH,CAAU,EAC1B,OAAOthB,EAAO,UAAUzV,GAAQkmB,EAAUl/G,CAAK,CACnD,CACO,MAAMgwH,GAAyBh6S,EAAG,CAAE,QAAA85S,IAAS,ECrGpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASG,IAAKn+S,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,SAAS,CAC3B,EACxB,OAAO28R,EAAO,UAAUxV,GAAK2O,CAAM,CACvC,CACO,MAAMsoB,GAAsBl6S,EAAG,CAAE,KAAAi6S,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAar+S,EAAGq/Q,EAAO,CAC5B,MAAM2sB,EAAK/K,EAAgBjhS,EAAG,IAAK,cAAe,mBAAmB,EACrE,GAAI,CAACkgR,IAAoB8rB,EAAG,MAAO3sB,CAAK,EACpC,MAAM,IAAI,MAAM,gCAAgC2sB,EAAG,KAAK,0CAA0C3sB,CAAK,EAAE,EAE7G,OAAOr/Q,CACX,CACO,MAAMs+S,IAA8Bp6S,EAAG,CAAE,aAAAm6S,IAAc,ECnD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASE,IAAKv+S,EAAG,CACb,IAAIgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,KAAK,EACtCi6R,EAAY+R,EAAG,QAAU,SAAWA,EAAG,QAAU,UAAW,IAAM,2CAA2C,EACzGA,EAAG,QAAU,UACbA,EAAKE,GAAKF,EAAI,SAAS,GAE3B,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EACxB,OAAOrP,EAAO,UAAUtV,GAAKyO,CAAM,CACvC,CACO,MAAM0oB,IAAsBt6S,EAAG,CAAE,KAAAq6S,IAAM,EC5C9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBO,SAASE,GAAqBz9B,EAAMJ,EAAM,CAC7C,QAAS59Q,EAAI,EAAGA,EAAIg+Q,EAAK,OAAQ,EAAEh+Q,EAC/B,GAAIg+Q,EAAKA,EAAK,OAASh+Q,EAAI,CAAC,IAAM49Q,EAAO,EAAI59Q,EACzC,MAAO,GAGf,MAAO,EACX,CACO,SAAS07S,IAAiBC,EAAWC,EAAW59B,EAAM,CACzD,MAAMJ,EAAO+9B,EAAU,OAASC,EAAU,OACpCzkB,EAAM,CAAE,EACd,IAAI0kB,EAAS,EACTC,EAAY,EAChB,QAAS9C,EAAM,EAAGA,EAAMp7B,EAAMo7B,IACtBh7B,EAAK,QAAQg7B,CAAG,IAAM,GACtB7hB,EAAI,KAAKwkB,EAAUE,GAAQ,CAAC,EAG5B1kB,EAAI,KAAKykB,EAAUE,GAAW,CAAC,EAGvC,OAAO3kB,CACX,CACO,SAAS4kB,GAA0BC,EAAQh+B,EAAM,CACpD,MAAM8vB,EAAW,CAAE,EACblwB,EAAOo+B,EAAO,OACpB,QAAShD,EAAM,EAAGA,EAAMp7B,EAAMo7B,IACtBh7B,EAAK,QAAQg7B,CAAG,IAAM,IACtBlL,EAAS,KAAKkO,EAAOhD,CAAG,CAAC,EAGjC,MAAMiD,EAAcj+B,EAAK,IAAIg7B,GAAOgD,EAAOhD,CAAG,CAAC,EAC/C,MAAO,CAAClL,EAAUmO,CAAW,CACjC,CACO,SAASC,GAAqB7/B,EAAO2B,EAAM,CAC9C,MAAMm+B,EAAiBn+B,EAAK,IAAIhhR,GAAK,CAAC,EACtC,OAAO0+S,IAAiBr/B,EAAO8/B,EAAgBn+B,CAAI,CACvD,CACO,SAASo+B,GAA2Bt5Q,EAAKk7O,EAAMJ,EAAM,CACxDqZ,EAAYwkB,GAAqBz9B,EAAMJ,CAAI,EAAG,IAAM,GAAG96O,CAAG,oDAC1Ck7O,CAAI,aAAaJ,CAAI,SAAS,CAClD,CAMO,SAASy+B,GAAmBr+B,EAAMJ,EAAM,CAC3C,GAAI69B,GAAqBz9B,EAAMJ,CAAI,EAC/B,OAAO,KAEX,MAAM/8Q,EAAS,CAAE,EACjB,QAASb,EAAI,EAAGA,EAAI49Q,EAAM,EAAE59Q,EACpBg+Q,EAAK,QAAQh+Q,CAAC,IAAM,IACpBa,EAAO,KAAKb,CAAC,EAGrB,OAAAg+Q,EAAK,QAAQhrF,GAAQnyL,EAAO,KAAKmyL,CAAI,CAAC,EAC/BnyL,CACX,CAEO,SAASy7S,GAAuBt+B,EAAM,CACzC,OAAOA,EAAK,IAAI,CAAChrF,EAAMhzL,IAAM,CAACA,EAAGgzL,CAAI,CAAC,EACjC,KAAK,CAAC51L,EAAGK,IAAML,EAAE,CAAC,EAAIK,EAAE,CAAC,CAAC,EAC1B,IAAIT,GAAKA,EAAE,CAAC,CAAC,CACtB,CACO,SAASu/S,GAAiBC,EAAS5+B,EAAM,CAC5C,MAAMvzQ,EAAM,CAAE,EACd,QAASrK,EAAI49Q,EAAO4+B,EAASx8S,EAAI49Q,EAAM,EAAE59Q,EACrCqK,EAAI,KAAKrK,CAAC,EAEd,OAAOqK,CACX,CC7FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASoyS,IAAKz/S,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAE5C,MAAM1X,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,KAAK,CAChB,EAClBkuL,EAAQ,CAAE,iBAAkB8H,EAAM,SAAAw3G,CAAU,EAClD,OAAO7Q,EAAO,UAAUrT,GAAKwM,EAAQ5nG,CAAK,CAC9C,CACO,MAAMjlJ,GAAsB/kC,EAAG,CAAE,KAAAu7S,IAAM,ECvD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASC,IAAK1/S,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAE5C,MAAM1X,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,KAAK,CAChB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAEhC,OAAO7Q,EAAO,UAAU7S,GAAKgM,EAAQ5nG,CAAK,CAC9C,CACO,MAAMvf,GAAsBzqK,EAAG,CAAE,KAAAw7S,IAAM,ECxD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASC,IAAKn4Q,EAAMo4Q,EAAK,CACrB,IAAIC,EAAQ5e,EAAgBz5P,EAAM,OAAQ,KAAK,EAC3Cs4Q,EAAO7e,EAAgB2e,EAAK,MAAO,KAAK,EAC5C,CAACC,EAAOC,CAAI,EAAItkB,GAAeqkB,EAAOC,CAAI,EAC1C,MAAMhqB,EAAS,CAAE,EAAG+pB,EAAO,EAAGC,CAAM,EACpC,OAAOnjB,EAAO,UAAU9R,GAAKiL,CAAM,CACvC,CACO,MAAMiqB,GAAsB77S,EAAG,CAAE,KAAAy7S,IAAM,ECxD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCO,SAASK,GAAOz8S,EAAO+7Q,EAAO,CACjC,IAAM14G,GAAarjK,CAAK,GAAK+7Q,IAAU,UAAa,MAAM,QAAQ/7Q,CAAK,IACnE+7Q,IAAU,YACV,MAAM,IAAI,MAAM,gFACa,EAEjC,GAAIA,IAAU,UAAY14G,GAAarjK,CAAK,GACxC,EAAEA,aAAiB,YACnB,MAAM,IAAI,MAAM,2EACqB,EAIzC,OAAOw+R,GAAWx+R,EAFJ,CAAE,EACM,CAAE,EACuB+7Q,CAAK,CACxD,CC/CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAAS2gC,IAAMjgT,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAQ,SAAS,CAC5B,EACxB,OAAO28R,EAAO,UAAUjQ,GAAMoJ,CAAM,CACxC,CACO,MAAMoqB,GAAuBh8S,EAAG,CAAE,MAAA+7S,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+BA,SAASE,IAAQngT,EAAG,CAChB,MAAMgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,QAAQ,EACrCkuL,EAAQ,CAAE,EAChB,OAAOyuG,EAAO,UAAU,SAAU,CAAE,EAAGqP,CAAI,EAAE99G,CAAK,CACtD,CACO,MAAMkyH,GAAyBl8S,EAAG,CAAE,QAAAi8S,IAAS,ECpCpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDA,SAASE,IAAKrgT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAC5C,IAAIxB,EAAK/K,EAAgBjhS,EAAG,IAAK,KAAK,EAClCgsS,EAAG,QAAU,SACbA,EAAKE,GAAKF,EAAI,OAAO,GAEzB,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAChC,OAAO7Q,EAAO,UAAUhQ,GAAKmJ,EAAQ5nG,CAAK,CAC9C,CACO,MAAMoyH,GAAsBp8S,EAAG,CAAE,KAAAm8S,IAAM,EC5D9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmEA,SAASE,IAAMvgT,EAAGwgT,EAAM,YAAaxqH,EAAO,KAAMw3G,EAAW,GAAO,CAChExtS,EAAIihS,EAAgBjhS,EAAG,IAAK,MAAM,EAClC,MAAMygT,EAAOC,GAAS1gT,EAAGwgT,EAAKxqH,CAAI,EAClC,IAAI2qH,EAAgBF,EAAK,MACzB,GAAIjT,EAAU,CACV,MAAMxsB,EAAOL,GAAe3qF,EAAMh2L,EAAE,KAAK,EACzC2gT,EAAgBC,GAA+BH,EAAK,MAAOz/B,CAAI,CACvE,CACI,OAAOiyB,GAAQwN,EAAME,CAAa,CACtC,CACA,SAASD,GAAS1gT,EAAGP,EAAGu2L,EAAO,KAAM,CACjC,GAAIh2L,EAAE,OAAS,EACX,OAAO8sS,GAAI9sS,CAAC,EAGhB,GAAIA,EAAE,OAAS,GAAKg2L,IAAS,KACzB,OAAO0qH,GAASzN,GAAQjzS,EAAG,CAAC,EAAE,CAAC,EAAGP,EAAGu2L,CAAI,EAG7C,GAAIh2L,EAAE,OAAS,GAAK,OAAOg2L,GAAS,UAChC,MAAM,QAAQA,CAAI,GAAKA,EAAK,SAAW,EAAG,CAC1C,GAAIv2L,IAAM,EACN,OAAO6gT,GAAIxT,GAAI9sS,CAAC,EAAGg2L,CAAI,EAE3B,GAAIv2L,IAAM,IACN,OAAOwpC,GAAI6jQ,GAAI9sS,CAAC,EAAGg2L,CAAI,EAE3B,GAAIv2L,IAAM,KACN,OAAOkvK,GAAIm+H,GAAI9sS,CAAC,EAAGg2L,CAAI,EAE3B,GAAIv2L,IAAM,aAAeA,IAAM,EAE3B,OAAOygT,GAAKI,GAAIP,GAAIjT,GAAI9sS,CAAC,EAAGggT,GAAO,EAAG,OAAO,CAAC,EAAGhqH,CAAI,CAAC,EAE1D,MAAM,IAAI,MAAM,qCAAqCv2L,CAAC,EAAE,CAChE,CAEI,GAAI,MAAM,QAAQu2L,CAAI,GAAKA,EAAK,SAAW,EAAG,CAC1C,GAAIv2L,IAAM,EACN,OAAOwpC,GAAIq3Q,GAAIxT,GAAI9sS,CAAC,EAAGg2L,EAAK,CAAC,CAAC,EAAGA,EAAK,CAAC,EAAI,CAAC,EAEhD,GAAIv2L,IAAM,IACN,OAAOwpC,GAAIq3Q,GAAIxT,GAAI9sS,CAAC,EAAGg2L,EAAK,CAAC,CAAC,EAAGA,EAAK,CAAC,CAAC,EAE5C,GAAIv2L,IAAM,KACN,OAAOkvK,GAAI2xI,GAAIxT,GAAI9sS,CAAC,EAAGg2L,EAAK,CAAC,CAAC,EAAGA,EAAK,CAAC,CAAC,EAE5C,GAAIv2L,IAAM,OAASA,IAAM,YAErB,OAAOygT,GAAKI,GAAIF,GAAOpgT,CAAC,EAAGg2L,CAAI,CAAC,EAEpC,MAAM,IAAI,MAAM,qCAAqCv2L,CAAC,EAAE,CAChE,CACI,MAAM,IAAI,MAAM,gCAAgCu2L,CAAI,EAAE,CAC1D,CACO,MAAMyqH,GAAuBv8S,EAAG,CAAE,MAAAq8S,IAAO,EC1HhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASM,IAAe7gT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CACtD,OAAOiT,GAAKzgT,EAAG,YAAag2L,EAAMw3G,CAAQ,CAC9C,CACO,MAAMsT,IAAgC58S,EAAG,CAAE,eAAA28S,IAAgB,EC5ClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAK/gT,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,KAAK,CAChB,EACxB,OAAO28R,EAAO,UAAUpV,GAAKuO,CAAM,CACvC,CACO,MAAM8pB,GAAsB17S,EAAG,CAAE,KAAA68S,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASC,IAAYhhT,EAAGg2L,EAAO,EAAG,CAC9B,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,aAAc,mBAAmB,EACpEi6R,EAAYjkG,GAAQg2G,EAAG,KAAM,IAAM,oCAAoC,EACvE,MAAMlW,EAAS,CAAE,MAAOkW,CAAI,EACtB99G,EAAQ,CAAE,IAAK8H,CAAM,EAC3B,OAAO2mG,EAAO,UAAUnV,GAAYsO,EAAQ5nG,CAAK,CACrD,CACO,MAAM+yH,GAA6B/8S,EAAG,CAAE,YAAA88S,IAAa,EC5C5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAOlhT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAUlV,GAAOqO,CAAM,CACzC,CACO,MAAMqrB,IAAwBj9S,EAAG,CAAE,OAAAg9S,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASE,IAAMphT,EAAG23S,EAAM,CACpB,MAAM3L,EAAK/K,EAAgBjhS,EAAG,IAAK,OAAQ,mBAAmB,EAC9Di6R,EAAY+R,EAAG,OAAS2L,EAAK,OAAQ,IAAM,qCAAqC3L,EAAG,IAAI,8BACtD2L,CAAI,GAAG,EACxC,MAAM7hB,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,KAAAypH,CAAM,EACtB,OAAOhb,EAAO,UAAU7O,GAAMgI,EAAQ5nG,CAAK,CAC/C,CACO,MAAMmzH,GAAuBn9S,EAAG,CAAE,MAAAk9S,IAAO,ECtDhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASE,IAAKC,EAASC,EAAYC,EAAYniC,EAAQ,UAAW,CAC1DkiC,GAAc,OACdA,EAAaD,GAEjB,MAAMG,EAAOlwR,GAAO,CAAC+vR,EAASC,CAAU,EAAGliC,CAAK,EAC1C9/Q,EAAI+hT,GAAWC,EAAaD,EAAUC,EAC5C,QAASx+S,EAAI,EAAGA,EAAIxD,EAAG,EAAEwD,EACrB0+S,EAAK,IAAI,EAAG1+S,EAAGA,CAAC,EAEpB,MAAMglC,EAAMirQ,GAAQyO,EAAK,SAAQ,EAAI,CAACH,EAASC,CAAU,CAAC,EAC1D,GAAIC,GAAc,KACd,OAAOz5Q,EAGP,GAAIy5Q,EAAW,SAAW,EACtB,OAAOJ,GAAKJ,GAAWj5Q,EAAK,CAAC,EAAG,CAACy5Q,EAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAEpD,GAAIA,EAAW,SAAW,EAE3B,OAAOJ,GAAKJ,GAAWA,GAAWj5Q,EAAK,CAAC,EAAG,CAAC,EAAG,CAACy5Q,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAElF,GAAIA,EAAW,SAAW,EAE3B,OAAOJ,GAAKJ,GAAWA,GAAWA,GAAWj5Q,EAAK,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAC1Dy5Q,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAG,EAAG,CAChE,CAAa,EAGD,MAAM,IAAI,MAAM,qEAEiBA,EAAW,MAAM,IAAI,CAGlE,CACO,MAAME,GAAsBz9S,EAAG,CAAE,KAAAo9S,IAAM,ECrE9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASM,IAAO5hT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAS,SAAS,CAC7B,EACxB,OAAO28R,EAAO,UAAU9U,GAAOiO,CAAM,CACzC,CACO,MAAM+rB,GAAwB39S,EAAG,CAAE,OAAA09S,IAAQ,ECrClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASE,IAAQ9hT,EAAG0gS,EAAS1qG,EAAO,EAAG+rH,EAAY,EAAG,CAClD,MAAM/V,EAAK/K,EAAgBjhS,EAAG,IAAK,QAAQ,EACrCgiT,EAAW/gB,EAAgBP,EAAS,UAAW,SAAU,OAAO,EAChE5K,EAAS,CAAE,EAAGkW,EAAI,QAASgW,CAAU,EACrC9zH,EAAQ,CAAE,KAAA8H,EAAM,UAAA+rH,CAAW,EACjC,OAAOplB,EAAO,UAAU3U,GAAU8N,EAAQ5nG,CAAK,CACnD,CACO,MAAM+zH,GAAyB/9S,EAAG,CAAE,QAAA49S,IAAS,ECrDpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASI,IAAS9hT,EAAGK,EAAG,CACpB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,UAAW,mBAAmB,EAC3D4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,UAAW,mBAAmB,EAC/D,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUzU,GAAS4N,CAAM,CAC3C,CACO,MAAMqsB,GAA0Bj+S,EAAG,CAAE,SAAAg+S,IAAU,EC7CtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAchiT,EAAGK,EAAG,CACzB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,eAAgB,mBAAmB,EAChE4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,eAAgB,mBAAmB,EACpE,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUxU,GAAc2N,CAAM,CAChD,CACO,MAAMusB,GAA+Bn+S,EAAG,CAAE,cAAAk+S,IAAe,EC7ChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASE,IAAM1iS,EAAO,CAElB,MAAMk2Q,EAAS,CAAE,MADFmL,EAAgBrhR,EAAO,QAAS,MAAM,CACrB,EAChC,OAAO+8Q,EAAO,UAAUrU,GAAMwN,CAAM,CACxC,CACO,MAAM6L,GAAuBz9R,EAAG,CAAE,MAAAo+S,IAAO,ECvChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASC,IAAUviT,EAAG,CAElB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,UAAU,CACrB,EACxB,OAAO28R,EAAO,UAAUpU,GAAUuN,CAAM,CAC5C,CACO,MAAM0sB,IAA2Bt+S,EAAG,CAAE,UAAAq+S,IAAW,ECrCxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAOziT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAUnU,GAAOsN,CAAM,CACzC,CACO,MAAM4sB,IAAwBx+S,EAAG,CAAE,OAAAu+S,IAAQ,ECrClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAO3iT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAUlU,GAAOqN,CAAM,CACzC,CACO,MAAM8sB,IAAwB1+S,EAAG,CAAE,OAAAy+S,IAAQ,ECrClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAW7iT,EAAGgsL,EAAQ,GAAK,CAEhC,MAAM8pG,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,WAAW,CACtB,EAClBkuL,EAAQ,CAAE,MAAAlC,CAAO,EACvB,OAAO2wG,EAAO,UAAUjU,GAAWoN,EAAQ5nG,CAAK,CACpD,CACO,MAAM40H,GAA4B5+S,EAAG,CAAE,WAAA2+S,IAAY,EC3C1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASE,IAAM3iT,EAAGK,EAAG,CACjB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,OAAQ,mBAAmB,EACxD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,OAAQ,mBAAmB,EAC5D,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUhU,GAAMmN,CAAM,CACxC,CACO,MAAMktB,GAAuB9+S,EAAG,CAAE,MAAA6+S,IAAO,EC5ChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAW7iT,EAAGK,EAAG,CACtB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,YAAa,mBAAmB,EAC7D4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,YAAa,mBAAmB,EACjE,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU/T,GAAWkN,CAAM,CAC7C,CACO,MAAMotB,GAA4Bh/S,EAAG,CAAE,WAAA++S,IAAY,EC7C1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BO,SAASE,IAASt7O,EAAOg/K,EAAMvsO,EAAK,CACvC,GAAIA,GAAO,EACP,MAAM,IAAI,MAAM,0CAA0C,EAE9D,MAAM4zK,EAAQ,CAAE,MAAArmH,EAAO,KAAAg/K,EAAM,IAAAvsO,CAAK,EAClC,OAAOqiR,EAAO,UAAU9T,GAAU,GAAI36F,CAAK,CAC/C,CCpCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASk1H,IAA4BpjT,EAAGqjT,EAAc,EAAGC,EAAO,EAAGt3H,EAAQ,EAAGu3H,EAAO,GAAK,CACtF,MAAMvX,EAAK/K,EAAgBjhS,EAAG,IAAK,4BAA4B,EAC/Di6R,EAAY+R,EAAG,OAAS,GAAKA,EAAG,OAAS,EAAG,IAAM;AAAA,sBAChCA,EAAG,IAAI,GAAG,EAC5B/R,EAAY8Y,GAAWsQ,CAAW,EAAG,IAAM,2FACRA,CAAW,GAAG,EACjD,IAAIjQ,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE,MAAMlW,EAAS,CAAE,EAAGsd,CAAK,EACnBllH,EAAQ,CAAE,YAAAm1H,EAAa,KAAAC,EAAM,MAAAt3H,EAAO,KAAAu3H,CAAM,EAE1Cl2S,EAAMsvR,EAAO,UAAUvT,GAAK0M,EAAQ5nG,CAAK,EAC/C,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAGvDA,CAEf,CACO,MAAMm2S,IAA6Ct/S,EAAG,CAAE,4BAAAk/S,IAA6B,EC5D5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASK,IAAKzjT,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,SAAS,CAC3B,EACxB,OAAO28R,EAAO,UAAU7T,GAAKgN,CAAM,CACvC,CACO,MAAMjhO,GAAsB3wD,EAAG,CAAE,KAAAu/S,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASC,IAAO1jT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAU5T,GAAO+M,CAAM,CACzC,CACO,MAAM6tB,GAAwBz/S,EAAG,CAAE,OAAAw/S,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsOA,SAASE,IAAcpiT,EAAGqiT,EAAS,CAC/B5pB,EAAY4F,GAAgBr+R,CAAC,EAAG,IAAM,qDAAqD,EAC3Fy4R,EAAY4pB,GAAW,MACnB,MAAM,QAAQA,CAAO,GAAKA,EAAQ,MAAM/jT,GAAKA,aAAa86R,EAAQ,EAAG,IAAM,+EAC7D,EAClB,MAAMkpB,EAAmBD,GAAW,KACpC,GAAI,CAACC,EAAkB,CAEnBD,EAAU,CAAE,EACZ,UAAWz0F,KAAWutE,EAAO,oBACzBknB,EAAQ,KAAKlnB,EAAO,oBAAoBvtE,CAAO,CAAC,CAE5D,CACI,MAAM20F,EAAwBD,EAAmBD,EAAQ,OAAOG,GAAY,CAACA,EAAS,SAAS,EAAI,KAE7FC,EAAmBJ,EAAQ,OACjCA,EAAUA,EAAQ,OAAOG,GAAYA,EAAS,SAAS,EACvD/pB,EAAY4pB,EAAQ,OAAS,EAAG,IAAM,gGACDI,CAAgB,0BACrC,EAChB,MAAMxkB,EAAmB,GACnB,CAAE,MAAAl8R,EAAO,MAAAq8R,CAAK,EAAKjD,EAAO,UAAUn7R,EAAGqiT,EAAS,KAAMpkB,CAAgB,EAC5ExF,EAAY2F,EAAM,KAAKr+R,GAAKA,GAAK,IAAI,EAAG,IAAM,8LAEqB,EACnE04R,EAAY12R,EAAM,OAAS,EAAG,IAAM,iFACbA,EAAM,IAAI,SAAS,EAC1C,MAAM2gT,EAAa,CAAE,EACrB,OAAAL,EAAQ,QAAQ,CAAC/jT,EAAGkD,IAAM,CAClB48R,EAAM58R,CAAC,GAAK,OACZkhT,EAAWpkT,EAAE,IAAI,EAAI8/R,EAAM58R,CAAC,EAExC,CAAK,EACG+gT,GAAyB,MAGzBA,EAAsB,QAAQjkT,GAAKokT,EAAWpkT,EAAE,IAAI,EAAI,IAAI,EAEzD,CAAE,MAAAyD,EAAO,MAAO2gT,CAAY,CACvC,CAyCA,SAASC,GAAW3iT,EAAG,CACnB,OAAOm7R,EAAO,WAAWn7R,CAAC,CAC9B,CCxTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAAS4iT,IAAKpkT,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,KAAK,CAChB,EACxB,OAAO28R,EAAO,UAAUvS,GAAK0L,CAAM,CACvC,CACO,MAAMuuB,GAAsBngT,EAAG,CAAE,KAAAkgT,IAAM,ECtC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAUtkT,EAAG,CAElB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,UAAU,CACrB,EACxB,OAAO28R,EAAO,UAAUlQ,GAAUqJ,CAAM,CAC5C,CACO,MAAMyuB,GAA2BrgT,EAAG,CAAE,UAAAogT,IAAW,ECrCxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASE,IAAYxkT,EAAG,CACpB,MAAMgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,YAAY,EAe/C,OAXiBmkT,GAAYnkT,IASlB,CAAE,MALKqkT,GAAIE,GAASF,GAAIrkT,CAAC,CAAC,CAAC,EAKlB,SAJE68R,GACDtI,GAAIsI,EAAIsX,GAAQkQ,GAAIrkT,CAAC,CAAC,CAAC,CAGd,EAC7B,EACegsS,CAAE,CACtB,CACO,MAAMyY,IAA6BvgT,EAAG,CAAE,YAAAsgT,IAAa,ECtD5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAKtkT,EAAGK,EAAG,CAChB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EACtC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUhP,GAAKmI,CAAM,CACvC,CACO,MAAM71B,GAAsB/7P,EAAG,CAAE,KAAAwgT,IAAM,ECnD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+CA,SAASC,IAAYC,EAAQ5uH,EAAO,GAAI,CACpC,MAAM6uH,EAAU5jB,EAAgB2jB,EAAQ,SAAU,YAAY,EAI9D,GAHI5uH,IAAS,KACTA,EAAO6uH,EAAQ,KAAO,GAEtB7uH,IAAS6uH,EAAQ,KAAO,EACxB,MAAM,MAAM,gFACWA,EAAQ,IAAI,iBAAiB7uH,CAAI,EAAE,EA2B9D,OAdiBmuH,GAAW,CAACS,EAAQ7kB,IAAS,CAE1C,MAAM+kB,EAAO77Q,GAAI27Q,EAAQ5uH,EAAM,EAAI,EAC7B+uH,EAAU9kD,GAAI2kD,EAAQE,CAAI,EAC1BvhT,EAAQ08P,GAAIisC,GAAK6Y,EAAS,SAAS,EAAGlwP,GAAIyrP,GAAIV,GAAImF,CAAO,EAAG/uH,EAAM,EAAQ,CAAC,CAAC,EAClF,OAAA+pG,EAAK,CAACx8R,CAAK,CAAC,EAOL,CAAE,MAAAA,EAAO,SANC,CAACs5R,EAAIE,IAAU,CAC5B,KAAM,CAACx5R,CAAK,EAAIw5R,EACVyQ,EAAW,GACXwX,EAAUpF,GAAIr8S,CAAK,EACzB,OAAO08P,GAAI48B,EAAItI,GAAI+rB,GAAIzjB,EAAI7mG,EAAMw3G,CAAQ,EAAGwX,CAAO,CAAC,CACvD,CACyB,CAClC,CAAK,EACeH,CAAO,CAO3B,CACO,MAAMI,IAA6B/gT,EAAG,CAAE,YAAAygT,IAAa,ECzF5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwDA,SAASO,IAAWllT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAClD,MAAMxB,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCghR,EAAOL,GAAe3qF,EAAMg2G,EAAG,KAAK,EACpC8Y,EAAO77Q,GAAI+iQ,EAAIhrB,EAAM,EAAoB,EACzC5gR,EAAI6/P,GAAI+rC,EAAI8Y,CAAI,EAChBrkT,EAAIm/S,GAAIx/S,CAAC,EACTgB,EAAIk/S,GAAI7/S,EAAGugR,CAAI,EACf7/Q,EAAI0zD,GAAIzzD,CAAC,EACTiM,EAAM2lB,GAAIigR,GAAQ6R,EAAM3jT,EAAE,KAAK,EAAGA,CAAC,EACzC,GAAIqsS,EAAU,CACV,MAAM9sB,EAAWw+B,GAAqB7xS,EAAI,MAAO2zQ,CAAI,EACrD,OAAOiyB,GAAQ5lS,EAAKqzQ,CAAQ,CACpC,CACI,OAAOrzQ,CACX,CACO,MAAM83S,GAA4BjhT,EAAG,CAAE,WAAAghT,IAAY,ECvE1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASE,IAAYhlT,EAAGK,EAAG,CACvB,MAAM69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,aAAc,MAAM,EACjD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,aAAc,MAAM,EACvD47S,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU3T,GAAY8M,CAAM,CAC9C,CACO,MAAMuvB,GAA6BnhT,EAAG,CAAE,YAAAkhT,IAAa,EC3C5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAYtlT,EAAG,CAEpB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,aAAc,MAAM,CAC/B,EACxB,OAAO28R,EAAO,UAAU1T,GAAY6M,CAAM,CAC9C,CACO,MAAMyvB,GAA6BrhT,EAAG,CAAE,YAAAohT,IAAa,ECtC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASE,IAAWplT,EAAGK,EAAG,CACtB,MAAM69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,YAAa,MAAM,EAChD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,YAAa,MAAM,EACtD47S,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUzT,GAAW4M,CAAM,CAC7C,CACO,MAAM2vB,GAA4BvhT,EAAG,CAAE,WAAAshT,IAAY,EC1C1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAYtlT,EAAGK,EAAG,CACvB,MAAM69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,aAAc,MAAM,EACjD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,aAAc,MAAM,EACvD,OAAA47S,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAEtCqyM,GAAWI,GAAUrlT,EAAGK,CAAC,EAAG8kT,GAAWF,GAAWjlT,EAAGK,CAAC,CAAC,CAAC,CACnE,CACO,MAAMklT,IAA6BzhT,EAAG,CAAE,YAAAwhT,IAAa,EC5C5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBA,MAAME,GAAY,WAqDlB,SAASC,IAAcC,EAAgB/4Q,EAAQ0iL,EAAO,OAAQ,CAC1D,MAAMs2F,EAAkB9kB,EAAgB6kB,EAAgB,iBAAkB,cAAc,EAClFE,EAAU/kB,EAAgBl0P,EAAQ,SAAU,cAAc,EAC1Dk5Q,EAAeF,EAAgB,MAAMA,EAAgB,MAAM,OAAS,CAAC,EACrEG,EAAaF,EAAQ,MAAMA,EAAQ,MAAM,OAAS,CAAC,EACnDG,EAAoBlT,GAAQ8S,EAAiB,CAAC,GAAIE,CAAY,CAAC,EAC/DG,EAAYnT,GAAQ+S,EAAS,CAAC,GAAIE,CAAU,CAAC,EACnD,GAAIC,EAAkB,KAAO,EACzB,MAAM,IAAI,MAAM,sDAAsD,EAE1E,GAAIA,EAAkB,MAAM,CAAC,IAAMC,EAAU,MAAM,CAAC,EAChD,MAAM,IAAI,MAAM,gEAAgE,EAEpF,GAAInmC,GAAcmmC,EAAU,KAAK,GAAKR,GAClC,MAAM,IAAI,MAAM,qCAAqCA,EAAS,EAAE,EAEpE,GAAIO,EAAkB,MAAM,CAAC,GAAKP,GAC9B,MAAM,IAAI,MAAM,oCAAoCA,EAAS,+BAA+BO,EAAkB,MAAM,CAAC,CAAC,EAAE,EAE5H,MAAMrwB,EAAS,CACX,eAAgBqwB,EAChB,OAAQC,CACX,EACKl4H,EAAQ,CAAE,KAAAuhC,CAAM,EACtB,OAAOktE,EAAO,UAAUzQ,GAAc4J,EAAQ5nG,CAAK,CACvD,CACO,MAAMm4H,GAA+BniT,EAAG,CAAE,cAAA2hT,IAAe,ECrGhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgEO,SAAS7tH,IAAW8tH,EAAgB/4Q,EAAQ,CAC/C,OAAOs5Q,GAAaP,EAAgB/4Q,EAAQ,MAAM,CACtD,CClEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgDA,SAASu5Q,IAAStmT,EAAGmvS,EAAYrtB,EAASmX,EAAK6Z,EAAiB,CAC5D,MAAM9G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EACtC2uS,EAAY,EAClB,IAAIyE,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,uDAAuDA,EAAI,IAAI,GAAG,EACpGnZ,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,wEAC7D7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD2E,GAAoC,UAAWra,EAAK6Z,CAAe,EACnE,MAAMhd,EAAS,CAAE,EAAGsd,CAAK,EACnBllH,EAAQ,CAAE,WAAAihH,EAAY,QAAArtB,EAAS,IAAAmX,EAAK,gBAAA6Z,CAAiB,EAErDzlS,EAAMsvR,EAAO,UAAUnT,GAASsM,EAAQ5nG,CAAK,EACnD,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMk5S,GAA0BriT,EAAG,CAAE,SAAAoiT,IAAU,ECtEtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0DA,SAASE,IAAWxmT,EAAGmvS,EAAa,CAAC,EAAG,EAAG,CAAC,EAAGrtB,EAASmX,EAAK6Z,EAAiBpE,EAAa,QAAS,CAChG,MAAM1C,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EAC9C,IAAIyzS,EAAMzH,EACN0H,EAAe,GACf1H,EAAG,OAAS,IACZ0H,EAAe,GACfD,EAAMR,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAE7E/R,EAAYwZ,EAAI,OAAS,EAAG,IAAM,qDAAqDA,EAAI,IAAI,GAAG,EAClGxZ,EAAYyU,IAAe,QAAS,IAAM,gFACbA,CAAU,EAAE,EACzCkE,GAA0B,YAAa3Z,EAAK6Z,CAAe,EAC3D,MAAMhd,EAAS,CAAE,EAAG2d,CAAK,EACnBvlH,EAAQ,CAAE,WAAAihH,EAAY,QAAArtB,EAAS,IAAAmX,EAAK,gBAAA6Z,EAAiB,WAAApE,CAAY,EAEjErhS,EAAMsvR,EAAO,UAAUjT,GAAWoM,EAAQ5nG,CAAK,EACrD,OAAIwlH,EACOT,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAEzEA,CACX,CACO,MAAMo5S,IAA4BviT,EAAG,CAAE,WAAAsiT,IAAY,EC/E1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDA,SAASE,IAAmB1mT,EAAGmvS,EAAYrtB,EAASmX,EAAK0tB,EAAsB,GAAO,CAElF,MAAM7wB,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,mBAAmB,CAC9B,EAClBkuL,EAAQ,CAAE,WAAAihH,EAAY,QAAArtB,EAAS,IAAAmX,EAAK,oBAAA0tB,CAAqB,EAEzD9iT,EAAS84R,EAAO,UAAU/S,GAAmBkM,EAAQ5nG,CAAK,EAChE,MAAO,CAAE,OAAQrqL,EAAO,CAAC,EAAG,QAASA,EAAO,CAAC,CAAG,CACpD,CACO,MAAM+iT,IAAoC1iT,EAAG,CAAE,mBAAAwiT,IAAoB,EC7D1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkDA,SAASG,IAASzmT,EAAGK,EAAG,CACpB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,SAAS,EACtC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,SAAS,EAC1C,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAC5BsL,EAAG,QAAU,SACbA,EAAK4tL,GAAK5tL,EAAI,OAAO,EACrBtL,EAAKk5L,GAAKl5L,EAAI,OAAO,GAEzBqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUpT,GAASuM,CAAM,CAC3C,CACO,MAAMgxB,GAA0B5iT,EAAG,CAAE,SAAA2iT,IAAU,EC9DtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASE,IAAM/mT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAE7C,MAAM1X,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EAClBkuL,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAChC,OAAO7Q,EAAO,UAAU9S,GAAMiM,EAAQ5nG,CAAK,CAC/C,CACO,MAAM4nH,GAAuB5xS,EAAG,CAAE,MAAA6iT,IAAO,ECvDhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCO,SAAS3J,GAAM/9B,EAAOC,EAAQ,UAAW,CAE5C,GADAgD,GAAmCjD,CAAK,EACpCC,IAAU,YAAa,CACvB,MAAMoiB,EAAO0b,GAAM/9B,EAAO,SAAS,EAC7BsiB,EAAOyb,GAAM/9B,EAAO,SAAS,EACnC,OAAOvjF,GAAQ4lG,EAAMC,CAAI,CACjC,CACI,MAAM50P,EAASq1O,GAAoBnC,GAAcZ,CAAK,EAAGC,CAAK,EAC9D,OAAOqd,EAAO,WAAW5vP,EAAQsyO,EAAOC,CAAK,CACjD,CCzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCO,SAASqgB,GAAKtgB,EAAOC,EAAQ,UAAW,CAE3C,GADAgD,GAAmCjD,CAAK,EACpCC,IAAU,YAAa,CACvB,MAAMoiB,EAAO/B,GAAKtgB,EAAO,SAAS,EAC5BsiB,EAAOyb,GAAM/9B,EAAO,SAAS,EACnC,OAAOvjF,GAAQ4lG,EAAMC,CAAI,CACjC,CACI,MAAM50P,EAASo1O,GAAmBlC,GAAcZ,CAAK,EAAGC,CAAK,EAC7D,OAAOqd,EAAO,WAAW5vP,EAAQsyO,EAAOC,CAAK,CACjD,CC3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDO,SAAS0nC,IAAShnT,EAAGC,EAAG,CAAE,SAAAgnT,EAAW,IAAM,EAAG,GAAI,CACrD,GAAIA,IAAa,MAAQA,IAAa,KAClC,MAAM,IAAI,UAAU,GAAGA,CAAQ,4CAA4C,EAE/E,GAAIjnT,IAAM,OACN,MAAO,CAAE,EAEb,IAAIgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAYA,aAAaw6R,GAASx6R,EAAE,MAAQ,SAAS,EACtF,GAAIC,IAAM,OACN,MAAO,CAAC+rS,CAAE,EAEd,IAAIiL,EAAKhW,EAAgBhhS,EAAG,IAAK,WAAYA,aAAau6R,GAASv6R,EAAE,MAAQ,SAAS,EACtF,MAAMF,EAAIkgR,GAAc+rB,EAAG,KAAK,EAC1B1qS,EAAI2+Q,GAAcg3B,EAAG,KAAK,EAChC,OAAIgQ,IAAa,MACbjb,EAAKiH,GAAQjH,EAAI,CAAC,EAAG,EAAE,CAAC,EACxBiL,EAAKhE,GAAQgE,EAAI,CAAC,GAAI,CAAC,CAAC,EACjB,CACHhD,GAAOtU,GAAK,CAACr+R,EAAG,CAAC,EAAG0qS,EAAG,KAAK,EAAGA,CAAE,EACjCiI,GAAOgD,EAAItX,GAAK,CAAC,EAAG5/R,CAAC,EAAGk3S,EAAG,KAAK,CAAC,CACpC,IAELjL,EAAKiH,GAAQjH,EAAI,CAAC,GAAI,CAAC,CAAC,EACxBiL,EAAKhE,GAAQgE,EAAI,CAAC,EAAG,EAAE,CAAC,EACjB,CACHhD,GAAOjI,EAAIrM,GAAK,CAAC,EAAGr+R,CAAC,EAAG0qS,EAAG,KAAK,CAAC,EACjCiI,GAAOtU,GAAK,CAAC5/R,EAAG,CAAC,EAAGk3S,EAAG,KAAK,EAAGA,CAAE,CACpC,EACL,CCjFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkDA,SAASiQ,IAAS9mT,EAAGK,EAAG,CACpB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,SAAS,EACtC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,SAAS,EAC1C,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAC5BsL,EAAG,QAAU,SACbA,EAAK4tL,GAAK5tL,EAAI,OAAO,EACrBtL,EAAKk5L,GAAKl5L,EAAI,OAAO,GAEzBqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU5S,GAAS+L,CAAM,CAC3C,CACO,MAAMqxB,GAA0BjjT,EAAG,CAAE,SAAAgjT,IAAU,EC9DtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASE,IAAWpnT,EAAGqnT,EAAU1mI,EAAM,CACnCs5G,EAAYt5G,IAAS,WAAaA,IAAS,YAAa,IAAM,+DACnDA,CAAI,GAAG,EAClB,MAAMqrH,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EAC9C,GAAIgsS,EAAG,OAAS,EACZ,MAAM,IAAI,MAAM,gEACkB,EAEtC/R,EAAYotB,EAAS,SAAWrb,EAAG,KAAM,IAAM,wCAAwCA,EAAG,IAAI,SACnFqb,EAAS,MAAM,GAAG,EAC7B,MAAMC,EAAc3mI,IAAS,UAAY,EAAI,EAC7C,QAAS39K,EAAI,EAAGA,EAAIgpS,EAAG,KAAMhpS,IACzBi3R,EAAYotB,EAASrkT,CAAC,EAAE,SAAW,EAAG,IAAM,uDAAuD,EACnGi3R,EAAYotB,EAASrkT,CAAC,EAAE,CAAC,GAAK,GAAKqkT,EAASrkT,CAAC,EAAE,CAAC,GAAKgpS,EAAG,MAAMhpS,CAAC,EAAIskT,GAC/DD,EAASrkT,CAAC,EAAE,CAAC,GAAK,GAAKqkT,EAASrkT,CAAC,EAAE,CAAC,GAAKgpS,EAAG,MAAMhpS,CAAC,EAAIskT,EAAa,IAAM,wBAAwBtkT,CAAC,uCAC7FgpS,EAAG,MAAMhpS,CAAC,EAAIskT,CAAW,sCACtBtb,EAAG,KAAK,EAAE,EAE3B,MAAM99G,EAAQ,CAAE,SAAAm5H,EAAU,KAAA1mI,CAAM,EAC1Bm1G,EAAS,CAAE,EAAGkW,CAAI,EACxB,OAAOrP,EAAO,UAAU3S,GAAW8L,EAAQ5nG,CAAK,CACpD,CACO,MAAMq5H,IAA4BrjT,EAAG,CAAE,WAAAkjT,IAAY,ECpE1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASI,IAAKpnT,EAAGK,EAAG,CAChB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,KAAK,EAClC4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,KAAK,EACtC,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAU1S,GAAK6L,CAAM,CACvC,CACO,MAAM9vD,IAAsB9hO,EAAG,CAAE,KAAAsjT,IAAM,ECxD9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASC,IAASznT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAChDxtS,EAAIihS,EAAgBjhS,EAAG,IAAK,SAAS,EACrC,MAAMghR,EAAOL,GAAe3qF,EAAMh2L,EAAE,KAAK,EACnC0nT,EAAQ5R,GAAK91S,EAAGghR,EAAMwsB,CAAQ,EACpC,IAAImT,EAAgB+G,EAAM,MACrBla,IACDmT,EAAgBzB,GAAqBwI,EAAM,MAAO1mC,CAAI,GAE1D,MAAM2mC,EAAavH,GAAOngD,GAAIisC,GAAKlsS,EAAG,SAAS,EAAGizS,GAAQyU,EAAO/G,CAAa,CAAC,CAAC,EAC1E5K,EAAWD,GAAK6R,EAAY3mC,EAAMwsB,CAAQ,EAChD,MAAO,CAAE,KAAMka,EAAO,SAAA3R,CAAU,CACpC,CACO,MAAM6R,IAA0B1jT,EAAG,CAAE,SAAAujT,IAAU,ECjCtD,SAASI,IAAcC,EAAWluS,EAAMxY,EAAGE,EAAG,CAC1C,MAAM0zS,EAAQ/T,EAAgBrnR,EAAM,OAAQ,cAAc,EACpDy8F,EAAKgrL,GAAqBjgS,EAAG,IAAK,cAAc,EAChD2lH,EAAKs6K,GAAqB//R,EAAG,IAAK,cAAc,EACtD,IAAIse,EAAQo1R,EACZ,MAAM+S,EAAY,CAAE,EACpB,QAAS/kT,EAAI,EAAGA,EAAI8kT,EAAU,OAAQ9kT,IAAK,CACvC,MAAMomC,EAAS0+Q,EAAU9kT,CAAC,EAAE4c,EAAOy2F,EAAGrzG,CAAC,EAAG+jH,EAAG/jH,CAAC,CAAC,EAC/C+kT,EAAU,KAAK3+Q,EAAO,CAAC,CAAC,EACxB2+Q,EAAU,KAAK3+Q,EAAO,CAAC,CAAC,EACxBxpB,EAAQwpB,EAAO,CAAC,CACxB,CACI,MAAMgsQ,EAAO,CAAE,EACTC,EAAO,CAAE,EACf,QAASryS,EAAI,EAAGA,EAAI+kT,EAAU,OAAQ/kT,GAAK,EACvCoyS,EAAK,KAAK2S,EAAU/kT,CAAC,CAAC,EACtBqyS,EAAK,KAAK0S,EAAU/kT,EAAI,CAAC,CAAC,EAE9B,MAAO,CAACoyS,EAAMC,CAAI,CACtB,CACO,MAAM2S,IAA+B9jT,EAAG,CAAE,cAAA2jT,IAAe,ECtChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASI,IAAarD,EAAQsD,EAAYpzB,EAAM93O,EAAa,GAAO,CAChE,MAAM6nQ,EAAU5jB,EAAgB2jB,EAAQ,SAAU,aAAa,EACzDuD,EAActD,EAAQ,KACtBuD,EAAWvD,EAAQ,KACzB,GAAIsD,EAAc,EACd,MAAM,IAAI,MAAM,+DACTA,CAAW,GAAG,EAEzB,GAAIC,EAAW,EACX,MAAM,IAAI,MAAM,gDAAgDA,CAAQ,EAAE,EAI9EtzB,EAAOA,GAAQ,KAAK,OAAQ,EAG5B,MAAMgB,EAAS,CAAE,OADAsyB,IAAa,EAAInV,GAAQ4R,EAAS,CAAC,EAAG,EAAE,CAAC,EAAIA,CAC3B,EAC7B32H,EAAQ,CAAE,WAAAg6H,EAAY,KAAApzB,EAAM,WAAA93O,CAAY,EAExC3vC,EAAMsvR,EAAO,UAAUzS,GAAa4L,EAAQ5nG,CAAK,EAEvD,OAAOk6H,IAAa,EAAInV,GAAQ5lS,EAAK,CAACA,EAAI,IAAI,CAAC,EAAIA,CACvD,CACO,MAAMg7S,IAA8BnkT,EAAG,CAAE,aAAA+jT,IAAc,EChE9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASK,IAAUloT,EAAGK,EAAG,CACrB,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,WAAY,mBAAmB,EAC5D4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,WAAY,mBAAmB,EAChE,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EAC/B,OAAO2pL,EAAO,UAAUtS,GAAUyL,CAAM,CAC5C,CACO,MAAMyyB,GAA2BrkT,EAAG,CAAE,UAAAokT,IAAW,EC5CxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAQ9nB,EAAS/jP,EAAO8rQ,EAAU,EAAGC,EAAW,EAAGppC,EAAQ,QAAS,CACzE,GAAI3iO,EAAQ,EACR,MAAM,IAAI,MAAM,iDAAiDA,CAAK,EAAE,EAG5E,MAAMm5O,EAAS,CAAE,QADAmL,EAAgBP,EAAS,UAAW,SAAU,OAAO,CAClC,EAC9BxyG,EAAQ,CAAE,MAAAoxF,EAAO,MAAA3iO,EAAO,QAAA8rQ,EAAS,SAAAC,CAAU,EACjD,OAAO/rB,EAAO,UAAUjS,GAAQoL,EAAQ5nG,CAAK,CACjD,CACO,MAAMy6H,IAAyBzkT,EAAG,CAAE,QAAAskT,IAAS,ECrDpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASI,IAAU5oT,EAAG,CAElB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,UAAU,CACrB,EACxB,OAAO28R,EAAO,UAAUlS,GAAUqL,CAAM,CAC5C,CACO,MAAM+yB,IAA2B3kT,EAAG,CAAE,UAAA0kT,IAAW,EClBxD,SAASE,IAAcC,EAAIC,EAAI,CAC3B,MAAMC,EAAMhoB,EAAgB8nB,EAAI,KAAM,cAAc,EAC9CG,EAAMjoB,EAAgB+nB,EAAI,KAAM,cAAc,EACpD/uB,EAAYgvB,EAAI,OAAS,GAAKC,EAAI,OAAS,EAAG,IAAM,+DAC7CD,EAAI,IAAI,QAAQC,EAAI,IAAI,GAAG,EAClC,MAAMC,EAAOlW,GAAQgW,EAAK,CAAC,GAAI,CAAC,CAAC,EAC3BG,EAAOnW,GAAQiW,EAAK,CAAC,EAAG,EAAE,CAAC,EACjC,OAAOjV,GAAOkV,EAAMC,CAAI,CAC5B,CACO,MAAMC,IAA+BnlT,EAAG,CAAE,cAAA4kT,IAAe,EC5BhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6CA,SAASQ,IAAKtpT,EAAGqnT,EAAUkC,EAAgB,EAAG,CAC1C,MAAMvd,EAAK/K,EAAgBjhS,EAAG,IAAK,KAAK,EACxC,GAAIgsS,EAAG,OAAS,EACZ,MAAM,IAAI,MAAM,oDAAoD,EAExE,MAAM99G,EAAQ,CAAE,SAAAm5H,EAAU,cAAAkC,CAAe,EACnCzzB,EAAS,CAAE,EAAGkW,CAAI,EACxB,OAAOrP,EAAO,UAAU/R,GAAOkL,EAAQ5nG,CAAK,CAChD,CACO,MAAM+qG,GAAsB/0R,EAAG,CAAE,KAAAolT,IAAM,EChD9C,SAASE,IAAOxpT,EAAGqnT,EAAUkC,EAAgB,EAAG,CAC5C,OAAA1hL,EAAOw/K,EAAS,SAAW,EAAG,IAAM,kDAAkD,EAC/EpuB,GAAIj5R,EAAG,CAACqnT,CAAQ,EAAGkC,CAAa,CAC3C,CACO,MAAME,IAAwBvlT,EAAG,CAAE,OAAAslT,IAAQ,ECJlD,SAASE,IAAO1pT,EAAGqnT,EAAUkC,EAAgB,EAAG,CAC5C,OAAA1hL,EAAOw/K,EAAS,SAAW,GAAKA,EAAS,CAAC,EAAE,SAAW,GACnDA,EAAS,CAAC,EAAE,SAAW,EAAG,IAAM,uDAAuD,EACpFpuB,GAAIj5R,EAAGqnT,EAAUkC,CAAa,CACzC,CACO,MAAMI,IAAwBzlT,EAAG,CAAE,OAAAwlT,IAAQ,ECLlD,SAASE,IAAO5pT,EAAGqnT,EAAUkC,EAAgB,EAAG,CAC5C,OAAA1hL,EAAOw/K,EAAS,SAAW,GAAKA,EAAS,CAAC,EAAE,SAAW,GACnDA,EAAS,CAAC,EAAE,SAAW,GAAKA,EAAS,CAAC,EAAE,SAAW,EAAG,IAAM,uDAAuD,EAChHpuB,GAAIj5R,EAAGqnT,EAAUkC,CAAa,CACzC,CACO,MAAMM,IAAwB3lT,EAAG,CAAE,OAAA0lT,IAAQ,ECLlD,SAASE,IAAO9pT,EAAGqnT,EAAUkC,EAAgB,EAAG,CAC5C,OAAA1hL,EAAOw/K,EAAS,SAAW,GAAKA,EAAS,CAAC,EAAE,SAAW,GACnDA,EAAS,CAAC,EAAE,SAAW,GAAKA,EAAS,CAAC,EAAE,SAAW,GACnDA,EAAS,CAAC,EAAE,SAAW,EAAG,IAAM,uDAAuD,EACpFpuB,GAAIj5R,EAAGqnT,EAAUkC,CAAa,CACzC,CACO,MAAMQ,IAAwB7lT,EAAG,CAAE,OAAA4lT,IAAQ,ECZlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqEA,SAASE,IAAgBhqT,EAAGw1S,EAAY6R,EAAU,CAC9C,MAAMrb,EAAK/K,EAAgBjhS,EAAG,IAAK,gBAAgB,EACnDi6R,EAAY+R,EAAG,MAAQ,EAAIwJ,EAAW,OAAQ,IAAM,cAAcxJ,EAAG,IAAI,kCAAkCwJ,EAAW,MAAM,EAAE,EAC9Hvb,EAAYotB,EAAS,SAAW7R,EAAW,OAAQ,IAAM,qBAAqB6R,EAAS,MAAM,kCAAkC7R,EAAW,MAAM,EAAE,EAClJvb,EAAY+R,EAAG,MAAM,OAAO,CAAC5rS,EAAGK,EAAGuC,IAC3BA,EAAI,GAAKA,GAAKwyS,EAAW,OAClBp1S,IACDK,EAAI4mT,EAASrkT,EAAI,CAAC,EAAE,CAAC,EAAIqkT,EAASrkT,EAAI,CAAC,EAAE,CAAC,GACxCwyS,EAAWxyS,EAAI,CAAC,IAChB,EAEL5C,EACR,EAAI,EAAG,IAAM,4BAA4B4rS,EAAG,MAAM,MAAM,CAAC,CAAC,kBAAkBqb,EAAS,UAAU,qCAAqC7R,EAAW,SAAU,GAAE,EAC9J,MAAM1f,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,WAAAsnH,EAAY,SAAA6R,CAAU,EACtC,OAAO1qB,EAAO,UAAU/P,GAAgBkJ,EAAQ5nG,CAAK,CACzD,CACO,MAAM+7H,GAAiC/lT,EAAG,CAAE,gBAAA8lT,IAAiB,ECtFpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDA,SAASE,IAAMtqS,EAAOuqS,EAAaC,EAAanxB,EAAK0V,EAAW7sB,EAASgxB,EAAiB,CAClFnE,GAAa,OACbA,EAAY,CAAC,EAAG,CAAC,GAEjB7sB,GAAW,OACXA,EAAU,GAEVmX,IAAQ,IACRA,EAAM,SAEV,MAAM+S,EAAK/K,EAAgBrhR,EAAO,IAAK,SAAS,EAChD,IAAIwzR,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,qEAC7D7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD,MAAM0b,EAAWC,GAA4BlX,EAAI,MAAO+W,EAAaroC,EAAS6sB,EAAW1V,CAAG,EACtF8Y,EAAW,CAACsY,EAAS,eAAgBA,EAAS,aAAa,EAKjE,IAAIE,EACAtxB,IAAQ,OACRsxB,EAAcC,IAA6B,CAACH,EAAS,aAAcA,EAAS,WAAW,EAAGtY,CAAQ,EAGlGwY,EAAc,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EAEjC,MAAME,EAAgB1Y,EAAS,CAAC,IAAM,GAAKA,EAAS,CAAC,IAAM,EACrD,CAAC2Y,EAAiBC,CAAa,EAAIC,IAA6B,CAACP,EAAS,SAAUA,EAAS,OAAO,EAAGtY,EAAUwY,CAAW,EAC5HM,EAAeJ,EAAgBxxB,EAAM,QACrC6xB,EAAaL,EAAgBrX,EAAM6W,GAAe7W,EAAKrB,EAAU2Y,CAAe,EAIhFzqT,GAHYmqT,IAAgB,MAC9B,IAAM7W,GAAQuX,EAAYX,EAAaroC,EAAS+oC,EAAc/X,CAAe,EAC7E,IAAMyT,GAAQuE,EAAYX,EAAaroC,EAAS+oC,EAAc/X,CAAe,GAC5D,EACfzlS,EAAMo9S,EAAgBxqT,EAAI01S,GAAe11S,EAAG8xS,EAAU4Y,CAAa,EACzE,OAAItX,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CAIA,SAASu9S,IAA6Bh0B,EAAY4e,EAAY+U,EAAa,CACvE,MAAMQ,EAAWR,EAAY,IAAI9pT,GAAKA,EAAE,CAAC,CAAC,EACpCuqT,EAAaT,EAAY,IAAI9pT,GAAKA,EAAE,CAAC,CAAC,EACtCwqT,EAAiBr0B,EAAW,OAAOm0B,EAAUC,CAAU,EACvDE,EAAc1V,EAAW,IAAI,CAAC/0S,EAAGuC,KAAOvC,EAAIwqT,EAAejoT,CAAC,EAAIvC,GAAKA,CAAC,EACtE0qT,EAASH,EAAW,IAAI,CAACjoT,EAAGC,IAAMD,EAAImoT,EAAYloT,CAAC,CAAC,EACpDqkT,EAAW7R,EAAW,IAAI,CAACxxS,EAAGhB,IAAM,CAAC+nT,EAAS/nT,CAAC,EAAGmoT,EAAOnoT,CAAC,CAAC,CAAC,EAC5DyyS,EAAQD,EAAW,IAAI,CAACxxS,EAAGhB,IAAM,CAAC,EAAGkoT,EAAYloT,CAAC,CAAC,CAAC,EAC1D,MAAO,CAACqkT,EAAU5R,CAAK,CAC3B,CAIA,SAAS+U,IAA6B/b,EAAasD,EAAU,CAMzD,MAAMqZ,EAHqB3c,EAAY,IAAI,CAAC1rS,EAAGC,IACpCD,GAAKA,EAAI,IAAMgvS,EAAS/uS,CAAC,EAAI,EACvC,EACwC,IAAID,GAAKA,EAAI,CAAC,EAGjDsoT,EAAgBD,EAAc,IAAIroT,GAAK,KAAK,MAAMA,EAAI,CAAC,CAAC,EACxDuoT,EAAcF,EAAc,IAAI,CAACroT,EAAGC,IAAMD,EAAIsoT,EAAcroT,CAAC,CAAC,EACpE,OAAOooT,EAAc,IAAI,CAACpnT,EAAGhB,IAClB,CAACqoT,EAAcroT,CAAC,EAAGsoT,EAAYtoT,CAAC,CAAC,CAC3C,CACL,CACO,MAAMuoT,IAAuBrnT,EAAG,CAAE,MAAAgmT,IAAO,EClIhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASsB,IAAOxrT,EAAGgsL,EAAO,CACtB,MAAMggH,EAAK/K,EAAgBjhS,EAAG,IAAK,OAAO,EACpCyrT,EAASxqB,EAAgBj1G,EAAO,QAAS,OAAO,EAChD8pG,EAAS,CAAE,EAAGkW,EAAI,MAAOyf,CAAQ,EACvC,OAAO9uB,EAAO,UAAU7R,GAAOgL,CAAM,CACzC,CACO,MAAM41B,GAAwBxnT,EAAG,CAAE,OAAAsnT,IAAQ,EC1ClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDA,SAASG,IAAM3rT,EAAGg2L,EAAO,KAAMw3G,EAAW,GAAO,CAC7C,IAAIxB,EAAK/K,EAAgBjhS,EAAG,IAAK,MAAM,EACnCgsS,EAAG,QAAU,SAEbA,EAAKE,GAAKF,EAAI,OAAO,GAEzB,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,KAAA8H,EAAM,SAAAw3G,CAAU,EAChC,OAAO7Q,EAAO,UAAU5R,GAAM+K,EAAQ5nG,CAAK,CAC/C,CACO,MAAMwnH,IAAuBxxS,EAAG,CAAE,MAAAynT,IAAO,EC7DhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBA,SAASC,IAAcC,EAAoBC,EAAmBprB,EAASqrB,EAAkB,CACrF,MAAMC,EAAsBH,EAAmB,IAAI,CAACjsT,EAAGoD,IAAMi+R,EAAgBrhS,EAAG,UAAUoD,CAAC,GAAI,eAAgB,OAAO,CAAC,EACjHipT,EAAqBhrB,EAAgB6qB,EAAmB,oBAAqB,cAAc,EAC3F9J,EAAW/gB,EAAgBP,EAAS,UAAW,eAAgB,OAAO,EACtE5K,EAAS,CACX,mBAAoBk2B,EACpB,kBAAmBC,EACnB,QAASjK,CACZ,EACK9zH,EAAQ,CAAE,iBAAA69H,CAAkB,EAC5BloT,EAAS84R,EAAO,UAAU3R,GAAc8K,EAAQ5nG,CAAK,EAC3D,MAAO,CACH,mBAAoBrqL,EAAO,MAAM,EAAGA,EAAO,OAAS,CAAC,EACrD,kBAAmBA,EAAOA,EAAO,OAAS,CAAC,CAC9C,CACL,CACO,MAAMqoT,IAA+BhoT,EAAG,CAAE,cAAA0nT,IAAe,ECpChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASO,IAAaC,EAAQv8P,EAAQw8P,EAAQ,CAC1C,MAAMC,EAAUrrB,EAAgBmrB,EAAQ,SAAU,aAAa,EACzDG,EAAUtrB,EAAgBpxO,EAAQ,SAAU,cAAey8P,EAAQ,KAAK,EACxEE,EAAUvrB,EAAgBorB,EAAQ,SAAU,cAAeC,EAAQ,KAAK,EACxEx2B,EAAS,CACX,OAAQw2B,EACR,OAAQC,EACR,OAAQC,CACX,EACK3oT,EAAS84R,EAAO,UAAU1R,GAAa6K,CAAM,EACnD,MAAO,CACH,eAAgBjyR,EAAO,CAAC,EACxB,cAAeA,EAAO,CAAC,CAC1B,CACL,CACO,MAAM4oT,IAA8BvoT,EAAG,CAAE,aAAAioT,IAAc,ECjD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyEA,SAASO,IAAsBrtC,EAAOtyO,EAAQ5f,EAAcw/R,EAAqBC,EAAmB,CAChG,MAAMC,EAAS5rB,EAAgB5hB,EAAO,QAAS,uBAAwB,OAAO,EACxE2mC,EAAU/kB,EAAgBl0P,EAAQ,SAAU,sBAAsB,EAClE+/Q,EAAgB7rB,EAAgB9zQ,EAAc,eAAgB,uBAAwB64R,EAAQ,KAAK,EACnG+G,EAAuBJ,EAAoB,IAAI,CAAC/sT,EAAGoD,IAAMi+R,EAAgBrhS,EAAG,UAAUoD,CAAC,GAAI,uBAAwB,OAAO,CAAC,EAC3H8yR,EAAS,CACX,MAAO+2B,EACP,OAAQ7G,EACR,aAAc8G,EACd,oBAAqBC,CACxB,EACK7+H,EAAQ,CAAE,kBAAA0+H,CAAmB,EACnC,OAAOjwB,EAAO,UAAUzR,GAAsB4K,EAAQ5nG,CAAK,CAC/D,CACO,MAAM8+H,IAAuC9oT,EAAG,CAAE,sBAAAwoT,IAAuB,ECvFhF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+BA,SAASO,IAAM5tC,EAAO6tC,EAAc5tC,EAAO,CACvCgD,GAAmCjD,CAAK,EACxC,MAAMzzQ,EAAOq0Q,GAAcZ,CAAK,EAChC,IAAItyO,EAAS,KACb,GAAIuyO,GAAS,MAAQA,IAAU,UAC3BvyO,EAAS,IAAI,aAAanhC,CAAI,UAEzB0zQ,IAAU,QACfvyO,EAAS,IAAI,WAAWnhC,CAAI,UAEvB0zQ,IAAU,OACfvyO,EAAS,IAAI,WAAWnhC,CAAI,MAG5B,OAAM,IAAI,MAAM,qBAAqB0zQ,CAAK,EAAE,EAEhD,QAASt8Q,EAAI,EAAGA,EAAI4I,EAAM5I,IACtB+pC,EAAO/pC,CAAC,EAAIkqT,EAAc,EAE9B,OAAOvwB,EAAO,WAAW5vP,EAAQsyO,EAAOC,CAAK,CACjD,CACO,MAAM6tC,IAAuBjpT,EAAG,CAAE,MAAA+oT,IAAO,+CCzB/C,SAASxoE,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAASulJ,EAAKt4B,EAAM,CAClB,IAAIx6K,EAAK,KAAM+yM,EAAOC,EAAM,EAE5BhzM,EAAG,KAAO,UAAW,CACnB,IAAI16G,EAAI,QAAU06G,EAAG,GAAKA,EAAG,EAAI,sBACjC,OAAAA,EAAG,GAAKA,EAAG,GACXA,EAAG,GAAKA,EAAG,GACJA,EAAG,GAAK16G,GAAK06G,EAAG,EAAI16G,EAAI,EAChC,EAGD06G,EAAG,EAAI,EACPA,EAAG,GAAK+yM,EAAK,GAAG,EAChB/yM,EAAG,GAAK+yM,EAAK,GAAG,EAChB/yM,EAAG,GAAK+yM,EAAK,GAAG,EAChB/yM,EAAG,IAAM+yM,EAAKv4B,CAAI,EACdx6K,EAAG,GAAK,IAAKA,EAAG,IAAM,GAC1BA,EAAG,IAAM+yM,EAAKv4B,CAAI,EACdx6K,EAAG,GAAK,IAAKA,EAAG,IAAM,GAC1BA,EAAG,IAAM+yM,EAAKv4B,CAAI,EACdx6K,EAAG,GAAK,IAAKA,EAAG,IAAM,GAC1B+yM,EAAO,KAGT,SAAS54L,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,GAAK4B,EAAE,GACT5B,EAAE,GAAK4B,EAAE,GACT5B,EAAE,GAAK4B,EAAE,GACF5B,EAGT,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACxB,IAAIilD,EAAK,IAAIurM,EAAKt4B,CAAI,EAClB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO1rM,EAAG,KACd,OAAA0rM,EAAK,MAAQ,UAAW,CAAE,OAAQ1rM,EAAG,KAAM,EAAG,WAAe,CAAE,EAC/D0rM,EAAK,OAAS,UAAW,CACvB,OAAOA,EAAM,GAAIA,EAAM,EAAG,QAAW,GAAK,qBAC3C,EACDA,EAAK,MAAQA,EACTvsS,IACE,OAAOA,GAAU,UAAUyzG,EAAKzzG,EAAO6gG,CAAE,EAC7C0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGT,SAASD,GAAO,CACd,IAAI9tT,EAAI,WAEJ6tT,EAAO,SAASzzS,EAAM,CACxBA,EAAO,OAAOA,CAAI,EAClB,QAAS5W,EAAI,EAAGA,EAAI4W,EAAK,OAAQ5W,IAAK,CACpCxD,GAAKoa,EAAK,WAAW5W,CAAC,EACtB,IAAI1B,EAAI,mBAAsB9B,EAC9BA,EAAI8B,IAAM,EACVA,GAAK9B,EACL8B,GAAK9B,EACLA,EAAI8B,IAAM,EACVA,GAAK9B,EACLA,GAAK8B,EAAI,WAEX,OAAQ9B,IAAM,GAAK,qBACpB,EAED,OAAO6tT,EAILvwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,KAAOA,CAGb,GACCslK,GAC+B7yE,CAEjC,oEC5GC,SAAS2nF,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAAS2lJ,EAAO14B,EAAM,CACpB,IAAIx6K,EAAK,KAAMmzM,EAAU,GAEzBnzM,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,EAGPA,EAAG,KAAO,UAAW,CACnB,IAAI16G,EAAI06G,EAAG,EAAKA,EAAG,GAAK,GACxB,OAAAA,EAAG,EAAIA,EAAG,EACVA,EAAG,EAAIA,EAAG,EACVA,EAAG,EAAIA,EAAG,EACHA,EAAG,GAAMA,EAAG,IAAM,GAAM16G,EAAKA,IAAM,CAC3C,EAEGk1R,KAAUA,EAAO,GAEnBx6K,EAAG,EAAIw6K,EAGP24B,GAAW34B,EAIb,QAASzzR,EAAI,EAAGA,EAAIosT,EAAQ,OAAS,GAAIpsT,IACvCi5G,EAAG,GAAKmzM,EAAQ,WAAWpsT,CAAC,EAAI,EAChCi5G,EAAG,KAAM,EAIb,SAASma,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACD5B,EAGT,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACxB,IAAIilD,EAAK,IAAI2rM,EAAO14B,CAAI,EACpB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO,UAAW,CAAE,OAAQ1rM,EAAG,SAAW,GAAK,UAAc,EACjE,OAAA0rM,EAAK,OAAS,UAAW,CACvB,EACE,KAAIptI,EAAMt+D,EAAG,KAAI,IAAO,GACpB0pB,GAAO1pB,EAAG,KAAM,IAAK,GAAK,WAC1Bh+G,GAAUs8K,EAAM50C,IAAQ,GAAK,UAC1B1nI,IAAW,GACpB,OAAOA,CACR,EACD0pT,EAAK,MAAQ1rM,EAAG,KAChB0rM,EAAK,MAAQA,EACTvsS,IACE,OAAOA,GAAU,UAAUyzG,EAAKzzG,EAAO6gG,CAAE,EAC7C0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGLzwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,OAASA,CAGf,GACCslK,GAC+B7yE,CAEjC,oEC3EC,SAAS2nF,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAAS2lJ,EAAO14B,EAAM,CACpB,IAAIx6K,EAAK,KAAMmzM,EAAU,GAGzBnzM,EAAG,KAAO,UAAW,CACnB,IAAI16G,EAAK06G,EAAG,EAAKA,EAAG,IAAM,EAC1B,OAAAA,EAAG,EAAIA,EAAG,EAAGA,EAAG,EAAIA,EAAG,EAAGA,EAAG,EAAIA,EAAG,EAAGA,EAAG,EAAIA,EAAG,GACzCA,EAAG,EAAKA,EAAG,EAAI,OAAS,IAC5BA,EAAG,EAAKA,EAAG,EAAKA,EAAG,GAAK,GAAO16G,EAAKA,GAAK,IAAO,CACrD,EAED06G,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,EAEHw6K,KAAUA,EAAO,GAEnBx6K,EAAG,EAAIw6K,EAGP24B,GAAW34B,EAIb,QAASzzR,EAAI,EAAGA,EAAIosT,EAAQ,OAAS,GAAIpsT,IACvCi5G,EAAG,GAAKmzM,EAAQ,WAAWpsT,CAAC,EAAI,EAC5BA,GAAKosT,EAAQ,SACfnzM,EAAG,EAAIA,EAAG,GAAK,GAAKA,EAAG,IAAM,GAE/BA,EAAG,KAAM,EAIb,SAASma,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACD5B,EAGT,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACxB,IAAIilD,EAAK,IAAI2rM,EAAO14B,CAAI,EACpB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO,UAAW,CAAE,OAAQ1rM,EAAG,SAAW,GAAK,UAAc,EACjE,OAAA0rM,EAAK,OAAS,UAAW,CACvB,EACE,KAAIptI,EAAMt+D,EAAG,KAAI,IAAO,GACpB0pB,GAAO1pB,EAAG,KAAM,IAAK,GAAK,WAC1Bh+G,GAAUs8K,EAAM50C,IAAQ,GAAK,UAC1B1nI,IAAW,GACpB,OAAOA,CACR,EACD0pT,EAAK,MAAQ1rM,EAAG,KAChB0rM,EAAK,MAAQA,EACTvsS,IACE,OAAOA,GAAU,UAAUyzG,EAAKzzG,EAAO6gG,CAAE,EAC7C0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGLzwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,OAASA,CAGf,GACCslK,GAC+B7yE,CAEjC,oEC9EC,SAAS2nF,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAAS2lJ,EAAO14B,EAAM,CACpB,IAAIx6K,EAAK,KAGTA,EAAG,KAAO,UAAW,KAEfj4G,EAAIi4G,EAAG,EAAGt3G,EAAIs3G,EAAG,EAAG16G,EAAGE,EAC3B,OAAAF,EAAIyC,EAAEW,CAAC,EAAGpD,GAAMA,IAAM,EAAIE,EAAIF,EAAKA,GAAK,GACxCA,EAAIyC,EAAGW,EAAI,EAAK,CAAC,EAAGlD,GAAKF,EAAKA,IAAM,GACpCA,EAAIyC,EAAGW,EAAI,EAAK,CAAC,EAAGlD,GAAKF,EAAKA,IAAM,EACpCA,EAAIyC,EAAGW,EAAI,EAAK,CAAC,EAAGlD,GAAKF,EAAKA,GAAK,EACnCA,EAAIyC,EAAGW,EAAI,EAAK,CAAC,EAAGpD,EAAIA,EAAKA,GAAK,GAAKE,GAAKF,EAAKA,GAAK,EACtDyC,EAAEW,CAAC,EAAIlD,EACPw6G,EAAG,EAAKt3G,EAAI,EAAK,EACVlD,CACR,EAED,SAAS0qB,EAAK8vF,EAAIw6K,EAAM,CACtB,IAAI7T,EAAM5+Q,EAAI,GAEd,GAAIyyR,KAAUA,EAAO,GAEfzyR,EAAE,CAAC,EAAIyyR,MAIX,KADAA,EAAO,GAAKA,EACP7T,EAAI,EAAGA,EAAI6T,EAAK,OAAQ,EAAE7T,EAC7B5+Q,EAAE4+Q,EAAI,CAAC,EAAK5+Q,EAAE4+Q,EAAI,CAAC,GAAK,GACnB6T,EAAK,WAAW7T,CAAC,EAAI5+Q,EAAG4+Q,EAAI,EAAK,CAAC,GAAK,GAIhD,KAAO5+Q,EAAE,OAAS,GAAGA,EAAE,KAAK,CAAC,EAC7B,IAAK4+Q,EAAI,EAAGA,EAAI,GAAK5+Q,EAAE4+Q,CAAC,IAAM,EAAG,EAAEA,EAAE,CAOrC,IANIA,GAAK,EAAO5+Q,EAAE,CAAC,EAAI,GAAaA,EAAE4+Q,CAAC,EAEvC3mK,EAAG,EAAIj4G,EACPi4G,EAAG,EAAI,EAGF2mK,EAAI,IAAKA,EAAI,EAAG,EAAEA,EACrB3mK,EAAG,KAAM,EAIb9vF,EAAK8vF,EAAIw6K,CAAI,EAGf,SAASrgK,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EAAE,MAAO,EACjB5B,EAAE,EAAI4B,EAAE,EACD5B,EAGT,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACpBk4N,GAAQ,OAAMA,EAAO,CAAE,IAAI,MAC/B,IAAIjzK,EAAK,IAAI2rM,EAAO14B,CAAI,EACpB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO,UAAW,CAAE,OAAQ1rM,EAAG,SAAW,GAAK,UAAc,EACjE,OAAA0rM,EAAK,OAAS,UAAW,CACvB,EACE,KAAIptI,EAAMt+D,EAAG,KAAI,IAAO,GACpB0pB,GAAO1pB,EAAG,KAAM,IAAK,GAAK,WAC1Bh+G,GAAUs8K,EAAM50C,IAAQ,GAAK,UAC1B1nI,IAAW,GACpB,OAAOA,CACR,EACD0pT,EAAK,MAAQ1rM,EAAG,KAChB0rM,EAAK,MAAQA,EACTvsS,IACEA,EAAM,GAAGyzG,EAAKzzG,EAAO6gG,CAAE,EAC3B0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGLzwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,UAAYA,CAGlB,GACCslK,GAC+B7yE,CAEjC,oECtEC,SAAS2nF,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAAS2lJ,EAAO14B,EAAM,CACpB,IAAIx6K,EAAK,KAGTA,EAAG,KAAO,UAAW,CACnB,IAAIv6G,EAAIu6G,EAAG,EACPj4G,EAAIi4G,EAAG,EAAGt3G,EAAIs3G,EAAG,EAAG16G,EAAGE,EAE3B,OAAAw6G,EAAG,EAAIv6G,EAAKA,EAAI,WAAc,EAE9BD,EAAIuC,EAAGW,EAAI,GAAM,GAAG,EACpBpD,EAAIyC,EAAEW,EAAMA,EAAI,EAAK,GAAI,EACzBlD,GAAKA,GAAK,GACVF,GAAKA,GAAK,GACVE,GAAKA,IAAM,GACXF,GAAKA,IAAM,GAEXE,EAAIuC,EAAEW,CAAC,EAAIlD,EAAIF,EACf06G,EAAG,EAAIt3G,EAEClD,GAAKC,EAAKA,IAAM,IAAQ,CACjC,EAED,SAASyqB,EAAK8vF,EAAIw6K,EAAM,CACtB,IAAIl1R,EAAGE,EAAGkD,EAAGi+Q,EAAGlhR,EAAGsC,EAAI,GAAIyQ,EAAQ,IAYnC,IAXIgiR,KAAUA,EAAO,IAEnBh1R,EAAIg1R,EACJA,EAAO,OAGPA,EAAOA,EAAO,KACdh1R,EAAI,EACJgT,EAAQ,KAAK,IAAIA,EAAOgiR,EAAK,MAAM,GAGhC9xR,EAAI,EAAGi+Q,EAAI,IAAKA,EAAInuQ,EAAO,EAAEmuQ,EAE5B6T,IAAMh1R,GAAKg1R,EAAK,YAAY7T,EAAI,IAAM6T,EAAK,MAAM,GAEjD7T,IAAM,IAAGlhR,EAAID,GACjBA,GAAKA,GAAK,GACVA,GAAKA,IAAM,GACXA,GAAKA,GAAK,EACVA,GAAKA,IAAM,GACPmhR,GAAK,IACPlhR,EAAKA,EAAI,WAAc,EACvBH,EAAKyC,EAAE4+Q,EAAI,GAAG,GAAMnhR,EAAIC,EACxBiD,EAAUpD,GAAL,EAAUoD,EAAI,EAAI,GAW3B,IAPIA,GAAK,MACPX,GAAGyyR,GAAQA,EAAK,QAAU,GAAK,GAAG,EAAI,IAKxC9xR,EAAI,IACCi+Q,EAAI,EAAI,IAAKA,EAAI,EAAG,EAAEA,EACzBnhR,EAAIuC,EAAGW,EAAI,GAAM,GAAG,EACpBpD,EAAIyC,EAAEW,EAAMA,EAAI,EAAK,GAAI,EACzBlD,GAAKA,GAAK,GACVF,GAAKA,GAAK,GACVE,GAAKA,IAAM,GACXF,GAAKA,IAAM,GACXyC,EAAEW,CAAC,EAAIlD,EAAIF,EAGb06G,EAAG,EAAIv6G,EACPu6G,EAAG,EAAIj4G,EACPi4G,EAAG,EAAIt3G,EAGTwnB,EAAK8vF,EAAIw6K,CAAI,EAGf,SAASrgK,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EAAE,MAAO,EACV5B,CACT,CAEA,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACpBk4N,GAAQ,OAAMA,EAAO,CAAE,IAAI,MAC/B,IAAIjzK,EAAK,IAAI2rM,EAAO14B,CAAI,EACpB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO,UAAW,CAAE,OAAQ1rM,EAAG,SAAW,GAAK,UAAc,EACjE,OAAA0rM,EAAK,OAAS,UAAW,CACvB,EACE,KAAIptI,EAAMt+D,EAAG,KAAI,IAAO,GACpB0pB,GAAO1pB,EAAG,KAAM,IAAK,GAAK,WAC1Bh+G,GAAUs8K,EAAM50C,IAAQ,GAAK,UAC1B1nI,IAAW,GACpB,OAAOA,CACR,EACD0pT,EAAK,MAAQ1rM,EAAG,KAChB0rM,EAAK,MAAQA,EACTvsS,IACEA,EAAM,GAAGyzG,EAAKzzG,EAAO6gG,CAAE,EAC3B0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGLzwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,QAAUA,CAGhB,GACCslK,GAC+B7yE,CAEjC,oEC7IC,SAAS2nF,EAAQ3nF,EAAQ+K,EAAQ,CAElC,SAAS2lJ,EAAO14B,EAAM,CACpB,IAAIx6K,EAAK,KAAMmzM,EAAU,GAGzBnzM,EAAG,KAAO,UAAW,CACnB,IAAI75G,EAAI65G,EAAG,EAAGl5G,EAAIk5G,EAAG,EAAGn5G,EAAIm5G,EAAG,EAAGl6G,EAAIk6G,EAAG,EACzC,OAAA75G,EAAKA,GAAK,GAAOA,IAAM,EAAKW,EAC5BA,EAAKA,EAAID,EAAK,EACdA,EAAKA,GAAK,GAAOA,IAAM,EAAKf,EAC5BA,EAAKA,EAAIK,EAAK,EACd65G,EAAG,EAAI75G,EAAKA,GAAK,GAAOA,IAAM,GAAMW,EACpCk5G,EAAG,EAAIl5G,EAAKA,EAAID,EAAK,EACrBm5G,EAAG,EAAKn5G,GAAK,GAAOC,IAAM,GAAMhB,EACzBk6G,EAAG,EAAKl6G,EAAIK,EAAK,CACzB,EAkBD65G,EAAG,EAAI,EACPA,EAAG,EAAI,EACPA,EAAG,EAAI,YACPA,EAAG,EAAI,WAEHw6K,IAAS,KAAK,MAAMA,CAAI,GAE1Bx6K,EAAG,EAAKw6K,EAAO,WAAe,EAC9Bx6K,EAAG,EAAIw6K,EAAO,GAGd24B,GAAW34B,EAIb,QAASzzR,EAAI,EAAGA,EAAIosT,EAAQ,OAAS,GAAIpsT,IACvCi5G,EAAG,GAAKmzM,EAAQ,WAAWpsT,CAAC,EAAI,EAChCi5G,EAAG,KAAM,EAIb,SAASma,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACD5B,CACT,CAEA,SAASyqE,EAAKyqN,EAAMl4N,EAAM,CACxB,IAAIilD,EAAK,IAAI2rM,EAAO14B,CAAI,EACpB9zQ,EAAQ47C,GAAQA,EAAK,MACrB2wP,EAAO,UAAW,CAAE,OAAQ1rM,EAAG,SAAW,GAAK,UAAc,EACjE,OAAA0rM,EAAK,OAAS,UAAW,CACvB,EACE,KAAIptI,EAAMt+D,EAAG,KAAI,IAAO,GACpB0pB,GAAO1pB,EAAG,KAAM,IAAK,GAAK,WAC1Bh+G,GAAUs8K,EAAM50C,IAAQ,GAAK,UAC1B1nI,IAAW,GACpB,OAAOA,CACR,EACD0pT,EAAK,MAAQ1rM,EAAG,KAChB0rM,EAAK,MAAQA,EACTvsS,IACE,OAAOA,GAAU,UAAUyzG,EAAKzzG,EAAO6gG,CAAE,EAC7C0rM,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK5S,EAAI,EAAE,CAAE,GAEzC0rM,EAGLzwJ,GAAUA,EAAO,QACnBA,EAAO,QAAUzyF,EAIjB,KAAK,OAASA,CAGf,GACCslK,GAC+B7yE,CAEjC,0EC5EC,SAAU2nF,EAAQ8mE,EAAMmC,EAAM,CAK/B,IAAIrwO,EAAQ,IACRvxE,EAAS,EACTkmR,EAAS,GACT27B,EAAU,SACVC,EAAaF,EAAK,IAAIrwO,EAAOvxE,CAAM,EACnC+hT,EAAeH,EAAK,IAAI,EAAG17B,CAAM,EACjC87B,EAAWD,EAAe,EAC1BjnN,EAAOvpB,EAAQ,EACf0wO,EAMJ,SAASC,EAAWl5B,EAAMroR,EAAS1B,EAAU,CAC3C,IAAItC,EAAM,CAAE,EACZgE,EAAWA,GAAW,GAAQ,CAAE,QAAS,EAAM,EAAIA,GAAW,GAG9D,IAAIwhT,EAAYC,EAAOjlE,EACrBx8O,EAAQ,QAAU,CAACqoR,EAAMq5B,EAAS5C,CAAI,CAAC,EACtCz2B,GAAgBs5B,EAAQ,EAAW,CAAC,EAAG3lT,CAAG,EAGzC4lT,EAAO,IAAIC,EAAK7lT,CAAG,EAInB8kT,EAAO,UAAW,CAIpB,QAHI/tT,EAAI6uT,EAAK,EAAEviT,CAAM,EACjB3K,EAAIysT,EACJ5tT,EAAI,EACDR,EAAIquT,GACTruT,GAAKA,EAAIQ,GAAKq9E,EACdl8E,GAAKk8E,EACLr9E,EAAIquT,EAAK,EAAE,CAAC,EAEd,KAAO7uT,GAAKsuT,GACVtuT,GAAK,EACL2B,GAAK,EACLnB,KAAO,EAET,OAAQR,EAAIQ,GAAKmB,CAClB,EAED,OAAAosT,EAAK,MAAQ,UAAW,CAAE,OAAOc,EAAK,EAAE,CAAC,EAAI,CAAE,EAC/Cd,EAAK,MAAQ,UAAW,CAAE,OAAOc,EAAK,EAAE,CAAC,EAAI,UAAY,EACzDd,EAAK,OAASA,EAGdW,EAAOC,EAASE,EAAK,CAAC,EAAG9C,CAAI,GAGrB9+S,EAAQ,MAAQ1B,GACpB,SAASwiT,EAAMz4B,EAAMy5B,EAAcvtS,EAAO,CAUxC,OATIA,IAEEA,EAAM,GAAKyzG,EAAKzzG,EAAOqtS,CAAI,EAE/Bd,EAAK,MAAQ,UAAW,CAAE,OAAO94L,EAAK45L,EAAM,EAAE,CAAE,GAK9CE,GAAgBb,EAAKC,CAAO,EAAIJ,EAAaz4B,GAIrCy4B,CACb,GACLA,EACAU,EACA,WAAYxhT,EAAUA,EAAQ,OAAU,MAAQihT,EAChDjhT,EAAQ,KAAK,EAaf,SAAS6hT,EAAK7lT,EAAK,CACjB,IAAI7I,EAAG4uT,EAAS/lT,EAAI,OAChB6xG,EAAK,KAAMt3G,EAAI,EAAGi+Q,EAAI3mK,EAAG,EAAIA,EAAG,EAAI,EAAGv3G,EAAIu3G,EAAG,EAAI,CAAE,EAMxD,IAHKk0M,IAAU/lT,EAAM,CAAC+lT,GAAQ,GAGvBxrT,EAAIq6E,GACTt6E,EAAEC,CAAC,EAAIA,IAET,IAAKA,EAAI,EAAGA,EAAIq6E,EAAOr6E,IACrBD,EAAEC,CAAC,EAAID,EAAEk+Q,EAAIr6K,EAAQq6K,EAAIx4Q,EAAIzF,EAAIwrT,CAAM,GAAK5uT,EAAImD,EAAEC,CAAC,EAAG,EACtDD,EAAEk+Q,CAAC,EAAIrhR,GAIR06G,EAAG,EAAI,SAASjmF,EAAO,CAItB,QAFIz0B,EAAGD,EAAI,EACPqD,EAAIs3G,EAAG,EAAG2mK,EAAI3mK,EAAG,EAAGv3G,EAAIu3G,EAAG,EACxBjmF,KACLz0B,EAAImD,EAAEC,EAAI4jG,EAAQ5jG,EAAI,CAAE,EACxBrD,EAAIA,EAAI09E,EAAQt6E,EAAE6jG,GAAS7jG,EAAEC,CAAC,EAAID,EAAEk+Q,EAAIr6K,EAAQq6K,EAAIrhR,CAAE,IAAMmD,EAAEk+Q,CAAC,EAAIrhR,EAAG,EAExE,OAAA06G,EAAG,EAAIt3G,EAAGs3G,EAAG,EAAI2mK,EACVthR,CAIR,GAAE09E,CAAK,EAOV,SAASo3C,EAAKjzH,EAAG5B,EAAG,CAClB,OAAAA,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EACR5B,EAAE,EAAI4B,EAAE,EAAE,MAAO,EACV5B,CACT,CAMA,SAASqpP,EAAQ54O,EAAKssC,EAAO,CAC3B,IAAI94C,EAAS,CAAE,EAAE4qT,EAAO,OAAOp+S,EAAMi3C,EACrC,GAAI3K,GAAS8xQ,GAAO,SAClB,IAAKnnQ,KAAQj3C,EACX,GAAI,CAAExM,EAAO,KAAKolP,EAAQ54O,EAAIi3C,CAAI,EAAG3K,EAAQ,CAAC,CAAC,CAAI,MAAW,EAGlE,OAAQ94C,EAAO,OAASA,EAAS4qT,GAAO,SAAWp+S,EAAMA,EAAM,KAQjE,SAAS69S,EAAOp5B,EAAMrsR,EAAK,CAEzB,QADIimT,EAAa55B,EAAO,GAAI65B,EAAO1tC,EAAI,EAChCA,EAAIytC,EAAW,QACpBjmT,EAAIm+F,EAAOq6K,CAAC,EACVr6K,GAAS+nN,GAASlmT,EAAIm+F,EAAOq6K,CAAC,EAAI,IAAMytC,EAAW,WAAWztC,GAAG,EAErE,OAAOktC,EAAS1lT,CAAG,EAQrB,SAAS2lT,GAAW,CAClB,GAAI,CACF,IAAIpmR,EACJ,OAAI+lR,IAAe/lR,EAAM+lR,EAAW,aAElC/lR,EAAMA,EAAIq1C,CAAK,GAEfr1C,EAAM,IAAI,WAAWq1C,CAAK,GACzBonK,EAAO,QAAUA,EAAO,UAAU,gBAAgBz8M,CAAG,GAEjDmmR,EAASnmR,CAAG,CACpB,MAAW,CACV,IAAIoqL,EAAUqyB,EAAO,UACjB/9O,EAAU0rN,GAAWA,EAAQ,QACjC,MAAO,CAAC,CAAC,IAAI,KAAMqyB,EAAQ/9O,EAAS+9O,EAAO,OAAQ0pE,EAAS5C,CAAI,CAAC,GAQrE,SAAS4C,EAAS/tT,EAAG,CACnB,OAAO,OAAO,aAAa,MAAM,EAAGA,CAAC,EAgBvC,GANA8tT,EAAOR,EAAK,OAAQ,EAAEnC,CAAI,EAMSzuJ,EAAO,QAAS,CACjDA,EAAA,QAAiBkxJ,EAEjB,GAAI,CACFD,EAAavrT,EACd,MAAY,QAKbkrT,EAAK,OAASC,CAAO,EAAIK,CAK1B,GAGE,OAAO,KAAS,IAAe,KAAOr+E,GACvC,CAAE,EACF,+BC/OEi/E,IAAOpsT,IAKPqsT,IAAS/hN,IAKTgiN,IAASvpE,IAQTwpE,IAAY7sD,IASZ8sD,IAAUC,IAOVC,IAASC,IAITC,GAAKC,IAETD,GAAG,KAAOR,IACVQ,GAAG,OAASP,IACZO,GAAG,OAASN,IACZM,GAAG,UAAYL,IACfK,GAAG,QAAUJ,IACbI,GAAG,OAASF,IAEZ,IAAAlB,GAAiBoB,GC3DjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBO,MAAME,EAAY,CACrB,YAAYxZ,EAAMyZ,EAAcjwC,EAAOkwC,EAAW16B,EAAM,CACpD,KAAK,KAAOghB,EACZ,KAAK,OAASyZ,EACd,KAAK,MAAQjwC,EACb,KAAK,QAAU,IACf,KAAK,UAAYkwC,EACb,KAAK,YACL,KAAK,MAAQ,KAAK,KAAO,KAAK,OAAS,EACvC,KAAK,MAAQ,KAAK,KAAO,KAAK,OAAS,GAE3C,MAAMC,EAAY36B,GAAc,KAAK,OAAQ,EAC7C,KAAK,OAAS46B,QAAgBD,EAAU,SAAQ,CAAE,CAC1D,CAEI,WAAY,CACR,GAAI,CAAC,MAAM,KAAK,OAAO,EAAG,CACtB,MAAMlsT,EAAQ,KAAK,QACnB,YAAK,QAAU,IACRA,CACnB,CACQ,IAAIosT,EAASC,EACThnT,EAAU,GACd,KAAO,CAACA,GAAS,CACb,IAAImgT,EAAIC,EAAIjmT,EACZ,GACIgmT,EAAK,EAAI,KAAK,OAAQ,EAAG,EACzBC,EAAK,EAAI,KAAK,OAAQ,EAAG,EACzBjmT,EAAIgmT,EAAKA,EAAKC,EAAKA,QACdjmT,GAAK,GAAKA,IAAM,GACzB,MAAMwxR,EAAM,KAAK,KAAK,GAAO,KAAK,IAAIxxR,CAAC,EAAIA,CAAC,EAC5C4sT,EAAU,KAAK,KAAO,KAAK,OAAS5G,EAAKx0B,EACzCq7B,EAAU,KAAK,KAAO,KAAK,OAAS5G,EAAKz0B,GACrC,CAAC,KAAK,WAAa,KAAK,iBAAiBo7B,CAAO,KAChD/mT,EAAU,GAE1B,CACQ,OAAI,CAAC,KAAK,WAAa,KAAK,iBAAiBgnT,CAAO,KAChD,KAAK,QAAU,KAAK,aAAaA,CAAO,GAErC,KAAK,aAAaD,CAAO,CACxC,CAEI,aAAapsT,EAAO,CAChB,OAAI,KAAK,OAAS,MAAQ,KAAK,QAAU,UAC9BA,EAEJ,KAAK,MAAMA,CAAK,CAC/B,CAEI,iBAAiBA,EAAO,CACpB,OAAOA,GAAS,KAAK,OAASA,GAAS,KAAK,KACpD,CACA,CAGO,MAAMssT,GAAU,CACnB,YAAY7jI,EAAOu3H,EAAMjkC,EAAOwV,EAAM,CAClC,KAAK,MAAQ9oG,EACb,KAAK,KAAO,EAAIu3H,EAChB,KAAK,MAAQjkC,EACb,MAAMmwC,EAAY36B,GAAc,KAAK,OAAQ,EAC7C,KAAK,MAAQ46B,QAAgBD,EAAU,SAAQ,CAAE,EACjD,KAAK,MAAQ,IAAIH,GAAY,EAAG,EAAGhwC,EAAO,GAAO,KAAK,OAAO,EACzDtzF,EAAQ,EACR,KAAK,EAAIA,EAAS,EAAI,EAGtB,KAAK,EAAIA,EAAS,EAAI,EAE1B,KAAK,EAAI,EAAI,KAAK,KAAK,EAAI,KAAK,CAAC,CACzC,CAEI,WAAY,CACR,IAAIyb,EAAIqoH,EAAI/G,EAAI/oT,EAAGH,EAAGC,EACtB,OAAa,CACT,GACIE,EAAI,KAAK,MAAM,UAAW,EAC1BF,EAAI,EAAK,KAAK,EAAIE,QACbF,GAAK,GAMd,GALAA,GAAKA,EAAIA,EACT2nM,EAAKznM,EAAIA,EACT8vT,EAAK,EAAK,KAAQroH,EAAKA,EACvBshH,EAAM,GAAMthH,EAAO,KAAK,GAAK,EAAI3nM,EAAI,KAAK,IAAIA,CAAC,GAC/CD,EAAI,KAAK,MAAO,EACZA,EAAIiwT,GAAM,KAAK,IAAIjwT,CAAC,EAAIkpT,EACxB,KAEhB,CACQ,OAAAjpT,EAAK,EAAI,KAAK,KAAQ,KAAK,EAAIA,EAC3B,KAAK,MAAQ,IACbA,GAAK,KAAK,IAAI,KAAK,MAAK,EAAI,EAAI,KAAK,KAAK,GAEvC,KAAK,aAAaA,CAAC,CAClC,CAEI,aAAayD,EAAO,CAChB,OAAI,KAAK,QAAU,UACRA,EAEJ,KAAK,MAAMA,CAAK,CAC/B,CACA,CACO,MAAMwsT,GAAc,CACvB,YAAYphJ,EAAM,EAAG1lI,EAAM,EAAGq2O,EAAOwV,EAAM,CAYvC,GAVA,KAAK,eAAiB,IAAO,KAAK,OAAS,MAAQ,KAAK,QAAU,UAClE,KAAK,IAAMnmH,EACX,KAAK,MAAQ1lI,EAAM0lI,EACnB,KAAK,MAAQ2wG,EACTwV,GAAQ,OACRA,EAAO,KAAK,OAAQ,GAEpB,OAAOA,GAAS,WAChBA,EAAOA,EAAK,SAAU,GAEtB,CAAC,KAAK,eAAc,GAAM,KAAK,OAAS,EACxC,MAAM,IAAI,MAAM,0BAA0BnmH,CAAG,MAAM1lI,CAAG,8BAA8B,EAExF,KAAK,OAASymR,GAAe,KAAC56B,CAAI,CAC1C,CACI,aAAavxR,EAAO,CAChB,OAAI,KAAK,iBACEA,EAEJ,KAAK,MAAMA,CAAK,CAC/B,CACI,WAAY,CACR,OAAO,KAAK,aAAa,KAAK,IAAM,KAAK,MAAQ,KAAK,QAAQ,CACtE,CACA,CCrJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASysT,IAAa3wC,EAAOrzF,EAAOu3H,EAAO,EAAGjkC,EAAQ,UAAWwV,EAAM,CAQnE,GAPAxS,GAAmCjD,CAAK,EACpCkkC,GAAQ,OACRA,EAAO,GAEPjkC,GAAS,OACTA,EAAQ,WAERA,IAAU,WAAaA,IAAU,QACjC,MAAM,IAAI,MAAM,yBAAyBA,CAAK,EAAE,EAEpD,MAAM2wC,EAAS,IAAIJ,IAAU7jI,EAAOu3H,EAAMjkC,EAAOwV,CAAI,EAC/CznR,EAAMmkB,GAAO6tP,EAAOC,CAAK,EAC/B,QAASt8Q,EAAI,EAAGA,EAAIqK,EAAI,OAAO,OAAQrK,IACnCqK,EAAI,OAAOrK,CAAC,EAAIitT,EAAO,UAAW,EAEtC,OAAO5iT,EAAI,SAAU,CACzB,CACO,MAAM6iT,IAA8BhsT,EAAG,CAAE,aAAA8rT,IAAc,ECtD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASG,IAAc9wC,EAAOy2B,EAAO,EAAGsa,EAAS,EAAG9wC,EAAOwV,EAAM,CAE7D,GADAxS,GAAmCjD,CAAK,EACpCC,GAAS,MAAQA,IAAU,OAC3B,MAAM,IAAI,MAAM,yBAAyBA,CAAK,EAAE,EAEpD,MAAM+wC,EAAY,IAAIf,GAAYxZ,EAAMsa,EAAQ9wC,EAAO,GAAuBwV,CAAI,EAC5EznR,EAAMmkB,GAAO6tP,EAAOC,CAAK,EAC/B,QAASt8Q,EAAI,EAAGA,EAAIqK,EAAI,OAAO,OAAQrK,IACnCqK,EAAI,OAAOrK,CAAC,EAAIqtT,EAAU,UAAW,EAEzC,OAAOhjT,EAAI,SAAU,CACzB,CACO,MAAMijT,GAA+BpsT,EAAG,CAAE,cAAAisT,IAAe,EC/ChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASI,IAAsBlxC,EAAOC,EAAOwV,EAAM,CAC/C,GAAIxV,GAAS,MAAQA,IAAU,OAC3B,MAAM,IAAI,MAAM,yBAAyBA,CAAK,EAAE,EAEpD,OAAOgxC,GAAajxC,EAAO,EAAG,EAAGC,EAAOwV,CAAI,CAChD,CACO,MAAM07B,IAAuCtsT,EAAG,CAAE,sBAAAqsT,IAAuB,ECvChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASE,IAAepxC,EAAOqxC,EAAS,EAAGC,EAAS,EAAGrxC,EAAQ,UAAWwV,EAAM,CAC5ExS,GAAmCjD,CAAK,EACxC,MAAMhyQ,EAAMmkB,GAAO6tP,EAAOC,CAAK,EACzBnmQ,EAAS,IAAI42S,IAAcW,EAAQC,EAAQ,KAAM77B,CAAI,EAC3D,QAAS9xR,EAAI,EAAGA,EAAIqK,EAAI,OAAO,OAAQrK,IACnCqK,EAAI,OAAOrK,CAAC,EAAImW,EAAO,UAAW,EAEtC,OAAO9L,EAAI,SAAU,CACzB,CACO,MAAMujT,GAAgC1sT,EAAG,CAAE,eAAAusT,IAAgB,ECpDlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASI,IAAkBxxC,EAAOqxC,EAAQC,EAAQ77B,EAAM,CAEpD,OAAO87B,GAAcvxC,EAAOqxC,EAAQC,EAAQ,QAAS77B,CAAI,CAC7D,CACO,MAAMg8B,IAAmC5sT,EAAG,CAAE,kBAAA2sT,IAAmB,EC1CxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCO,SAASjlO,GAAM/jB,EAAOg/K,EAAMljP,EAAO,EAAG27Q,EAAQ,UAAW,CAC5D,GAAI37Q,IAAS,EACT,MAAM,IAAI,MAAM,4BAA4B,EAEhD,MAAMuqL,EAAQ,CAAE,MAAArmH,EAAO,KAAAg/K,EAAM,KAAAljP,EAAM,MAAA27Q,CAAO,EAC1C,OAAOqd,EAAO,UAAUxR,GAAO,GAAiBj9F,CAAK,CACzD,CC3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAAS6iI,IAAMnxS,EAAO,CAElB,MAAMk2Q,EAAS,CAAE,MADFmL,EAAgBrhR,EAAO,QAAS,MAAM,CACrB,EAChC,OAAO+8Q,EAAO,UAAUvR,GAAM0K,CAAM,CACxC,CACO,MAAM4L,GAAuBx9R,EAAG,CAAE,MAAA6sT,IAAO,ECxChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASC,IAAYhxT,EAAG,CAEpB,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,YAAY,CACvB,EACxB,OAAO28R,EAAO,UAAUtR,GAAYyK,CAAM,CAC9C,CACO,MAAMm7B,IAA6B/sT,EAAG,CAAE,YAAA8sT,IAAa,ECrC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAMlxT,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUrR,GAAMwK,CAAM,CACxC,CACO,MAAMq7B,GAAuBjtT,EAAG,CAAE,MAAAgtT,IAAO,ECtChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAOpxT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAU/Q,GAAOkK,CAAM,CACzC,CACO,MAAMu7B,GAAwBntT,EAAG,CAAE,OAAAktT,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDA,SAASE,IAAStxT,EAAGg2L,EAAM,CAEvB,MAAM8/F,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,SAAS,CACpB,EAClBkuL,EAAQ,CAAE,KAAM8H,CAAM,EAC5B,OAAO2mG,EAAO,UAAU9Q,GAASiK,EAAQ5nG,CAAK,CAClD,CACO,MAAMwsH,GAA0Bx2S,EAAG,CAAE,SAAAotT,IAAU,ECzDtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBA,SAASC,IAAWvxT,EAAG,CACnB,MAAMgsS,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,qDAAqDA,EAAG,IAAI,GAAG,EACzF0O,GAAQ1O,EAAI,CAAC,CACxB,CACO,MAAMwlB,IAA4BttT,EAAG,CAAE,WAAAqtT,IAAY,EC9B1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BA,SAASE,IAAWzxT,EAAGg2L,EAAM,CACzB,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,qDAAqDA,EAAG,IAAI,GAAG,EACzF0O,GAAQ1O,EAAIh2G,CAAI,CAC3B,CACO,MAAM07H,IAA4BxtT,EAAG,CAAE,WAAAutT,IAAY,EChC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BA,SAASE,IAAW3xT,EAAGg2L,EAAM,CACzB,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,qDAAqDA,EAAG,IAAI,GAAG,EACzF0O,GAAQ1O,EAAIh2G,CAAI,CAC3B,CACO,MAAM47H,IAA4B1tT,EAAG,CAAE,WAAAytT,IAAY,EChC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BA,SAASE,IAAW7xT,EAAGg2L,EAAM,CACzB,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,qDAAqDA,EAAG,IAAI,GAAG,EACzF0O,GAAQ1O,EAAIh2G,CAAI,CAC3B,CACO,MAAM87H,IAA4B5tT,EAAG,CAAE,WAAA2tT,IAAY,EChC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASE,IAAO/xT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EACxB,OAAO28R,EAAO,UAAU7Q,GAAOgK,CAAM,CACzC,CACO,MAAM8b,GAAwB1tS,EAAG,CAAE,OAAA6tT,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASC,IAAOhyT,EAAG,CAEf,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,QAAS,SAAS,CAC7B,EACxB,OAAO28R,EAAO,UAAU5Q,GAAO+J,CAAM,CACzC,CACO,MAAMm8B,IAAwB/tT,EAAG,CAAE,OAAA8tT,IAAQ,ECtClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,SAASE,IAAMlyT,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUxQ,GAAM2J,CAAM,CACxC,CACO,MAAMq8B,IAAuBjuT,EAAG,CAAE,MAAAguT,IAAO,ECYhD,SAASE,IAAiBpyT,EAAGqyT,EAAiBC,EAAiBxwC,EAASmX,EAAK8Y,EAAW,CAAC,EAAG,CAAC,EAAGrD,EAAa,OAAQ,CACjH,MAAM1C,EAAK/K,EAAgBjhS,EAAG,IAAK,iBAAiB,EAC9CuyT,EAAmBtxB,EAAgBoxB,EAAiB,kBAAmB,iBAAiB,EACxFG,EAAmBvxB,EAAgBqxB,EAAiB,kBAAmB,iBAAiB,EAC9F,IAAIlf,EAAMpH,EACNqH,EAAe,GAKnB,GAJIrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAE5D0C,IAAe,OACf,MAAM,IAAI,MAAM,oFACO,EAE3BzU,EAAYmZ,EAAI,OAAS,EAAG,IAAM,gEACtBA,EAAI,IAAI,GAAG,EACvBnZ,EAAYs4B,EAAiB,OAAS,EAAG,IAAM,2EAC/BA,EAAiB,IAAI,GAAG,EACxCt4B,EAAYu4B,EAAiB,OAAS,EAAG,IAAM,2EAC/BD,EAAiB,IAAI,GAAG,EACxCt4B,EAAYu4B,EAAiB,MAAM,CAAC,IAAM,EAAG,IAAM,yFACxBA,EAAiB,MAAM,CAAC,CAAC,GAAG,EACvDv4B,EAAYu4B,EAAiB,MAAM,CAAC,IAAM,EAAG,IAAM,yFAClBA,EAAiB,MAAM,CAAC,CAAC,GAAG,EAC7D,MAAMxiB,EAAauiB,EAAiB,MAAM,CAAC,EACrCE,EAAoBF,EAAiB,MAAM,CAAC,EAClDt4B,EAAYu4B,EAAiB,MAAM,CAAC,IAAMxiB,EAAayiB,EAAmB,IAAM,6EACjEziB,EAAayiB,CAAiB,aAC9BD,EAAiB,MAAM,CAAC,CAAC,GAAG,EAC3C,MAAM5iB,EAAY4L,GAAgBpI,EAAKmf,EAAkBzwC,EAASmX,EAAKyV,EAAYqD,CAAQ,EAErF1kS,EAAMyrS,GAAOlJ,EAAW4iB,EADN,EACyC,QAAS9jB,CAAU,EACpF,OAAI2E,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMqlT,IAAkCxuT,EAAG,CAAE,iBAAAkuT,IAAkB,ECxFtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgDA,eAAeO,IAAgB3yT,EAAGC,EAAG,CACjC,MAAM+rS,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EACxCi3S,EAAKhW,EAAgBhhS,EAAG,IAAK,WAAW,EAC9Cg6R,EAAY+R,EAAG,QAAUiL,EAAG,MAAO,IAAM,kDAAkDjL,EAAG,KAAK,YAAYiL,EAAG,KAAK,IAAI,EAC3Hhd,EAAY+R,EAAG,OAAS,EAAG,IAAM,qCAAqCA,EAAG,KAAK,IAAI,EAClF/R,EAAYgd,EAAG,OAAS,EAAG,IAAM,qCAAqCA,EAAG,KAAK,IAAI,EAClF,MAAM2b,EAAQ,MAAM5mB,EAAG,KAAM,EACvB6mB,EAAQ,MAAM5b,EAAG,KAAM,EACvB6b,EAAO,IAAI,IAAID,CAAK,EAC1B,IAAIE,EAAa,EACjB,QAAS/vT,EAAI,EAAGA,EAAI4vT,EAAM,OAAQ5vT,IACzB8vT,EAAK,IAAIF,EAAM5vT,CAAC,CAAC,GAClB+vT,IAGR,MAAMvhS,EAAS,IAAIuoQ,GAAa,CAACg5B,CAAU,EAAG/mB,EAAG,KAAK,EAChDtL,EAAU,IAAI3G,GAAa,CAACg5B,CAAU,EAAG,OAAO,EACtD,QAAS/vT,EAAI,EAAGvD,EAAI,EAAGuD,EAAI4vT,EAAM,OAAQ5vT,IAChC8vT,EAAK,IAAIF,EAAM5vT,CAAC,CAAC,IAClBwuB,EAAO,OAAO/xB,CAAC,EAAImzT,EAAM5vT,CAAC,EAC1B09R,EAAQ,OAAOjhS,CAAC,EAAIuD,EACpBvD,KAGR,MAAO,CAAC+xB,EAAO,SAAU,EAAEkvQ,EAAQ,SAAQ,CAAE,CACjD,CACO,MAAMsyB,IAAiBL,IC1E9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASM,IAAMjzT,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUpQ,GAAMuJ,CAAM,CACxC,CACO,MAAMo9B,IAAuBhvT,EAAG,CAAE,MAAA+uT,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAKnzT,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,SAAS,CAC3B,EACxB,OAAO28R,EAAO,UAAUtQ,GAAKyJ,CAAM,CACvC,CACO,MAAMs9B,IAAsBlvT,EAAG,CAAE,KAAAivT,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASE,IAAMrzT,EAAG,CAEd,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EACxB,OAAO28R,EAAO,UAAUrQ,GAAMwJ,CAAM,CACxC,CACO,MAAMw9B,IAAuBpvT,EAAG,CAAE,MAAAmvT,IAAO,ECrChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBA,SAASE,IAASvzT,EAAGq0S,EAAOzoS,EAAM,CAC9B,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,mDAAmDA,EAAG,IAAI,SAAS,EAC7FsI,GAAMtI,EAAI,CAACqI,CAAK,EAAG,CAACzoS,CAAI,CAAC,CACpC,CACO,MAAM4nT,IAA0BtvT,EAAG,CAAE,SAAAqvT,IAAU,EC7BtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBA,SAASE,IAASzzT,EAAGq0S,EAAOzoS,EAAM,CAC9B,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,mDAAmDA,EAAG,IAAI,SAAS,EAC7FsI,GAAMtI,EAAIqI,EAAOzoS,CAAI,CAChC,CACO,MAAM8nT,IAA0BxvT,EAAG,CAAE,SAAAuvT,IAAU,EC7BtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBA,SAASE,IAAS3zT,EAAGq0S,EAAOzoS,EAAM,CAC9B,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,mDAAmDA,EAAG,IAAI,SAAS,EAC7FsI,GAAMtI,EAAIqI,EAAOzoS,CAAI,CAChC,CACO,MAAMgoT,IAA0B1vT,EAAG,CAAE,SAAAyvT,IAAU,EC7BtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBA,SAASE,IAAS7zT,EAAGq0S,EAAOzoS,EAAM,CAC9B,MAAMogS,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAC5Ci6R,SAAY+R,EAAG,OAAS,EAAG,IAAM,mDAAmDA,EAAG,IAAI,SAAS,EAC7FsI,GAAMtI,EAAIqI,EAAOzoS,CAAI,CAChC,CACO,MAAMkoT,IAA0B5vT,EAAG,CAAE,SAAA2vT,IAAU,EC7BtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASE,IAASnP,EAAQ5I,EAAM,GAAI,CAChC,MAAM6I,EAAU5jB,EAAgB2jB,EAAQ,SAAU,UAAW,SAAS,EAItE,GAHI5I,IAAQ,KACRA,EAAM6I,EAAQ,KAAO,GAErB7I,IAAQ6I,EAAQ,KAAO,EACvB,MAAM,MAAM,4EACWA,EAAQ,IAAI,gBAAgB7I,CAAG,EAAE,EAE5D,MAAMlmB,EAAS,CAAE,OAAQ+uB,CAAS,EAC5B32H,EAAQ,CAAE,IAAA8tH,CAAK,EACrB,OAAOrf,EAAO,UAAU7P,GAASgJ,EAAQ5nG,CAAK,CAClD,CACO,MAAM82H,IAA0B9gT,EAAG,CAAE,SAAA6vT,IAAU,ECtDtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASC,IAAKp0S,EAAO,CACjBioH,EAAOjoH,EAAM,QAAU,YAAa,IAAM,6DAC3BA,EAAM,KAAK,GAAG,EAC7B,MAAMk2Q,EAAS,CAAE,MAAAl2Q,CAAO,EACxB,OAAO+8Q,EAAO,UAAUjV,GAAKoO,CAAM,CACvC,CACO,MAAMm+B,GAAsB/vT,EAAG,CAAE,KAAA8vT,IAAM,EC3C9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASE,IAAMt0S,EAAO,CAClBioH,EAAOjoH,EAAM,QAAU,YAAa,IAAM,8DAC3BA,EAAM,KAAK,GAAG,EAC7B,MAAMk2Q,EAAS,CAAE,MAAAl2Q,CAAO,EACxB,OAAO+8Q,EAAO,UAAUtU,GAAMyN,CAAM,CACxC,CACO,MAAMq+B,GAAuBjwT,EAAG,CAAE,MAAAgwT,IAAO,EC3ChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAOx0S,EAAO,CACnB,MAAMy0S,EAAqBz0S,EAAM,MAAMA,EAAM,MAAM,OAAS,CAAC,EACvD7R,EAAQ6R,EAAM,KAAOy0S,EAC3B,IAAIxlK,EACJ,GAAIwlK,GAAsB,EAAG,CACzB,MAAMC,EAAerhB,GAAQrzR,EAAO,CAAC7R,EAAOsmT,CAAkB,CAAC,EAC/DxlK,EAAMslK,GAAKG,CAAY,CAC/B,KACS,CAGD,MAAM5a,EAAc,CAAC3rS,EAAO,GAAKsmT,EAAqB,EAAE,EAClDE,EAAYthB,GAAQvR,GAAK9hR,CAAK,EAAG,CAAC7R,EAAOsmT,CAAkB,CAAC,EAC5DG,EAAYvhB,GAAQtR,GAAK/hR,CAAK,EAAG,CAAC7R,EAAOsmT,CAAkB,CAAC,EAC5DI,EAAgB/Z,GAAQpG,GAAMigB,EAAW,CAAC,EAAG,CAAC,EAAG,CAACxmT,EAAOsmT,EAAqB,CAAC,CAAC,EAAG,CAAC,EACpFK,EAAgBngC,GAAImmB,GAAQpG,GAAMkgB,EAAW,CAAC,EAAG,CAAC,EAAG,CAACzmT,EAAOsmT,EAAqB,CAAC,CAAC,EAAG,CAAC,EAAGrU,GAAO,EAAE,CAAC,EACrGrgT,EAAIk0S,GAAO,CAAC0gB,EAAWE,CAAa,EAAG,CAAC,EACxCzxT,EAAI6wS,GAAO,CAAC2gB,EAAWE,CAAa,EAAG,CAAC,EACxCJ,EAAerhB,GAAQn3G,GAAQn8L,EAAGqD,CAAC,EAAG,CAAC02S,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,CAAC,EAC5E7qJ,EAAMslK,GAAKG,CAAY,CAC/B,CAGI,GAFAzlK,EAAM6yI,GAAK7yI,CAAG,EAEVjvI,EAAM,OAAS,GAAKA,EAAM,MAAM,CAAC,IAAM,EAAG,CAC1C,MAAM6/P,EAAO5wH,EACP9gJ,EAAQ6R,EAAM,MAAM,CAAC,EAC3BivI,EAAMokJ,GAAQpkJ,EAAK,CAAC9gJ,EAAO8gJ,EAAI,MAAM,CAAC,EAAI9gJ,EAAO8gJ,EAAI,MAAM,CAAC,CAAC,CAAC,EAC9D4wH,EAAK,QAAS,CACtB,CACI,OAAO5wH,CACX,CACO,MAAM8lK,GAAwBzwT,EAAG,CAAE,OAAAkwT,IAAQ,EC3ElD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuDA,SAASQ,IAAO50T,EAAG60T,EAAiB7+H,EAAO,EAAG,CAE1C,MAAM8/F,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,OAAO,CAClB,EAClBiU,EAAO,CAAE,gBAAA4gT,EAAiB,KAAA7+H,CAAM,EACtC,OAAO2mG,EAAO,UAAU9P,GAAQiJ,EAAQ7hR,CAAI,CAChD,CACO,MAAM6nC,GAAwB53C,EAAG,CAAE,OAAA0wT,IAAQ,EC7DlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASE,IAAMl1S,EAAOm1S,EAAW,CAC7BltL,EAAOjoH,EAAM,QAAU,UAAW,IAAM,mDAAmDA,EAAM,KAAK,EAAE,EACxG,IAAIy0S,EAAqBz0S,EAAM,MAAMA,EAAM,MAAM,OAAS,CAAC,EAC3D,MAAM7R,EAAQ6R,EAAM,KAAOy0S,EAC3B,IAAIW,EACJ,GAAID,GAAa,MAAQA,EAAYV,EAAoB,CAErD,MAAMhgB,EAAQz0R,EAAM,MAAM,IAAI9f,GAAK,CAAC,EAC9B8L,EAAOgU,EAAM,MAAM,IAAI9f,GAAKA,CAAC,EACnC8L,EAAKgU,EAAM,MAAM,OAAS,CAAC,EAAIm1S,EAC/BC,EAAgB1gB,GAAM10R,EAAOy0R,EAAOzoS,CAAI,EACxCyoT,EAAqBU,CAC7B,SACaA,GAAa,MAAQA,EAAYV,EAAoB,CAE1D,MAAMY,EAAar1S,EAAM,MAAM,IAAI9f,GAAKA,CAAC,EACzCm1T,EAAWr1S,EAAM,MAAM,OAAS,CAAC,EAAIm1S,EAAYV,EACjDW,EAAgBnhB,GAAO,CAACj0R,EAAOw9R,GAAM6X,CAAU,CAAC,EAAGr1S,EAAM,MAAM,OAAS,CAAC,EACzEy0S,EAAqBU,CAC7B,MAEQC,EAAgBp1S,EAGpB,MAAMs1S,EAAajY,GAAU+X,CAAa,EACpCV,EAAerhB,GAAQn3G,GAAQk5H,EAAeE,CAAU,EAAG,CAACnnT,EAAOsmT,CAAkB,CAAC,EACtFxlK,EAAMolK,GAAIK,CAAY,EAEtBa,EAAO,KAAK,MAAMd,EAAqB,CAAC,EAAI,EAC5Ce,EAAa1zB,GAAK7yI,CAAG,EACrBwmK,EAAa1zB,GAAK9yI,CAAG,EACrBymK,EAAuBx5Q,GAAMs5Q,EAAY,CAACD,EAAMd,EAAqBc,CAAI,EAAGC,EAAW,MAAM,OAAS,CAAC,EACvGG,EAAuBz5Q,GAAMu5Q,EAAY,CAACF,EAAMd,EAAqBc,CAAI,EAAGE,EAAW,MAAM,OAAS,CAAC,EACvG3b,EAAcsb,EAAc,MAAM,MAAO,EAC/C,OAAAtb,EAAYsb,EAAc,MAAM,OAAS,CAAC,EAAIG,EACvCliB,GAAQn3G,GAAQw5H,EAAqB,CAAC,EAAGC,EAAqB,CAAC,CAAC,EAAG7b,CAAW,CACzF,CACO,MAAM8b,GAAuBtxT,EAAG,CAAE,MAAA4wT,IAAO,EChFhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASW,IAAmBr1T,EAAGK,EAAG,CAC9B,IAAI69G,EAAK2iL,EAAgB7gS,EAAG,IAAK,mBAAmB,EAChD4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,mBAAmB,EACpD,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChCqpM,GAA2B/9L,EAAG,MAAOtL,EAAG,KAAK,EAC7C,MAAM8iL,EAAS,CAAE,EAAGx3K,EAAI,EAAGtL,CAAI,EACzBk7E,EAAQ,CAAE,EAChB,OAAOyuG,EAAO,UAAUvP,GAAmB0I,EAAQ5nG,CAAK,CAC5D,CACO,MAAMwnI,GAAoCxxT,EAAG,CAAE,mBAAAuxT,IAAoB,ECvD1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASE,IAAS31T,EAAGg2L,EAAM,CACvB,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,UAAW,mBAAmB,EACjE,OAAOizS,GAAQjH,EAAIlrB,IAAakrB,EAAG,MAAOh2G,CAAI,EAAE,QAAQ,CAC5D,CACO,MAAM4/H,GAA0B1xT,EAAG,CAAE,SAAAyxT,IAAU,ECvCtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,SAASE,IAAO53B,EAASjoG,EAAO,EAAG,CAC/B,MAAMo3G,EAAW/L,GAAqBpD,EAAS,UAAW,QAAS,mBAAmB,EACtFhE,EAAYmT,EAAS,QAAU,EAAG,IAAM,sCAAsC,EAC1EA,EAAS,OAAS,GAClBnT,EAAYjkG,GAAQo3G,EAAS,CAAC,EAAE,KAAM,IAAM,oCAAoC,EAEpF,MAAMtX,EAASsX,EACTl/G,EAAQ,CAAE,KAAA8H,CAAM,EACtB,OAAO2mG,EAAO,UAAUhS,GAAMmL,EAAQ5nG,CAAK,CAC/C,CACO,MAAMhqJ,GAAwBhgC,EAAG,CAAE,OAAA2xT,IAAQ,EC9ClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCA,SAASC,IAAM91T,EAAGgsL,EAAQ,EAAK,CAE3B,MAAM8pG,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAM,CACjB,EAClBkuL,EAAQ,CAAE,MAAAlC,CAAO,EACvB,OAAO2wG,EAAO,UAAUrO,GAAMwH,EAAQ5nG,CAAK,CAC/C,CACO,MAAMvqL,GAAuBO,EAAG,CAAE,MAAA4xT,IAAO,ECvChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqDA,SAASC,IAAc/1T,EAAGq0S,EAAOlqP,EAAK23N,EAASk0C,EAAY,EAAGC,EAAU,EAAGC,EAAe,EAAGC,EAAc,EAAGC,EAAiB,EAAG,CAE9H,MAAMtgC,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,eAAgB,mBAAmB,CAC9C,EAClBkuL,EAAQ,CACV,MAAAmmH,EACA,IAAAlqP,EACA,QAAA23N,EACA,UAAAk0C,EACA,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,eAAAC,CACH,EACD,OAAOz5B,EAAO,UAAUpP,GAAcuI,EAAQ5nG,CAAK,CACvD,CACO,MAAMmoI,IAA+BnyT,EAAG,CAAE,cAAA6xT,IAAe,ECpEhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgCA,SAASO,IAAKt2T,EAAG,CAEb,MAAM81R,EAAS,CAAE,EADNmL,EAAgBjhS,EAAG,IAAK,MAAO,SAAS,CAC3B,EACxB,OAAO28R,EAAO,UAAU/O,GAAKkI,CAAM,CACvC,CACO,MAAMygC,IAAsBryT,EAAG,CAAE,KAAAoyT,IAAM,ECrC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCO,SAASE,GAASzpR,EAAQuyO,EAAO,CACpCU,GAAcjzO,CAAM,EACpB,MAAMq0P,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,EACzB,MAAM,IAAI,MAAM,oDAAoD,EAGxE,OAAOW,GAAWh1P,EADJ,KACmBq0P,EAAe9hB,CAAK,CACzD,CC3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CO,SAASm3C,GAAS1pR,EAAQsyO,EAAOC,EAAO,CAE3C,GADAU,GAAcjzO,CAAM,EAChBsyO,GAAS,MAAQA,EAAM,SAAW,EAClC,MAAM,IAAI,MAAM,+CAA+C,EAEnE,MAAM+hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,GAAKA,EAAc,SAAW,EACvD,MAAM,IAAI,MAAM,gEAAgE,EAEpF,GAAIA,EAAc,SAAW,GAAK/hB,GAAS,KACvC,MAAM,IAAI,MAAM,8EACW,EAE/B,OAAO0iB,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CO,SAASo3C,GAAS3pR,EAAQsyO,EAAOC,EAAO,CAE3C,GADAU,GAAcjzO,CAAM,EAChBsyO,GAAS,MAAQA,EAAM,SAAW,EAClC,MAAM,IAAI,MAAM,iDAAiD,EAErE,MAAM+hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,GAAKA,EAAc,SAAW,EACvD,MAAM,IAAI,MAAM,kEAAkE,EAEtF,GAAIA,EAAc,SAAW,GAAK/hB,GAAS,KACvC,MAAM,IAAI,MAAM,yEACM,EAE1B,OAAO0iB,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CO,SAASq3C,IAAS5pR,EAAQsyO,EAAOC,EAAO,CAE3C,GADAU,GAAcjzO,CAAM,EAChBsyO,GAAS,MAAQA,EAAM,SAAW,EAClC,MAAM,IAAI,MAAM,gDAAgD,EAEpE,MAAM+hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,GAAKA,EAAc,SAAW,EACvD,MAAM,IAAI,MAAM,oEAAoE,EAExF,GAAIA,EAAc,SAAW,GAAK/hB,GAAS,KACvC,MAAM,IAAI,MAAM,yEACM,EAE1B,OAAO0iB,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CO,SAASs3C,IAAS7pR,EAAQsyO,EAAOC,EAAO,CAE3C,GADAU,GAAcjzO,CAAM,EAChBsyO,GAAS,MAAQA,EAAM,SAAW,EAClC,MAAM,IAAI,MAAM,gDAAgD,EAEpE,MAAM+hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,GAAKA,EAAc,SAAW,EACvD,MAAM,IAAI,MAAM,sEACyB,EAE7C,GAAIA,EAAc,SAAW,GAAK/hB,GAAS,KACvC,MAAM,IAAI,MAAM,yEACM,EAE1B,OAAO0iB,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCzDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CO,SAASu3C,IAAS9pR,EAAQsyO,EAAOC,EAAO,CAE3C,GADAU,GAAcjzO,CAAM,EAChBsyO,GAAS,MAAQA,EAAM,SAAW,EAClC,MAAM,IAAI,MAAM,+CAA+C,EAEnE,MAAM+hB,EAAgBd,GAAWvzP,EAAQuyO,CAAK,EAC9C,GAAI8hB,EAAc,SAAW,GAAKA,EAAc,SAAW,EACvD,MAAM,IAAI,MAAM,wEACK,EAEzB,GAAIA,EAAc,SAAW,GAAK/hB,GAAS,KACvC,MAAM,IAAI,MAAM,yEACM,EAE1B,OAAAA,EAAQA,GACJ+hB,EACGW,GAAWh1P,EAAQsyO,EAAO+hB,EAAe9hB,CAAK,CACzD,CCpDO,SAASw3C,IAAoBz3C,EAAOqhB,EAASv6D,EAAS,CACzD,MAAM4wF,EAAYr2B,EAAQ,KAAO,EAAKA,EAAQ,MAAMA,EAAQ,KAAO,CAAC,EAAI,EAClEs2B,EAAYt2B,EAAQ,KAAO,EAAKA,EAAQ,KAAO,EAAI,EACnDu2B,EAAa,6FACyB9wF,EAAQ,KAAK,oBACjCu6D,EAAQ,KAAK,YAAYrhB,CAAK,eACnC03C,CAAQ,mBAAmBC,CAAQ,IACtD,GAAI7wF,EAAQ,KAAO6wF,EACf,MAAM,IAAI,MAAMC,EAAa,kBAAkBD,CAAQ,IAAI,EAE/D,GAAI33C,EAAM,OAAS03C,GAAY5wF,EAAQ,KAAO6wF,GAC1C,MAAM,IAAI,MAAMC,EACZ,0BAA0BF,GAAY5wF,EAAQ,KAAO6wF,EAAS,EAAE,EAExE,GAAI7wF,EAAQ,OAAS6wF,EAAW33C,EAAM,OAAS03C,EAC3C,MAAM,IAAI,MAAME,EAAa,mBAAmBD,EAAW33C,EAAM,OAAS03C,CAAQ,EAAE,EAExF,QAAS51T,EAAI,EAAGA,EAAI61T,EAAU,EAAE71T,EAC5B,GAAIglO,EAAQ,MAAMhlO,CAAC,IAAMu/R,EAAQ,MAAMv/R,CAAC,EACpC,MAAM,IAAI,MAAM81T,EACZ,kBAAkB91T,CAAC,MAAMglO,EAAQ,MAAMhlO,CAAC,CAAC,sBAAsBA,CAAC,MAAMu/R,EAAQ,MAAMv/R,CAAC,CAAC,IAAI,EAGtG,QAASA,EAAI,EAAGA,EAAIglO,EAAQ,KAAO6wF,EAAU,EAAE71T,EAC3C,GAAIglO,EAAQ,MAAMhlO,EAAI61T,CAAQ,IAAM33C,EAAMl+Q,EAAI41T,CAAQ,EAClD,MAAM,IAAI,MAAME,EACZ,kBAAkB91T,EAAI61T,CAAQ,MAAM7wF,EAAQ,MAAMhlO,EAAI61T,CAAQ,CAAC,cAAc71T,EAAI61T,CAAQ,MAAM33C,EAAMl+Q,EAAI61T,CAAQ,CAAC,GAAG,CAGrI,CAQO,SAASE,GAAc/wF,EAASu6D,EAASrhB,EAAO,CACnD,GAAIqhB,EAAQ,KAAO,EACf,MAAM,IAAI,MAAM,+EACSA,EAAQ,IAAI,GAAG,EAE5C,GAAIv6D,EAAQ,KAAO,EACf,MAAM,IAAI,MAAM,+EACSA,EAAQ,IAAI,GAAG,EAE5C,GAAIu6D,EAAQ,QAAU,QAClB,MAAM,IAAI,MAAM,0DAA0DA,EAAQ,KAAK,EAAE,EAE7F,GAAIrhB,EAAM,OAAS,EACf,MAAM,IAAI,MAAM,6DAA6DA,CAAK,EAAE,EAExF,GAAIA,EAAM,SAAW,EAAG,CACpB,GAAIqhB,EAAQ,OAAS,EACjB,MAAM,IAAI,MAAM,sDAAsDA,EAAQ,KAAK,EAAE,EAEzF,GAAIv6D,EAAQ,OAAS,EACjB,MAAM,IAAI,MAAM,sDAAsDA,EAAQ,KAAK,EAAE,CAEjG,CACI2wF,IAAoBz3C,EAAOqhB,EAASv6D,CAAO,CAC/C,CAUO,SAASgxF,GAAgBhxF,EAASu6D,EAASrhB,EAAO,CAErD,MAAM+3C,EAAc12B,EAAQ,MAAM,OAC5B22B,EAAaD,EAAc,EAAK12B,EAAQ,MAAM02B,EAAc,CAAC,EAAI,EAIjEE,EAAUj4C,EAAM,OACtB,IAAI81B,EAAY,EAChB,QAASnyS,EAAIq0T,EAAWr0T,EAAIs0T,EAAS,EAAEt0T,EACnCmyS,GAAa91B,EAAMr8Q,CAAC,EAExB,MAAMu0T,EAAgBF,EAAY,EAAK,EAAIA,EACrCG,EAAav3C,GAAcygB,EAAQ,KAAK,EAAI62B,EAC5Cz1C,EAAU,CAAC,GAAGD,GAAexC,EAAM,MAAM,EAAGg4C,CAAS,CAAC,EAAG,CAAC,EAC1DtE,EAAa9yC,GAAcZ,CAAK,EACtC,MAAO,CAAE,UAAAg4C,EAAW,WAAAG,EAAY,UAAAriB,EAAW,QAAArzB,EAAS,WAAAixC,CAAY,CACpE,CC/FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoDA,SAAS0E,IAAqBv5B,EAAQwC,EAASv6D,EAAS,CACpD,MAAMuxF,EAAUz2B,EAAgB/C,EAAQ,SAAU,qBAAqB,EACjE8jB,EAAW/gB,EAAgBP,EAAS,UAAW,sBAAuB,OAAO,EAC7Ei3B,EAAW12B,EAAgB96D,EAAS,UAAW,qBAAqB,EAE1E,GADAyxF,GAA8BD,EAAU3V,EAAU0V,EAAQ,KAAK,EAC3DA,EAAQ,QAAUC,EAAS,MAC3B,MAAM,IAAI,MAAM,iEAAiED,EAAQ,KAAK,QAAQC,EAAS,KAAK,GAAG,EAE3H,MAAM7hC,EAAS,CACX,OAAQ4hC,EACR,QAAS1V,EACT,QAAS2V,CACZ,EACKzpI,EAAQ,CAAE,EAEhB,OAAOyuG,EAAO,UAAU1Q,GAAqB6J,EAAQ5nG,CAAK,CAC9D,CACO,MAAM2pI,IAAsB3zT,EAAG,CAAE,qBAAAuzT,IAAsB,ECrE9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASK,IAAM93T,EAAGqB,EAAI,EAAG02T,EAAS,GAAM,CACpC,MAAM/rB,EAAK/K,EAAgBjhS,EAAG,IAAK,MAAM,EACzC,GAAIgsS,EAAG,OAAS,EACZ,MAAM,IAAI,MAAM,oDAAoD,EAExE,MAAMgsB,EAAUhsB,EAAG,MAAMA,EAAG,MAAM,OAAS,CAAC,EAC5C,GAAI3qS,EAAI,EACJ,MAAM,IAAI,MAAM,6CAA6CA,CAAC,EAAE,EAEpE,GAAIA,EAAI22T,EACJ,MAAM,IAAI,MAAM,uDAAuDA,CAAO,aAC/D32T,CAAC,EAAE,EAEtB,MAAMy0R,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,EAAA7sL,EAAG,OAAA02T,CAAQ,EACrB,CAAChrR,EAAQ2zP,CAAO,EAAI/D,EAAO,UAAU5O,GAAM+H,EAAQ5nG,CAAK,EAC9D,MAAO,CAAE,OAAAnhJ,EAAQ,QAAA2zP,CAAS,CAC9B,CACO,MAAMu3B,IAAuB/zT,EAAG,CAAE,MAAA4zT,IAAO,EC9DhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwCA,SAASI,IAAiB74C,EAAOy2B,EAAO,EAAGsa,EAAS,EAAG9wC,EAAOwV,EAAM,CAEhE,GADAxS,GAAmCjD,CAAK,EACpCC,GAAS,MAAQA,IAAU,OAC3B,MAAM,IAAI,MAAM,mCAAmC,EAEvD,MAAM+wC,EAAY,IAAIf,GAAYxZ,EAAMsa,EAAQ9wC,EAAO,GAAsBwV,CAAI,EAC3EznR,EAAMmkB,GAAO6tP,EAAOC,CAAK,EAC/B,QAASt8Q,EAAI,EAAGA,EAAIqK,EAAI,OAAO,OAAQrK,IACnCqK,EAAI,OAAOrK,CAAC,EAAIqtT,EAAU,UAAW,EAEzC,OAAOhjT,EAAI,SAAU,CACzB,CACO,MAAM8qT,IAAkCj0T,EAAG,CAAE,iBAAAg0T,IAAkB,ECpDtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsEA,SAASE,IAAQp4T,EAAGg2L,EAAO,EAAG,CAC1B,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAU,mBAAmB,EAChE6nI,EAAOmkK,EAAG,KAAO,EAAG,IAAM,sCAAsC,EAChE,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,KAAA8H,CAAM,EAChB,CAACjpJ,EAAQ2zP,CAAO,EAAI/D,EAAO,UAAUzO,GAAQ4H,EAAQ5nG,CAAK,EAChE,MAAO,CAAE,OAAAnhJ,EAAQ,QAAA2zP,CAAS,CAC9B,CACO,MAAMn5D,IAAyBrjO,EAAG,CAAE,QAAAk0T,IAAS,EC9EpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASC,IAAoBr4T,EAAGs4T,EAAYC,EAAa,CACrD,MAAMvsB,EAAK/K,EAAgBjhS,EAAG,IAAK,oBAAoB,EACjDw4T,EAAcv3B,EAAgBq3B,EAAY,aAAc,qBAAsB,OAAO,EAC3FzwL,EAAOw4I,GAAMk4C,CAAW,EAAG,IAAM,kCAAkC,EACnE,MAAMziC,EAAS,CAAE,EAAGkW,EAAI,WAAYwsB,CAAa,EAC3CtqI,EAAQ,CAAE,YAAAqqI,CAAa,EAC7B,OAAO57B,EAAO,UAAUvO,GAAoB0H,EAAQ5nG,CAAK,CAC7D,CACO,MAAMuqI,IAAqCv0T,EAAG,CAAE,oBAAAm0T,IAAqB,EC/C5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmCA,SAASK,IAAS14T,EAAGg2L,EAAO,EAAG,CAC3B,MAAMg2G,EAAK/K,EAAgBjhS,EAAG,IAAK,UAAW,mBAAmB,EACjEi6R,EAAYjkG,GAAQ,CAACg2G,EAAG,MAAM,QAAUh2G,EAAOg2G,EAAG,MAAM,OAAQ,IAAM,UAAUh2G,CAAI,gBAAgBg2G,EAAG,MAAM,MAAM,KAAKA,EAAG,MAAM,MAAM,GAAG,EAC1I,MAAMlW,EAAS,CAAE,MAAOkW,CAAI,EACtB99G,EAAQ,CAAE,KAAA8H,CAAM,EACtB,OAAO2mG,EAAO,UAAUxO,GAAQ2H,EAAQ5nG,CAAK,CACjD,CACO,MAAMyqI,GAA0Bz0T,EAAG,CAAE,SAAAw0T,IAAU,EC1CtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDO,SAASzgI,IAAW6tH,EAAgB/4Q,EAAQ,CAC/C,OAAOs5Q,GAAaP,EAAgB/4Q,EAAQ,OAAO,CACvD,CCrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCO,SAASi3Q,IAASnpB,EAAcH,EAAY,GAAMlwR,EAAM80Q,EAAO,CAClE,OAAOqd,EAAO,aAAa9B,EAAcH,EAAWlwR,EAAM80Q,CAAK,CACnE,CCnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBO,SAASs5C,GAAUC,EAAWC,EAAU,CAC3C,MAAMp4B,EAAU,CAAE,EAClB,QAAS19R,EAAI,EAAGA,EAAI81T,EAAS,OAAQ91T,IAC7B81T,EAAS91T,CAAC,GACV09R,EAAQ,KAAK19R,CAAC,EAGtB,MAAM+1T,EAAWvnS,GAAOqnS,EAAW,OAAO,EACpC7wR,EAAMxW,GAAO,CAACkvQ,EAAQ,OAAQm4B,EAAU,MAAM,EAAG,OAAO,EAC9D,QAAS71T,EAAI,EAAGA,EAAI09R,EAAQ,OAAQ19R,IAAK,CACrC,MAAMm3R,EAAM4+B,EAAS,WAAWr4B,EAAQ19R,CAAC,CAAC,EACpCq8C,EAASr8C,EAAI61T,EAAU,OAC7B7wR,EAAI,OAAO,IAAImyP,EAAK96O,CAAM,CAClC,CACI,OAAOrX,EAAI,SAAU,CACzB,CCjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,eAAegxR,IAAYphG,EAAW,CAClC,MAAM8kF,EAAazb,EAAgBrpE,EAAW,YAAa,aAAc,MAAM,EACzEypD,EAAO,MAAMq7B,EAAW,KAAM,EAC9BrvS,EAAMurT,GAAUlc,EAAW,MAAOr7B,CAAI,EAC5C,OAAIzpD,IAAc8kF,GACdA,EAAW,QAAS,EAEjBrvS,CACX,CACO,MAAM4rT,GAAaD,IC/C1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwCA,eAAeE,IAAkBh7B,EAAQt3L,EAAMovF,EAAM,CACjD,MAAM0hI,EAAUz2B,EAAgB/C,EAAQ,SAAU,UAAU,EACtDi7B,EAAQl4B,EAAgBr6L,EAAM,OAAQ,WAAY,MAAM,EACxDwyN,EAAWpjI,GAAe,EAC1BqjI,EAAUF,EAAM,KAChBG,EAAc5B,EAAQ,MAC5Bz9B,EAAYo/B,EAAU,EAAG,IAAM,uBAAuB,EACtDv3B,GAAuBw3B,EAAY,MAAMF,EAAUA,EAAWC,CAAO,EAAGF,EAAM,MAAO,mEAAmE,EACxJ,IAAII,EAAc,EAClB,QAASv2T,EAAIo2T,EAAUp2T,EAAIo2T,EAAWC,EAASr2T,IAC3Cu2T,GAAeD,EAAYt2T,CAAC,EAEhC,MAAMw2T,EAAoBF,EAAY,MAAM,EAAGF,CAAQ,EAClD,OAAO,CAACG,CAAW,EAAGD,EAAY,MAAMF,EAAWC,CAAO,CAAC,EAC1DI,EAAiBxmB,GAAQykB,EAAS8B,CAAiB,EACnDE,EAAezmB,GAAQkmB,EAAO,CAAC,EAAE,CAAC,EAClCQ,EAAoB,MAAMV,GAAWS,CAAY,EACjDh5B,EAAUk1B,GAAQ+D,EAAmB,CAAC,CAAC,CAAC,EACxCtsT,EAAM40S,GAAOwX,EAAgB/4B,EAAS04B,CAAQ,EAEpD,OAAIl7B,IAAWw5B,GACXA,EAAQ,QAAS,EAEjB9wN,IAASuyN,GACTA,EAAM,QAAS,EAEnBz4B,EAAQ,QAAS,EACjB+4B,EAAe,QAAS,EACxBC,EAAa,QAAS,EACtBC,EAAkB,QAAS,EACpBtsT,CACX,CACO,MAAMusT,IAAmBV,ICxEhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8CA,SAASW,IAAW75T,EAAG85T,EAAMC,EAAW,CACpC,MAAM/tB,EAAK/K,EAAgBjhS,EAAG,IAAK,WAAW,EAU9C,GATI85T,GAAQ,OACRA,EAAO9tB,EAAG,MAAM,IAAI,CAACjpS,EAAGC,IAAMA,CAAC,EAAE,QAAS,GAE9Ci3R,EAAY+R,EAAG,OAAS8tB,EAAK,OAAQ,IAAM,qCAAqC9tB,EAAG,IAAI,8BACtD8tB,CAAI,GAAG,EACxCA,EAAK,QAAQ9jI,GAAQ,CACjBikG,EAAYjkG,GAAQ,GAAKA,EAAOg2G,EAAG,KAAM,IAAM,+CAA+CA,EAAG,KAAO,CAAC,YACzF8tB,CAAI,EAAE,CAC9B,CAAK,EACG9tB,EAAG,MAAQ,EACX,OAAOA,EAAG,MAAO,EAErB,MAAMlW,EAAS,CAAE,EAAGkW,CAAI,EAClB99G,EAAQ,CAAE,KAAA4rI,CAAM,EACtB,OAAI9tB,EAAG,QAAU,YACNnU,GAAK,IAAM,CACd,IAAI+J,EAAQF,GAAKsK,CAAE,EACfnK,EAAQF,GAAKqK,CAAE,EACnB,OAAApK,EAAQjF,EAAO,UAAU1O,GAAW,CAAE,EAAG2T,CAAO,EAAE1zG,CAAK,EACvD2zG,EAAQlF,EAAO,UAAU1O,GAAW,CAAE,EAAG4T,CAAO,EAAE3zG,CAAK,EACnD6rI,IACAl4B,EAAQwiB,GAAIxiB,CAAK,GAEd/lG,GAAQ8lG,EAAOC,CAAK,CACvC,CAAS,EAEElF,EAAO,UAAU1O,GAAW6H,EAAQ5nG,CAAK,CACpD,CACO,MAAM8rI,GAA4B91T,EAAG,CAAE,WAAA21T,IAAY,EC5E1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsDA,SAASI,IAAen6T,EAAGE,EAAGk6T,EAAOv2T,EAAMw2T,EAAa,GAAM,CAC1D,MAAMC,EAAKn5B,EAAgBnhS,EAAG,IAAK,eAAe,EAC5CksS,EAAK/K,EAAgBjhS,EAAG,IAAK,eAAe,EAC5Cq6T,EAASp5B,EAAgBi5B,EAAO,QAAS,eAAe,EAC9Dz+B,IAAiB2+B,EAAIpuB,CAAE,EACvB/R,EAAY/B,GAAiBkiC,EAAG,MAAOpuB,EAAG,KAAK,EAAG,IAAM,2BAA2B,EACnF,MAAMsuB,EAAMta,GAAO,CAAC,EACdua,EAAgBt6D,GAAIq6D,EAAKD,CAAM,EACrC,IAAIh2I,EAASkwG,GAAIt0B,GAAI+rC,EAAIouB,CAAE,EAAGG,CAAa,EAC3C,GAAIJ,EAAY,CACZlgC,EAAYt2R,GAAQ,KAAM,IAAM,gDAAgD,EAChF,MAAM62T,EAAQv5B,EAAgBt9R,EAAM,OAAQ,eAAe,EAC3D0gL,EAASstG,GAAIttG,EAAQ47E,GAAIq6D,EAAKva,GAAIsa,EAAQG,CAAK,CAAC,CAAC,CACzD,CACI,OAAOxnS,GAAIonS,EAAI/1I,CAAM,CACzB,CACO,MAAMo2I,IAAgCv2T,EAAG,CAAE,eAAA+1T,IAAgB,ECtElE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASS,IAAWh6B,EAASv6D,EAASk5C,EAAO,CACzCiD,GAAmCjD,CAAK,EACxC,MAAM2iC,EAAW/gB,EAAgBP,EAAS,UAAW,YAAa,OAAO,EACnEi3B,EAAW12B,EAAgB96D,EAAS,UAAW,WAAW,EAChEyxF,GAA8BD,EAAU3V,EAAU3iC,CAAK,EACvD,MAAMyW,EAAS,CAAE,QAASksB,EAAU,QAAS2V,CAAU,EACjDzpI,EAAQ,CAAE,MAAAmxF,CAAO,EAEvB,OAAOsd,EAAO,UAAU3Q,GAAW8J,EAAQ5nG,CAAK,CACpD,CACO,MAAMysI,IAA4Bz2T,EAAG,CAAE,WAAAw2T,IAAY,ECtCnD,SAASxD,IAAc0D,EAAeC,EAAcnhB,EAAaxgE,EAAe,CACnF,GAAI0hF,EAAc,QAAU,QACxB,MAAM,IAAI,MAAM,8EACUA,EAAc,KAAK,GAAG,EAEpD,GAAIA,EAAc,KAAO,EACrB,MAAM,IAAI,MAAM,sEACMA,EAAc,KAAK,GAAG,EAEhD,MAAME,EAAWF,EAAc,KAAO,EAAIA,EAAc,MAAM,CAAC,EAAI,EAC7DG,EAAUH,EAAc,KAAO,EAAIA,EAAc,MAAM,CAAC,EAAI,EAClE,GAAIlhB,EAAY,SAAWqhB,EACvB,MAAM,IAAI,MAAM,kDACRrhB,EAAY,MAAM,gBAAgBqhB,CAAO,GAAG,EAExD,MAAMr4H,EAAYm4H,EAAa,KAC/B,GAAI,EAAEA,EAAa,OAAS,GACxBA,EAAa,OAAS,GAAKn4H,IAAco4H,GACzC,MAAM,IAAI,MAAM,oCACTD,EAAa,KAAK,sBAAsBC,CAAQ,GAAG,EAE9D,GAAID,EAAa,QAAU3hF,EAAc,MACrC,MAAM,IAAI,MAAM,mDAAmD,CAE3E,CCrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4DA,SAAS8hF,IAAeJ,EAAeC,EAAcnhB,EAAavsR,EAAe,EAAG,CAChFm1P,GAAmCo3B,CAAW,EAC9C,MAAMuhB,EAAiBh6B,EAAgB25B,EAAe,gBAAiB,gBAAiB,OAAO,EACzFM,EAAgBj6B,EAAgB45B,EAAc,eAAgB,gBAAiB,mBAAmB,EAClG/N,EAAgB7rB,EAAgB9zQ,EAAc,eAAgB,gBAAiB+tS,EAAc,KAAK,EACxGC,IAA8BF,EAAgBC,EAAexhB,EAAaoT,CAAa,EACvF,MAAMh3B,EAAS,CACX,cAAemlC,EACf,aAAcC,EACd,aAAcpO,CACjB,EACK5+H,EAAQ,CAAE,YAAAwrH,CAAa,EAC7B,OAAO/c,EAAO,UAAUxP,GAAe2I,EAAQ5nG,CAAK,CACxD,CACO,MAAMktI,IAAgCl3T,EAAG,CAAE,eAAA82T,IAAgB,EC1ElE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0DA,SAASK,IAAUr7T,EAAG0gS,EAAS,CAC3B,MAAMshB,EAAW/gB,EAAgBP,EAAS,UAAW,WAAY,OAAO,EAElE5K,EAAS,CAAE,OADNmL,EAAgBjhS,EAAG,IAAK,WAAY,mBAAmB,EACrC,QAASgiT,CAAU,EAChD,OAAOrlB,EAAO,UAAU1U,GAAU6N,CAAM,CAC5C,CACO,MAAMwlC,IAA2Bp3T,EAAG,CAAE,UAAAm3T,IAAW,EChExD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBO,SAASE,IAAcv7T,EAAGw7T,EAAY,CACzC,GAAIA,GAAc,KACd,OAAOx7T,EAAE,MAAM,MAAO,EAE1B,GAAIk4R,GAAiBl4R,EAAE,MAAOw7T,CAAU,EACpC,OAAOA,EAEX,GAAIx7T,EAAE,MAAM,SAAWw7T,EAAW,OAAQ,CACtC,MAAMC,EAAe,CAAE,EACvB,QAASz4T,EAAI,EAAGA,EAAIhD,EAAE,MAAM,OAAQgD,IAC5Bw4T,EAAWx4T,CAAC,GAAK,MAAQhD,EAAE,MAAMgD,CAAC,GAAK,KACvCy4T,EAAa,KAAKz7T,EAAE,MAAMgD,CAAC,CAAC,EAG5By4T,EAAa,KAAKD,EAAWx4T,CAAC,CAAC,EAGvC,OAAOy4T,CACf,CACI,OAAOD,CACX,CC7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgDA,SAASE,IAAS17T,EAAG46C,EAAM4gR,EAAY1mC,EAAM,CACzC,MAAMkX,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAS,EAI5C,GAHAi6R,EAAY+R,EAAG,QAAU,UAAW,IAAM,gFACjBA,EAAG,KAAK,kBAAkB,EACnD/R,EAAYr/O,GAAQ,GAAKA,EAAO,EAAG,IAAM,qDAAqDA,CAAI,GAAG,EACjGA,IAAS,EACT,OAAO56C,aAAaw6R,GAASwR,EAAG,MAAO,EAAGA,EAE9C,MAAM2vB,EAAcJ,IAAcvvB,EAAIwvB,CAAU,EAC1CI,EAAW,EAAIhhR,EACf29K,EAAao5D,GAAIkwB,GAAM7uR,GAAI49R,GAAc+K,EAAa,EAAG,EAAG,UAAW7mC,CAAI,EAAG8mC,CAAQ,CAAC,EAAGA,CAAQ,EACxG,OAAOrnC,GAAIyX,EAAIzzE,CAAU,CAC7B,CACO,MAAMsjG,IAA0B33T,EAAG,CAAE,SAAAw3T,IAAU,EC7DtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBO,SAASI,GAAoBv4T,EAAO,CAEvC,OAAO,KAAK,MAAM,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,IAAIA,CAAK,EAAI,KAAK,IAAI,CAAG,CAAC,CAAC,CAAC,CAC7E,CACO,SAASw4T,GAAaC,EAAc57T,EAAGK,EAAG,CAC7C,MAAMw7T,EAAO,EAAID,EAAe,EAC1BjsI,EAAY,IAAI,aAAaisI,CAAY,EAC/C,QAASh5T,EAAI,EAAGA,EAAIg5T,EAAc,EAAEh5T,EAAG,CACnC,MAAMk5T,EAAU,EAAM,KAAK,GAAKl5T,GAAMg5T,EAAeC,EAAO,GAC5DlsI,EAAU/sL,CAAC,EAAI5C,EAAIK,EAAI,KAAK,IAAIy7T,CAAM,CAC9C,CACI,OAAO1F,GAASzmI,EAAW,SAAS,CACxC,CC7BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoCA,eAAeosI,IAAarxL,EAAa+iC,EAASxsK,EAAI,EAAG,CACrD,MAAM+6T,EAAen7B,EAAgBn2J,EAAa,cAAe,QAAQ,EACnEuxL,EAAWp7B,EAAgBpzH,EAAS,UAAW,QAAQ,EAC7DhmC,EAAOu0L,EAAa,KAAO,EAAG,IAAM,uEACrBA,EAAa,IAAI,EAAE,EAClCv0L,EAAOu0L,EAAa,KAAO,IAAMC,EAAS,KAAM,IAAM,mFAE/CD,EAAa,IAAI,qBAAqBC,EAAS,IAAI,EAAE,EAC5D18C,GAAkBy8C,EAAa,MAAM,MAAM,EAAGA,EAAa,MAAM,OAAS,CAAC,EAAGC,EAAS,MAAO,yFAC9D,EAChC,MAAMrE,EAAUoE,EAAa,MAAMA,EAAa,MAAM,OAAS,CAAC,EAChEv0L,EAAOxmI,EAAI,GAAKA,GAAK22T,EAAS,IAAM,4EAClBA,CAAO,cAAc32T,CAAC,EAAE,EAC1C,MAAMi7T,EAAkB,MAAMF,EAAa,KAAM,EAC3CG,EAAc,MAAMF,EAAS,KAAM,EAGnC,CAACtuT,EAAOnC,CAAI,EAAI,CAAC0wT,EAAgB,OAAStE,EAASA,CAAO,EAC1DwE,EAAYt7C,GAAuB,OAAQnzQ,CAAK,EACtD,QAAStN,EAAI,EAAGA,EAAIsN,EAAOtN,IAAK,CAC5B,MAAM4+C,EAAS5+C,EAAImL,EACby1Q,EAAOi7C,EAAgB,SAASj9Q,EAAQA,EAASzzC,CAAI,EACrD6wT,EAAY,CAAE,EACpB,QAASz5T,EAAI,EAAGA,EAAIq+Q,EAAK,OAAQr+Q,IAC7By5T,EAAU,KAAK,CAAE,MAAOp7C,EAAKr+Q,CAAC,EAAG,MAAOA,EAAG,EAE/Cy5T,EAAU,KAAK,CAACr8T,EAAGK,IAAMA,EAAE,MAAQL,EAAE,KAAK,EAC1Co8T,EAAU/7T,CAAC,EAAI,EACf,QAASuC,EAAI,EAAGA,EAAI3B,EAAG2B,IACnB,GAAIy5T,EAAUz5T,CAAC,EAAE,QAAUu5T,EAAY97T,CAAC,EAAG,CACvC+7T,EAAU/7T,CAAC,EAAI,EACf,KAChB,CAEA,CACI,OAAIqqI,IAAgBsxL,GAChBA,EAAa,QAAS,EAEtBvuJ,IAAYwuJ,GACZA,EAAS,QAAS,EAGfn+B,GAAOs+B,EAAWH,EAAS,MAAO,MAAM,CACnD,CACO,MAAMK,IAAcP,IChF3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0CA,SAASQ,IAAsB38T,EAAG68R,EAAI4R,EAAa3sB,EAASmX,EAAKyV,EAAa,OAAQoE,EAAiB,CACnG,IAAIM,EAAMpzS,EACNA,EAAE,OAAS,IACXozS,EAAMH,GAAQjzS,EAAG,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,CAAC,CAAC,GAE5D,IAAIu5S,EAAO1c,EACP0c,EAAK,OAAS,IACdA,EAAOtG,GAAQpW,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEjE5C,EAAYmZ,EAAI,OAAS,EAAG,IAAM,iEAC3BA,EAAI,KAAK,GAAG,EACnBnZ,EAAYsf,EAAK,OAAS,EAAG,IAAM,8DAC5BA,EAAK,KAAK,GAAG,EACpBtf,EAAYwU,EAAY,SAAW,EAAG,IAAM,mEACrCA,CAAW,GAAG,EACrB,MAAMsC,EAAUrC,IAAe,OAAS0E,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,CAAC,EAC5DjC,EAAWzC,IAAe,OAAS6K,EAAK,MAAM,CAAC,EAAIA,EAAK,MAAM,CAAC,EACrEtf,EAAY8W,IAAYtC,EAAY,CAAC,EAAG,IAAM,4CAA4CsC,CAAO,uCAC7DtC,EAAY,CAAC,CAAC,GAAG,EACrDxU,EAAYkX,IAAa1C,EAAY,CAAC,EAAG,IAAM,0CAA0C0C,CAAQ,yCAC3D1C,EAAY,CAAC,CAAC,IAAI,EACxD6E,GAAoC,kBAAmBra,EAAK6Z,CAAe,EAC3E,MAAMhd,EAAS,CAAE,EAAGsd,EAAK,GAAImG,CAAM,EAC7BrrH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,WAAAyV,EAAY,gBAAAoE,EAAiB,YAAArE,CAAa,EAExE,OAAO9R,EAAO,UAAU9W,GAAsBiQ,EAAQ5nG,CAAK,CAC/D,CACO,MAAM0uI,IAAuC14T,EAAG,CAAE,sBAAAy4T,IAAuB,ECrEhF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BO,SAASE,GAAqBhgC,EAAI58R,EAAG68T,EAAY,CACpD,GAAIA,GAAc,MAAQA,IAAe,SACrC,OAAOjgC,EAEX,GAAIigC,IAAe,OACf,OAAOvoC,GAAIsI,EAAIl5R,GAAK1D,CAAC,CAAC,EAE1B,MAAM,IAAI,MAAM,gDAAgD68T,CAAU,GAAG,CACjF,CAEO,SAASC,GAAqBzZ,EAAM0Z,EAAc,CACrD,IAAI3vT,EAAM2vT,EACV,MAAMC,EAAaC,IAAgC5Z,EAAK,MAAO0Z,EAAa,KAAK,EACjF,OAAIC,EAAW,OAAS,IACpB5vT,EAAMizS,GAAIjzS,EAAK4vT,CAAU,GAEtBhqB,GAAQ5lS,EAAKi2S,EAAK,KAAK,CAClC,CACO,SAAS6Z,GAAgBn9T,EAAG88T,EAAYM,EAAwBC,EAAgB,CACnF,GAAIP,IAAe,SACf,OAAO98T,EAEN,GAAI88T,IAAe,OACpB,OAAO3L,GAAKnxT,CAAC,EAEZ,GAAI88T,IAAe,MACpB,OAAO1e,GAAIp+S,CAAC,EAEX,GAAI88T,IAAe,QACpB,OAAOzL,GAAMrxT,CAAC,EAEb,GAAI88T,IAAe,QACpB,OAAOpR,GAAM1rT,EAAGo9T,CAAsB,EAErC,GAAIN,IAAe,YACpB,OAAOha,GAAU9iT,EAAGq9T,CAAc,EAEjC,GAAIP,IAAe,UACpB,OAAO3oB,GAAQn0S,CAAC,EAEpB,MAAM,IAAI,MAAM,4BAA4B88T,CAAU,GAAG,CAC7D,CAEO,MAAMQ,GAAa,CAACC,EAAeT,IAE/B,EADcS,EAAgB,IACbT,IAAe,SCzE3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwFA,SAASU,IAAa,CAAE,EAAAx9T,EAAG,OAAA0zB,EAAQ,QAAAouP,EAAS,IAAAmX,EAAK,WAAAyV,EAAa,OAAQ,UAAAC,EAAY,CAAC,EAAG,CAAC,EAAG,gBAAAmE,EAAiB,KAAAwQ,EAAM,WAAAwZ,EAAa,SAAU,uBAAAM,EAAwB,eAAAC,GAAkB,CAE9K,GADAP,EAAaA,GAAc,SACvBQ,GAAW3gC,EAAO,MAAM,cAAemgC,CAAU,IAAM,GAAO,CAG9D7iC,EAAYyU,IAAe,OAAQ,IAAM,4CAA4CA,CAAU,6GAEnD,EAC5C,IAAI7qS,EAAS45T,GAAcz9T,EAAG0zB,EAAQouP,EAASmX,EAAKyV,EAAYC,EAAWmE,CAAe,EAC1F,OAAIwQ,GAAQ,OACRz/S,EAASmvB,GAAInvB,EAAQy/S,CAAI,GAEtB6Z,GAAgBt5T,EAAQi5T,EAAYM,EAAwBC,CAAc,CACzF,CACI,MAAMrxB,EAAK/K,EAAgBjhS,EAAG,IAAK,SAAU,SAAS,EAChD44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,SAAU,SAAS,EACrE,IAAI0/Q,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,6DAC3BA,EAAI,IAAI,GAAG,EAClBnZ,EAAY2e,EAAQ,OAAS,EAAG,IAAM,8DAC/BA,EAAQ,IAAI,GAAG,EACtBtF,GAAoC,eAAgBra,EAAK6Z,CAAe,EACxE,MAAMlE,EAAgBF,IAAe,OAAS0E,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,CAAC,EACxEnZ,EAAY2e,EAAQ,MAAM,CAAC,IAAMhK,EAAe,IAAM,oCAAoCA,CAAa,uCACzEgK,EAAQ,MAAM,CAAC,CAAC,GAAG,EACjD3e,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,uEAC7D7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EACzD,MAAM0b,EAAWqT,GAA4BtqB,EAAI,MAAOwF,EAAQ,MAAO92B,EAAS6sB,EAAW1V,EAAK6Z,CAAe,EAC/G,IAAI6qB,EACAra,GAAQ,OACRqa,EAAQ18B,EAAgBqiB,EAAM,OAAQ,cAAc,EACpD,CAACqa,CAAK,EAAIniC,GAAemiC,EAAO3xB,CAAE,EAO9B0C,IAAe,OACfkvB,GAA0CvT,EAAS,SAAUsT,EAAM,KAAK,GAGxE1jC,EAAY0jC,EAAM,MAAM,QAAU,EAAG,IAAM,2GAE/BA,EAAM,MAAM,MAAM,GAAG,EACjC1jC,EAAY0jC,EAAM,MAAM,SAAW,GAAKA,EAAM,MAAM,CAAC,IAAMtT,EAAS,aAChEsT,EAAM,MAAM,CAAC,IAAM,EAAG,IAAM,sCAAsCA,EAAM,KAAK,2DAEzEtT,EAAS,WAAW,GAAG,IAGvC,IAAIwT,EACJ,GAAIT,GAA0B,KAAM,CAGhC,MAAMU,EAAaV,EAAuB,MAI1C,GAHAnjC,EAAY6jC,EAAW,QAAU,GAAKA,EAAW,SAAW,EAAG,IAAM,2HAEzDA,EAAW,MAAM,GAAG,EAC5BA,EAAW,SAAW,EAItB7jC,EAAY6jC,EAAW,CAAC,IAAM,GAAKA,EAAW,CAAC,IAAMzT,EAAS,YAAa,IAAM,oDACzEyT,CAAU,2DACDzT,EAAS,WAAW,IAAI,UAEpCyT,EAAW,SAAW,EAG3B,GAAI,CACAF,GAA0CE,EAAYzT,EAAS,QAAQ,CACvF,MACsB,CACN,MAAM/N,EAAS,oDAAoDwhB,CAAU,4DAErEzT,EAAS,QAAQ,KACzB,MAAM,MAAM/N,CAAM,CAClC,CAEQuhB,EAA0B58B,EAAgBm8B,EAAwB,gBAAiB,cAAc,CACzG,CACI,MAAMxgC,EAAO,CAACC,EAAIE,IAAU,CACxB9C,EAAYyU,IAAe,OAAQ,IAAM,wDAAwDA,CAAU,wCAAwC,EACnJ,KAAM,CAACkK,EAASxF,EAAKnzS,EAAG09T,CAAK,EAAI5gC,EAC3BigC,EAAeH,GAAqBhgC,EAAI58R,EAAG68T,CAAU,EAC3D7iC,EAAY8jC,GAA4BpvB,CAAS,EAAG,IAAM,uHAEAA,CAAS,GAAG,EACtE,MAAMqvB,EAAOxkB,GAAoBpG,EAAI,MAAO4pB,EAAcpkB,EAAS92B,EAASmX,CAAG,EACzEglC,EAAYrB,IAAqBxpB,EAAK4pB,EAAcpkB,EAAQ,MAAO92B,EAASmX,CAAG,EAC/EilC,EAAM,CAACF,EAAMC,CAAS,EAC5B,GAAIN,GAAS,KAAM,CACf,MAAMQ,EAAUpB,GAAqBY,EAAOX,CAAY,EACxDkB,EAAI,KAAKC,CAAO,CAC5B,CACQ,OAAOD,CACV,EACKpoC,EAAS,CACX,EAAGsd,EACH,OAAQwF,EACR,KAAM+kB,EACN,uBAAwBE,CAC3B,EACK3vI,EAAQ,CACV,QAAA4zF,EACA,IAAAmX,EACA,WAAAyV,EACA,UAAAC,EACA,gBAAAmE,EACA,WAAAgqB,EACA,eAAAO,CACH,EAGD,OAAI/Z,GAAQ,KACSa,GAAW,CAAC/Q,EAAK1/Q,EAAQqsQ,IAAS,CAC/C,IAAI1yR,EAEJsvR,EAAO,UAAUjO,GAAaoH,EAAQ5nG,CAAK,EAC3C,OAAA6xG,EAAK,CAACrsQ,EAAQ0/Q,EAAK/lS,CAAG,CAAC,EACnBgmS,IAEAhmS,EAAM4lS,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,GAE1D,CAAE,MAAOA,EAAK,SAAUuvR,CAAM,CACjD,CAAS,EACewW,EAAKwF,CAAO,EAGHuL,GAAW,CAAC/Q,EAAK1/Q,EAAQ4vR,EAAMvjB,IAAS,CAC7D,IAAI1yR,EAAMsvR,EAAO,UAAUjO,GAAaoH,EAAQ5nG,CAAK,EACrD,OAAA6xG,EAAK,CAACrsQ,EAAQ0/Q,EAAK/lS,EAAKi2S,CAAI,CAAC,EACzBjQ,IAEAhmS,EAAM4lS,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,GAE1D,CAAE,MAAOA,EAAK,SAAUuvR,CAAM,CACjD,CAAS,EACuBwW,EAAKwF,EAAS+kB,CAAK,CAEnD,CACO,MAAM7kB,IAAyB50S,EAAG,CAAE,aAAAs5T,IAAc,EC3OzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBA,SAASY,IAAqCp+T,EAAG68R,EAAI4R,EAAa3sB,EAASmX,EAAK0V,EAAY,CAAC,EAAG,CAAC,EAAGmE,EAAiB,CACjH,IAAIM,EAAMpzS,EACNA,EAAE,OAAS,IACXozS,EAAMH,GAAQjzS,EAAG,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,EAAGA,EAAE,MAAM,CAAC,CAAC,CAAC,GAE5D,IAAIu5S,EAAO1c,EACP0c,EAAK,OAAS,IACdA,EAAOtG,GAAQpW,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEjE,MAAM/G,EAAS,CAAE,EAAGsd,EAAK,GAAImG,CAAM,EAC7BrrH,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,gBAAA6Z,EAAiB,UAAAnE,EAAW,YAAAF,CAAa,EAEvE,OAAO9R,EAAO,UAAUjW,GAAqCoP,EAAQ5nG,CAAK,CAC9E,CACO,MAAMmwI,IAAsCn6T,EAAG,CAAE,qCAAAk6T,IAAsC,EClC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBA,SAASE,IAAoC5mB,EAAQ7a,EAAInpQ,EAAQouP,EAASmX,EAAK0V,EAAY,CAAC,EAAG,CAAC,EAAGmE,EAAiB,CAChH,IAAIyG,EAAO1c,EACPwW,EAAe,GACfxW,EAAG,OAAS,IACZwW,EAAe,GACfkG,EAAOtG,GAAQpW,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEjE,MAAM/G,EAAS,CAAE,GAAIyjB,EAAM,OAAA7lR,CAAQ,EAC7Bw6J,EAAQ,CAAE,QAAA4zF,EAAS,IAAAmX,EAAK,gBAAA6Z,EAAiB,UAAAnE,EAAW,WAAY+I,CAAQ,EACxErqS,EAENsvR,EAAO,UAAUhW,GAAoCmP,EAAQ5nG,CAAK,EAClE,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMkxT,IAAqCr6T,EAAG,CAAE,oCAAAo6T,IAAqC,ECrC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkFA,SAASE,IAAsB,CAAE,EAAAx+T,EAAG,OAAA0zB,EAAQ,QAAAouP,EAAS,IAAAmX,EAAK,WAAAyV,EAAa,OAAQ,UAAAC,EAAY,CAAC,EAAG,CAAC,EAAG,gBAAAmE,EAAiB,KAAAwQ,EAAM,WAAAwZ,EAAa,SAAU,uBAAAM,EAAwB,eAAAC,GAAkB,CACvL,GAAIC,GAAW3gC,EAAO,MAAM,cAAemgC,CAAU,IAAM,GAAO,CAC9D,IAAIj5T,EAAS46T,GAAuBz+T,EAAG0zB,EAAQouP,EAASmX,EAAKyV,EAAYC,EAAWmE,CAAe,EACnG,OAAIwQ,GAAQ,OACRz/S,EAASmvB,GAAInvB,EAAQy/S,CAAI,GAEtB6Z,GAAgBt5T,EAAQi5T,EAAYM,EAAwBC,CAAc,CACzF,CACI,MAAMrxB,EAAK/K,EAAgBjhS,EAAG,IAAK,kBAAmB,SAAS,EACzD44S,EAAU3X,EAAgBvtQ,EAAQ,SAAU,kBAAmB,SAAS,EAC9E,IAAI0/Q,EAAMpH,EACNqH,EAAe,GACfrH,EAAG,OAAS,IACZqH,EAAe,GACfD,EAAMH,GAAQjH,EAAI,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,EAAGA,EAAG,MAAM,CAAC,CAAC,CAAC,GAEhE/R,EAAYmZ,EAAI,OAAS,EAAG,IAAM,sEACtBA,EAAI,IAAI,GAAG,EACvBnZ,EAAY2e,EAAQ,OAAS,EAAG,IAAM,uEAClBA,EAAQ,IAAI,GAAG,EACnC3e,EAAYmZ,EAAI,MAAM,CAAC,IAAMwF,EAAQ,MAAM,CAAC,EAAG,IAAM,6DAC7CxF,EAAI,MAAM,CAAC,CAAC,mDACNwF,EAAQ,MAAM,CAAC,CAAC,GAAG,EAC7BjK,GAAa,OACbA,EAAY,CAAC,EAAG,CAAC,GAErB1U,EAAYkZ,GAAyCrxB,EAAS6sB,CAAS,EAAG,IAAM,sFACvD7sB,CAAO,mBAAmB6sB,CAAS,GAAG,EAC/D2E,GAAoC,wBAAyBra,EAAK6Z,CAAe,EACjF,MAAMuX,EAAWqT,GAA4BtqB,EAAI,MAAOwF,EAAQ,MAAO92B,EAAS6sB,EAAW1V,EAAK6Z,EAAiB,EAAqB,EACtI,IAAI6qB,EACAra,GAAQ,OACRqa,EAAQ18B,EAAgBqiB,EAAM,OAAQ,cAAc,EACpD,CAACqa,CAAK,EAAIniC,GAAemiC,EAAO3xB,CAAE,EAClC4xB,GAA0CvT,EAAS,SAAUsT,EAAM,KAAK,GAE5E,IAAIE,EACAT,GAA0B,OAC1BS,EAA0B58B,EAAgBm8B,EAAwB,gBAAiB,uBAAuB,GAE9G,MAAMxgC,EAAO,CAACC,EAAIE,IAAU,CACxB9C,EAAY8jC,GAA4BpvB,CAAS,EAAG,IAAM,mHAElDA,CAAS,GAAG,EACpB,KAAM,CAACiK,EAASxF,EAAKnzS,EAAGqjT,CAAI,EAAIvmB,EAC1BigC,EAAeH,GAAqBhgC,EAAI58R,EAAG68T,CAAU,EACrDkB,EAAOO,IAAmCnrB,EAAI,MAAO4pB,EAAcpkB,EAAS92B,EAASmX,EAAK0V,EAAWmE,CAAe,EACpHmrB,EAAYI,IAAoCjrB,EAAK4pB,EAAcpkB,EAAQ,MAAO92B,EAASmX,EAAK0V,EAAWmE,CAAe,EAChI,GAAIwQ,GAAQ,KAAM,CACd,MAAM6a,EAAUpB,GAAqBY,EAAOX,CAAY,EACxD,MAAO,CAACgB,EAAMC,EAAWE,CAAO,CAC5C,CACQ,MAAO,CAACH,EAAMC,CAAS,CAC1B,EACKnoC,EAAS,CACX,EAAGsd,EACH,OAAQwF,EACR,KAAM+kB,EACN,uBAAwBE,CAC3B,EACK3vI,EAAQ,CACV,QAAA4zF,EACA,IAAAmX,EACA,WAAAyV,EACA,UAAAC,EACA,gBAAAmE,EACA,WAAAgqB,EACA,eAAAO,CACH,EAGD,OAAI/Z,GAAQ,KACSa,GAAW,CAAC/Q,EAAK1/Q,EAAQqsQ,IAAS,CAE/C,IAAI1yR,EAAMsvR,EAAO,UAAUhO,GAAsBmH,EAAQ5nG,CAAK,EAC9D,OAAA6xG,EAAK,CAACrsQ,EAAQ0/Q,EAAK/lS,CAAG,CAAC,EACnBgmS,IAEAhmS,EAAM4lS,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,GAE1D,CAAE,MAAOA,EAAK,SAAUuvR,CAAM,CACjD,CAAS,EACewW,EAAKwF,CAAO,EAGHuL,GAAW,CAAC/Q,EAAK1/Q,EAAQ4vR,EAAMvjB,IAAS,CAE7D,IAAI1yR,EAAMsvR,EAAO,UAAUhO,GAAsBmH,EAAQ5nG,CAAK,EAC9D,OAAA6xG,EAAK,CAACrsQ,EAAQ0/Q,EAAK/lS,EAAKi2S,CAAI,CAAC,EACzBjQ,IAEAhmS,EAAM4lS,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,GAE1D,CAAE,MAAOA,EAAK,SAAUuvR,CAAM,CACjD,CAAS,EACuBwW,EAAKwF,EAAS+kB,CAAK,CAEnD,CACO,MAAMniB,IAAkCt3S,EAAG,CAAE,sBAAAs6T,IAAuB,ECpL3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,SAASE,IAAa,CAAE,EAAAt+T,EAAG,EAAAK,EAAG,WAAAszS,EAAa,GAAO,WAAAC,EAAa,GAAO,KAAAsP,EAAM,WAAAwZ,EAAa,SAAU,uBAAAM,EAAwB,eAAAC,EAAiB,EAAG,EAAK,CAChJ,GAAIC,GAAW3gC,EAAO,MAAM,cAAemgC,CAAU,IAAM,GAAO,CAC9D,IAAIj5T,EAAS86T,GAAcv+T,EAAGK,EAAGszS,EAAYC,CAAU,EACvD,OAAIsP,GAAQ,OACRz/S,EAASmvB,GAAInvB,EAAQy/S,CAAI,GAEtB6Z,GAAgBt5T,EAAQi5T,EAAYM,EAAwBC,CAAc,CACzF,CACI,IAAI/+M,EAAK2iL,EAAgB7gS,EAAG,IAAK,cAAc,EAC3C4yG,EAAKiuL,EAAgBxgS,EAAG,IAAK,cAAc,EAC/C,CAAC69G,EAAItL,CAAE,EAAIwoL,GAAel9K,EAAItL,CAAE,EAChC,MAAM4rN,EAAc7qB,EAAaz1L,EAAG,MAAMA,EAAG,KAAO,CAAC,EAAIA,EAAG,MAAMA,EAAG,KAAO,CAAC,EACvEugN,EAAc7qB,EAAahhM,EAAG,MAAMA,EAAG,KAAO,CAAC,EAAIA,EAAG,MAAMA,EAAG,KAAO,CAAC,EACvE8rN,EAAc/qB,EAAaz1L,EAAG,MAAMA,EAAG,KAAO,CAAC,EAAIA,EAAG,MAAMA,EAAG,KAAO,CAAC,EACvEygN,EAAc/qB,EAAahhM,EAAG,MAAMA,EAAG,KAAO,CAAC,EAAIA,EAAG,MAAMA,EAAG,KAAO,CAAC,EACvEgsN,EAAa1gN,EAAG,MAAM,MAAM,EAAG,EAAE,EACjC2gN,EAAajsN,EAAG,MAAM,MAAM,EAAG,EAAE,EACjCksN,EAAYllC,GAAmBglC,CAAU,EACzCG,EAAYnlC,GAAmBilC,CAAU,EAC/ChlC,EAAY2kC,IAAgBC,EAAa,IAAM,wCAAwCD,CAAW,UAC3FC,CAAW,4BAA4BvgN,EAAG,KAAK,QAC/CtL,EAAG,KAAK,mBAAmB+gM,CAAU,mBACrBC,CAAU,cAAc,EAE/C,MAAMlD,EADoB8sB,GAA0Ct/M,EAAG,MAAM,MAAM,EAAG,EAAE,EAAGtL,EAAG,MAAM,MAAM,EAAG,EAAE,CAAC,EAC7E,OAAO,CAAC8rN,EAAaC,CAAW,CAAC,EAC9DK,EAAMrrB,EACRd,GAAQ30L,EAAI,CAAC4gN,EAAWN,EAAaE,CAAW,CAAC,EACjD7rB,GAAQ30L,EAAI,CAAC4gN,EAAWJ,EAAaF,CAAW,CAAC,EAC/CS,EAAMrrB,EACRf,GAAQjgM,EAAI,CAACmsN,EAAWJ,EAAaF,CAAW,CAAC,EACjD5rB,GAAQjgM,EAAI,CAACmsN,EAAWN,EAAaE,CAAW,CAAC,EACrD,IAAIpB,EACAra,GAAQ,OACRqa,EAAQ18B,EAAgBqiB,EAAM,OAAQ,cAAc,EACpD,CAACqa,CAAK,EAAIniC,GAAemiC,EAAOr/M,CAAE,EAClCs/M,GAA0C9sB,EAAU6sB,EAAM,KAAK,GAEnE,IAAIE,EACAT,GAA0B,OAC1BS,EAA0B58B,EAAgBm8B,EAAwB,gBAAiB,cAAc,GAErG,MAAMxgC,EAAO,CAACC,EAAIE,IAAU,CACxB,KAAM,CAACqiC,EAAKC,EAAKp/T,EAAG09T,CAAK,EAAI5gC,EAIvBigC,EAAeH,GAAqB5pB,GAAQpW,EAAI58R,EAAE,KAAK,EAAGA,EAAG68T,CAAU,EAC7E,IAAIwC,EACAC,EAiBJ,GAhBI,CAACxrB,GAAc,CAACC,GAChBsrB,EAAOX,GAAc3B,EAAcqC,EAAK,GAAO,EAAI,EACnDE,EAAOZ,GAAcS,EAAKpC,EAAc,GAAM,EAAK,GAE9C,CAACjpB,GAAcC,GACpBsrB,EAAOX,GAAc3B,EAAcqC,EAAK,GAAO,EAAK,EACpDE,EAAOZ,GAAc3B,EAAcoC,EAAK,GAAM,EAAK,GAE9CrrB,GAAc,CAACC,GACpBsrB,EAAOX,GAAcU,EAAKrC,EAAc,GAAO,EAAI,EACnDuC,EAAOZ,GAAcS,EAAKpC,EAAc,GAAO,EAAK,IAGpDsC,EAAOX,GAAcU,EAAKrC,EAAc,GAAM,EAAI,EAClDuC,EAAOZ,GAAc3B,EAAcoC,EAAK,GAAM,EAAI,GAElD9b,GAAQ,KAAM,CACd,MAAM6a,EAAUpB,GAAqBY,EAAOX,CAAY,EACxD,MAAO,CAACsC,EAAMC,EAAMpB,CAAO,CACvC,KAEY,OAAO,CAACmB,EAAMC,CAAI,CAEzB,EACKzpC,EAAS,CACX,EAAGspC,EACH,EAAGC,EACH,KAAM1B,EACN,uBAAwBE,CAC3B,EACK3vI,EAAQ,CAAE,WAAA6lH,EAAY,WAAAC,EAAY,WAAA8oB,EAAY,eAAAO,CAAgB,EAGpE,OAAI/Z,GAAQ,KACSa,GAAW,CAACib,EAAKC,EAAKt/B,IAAS,CAC5C,MAAM1yR,EAENsvR,EAAO,UAAUlO,GAAcqH,EAAQ5nG,CAAK,EAC5C,OAAA6xG,EAAK,CAACq/B,EAAKC,EAAKhyT,CAAG,CAAC,EACb,CAAE,MAAO4lS,GAAQ5lS,EAAKyjS,CAAQ,EAAG,SAAUlU,CAAM,CACpE,CAAS,EACewiC,EAAKC,CAAG,EAGClb,GAAW,CAACib,EAAKC,EAAK1B,EAAO59B,IAAS,CAC3D,MAAM1yR,EAENsvR,EAAO,UAAUlO,GAAcqH,EAAQ5nG,CAAK,EAC5C,OAAA6xG,EAAK,CAACq/B,EAAKC,EAAKhyT,EAAKswT,CAAK,CAAC,EACpB,CAAE,MAAO1qB,GAAQ5lS,EAAKyjS,CAAQ,EAAG,SAAUlU,CAAM,CACpE,CAAS,EACuBwiC,EAAKC,EAAK1B,CAAK,CAE/C,CACO,MAAM1pB,IAAyB/vS,EAAG,CAAE,aAAAw6T,IAAc,ECxJzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kJCAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BA,SAASc,IAAexD,EAAc,CAClC,OAAOD,GAAaC,EAAc,IAAM,GAAI,CAChD,CACO,MAAMyD,IAAgCv7T,EAAG,CAAE,eAAAs7T,IAAgB,ECjClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BA,SAASE,IAAY1D,EAAc,CAC/B,OAAOD,GAAaC,EAAc,GAAK,EAAG,CAC9C,CACO,MAAM2D,GAA6Bz7T,EAAG,CAAE,YAAAw7T,IAAa,ECjC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASE,IAAOh7S,EAAQi7S,EAAaC,EAAW3U,EAAS,GAAO4U,EAAW,EAAG,CAC1E,IAAIl4P,EAAQ,EACZ,MAAMz+B,EAAS,CAAE,EACjB,KAAOy+B,EAAQg4P,GAAej7S,EAAO,MACjCwkB,EAAO,KAAKkrQ,GAAM1vR,EAAQijD,EAAOg4P,CAAW,CAAC,EAC7Ch4P,GAASi4P,EAEb,GAAI3U,EACA,KAAOtjP,EAAQjjD,EAAO,MAAM,CACxB,MAAMo7S,EAAUn4P,EAAQg4P,EAAej7S,EAAO,KACxCq0Q,EAAM4a,GAAO,CACfS,GAAM1vR,EAAQijD,EAAOg4P,EAAcG,CAAM,EAAGr2R,GAAK,CAACq2R,CAAM,EAAGD,CAAQ,CACnF,CAAa,EACD32R,EAAO,KAAK6vP,CAAG,EACfpxN,GAASi4P,CACrB,CAEI,OAAI12R,EAAO,SAAW,EACXqtR,GAAS,CAAE,EAAE,CAAC,EAAGoJ,CAAW,CAAC,EAEjC5sB,GAAQY,GAAOzqQ,CAAM,EAAG,CAACA,EAAO,OAAQy2R,CAAW,CAAC,CAC/D,CACO,MAAMn7R,GAAwBxgC,EAAG,CAAE,OAAA07T,IAAQ,EC5DlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASK,IAAMr7S,EAAQi7S,EAAaC,EAAW/K,EAAWmL,EAAWP,GAAY,CACzE5K,GAAa,OACbA,EAAY+G,GAAoB+D,CAAW,GAE/C,MAAMM,EAAez7R,GAAM9f,EAAQi7S,EAAaC,CAAS,EACnDM,EAAiB7rC,GAAI4rC,EAAcD,EAASL,CAAW,CAAC,EAC9D,OAAOrK,GAAK4K,EAAgBrL,CAAS,CACzC,CACO,MAAMsL,IAAuBn8T,EAAG,CAAE,MAAA+7T,IAAO,EC9ChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASK,IAAerjP,EAAOsjP,EAAOC,EAAQC,EAAUhqQ,EAAS,WAAYiqQ,EAAqB,EAAG,CACjG,MAAMC,EAAS1/B,EAAgBhkN,EAAO,QAAS,eAAe,EACxD2jP,EAAS3/B,EAAgBs/B,EAAO,QAAS,gBAAiB,SAAS,EACnEM,EAAU5/B,EAAgBu/B,EAAQ,SAAU,gBAAiB,OAAO,EACpEM,EAAWF,EAAO,MAAM,CAAC,EAC/B3mC,EAAY0mC,EAAO,OAAS,EAAG,IAAM,6DACjBA,EAAO,IAAI,GAAG,EAClC1mC,EAAY2mC,EAAO,OAAS,GAAKA,EAAO,MAAM,CAAC,IAAM,EAAG,IAAM,oDAAoDE,CAAQ,qBACrGF,EAAO,KAAK,GAAG,EACpC3mC,EAAY4mC,EAAQ,OAAS,GAAKA,EAAQ,MAAM,CAAC,IAAMC,EAAU,IAAM,qDAAqDA,CAAQ,mBAC/GF,EAAO,KAAK,GAAG,EACpC3mC,EAAYwmC,EAAS,SAAW,EAAG,IAAM,wEAC3BA,EAAS,MAAM,GAAG,EAChCxmC,EAAYwmC,EAAS,CAAC,GAAK,GAAKA,EAAS,CAAC,GAAK,EAAG,IAAM,2CAA2CA,CAAQ,EAAE,EAC7GxmC,EAAYxjO,IAAW,YAAcA,IAAW,UAAW,IAAM,+CAA+CA,CAAM,EAAE,EACxH,MAAMq/N,EAAS,CAAE,MAAO6qC,EAAQ,MAAOC,EAAQ,OAAQC,CAAS,EAC1D3yI,EAAQ,CAAE,OAAAz3H,EAAQ,mBAAAiqQ,EAAoB,SAAAD,CAAU,EAEtD,OADY9jC,EAAO,UAAUrW,GAAewP,EAAQ5nG,CAAK,CAE7D,CACO,MAAM6yI,IAAgC78T,EAAG,CAAE,eAAAo8T,IAAgB,EChElE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BA,SAASU,IAAe/jP,EAAO,CAC3B,MAAM0jP,EAAS1/B,EAAgBhkN,EAAO,QAAS,gBAAiB,SAAS,EACzEg9M,EAAY0mC,EAAO,OAAS,EAAG,IAAM,6DACjBA,EAAO,IAAI,GAAG,EAClC,MAAM7qC,EAAS,CAAE,MAAO6qC,CAAQ,EAEhC,OADYhkC,EAAO,UAAU/U,GAAekO,EAAQ,EAAE,CAE1D,CACO,MAAMmrC,IAAgC/8T,EAAG,CAAE,eAAA88T,IAAgB,ECpClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BA,SAASE,IAAgBjkP,EAAO,CAC5B,MAAM0jP,EAAS1/B,EAAgBhkN,EAAO,QAAS,gBAAgB,EACzDkkP,EAAcR,EAAO,KAAO,EAC5BS,EAAWT,EAAO,MAAMQ,CAAW,EACzClnC,EAAY0mC,EAAO,MAAQ,EAAG,IAAM,yEAChBA,EAAO,IAAI,GAAG,EAClC1mC,EAAYmnC,IAAa,EAAG,IAAM,+FACIA,CAAQ,GAAG,EACjD,MAAMzpB,EAAO,IAAI,MAAMgpB,EAAO,IAAI,EAClC,OAAAhpB,EAAK,KAAK,EAAG,EAAGwpB,CAAW,EAC3BxpB,EAAKwpB,CAAW,EAAI,EACb9f,GAAKsf,EAAQhpB,CAAI,CAC5B,CACO,MAAM0pB,IAAiCn9T,EAAG,CAAE,gBAAAg9T,IAAiB,ECzCpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+BA,SAASI,IAAgBrkP,EAAO,CAC5B,MAAM0jP,EAAS1/B,EAAgBhkN,EAAO,QAAS,gBAAgB,EACzDkkP,EAAcR,EAAO,KAAO,EAC5BS,EAAWT,EAAO,MAAMQ,CAAW,EACzClnC,EAAY0mC,EAAO,MAAQ,EAAG,IAAM,yEAChBA,EAAO,IAAI,GAAG,EAClC1mC,EAAYmnC,IAAa,EAAG,IAAM,0FACIA,CAAQ,GAAG,EAEjD,MAAMG,EAAYZ,EAAO,MACnBa,EAAWt1B,GAAKy0B,EAAQ,SAAS,EACjCc,EAAajL,GAAS,CAAC,MAAQ,KAAQ,IAAM,CAAC,EACpD,IAAIkL,EACJ,OAAQf,EAAO,KAAI,CACf,IAAK,GACDe,EAAYxjB,GAAO,UAAWsjB,EAAUC,CAAU,EAClD,MACJ,IAAK,GACDC,EAAYxjB,GAAO,YAAasjB,EAAUC,CAAU,EACpD,MACJ,IAAK,GACDC,EAAYxjB,GAAO,cAAesjB,EAAUC,CAAU,EACtD,MACJ,IAAK,GACDC,EAAYxjB,GAAO,gBAAiBsjB,EAAUC,CAAU,EACxD,MACJ,IAAK,GACDC,EAAYxjB,GAAO,kBAAmBsjB,EAAUC,CAAU,EAC1D,MACJ,QACI,MAAM,IAAI,MAAM,0BAA0B,CACtD,CACI,OAAAC,EAAYzgB,GAAWygB,EAAW,EAAE,EAC7Bx1B,GAAKw1B,EAAWH,CAAS,CACpC,CACO,MAAMI,IAAiCz9T,EAAG,CAAE,gBAAAo9T,IAAiB,EClEpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASM,IAAkB3kP,EAAO4kP,EAASC,EAAY,EAAGC,EAAS,GAAK,CACpE,MAAMpB,EAAS1/B,EAAgBhkN,EAAO,QAAS,mBAAoB,SAAS,EAC5Eg9M,EAAY0mC,EAAO,OAAS,EAAG,IAAM,gEACjBA,EAAO,IAAI,GAAG,EAClC,MAAM7qC,EAAS,CAAE,MAAO6qC,CAAQ,EAC1BzyI,EAAQ,CAAE,QAAA2zI,EAAS,UAAAC,EAAW,OAAAC,CAAQ,EAE5C,OADYplC,EAAO,UAAUnO,GAAkBsH,EAAQ5nG,CAAK,CAEhE,CACO,MAAM8zI,IAAmC99T,EAAG,CAAE,kBAAA09T,IAAmB,EC9CxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBA,SAASK,GAAsB1B,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgBC,EAAc,CACjGF,GAAgB,OAChBA,EAAe,IAEfC,GAAkB,OAClBA,EAAiB,OAAO,mBAExBC,GAAgB,OAChBA,EAAe,GAEnB,MAAMxB,EAAWP,EAAM,MAAM,CAAC,EAC9B,OAAA4B,EAAgB,KAAK,IAAIA,EAAerB,CAAQ,EAChD7mC,EAAY,GAAKmoC,GAAgBA,GAAgB,EAAG,IAAM,4CAA4CA,CAAY,GAAG,EACrHnoC,EAAYsmC,EAAM,OAAS,EAAG,IAAM,+CAA+CA,EAAM,IAAI,GAAG,EAChGtmC,EAAYsmC,EAAM,MAAM,CAAC,IAAM,EAAG,IAAM,oDAAoDA,EAAM,MAAM,CAAC,CAAC,EAAE,EAC5GtmC,EAAYioC,EAAO,OAAS,EAAG,IAAM,4BAA4B,EACjEjoC,EAAYioC,EAAO,MAAM,CAAC,IAAMpB,EAAU,IAAM,sDAAsDA,CAAQ,aAC/FoB,EAAO,MAAM,CAAC,CAAC,EAAE,EAChCjoC,EAAY,GAAKqoC,GAAgBA,GAAgB,EAAG,IAAM,4CAA4CA,CAAY,GAAG,EAC9G,CAAE,cAAAH,EAAe,aAAAC,EAAc,eAAAC,EAAgB,aAAAC,CAAc,CACxE,CCrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASC,IAAmBhC,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmB,CACrH,MAAMzB,EAAS3/B,EAAgBs/B,EAAO,QAAS,oBAAqB,SAAS,EACvEiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,oBAAqB,SAAS,EAC1EpsC,EAASmsC,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,CAAc,EACjGF,EAAgBrsC,EAAO,cACvBssC,EAAetsC,EAAO,aACtBusC,EAAiBvsC,EAAO,eACxB,MAAM5nG,EAAQ,CAAE,cAAAi0I,EAAe,aAAAC,EAAc,eAAAC,CAAgB,EAC7D,OAAO1lC,EAAO,UAAUrS,GAAqB,CAAE,MAAOs2C,EAAQ,OAAQ4B,CAAS,EAAEt0I,CAAK,CAC1F,CACO,MAAMu0I,IAAoCv+T,EAAG,CAAE,mBAAAq+T,IAAoB,ECjD1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6BO,SAASG,IAAa/2T,EAAKI,EAAS42T,EAAY,CACnD,MAAMl8T,EAAQm8T,IAAaj3T,EAAKI,EAAS42T,CAAU,EAC7CE,EAAiBp8T,EAAQ,EAAI,EAAEA,EAAQ,GAAKA,EAClDkF,EAAI,OAAOk3T,EAAgB,EAAG92T,CAAO,CACzC,CAgBO,SAAS62T,IAAaj3T,EAAKoV,EAAQ4hT,EAAY,CAClD,OAAOG,IAAcn3T,EAAKoV,EAAQ4hT,GAAcI,GAAiB,CACrE,CAQA,SAASA,IAAkB3iU,EAAGK,EAAG,CAC7B,OAAOL,EAAIK,EAAI,EAAIL,EAAIK,EAAI,GAAK,CACpC,CACA,SAASqiU,IAAcn3T,EAAKoV,EAAQ4hT,EAAY,CAC5C,IAAIviJ,EAAO,EACPqzB,EAAQ9nM,EAAI,OACZy3R,EAAS,EACTlkJ,EAAQ,GACZ,KAAOkhC,EAAOqzB,GAAO,CACjB2vF,EAAShjH,GAASqzB,EAAQrzB,IAAU,GACpC,MAAM4iJ,EAAgBL,EAAW5hT,EAAQpV,EAAIy3R,CAAM,CAAC,EAChD4/B,EAAgB,EAChB5iJ,EAAOgjH,EAAS,GAGhB3vF,EAAQ2vF,EAGRlkJ,EAAQ,CAAC8jL,EAErB,CACI,OAAO9jL,EAAQkhC,EAAO,CAACA,EAAO,CAClC,CCjFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBO,SAAS6iJ,GAAwB1C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgB,CAChG,OAAOa,GAAuB3C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgB,CAAqB,CACnH,CACO,SAASc,GAAwB5C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgBe,EAAoB,CACpH,OAAOF,GAAuB3C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgB,EAAsB,GAAgCe,EAA6C,EACnK,CAC9B,CACO,SAASC,GAAwB9C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgBC,EAAc,CAC9G,OAAOY,GAAuB3C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgBC,EAAc,EAA8B,CAC1I,CACA,SAASY,GAAuB3C,EAAO2B,EAAQC,EAAeC,EAAcC,EAAgBC,EAAcgB,EAAqB,GAAOF,EAAqB,GAAOG,EAAqB,GAAO,CAG1L,MAAMnpE,EAAa,CAAE,EACrB,QAASp3P,EAAI,EAAGA,EAAIk/T,EAAO,OAAQl/T,IAC3Bk/T,EAAOl/T,CAAC,EAAIq/T,GACZjoE,EAAW,KAAK,CAAE,MAAO8nE,EAAOl/T,CAAC,EAAG,SAAUA,EAAG,mBAAoB,EAAG,EAGhFo3P,EAAW,KAAKopE,EAAmB,EAGnC,MAAMv3I,EAAQq2I,EAAe,EAAK,IAAOA,EAAgB,EACnDmB,EAAkB,CAAE,EACpBC,EAAiB,CAAE,EACzB,KAAOD,EAAgB,OAAStB,GAAiB/nE,EAAW,OAAS,GAAG,CACpE,MAAMt2K,EAAYs2K,EAAW,IAAK,EAC5B,CAAE,MAAOupE,EAAe,SAAAC,EAAU,mBAAAC,CAAoB,EAAG//O,EAC/D,GAAI6/O,EAAgBtB,EAChB,MAQJ,IAAIyB,EAAkB,GACtB,QAAS7iD,EAAIwiD,EAAgB,OAAS,EAAGxiD,GAAK4iD,EAAoB,EAAE5iD,EAAG,CACnE,MAAM8iD,EAAMC,IAAsBzD,EAAOqD,EAAUH,EAAgBxiD,CAAC,CAAC,EACrE,GAAI8iD,GAAO3B,EAAc,CACrB0B,EAAkB,GAClB,KAChB,CAGY,GAFAhgP,EAAU,MACNA,EAAU,MAAQmgP,IAAe7B,EAAcn2I,EAAO83I,CAAG,EACzDjgP,EAAU,OAASu+O,EACnB,KAEhB,CAQQv+O,EAAU,mBAAqB2/O,EAAgB,OAC1CK,IAGGhgP,EAAU,QAAU6/O,GACpBF,EAAgB,KAAKG,CAAQ,EAC7BF,EAAe,KAAK5/O,EAAU,KAAK,GAE9BA,EAAU,MAAQu+O,GAGvBK,IAAatoE,EAAYt2K,EAAW0/O,EAAmB,EAGvE,CAEI,MAAMU,EAAeT,EAAgB,OAC/BU,EAAahC,EAAgB+B,EAC/Bd,GAAsBe,EAAa,IACnCV,EAAgB,KAAK,GAAG,IAAI,MAAMU,CAAU,EAAE,KAAK,CAAC,CAAC,EACrDT,EAAe,KAAK,GAAG,IAAI,MAAMS,CAAU,EAAE,KAAK,CAAG,CAAC,GAE1D,MAAMtgU,EAAS,CAAE,gBAAA4/T,CAAiB,EAClC,OAAIH,IACAz/T,EAAO,eAAoB6/T,GAE3BH,IACA1/T,EAAO,aAAkBqgU,GAEtBrgU,CACX,CACA,SAASmgU,IAAsBzD,EAAOv9T,EAAGi+Q,EAAG,CACxC,MAAMmjD,EAAS7D,EAAM,SAASv9T,EAAI,EAAGA,EAAI,EAAI,CAAC,EACxCqhU,EAAS9D,EAAM,SAASt/C,EAAI,EAAGA,EAAI,EAAI,CAAC,EACxCqjD,EAAQ,KAAK,IAAIF,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCG,EAAQ,KAAK,IAAIH,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCI,EAAQ,KAAK,IAAIJ,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCK,EAAQ,KAAK,IAAIL,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCM,EAAQ,KAAK,IAAIL,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCM,EAAQ,KAAK,IAAIN,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCO,EAAQ,KAAK,IAAIP,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCQ,EAAQ,KAAK,IAAIR,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrCS,GAASN,EAAQF,IAAUG,EAAQF,GACnCQ,GAASH,EAAQF,IAAUG,EAAQF,GACzC,GAAIG,GAAS,GAAKC,GAAS,EACvB,MAAO,GAEX,MAAMC,EAAmB,KAAK,IAAIV,EAAOI,CAAK,EACxCO,EAAmB,KAAK,IAAIV,EAAOI,CAAK,EACxCO,EAAmB,KAAK,IAAIV,EAAOI,CAAK,EACxCO,EAAmB,KAAK,IAAIV,EAAOI,CAAK,EACxC7rD,EAAmB,KAAK,IAAIksD,EAAmBF,EAAkB,CAAG,EACtE,KAAK,IAAIG,EAAmBF,EAAkB,CAAG,EACrD,OAAOjsD,GAAoB8rD,EAAQC,EAAQ/rD,EAC/C,CAKA,SAASirD,IAAe7B,EAAcn2I,EAAO83I,EAAK,CAC9C,MAAMqB,EAAS,KAAK,IAAIn5I,EAAQ83I,EAAMA,CAAG,EACzC,OAAOA,GAAO3B,EAAegD,EAAS,CAC1C,CACA,SAAS5B,GAAoB6B,EAAIC,EAAI,CAKjC,OAAQD,EAAG,MAAQC,EAAG,OAChBD,EAAG,QAAUC,EAAG,OAAWA,EAAG,SAAWD,EAAG,QACtD,CChJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwCA,eAAeE,IAAwBhF,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmB,CAChI,MAAMzB,EAAS3/B,EAAgBs/B,EAAO,QAAS,wBAAwB,EACjEiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,wBAAwB,EACpEpsC,EAASmsC,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,CAAc,EACjGF,EAAgBrsC,EAAO,cACvBssC,EAAetsC,EAAO,aACtBusC,EAAiBvsC,EAAO,eACxB,MAAM0vC,EAAiB,MAAM,QAAQ,IAAI,CAAC5E,EAAO,OAAQ4B,EAAQ,KAAI,CAAE,CAAC,EAClEiD,EAAYD,EAAe,CAAC,EAC5BE,EAAaF,EAAe,CAAC,EAI7B,CAAE,gBAAA/B,CAAiB,EAAGR,GAAwBwC,EAAWC,EAAYvD,EAAeC,EAAcC,CAAc,EACtH,OAAIzB,IAAWL,GACXK,EAAO,QAAS,EAEhB4B,IAAYN,GACZM,EAAQ,QAAS,EAEdhM,GAASiN,EAAiB,OAAO,CAC5C,CACO,MAAMkC,IAAyBJ,IC9DtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkDA,SAASK,IAA4BrF,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmBC,EAAe,EAAK,CAClJ,MAAM1B,EAAS3/B,EAAgBs/B,EAAO,QAAS,mBAAmB,EAC5DiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,mBAAmB,EAC/D9uT,EAAS6uT,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,EAAgBC,CAAY,EAC/GH,EAAgB/uT,EAAO,cACvBgvT,EAAehvT,EAAO,aACtBivT,EAAiBjvT,EAAO,eACxBkvT,EAAelvT,EAAO,aACtB,MAAM0iR,EAAS,CAAE,MAAO8qC,EAAQ,OAAQ4B,CAAS,EAC3Ct0I,EAAQ,CAAE,cAAAi0I,EAAe,aAAAC,EAAc,eAAAC,EAAgB,aAAAC,CAAc,EAErEz+T,EAAS84R,EAAO,UAAUnS,GAAqBsL,EAAQ5nG,CAAK,EAClE,MAAO,CAAE,gBAAiBrqL,EAAO,CAAC,EAAG,eAAgBA,EAAO,CAAC,CAAG,CACpE,CACO,MAAMgiU,IAA6C3hU,EAAG,CAAE,4BAAA0hU,IAA6B,EChE5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDA,eAAeE,IAAiCvF,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmBC,EAAe,EAAK,CAC7J,MAAM1B,EAAS3/B,EAAgBs/B,EAAO,QAAS,wBAAwB,EACjEiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,wBAAwB,EACpE9uT,EAAS6uT,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,EAAgBC,CAAY,EAC/GH,EAAgB/uT,EAAO,cACvBgvT,EAAehvT,EAAO,aACtBivT,EAAiBjvT,EAAO,eACxBkvT,EAAelvT,EAAO,aACtB,MAAMoyT,EAAiB,MAAM,QAAQ,IAAI,CAAC5E,EAAO,OAAQ4B,EAAQ,KAAI,CAAE,CAAC,EAClEiD,EAAYD,EAAe,CAAC,EAC5BE,EAAaF,EAAe,CAAC,EAI7B,CAAE,gBAAA/B,EAAiB,eAAAC,CAAgB,EAAGL,GAAwBoC,EAAWC,EAAYvD,EAAeC,EAAcC,EAAgBC,CAAY,EACpJ,OAAI1B,IAAWL,GACXK,EAAO,QAAS,EAEhB4B,IAAYN,GACZM,EAAQ,QAAS,EAEd,CACH,gBAAiBhM,GAASiN,EAAiB,OAAO,EAClD,eAAgBjN,GAASkN,CAAc,CAC1C,CACL,CACO,MAAMqC,IAAkCD,IC3E/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAyBzF,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmBe,EAAqB,GAAO,CACvJ,MAAMxC,EAAS3/B,EAAgBs/B,EAAO,QAAS,mBAAmB,EAC5DiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,mBAAmB,EAC/D9uT,EAAS6uT,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,EAAgB,IAAwB,EACrH4D,EAAiB7yT,EAAO,cACxB8yT,EAAgB9yT,EAAO,aACvB+yT,EAAkB/yT,EAAO,eACzB0iR,EAAS,CAAE,MAAO8qC,EAAQ,OAAQ4B,CAAS,EAC3Ct0I,EAAQ,CACV,cAAe+3I,EACf,aAAcC,EACd,eAAgBC,EAChB,mBAAA/C,CACH,EAEKv/T,EAAS84R,EAAO,UAAUpS,GAAqBuL,EAAQ5nG,CAAK,EAClE,MAAO,CAAE,gBAAiBrqL,EAAO,CAAC,EAAG,aAAcA,EAAO,CAAC,CAAG,CAClE,CACO,MAAMuiU,IAA0CliU,EAAG,CAAE,yBAAA8hU,IAA0B,EC9DtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,eAAeK,IAA8B9F,EAAO2B,EAAQC,EAAeC,EAAe,GAAKC,EAAiB,OAAO,kBAAmBe,EAAqB,GAAO,CAClK,MAAMxC,EAAS3/B,EAAgBs/B,EAAO,QAAS,wBAAwB,EACjEiC,EAAUvhC,EAAgBihC,EAAQ,SAAU,wBAAwB,EACpE9uT,EAAS6uT,GAAsBrB,EAAQ4B,EAASL,EAAeC,EAAcC,EAAgB,IAAwB,EACrH4D,EAAiB7yT,EAAO,cACxB8yT,EAAgB9yT,EAAO,aACvB+yT,EAAkB/yT,EAAO,eACzB,CAACqyT,EAAWC,CAAU,EAAI,MAAM,QAAQ,IAAI,CAAC9E,EAAO,KAAM,EAAE4B,EAAQ,KAAM,EAAC,EAI3E,CAAE,gBAAAiB,EAAiB,aAAAS,CAAc,EAAGf,GAAwBsC,EAAWC,EAAYO,EAAgBC,EAAeC,EAAiB/C,CAAkB,EAC3J,OAAIxC,IAAWL,GACXK,EAAO,QAAS,EAEhB4B,IAAYN,GACZM,EAAQ,QAAS,EAEd,CACH,gBAAiBhM,GAASiN,EAAiB,OAAO,EAClD,aAAczjB,GAAOkkB,EAAc,OAAO,CAC7C,CACL,CACO,MAAMoC,IAA+BD,ICnE5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASE,IAAgBr9Q,EAAQt9C,EAAM46T,EAAe,GAAOC,EAAmB,GAAO,CACnF,MAAMC,EAAUzlC,EAAgB/3O,EAAQ,SAAU,gBAAgB,EAClE+wO,EAAYysC,EAAQ,OAAS,GAAKA,EAAQ,OAAS,EAAG,IAAM,gEAChDA,EAAQ,IAAI,GAAG,EAC3BzsC,EAAYruR,EAAK,SAAW,EAAG,IAAM,6DAC9BA,CAAI,GAAG,EACdquR,EAAYwsC,IAAqB,IAASD,IAAiB,GAAO,IAAM,mFACvC,EACjC,IAAIG,EAAcD,EACdrzB,EAAe,GACfqzB,EAAQ,OAAS,IACjBrzB,EAAe,GACfszB,EAAc1zB,GAAQyzB,EAAS,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,CAAC,CAAC,GAG5F,MAAM5wC,EAAS,CAAE,OAAQ6wC,CAAa,EAChCz4I,EAAQ,CAAE,aAAAs4I,EAAc,iBAAAC,EAAkB,KAAA76T,CAAM,EAEhDyB,EAAMsvR,EAAO,UAAUjR,GAAgBoK,EAAQ5nG,CAAK,EAC1D,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMu5T,IAAiC1iU,EAAG,CAAE,gBAAAqiU,IAAiB,EC/DpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwCA,SAASM,IAAuB39Q,EAAQt9C,EAAM46T,EAAe,GAAOC,EAAmB,GAAO,CAC1F,MAAMC,EAAUzlC,EAAgB/3O,EAAQ,SAAU,uBAAuB,EACzE+wO,EAAYysC,EAAQ,OAAS,GAAKA,EAAQ,OAAS,EAAG,IAAM,uEAChDA,EAAQ,IAAI,GAAG,EAC3BzsC,EAAYruR,EAAK,SAAW,EAAG,IAAM,oEAC9BA,CAAI,GAAG,EACdquR,EAAYysC,EAAQ,QAAU,WAAaA,EAAQ,QAAU,QAAS,IAAM,kDAAkD,EAC9HzsC,EAAYwsC,IAAqB,IAASD,IAAiB,GAAO,IAAM,0FACvC,EACjC,IAAIG,EAAcD,EACdrzB,EAAe,GACfqzB,EAAQ,OAAS,IACjBrzB,EAAe,GACfszB,EAAc1zB,GAAQyzB,EAAS,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,EAAGA,EAAQ,MAAM,CAAC,CAAC,CAAC,GAG5F,MAAM5wC,EAAS,CAAE,OAAQ6wC,CAAa,EAChCz4I,EAAQ,CAAE,aAAAs4I,EAAc,iBAAAC,EAAkB,KAAA76T,CAAM,EAEhDyB,EAAMsvR,EAAO,UAAUnR,GAAuBsK,EAAQ5nG,CAAK,EACjE,OAAImlH,EACOJ,GAAQ5lS,EAAK,CAACA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,EAAGA,EAAI,MAAM,CAAC,CAAC,CAAC,EAE3DA,CACX,CACO,MAAMy5T,IAAwC5iU,EAAG,CAAE,uBAAA2iU,IAAwB,ECjElF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDA,SAASE,IAAW9pP,EAAOxmB,EAAS,SAAUuwQ,EAAW,GAAOC,EAAc,GAAK,CAC/E,MAAMtG,EAAS1/B,EAAgBhkN,EAAO,QAAS,WAAW,EAGpDiqP,EAAqB,MACrBC,EAAuB,KACvBC,EAAsB,KACtBC,EAAqB1G,EAAO,MAAM,CAAC,EAAIA,EAAO,MAAM,CAAC,EAC3D,IAAI2G,EAAa/yC,GAAIiiC,GAAS,CAACyQ,CAAW,CAAC,EAAG,GAAG,EAC7CtnU,EAAG4B,EAAGd,EAAG8mU,EASb,GARAttC,EAAY0mC,EAAO,OAAS,EAAG,IAAM,yDACjBA,EAAO,IAAI,GAAG,EAClC1mC,EAAY0mC,EAAO,MAAM,CAAC,IAAM,GAAKA,EAAO,MAAM,CAAC,IAAM,EAAG,IAAM,0EAEnDA,EAAO,MAAM,CAAC,CAAC,GAAG,EACjC1mC,EAAY0mC,EAAO,QAAU,SAAWA,EAAO,QAAU,UAAW,IAAM,sEACrDA,EAAO,KAAK,GAAG,EACpC1mC,EAAYxjO,IAAW,QAAUA,IAAW,SAAU,IAAM,0CAA0CA,CAAM,EAAE,EAC1GkqQ,EAAO,MAAM,CAAC,IAAM,EAAG,CACvB,CAAChhU,EAAG4B,EAAGd,CAAC,EAAIq7C,GAAM6kR,EAAQ,CAAC,EAAG,EAAG,CAAC,EAAG,EAAE,EACvC,MAAM6G,EAAKjzC,GAAI50R,EAAGunU,CAAkB,EAC9BxjN,EAAK6wK,GAAIhzR,EAAG4lU,CAAoB,EAChCn0N,EAAKuhL,GAAI9zR,EAAG2mU,CAAmB,EACrCG,EAAYv0S,GAAIA,GAAIw0S,EAAI9jN,CAAE,EAAG1Q,CAAE,CACvC,MAEQu0N,EAAYtqP,EAEhB,GAAIxmB,IAAW,OAAQ,CACnB,MAAMgxQ,EAAa1wB,GAAS7K,GAAK0F,GAAM21B,CAAS,EAAG,OAAO,EAAGrpC,GAAO,CAAE,GAAG,GAAG,EAC5EopC,EAAaI,IAAKD,EAAYJ,CAAkB,CACxD,CACI,MAAMM,EAAeX,EACjB9jB,GAAUqkB,EAAWD,CAAU,EAAInlB,GAAQolB,EAAWD,CAAU,EAEpE,OADep7B,GAAK3X,GAAIozC,EAAc,GAAG,EAAG,OAAO,CAEvD,CACA,SAASD,IAAKE,EAAW/3J,EAAO,CAC5B,IAAIg4J,EAAarR,GAAS,CAAC,EAAE,CAAC,EAC1BsR,EAAetR,GAAS,CAAC,CAAC,CAAC,EAC3BuR,EAAYvR,GAAS,CAAC,CAAC,CAAC,EACxBwR,EAAYC,EAAaC,EAAWC,EAASC,EAAkBC,EACnE,QAAS5hU,EAAQ,EAAGA,EAAQmhU,EAAU,KAAO,EAAGnhU,IAAS,CACrDuhU,EAAa1zB,GAAMszB,EAAW,EAAGnhU,EAAQ,CAAC,EAC1CwhU,EAAc3zB,GAAMszB,EAAWnhU,EAAQ,CAAC,EACxC2hU,EAAmBz2C,GAAI2uB,GAAI0nB,CAAU,EAAGn4J,CAAK,EAC7Cw4J,EAAa12C,GAAI2uB,GAAI2nB,CAAW,EAAGp4J,CAAK,EACxC,MAAMy4J,EAAgBhoB,GAAI/rB,GAAIyzC,EAAYp8O,GAAM,EAAGo8O,EAAW,IAAI,CAAC,CAAC,EACpEE,EAAYv2C,GAAI22C,EAAehoB,GAAI0nB,CAAU,CAAC,EAC9C,MAAMO,EAAc5+R,GAAKs+R,EAAY,MAAOD,EAAW,IAAI,EACrDQ,EAAax1S,GAAI44D,GAAM,EAAGq8O,EAAY,IAAI,EAAGM,CAAW,EACxDE,EAAal0C,GAAI0zC,EAAcO,CAAY,EACjDL,EAAUx2C,GAAI2uB,GAAImoB,CAAU,EAAGnoB,GAAI2nB,CAAW,CAAC,EAC/C,MAAMS,EAAgBzoE,GAAIioE,EAAWC,CAAO,EACtCQ,EAAgB1oE,GAAIioE,EAAWC,CAAO,EACtCS,EAAer0C,GAAI6zC,EAAkBC,CAAU,EACrDN,EAAYxzC,GAAIA,GAAIq0C,EAAcF,CAAa,EAAGC,CAAa,EAC/D,MAAM/wG,EAAYuqF,GAAQ4lB,EAAWD,CAAY,EACjDA,EAAe/qB,GAAMnlF,EAAWmwG,EAAWD,CAAY,EACvDD,EAAa9qB,GAAMnlF,EAAW4+F,GAAS,CAAC/vT,CAAK,CAAC,EAAGohU,CAAU,CACnE,CACI,OAAOA,CACX,CACO,MAAM/7R,IAA4B5nC,EAAG,CAAE,WAAA6iU,IAAY,EClH1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDA,SAAS8B,IAAW5rP,EAAOqgI,EAAYwrH,EAAgB,UAAWC,EAAW,WAAYjH,EAAY,EAAGpoB,EAAa,CACjH,MAAMinB,EAAS1/B,EAAgBhkN,EAAO,QAAS,YAAa,SAAS,EAC/D+rP,EAAc/nC,EAAgB3jF,EAAY,aAAc,YAAa,SAAS,EACpF28E,EAAY0mC,EAAO,OAAS,EAAG,IAAM,yDACjBA,EAAO,IAAI,GAAG,EAClC1mC,EAAY+uC,EAAY,OAAS,IAC5BA,EAAY,MAAM,CAAC,IAAMrI,EAAO,MAAM,CAAC,GACpCqI,EAAY,MAAM,CAAC,IAAM,IAC7BA,EAAY,MAAM,CAAC,IAAM,EAAG,IAAM,kEAAkE,EACxG/uC,EAAYyf,GAAe,MAAQA,EAAY,SAAW,EAAG,IAAM,4EACpDA,CAAW,GAAG,EAC7B,MAAM5jB,EAAS,CAAE,MAAO6qC,EAAQ,WAAYqI,CAAa,EACnD96I,EAAQ,CAAE,cAAA46I,EAAe,SAAAC,EAAU,UAAAjH,EAAW,YAAApoB,CAAa,EACjE,OAAO/c,EAAO,UAAU3O,GAAW8H,EAAQ5nG,CAAK,CACpD,CACO,MAAMlB,IAA4B9oL,EAAG,CAAE,WAAA2kU,IAAY,EClE1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsEA,SAASI,IAAU7oU,EAAG8oU,EAAUC,EAAU,CACtC,MAAM7qN,EAAK2iL,EAAgB7gS,EAAG,IAAK,UAAU,EAC7CynI,EAAOvpB,EAAG,MAAQ,EAAG,IAAM,4CAA4CA,EAAG,IAAI,GAAG,EACjF,MAAM+gK,EAAQ/gK,EAAG,MACX,CAACp9G,EAAGQ,CAAC,EAAI48G,EAAG,MAAM,MAAM,EAAE,EAChC,IAAI8qN,EACAC,EACA,OAAOH,GAAa,UACpBrhM,EAAOqhM,EAAW,IAAM,EAAG,IAAM,gDAAgDA,CAAQ,GAAG,EAC5FrhM,EAAOqhM,GAAYhoU,EAAG,IAAM,yBAAyBgoU,CAAQ,kDACRhoU,CAAC,IAAI,EAC1DkoU,EACInoC,EAAgBioC,EAAW,EAAIhoU,EAAIgoU,EAAU,WAAY,UAAU,IAGvErhM,EAAOqhM,EAAS,QAAU,QAAS,IAAM,gDAAgD,EAGzFE,EAAYrsB,GAAMiG,GAAKkmB,EAAU,CAAC,EAAGhoU,EAAGimT,GAAQ+hB,EAAUhoU,CAAC,CAAC,GAE5D,OAAOioU,GAAa,UACpBthM,EAAOshM,EAAW,IAAM,EAAG,IAAM,gDAAgDA,CAAQ,GAAG,EAC5FthM,EAAOshM,GAAYznU,EAAG,IAAM,yBAAyBynU,CAAQ,qDACLznU,CAAC,IAAI,EAC7D2nU,EACIpoC,EAAgBkoC,EAAW,EAAIznU,EAAIynU,EAAU,WAAY,UAAU,IAGvEthM,EAAOshM,EAAS,QAAU,QAAS,IAAM,gDAAgD,EACzFE,EAAYtsB,GAAMiG,GAAKmmB,EAAU,CAAC,EAAGznU,EAAGylT,GAAQgiB,EAAUznU,CAAC,CAAC,GAEhE,MAAMsB,EAAIiwS,GAAQrnN,GAAM,EAAG1qF,EAAG,EAAG,OAAO,EAAG,CAAC,GAAI,CAAC,CAAC,EAC5C+/Q,EAAIr1L,GAAM,EAAGlqF,EAAG,EAAG,OAAO,EAC1BkpH,EAAKq1I,GAAIj9P,EAAGi+Q,CAAC,EACbqoD,EAASjkB,GAAWnC,GAAUt4L,EAAIw+M,CAAS,EAAG/mB,GAAaz3L,EAAIy5L,GAAIglB,CAAS,CAAC,CAAC,EAC9EE,EAAOnsB,GAAM,CAACl8S,EAAGQ,CAAC,EAAG48G,EAAG,KAAK,EACnC,OAAO20L,GAAQ/uQ,GAAMy0R,GAAQ1lB,GAAQ30L,EAAI,CAAC,GAAIp9G,EAAGQ,CAAC,CAAC,CAAC,EAC/C,IAAI8nU,GAAOzsB,GAAMusB,EAAQE,EAAKD,CAAI,CAAC,CAAC,EAAGlqD,CAAK,CACrD,CACO,MAAMoqD,IAA2BvlU,EAAG,CAAE,UAAA+kU,IAAW,EC7GxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuDA,SAASS,IAAa1yC,EAAI,CACtB,IAAI2yC,EACJ,GAAI,MAAM,QAAQ3yC,CAAE,EAAG,CACnB2yC,EAAkB,GAClB9hM,EAAOmvJ,GAAM,MAAQA,EAAG,OAAS,EAAG,IAAM,mEAC/B,EACX,MAAMglB,EAAMhlB,EAAG,CAAC,EAAE,MAAM,CAAC,EACzB,QAASh0R,EAAI,EAAGA,EAAIg0R,EAAG,OAAQ,EAAEh0R,EAC7B6kI,EAAOmvJ,EAAGh0R,CAAC,EAAE,MAAM,CAAC,IAAMg5S,EAAK,IAAM,iEAC7BhlB,EAAGh0R,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQg5S,CAAG,GAAG,CAEhD,MAEQ2tB,EAAkB,GAClB3yC,EAAKl7O,GAAMk7O,EAAIA,EAAG,MAAM,CAAC,EAAG,CAAC,EAAE,IAAIh3R,GAAK41T,GAAQ51T,EAAG,CAAC,CAAC,CAAC,CAAC,EAE3D6nI,EAAOmvJ,EAAG,QAAUA,EAAG,CAAC,EAAE,MAAM,CAAC,EAAG,IAAM,oCAAoCA,EAAG,MAAM,mCAC1DA,EAAG,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAC/C,MAAM4yC,EAAK,CAAE,EACPC,EAAO7yC,EACb,QAASh0R,EAAI,EAAGA,EAAIg0R,EAAG,OAAQ,EAAEh0R,EAC7B4mU,EAAG,KAAKjtC,EAAO,KAAK,IAAM,CACtB,IAAI38R,EAAI6pU,EAAK7mU,CAAC,EACd,GAAIA,EAAI,EACJ,QAASi+Q,EAAI,EAAGA,EAAIj+Q,EAAG,EAAEi+Q,EAAG,CACxB,MAAM6oD,EAAOv1C,GAAI+rB,GAAI/rB,GAAIq1C,EAAG3oD,CAAC,EAAGjhR,CAAC,CAAC,EAAG4pU,EAAG3oD,CAAC,CAAC,EAC1CjhR,EAAIigQ,GAAIjgQ,EAAG8pU,CAAI,CACnC,CAEY,OAAOn4C,GAAI3xR,EAAGygT,GAAKzgT,EAAG,WAAW,CAAC,CAC9C,CAAS,CAAC,EAEN,OAAI2pU,EACOzlS,GAAM0lS,EAAI,CAAC,EAGXA,CAEf,CACO,MAAMG,IAA8B7lU,EAAG,CAAE,aAAAwlU,IAAc,EC9F9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgFA,SAASM,IAAIhqU,EAAGiqU,EAAe,GAAO,CAElC,GADApiM,EAAO7nI,EAAE,MAAQ,EAAG,IAAM,gEAAgEA,EAAE,IAAI,EAAE,EAC9FA,EAAE,OAAS,EACX,OAAOkqU,GAAKlqU,EAAGiqU,CAAY,EAE1B,CAKD,MAAME,EAAgBnqU,EAAE,MAAM,MAAM,EAAGA,EAAE,MAAM,OAAS,CAAC,EACpD,OAAO,CAACuD,EAAOkmB,IAASlmB,EAAQkmB,CAAI,EACnC2gT,EAAOzR,GAAQ1lB,GAAQjzS,EAAG,CAC5BmqU,EAAenqU,EAAE,MAAMA,EAAE,MAAM,OAAS,CAAC,EACzCA,EAAE,MAAMA,EAAE,MAAM,OAAS,CAAC,CAC7B,GAAG,CAAC,EACCqqU,EAAO,CAAE,EACTC,EAAO,CAAE,EACfF,EAAK,QAAQG,GAAO,CAChB,KAAM,CAACC,EAAKC,CAAG,EAAIP,GAAKK,EAAKN,CAAY,EACzCI,EAAK,KAAKG,CAAG,EACbF,EAAK,KAAKG,CAAG,CACzB,CAAS,EACD,MAAM/qU,EAAIuzS,GAAQ/uQ,GAAMmmS,EAAM,CAAC,EAAGrqU,EAAE,KAAK,EACnCL,EAAIszS,GAAQ/uQ,GAAMomS,EAAM,CAAC,EAAGtqU,EAAE,KAAK,EACzC,MAAO,CAACN,EAAGC,CAAC,CACpB,CACA,CACA,SAASuqU,GAAKlqU,EAAGiqU,EAAe,GAAO,CACnC,OAAOttC,EAAO,KAAK,IAAM,CACrB90J,EAAO7nI,EAAE,MAAM,SAAW,EAAG,IAAM,0CAA0CA,EAAE,MAAM,MAAM,WAAW,EACtG,MAAMyB,EAAIzB,EAAE,MAAM,CAAC,EACbR,EAAIQ,EAAE,MAAM,CAAC,EACnB,IAAIN,EAAIiiT,GAAIlgT,CAAC,EACT9B,EAAI6pJ,GAAMxpJ,CAAC,EACf,MAAM0qU,EAAQjU,GAAS,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EACpC,IAAI12T,EAAIypJ,GAAMkhL,CAAK,EACnB,MAAMC,EAAQlpU,GAAKjC,EAAIA,EAAIiC,EAC3B,QAASw/Q,EAAI,EAAGA,EAAI0pD,EAAO,EAAE1pD,EAAG,CAG5B,MAAM2pD,EAAQjrU,EACRkrU,EAAQ9qU,EACR+qU,EAAQprU,EACd,CAACK,EAAGJ,EAAGD,CAAC,EAAIi9R,EAAO,KAAK,IAAM,CAE1B,MAAMouC,EAASz2B,GAAM30S,EAAG,CAACshR,EAAGA,CAAC,EAAG,CAACx/Q,EAAIw/Q,EAAG,CAAC,CAAC,EACpC+pD,EAAQvqB,GAAKsqB,CAAM,EACnBE,EAAM32B,GAAM30S,EAAG,CAACshR,EAAGA,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EAE7Bl+Q,EAAIg6S,GAAMoF,GAAQ8oB,EAAK,CAAC,EAAGxU,GAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAGA,GAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5DyU,EAAKjrE,GAAIgrE,EAAK12C,GAAIxxR,EAAGioU,CAAK,CAAC,EAC3BG,EAAOx5C,GAAIo5C,EAAQG,CAAE,EACvBC,EAAK,MAAM,CAAC,IAAM,EAClBprU,EAAIypJ,GAAMkhL,CAAK,EAGf3qU,EAAI8zS,GAAO,CACP62B,EACAp2B,GAAM62B,EAAM,CAAC,EAAG,CAAC,EAAG,CAACA,EAAK,MAAM,CAAC,EAAI,EAAGA,EAAK,MAAM,CAAC,CAAC,CAAC,CACzD,EAAE,CAAC,EAER,MAAMC,EAAM/mB,GAAI1yB,GAAIsiB,GAAOlxS,EAAGmoU,CAAE,EAAGF,CAAK,CAAC,EAEnCK,EAAW/2B,GAAM30S,EAAG,CAACshR,EAAG,CAAC,EAAG,CAACx/Q,EAAIw/Q,EAAGzhR,CAAC,CAAC,EACtC8rU,EAAY/2C,GAAI62C,EAAKrrU,CAAC,EACtBwrU,EAAKvR,GAAUj6T,CAAC,EACtB,GAAIkhR,IAAM,EACNthR,EAAIsgQ,GAAIorE,EAAUp3B,GAAOq3B,EAAWr3B,GAAOs3B,EAAIF,CAAQ,CAAC,CAAC,MAExD,CACD,MAAMG,EAAYvrE,GAAIorE,EAAUp3B,GAAOq3B,EAAWr3B,GAAOs3B,EAAIF,CAAQ,CAAC,CAAC,EACvE1rU,EAAIk0S,GAAO,CAACS,GAAM30S,EAAG,CAAC,EAAG,CAAC,EAAG,CAACshR,EAAGzhR,CAAC,CAAC,EAAGgsU,CAAS,EAAG,CAAC,CACvE,CACgB,MAAMC,EAAazR,GAAUsR,CAAS,EAChCI,EAAWp3B,GAAM50S,EAAG,CAAC,EAAGuhR,CAAC,EAAG,CAACx/Q,EAAG/B,EAAE,MAAM,CAAC,EAAIuhR,CAAC,CAAC,EACrD,GAAIA,IAAM,EACNvhR,EAAIugQ,GAAIyrE,EAAUz3B,GAAOA,GAAOy3B,EAAU3rU,CAAC,EAAG0rU,CAAU,CAAC,MAExD,CACD,MAAME,EAAY1rE,GAAIyrE,EAAUz3B,GAAOA,GAAOy3B,EAAU3rU,CAAC,EAAG0rU,CAAU,CAAC,EACvE/rU,EAAIm0S,GAAO,CAACS,GAAM50S,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC+B,EAAGw/Q,CAAC,CAAC,EAAG0qD,CAAS,EAAG,CAAC,CACvE,CACgB,MAAO,CAAC5rU,EAAGJ,EAAGD,CAAC,CAC/B,CAAa,EACD+4P,GAAQ,CAACmyE,EAAOC,EAAOC,CAAK,CAAC,CACzC,CACQ,MAAI,CAACb,GAAgBxoU,EAAIjC,IACrBE,EAAI40S,GAAM50S,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC+B,EAAGjC,CAAC,CAAC,EAC3BG,EAAI20S,GAAM30S,EAAG,CAAC,EAAG,CAAC,EAAG,CAACH,EAAGA,CAAC,CAAC,GAExB,CAACE,EAAGC,CAAC,CACpB,CAAK,CACL,CACO,MAAMisU,IAAqB1nU,EAAG,CAAE,IAAA8lU,IAAK,EC9K5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,IAAI6B,IACV,SAAUA,EAAW,CAClBA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,IAAS,CAAC,EAAI,MAClCA,EAAUA,EAAU,uBAA4B,CAAC,EAAI,wBACzD,GAAGA,KAAcA,GAAY,GAAG,ECAhC,SAASC,IAAqBC,EAAQl1B,EAASm1B,EAAYH,GAAU,uBAAwB,CACzF,MAAMI,EAAUhrC,EAAgB8qC,EAAQ,SAAU,qBAAqB,EACvE,IAAIj1B,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,qBAAqB,GAExE,MAAMq1B,EAAgBp1B,GAAY,KAAQm1B,EAAU13C,GAAI03C,EAASn1B,CAAQ,EACzE,GAAIk1B,IAAcH,GAAU,KACxB,OAAOK,EAEX,GAAIF,IAAcH,GAAU,IACxB,OAAOvrB,GAAI4rB,CAAY,EAE3B,GAAIF,IAAcH,GAAU,KAAM,CAC9B,GAAI/0B,GAAY,KACZ,OAAOhB,GAAKo2B,CAAY,EAEvB,CACD,MAAMC,EAAkBF,EAAQ,KAAOn1B,EAAS,KAC1CjzS,EAAS8tR,GAAI2uB,GAAI4rB,CAAY,EAAG5rB,GAAIxJ,CAAQ,CAAC,EACnD,OAAOq1B,EAAkB,EAAIx6C,GAAI9tR,EAAQm8S,GAAOmsB,CAAe,CAAC,EAC5DtoU,CAChB,CACA,CACI,GAAImoU,IAAcH,GAAU,uBAAwB,CAChD,GAAI/0B,GAAY,KACZ,OAAOnlB,GAAI2uB,GAAI4rB,CAAY,EAAGlsB,GAAOisB,EAAQ,IAAI,CAAC,EAEjD,CACD,MAAMG,EAAqB73C,GAAIuiB,EAAUnX,GAAKssC,EAAQ,KAAK,CAAC,EACtDI,EAAcngC,GAAKoU,GAAIiI,GAAS6jB,EAAoBpsB,GAAO,CAAC,CAAC,CAAC,EAAG,SAAS,EAChF,OAAOruB,GAAI2uB,GAAI4rB,CAAY,EAAGG,CAAW,CACrD,CACA,CACI,MAAM,MAAM,sBAAsBL,CAAS,EAAE,CACjD,CACO,MAAMM,GAAsCpoU,EAAG,CAAE,qBAAA4nU,IAAsB,EC1D9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsCA,SAASS,IAAoBC,EAAQ1hM,EAAa+rK,EAASm1B,EAAYH,GAAU,uBAAwB,CACrG,MAAMY,EAAUxrC,EAAgBurC,EAAQ,SAAU,oBAAoB,EAChEpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,oBAAoB,EACrF,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,oBAAoB,GAEvEl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,+BAA+B,EACpF,MAAM2P,EAASj/B,GAAI7sC,GAAIwsE,EAASrQ,CAAY,CAAC,EAC7C,OAAOkQ,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMU,IAAqCxoU,EAAG,CAAE,oBAAAqoU,IAAqB,ECxB5E,SAASI,IAAgBH,EAAQ1hM,EAAakrD,EAAM6gH,EAASm1B,EAAYH,GAAU,uBAAwB,CACvG,MAAMY,EAAUxrC,EAAgBurC,EAAQ,SAAU,gBAAgB,EAC5DpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,gBAAgB,EACjF,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,gBAAgB,GAEnEl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,2BAA2B,EAChF,MAAM9B,EAAMta,GAAO,CAAC,EACd+rB,EAAS9rE,GAAIq6D,EAAKha,GAAI/rB,GAAIk4C,EAASrQ,CAAY,EAAGpmI,EAAM,EAAI,CAAC,EACnE,OAAOs2I,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMY,IAAiC1oU,EAAG,CAAE,gBAAAyoU,IAAiB,ECbpE,SAASE,IAAWL,EAAQ1hM,EAAa+rK,EAASm1B,EAAYH,GAAU,uBAAwB,CAC5F,IAAIY,EAAUxrC,EAAgBurC,EAAQ,SAAU,WAAW,EAC3D,MAAMpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,WAAW,EAC5E,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,WAAW,GAE9Dl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,sBAAsB,EAC3E,MAAM9B,EAAMta,GAAO,CAAC,EAEpBysB,EAAUxsE,GAAIs0B,GAAIyrB,GAAO,CAAC,EAAGysB,CAAO,EAAGnS,CAAG,EAC1C,MAAMyR,EAAS5a,GAAKlxD,GAAIq6D,EAAK/lC,GAAIk4C,EAASrQ,CAAY,CAAC,CAAC,EACxD,OAAOkQ,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMc,IAA4B5oU,EAAG,CAAE,WAAA2oU,IAAY,ECtC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4CA,SAASE,IAAWP,EAAQ1hM,EAAa+rK,EAASz5O,EAAQ,EAAK4uQ,EAAYH,GAAU,uBAAwB,CACzG,MAAMY,EAAUxrC,EAAgBurC,EAAQ,SAAU,WAAW,EACvDpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,WAAW,EAC5E,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,WAAW,GAE9Dl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,sBAAsB,EAC3E,MAAM4Q,EAAchtB,GAAO5iP,CAAK,EAC1B74D,EAAQuoS,GAAI7sC,GAAIm8D,EAAcqQ,CAAO,CAAC,EACtCQ,EAAY9lB,GAAQ5iT,EAAOyoU,CAAW,EACtCE,EAASjtE,GAAI17P,EAAO0oU,CAAS,EAC7BlB,EAAS/4S,GAAIuhQ,GAAIyrB,GAAO,EAAG,EAAGI,GAAO6sB,CAAS,CAAC,EAAG14C,GAAIy4C,EAAaE,CAAM,CAAC,EAChF,OAAOZ,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMmB,IAA4BjpU,EAAG,CAAE,WAAA6oU,IAAY,EC3D1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2CA,SAASK,IAASZ,EAAQ1hM,EAAa+rK,EAASw2B,EAAU,KAAMrB,EAAYH,GAAU,uBAAwB,CAC1G,MAAMY,EAAUxrC,EAAgBurC,EAAQ,SAAU,SAAS,EACrDpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,SAAS,EAC1E,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,SAAS,GAE5Dl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,oBAAoB,EACzE,MAAM9B,EAAMta,GAAO,CAAC,EACdstB,EAAgBttB,GAAOqtB,CAAO,EAC9BE,EAAKlpB,GAAI9vB,GAAIk4C,EAAS53Q,GAAI7hC,GAAIopS,EAAckR,CAAa,CAAC,CAAC,CAAC,EAC5DE,EAAKj5C,GAAIt0B,GAAIq6D,EAAKmS,CAAO,EAAG53Q,GAAI7hC,GAAIitO,GAAIq6D,EAAK8B,CAAY,EAAGkR,CAAa,CAAC,CAAC,EAC3EvB,EAAS9rE,GAAIstE,EAAIC,CAAE,EACzB,OAAOlB,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMyB,IAA0BvpU,EAAG,CAAE,SAAAkpU,IAAU,EC1DtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCA,SAASM,IAAkBlB,EAAQ1hM,EAAa+rK,EAASm1B,EAAYH,GAAU,uBAAwB,CACnG,MAAMY,EAAUxrC,EAAgBurC,EAAQ,SAAU,kBAAkB,EAC9DpQ,EAAen7B,EAAgBn2J,EAAa,cAAe,kBAAkB,EACnF,IAAIgsK,EAAW,KACXD,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,kBAAkB,GAErEl3B,GAAkB8sD,EAAQ,MAAOrQ,EAAa,MAAO,6BAA6B,EAClF,MAAM2P,EAASrW,GAAkB+W,EAASrQ,CAAY,EACtD,OAAOkQ,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAM2B,IAAmCzpU,EAAG,CAAE,kBAAAwpU,IAAmB,EChDxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BA,SAASE,IAA+BpB,EAAQ5nB,EAAQ,CACpD,MAAM6nB,EAAUxrC,EAAgBurC,EAAQ,SAAU,+BAA+B,EAC3E3nB,EAAU5jB,EAAgB2jB,EAAQ,SAAU,+BAA+B,EACjFjlC,GAAkB8sD,EAAQ,MAAO5nB,EAAQ,MAAO,0CAA0C,EAqB1F,MAAM7tE,EAAYm6E,GAAKtM,CAAO,EACxBgpB,EAAgBt5C,GAAIswB,EAAS4nB,CAAO,EACpCqB,EAAgBnqB,GAAM/D,GAAIyE,GAAIvX,GAAI+X,CAAO,CAAC,CAAC,CAAC,EAClD,OAAO7xR,GAAIitO,GAAIjpB,EAAW62F,CAAa,EAAGC,CAAa,CAC3D,CAsBA,SAASC,IAAqBC,EAAkBppB,EAAQ/N,EAASo3B,EAAiB,EAAGjC,EAAYH,GAAU,uBAAwB,CAC/H,IAAIqC,EAAoBjtC,EAAgB+sC,EAAkB,mBAAoB,qBAAqB,EACnG,MAAMnpB,EAAU5jB,EAAgB2jB,EAAQ,SAAU,qBAAqB,EACvE,IAAI9N,EAAW,KAKf,GAJID,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,qBAAqB,GAExEl3B,GAAkBuuD,EAAkB,MAAOrpB,EAAQ,MAAO,gCAAgC,EACtFopB,EAAiB,EAAG,CACpB,MAAME,EAAuBnuB,GAAOiuB,CAAc,EAC5C3T,EAAMta,GAAO,CAAC,EACdmV,EAAOnV,GAAO,EAAG,EACvBkuB,EACIl7S,GAAIuhQ,GAAI25C,EAAmBjuE,GAAIq6D,EAAK6T,CAAoB,CAAC,EAAG55C,GAAI4gC,EAAMgZ,CAAoB,CAAC,CACvG,CACI,MAAMpC,EAAS6B,IAA+BM,EAAmBrpB,CAAO,EACxE,OAAOynB,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAMoC,IAAsClqU,EAAG,CAAE,qBAAA6pU,IAAsB,EClG9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0DA,SAASM,IAA+B7B,EAAQ5nB,EAAQ5I,EAAM,GAAI,CAI9D,GAHIA,IAAQ,KACRA,EAAM4I,EAAO,KAAO,GAEpB5I,IAAQ4I,EAAO,KAAO,EACtB,MAAM,MAAM,mGAC+BA,EAAO,IAAI,gBACnC5I,CAAG,EAAE,EAuB5B,OApBiBmI,GAAW,CAACqoB,EAAQ5nB,EAAQ7kB,IAAS,CAKlD,MAAMuuC,EAAMnpB,GAAUP,EAAQ,CAAC5I,CAAG,EAAG,EAAQ,EACvCuyB,EAAYtuE,GAAIisC,GAAK0Y,EAAQ,SAAS,EAAG0pB,CAAG,EAClDvuC,EAAK,CAACysC,EAAQ+B,CAAS,CAAC,EACxB,MAAMC,EAAanqB,GAAI9vB,GAAIg6C,EAAW/B,CAAM,CAAC,EAU7C,MAAO,CAAE,MATKlsB,GAAIkuB,EAAY,CAACxyB,CAAG,CAAC,EASnB,SARC,CAACnf,EAAIE,IAAU,CAC5B,KAAM,CAACyvC,EAAQ+B,CAAS,EAAIxxC,EACtB0xC,EAAUvvB,GAAqBriB,EAAG,MAAO,CAACmf,CAAG,CAAC,EACpD,MAAO,CACHznB,GAAI0e,GAAQpW,EAAI4xC,CAAO,EAAGxuE,GAAIisC,GAAKsgC,EAAQ,SAAS,EAAG5sB,GAAI2uB,CAAS,CAAC,CAAC,EACtEh6C,GAAI0e,GAAQpW,EAAI4xC,CAAO,EAAGxuE,GAAI2/C,GAAI2uB,CAAS,EAAGriC,GAAKsgC,EAAQ,SAAS,CAAC,CAAC,CACzE,CACJ,CACyB,CAClC,CAAK,EACeA,EAAQ5nB,CAAM,CAClC,CAoBA,SAAS8pB,IAAqBC,EAAc/pB,EAAQ/N,EAASo3B,EAAiB,EAAGjC,EAAYH,GAAU,uBAAwB,CAC3H,IAAI+C,EAAgB3tC,EAAgB0tC,EAAc,eAAgB,qBAAqB,EACvF,MAAM9pB,EAAU5jB,EAAgB2jB,EAAQ,SAAU,qBAAqB,EACvE,IAAI9N,EAAW,KAKf,GAJID,GAAW,OACXC,EAAW7V,EAAgB4V,EAAS,UAAW,qBAAqB,GAExEl3B,GAAkBivD,EAAc,MAAO/pB,EAAQ,MAAO,gCAAgC,EAClFopB,EAAiB,EAAG,CACpB,MAAME,EAAuBnuB,GAAOiuB,CAAc,EAC5C3T,EAAMta,GAAO,CAAC,EACd6uB,EAAa7uB,GAAO4uB,EAAc,MAAM,CAAC,CAAC,EAChDA,EACI57S,GAAIuhQ,GAAIq6C,EAAe3uE,GAAIq6D,EAAK6T,CAAoB,CAAC,EAAGx8C,GAAIw8C,EAAsBU,CAAU,CAAC,CACzG,CACI,MAAM9C,EAASsC,IAA+BO,EAAe/pB,CAAO,EACpE,OAAOynB,GAAoBP,EAAQj1B,EAAUk1B,CAAS,CAC1D,CACO,MAAM8C,IAAsC5qU,EAAG,CAAE,qBAAAwqU,IAAsB,EC/H9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4EA,SAASK,IAAqBruC,EAAS3zP,EAAQiiS,EAAY7hT,EAAc,CACrE,MAAM60R,EAAW/gB,EAAgBP,EAAS,UAAW,sBAAuB,OAAO,EAC7EslB,EAAU/kB,EAAgBl0P,EAAQ,SAAU,qBAAqB,EACjEkiS,EAAchuC,EAAgB+tC,EAAY,aAAc,sBAAuB,OAAO,EACtFliB,EAAgB7rB,EAAgB9zQ,EAAc,eAAgB,sBAAuB64R,EAAQ,KAAK,EACxG,GAAIhE,EAAS,OAAS,EAClB,MAAM,IAAI,MAAM;AAAA,UACdA,EAAS,KAAK,EAAE,EAEtB,GAAIgE,EAAQ,OAAS,EACjB,MAAM,IAAI,MAAM,gDAAgDA,EAAQ,KAAK,EAAE,EAEnF,GAAIipB,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,qDAAqDA,EAAY,KAAK,EAAE,EAE5F,GAAIniB,EAAc,OAAS,EACvB,MAAM,IAAI,MAAM,uDAAuDA,EAAc,KAAK,EAAE,EAEhG,MAAMh3B,EAAS,CACX,QAASksB,EACT,OAAQgE,EACR,WAAYipB,EACZ,aAAcniB,CACjB,EACKjpT,EAAS84R,EAAO,UAAU5P,GAAqB+I,CAAM,EAC3D,MAAO,CACH,cAAejyR,EAAO,CAAC,EACvB,aAAcA,EAAO,CAAC,EACtB,kBAAmBA,EAAO,CAAC,EAC3B,gBAAiBA,EAAO,CAAC,CAC5B,CACL,CACO,MAAMqrU,IAAsChrU,EAAG,CAAE,qBAAA6qU,IAAsB,EC5G9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsDA,SAASI,IAAeC,EAAcx4C,EAAYlW,EAAU,CACxD,MAAM2uD,EAAgBpuC,EAAgBmuC,EAAc,eAAgB,gBAAiB,OAAO,EACtFE,EAAcruC,EAAgBrK,EAAY,aAAc,gBAAiB,OAAO,EAChF24C,EAAYtuC,EAAgBvgB,EAAU,WAAY,gBAAiB,OAAO,EAChF,GAAI2uD,EAAc,OAAS,EACvB,MAAM,IAAI,MAAM;AAAA,UACdA,EAAc,KAAK,EAAE,EAE3B,GAAIC,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM,qDAAqDA,EAAY,KAAK,EAAE,EAE5F,GAAIC,EAAU,OAAS,EACnB,MAAM,IAAI,MAAM,mDAAmDA,EAAU,KAAK,EAAE,EAExF,MAAMz5C,EAAS,CACX,aAAcu5C,EACd,WAAYC,EACZ,SAAUC,CACb,EACK1rU,EAAS84R,EAAO,UAAU3P,GAAe8I,CAAM,EACrD,MAAO,CAAE,cAAejyR,EAAO,CAAC,EAAG,YAAaA,EAAO,CAAC,CAAG,CAC/D,CACO,MAAM2rU,IAAgCtrU,EAAG,CAAE,eAAAirU,IAAgB,EC5ElE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsDA,SAASM,IAAmB71T,EAAM8mR,EAAS43B,EAAY,CACnD,MAAMtjB,EAAQ/T,EAAgBrnR,EAAM,OAAQ,mBAAmB,EACzDooS,EAAW/gB,EAAgBP,EAAS,UAAW,oBAAqB,OAAO,EAC3E83B,EAAcv3B,EAAgBq3B,EAAY,aAAc,oBAAqB,OAAO,EAC1F,GAAItjB,EAAM,KAAO,EACb,MAAM,IAAI,MAAM,2DAA2D,EAE/E,GAAIgN,EAAS,OAAS,EAClB,MAAM,IAAI,MAAM;AAAA,YACZA,EAAS,KAAK,EAAE,EAExB,GAAIwW,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM;AAAA,YACZA,EAAY,KAAK,EAAE,EAE3B,MAAM1iC,EAAS,CACX,KAAMkf,EACN,QAASgN,EACT,WAAYwW,CACf,EACD,OAAO77B,EAAO,UAAU1P,GAAmB6I,CAAM,CACrD,CACO,MAAM45C,IAAoCxrU,EAAG,CAAE,mBAAAurU,IAAoB,EC5E1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsDA,SAASE,IAAkB/1T,EAAM8mR,EAAS43B,EAAY,CAClD,MAAMtjB,EAAQ/T,EAAgBrnR,EAAM,OAAQ,kBAAkB,EACxDooS,EAAW/gB,EAAgBP,EAAS,UAAW,mBAAoB,OAAO,EAC1E83B,EAAcv3B,EAAgBq3B,EAAY,aAAc,mBAAoB,OAAO,EACzF,GAAItjB,EAAM,KAAO,EACb,MAAM,IAAI,MAAM,2DAA2D,EAE/E,GAAIgN,EAAS,OAAS,EAClB,MAAM,IAAI,MAAM;AAAA,WACbA,EAAS,KAAK,EAAE,EAEvB,GAAIwW,EAAY,OAAS,EACrB,MAAM,IAAI,MAAM;AAAA,WACbA,EAAY,KAAK,EAAE,EAE1B,MAAM1iC,EAAS,CACX,KAAMkf,EACN,QAASgN,EACT,WAAYwW,CACf,EACD,OAAO77B,EAAO,UAAUzP,GAAkB4I,CAAM,CACpD,CACO,MAAM85C,IAAmC1rU,EAAG,CAAE,kBAAAyrU,IAAmB,EC5ExE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6DA,SAASE,IAAcj2T,EAAMk2T,EAAY3nS,EAAW4nS,EAAaC,EAAS1vD,EAAU2vD,EAAUC,EAAwB,CAClH,MAAMl7B,EAAQ/T,EAAgBrnR,EAAM,OAAQ,eAAgB,QAAQ,EACpE,GAAIo7R,EAAM,QAAU,SAChB,MAAM,IAAI,MAAM,iCAAiC,EAErD,GAAIA,EAAM,MAAM,SAAW,EACvB,MAAM,IAAI,MAAM,+BAA+BA,EAAM,KAAK,EAAE,EAEhE,MAAMm7B,EAAclvC,EAAgB6uC,EAAY,aAAc,cAAc,EAC5E,GAAIK,EAAY,QAAU,QACtB,MAAM,IAAI,MAAM,uCAAuC,EAE3D,MAAMjiJ,EAAQ,CACV,UAAA/lJ,EACA,YAAA4nS,EACA,QAAAC,EACA,SAAA1vD,EACA,SAAA2vD,EACA,uBAAAC,CACH,EACKp6C,EAAS,CAAE,KAAMkf,EAAO,WAAYm7B,CAAa,EACjDtsU,EAAS84R,EAAO,UAAUnP,GAAcsI,EAAQ5nG,CAAK,EAC3D,MAAO,CAAE,OAAQrqL,EAAO,CAAC,EAAG,aAAcA,EAAO,CAAC,CAAG,CACzD,CACO,MAAMusU,IAA+BlsU,EAAG,CAAE,cAAA2rU,IAAe,ECrFhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoDA,SAASQ,IAAazwT,EAAOupB,EAAWmnS,EAAY,GAAM,CACtD,MAAMC,EAAStvC,EAAgBrhR,EAAO,QAAS,cAAe,QAAQ,EAChE4wT,EAAavvC,EAAgB93P,EAAW,YAAa,cAAe,QAAQ,EAClF,GAAIonS,EAAO,OAAS,EAChB,MAAM,IAAI,MAAM,+CAA+CA,EAAO,KAAK,EAAE,EAEjF,GAAIC,EAAW,OAAS,EACpB,MAAM,IAAI,MAAM,mDAAmDA,EAAW,KAAK,EAAE,EAEzF,MAAMtiJ,EAAQ,CAAE,UAAAoiJ,CAAW,EACrBx6C,EAAS,CAAE,MAAOy6C,EAAQ,UAAWC,CAAY,EACjD3sU,EAAS84R,EAAO,UAAUlP,GAAaqI,EAAQ5nG,CAAK,EAC1D,MAAO,CAAE,QAASrqL,EAAO,CAAC,EAAG,OAAQA,EAAO,CAAC,EAAG,MAAOA,EAAO,CAAC,CAAG,CACtE,CACO,MAAM4sU,IAA8BvsU,EAAG,CAAE,aAAAmsU,IAAc,EClE9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyCA,SAASK,IAAwB9wT,EAAO+wT,EAAY,CAChD,MAAMJ,EAAStvC,EAAgBrhR,EAAO,QAAS,yBAA0B,QAAQ,EAC3EsuK,EAAQ,CAAE,WAAAyiJ,CAAY,EAC5B,GAAIA,GAAc,EACd,MAAM,IAAI,MAAM,sCAAsC,EAE1D,MAAM76C,EAAS,CAAE,MAAOy6C,CAAQ,EAChC,OAAO5zC,EAAO,UAAUjP,GAAwBoI,EAAQ5nG,CAAK,CACjE,CACO,MAAM0iJ,IAAyC1sU,EAAG,CAAE,wBAAAwsU,IAAyB,EClDpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuCA,SAASG,IAAoBjxT,EAAO0pB,EAAS+jI,EAASyjK,EAAgB,GAAM,CACxE,MAAMP,EAAStvC,EAAgBrhR,EAAO,QAAS,qBAAsB,QAAQ,EACvEsuK,EAAQ,CAAE,QAAA5kJ,EAAS,QAAA+jI,EAAS,cAAAyjK,CAAe,EACjD,OAAOn0C,EAAO,UAAUrP,GAAoB,CAAE,EAAGijD,CAAQ,EAAEriJ,CAAK,CACpE,CACO,MAAM6iJ,IAAqC7sU,EAAG,CAAE,oBAAA2sU,IAAqB,EC5C5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoOA,MAAMG,IAAW,CACjB,IAAI/c,GACJ,KAAIE,GACA,KAAAqB,GACA,MAAAb,EACJ,EAMM/vS,IAAS,CACX,cAAA66S,IACA,WAAAE,GACA,MAAAj7R,GACA,KAAA27R,GACJ,EAiBMpjP,GAAQ,CACd,cAAIgkP,IACA,eAAAI,IACJ,sBAAIyF,IACJ,eAAIF,IACA,eAAAjF,IACJ,iBAAIK,IACJ,cAAIjB,IACA,kBAAA0B,IACA,uBAAAkD,IACA,2BAAAE,IACA,gCAAAE,IACA,wBAAAK,IACA,6BAAAE,IACJ,UAAIx6R,IACAkhJ,aACJ,EAKMikJ,IAAS,CACX,SAAAxH,IACA,YAAAM,IACA,GAAA6B,GACJ,EAWMG,IAAS,CACX,mBAAAW,IACA,oBAAAJ,GACA,eAAAM,IACA,UAAAE,IACA,UAAAK,IACA,QAAAM,IACA,iBAAAE,IACA,oBAAAS,IACA,oBAAAU,GACJ,EAKMoC,IAAS,CACf,oBAAIhC,IACJ,cAAIM,IACJ,kBAAIE,IACAE,oBACJ,EAMMnqH,IAAS,CACf,aAAI2qH,IACJ,YAAIK,IACJ,uBAAIG,IACJ,mBAAIG,GACJ,ECxUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkCA,MAAMI,IAAuB,IAAI,IAC3BC,IAAsB,IAAI,IAOzB,MAAMC,GAAa,CAYtB,cAAe,CACX,OAAO,KAAK,YACP,SACb,CAUI,OAAO,WAAWnrG,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,CAAM,CAC7B,CACA,CAQO,MAAMmrU,EAAiB,CAC1B,aAAc,CACV,KAAK,aAAe,CAAE,CAC9B,CAII,OAAO,QAAS,CACZ,OAAIA,GAAiB,UAAY,OAC7BA,GAAiB,SAAW,IAAIA,IAE7BA,GAAiB,QAChC,CAII,OAAO,SAASprG,EAAK,CACjBorG,GAAiB,OAAQ,EAAC,aAAaprG,EAAI,SAAS,EAChD,CAACA,EAAKA,EAAI,UAAU,CAChC,CACA,CA2EO,SAASqrG,IAAcrrG,EAAKsrG,EAAKhnU,EAAM,CAC1Cq9H,EAAOq+F,EAAI,WAAa,KAAM,IAAM,6EACb,EACvBr+F,EAAO,OAAOq+F,EAAI,WAAc,SAAU,IAAM,sDAC5C,OAAOA,EAAI,SAAS,EACxBr+F,EAAOq+F,EAAI,UAAU,OAAS,EAAG,IAAM,mFACb,EACtB,OAAOsrG,EAAQ,MACfA,EAAM,UAEN,OAAOhnU,EAAS,MAChBA,EAAO07N,EAAI,WAEf,MAAMv/L,EAAYn8B,EACZinU,EAAeD,EAAM,IAAM7qS,EACjC,OAAA2qS,GAAiB,SAASprG,CAAG,EAC7BirG,IAAqB,IAAIM,EAAcvrG,CAAG,EAC1CkrG,IAAoB,IAAIlrG,EAAKurG,CAAY,EAClCvrG,CACX,CChMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBO,MAAMwrG,WAAkBL,GAAa,CAexC,SAAS7vU,EAAGmwU,EAAa,GAAO9tB,EAAS,CACrC,KAAM,CAAE,MAAAtgT,EAAO,MAAAq8R,CAAO,EAAG,KAAK,iBAAiBp+R,EAAGqiT,CAAO,EACzD,GAAIA,GAAW,KAAM,CACjB,MAAM+tB,EAAY/tB,EAAQ,IAAI/jT,IAAM,CAAE,KAAMA,EAAE,KAAM,OAAQ8/R,EAAM9/R,EAAE,IAAI,CAAG,EAAC,EAC5E,KAAK,eAAe8xU,CAAS,CACzC,MAEY,KAAK,eAAehyC,CAAK,EAI7B,OADAnnC,GAAQmnC,CAAK,EACT+xC,EACOpuU,GAGPA,EAAM,QAAS,EACR,KAEnB,CAII,IAAI,YAAa,CACb,OAAI,KAAK,aAAe,OACpB,KAAK,YAAc,GAEhB,KAAK,WACpB,CACI,qBAAsB,CAClB,KAAK,YAAc,KAAK,WAAa,CAC7C,CAcI,iBAAiB/B,EAAGqiT,EAAS,CACzB,OAAOD,IAAcpiT,EAAGqiT,CAAO,CACvC,CAII,SAAU,CACF,KAAK,aAAe,MACpBprD,GAAQ,KAAK,WAAW,CAEpC,CACI,MAAM,gBAAiB,CACnB,OAAI,KAAK,aAAe,OACpB,KAAK,YAAc,GAEhB,CACH,KAAM,OAEN,OAAQunD,GAAO,KAAK,YAAa,OAAO,CAC3C,CACT,CACI,MAAM,YAAa,CACf,MAAM,IAAI,MAAM,yDAAyD,CACjF,CACI,MAAM,WAAW6xB,EAAc,CAC3B,MAAM,IAAI,MAAM,4DACT,KAAK,aAAc,GAAE,CACpC,CAQI,MAAM,kBAAkBA,EAAc,CAClC,YAAK,aAAe,MAAMA,EAAa,CAAC,EAAE,OAAO,KAAM,GAAE,CAAC,EACnDA,EAAa,MAAM,CAAC,CACnC,CACA,CACA,OAAO,eAAeH,GAAW,OAAO,YAAa,CACjD,MAAQr5T,GACGA,EAAS,UAAY,MAAQA,EAAS,kBAAoB,MAC7DA,EAAS,gBAAkB,IAEvC,CAAC,EC7HD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BO,MAAMy5T,YAA0BJ,EAAU,CAE7C,WAAW,WAAY,CAInB,MAAO,UACf,CACI,YAAYK,EAAcC,EAAK3E,EAAU,KAAM,CAC3C,MAAO,EACP,KAAK,aAAe0E,EACpB,KAAK,IAAMC,EACX,KAAK,QAAU3E,EACf,KAAK,iBAAmB,CAAE,EAC1B,KAAK,mBAAqB,CAAE,EACxBA,GAAW,OACX,KAAK,QAAU1wC,EAAO,QAAQ,QAAS,EAEnD,CACI,eAAes1C,EAAmB,EACR,MAAM,QAAQA,CAAiB,EACjDA,EAAkB,IAAIprU,GAAQA,EAAK,IAAI,EACvC,OAAO,KAAKorU,CAAiB,GACnB,QAAQ,CAACznU,EAAMxH,IAAM,CAC/B,MAAMO,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACvCkwR,EAAY,GACd,KAAK,iBAAiB13R,CAAC,GAAK,OAC5B,KAAK,iBAAiBA,CAAC,EAAI,CACvB,aAAc,GAAGwH,CAAI,cACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAED,KAAK,mBAAmB13R,CAAC,GAAK,OAC9B,KAAK,mBAAmBA,CAAC,EAAI,CACzB,aAAc,GAAGwH,CAAI,aACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAEL,MAAMw3C,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkBjvU,CAAC,EAAE,OACrBivU,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAMC,EAAkB,KAAK,iBAAiBnvU,CAAC,EAAE,SAC3CovU,EAAoB,KAAK,mBAAmBpvU,CAAC,EAAE,SACrD60R,GAAK,IAAM,CACP,MAAMw6C,EAAqBr/S,GAAIuhQ,GAAI49C,EAAiB,KAAK,GAAG,EAAG59C,GAAI6rB,GAAO8xB,CAAQ,EAAG,EAAI,KAAK,GAAG,CAAC,EAC5F/rG,EAAUouD,GAAI5C,GAAIuuB,GAAKltR,GAAIo/S,EAAmB,KAAK,OAAO,CAAC,EAAGlyB,GAAKltR,GAAIm/S,EAAiB,KAAK,OAAO,CAAC,CAAC,EAAGD,CAAQ,EACjHI,EAAuBt/S,GAAIuhQ,GAAI69C,EAAmB,KAAK,GAAG,EAAG79C,GAAI6rB,GAAOj6E,CAAO,EAAG,EAAI,KAAK,GAAG,CAAC,EACrGgsG,EAAgB,OAAOE,CAAkB,EACzCD,EAAkB,OAAOE,CAAoB,EAC7C,MAAMhuP,EAAWtxD,GAAIuhQ,GAAIpuD,EAAS,CAAC,KAAK,YAAY,EAAG5iO,CAAK,EAC5DA,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,CACb,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACF,KAAK,oBAAsB,OAC3Bm0K,GAAQ,KAAK,iBAAiB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAClD24P,GAAQ,KAAK,mBAAmB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAEhE,CACI,MAAM,YAAa,CAEf,MAAMuhI,EAAY,CAAC,GAAG,KAAK,iBAAkB,GAAG,KAAK,kBAAkB,EACvE,MAAO,CAAC,MAAM,KAAK,eAAc,CAAE,EAAE,OAAOA,EAAU,IAAIvhI,IAAM,CAAE,KAAMA,EAAE,aAAc,OAAQA,EAAE,QAAU,EAAC,CAAC,CACtH,CACI,MAAM,WAAW+xU,EAAc,CAC3BA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACxD,MAAMU,EAAgBV,EAAa,OAAS,EACtCn3C,EAAY,GAClB,KAAK,iBACDm3C,EAAa,MAAM,EAAGU,CAAa,EAAE,IAAIzyU,IAAM,CAC3C,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,EACN,KAAK,mBACDm3C,EAAa,MAAMU,EAAeA,EAAgB,CAAC,EAC9C,IAAIzyU,IAAM,CACX,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,CACd,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,IAAO,KAAK,IACZ,QAAW,KAAK,OACnB,CACT,CAEI,OAAO,WAAWx0D,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,IAAQA,EAAO,OAAU,CAC/E,CACA,CC1HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BO,MAAMqsU,YAAyBd,EAAU,CAE5C,WAAW,WAAY,CAInB,MAAO,SACf,CACI,YAAYK,EAAcU,EAA0B,GAAK,CACrD,MAAO,EACP,KAAK,aAAeV,EACpB,KAAK,wBAA0BU,EAC/B,KAAK,iBAAmB,CAAE,CAClC,CACI,eAAeR,EAAmB,EACR,MAAM,QAAQA,CAAiB,EACjDA,EAAkB,IAAIprU,GAAQA,EAAK,IAAI,EACvC,OAAO,KAAKorU,CAAiB,GACnB,QAAQ,CAACznU,EAAMxH,IAAM,CAC/B,MAAMO,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACzC,KAAK,iBAAiBxH,CAAC,GAAK,OAE5B,KAAK,iBAAiBA,CAAC,EAAI,CACvB,aAAc,GAAGwH,CAAI,eACrB,SAAUqtR,GAAK,IAAMluP,GAAKpmC,EAAM,MAAO,KAAK,uBAAuB,EAC9D,SAAS,EAAS,CAAC,CAC3B,GAEL,MAAM2uU,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkBjvU,CAAC,EAAE,OACrBivU,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAMC,EAAkB,KAAK,iBAAiBnvU,CAAC,EAAE,SACjD60R,GAAK,IAAM,CACP,MAAMw6C,EAAqBr/S,GAAIm/S,EAAiB/xB,GAAO8xB,CAAQ,CAAC,EAChEC,EAAgB,OAAOE,CAAkB,EACzC,MAAM/tP,EAAWtxD,GAAIuhQ,GAAI5C,GAAIugD,EAAUhyB,GAAKltR,GAAIq/S,EAAoB11C,EAAO,QAAQ,QAAO,CAAE,CAAC,CAAC,EAAG,CAAC,KAAK,YAAY,EAAGp5R,CAAK,EAC3HA,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,CACb,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACF,KAAK,kBAAoB,MACzBm0K,GAAQ,KAAK,iBAAiB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,CAE9D,CACI,MAAM,YAAa,CAEf,MAAO,CAAC,MAAM,KAAK,eAAc,CAAE,EAAE,OAAO,KAAK,iBAAiB,IAAIA,IAAM,CAAE,KAAMA,EAAE,aAAc,OAAQA,EAAE,QAAU,EAAC,CAAC,CAClI,CACI,MAAM,WAAW+xU,EAAc,CAC3BA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACxD,MAAMn3C,EAAY,GAClB,KAAK,iBAAmBm3C,EAAa,IAAI/xU,IAAM,CAAE,aAAcA,EAAE,KAAM,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CAAC,EAAG,CACxH,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,wBAA2B,KAAK,uBACnC,CACT,CAEI,OAAO,WAAWx0D,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,uBAA0B,CAChF,CACA,CC9FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4BO,MAAMusU,YAAsBhB,EAAU,CAEzC,WAAW,WAAY,CAInB,MAAO,MACf,CACI,YAAYK,EAAcY,EAAOC,EAAOvF,EAAU,KAAM,CACpD,MAAO,EACP,KAAK,aAAe0E,EACpB,KAAK,MAAQY,EACb,KAAK,MAAQC,EACb,KAAK,QAAUvF,EACf,KAAK,uBAAyB,CAAE,EAChC,KAAK,wBAA0B,CAAE,EACjCx1C,GAAK,IAAM,CAEP,KAAK,SAAWmoB,GAAO2yB,CAAK,EAAE,SAAU,EACxC,KAAK,SAAW3yB,GAAO4yB,CAAK,EAAE,SAAU,CACpD,CAAS,EACGvF,GAAW,OACX,KAAK,QAAU1wC,EAAO,QAAQ,QAAS,EAEnD,CACI,eAAes1C,EAAmB,CAC9B,MAAMY,EAAW,MAAM,QAAQZ,CAAiB,EAC5CA,EAAkB,IAAInyU,GAAKA,EAAE,IAAI,EACjC,OAAO,KAAKmyU,CAAiB,EACjCp6C,GAAK,IAAM,CACP,MAAMi7C,EAAmB7yE,GAAI,EAAG,KAAK,QAAQ,EACvC8yE,EAAmB9yE,GAAI,EAAG,KAAK,QAAQ,EAC7C4yE,EAAS,QAAQ,CAACroU,EAAM,IAAM,CAC1B,MAAMjH,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACvCkwR,EAAY,GACd,KAAK,uBAAuB,CAAC,GAAK,OAClC,KAAK,uBAAuB,CAAC,EAAI,CAC7B,aAAc,GAAGlwR,CAAI,KACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAED,KAAK,wBAAwB,CAAC,GAAK,OACnC,KAAK,wBAAwB,CAAC,EAAI,CAC9B,aAAc,GAAGlwR,CAAI,KACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAEL,MAAMw3C,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkB,CAAC,EAAE,OACrBA,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAMc,EAAc,KAAK,uBAAuB,CAAC,EAAE,SAC7CC,EAAe,KAAK,wBAAwB,CAAC,EAAE,SAC/CC,EAAiBlgT,GAAIuhQ,GAAIy+C,EAAa,KAAK,KAAK,EAAGz+C,GAAI29C,EAAU,EAAI,KAAK,KAAK,CAAC,EAChFiB,EAAkBngT,GAAIuhQ,GAAI0+C,EAAc,KAAK,KAAK,EAAG1+C,GAAI6rB,GAAO8xB,CAAQ,EAAG,EAAI,KAAK,KAAK,CAAC,EAC1FkB,EAA2BzhD,GAAIuhD,EAAgBJ,CAAgB,EAC/DO,EAA4B1hD,GAAIwhD,EAAiBJ,CAAgB,EACvEC,EAAY,OAAOE,CAAc,EACjCD,EAAa,OAAOE,CAAe,EACnC,MAAM7uP,EAAWtxD,GAAIuhQ,GAAI5C,GAAIyhD,EAA0BpgT,GAAIktR,GAAKmzB,CAAyB,EAAG,KAAK,OAAO,CAAC,EAAG,CAAC,KAAK,YAAY,EAAG9vU,CAAK,EACtIA,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,EACD,KAAK,SAAS,OAAOiwM,GAAI,KAAK,SAAU,KAAK,KAAK,CAAC,EACnD,KAAK,SAAS,OAAOA,GAAI,KAAK,SAAU,KAAK,KAAK,CAAC,CAC/D,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACN,KAAK,SAAS,QAAS,EACvB,KAAK,SAAS,QAAS,EACnB,KAAK,wBAA0B,MAC/B97B,GAAQ,KAAK,uBAAuB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAExD,KAAK,yBAA2B,MAChC24P,GAAQ,KAAK,wBAAwB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,CAErE,CACI,MAAM,YAAa,CAEf,MAAMuhI,EAAY,CAAC,GAAG,KAAK,uBAAwB,GAAG,KAAK,uBAAuB,EAClF,MAAO,CAAC,MAAM,KAAK,eAAc,CAAE,EAAE,OAAOA,EAAU,IAAIvhI,IAAM,CAAE,KAAMA,EAAE,aAAc,OAAQA,EAAE,QAAU,EAAC,CAAC,CACtH,CACI,MAAM,WAAW+xU,EAAc,CAC3BA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACxDh6C,GAAK,IAAM,CACP,KAAK,SAAS,OAAOkoB,GAAI,KAAK,MAAO,KAAK,YAAc,CAAC,CAAC,EAC1D,KAAK,SAAS,OAAOA,GAAI,KAAK,MAAO,KAAK,YAAc,CAAC,CAAC,CACtE,CAAS,EACD,MAAMwyB,EAAgBV,EAAa,OAAS,EACtCn3C,EAAY,GAClB,KAAK,uBACDm3C,EAAa,MAAM,EAAGU,CAAa,EAAE,IAAIzyU,IAAM,CAC3C,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,EACN,KAAK,wBACDm3C,EAAa,MAAMU,EAAeA,EAAgB,CAAC,EAC9C,IAAIzyU,IAAM,CACX,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,CACd,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,MAAS,KAAK,MACd,MAAS,KAAK,MACd,QAAW,KAAK,OACnB,CACT,CAEI,OAAO,WAAWx0D,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,MAAUA,EAAO,MAAUA,EAAO,OAAU,CAClG,CACA,CChJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BO,MAAMmtU,YAAwB5B,EAAU,CAE3C,WAAW,WAAY,CAInB,MAAO,QACf,CACI,YAAYK,EAAcY,EAAOC,EAAOvF,EAAU,KAAMnT,EAAQ,EAAK,CACjE,MAAO,EACP,KAAK,aAAe6X,EACpB,KAAK,MAAQY,EACb,KAAK,MAAQC,EACb,KAAK,QAAUvF,EACf,KAAK,MAAQnT,EACb,KAAK,uBAAyB,CAAE,EAChC,KAAK,2BAA6B,CAAE,EACpCriC,GAAK,IAAM,CACP,KAAK,UAAYmoB,GAAO,CAAC,EAAE,SAAU,EACrC,KAAK,SAAWA,GAAO2yB,CAAK,EAAE,SAAU,CACpD,CAAS,EACGtF,GAAW,OACX,KAAK,QAAU1wC,EAAO,QAAQ,QAAS,EAEnD,CACI,eAAes1C,EAAmB,CAC9B,MAAMsB,EAAgB,MAAM,QAAQtB,CAAiB,EACjDA,EAAkB,IAAIprU,GAAQA,EAAK,IAAI,EACvC,OAAO,KAAKorU,CAAiB,EACjCp6C,GAAK,IAAM,CACP,MAAMi7C,EAAmB7yE,GAAI,EAAG,KAAK,QAAQ,EACvCuzE,EAAK7hD,GAAI,CAAC,KAAK,aAAc3+P,GAAIuhQ,GAAI,KAAK,UAAW,KAAK,KAAK,EAAG,CAAC,CAAC,EAC1Eg/C,EAAc,QAAQ,CAAC/oU,EAAM,IAAM,CAC/B,MAAMjH,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACvCkwR,EAAY,GACd,KAAK,uBAAuB,CAAC,GAAK,OAClC,KAAK,uBAAuB,CAAC,EAAI,CAC7B,aAAc,GAAGlwR,CAAI,KACrB,SAAUyyS,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAChD,GAED,KAAK,2BAA2B,CAAC,GAAK,OACtC,KAAK,2BAA2B,CAAC,EAAI,CACjC,aAAc,GAAGlwR,CAAI,KACrB,SAAUyyS,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAChD,GAEL,MAAMw3C,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkB,CAAC,EAAE,OACrBA,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAMc,EAAc,KAAK,uBAAuB,CAAC,EAAE,SAC7CS,EAAkB,KAAK,2BAA2B,CAAC,EAAE,SACrDP,EAAiBlgT,GAAIuhQ,GAAIy+C,EAAa,KAAK,KAAK,EAAGz+C,GAAI29C,EAAU,EAAI,KAAK,KAAK,CAAC,EAChFwB,EAAMn/C,GAAIk/C,EAAiB,KAAK,KAAK,EACrCE,EAAM7mC,GAAIolC,CAAQ,EAClB0B,EAAqB9sB,GAAQ4sB,EAAKC,CAAG,EAC3CX,EAAY,OAAOE,CAAc,EACjCO,EAAgB,OAAOG,CAAkB,EACzC,MAAMtvP,EAAWtxD,GAAIuhQ,GAAI5C,GAAI6hD,EAAIV,CAAgB,EAAGnhD,GAAIuhD,EAAgBlgT,GAAI4gT,EAAoB,KAAK,OAAO,CAAC,CAAC,EAAGrwU,CAAK,EACtHA,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,EACD,KAAK,UAAU,OAAOtxD,GAAI,KAAK,UAAW,CAAC,CAAC,EAC5C,KAAK,SAAS,OAAOuhQ,GAAI,KAAK,SAAU,KAAK,KAAK,CAAC,CAC/D,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACN,KAAK,SAAS,QAAS,EACvB,KAAK,UAAU,QAAS,EACpB,KAAK,wBAA0B,MAC/B97B,GAAQ,KAAK,uBAAuB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAExD,KAAK,4BAA8B,MACnC24P,GAAQ,KAAK,2BAA2B,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,CAExE,CACI,MAAM,YAAa,CACf,MAAM,IAAI,MAAM,iDAAiD,CACzE,CACI,MAAM,WAAW+xU,EAAc,CAC3B,MAAM,IAAI,MAAM,iDAAiD,CACzE,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,MAAS,KAAK,MACd,MAAS,KAAK,MACd,QAAW,KAAK,QAChB,MAAS,KAAK,KACjB,CACT,CAEI,OAAO,WAAW3rG,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,MAAUA,EAAO,MAAUA,EAAO,QAAYA,EAAO,KAAQ,CACnH,CACA,CC7HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuBO,MAAM0tU,WAAqBnC,EAAU,CAExC,WAAW,WAAY,CAInB,MAAO,KACf,CACI,YAAYK,EAAc,CACtB,MAAO,EACP,KAAK,aAAeA,EACpB,KAAK,gBAAgBA,CAAY,CACzC,CACI,eAAeE,EAAmB,EACb,MAAM,QAAQA,CAAiB,EAC5CA,EAAkB,IAAInyU,GAAKA,EAAE,IAAI,EACjC,OAAO,KAAKmyU,CAAiB,GACxB,QAAQ,CAACznU,EAAMxH,IAAM,CAC1B,MAAMkvU,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkBjvU,CAAC,EAAE,OACrBivU,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAM3uU,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EAC7CqtR,GAAK,IAAM,CACP,MAAMvzM,EAAWtxD,GAAIuhQ,GAAI,KAAK,EAAG29C,CAAQ,EAAG3uU,CAAK,EACjDA,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,CACb,CAAS,EACD,KAAK,oBAAqB,CAClC,CAII,gBAAgBytP,EAAc,CAC1B,KAAK,aAAeA,EAChB,KAAK,GAAK,MACV,KAAK,EAAE,QAAS,EAEpB,KAAK,EAAIjoL,GAAKk2J,GAAO,CAAC+xB,CAAY,CAAC,CAC3C,CACI,SAAU,CACN,KAAK,EAAE,QAAS,CACxB,CACI,MAAM,YAAa,CACf,MAAO,CAAC,MAAM,KAAK,gBAAgB,CAC3C,CACI,MAAM,WAAWF,EAAc,CAE3B,GADAA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACpDA,EAAa,SAAW,EACxB,MAAM,IAAI,MAAM,+CAA+C,CAE3E,CACI,WAAY,CACR,MAAO,CAAE,aAAgB,KAAK,YAAc,CACpD,CAEI,OAAO,WAAW3rG,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,YAAe,CAC7C,CACA,CCpFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBO,MAAM2tU,YAA0BD,EAAa,CAGhD,WAAW,WAAY,CAInB,MAAO,UACf,CACI,YAAY9B,EAAcgC,EAAUC,EAAc,GAAO,CACrD,MAAMjC,CAAY,EAClB,KAAK,aAAeA,EACpB,KAAK,SAAWgC,EAChB,KAAK,YAAcC,EACnB,KAAK,cAAgB,CAAE,EACvB,KAAK,EAAIh0B,GAAO,KAAK,QAAQ,CACrC,CACI,eAAeiyB,EAAmB,EACR,MAAM,QAAQA,CAAiB,EACjDA,EAAkB,IAAIprU,GAAQA,EAAK,IAAI,EACvC,OAAO,KAAKorU,CAAiB,GACnB,QAAQ,CAACznU,EAAMxH,IAAM,CAC/B,MAAMO,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACzC,KAAK,cAAcxH,CAAC,GAAK,OAEzB,KAAK,cAAcA,CAAC,EAAI,CACpB,aAAc,GAAGwH,CAAI,YACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAAS,EAAS,CAAC,CAC5D,GAEL,MAAM0wU,EAAe,KAAK,cAAcjxU,CAAC,EAAE,SACrCkvU,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkBjvU,CAAC,EAAE,OACrBivU,EAAkBznU,CAAI,EACtB0nU,GAAY,MAGhBr6C,GAAK,IAAM,CACP,IAAIvzM,EACJ,MAAM4vP,EAAkBlhT,GAAIuhQ,GAAI,KAAK,EAAG0/C,CAAY,EAAG/B,CAAQ,EAC3D,KAAK,YACL5tP,EAAWtxD,GAAIuhQ,GAAI,KAAK,EAAGvhQ,GAAIk/S,EAAU39C,GAAI2/C,EAAiB,KAAK,CAAC,CAAC,CAAC,EAAG3wU,CAAK,EAG9E+gF,EAAWtxD,GAAIuhQ,GAAI,KAAK,EAAG2/C,CAAe,EAAG3wU,CAAK,EAEtD0wU,EAAa,OAAOC,CAAe,EACnC3wU,EAAM,OAAO+gF,CAAQ,CACrC,CAAa,CACb,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACN,KAAK,EAAE,QAAS,EACZ,KAAK,eAAiB,MACtBm0K,GAAQ,KAAK,cAAc,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,CAE3D,CAMI,YAAYi0U,EAAU,CAClB,KAAK,SAAWA,CACxB,CACI,MAAM,YAAa,CAEf,MAAO,CAAC,MAAM,KAAK,eAAc,CAAE,EAAE,OAAO,KAAK,cAAc,IAAIj0U,IAAM,CAAE,KAAMA,EAAE,aAAc,OAAQA,EAAE,QAAU,EAAC,CAAC,CAC/H,CACI,MAAM,WAAW+xU,EAAc,CAC3BA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACxD,MAAMn3C,EAAY,GAClB,KAAK,cAAgBm3C,EAAa,IAAI/xU,IAAM,CAAE,aAAcA,EAAE,KAAM,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CAAC,EAAG,CACrH,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,SAAY,KAAK,SACjB,YAAe,KAAK,WACvB,CACT,CAEI,OAAO,WAAWx0D,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,SAAaA,EAAO,WAAc,CACxF,CACA,CC9GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BO,MAAMguU,YAAyBzC,EAAU,CAE5C,WAAW,WAAY,CAInB,MAAO,SACf,CACI,YAAYK,EAAc7X,EAAQ,GAAK6Z,EAAW,EAAK1G,EAAU,KAAM+G,EAAW,GAAO,CAarF,GAZA,MAAO,EACP,KAAK,aAAerC,EACpB,KAAK,MAAQ7X,EACb,KAAK,SAAW6Z,EAChB,KAAK,QAAU1G,EACf,KAAK,uBAAyB,CAAE,EAChC,KAAK,mBAAqB,CAAE,EAC5B,KAAK,qBAAuB,CAAE,EAC9B,KAAK,SAAW+G,EACZ/G,GAAW,OACX,KAAK,QAAU1wC,EAAO,QAAQ,QAAS,GAEvCo1C,GAAgB,KAChB,MAAM,IAAI,MAAM,oDAAoD,CAEhF,CACI,eAAeE,EAAmB,EACR,MAAM,QAAQA,CAAiB,EACjDA,EAAkB,IAAIprU,GAAQA,EAAK,IAAI,EACvC,OAAO,KAAKorU,CAAiB,GACnB,QAAQ,CAACznU,EAAMxH,IAAM,CAC/B,MAAMO,EAAQo5R,EAAO,oBAAoBnyR,CAAI,EACvCkwR,EAAY,GACd,KAAK,uBAAuB13R,CAAC,GAAK,OAClC,KAAK,uBAAuBA,CAAC,EAAI,CAC7B,aAAc,GAAGwH,CAAI,OACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAED,KAAK,mBAAmB13R,CAAC,GAAK,OAC9B,KAAK,mBAAmBA,CAAC,EAAI,CACzB,aAAc,GAAGwH,CAAI,YACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAED,KAAK,qBAAqB13R,CAAC,GAAK,MAAQ,KAAK,WAC7C,KAAK,qBAAqBA,CAAC,EAAI,CAC3B,aAAc,GAAGwH,CAAI,MACrB,SAAUqtR,GAAK,IAAMolB,GAAU15S,CAAK,EAAE,SAASm3R,CAAS,CAAC,CAC5D,GAEL,MAAMw3C,EAAW,MAAM,QAAQD,CAAiB,EAC5CA,EAAkBjvU,CAAC,EAAE,OACrBivU,EAAkBznU,CAAI,EAC1B,GAAI0nU,GAAY,KACZ,OAEJ,MAAMmC,EAAwB,KAAK,uBAAuBrxU,CAAC,EAAE,SACvDsxU,EAAqB,KAAK,mBAAmBtxU,CAAC,EAAE,SACtD60R,GAAK,IAAM,CACP,MAAM08C,EAA2BvhT,GAAIuhQ,GAAI8/C,EAAuB,KAAK,KAAK,EAAG9/C,GAAI6rB,GAAO8xB,CAAQ,EAAG,EAAI,KAAK,KAAK,CAAC,EAClH,GAAI,KAAK,SAAU,CACf,MAAMsC,EAAsB,KAAK,qBAAqBxxU,CAAC,EAAE,SAEnDyxU,EAAyBzhT,GAAIuhQ,GAAIigD,EAAqB,KAAK,KAAK,EAAGjgD,GAAI29C,EAAU,EAAI,KAAK,KAAK,CAAC,EAChGwC,EAAmB/iD,GAAI4C,GAAI29C,EAAU,KAAK,YAAY,EAAGhyB,GAAKjgD,GAAIs0E,EAA0BvhT,GAAIotR,GAAOq0B,CAAsB,EAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/IE,EAAwB3hT,GAAIuhQ,GAAI+/C,EAAoB,KAAK,QAAQ,EAAGI,CAAgB,EAC1FL,EAAsB,OAAOE,CAAwB,EACrDC,EAAoB,OAAOC,CAAsB,EACjDH,EAAmB,OAAOK,CAAqB,EAC/C,MAAMrwP,EAAW27K,GAAI18P,EAAOoxU,CAAqB,EACjDpxU,EAAM,OAAO+gF,CAAQ,CACzC,KACqB,CAED,MAAMiwP,EAA2BvhT,GAAIuhQ,GAAI8/C,EAAuB,KAAK,KAAK,EAAG9/C,GAAI6rB,GAAO8xB,CAAQ,EAAG,EAAI,KAAK,KAAK,CAAC,EAC5GyC,EAAwB3hT,GAAIuhQ,GAAI+/C,EAAoB,KAAK,QAAQ,EAAG3iD,GAAI4C,GAAI29C,EAAU,KAAK,YAAY,EAAGhyB,GAAKltR,GAAIuhT,EAA0B,KAAK,OAAO,CAAC,CAAC,CAAC,EAClKF,EAAsB,OAAOE,CAAwB,EACrDD,EAAmB,OAAOK,CAAqB,EAC/C,MAAMrwP,EAAW27K,GAAI18P,EAAOoxU,CAAqB,EACjDpxU,EAAM,OAAO+gF,CAAQ,CACzC,CACA,CAAa,CACb,CAAS,EACD,KAAK,oBAAqB,CAClC,CACI,SAAU,CACF,KAAK,wBAA0B,MAC/Bm0K,GAAQ,KAAK,uBAAuB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAExD,KAAK,sBAAwB,MAAQ,KAAK,UAC1C24P,GAAQ,KAAK,qBAAqB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,EAEtD,KAAK,oBAAsB,MAC3B24P,GAAQ,KAAK,mBAAmB,IAAI34P,GAAKA,EAAE,QAAQ,CAAC,CAEhE,CACI,MAAM,YAAa,CAEf,MAAMuhI,EAAY,CAAC,GAAG,KAAK,uBAAwB,GAAG,KAAK,kBAAkB,EAC7E,OAAI,KAAK,UACLA,EAAU,KAAK,GAAG,KAAK,oBAAoB,EAExC,CAAC,MAAM,KAAK,eAAc,CAAE,EAAE,OAAOA,EAAU,IAAIvhI,IAAM,CAAE,KAAMA,EAAE,aAAc,OAAQA,EAAE,QAAU,EAAC,CAAC,CACtH,CACI,MAAM,WAAW+xU,EAAc,CAC3BA,EAAe,MAAM,KAAK,kBAAkBA,CAAY,EACxD,MAAMU,EAAgB,KAAK,SAAWV,EAAa,OAAS,EAAIA,EAAa,OAAS,EAChFn3C,EAAY,GAClB,KAAK,uBACDm3C,EAAa,MAAM,EAAGU,CAAa,EAAE,IAAIzyU,IAAM,CAC3C,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,EACN,KAAK,mBACDm3C,EAAa,MAAMU,EAAeA,EAAgB,CAAC,EAC9C,IAAIzyU,IAAM,CACX,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACrD,EAAc,EACF,KAAK,WACL,KAAK,qBACDm3C,EAAa,MAAMU,EAAgB,EAAGA,EAAgB,CAAC,EAClD,IAAIzyU,IAAM,CACX,aAAcA,EAAE,KAChB,SAAUA,EAAE,OAAO,SAAS46R,CAAS,CACzD,EAAkB,EAElB,CACI,WAAY,CACR,MAAO,CACH,aAAgB,KAAK,aACrB,MAAS,KAAK,MACd,SAAY,KAAK,SACjB,QAAW,KAAK,QAChB,SAAY,KAAK,QACpB,CACT,CAEI,OAAO,WAAWx0D,EAAK//N,EAAQ,CAC3B,OAAO,IAAI+/N,EAAI//N,EAAO,aAAiBA,EAAO,MAAUA,EAAO,SAAaA,EAAO,QAAYA,EAAO,QAAW,CACzH,CACA,CCxKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBA,MAAMyuU,IAAa,CACf9C,IACAU,IACAE,IACAY,IACAQ,IACAK,IACAN,EACJ,EACO,SAASgB,KAAqB,CACjC,UAAWC,KAAaF,IACpBrD,IAAcuD,CAAS,CAE/B,CCrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBA,MAAMC,IAA2B,QAC3BC,IAA8B,QAC9BC,IAAqC,eAC3C,SAASC,GAAM1zU,EAAG,CACd,OAAO,IAAI,QAAQgC,GAAW,WAAWA,CAAO,CAAC,EAAE,KAAKhC,CAAC,CAC7D,CACA,MAAM2zU,EAAiB,CACnB,YAAYC,EAAgB,CACxB,GAAI,CAAC1oR,GAAG,EAAG,QAAQ,YAAY,EAG3B,MAAM,IAAI,MAAM,qFACO,EAEvB0oR,EAAe,WAAWD,GAAiB,UAAU,IACrDC,EAAiBA,EAAe,MAAMD,GAAiB,WAAW,MAAM,IAExEC,GAAkB,MAAQA,EAAe,SAAW,KACpDA,EAAiBL,KAErB,KAAK,kBAAoBK,EAAiBJ,IAC1C,KAAK,mBACDI,EAAiBH,GAC7B,CACI,MAAM,KAAKvvC,EAAgB,CACvB,GAAI,OAAQ,SAAc,IACtB,MAAM,IAAI,MAAM,yFACsC,EAI1D,MAAMmE,EAAexH,GAAqB,KAAKqD,EAAe,UAAU,EAClE2vC,EAAa,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAACxrC,CAAY,EAAG,CAAE,KAAM,0BAA4B,EAAC,EAC5G,GAAInE,EAAe,yBAAyB,YACxC,MAAM,IAAI,MAAM,uFACY,EAE3B,CACD,MAAMK,EAAkB,CAAC,CACjB,MAAO,CAAC,KAAO,KAAK,kBAAkB,EACtC,QAASL,EAAe,WAC5C,CAAiB,EACCF,EAAYJ,GAA8BM,EAAgBK,CAAe,EACzEuvC,EAAe,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,KAAK,UAAU9vC,CAAS,CAAC,EAAG,CAAE,KAAM,kBAAoB,EAAC,EAG7G+vC,EAAa,KAAK,iBAAmB,KACvC,SAAS,cAAc,GAAG,EAC1B,KAAK,gBAOT,GANAA,EAAW,SAAW,KAAK,kBAC3BA,EAAW,KAAOD,EAIlB,MAAMJ,GAAM,IAAMK,EAAW,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC,EAC/D7vC,EAAe,YAAc,KAAM,CACnC,MAAM8vC,EAAmB,KAAK,kBAAoB,KAC9C,SAAS,cAAc,GAAG,EAC1B,KAAK,iBACTA,EAAiB,SAAW,KAAK,mBACjCA,EAAiB,KAAOH,EACxB,MAAMH,GAAM,IAAMM,EAAiB,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC,CACzF,CACY,MAAO,CAAE,mBAAoB3vC,GAA6BH,CAAc,CAAG,CACvF,CACA,CACA,CACAyvC,GAAiB,WAAa,eAE9B,MAAMM,GAAa,CACf,YAAY70F,EAAO,CACf,GAAIA,GAAS,MAAQA,EAAM,OAAS,EAChC,MAAM,IAAI,MAAM,wEACIA,CAAK,EAAE,EAE/B,KAAK,SAAWA,EAAM,CAAC,EACvB,KAAK,aAAeA,EAAM,MAAM,CAAC,CACzC,CACI,MAAM,MAAO,CACT,OAAO,IAAI,QAAQ,CAACp9O,EAASC,IAAW,CACpC,MAAMiyU,EAAa,IAAI,WACvBA,EAAW,OAAU9vU,GAAU,CAE3B,MAAM4/R,EAAY,KAAK,MAAM5/R,EAAM,OAAO,MAAM,EAC1C+vU,EAAgBnwC,EAAU,cAChC,GAAImwC,GAAiB,KAAM,CACvBlyU,EAAO,IAAI,MAAM,4CAA4C,KAAK,SAAS,IAAI,EAAE,CAAC,EAClF,MACpB,CAEgB,GADwB+hS,EAAU,iBACX,KAAM,CACzB/hS,EAAO,IAAI,MAAM,6CAA6C,KAAK,SAAS,IAAI,EAAE,CAAC,EACnF,MACpB,CACgB,GAAI,KAAK,aAAa,SAAW,EAAG,CAChCD,EAAQ,CAAE,cAAAmyU,EAAe,EACzB,MACpB,CACgB,MAAMC,EAAwBjwC,GAAyBH,EAAYO,GAAoB,KAAK,YAAYA,CAAe,CAAC,EACxHviS,EAAQoyU,CAAqB,CAChC,EACDF,EAAW,QAAUnxU,GAASd,EAAO,sEACnB,KAAK,SAAS,IAAI,uEACM,EAC1CiyU,EAAW,WAAW,KAAK,QAAQ,CAC/C,CAAS,CACT,CACI,YAAY3vC,EAAiB,CACzB,MAAMN,EAAc,CAAE,EAChBtxR,EAAQ,CAAE,EAChB,UAAW6qD,KAAS+mO,EAChBN,EAAY,KAAK,GAAGzmO,EAAM,OAAO,EACjC7qD,EAAM,KAAK,GAAG6qD,EAAM,KAAK,EAE7B,MAAM62Q,EAAa,KAAK,4BAA4B9vC,CAAe,EAC7DvkQ,EAAWrtB,EAAM,IAAIH,GAAQ,KAAK,gBAAgBA,EAAM6hU,EAAW7hU,CAAI,CAAC,CAAC,EAC/E,OAAO,QAAQ,IAAIwtB,CAAQ,EAAE,KAAKyd,GAAW,CAACwmP,EAAaxmP,CAAO,CAAC,CAC3E,CACI,gBAAgBjrC,EAAMqtO,EAAM,CACxB,OAAO,IAAI,QAAQ,CAAC79O,EAASC,IAAW,CACpC,MAAMqyU,EAAmB,IAAI,WAC7BA,EAAiB,OAAUlwU,GAAU,CAEjC,MAAMq+R,EAAar+R,EAAM,OAAO,OAChCpC,EAAQygS,CAAU,CACrB,EACD6xC,EAAiB,QAAUvxU,GAASd,EAAO,6CAA6CuQ,CAAI,IAAI,EAChG8hU,EAAiB,kBAAkBz0F,CAAI,CACnD,CAAS,CACT,CAII,4BAA4BikD,EAAU,CAClC,MAAMywC,EAAY,CAAE,EACdC,EAAY,KAAK,aAAa,IAAI30F,GAAQ/vF,GAAS+vF,EAAK,IAAI,CAAC,EAC7Dw0F,EAAa,CAAE,EACrB,UAAWtyC,KAAS+B,EAChB/B,EAAM,MAAM,QAAQvvR,GAAQ,CACxB,MAAMiiU,EAAe3kL,GAASt9I,CAAI,EAClC,GAAI+hU,EAAU,QAAQE,CAAY,IAAM,GACpC,MAAM,IAAI,MAAM,uDACRA,CAAY,GAAG,EAG3B,GADAF,EAAU,KAAKE,CAAY,EACvBD,EAAU,QAAQC,CAAY,IAAM,GACpC,MAAM,IAAI,MAAM,8BAA8BA,CAAY,oBAAoB,EAG9EJ,EAAW7hU,CAAI,EAAI,KAAK,aAAagiU,EAAU,QAAQC,CAAY,CAAC,CAExF,CAAa,EAEL,GAAIF,EAAU,SAAW,KAAK,aAAa,OACvC,MAAM,IAAI,MAAM,wDACRA,EAAU,MAAM,8CAChB,KAAK,aAAa,MAAM,IAAI,EAExC,OAAOF,CACf,CACA,CACO,MAAMK,IAA0Bv4T,GAC9B+uC,GAAG,EAAG,QAAQ,YAAY,GAIvB,CAAC,MAAM,QAAQ/uC,CAAG,GAAKA,EAAI,WAAWw3T,GAAiB,UAAU,EAC1DgB,IAAiBx4T,EAAI,MAAMw3T,GAAiB,WAAW,MAAM,CAAC,EAJlE,KAWfzuC,GAAiB,mBAAmBwvC,GAAsB,EAwCnD,SAASC,IAAiBf,EAAiB,QAAS,CACvD,OAAO,IAAID,GAAiBC,CAAc,CAC9C,CAyCO,SAASgB,IAAax1F,EAAO,CAChC,OAAO,IAAI60F,IAAa70F,CAAK,CACjC,CC5RA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBO,SAASy1F,GAAwB70S,EAAU8xI,EAAYgjK,EAAeC,EAAa,CACtFC,EAAch1S,CAAQ,EACtB80S,EAAgBA,GAAwB,EACxCC,EAAcA,GAAsB,EACpCE,EAAcH,EAAeC,CAAW,EACxC,IAAIG,EAAkB,EACtB,MAAMC,EAAmB7oU,IACrBA,EAAQ,KAAKvK,GAAS,CAClB,MAAMy5Q,EAAWs5D,GACb,EAAEI,EAAkBl1S,EAAS,QAAU+0S,EAAcD,GAEzD,OAAAhjK,EAAW0pG,CAAQ,EACZz5Q,CACnB,CAAS,EACMuK,GAEX,SAAS0oU,EAAch1S,EAAU,CAC7BqmG,EAAOrmG,GAAY,MAAQ,MAAM,QAAQA,CAAQ,GAAKA,EAAS,OAAS,EAAG,IAAM,qCAAqC,CAC9H,CACI,SAASi1S,EAAcH,EAAeC,EAAa,CAC/C1uM,EAAOyuM,GAAiB,GAAKA,GAAiB,EAAG,IAAM,oEAC9BA,CAAa,EAAE,EACxCzuM,EAAO0uM,GAAe,GAAKA,GAAe,EAAG,IAAM,kEAC5BA,CAAW,EAAE,EACpC1uM,EAAO0uM,GAAeD,EAAe,IAAM,yEAClBA,CAAa,oBAC/BC,CAAW,EAAE,CAC5B,CACI,OAAO,QAAQ,IAAI/0S,EAAS,IAAIm1S,CAAe,CAAC,CACpD,CCtDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCO,eAAeC,GAAyBC,EAAWhwC,EAAa,CAC/DA,GAAe,OACfA,EAAc,CAAE,GAEpB,MAAMiwC,EAAYjwC,EAAY,WAAa,KAAOn6O,GAAG,EAAG,SAAS,MAC7Dm6O,EAAY,UAEVkwC,EAAWF,EAAU,IAAIG,GAAYF,EAAUE,EAAUnwC,EAAY,YAAa,CAAE,SAAU,EAAM,EAAC,EAMrGowC,GAHYpwC,EAAY,YAAc,KACxC,MAAM,QAAQ,IAAIkwC,CAAQ,EAC1B,MAAMV,GAAwBU,EAAUlwC,EAAY,WAJ7B,EACF,EAG+E,GACvE,IAAI/vR,GAAYA,EAAS,aAAa,EAMvE,OAHgB+vR,EAAY,YAAc,KACtC,MAAM,QAAQ,IAAIowC,CAAc,EAChC,MAAMZ,GAAwBY,EAAgBpwC,EAAY,WAJlC,GACF,CAGsF,CAEpH,CAUO,eAAejB,IAAYN,EAAU4xC,EAAiB,GAAIC,EAAaC,EAAa,CAQvF,OADoBC,GADEC,GAAcV,GAAyBU,EAAW,CAAE,YAAAF,EAAa,CAClC,EAClC9xC,EAAU4xC,EAAgBC,CAAW,CAC5D,CAyBO,SAASE,GAAqBE,EAAsB,CACvD,MAAO,OAAOjyC,EAAU4xC,EAAiB,GAAIC,IAAgB,CAGzD,MAAMK,EAAyBlyC,EAAS,IAAI,IAAM,EAAK,EACjDmyC,EAAsB,CAAE,EACxBC,EAAeP,GAAe,KAAOA,EAAY,IAAI,IAAM,EAAK,EAAI,CAAE,EACtEQ,EAAyB,CAAE,EAmCjC,GAlCAryC,EAAS,QAAQ,CAACsyC,EAAqBC,IAAe,CAClD,IAAIC,EAAc,EAClBF,EAAoB,QAAQ,QAAQG,GAAgB,CAChD,MAAMC,EAAY,iBAAkBD,EAChCA,EAAa,aAAa,MAC1BA,EAAa,MACXE,EAAe71C,GAAqB41C,CAAQ,EAC9Ch+C,GAAmB+9C,EAAa,KAAK,EACnCG,EAA8B,IAAM,CACtCV,EAAuBK,CAAU,EAAI,GACjCJ,EAAoBI,CAAU,GAAK,OACnCJ,EAAoBI,CAAU,EAAI,CAAE,GAExCJ,EAAoBI,CAAU,EAAE,KAAK,CACjC,cAAeE,EACf,YAAAD,EACA,UAAWG,CACnC,CAAqB,CACJ,EACGd,GAAe,KACfA,EAAY,QAAQ,CAACgB,EAAYC,IAAgB,CACzCD,IAAeJ,EAAa,OAC5BG,EAA6B,EAC7BR,EAAaU,CAAW,EAAI,GAExD,CAAqB,EAGDF,EAA6B,EAEjCP,EAAuB,KAAKI,EAAa,IAAI,EAC7CD,GAAeG,CAC/B,CAAa,CACb,CAAS,EACG,CAACP,EAAa,MAAMx4L,GAASA,CAAK,EAAG,CACrC,MAAMm5L,EAAkBlB,EAAY,OAAO,CAACnzU,EAAGhB,IAAM,CAAC00U,EAAa10U,CAAC,CAAC,EACrE,MAAM,IAAI,MAAM,kDACTq1U,EAAgB,KAAK,IAAI,CAAC;AAAA,wCAE1BV,EAAuB,KAAK,IAAI,CAAC,GAAG,CACvD,CAGQ,MAAMW,EAAsBd,EAAuB,OAAO,CAAC1xE,EAAayyE,EAAav1U,KAC7Eu1U,GACAzyE,EAAY,KAAK9iQ,CAAC,EAEf8iQ,GACR,EAAE,EACCwxE,EAAY,CAAE,EACpBgB,EAAoB,QAAQt1U,GAAK,CAC7BsiS,EAAStiS,CAAC,EAAE,MAAM,QAAQw1U,GAAY,CAClC,MAAMC,EAAWvB,GACXA,EAAe,SAAS,GAAG,EAAU,GAAN,KAAYsB,EACjDlB,EAAU,KAAKmB,CAAQ,CACvC,CAAa,CACb,CAAS,EACD,MAAMx5R,EAAU,MAAMs4R,EAAqBD,CAAS,EAC9CoB,EAAmB,CAAE,EAC3B,IAAIC,EAAoB,EACxB,OAAAL,EAAoB,QAAQt1U,GAAK,CAC7B,MAAM41U,EAAatzC,EAAStiS,CAAC,EAAE,MAAM,OAC/B61U,EAAgB,IAAIx2C,GAAqBpjP,EAAQ,MAAM05R,EAAmBA,EAAoBC,CAAU,CAAC,EACxFnB,EAAoBz0U,CAAC,EAC7B,QAAQ+0U,GAAgB,CACnC,MAAMzzC,EAAau0C,EAAc,MAAMd,EAAa,YAAaA,EAAa,YAAcA,EAAa,SAAS,EAC5Ge,EAAkB90C,GAAcM,EAAY,CAACyzC,EAAa,aAAa,CAAC,EAC9E,UAAWvtU,KAAQsuU,EACfJ,EAAiBluU,CAAI,EAAIsuU,EAAgBtuU,CAAI,CAEjE,CAAa,EACDmuU,GAAqBC,CACjC,CAAS,EACMF,CACV,CACL,CCpLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BA,MAAMK,IAAyB,2BACzBC,IAAY,mBAClB,MAAMC,EAAY,CACd,YAAYjlU,EAAM6yR,EAAa,CAwB3B,GAvBA,KAAK,eAAiB,OAClBA,GAAe,OACfA,EAAc,CAAE,GAEpB,KAAK,iBAAmBA,EAAY,iBACpC,KAAK,WAAaA,EAAY,WAC9B,KAAK,mBAAqBA,EAAY,mBAClCA,EAAY,WAAa,MACzBh/J,EAAO,OAAOg/J,EAAY,WAAc,WAAY,IAAM,6HAEO,EACjE,KAAK,MAAQA,EAAY,WAGzB,KAAK,MAAQn6O,GAAK,EAAC,SAAS,MAEhCm7E,EAAO7zH,GAAQ,MAAQA,EAAK,OAAS,EAAG,IAAM,yDAClC,EACR,MAAM,QAAQA,CAAI,GAClB6zH,EAAO7zH,EAAK,SAAW,EAAG,IAAM,iEACPA,EAAK,MAAM,IAAI,EAE5C,KAAK,KAAOA,EACR6yR,EAAY,aAAe,MAC3BA,EAAY,YAAY,MAAQ,KAChC,MAAM,IAAI,MAAM,oEAAoE,EAExF,KAAK,YAAcA,EAAY,aAAe,CAAE,CACxD,CACI,MAAM,KAAKnB,EAAgB,CACvB,GAAIA,EAAe,yBAAyB,YACxC,MAAM,IAAI,MAAM,yFACY,EAEhC,MAAMl7Q,EAAO,OAAO,OAAO,CAAE,OAAQ,KAAK,cAAc,EAAI,KAAK,WAAW,EAC5EA,EAAK,KAAO,IAAI,SAChB,MAAMu7Q,EAAkB,CAAC,CACjB,MAAO,CAAC,qBAAqB,EAC7B,QAASL,EAAe,WACxC,CAAa,EACCwzC,EAAiC9zC,GAA8BM,EAAgBK,CAAe,EAEpG,GADAv7Q,EAAK,KAAK,OAAO,aAAc,IAAI,KAAK,CAAC,KAAK,UAAU0uT,CAA8B,CAAC,EAAG,CAAE,KAAMF,GAAW,GAAG,YAAY,EACxHtzC,EAAe,YAAc,KAAM,CAGnC,MAAMmE,EAAexH,GAAqB,KAAKqD,EAAe,UAAU,EACxEl7Q,EAAK,KAAK,OAAO,oBAAqB,IAAI,KAAK,CAACq/Q,CAAY,EAAG,CAAE,KAAMkvC,GAAwB,GAAG,mBAAmB,CACjI,CACQ,MAAMjiU,EAAW,MAAM,KAAK,MAAM,KAAK,KAAM0T,CAAI,EACjD,GAAI1T,EAAS,GACT,MAAO,CACH,mBAAoB+uR,GAA6BH,CAAc,EAC/D,UAAW,CAAC5uR,CAAQ,CACvB,EAGD,MAAM,IAAI,MAAM,gEACTA,EAAS,MAAM,GAAG,CAErC,CASI,MAAM,MAAO,CACT,MAAMqiU,EAAqB,MAAM,KAAK,MAAM,KAAK,KAAM,KAAK,WAAW,EACvE,GAAI,CAACA,EAAmB,GACpB,MAAM,IAAI,MAAM,cAAc,KAAK,IAAI,4BAChCA,EAAmB,MAAM,yEACU,EAE9C,IAAI3zC,EACJ,GAAI,CACAA,EAAY,MAAM2zC,EAAmB,KAAM,CACvD,MACkB,CACN,IAAIrzU,EAAU,+CAA+C,KAAK,IAAI,IAGtE,MAAI,KAAK,KAAK,SAAS,KAAK,EACxBA,GAAW,+UAQXA,GAAW,uEAGT,IAAI,MAAMA,CAAO,CACnC,CAEQ,MAAM6vU,EAAgBnwC,EAAU,cAC1BO,EAAkBP,EAAU,gBAClC,GAAImwC,GAAiB,MAAQ5vC,GAAmB,KAC5C,MAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,2DACb,EAE3C,OAAOJ,GAAyBH,EAAYO,GAAoB,KAAK,YAAYA,CAAe,CAAC,CACzG,CACI,MAAM,YAAYA,EAAiB,CAC/B,MAAMqzC,EAAa,MAAM,QAAQ,KAAK,IAAI,EAAI,KAAK,KAAK,CAAC,EAAI,KAAK,KAC5D,CAACxhT,EAAQm9O,CAAM,EAAItgN,IAAS2kR,CAAU,EACtCC,EAAa,KAAK,kBAAoBzhT,EACtC6tQ,EAAcK,GAAeC,CAAe,EAC5C8wC,EAAY,CAAE,EACdyC,EAAc,CAAE,EACtB,UAAWC,KAAgBxzC,EACvB,UAAW/xR,KAAQulU,EAAa,MACxB,KAAK,oBAAsB,KAC3BD,EAAY,KAAK,KAAK,mBAAmBtlU,CAAI,CAAC,EAG9C6iU,EAAU,KAAKwC,EAAarlU,EAAO+gQ,CAAM,EAIjD,KAAK,oBACL8hE,EAAU,KAAK,GAAG,MAAM,QAAQ,IAAIyC,CAAW,CAAC,EAEpD,MAAMr6R,EAAU,MAAM23R,GAAyBC,EAAW,CACtD,YAAa,KAAK,YAClB,UAAW,KAAK,MAChB,WAAY,KAAK,UAC7B,CAAS,EACD,MAAO,CAACpxC,EAAaxmP,CAAO,CACpC,CACA,CACAg6R,GAAY,iBAAmB,eAaxB,SAASxkR,IAAS92C,EAAK,CAC1B,MAAM67T,EAAY77T,EAAI,YAAY,GAAG,EAC/B87T,EAAkB97T,EAAI,YAAY,GAAG,EACrCia,EAASja,EAAI,UAAU,EAAG67T,CAAS,EACnCzkE,EAAS0kE,EAAkBD,EAAY77T,EAAI,UAAU87T,CAAe,EAAI,GAC9E,MAAO,CAAC7hT,EAAS,IAAKm9O,CAAM,CAChC,CACO,SAAS2kE,GAAa/7T,EAAK,CAC9B,OAAOA,EAAI,MAAMs7T,GAAY,gBAAgB,GAAK,IACtD,CACO,MAAMU,GAAa,CAACh8T,EAAKkpR,IAAgB,CAC5C,GAAI,OAAO,MAAU,MAChBA,GAAe,MAAQA,EAAY,WAAa,MAIjD,OAAO,KAEN,CACD,IAAI+yC,EAAS,GAOb,GANI,MAAM,QAAQj8T,CAAG,EACjBi8T,EAASj8T,EAAI,MAAMk8T,GAAWH,GAAaG,CAAO,CAAC,EAGnDD,EAASF,GAAa/7T,CAAG,EAEzBi8T,EACA,OAAOE,GAAKn8T,EAAKkpR,CAAW,CAExC,CACI,OAAO,IACX,EACAH,GAAiB,mBAAmBizC,EAAU,EAC9CjzC,GAAiB,mBAAmBizC,EAAU,EAuEvC,SAASG,GAAK9lU,EAAM6yR,EAAa,CACpC,OAAO,IAAIoyC,GAAYjlU,EAAM6yR,CAAW,CAC5C,CAMO,SAASkzC,IAAmB/lU,EAAM6yR,EAAa,CAClD,OAAOizC,GAAK9lU,EAAM6yR,CAAW,CACjC,CCpSA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBA,MAAMmzC,EAAkB,CACpB,YAAYt0C,EAAgB,CACxB,KAAK,eAAiBA,CAC9B,CACI,MAAO,CACH,OAAO,KAAK,cACpB,CACA,CACA,MAAMu0C,EAAiB,CACnB,YAAYpvC,EAAa,CACrB,KAAK,YAAcA,CAC3B,CACI,KAAKnF,EAAgB,CACjB,OAAO,KAAK,YAAYA,CAAc,CAC9C,CACA,CACA,MAAMw0C,GAAiB,CACnB,YAAYh4T,EAAS,CACbA,EAAQ,OACR,KAAK,KAAO,IAAM,QAAQ,QAAQA,EAAQ,MAAM,GAEhDA,EAAQ,OACR,KAAK,KAAQwjR,GAAmB,QAAQ,QAAQxjR,EAAQ,KAAKwjR,CAAc,CAAC,EAExF,CACA,CAsBO,SAASy0C,IAAWz0C,EAAgBD,EAAaxB,EAAYm2C,EAAgB,CAChF,MAAM/tU,EAAO,UACb,OAAO,IAAI6tU,IAAiBG,GAAe,GAAGhuU,CAAI,CAAC,CACvD,CAsBO,SAASguU,GAAe30C,EAAgBD,EAAaxB,EAAYm2C,EAAgB,CACpF,OAAI,UAAU,SAAW,EACI10C,EAAe,eAAiB,MACrDA,EAAe,aAAe,KAEvB,IAAIs0C,GAAkBt0C,CAAc,GAK3C,QAAQ,KAAK,uNAG4C,EAClD,IAAIs0C,GAAkB,CAAE,cAAet0C,CAAc,CAAE,IAMlE,QAAQ,KAAK,uNAG4C,EAClD,IAAIs0C,GAAkB,CACzB,cAAet0C,EACf,YAAAD,EACA,WAAAxB,EACA,eAAAm2C,CACZ,CAAS,EAET,CAgBO,SAASE,IAAgBzvC,EAAa,CACzC,OAAO,IAAIovC,GAAiBpvC,CAAW,CAC3C,CAgBO,SAAS0vC,IAAoB1vC,EAAa,CAC7C,OAAO,IAAIovC,GAAiBpvC,CAAW,CAC3C,CC3JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,knBCAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBA,IAAI2vC,GAkCJ,SAASC,IAAYjgI,EAAQkgI,EAAc,EAAG,CAE1C,GAAIA,EAAc,EACd,MAAM,IAAI,MAAM,gEAAgE,EAEpF,GAAIlgI,GAAU,KACV,MAAM,IAAI,MAAM,0DAA0D,EAE9E,IAAImgI,EAAc,GACdC,EAAc,GACdC,EAAU,GACVC,EAAU,GACVC,EAAe,GACfC,EAAgB,GACpB,GAAIxgI,EAAO,gBAAgB,WACvBmgI,EAAc,WAET,OAAQ,UAAe,KAAengI,aAAkB,UAC7DogI,EAAc,WAET,OAAQ,iBAAsB,KACnCpgI,aAAkB,iBAClBqgI,EAAU,WAEL,OAAQ,iBAAsB,KACnCrgI,aAAkB,iBAClBsgI,EAAU,WAGLtgI,EAAO,YAAc,KAC1BugI,EAAe,WAEV,OAAQ,YAAiB,KAAevgI,aAAkB,YAC/DwgI,EAAgB,OAGhB,OAAM,IAAI,MAAM,qPAIDxgI,EAAO,YAAY,IAAI,EAAE,EAK5C,GADes0E,GAAUP,GAAYoO,EAAO,WAAW,GACzC,KAAM,CAChB,MAAM7G,EAAS,CAAE,OAAAt7E,CAAQ,EACnBtsB,EAAQ,CAAE,YAAAwsJ,CAAa,EAC7B,OAAO/9C,EAAO,UAAUpO,GAAYuH,EAAQ5nG,CAAK,CACzD,CACI,KAAM,CAAC7wG,EAAOp1C,CAAM,EAAI4yS,EACpB,CACIrgI,EAAO,WACPA,EAAO,WACV,EACD,CAACA,EAAO,MAAOA,EAAO,MAAM,EAChC,IAAI6mE,EACJ,GAAI05D,EACA15D,EAEI7mE,EAAO,WAAW,IAAI,EAAE,aAAa,EAAG,EAAGn9H,EAAOp1C,CAAM,EAAE,aAEzD2yS,GAAeD,EACpBt5D,EAAO7mE,EAAO,aAETsgI,GAAWD,GAAWG,EAAe,CAC1C,GAAIR,IAAuB,KACvB,GAAI,OAAO,SAAa,IACpB,GAAI,OAAO,gBAAoB,KAC3B,OAAO,kCAAsC,IAE7CA,GAAsB,IAAI,gBAAgB,EAAG,CAAC,EAAE,WAAW,IAAI,MAG/D,OAAM,IAAI,MAAM,sGACmD,OAIvEA,GAAsB,SAAS,cAAc,QAAQ,EAAE,WAAW,KAAM,CAAE,mBAAoB,GAAM,EAG5GA,GAAoB,OAAO,MAAQn9P,EACnCm9P,GAAoB,OAAO,OAASvyS,EACpCuyS,GAAoB,UAAUhgI,EAAQ,EAAG,EAAGn9H,EAAOp1C,CAAM,EACzDo5O,EAAOm5D,GAAoB,aAAa,EAAG,EAAGn9P,EAAOp1C,CAAM,EAAE,IACrE,CACI,IAAI8E,EACJ,GAAI2tS,IAAgB,EAChB3tS,EAAS,IAAI,WAAWs0O,CAAI,MAE3B,CACD,MAAM45D,EAAY59P,EAAQp1C,EAC1B8E,EAAS,IAAI,WAAWkuS,EAAYP,CAAW,EAC/C,QAAS13U,EAAI,EAAGA,EAAIi4U,EAAWj4U,IAC3B,QAASkkI,EAAU,EAAGA,EAAUwzM,EAAa,EAAExzM,EAC3Cn6F,EAAO/pC,EAAI03U,EAAcxzM,CAAO,EAAIm6I,EAAKr+Q,EAAI,EAAIkkI,CAAO,CAGxE,CAEI,OAAOwvL,GAAS3pR,EADC,CAAC9E,EAAQo1C,EAAOq9P,CAAW,EACV,OAAO,CAC7C,CAkFA,SAASQ,IAAkBC,EAAK,CAC5B,GAAIA,EAAI,OAAS,GAAKA,EAAI,OAAS,EAC/B,MAAM,IAAI,MAAM,wDAAwDA,EAAI,IAAI,GAAG,EAEvF,MAAMx+R,EAAQw+R,EAAI,OAAS,EAAI,EAAIA,EAAI,MAAM,CAAC,EAC9C,GAAIx+R,EAAQ,GAAKA,IAAU,EACvB,MAAM,IAAI,MAAM,0DACSA,CAAK,EAAE,EAEpC,GAAIw+R,EAAI,QAAU,WAAaA,EAAI,QAAU,QACzC,MAAM,IAAI,MAAM,kCAAkCA,EAAI,KAAK,wCAChB,CAEnD,CA2BO,eAAeC,IAASD,EAAKnlQ,EAAQ,CACxC,IAAIqlQ,EAAOp6C,EAAgBk6C,EAAK,MAAO,UAAU,EACjD,GAAI,EAAEA,aAAe3gD,IAAS,CAE1B,MAAM8gD,EAAoBD,EAC1BA,EAAOnvC,GAAKovC,EAAmB,OAAO,EACtCA,EAAkB,QAAS,CACnC,CACIJ,IAAkBG,CAAI,EACtB,KAAM,CAACpzS,EAAQo1C,CAAK,EAAIg+P,EAAK,MAAM,MAAM,EAAG,CAAC,EACvC1+R,EAAQ0+R,EAAK,OAAS,EAAI,EAAIA,EAAK,MAAM,CAAC,EAC1CzhU,EAAO,MAAMyhU,EAAK,KAAM,EACxB9iH,EAAa8iH,EAAK,QAAU,UAAY,IAAM,EAC9CzsK,EAAQ,IAAI,kBAAkBvxF,EAAQp1C,EAAS,CAAC,EACtD,QAASjlC,EAAI,EAAGA,EAAIilC,EAASo1C,EAAO,EAAEr6E,EAAG,CACrC,MAAMk3L,EAAO,CAAC,EAAG,EAAG,EAAG,GAAG,EAC1B,QAAS/4L,EAAI,EAAGA,EAAIw7C,EAAOx7C,IAAK,CAC5B,MAAMoC,EAAQqW,EAAK5W,EAAI25C,EAAQx7C,CAAC,EAChC,GAAIk6U,EAAK,QAAU,WACf,GAAI93U,EAAQ,GAAKA,EAAQ,EACrB,MAAM,IAAI,MAAM,mFACqBA,CAAK,GAAG,UAG5C83U,EAAK,QAAU,UAChB93U,EAAQ,GAAKA,EAAQ,KACrB,MAAM,IAAI,MAAM,mFACuBA,CAAK,GAAG,EAGnDo5C,IAAU,GACVu9I,EAAK,CAAC,EAAI32L,EAAQg1N,EAClBr+B,EAAK,CAAC,EAAI32L,EAAQg1N,EAClBr+B,EAAK,CAAC,EAAI32L,EAAQg1N,GAGlBr+B,EAAK/4L,CAAC,EAAIoC,EAAQg1N,CAElC,CACQ,MAAM0oD,EAAIj+Q,EAAI,EACd4rK,EAAMqyG,EAAI,CAAC,EAAI,KAAK,MAAM/mF,EAAK,CAAC,CAAC,EACjCtrB,EAAMqyG,EAAI,CAAC,EAAI,KAAK,MAAM/mF,EAAK,CAAC,CAAC,EACjCtrB,EAAMqyG,EAAI,CAAC,EAAI,KAAK,MAAM/mF,EAAK,CAAC,CAAC,EACjCtrB,EAAMqyG,EAAI,CAAC,EAAI,KAAK,MAAM/mF,EAAK,CAAC,CAAC,CACzC,CAgBI,OAAImhJ,IAASF,GACTE,EAAK,QAAS,EAEXzsK,CACX,CAmCO,MAAM2sK,IAA6Br3U,EAAG,CAAE,YAAAu2U,IAAa,ECrXrD,SAASe,GAAmBt9C,EAAQwC,EAAS,CAChD,MAAM+6C,EAAav9C,EAAO,MAAM,OAC1Bk5B,EAAc12B,EAAQ,MAAM,OAClC,GAAI+6C,EAAa,EACb,MAAM,IAAI,MAAM,4EACSA,CAAU,GAAG,EAE1C,GAAIrkB,EAAc,EACd,MAAM,IAAI,MAAM,8EACSA,CAAW,GAAG,EAE3C,GAAI12B,EAAQ,QAAU,QAClB,MAAM,IAAI,MAAM,yEACUA,EAAQ,KAAK,GAAG,EAE9C,GAAIA,EAAQ,MAAM02B,EAAc,CAAC,EAAIqkB,EACjC,MAAM,IAAI,MAAM,iEACT/6C,EAAQ,MAAM02B,EAAc,CAAC,CAAC,QAAQqkB,CAAU,EAAE,EAE7D,GAAIx7D,GAAcie,EAAO,KAAK,IAAM,EAChC,MAAM,IAAI,MAAM,mEACKA,EAAO,KAAK,GAAG,EAExC,MAAMw9C,EAAeh7C,EAAQ,MACvB22B,EAAYqkB,EAAaA,EAAa,OAAS,CAAC,EAGtD,IAAIC,EAAU,EACd,QAAS34U,EAAI,EAAGA,EAAI04U,EAAa,OAAS,EAAG,EAAE14U,EAC3C24U,GAAWD,EAAa14U,CAAC,EAE7B,MAAM4zR,EAAasH,EAAO,MACpB09C,EAAcF,EAAa,MAAO,EACxCE,EAAY,IAAK,EACjB,IAAIzmC,EAAY,EAChB,QAASnyS,EAAIq0T,EAAWr0T,EAAIy4U,EAAY,EAAEz4U,EACtCmyS,GAAave,EAAW5zR,CAAC,EACzB44U,EAAY,KAAKhlD,EAAW5zR,CAAC,CAAC,EAElC,MAAM8+Q,EAAU,CAAC,GAAGD,GAAeqc,EAAO,KAAK,EAAE,IAAIvE,GAAUA,EAASwb,CAAS,EAC7E,CAAC,EAAE,MAAM,EAAGkiB,CAAS,EACzB,MAAO,CAACukB,EAAaD,EAASxmC,EAAWrzB,CAAO,CACpD,CCnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBA,MAAM+5D,GAAW,GACXC,IAAc,GACb,SAASC,IAAkBn8T,EAAOy0R,EAAOzoS,EAAM,CAClD,MAAMirR,EAAYj3Q,EAAM,MAAM,OAC9Bq6Q,EAAYpD,IAAcwd,EAAM,OAAQ,IAAM,iBAAiBxd,CAAS,sBAAsBwd,CAAK,sCAC/Dxd,CAAS,IAAI,EACjDoD,EAAYpD,IAAcjrR,EAAK,OAAQ,IAAM,iBAAiBirR,CAAS,qBAAqBjrR,CAAI,sCAC5DirR,CAAS,IAAI,EACjD,QAAS7zR,EAAI,EAAGA,EAAI6zR,EAAW,EAAE7zR,EAC7Bi3R,EAAYoa,EAAMrxS,CAAC,EAAI4I,EAAK5I,CAAC,GAAK4c,EAAM,MAAM5c,CAAC,EAAG,IAAM,iBAAiB6zR,CAAS,YAAY7zR,CAAC,YAAYA,CAAC,MACpGqxS,EAAMrxS,CAAC,EAAI4I,EAAK5I,CAAC,CAAC,gCAAgCA,CAAC,MAAM4c,EAAM,MAAM5c,CAAC,CAAC,GAAG,CAE1F,CAeO,SAASg5U,GAAgB3nC,EAAOlqP,EAAK23N,EAAS,CACjD,MAAMl2Q,EAAO,CAAE,EACf,QAASoqL,EAAO,EAAGA,EAAOq+G,EAAM,OAAQr+G,IACpCpqL,EAAKoqL,CAAI,EAAI,KAAK,MAAM7rI,EAAI6rI,CAAI,EAAIq+G,EAAMr+G,CAAI,GAAK8rF,EAAQ9rF,CAAI,CAAC,EAEpE,OAAOpqL,CACX,CAqLO,SAASqwU,GAAiB58D,EAAOg1B,EAAOzoS,EAAM,CAEjD,IAAIswU,EAAkBtwU,EAAK,OAC3B,QAAS5I,EAAI,EAAGA,EAAI4I,EAAK,OAAQ5I,IAC7B,GAAI4I,EAAK5I,CAAC,EAAI,EAAG,CACbk5U,EAAkBl5U,EAClB,KACZ,CAEI,QAASA,EAAIk5U,EAAkB,EAAGl5U,EAAI4I,EAAK,OAAQ5I,IAC/C,GAAIqxS,EAAMrxS,CAAC,EAAI,GAAK4I,EAAK5I,CAAC,IAAMq8Q,EAAMr8Q,CAAC,EACnC,MAAO,GAGf,MAAO,EACX,CACO,SAASm5U,GAAkB9nC,EAAOvyB,EAAS,CAC9C,IAAIs6D,EAAa/nC,EAAM,OAAS,EAAIA,EAAMA,EAAM,OAAS,CAAC,EAAI,EAC9D,QAASrxS,EAAI,EAAGA,EAAIqxS,EAAM,OAAS,EAAGrxS,IAClCo5U,GAAc/nC,EAAMrxS,CAAC,EAAI8+Q,EAAQ9+Q,CAAC,EAEtC,OAAOo5U,CACX,CACO,SAASC,GAAiBr8U,EAAGq0S,EAAOzoS,EAAM,CAE7C,IAAI0wU,EACJ,MAAMC,EAAQv8U,EAAE,MAAM,OAClB,OAAOq0S,GAAU,SACjBioC,EAAS,CAACjoC,EAAO,GAAG,IAAI,MAAMkoC,EAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAE3CloC,EAAM,OAASkoC,EACpBD,EAASjoC,EAAM,OAAO,IAAI,MAAMkoC,EAAQloC,EAAM,MAAM,EAAE,KAAK,CAAC,CAAC,EAG7DioC,EAASjoC,EAAM,MAAO,EAE1BioC,EAAO,QAAQn7U,GAAK,CAChB84R,EAAY94R,IAAM,GAAI,IAAM,mDAAmD,CACvF,CAAK,EACD,IAAIq7U,EACJ,OAAI5wU,GAAQ,KACR4wU,EAAQ,IAAI,MAAMD,CAAK,EAAE,KAAK,EAAE,EAE3B,OAAO3wU,GAAS,SACrB4wU,EAAQ,CAAC5wU,EAAM,GAAG,IAAI,MAAM2wU,EAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAE1C3wU,EAAK,OAAS2wU,EACnBC,EAAQ5wU,EAAK,OAAO,IAAI,MAAM2wU,EAAQ3wU,EAAK,MAAM,EAAE,KAAK,EAAE,CAAC,EAG3D4wU,EAAQ5wU,EAEZ4wU,EAAQA,EAAM,IAAI,CAACr7U,EAAG6B,IACd7B,GAAK,EACEA,GAGP84R,EAAY94R,IAAM,GAAI,IAAM,qDACrBA,CAAC,kCAAkC6B,CAAC,GAAG,EACvChD,EAAE,MAAMgD,CAAC,EAAIs5U,EAAOt5U,CAAC,EAEnC,EACM,CAACs5U,EAAQE,CAAK,CACzB,CAGO,SAASC,GAAU/kC,EAAQrD,EAAOlqP,EAAK23N,EAASk0C,EAAWC,EAASC,EAAcC,EAAaC,EAAgB,CAClH,IAAIsmB,EAaJ,GAZI56D,GAAW,MACX46D,EAAiB,IAAI,MAAMroC,EAAM,MAAM,EACvCqoC,EAAe,KAAK,CAAC,GAGrBA,EAAiB56D,EAOjBo0C,GAAgB,MAASA,EAAgBA,EAAe,EACxD,MAAM,IAAI,MAAM,4CAA4C,EAIhE,IAAIymB,EAAe,GACnB,MAAMC,EAAa,CACf,KAAMF,EAAe,OACrB,wBAAyB,EACzB,MAAOroC,EAAM,MAAO,EACpB,IAAKlqP,EAAI,MAAO,EAChB,QAASuyR,EAAe,MAAO,EAC/B,UAAA1mB,EACA,QAAAC,EACA,aAAAC,EACA,YAAAC,EACA,eAAAC,CACH,EACD,QAASpzT,EAAI,EAAGA,EAAI45U,EAAW,KAAM55U,IAC7B25U,GAAkB,GAAK35U,EAAKmzT,GAC5BymB,EAAW,0BAEV,GAAK55U,EAAKkzT,IACXymB,EAAe,IAIlBA,IACDC,EAAW,cAAiB,GAAKA,EAAW,KAC5CA,EAAW,QAWf,MAAMC,EAAY,CACd,KAAMnlC,EAAO,OACb,UAAW,EACX,QAAS,EACT,WAAY,GACZ,SAAU,EACb,EACDolC,IAAeF,EAAYC,CAAS,EAGpC,IAAIE,EAAa,GACbC,EAAY,GACZC,EAAgB,GACpB,MAAMC,EAAkB,CAAE,EACpBC,EAAa,CAAE,EACrB,QAASn6U,EAAI,EAAGA,EAAI00S,EAAO,OAAQ,EAAE10S,EAAG,CACpC,GAAI65U,EAAU,QAAQ75U,CAAC,IAAM,EACzB,MAAM,MAAM,WAAWA,CAAC,oBAAoB,EAEhD,MAAMo6U,EAAU,CAAC,EAAEP,EAAU,eAAkB,GAAK75U,GAC9Cq6U,EAAO3lC,EAAO10S,CAAC,EACrB,GAAIq6U,IAAS,GAAI,CACbH,EAAgB,KAAKE,EAAU,EAAI,EAAE,EACrC,QACZ,CACQ,MAAME,EAAQ,CAACT,EAAU,UAAa,GAAK75U,EAAI65U,EAAU,QAAW,GAAK75U,CAAE,EACrEu6U,EAAa,CACfV,EAAU,QAAQ75U,CAAC,EAAI,EAAI,EAAI,GAC/B65U,EAAU,QAAQ75U,CAAC,EAAI,EAAIq6U,EAAOA,EAAO,CAC5C,EACD,GAAID,GAAWP,EAAU,QAAQ75U,CAAC,GAAK,EACnC,MAAM,MAAM,8CAA8C,EAE9Di6U,EAAgBA,GAAkBJ,EAAU,QAAQ75U,CAAC,IAAM,EAC3D,MAAMw6U,EAAoB,CAAC,EAAGX,EAAU,UAAa,GAAK75U,GAAQ65U,EAAU,QAAW,GAAK75U,GAC5F,GAAI65U,EAAU,YAAcA,EAAU,SAAU,CAC5C,GAAIO,EAAS,CAKT,MAAMK,EAAOZ,EAAU,MAAM75U,CAAC,EAAI,EAAIq6U,EAAOR,EAAU,MAAM75U,CAAC,EAC1D65U,EAAU,MAAM75U,CAAC,EAGrB,GAFA65U,EAAU,MAAM75U,CAAC,EAAIy6U,EACrBZ,EAAU,IAAI75U,CAAC,EAAI65U,EAAU,MAAM75U,CAAC,EAAI,EACpCy6U,EAAO,GAAKA,GAAQJ,EACpB,MAAM,MAAM,eAAeR,EAAU,MAAM75U,CAAC,CAAC,iBAAiBA,CAAC,iBAAiB,CAEpG,MAEgB65U,EAAU,MAAM75U,CAAC,EAAI06U,GAAUb,EAAU,MAAM75U,CAAC,EAAG,EAAG65U,EAAU,QAAQ75U,CAAC,EAAGq6U,EAAMC,EAAOC,CAAU,EACnGV,EAAU,IAAI75U,CAAC,EAAI06U,GAAUb,EAAU,IAAI75U,CAAC,EAAG,EAAG65U,EAAU,QAAQ75U,CAAC,EAAGq6U,EAAMC,EAAOC,CAAU,EAGnG,MAAMI,EAAqBd,EAAU,QAAQ75U,CAAC,IAAM,GAChD65U,EAAU,MAAM75U,CAAC,IAAM,GAAK65U,EAAU,IAAI75U,CAAC,IAAMq6U,EACrDN,EAAaA,GAAcY,EAC3BX,EAAYA,IACNh6U,IAAM,GAAK65U,EAAU,QAAQ75U,CAAC,IAAM,GAAM26U,EAC5D,MAEYZ,EACIA,GAAgBF,EAAU,QAAQ75U,CAAC,IAAM,GAAMw6U,EACnDR,EAAYA,IACNh6U,IAAM,GAAK65U,EAAU,QAAQ75U,CAAC,IAAM,GAAMw6U,GAGpD,IAAII,EACAC,EAAgB,GAyBpB,GAxBIhB,EAAU,YAAcA,EAAU,UAClCe,EAAiBf,EAAU,IAAI75U,CAAC,EAAI65U,EAAU,MAAM75U,CAAC,EACrD66U,EAAgB,IAEXT,GAGLQ,EAAiB,EACjBC,EAAgB,IAEXL,GAIDH,GAAQ,IACJR,EAAU,QAAQ75U,CAAC,EAAI,EACvB46U,EAAiB,CAACP,EAGlBO,EAAiBP,EAErBQ,EAAgB,IAGpBA,EAAe,CACf,IAAIC,EAGAF,IAAmB,GACjBA,EAAiB,GAAQf,EAAU,QAAQ75U,CAAC,EAAI,EAClD86U,EAAQ,EAGRA,EAAQ,KAAK,MAAMF,EAAiBf,EAAU,QAAQ75U,CAAC,CAAC,GACnD46U,EAAiBf,EAAU,QAAQ75U,CAAC,IAAM,EAAI,EAAI,GAE3Dk6U,EAAgB,KAAKY,CAAK,CACtC,MAEYZ,EAAgB,KAAK,EAAE,CAEnC,CAMI,QAASa,EAAW,EAAGA,EAAWlB,EAAU,wBAAwB,OAAQ,EAAEkB,EAAU,CACpF,MAAMC,EAAcnB,EAAU,wBAAwBkB,CAAQ,EAC1DC,GAAe,EACfb,EAAW,KAAKD,EAAgBc,CAAW,CAAC,EAEvCA,IAAgBnC,IACrBsB,EAAW,KAAK,CAAC,CAE7B,CAEI,MAAO,CACH,iBAFqBA,EAAW,OAAO,CAACnhC,EAAKh5S,IAAM65U,EAAU,wBAAwB75U,CAAC,IAAM64U,EAAQ,EAGpG,WAAAsB,EACA,WAAAJ,EACA,UAAAC,EACA,cAAAC,EACA,MAAOJ,EAAU,MACjB,IAAKA,EAAU,IACf,QAASA,EAAU,OACtB,CACL,CACA,SAASC,IAAe5L,EAAQ+M,EAAO,CACnCA,EAAM,UAAY,EAClBA,EAAM,QAAU,EAChBA,EAAM,eAAiB,EACvB,IAAIC,EAAY,EAChBD,EAAM,WAAa/M,EAAO,OAAS,KACnC+M,EAAM,SAAW/M,EAAO,KAAO,KAC/B+M,EAAM,MAAQ,IAAI,MAAMA,EAAM,IAAI,EAClCA,EAAM,IAAM,IAAI,MAAMA,EAAM,IAAI,EAChCA,EAAM,QAAU,IAAI,MAAMA,EAAM,IAAI,EACpCA,EAAM,wBAA0B,CAAE,EAClCA,EAAM,8BAAgC,CAAE,EACxCA,EAAM,8BAAgC,IAAI,MAAMA,EAAM,IAAI,EAC1D,QAASj7U,EAAI,EAAGA,EAAIkuU,EAAO,KAAMluU,IAC7B,GAAK,GAAKA,EAAKkuU,EAAO,aAAc,CAIhC,MAAMrgL,EAAY,KAAK,IAAIotL,EAAM,MAAQ/M,EAAO,KAAOluU,GAAK,EAAIkuU,EAAO,wBAAyB+M,EAAM,IAAI,EAC1G,KAAOC,EAAYrtL,EAAWqtL,IAE1BD,EAAM,MAAMC,CAAS,EAAI,EACzBD,EAAM,IAAIC,CAAS,EAAI,EACvBD,EAAM,QAAQC,CAAS,EAAI,EAC3BD,EAAM,WAAc,GAAKC,EACzBD,EAAM,SAAY,GAAKC,EACvBD,EAAM,wBAAwB,KAAKC,CAAS,EAC5CD,EAAM,8BAA8B,KAAK,EAAE,EAC3CA,EAAM,8BAA8BC,CAAS,EAAIl7U,CAEjE,SACkB,GAAKA,EAAKkuU,EAAO,YAEvB+M,EAAM,wBAAwB,KAAKpC,EAAQ,EAC3CoC,EAAM,8BAA8B,KAAK,EAAE,MAE1C,CACD,GAAIC,IAAcD,EAAM,MAAM,OAC1B,MAAM,MAAM,sCAAsCC,CAAS,oBAC3CD,EAAM,IAAI,UAAUA,EAAM,MAAM,MAAM,GAAG,EAGzD/M,EAAO,OAAS,OAChB+M,EAAM,MAAMC,CAAS,EAAIhN,EAAO,MAAMluU,CAAC,GAEvCkuU,EAAO,KAAO,OACd+M,EAAM,IAAIC,CAAS,EAAIhN,EAAO,IAAIluU,CAAC,GAEvCi7U,EAAM,QAAQC,CAAS,EAAIhN,EAAO,QAAQluU,CAAC,EACvCkuU,EAAO,UAAa,GAAKluU,IACzBi7U,EAAM,WAAc,GAAKC,GAEzBhN,EAAO,QAAW,GAAKluU,IACvBi7U,EAAM,SAAY,GAAKC,GAKvBhN,EAAO,eAAkB,GAAKluU,GAC9Bi7U,EAAM,wBAAwB,KAAKnC,GAAW,EAC9CmC,EAAM,8BAA8B,KAAK,EAAE,EAC3CA,EAAM,gBAAmB,GAAKC,IAG9BD,EAAM,wBAAwB,KAAKC,CAAS,EAE5CD,EAAM,8BAA8B,KAAKj7U,CAAC,GAE9Ci7U,EAAM,8BAA8BC,CAAS,EAAIl7U,EACjDk7U,GACZ,CAEA,CACA,SAASR,GAAU19U,EAAGoB,EAAG+8U,EAASd,EAAMC,EAAOC,EAAY,CACvD,GAAID,EAAMl8U,CAAC,EACP,OAAO+8U,EAAU,EAAIZ,EAAWn8U,CAAC,EAAIm8U,EAAYn8U,EAAI,EAAK,CAAC,EAE1D,CACD,MAAMq8U,EAAOz9U,EAAI,EAAIq9U,EAAOr9U,EAAIA,EAChC,OAAOy9U,EAAOF,EAAW,CAAC,EAAIA,EAAW,CAAC,EACtCE,EAAOF,EAAW,CAAC,EAAIA,EAAW,CAAC,EAAIE,CACnD,CACA,CC1jBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBO,SAASW,GAAuBC,EAAQroJ,EAAM,CACjD,MAAM4qF,EAAOy9D,EAAO,CAAC,EAAE,OACvBA,EAAO,QAAQ,CAACh/D,EAAOr8Q,IAAM,CACzBi3R,EAAY5a,EAAM,SAAWuB,EAAM,IAAM,kBAAkBA,CAAI,sBAAsB59Q,CAAC,+CACtD49Q,CAAI,GAAG,CAC/C,CAAK,EACDqZ,EAAYjkG,GAAQ,GAAKA,EAAO4qF,EAAM,IAAM,kBAAkBA,CAAI,iCAAiCA,EAAO,CAAC,GAAG,EAC9G,MAAM09D,EAAaD,EAAO,CAAC,EAC3BA,EAAO,QAAQ,CAACh/D,EAAOr8Q,IAAM,CACzB,QAASrD,EAAI,EAAGA,EAAIihR,EAAMjhR,IACtBs6R,EAAat6R,IAAMq2L,GAAUqpF,EAAM1/Q,CAAC,IAAM2+U,EAAW3+U,CAAC,EAAI,IAAM,kBAAkBihR,CAAI,uBAAuB59Q,CAAC,MAAMq8Q,CAAK,2CAC5Ei/D,CAAU,qCAChBt7U,CAAC,GAAG,CAEvD,CAAK,CACL,CACO,SAASg5U,GAAgBqC,EAAQroJ,EAAM,CAC1C,MAAM0jH,EAAc2kC,EAAO,CAAC,EAAE,MAAO,EACrC,QAASr7U,EAAI,EAAGA,EAAIq7U,EAAO,OAAQr7U,IAC/B02S,EAAY1jH,CAAI,GAAKqoJ,EAAOr7U,CAAC,EAAEgzL,CAAI,EAEvC,OAAO0jH,CACX,CCvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,IAAI6kC,IACV,SAAUA,EAAkB,CACzBA,EAAiBA,EAAiB,eAAoB,CAAC,EAAI,iBAC3DA,EAAiBA,EAAiB,aAAkB,CAAC,EAAI,eACzDA,EAAiBA,EAAiB,YAAiB,CAAC,EAAI,cACxDA,EAAiBA,EAAiB,WAAgB,CAAC,EAAI,aACvDA,EAAiBA,EAAiB,WAAgB,CAAC,EAAI,aACvDA,EAAiBA,EAAiB,WAAgB,CAAC,EAAI,YAC3D,GAAGA,KAAqBA,GAAmB,GAAG,EACvC,SAASC,IAAkCC,EAAYp/D,EAAOq/D,EAAY,CAI7E,IAAIhlC,EAAc,IAAI,MACtB,GAAIglC,GAAc,MAAQr/D,GAAS,KAC/B,OAAOq6B,EAEX,GAAIr6B,GAAS,KAET,KAAOq6B,EAAY,OAAS+kC,EAAaC,EAAW,QAChDhlC,EAAY,KAAK,EAAE,OAIvBA,EAAcr6B,EAAM,MAAO,EAE/B,GAAIq/D,GAAc,KACd,OAAOhlC,EAGX,GAAI+kC,EAAaC,EAAW,SAAWhlC,EAAY,OAC/C,MAAM,IAAI,MAAM,4BAA4Br6B,CAAK,sCAAsCo/D,EACnFC,EAAW,MAAM,sBAAsBhlC,EAAY,MAAM,EAAE,EAEnE,QAAS12S,EAAI,EAAGA,EAAI07U,EAAW,OAAQ,EAAE17U,EAAG,CACxC,MAAM27U,EAAWD,EAAW17U,CAAC,EACvB47U,EAAsBllC,EAAYA,EAAY,OAASglC,EAAW,OAAS17U,CAAC,EAC5E67U,EAAiBnlC,EAAYklC,CAAmB,EACtD,GAAID,GAAY,EACZ,GAAIE,GAAkB,GAClB,GAAIA,IAAmBF,EACnB,MAAM,IAAI,MAAM,4BAA4Bt/D,CAAK,qCAAqCr8Q,EAAIy7U,CAAU,OAAOE,CAAQ,cAAc37U,EAAIy7U,CAAU,OAAOI,CAAc,EAAE,OAI1KnlC,EAAYklC,CAAmB,EAAID,CAGnD,CACI,OAAOjlC,CACX,CACO,SAASolC,IAA2BC,EAAyB,CAChE,MAAMC,EAAe,CACjB,eAAkBT,GAAiB,eACnC,aAAgBA,GAAiB,aACjC,YAAeA,GAAiB,YAChC,WAAcA,GAAiB,WAC/B,WAAcA,GAAiB,WAC/B,WAAcA,GAAiB,UAClC,EACK16U,EAAS,CAAE,EACjB,UAAWo7U,KAAWF,EAClB,GAAIE,KAAWD,EACXn7U,EAAO,KAAKm7U,EAAaC,CAAO,CAAC,MAGjC,OAGR,OAAOp7U,CACX,CACO,SAASq7U,IAActyB,EAAmB,CAC7C,OAAIA,EAAkB,SAAW,EACtB,EAEPA,EAAkB,CAAC,IAAM2xB,GAAiB,eACnC3xB,EAAkB,OAAS,EAE/BA,EAAkB,MAC7B,CACO,SAASuyB,IAA0BC,EAAmBV,EAAY,CACrE,GAAIU,GAAqB,MAAQV,GAAc,KAC3C,OAEJ,MAAMW,EAAeD,EAAkB,OACjCE,EAAcZ,EAAW,OAC/B,GAAIW,GAAgBC,EAChB,MAAM,IAAI,MAAM,sBAAsBF,CAAiB,uCAAuCV,CAAU,2CAA2CW,CAAY,4DAA4DC,CAAW,GAAG,EAE7O,QAASt8U,EAAI,EAAGA,EAAI,KAAK,IAAIq8U,EAAcC,EAAc,CAAC,EAAG,EAAEt8U,EAAG,CAC9D,MAAMu8U,EAAaH,EAAkBp8U,CAAC,EAChC27U,EAAWD,EAAW17U,EAAI,CAAC,EACjC,GAAIu8U,GAAc,GAAKZ,GAAY,GAAKY,IAAe,GACnDA,IAAeZ,EACf,MAAM,IAAI,MAAM,sBAAsBS,CAAiB,8CAA8CV,CAAU,yCAAyC17U,EAAIo8U,EAAkB,MAAM,OAAOG,CAAU,6CAA6Cv8U,EAAIo8U,EAAkB,MAAM,OAAOT,CAAQ,EAAE,CAE3S,CACA,CCjHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBO,SAASa,GAAezd,EAAQ0d,EAAaC,EAAY,CAC5D,MAAMxlE,EAAUwlE,GAAc,OAAO3d,GAAW,SAAWA,EAASA,EAAO,CAAC,GACtE5nD,EAAUslE,GAAe,OAAO1d,GAAW,SAAWA,EAASA,EAAO,CAAC,GAC7E,MAAO,CAAC7nD,EAASC,CAAO,CAC5B,CCrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAwBO,SAASwlE,GAAY/oD,EAAY4e,EAAYE,EAAMkqC,EAAe,GAAM,CAC3E,IAAIC,EAAW,CAAE,EACjB,GAAID,EACAC,EAAWA,EAAS,OAAOrqC,EAAW,MAAM,CAAC,CAAC,EAC9CqqC,EAAS,KAAKjpD,EAAW,CAAC,EAAI8e,CAAI,EAClCmqC,EAAWA,EAAS,OAAOjpD,EAAW,MAAM,CAAC,CAAC,MAE7C,CACDipD,EAAWA,EAAS,OAAOjpD,EAAW,CAAC,CAAC,EACxC,MAAMkpD,EAAgBtqC,EAAW,OACjC,QAAS,EAAI,EAAG,EAAIsqC,EAAe,EAAE,EACjCD,EACIA,EAAS,OAAO,CAACjpD,EAAW,EAAI,CAAC,EAAI4e,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,CAAC,EAE1EqqC,EAAWA,EAAS,OAAOjpD,EAAW,MAAMkpD,EAAgB,CAAC,CAAC,CACtE,CACI,OAAOD,CACX,CAUO,SAASE,GAAYC,EAAcC,EAAgBL,EAAe,GAAM,CAC3E,MAAMM,EAAW,CAAE,EACnB,GAAIN,EAAc,CACdM,EAAS,KAAKD,CAAc,EAC5B,QAASj9U,EAAIi9U,EAAiB,EAAGj9U,EAAIg9U,EAAc,EAAEh9U,EAC7CA,GAAK,EAAIi9U,GACTC,EAAS,KAAKl9U,CAAC,EACfk9U,EAAS,KAAKl9U,GAAKi9U,EAAiB,EAAE,GAGtCC,EAAS,KAAKl9U,CAAC,CAG/B,KACS,CACD,MAAMm9U,EAAsB,CAAE,EACxBC,EAAqB,CAAE,EAC7B,QAAS,EAAI,EAAG,EAAIJ,EAAc,EAAE,EAC5B,GAAKC,EAAiB,EAAI,GAAK,EAAI,IAAM,EACzCG,EAAmB,KAAK,CAAC,EAGzBD,EAAoB,KAAK,CAAC,EAGlCD,EAAS,KAAK,GAAGC,CAAmB,EACpCD,EAAS,KAAK,CAAC,EACfA,EAAS,KAAK,GAAGE,CAAkB,CAC3C,CACI,OAAOF,CACX,CAUO,SAASG,GAAoBzpD,EAAY4e,EAAYE,EAAMkqC,EAAe,GAAM,CACnF,MAAMU,EAAmB,CAAE,EACvBV,EACAU,EAAiB,KAAK1pD,EAAW,CAAC,EAAI8e,CAAI,EAG1C4qC,EAAiB,KAAK1pD,EAAW,CAAC,EAAI8e,CAAI,EAE9C,QAAS1yS,EAAI,EAAGA,EAAI4zR,EAAW,OAAQ,EAAE5zR,EACjCA,GAAKwyS,EAAW,OACZoqC,EACAU,EAAiB,KAAK9qC,EAAWxyS,EAAI,CAAC,EAAI4zR,EAAW5zR,CAAC,CAAC,EAGvDs9U,EAAiB,KAAK1pD,EAAW5zR,CAAC,EAAIwyS,EAAWxyS,EAAI,CAAC,CAAC,EAI3Ds9U,EAAiB,KAAK1pD,EAAW5zR,CAAC,CAAC,EAG3C,OAAOs9U,CACX,CAKO,SAASC,GAAoB9qC,EAAOD,EAAY,CACnD,MAAMgrC,EAAmB,CAAC,CAAC,EAC3B,QAASx9U,EAAI,EAAGA,EAAIwyS,EAAY,EAAExyS,EAC9Bw9U,EAAiB,KAAK/qC,EAAMzyS,CAAC,EAAE,CAAC,CAAC,EAErC,OAAOw9U,CACX,CAYO,SAASC,GAAaC,EAAgBjrC,EAAOD,EAAY,CAC5D,MAAML,EAAYurC,EAAe,MAAM,EAAG,CAAC,EAC3C,QAAS19U,EAAI,EAAGA,EAAIwyS,EAAY,EAAExyS,EAC9BmyS,EAAU,KAAKurC,EAAe19U,EAAI,CAAC,EAAIyyS,EAAMzyS,CAAC,EAAE,CAAC,EAAIyyS,EAAMzyS,CAAC,EAAE,CAAC,CAAC,EAEpE,OAAOmyS,CACX,CC9IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,MAAMwrC,IAAkB,mBAClBC,IAAa,mBCjB1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBO,MAAMC,IAAQ,SACRC,IAAS,WACTC,IAAS,YACTC,IAAS,YACTC,IAAS,aACTC,IAAS,YCrBtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BO,SAASC,GAAuBz/C,EAAMC,EAAM,CAC/C,GAAID,EAAK,SAAWC,EAAK,OACrB,MAAM,IAAI,MAAM,gEACTD,EAAK,MAAM,WAAWC,EAAK,MAAM,GAAG,EAE/C,MAAM99R,EAAS,IAAI,aAAa69R,EAAK,OAAS,CAAC,EAC/C,QAAS1+R,EAAI,EAAGA,EAAIa,EAAO,OAAQb,GAAK,EACpCa,EAAOb,CAAC,EAAI0+R,EAAK1+R,EAAI,CAAC,EACtBa,EAAOb,EAAI,CAAC,EAAI2+R,EAAK3+R,EAAI,CAAC,EAE9B,OAAOa,CACX,CAeO,SAASu9U,IAAuBtlJ,EAAS,CAC5C,MAAM4lG,EAAO,IAAI,aAAa5lG,EAAQ,OAAS,CAAC,EAC1C6lG,EAAO,IAAI,aAAa7lG,EAAQ,OAAS,CAAC,EAChD,QAAS94L,EAAI,EAAGA,EAAI84L,EAAQ,OAAQ94L,GAAK,EACrC0+R,EAAK1+R,EAAI,CAAC,EAAI84L,EAAQ94L,CAAC,EACvB2+R,EAAK3+R,EAAI,CAAC,EAAI84L,EAAQ94L,EAAI,CAAC,EAE/B,MAAO,CAAE,KAAA0+R,EAAM,KAAAC,CAAM,CACzB,CAKO,SAAS0/C,IAAqBvlJ,EAAS,CAC1C,MAAM5zJ,EAAM,KAAK,KAAK4zJ,EAAQ,OAAS,CAAC,EAClC4lG,EAAO,IAAI,aAAax5P,CAAG,EAC3By5P,EAAO,IAAI,aAAaz5P,CAAG,EACjC,QAASllC,EAAI,EAAGA,EAAI84L,EAAQ,OAAQ94L,GAAK,EACrC0+R,EAAK,KAAK,MAAM1+R,EAAI,CAAC,CAAC,EAAI84L,EAAQ94L,CAAC,EACnC2+R,EAAK,KAAK,MAAM3+R,EAAI,CAAC,CAAC,EAAI84L,EAAQ94L,EAAI,CAAC,EAE3C,MAAO,CAAE,KAAA0+R,EAAM,KAAAC,CAAM,CACzB,CAKO,SAAS2/C,IAAoBxlJ,EAAS,CACzC,MAAM5zJ,EAAM,KAAK,MAAM4zJ,EAAQ,OAAS,CAAC,EACnC4lG,EAAO,IAAI,aAAax5P,CAAG,EAC3By5P,EAAO,IAAI,aAAaz5P,CAAG,EACjC,QAASllC,EAAI,EAAGA,EAAI84L,EAAQ,OAAQ94L,GAAK,EACrC0+R,EAAK,KAAK,MAAM1+R,EAAI,CAAC,CAAC,EAAI84L,EAAQ94L,CAAC,EACnC2+R,EAAK,KAAK,MAAM3+R,EAAI,CAAC,CAAC,EAAI84L,EAAQ94L,EAAI,CAAC,EAE3C,MAAO,CAAE,KAAA0+R,EAAM,KAAAC,CAAM,CACzB,CAMO,SAAS4/C,GAAoBzlJ,EAASr1L,EAAO,CAChD,MAAMi7R,EAAO5lG,EAAQr1L,EAAQ,CAAC,EACxBk7R,EAAO7lG,EAAQr1L,EAAQ,EAAI,CAAC,EAClC,MAAO,CAAE,KAAAi7R,EAAM,KAAAC,CAAM,CACzB,CAOO,SAAS6/C,IAAmB5nU,EAAM8nR,EAAMC,EAAMl7R,EAAO,CACxDmT,EAAKnT,EAAQ,CAAC,EAAIi7R,EAClB9nR,EAAKnT,EAAQ,EAAI,CAAC,EAAIk7R,CAC1B,CAIO,SAAS8/C,IAAUjiV,EAAGkiV,EAAS,CAClC,MAAMhgD,EAAO,IAAI,aAAaliS,EAAI,CAAC,EAC7BmiS,EAAO,IAAI,aAAaniS,EAAI,CAAC,EACnC,QAASwD,EAAI,EAAGA,EAAI,KAAK,KAAKxD,EAAI,CAAC,EAAGwD,IAAK,CACvC,MAAMhD,GAAK0hV,EAAU,EAAI,IAAM,KAAK,IAAM1+U,EAAIxD,GAC9CkiS,EAAK1+R,CAAC,EAAI,KAAK,IAAIhD,CAAC,EACpB2hS,EAAK3+R,CAAC,EAAI,KAAK,IAAIhD,CAAC,CAC5B,CACI,MAAO,CAAE,KAAA0hS,EAAM,KAAAC,CAAM,CACzB,CAIO,SAASggD,IAAStgV,EAAG7B,EAAGkiV,EAAS,CACpC,MAAM1hV,GAAK0hV,EAAU,EAAI,IAAM,KAAK,IAAMrgV,EAAI7B,GACxCkiS,EAAO,KAAK,IAAI1hS,CAAC,EACjB2hS,EAAO,KAAK,IAAI3hS,CAAC,EACvB,MAAO,CAAE,KAAA0hS,EAAM,KAAAC,CAAM,CACzB,CCtIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBA,MAAMigD,GAAQ,KACRC,IAAc,MACdC,GAAQ,IACRC,GAAW,MAcV,SAASC,IAAqB/jC,EAAUgkC,EAAY,CACvDhkC,EAAWA,EAAS,QAAQ,MAAO,EAAE,EACrC,MAAMikC,GAAajkC,EAAS,OAASA,EAAS,QAAQ4jC,IAAa,EAAE,EAAE,QACnED,GAAM,OACV,GAAIM,EAAY,EACZ,MAAM,IAAI,MAAM,+CAA+C,EAE9D,GAAIA,EAAY,EACjB,MAAM,IAAI,MAAM,6CAA6CN,EAAK,KAAK,EAE3E,KAAM,CAACO,EAAaC,CAAY,EAAInkC,EAAS,MAAM2jC,EAAK,EACxD/5M,EAAOs6M,EAAY,QAAQJ,EAAQ,IAAM,GAAI,IAAM,2BAA2BA,EAAQ,0BAA0B,EAChH,MAAMM,EAAaF,EAAY,MAAML,EAAK,EACpCQ,EAAYD,EAAW,OAC7B,GAAIJ,IAAeK,EACf,MAAM,IAAI,MAAM,YAAYA,CAAS,4BAA4BL,CAAU,EAAE,EAEjF,GAAIK,EAAY,EACZ,MAAM,IAAI,MAAM,+DAA+D,EAEnF,MAAMC,EAAU,CAAE,EAClB,QAASv/U,EAAI,EAAGA,EAAIo/U,EAAa,OAAQ,EAAEp/U,EAAG,CAC1C,MAAMw/U,EAAUJ,EAAap/U,CAAC,EAC9B,GAAI,CAACq/U,EAAW,KAAKI,GAAaA,EAAU,QAAQD,CAAO,IAAM,EAAE,EAC/D,MAAM,IAAI,MAAM,uCAAuCA,CAAO,uCACpB,EAE1CD,EAAQ,QAAQC,CAAO,IAAM,IAC7BD,EAAQ,KAAKC,CAAO,CAEhC,CACI,QAASx/U,EAAI,EAAGA,EAAIm/U,EAAY,OAAQ,EAAEn/U,EAAG,CACzC,MAAMw/U,EAAUL,EAAYn/U,CAAC,EACzBu/U,EAAQ,QAAQC,CAAO,IAAM,IAAMA,IAAYV,IAC/CS,EAAQ,KAAKC,CAAO,CAEhC,CACI,MAAME,EAAS,IAAI,MAAML,EAAW,MAAM,EAC1C,QAASr/U,EAAI,EAAGA,EAAIs/U,EAAW,EAAEt/U,EAAG,CAChC,GAAI,IAAI,IAAIq/U,EAAWr/U,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAASq/U,EAAWr/U,CAAC,EAAE,OACxD,MAAM,IAAI,MAAM,2CAA2Cq/U,EAAWr/U,CAAC,CAAC,+DACP,EAErE0/U,EAAO1/U,CAAC,EAAI,CAAE,EACd,QAASi+Q,EAAI,EAAGA,EAAIohE,EAAWr/U,CAAC,EAAE,OAAQ,EAAEi+Q,EACxCyhE,EAAO1/U,CAAC,EAAE,KAAKu/U,EAAQ,QAAQF,EAAWr/U,CAAC,EAAEi+Q,CAAC,CAAC,CAAC,CAE5D,CACI,MAAM85C,EAAUwnB,EAAQ,OAClBI,EAAaP,EAAa,OAC1BQ,EAAa,GACnB,QAAS5/U,EAAI2/U,EAAY3/U,EAAI+3T,EAAS,EAAE/3T,EACpC4/U,EAAW,KAAK5/U,CAAC,EAErB,MAAO,CAAE,QAAAu/U,EAAS,WAAAK,EAAY,OAAAF,CAAQ,CAC1C,CAYO,SAASG,IAAqBC,EAAOJ,EAAQ,CAChD,IAAIK,EAAqB,IAAI,MAAMD,CAAK,EACxCC,EAAmB,KAAK,EAAE,EAC1B,QAAS//U,EAAI,EAAGA,EAAI0/U,EAAO,OAAQ,EAAE1/U,EACjC+/U,EAAmBL,EAAO1/U,CAAC,CAAC,EAAIA,EAEpC,MAAMi+S,EAAa,CAAE,EACrB,QAASj+S,EAAI,EAAGA,EAAI8/U,EAAO,EAAE9/U,EACrB+/U,EAAmB//U,CAAC,IAAM,IAC1Bi+S,EAAW,KAAKj+S,CAAC,EAGzB,OAAA+/U,EAAqBA,EAAmB,OAAO5hV,GAAKA,IAAM,EAAE,EACrD,CAAE,mBAAA4hV,EAAoB,WAAA9hC,CAAY,CAC7C,CAKO,SAAS+hC,IAAoBF,EAAOJ,EAAQzkD,EAAS,CACxD,MAAMglD,EAAW,IAAI,MAAMH,CAAK,EAChC,QAAS9/U,EAAI,EAAGA,EAAIi7R,EAAQ,OAAQ,EAAEj7R,EAAG,CACrC,MAAMq8Q,EAAQ4e,EAAQj7R,CAAC,EAAE,MACzB,QAASi+Q,EAAI,EAAGA,EAAIyhE,EAAO1/U,CAAC,EAAE,OAAQ,EAAEi+Q,EAChCgiE,EAASP,EAAO1/U,CAAC,EAAEi+Q,CAAC,CAAC,IAAM,OAC3BgiE,EAASP,EAAO1/U,CAAC,EAAEi+Q,CAAC,CAAC,EAAI5B,EAAM4B,CAAC,EAGhCp5I,EAAOo7M,EAASP,EAAO1/U,CAAC,EAAEi+Q,CAAC,CAAC,IAAM5B,EAAM4B,CAAC,EAAG,IAAM,sBAAsBgiE,EAASP,EAAO1/U,CAAC,EAAEi+Q,CAAC,CAAC,CAAC,YAAYA,CAAC,oBACpF,KAAK,UAAU5B,CAAK,CAAC,uBACnBA,EAAM4B,CAAC,CAAC,EAAE,CAGnD,CACA,CAgBO,SAASiiE,IAAqBN,EAAYF,EAAQ,CACrD,MAAM1uU,EAAO4uU,EACPz+J,EAAQ,CAAE,EAChB,IAAIg/J,EAAS,EACTP,EAAW,SAAW,GAEtB5uU,EAAK,KAAK,EAAE,EAEhBmvU,EAASP,EAAW,OAAS,EAC7B,QAAS,EAAI,EAAG,EAAIO,EAAQ,EAAE,EAC1Bh/J,EAAM,KAAK,EAAE,EAEjB,MAAMi/J,EAAsB,CAAE,EAC9B,QAAS,EAAI,EAAG,EAAIpvU,EAAK,OAAQ,EAAE,EAAG,CAClC,MAAMqvU,EAAYrvU,EAAK,CAAC,EAClBsvU,EAAcC,IAAiBb,EAAQW,CAAS,EACtD,UAAWG,KAAaF,EAChBF,EAAoB,QAAQI,CAAS,IAAM,KAC3Cr/J,EAAM,CAAC,EAAE,KAAKq/J,CAAS,EACvBJ,EAAoB,KAAKI,CAAS,EAGlD,CACI,MAAO,CAAE,KAAAxvU,EAAM,MAAAmwK,CAAO,CAC1B,CAEO,SAASs/J,IAAsB3pB,EAAM,CACxC,OAAOA,EAAK,MAAM,CAAC9d,EAAKv1S,IAAUu1S,IAAQv1S,CAAK,CACnD,CACA,SAAS88U,IAAiBb,EAAQ1mC,EAAK,CACnC,MAAMsnC,EAAc,CAAE,EACtB,QAAStgV,EAAI,EAAGA,EAAI0/U,EAAO,OAAQ,EAAE1/U,GAC7B0/U,EAAO1/U,CAAC,EAAE,SAAW,GAAK0/U,EAAO1/U,CAAC,EAAE,QAAQg5S,CAAG,IAAM,IAAMA,IAAQ,KACnEsnC,EAAY,KAAKtgV,CAAC,EAG1B,OAAOsgV,CACX,CCtLO,SAASI,GAAiB1jV,EAAG60T,EAAiB7+H,EAAO,EAAG,CAC3D,IAAI2tJ,EAAa,CAAE,EACnB,GAAI,OAAQ9uB,GAAqB,SAC7BhtL,EAAO7nI,EAAE,MAAMg2L,CAAI,EAAI6+H,IAAoB,EAAG,IAAM,+CAA+C,EACnG8uB,EACI,IAAI,MAAM9uB,CAAe,EAAE,KAAK70T,EAAE,MAAMg2L,CAAI,EAAI6+H,CAAe,MAElE,CACD,MAAM+uB,EAAY/uB,EAAgB,OAAO,CAACxgS,EAAO9wB,KACzCA,IAAU,KACV8wB,GAAS,GAENA,GACR,CAAC,EACJwzG,EAAO+7M,GAAa,EAAG,IAAM,yDAAyD,EACtF,MAAMC,EAAWhvB,EAAgB,QAAQ,EAAE,EAG3C,GAAIgvB,IAAa,GAAI,CACjB,MAAMh0K,EAAQglJ,EAAgB,OAAO,CAAC,EAAGp0T,IAAMA,EAAI,EAAI,EAAIA,EAAI,CAAC,EAChEo0T,EAAgBgvB,CAAQ,EAAI7jV,EAAE,MAAMg2L,CAAI,EAAInmB,CACxD,CACQhoC,EAAO7nI,EAAE,MAAMg2L,CAAI,IAAM6+H,EAAgB,OAAO,CAACz0T,EAAGK,IAAML,EAAIK,CAAC,EAAG,IAAM,6DAA6D,EACrIkjV,EAAa9uB,CACrB,CACI,OAAO8uB,CACX,CChCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBO,SAASG,GAAgDC,EAAe,CAC3E,MAAO;AAAA,uBACYA,CAAa,EACpC,CAOO,SAASC,GAAgDv9U,EAAOlD,EAAO,CAC1E,MAAO,WAAWkD,CAAK,oBAAoBlD,CAAK,MACpD,CAQO,SAAS0gV,GAAkDx9U,EAAOlD,EAAOuP,EAAO,CACnF,MAAO,WAAWrM,CAAK,oBAAoBlD,CAAK,OAAOuP,CAAK,EAChE,CC3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAuBO,SAASoxU,GAAyDC,EAAMC,EAAM,CACjF,MAAO,iDAAiDD,CAAI,QAAQC,CAAI,EAC5E,CAOO,SAASC,GAA8CroC,EAAKz4S,EAAO,CACtE,MAAO,QAAQy4S,CAAG,8BAA8Bz4S,CAAK,EACzD,CAKO,SAAS+gV,IAAuD,CACnE,MAAO,+GAEX,CAOO,SAASC,GAAgD3tD,EAAY8iB,EAAa,CACrF,MAAM8qC,EAAYvkE,GAAc2W,CAAU,EACpCm8B,EAAa9yC,GAAcy5B,CAAW,EAC5C,MAAO,2CAA2C8qC,CAAS;AAAA,iEACEzxB,CAAU,gBAAgBn8B,CAAU,iBAAiB8iB,CAAW,EACjI,CAOO,SAAS+qC,GAAgD7tD,EAAY8iB,EAAa,CACrF,MAAM8qC,EAAYvkE,GAAc2W,CAAU,EACpCm8B,EAAa9yC,GAAcy5B,CAAW,EAC5C,MAAO,qCAAqC8qC,CAAS,8CAA8CzxB,CAAU,gBAAgBn8B,CAAU,gBAAgB8iB,CAAW,EACtK,CCjEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBO,SAASgrC,IAA0D,CACtE,MAAO,0BACX,CAKO,SAASC,IAA+D,CAC3E,MAAO,gCACX,CAOO,SAASC,GAAyD7rP,EAAW44M,EAAY,CAC5F,MAAO,cAAc54M,CAAS,qBAAqB44M,CAAU,qDACjE,CAQO,SAASkzC,GAAuDp+U,EAAOq+U,EAAYrzC,EAAW,CACjG,MAAO,gBAAgBhrS,CAAK,QAAQq+U,CAAU,qBAAqBrzC,CAAS,GAChF,CChDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmDO,SAASszC,GAAyB/kV,EAAG0gS,EAAS1qG,EAAM+rH,EAAW,CAClE,MAAMqV,EAAc12B,EAAQ,MAAM,OAC5B67C,EAAQv8U,EAAE,MAAM,OACtB,GAAI+hT,IAAc,IACVA,EAAY,CAACqV,GAAerV,EAAYqV,GACxC,MAAM,IAAI,MAAM,sCAAsCA,CAAW,KAAKA,CAAW,cAAcrV,CAAS,EAAE,EAMlH,GAHIA,EAAY,IACZA,GAAaqV,GAEbrV,EAAYw6B,EACZ,MAAM,IAAI,MAAM,cAAcx6B,CAAS;AAAA,MACzCw6B,CAAK,IAAI,EAEX,GAAIvmJ,EAAO+rH,EACP,MAAM,IAAI,MAAM,cAAcA,CAAS,yCAAyC/rH,CAAI,IAAI,EAE5F,QAAShzL,EAAI,EAAGA,EAAI++S,EAAW,EAAE/+S,EAC7B,GAAIhD,EAAE,MAAMgD,CAAC,IAAM09R,EAAQ,MAAM19R,CAAC,EAC9B,MAAM,IAAI,MAAM,WAAWA,CAAC,MAAMhD,EAAE,MAAMgD,CAAC,CAAC,qCAAqCA,CAAC,MAAM09R,EAAQ,MAAM19R,CAAC,CAAC,GAAG,EAGnH,MAAMu/Q,EAAUviR,EAAE,MAAMg2L,CAAI,EACtB0jH,EAAc,CAAE,EACtB,IAAI7J,EAAY,EACZm1C,EAAY,EACZ7vC,EAAY,EAChB,QAASnyS,EAAI,EAAGA,EAAI++S,EAAW,EAAE/+S,EAC7B02S,EAAY,KAAK15S,EAAE,MAAMgD,CAAC,CAAC,EAC3B6sS,GAAa7vS,EAAE,MAAMgD,CAAC,EAE1B,QAASA,EAAI++S,EAAW/+S,EAAIgzL,EAAMhzL,IAC9B02S,EAAY,KAAK15S,EAAE,MAAMgD,CAAC,CAAC,EAC3BgiV,GAAahlV,EAAE,MAAMgD,CAAC,EAE1B,QAASA,EAAI++S,EAAW/+S,EAAIo0T,EAAap0T,IACrC02S,EAAY,KAAKhZ,EAAQ,MAAM19R,CAAC,CAAC,EAErC,QAASA,EAAIgzL,EAAO,EAAGhzL,EAAIu5U,EAAOv5U,IAC9B02S,EAAY,KAAK15S,EAAE,MAAMgD,CAAC,CAAC,EAC3BmyS,GAAan1S,EAAE,MAAMgD,CAAC,EAE1B,MAAO,CAAE,UAAA6sS,EAAW,UAAAsF,EAAW,UAAA6vC,EAAW,QAAAziE,EAAS,YAAAm3B,CAAa,CACpE,CC/FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6CO,SAASurC,GAAuB5jE,EAAM,CACzC,GAAI,CAEA,OAAOA,EAAK,IAAIv2Q,GAAO0qR,GAAa1qR,CAAG,CAAC,CAChD,OACWma,EAAK,CACR,MAAM,IAAI,MAAM,4DAA4DA,CAAG,EAAE,CACzF,CACA,CACO,SAASigU,GAAuBC,EAAS,CAC5C,OAAOA,EAAQ,IAAIpiV,GAAKkyR,GAAalyR,CAAC,CAAC,CAC3C,CCxDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAsBA8xU,IAAoB,cCtBnB,UAAU,CAKE,IAAI70U,EAAE,SAAS4sG,EAAGxsG,EAAE,CAAC,IAAIK,EAAE,EAAE,OAAO,UAAU,CAAC,OAAOA,EAAEL,EAAE,OAAO,CAAC,KAAK,GAAG,MAAMA,EAAEK,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI89G,EAAe,OAAO,OAAO,kBAA1B,WAA2C,OAAO,eAAe,SAASn+G,EAAEK,EAAEW,EAAE,CAAC,OAAGhB,GAAG,MAAM,WAAWA,GAAG,OAAO,YAAmBA,EAAEK,CAAC,EAAEW,EAAE,OAAahB,CAAC,EACjR,SAASysG,EAAGzsG,EAAE,CAACA,EAAE,CAAW,OAAO,YAAjB,UAA6B,WAAWA,EAAY,OAAO,QAAjB,UAAyB,OAAiB,OAAO,MAAjB,UAAuB,KAAe,OAAOqkP,IAAjB,UAAyBA,EAAM,EAAE,QAAQhkP,EAAE,EAAEA,EAAEL,EAAE,OAAO,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAEK,CAAC,EAAE,GAAGW,GAAGA,EAAE,MAAM,KAAK,OAAOA,CAAC,CAAC,MAAM,MAAM,2BAA2B,CAAE,CAAC,IAAInB,EAAE4sG,EAAG,IAAI,EAAE,SAASxsG,EAAED,EAAEK,EAAE,CAAC,GAAGA,EAAEL,EAAE,CAAC,IAAIgB,EAAEnB,EAAEG,EAAEA,EAAE,MAAM,GAAG,EAAE,QAAQe,EAAE,EAAEA,EAAEf,EAAE,OAAO,EAAEe,IAAI,CAAC,IAAIT,EAAEN,EAAEe,CAAC,EAAE,GAAG,EAAET,KAAKU,GAAG,MAAMhB,EAAEgB,EAAEA,EAAEV,CAAC,CAAC,CAACN,EAAEA,EAAEA,EAAE,OAAO,CAAC,EAAEe,EAAEC,EAAEhB,CAAC,EAAEK,EAAEA,EAAEU,CAAC,EAAEV,GAAGU,GAASV,GAAN,MAAS89G,EAAGn9G,EAAEhB,EAAE,CAAC,aAAa,GAAG,SAAS,GAAG,MAAMK,CAAC,CAAC,CAAC,CAAC,CACpeJ,EAAE,SAAS,SAASD,EAAE,CAAC,SAASK,EAAEc,GAAE,CAAC,GAAG,gBAAgBd,EAAE,MAAM,IAAI,UAAU,6BAA6B,EAAE,OAAO,IAAIW,EAAED,GAAGI,IAAG,IAAI,IAAIb,IAAIa,EAAC,CAAC,CAAC,SAASH,EAAEG,GAAEC,EAAE,CAAC,KAAK,EAAED,GAAEg9G,EAAG,KAAK,cAAc,CAAC,aAAa,GAAG,SAAS,GAAG,MAAM/8G,CAAC,CAAC,CAAC,CAAC,GAAGpB,EAAE,OAAOA,EAAEgB,EAAE,UAAU,SAAS,UAAU,CAAC,OAAO,KAAK,CAAC,EAAE,IAAID,EAAE,kBAAkB,IAAI,KAAK,OAAQ,IAAG,GAAG,IAAIT,EAAE,EAAE,OAAOD,CAAC,CAAC,EAClWJ,EAAE,kBAAkB,SAASD,EAAE,CAAC,GAAGA,EAAE,OAAOA,EAAEA,EAAE,OAAO,iBAAiB,EAAE,QAAQK,EAAE,uHAAuH,MAAM,GAAG,EAAEW,EAAE,EAAEA,EAAEX,EAAE,OAAOW,IAAI,CAAC,IAAID,EAAElB,EAAEQ,EAAEW,CAAC,CAAC,EAAe,OAAOD,GAApB,YAAmC,OAAOA,EAAE,UAAUf,CAAC,GAAhC,YAAmCm+G,EAAGp9G,EAAE,UAAUf,EAAE,CAAC,aAAa,GAAG,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO2sG,EAAGH,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAOxsG,CAAC,CAAC,EAAE,SAAS2sG,EAAG3sG,EAAE,CAAC,OAAAA,EAAE,CAAC,KAAKA,CAAC,EAAEA,EAAE,OAAO,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,EAASA,CAAC,CAChe,SAASE,EAAEF,EAAE,CAAC,IAAIK,EAAe,OAAO,OAApB,KAA4B,OAAO,UAAUL,EAAE,OAAO,QAAQ,EAAE,OAAOK,EAAEA,EAAE,KAAKL,CAAC,EAAE,CAAC,KAAKwsG,EAAGxsG,CAAC,CAAC,CAAC,CAAC,SAASG,EAAEH,EAAE,CAAC,GAAG,EAAEA,aAAa,OAAO,CAACA,EAAEE,EAAEF,CAAC,EAAE,QAAQK,EAAEW,EAAE,CAAE,EAAC,EAAEX,EAAEL,EAAE,KAAI,GAAI,MAAMgB,EAAE,KAAKX,EAAE,KAAK,EAAEL,EAAEgB,CAAC,CAAC,OAAOhB,CAAC,CAAC,IAAI4sG,EAAe,OAAO,OAAO,QAA1B,WAAiC,OAAO,OAAO,SAAS5sG,EAAE,CAAC,SAASK,GAAG,EAAE,OAAAA,EAAE,UAAUL,EAAS,IAAIK,CAAC,EAAEwsG,EAC/U,GAAe,OAAO,OAAO,gBAA1B,WAAyCA,EAAG,OAAO,mBAAmB,CAAC,IAAIC,EAAG9sG,EAAE,CAAC,IAAI+sG,EAAG,CAAC,EAAE,EAAE,EAAEC,EAAG,GAAG,GAAG,CAACA,EAAG,UAAUD,EAAGD,EAAGE,EAAG,EAAE,MAAMhtG,CAAC,MAAS,CAAE,CAAA8sG,EAAG,EAAE,CAACD,EAAGC,EAAG,SAAS9sG,EAAEK,EAAE,CAAe,GAAdL,EAAE,UAAUK,EAAKL,EAAE,YAAYK,EAAE,MAAM,IAAI,UAAUL,EAAE,oBAAoB,EAAE,OAAOA,CAAC,EAAE,IAAI,CAAC,IAAIitG,EAAGJ,EACnR,SAASzsG,EAAEJ,EAAEK,EAAE,CAAuD,GAAtDL,EAAE,UAAU4sG,EAAGvsG,EAAE,SAAS,EAAEL,EAAE,UAAU,YAAYA,EAAKitG,EAAGA,EAAGjtG,EAAEK,CAAC,MAAO,SAAQW,KAAKX,EAAE,GAAgBW,GAAb,YAAe,GAAG,OAAO,iBAAiB,CAAC,IAAID,EAAE,OAAO,yBAAyBV,EAAEW,CAAC,EAAED,GAAG,OAAO,eAAef,EAAEgB,EAAED,CAAC,CAAC,MAAMf,EAAEgB,CAAC,EAAEX,EAAEW,CAAC,EAAEhB,EAAE,GAAGK,EAAE,SAAS,CAAC,SAAS6sG,GAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,KAAK,KAAK,EAAE,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAASC,EAAGntG,EAAE,CAAC,GAAGA,EAAE,EAAE,MAAM,IAAI,UAAU,8BAA8B,EAAEA,EAAE,EAAE,EAAE,CAACktG,EAAG,UAAU,EAAE,SAASltG,EAAE,CAAC,KAAK,EAAEA,CAAC,EAC5c,SAASg+G,EAAGh+G,EAAEK,EAAE,CAACL,EAAE,EAAE,CAAC,GAAGK,EAAE,GAAG,EAAE,EAAEL,EAAE,EAAEA,EAAE,GAAGA,EAAE,CAAC,CAACktG,EAAG,UAAU,OAAO,SAASltG,EAAE,CAAC,KAAK,EAAE,CAAC,OAAOA,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,SAASQ,EAAER,EAAEK,EAAEW,EAAE,CAAC,OAAAhB,EAAE,EAAEgB,EAAQ,CAAC,MAAMX,CAAC,CAAC,CAAC,SAAS+sG,EAAGptG,EAAE,CAAC,KAAK,EAAE,IAAIktG,EAAG,KAAK,EAAEltG,CAAC,CAAC,SAASqtG,EAAGrtG,EAAEK,EAAE,CAAC8sG,EAAGntG,EAAE,CAAC,EAAE,IAAIgB,EAAEhB,EAAE,EAAE,EAAE,OAAGgB,EAASssG,EAAGttG,EAAE,WAAWgB,EAAEA,EAAE,OAAU,SAASD,EAAE,CAAC,MAAM,CAAC,MAAMA,EAAE,KAAK,EAAE,CAAC,EAAEV,EAAEL,EAAE,EAAE,MAAM,GAAEA,EAAE,EAAE,OAAOK,CAAC,EAASI,EAAET,CAAC,EAAC,CACzV,SAASstG,EAAGttG,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAG,CAAC,IAAIT,EAAED,EAAE,KAAKL,EAAE,EAAE,EAAEgB,CAAC,EAAE,GAAG,EAAEV,aAAa,QAAQ,MAAM,IAAI,UAAU,mBAAmBA,EAAE,mBAAmB,EAAE,GAAG,CAACA,EAAE,KAAK,OAAON,EAAE,EAAE,EAAE,GAAGM,EAAE,IAAIa,GAAEb,EAAE,KAAK,OAAOc,EAAE,CAAC,OAAOpB,EAAE,EAAE,EAAE,KAAKg+G,EAAGh+G,EAAE,EAAEoB,CAAC,EAAEX,EAAET,CAAC,CAAC,CAAC,OAAAA,EAAE,EAAE,EAAE,KAAKe,EAAE,KAAKf,EAAE,EAAEmB,EAAC,EAASV,EAAET,CAAC,CAAC,CAAC,SAASS,EAAET,EAAE,CAAC,KAAKA,EAAE,EAAE,GAAG,GAAG,CAAC,IAAIK,EAAEL,EAAE,EAAEA,EAAE,CAAC,EAAE,GAAGK,EAAE,OAAOL,EAAE,EAAE,EAAE,GAAG,CAAC,MAAMK,EAAE,MAAM,KAAK,EAAE,CAAC,OAAOW,EAAE,CAAChB,EAAE,EAAE,EAAE,OAAOg+G,EAAGh+G,EAAE,EAAEgB,CAAC,CAAC,CAAU,GAAThB,EAAE,EAAE,EAAE,GAAMA,EAAE,EAAE,EAAE,CAAoB,GAAnBK,EAAEL,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAE,KAAQK,EAAE,GAAG,MAAMA,EAAE,GAAG,MAAM,CAAC,MAAMA,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,CAAC,CAC/e,SAASktG,EAAGvtG,EAAE,CAAC,KAAK,KAAK,SAASK,EAAE,CAAC,OAAA8sG,EAAGntG,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEK,EAAEitG,EAAGttG,EAAEA,EAAE,EAAE,EAAE,KAAKK,EAAEL,EAAE,EAAE,CAAC,GAAGA,EAAE,EAAE,EAAEK,CAAC,EAAEA,EAAEI,EAAET,CAAC,GAAUK,CAAC,EAAE,KAAK,MAAM,SAASA,EAAE,CAAC,OAAA8sG,EAAGntG,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEK,EAAEitG,EAAGttG,EAAEA,EAAE,EAAE,EAAE,MAASK,EAAEL,EAAE,EAAE,CAAC,GAAGg+G,EAAGh+G,EAAE,EAAEK,CAAC,EAAEA,EAAEI,EAAET,CAAC,GAAUK,CAAC,EAAE,KAAK,OAAO,SAASA,EAAE,CAAC,OAAOgtG,EAAGrtG,EAAEK,CAAC,CAAC,EAAE,KAAK,OAAO,QAAQ,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,SAASmtG,EAAGxtG,EAAE,CAAC,SAASK,EAAEU,EAAE,CAAC,OAAOf,EAAE,KAAKe,CAAC,CAAC,CAAC,SAASC,EAAED,EAAE,CAAC,OAAOf,EAAE,MAAMe,CAAC,CAAC,CAAC,OAAO,IAAI,QAAQ,SAASA,EAAET,EAAE,CAAC,SAASa,GAAEC,EAAE,CAACA,EAAE,KAAKL,EAAEK,EAAE,KAAK,EAAE,QAAQ,QAAQA,EAAE,KAAK,EAAE,KAAKf,EAAEW,CAAC,EAAE,KAAKG,GAAEb,CAAC,CAAC,CAACa,GAAEnB,EAAE,KAAM,EAAC,CAAC,CAAC,CAC1e,SAASW,EAAEX,EAAE,CAAC,OAAOwtG,EAAG,IAAID,EAAG,IAAIH,EAAGptG,CAAC,CAAC,CAAC,CAAC,CAC1CC,EAAE,UAAU,SAASD,EAAE,CAAC,SAASK,EAAEe,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,KAAK,EAAE,CAAE,EAAC,KAAK,EAAE,GAAG,IAAIF,GAAE,KAAK,EAAG,EAAC,GAAG,CAACE,EAAEF,GAAE,QAAQA,GAAE,MAAM,CAAC,OAAOD,GAAE,CAACC,GAAE,OAAOD,EAAC,CAAC,CAAC,CAAC,SAASD,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAASD,EAAEK,EAAE,CAAC,OAAOA,aAAaf,EAAEe,EAAE,IAAIf,EAAE,SAASa,GAAE,CAACA,GAAEE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGpB,EAAE,OAAOA,EAAEgB,EAAE,UAAU,EAAE,SAASI,EAAE,CAAC,GAAS,KAAK,GAAX,KAAa,CAAC,KAAK,EAAE,GAAG,IAAIF,GAAE,KAAK,KAAK,EAAE,UAAU,CAACA,GAAE,EAAG,EAAC,CAAC,CAAC,KAAK,EAAE,KAAKE,CAAC,CAAC,EAAE,IAAId,EAAET,EAAE,WAAWmB,EAAE,UAAU,EAAE,SAASI,EAAE,CAACd,EAAEc,EAAE,CAAC,CAAC,EAAEJ,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC,IAAII,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQF,GAAE,EAAEA,GAAEE,EAAE,OAAO,EAAEF,GAAE,CAAC,IAAID,GAClgBG,EAAEF,EAAC,EAAEE,EAAEF,EAAC,EAAE,KAAK,GAAG,CAACD,GAAG,QAAO9B,GAAE,CAAC,KAAK,EAAEA,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE6B,EAAE,UAAU,EAAE,SAASI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,MAAMA,CAAE,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,UAAU,CAAC,SAASe,EAAEjC,GAAE,CAAC,OAAO,SAASkC,GAAE,CAACJ,KAAIA,GAAE,GAAG9B,GAAE,KAAK+B,GAAEG,EAAC,EAAE,CAAC,CAAC,IAAIH,GAAE,KAAKD,GAAE,GAAG,MAAM,CAAC,QAAQG,EAAE,KAAK,CAAC,EAAE,OAAOA,EAAE,KAAK,CAAC,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,SAASe,EAAE,CAAC,GAAGA,IAAI,KAAK,KAAK,EAAE,IAAI,UAAU,oCAAoC,CAAC,UAAUA,aAAaf,EAAE,KAAK,EAAEe,CAAC,MAAM,CAACpB,EAAE,OAAO,OAAOoB,EAAC,CAAE,IAAK,SAAS,IAAIF,GAAQE,GAAN,KAAQ,MAAMpB,EAAE,IAAK,WAAWkB,GAAE,GAAG,MAAMlB,EAAE,QAAQkB,GAAE,EAAE,CAACA,GAAE,KAAK,EAAEE,CAAC,EAAE,KAAK,EAAEA,CAAC,CAAC,CAAC,EAC7ff,EAAE,UAAU,EAAE,SAASe,EAAE,CAAC,IAAIF,GAAE,OAAO,GAAG,CAACA,GAAEE,EAAE,IAAI,OAAOH,GAAE,CAAC,KAAK,EAAEA,EAAC,EAAE,MAAM,CAAa,OAAOC,IAAnB,WAAqB,KAAK,EAAEA,GAAEE,CAAC,EAAE,KAAK,EAAEA,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,SAASe,EAAE,CAAC,KAAK,EAAE,EAAEA,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,SAASe,EAAE,CAAC,KAAK,EAAE,EAAEA,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,SAASe,EAAEF,GAAE,CAAC,GAAM,KAAK,GAAR,EAAU,MAAM,MAAM,iBAAiBE,EAAE,KAAKF,GAAE,sCAAsC,KAAK,CAAC,EAAE,KAAK,EAAEE,EAAE,KAAK,EAAEF,GAAM,KAAK,IAAT,GAAY,KAAK,EAAG,EAAC,KAAK,EAAG,GAAEb,EAAE,UAAU,EAAE,UAAU,CAAC,IAAIe,EAAE,KAAKd,EAAE,UAAU,CAAC,GAAGc,EAAE,EAAC,EAAG,CAAC,IAAIF,GAAErB,EAAE,QAAsB,OAAOqB,GAArB,KAAwBA,GAAE,MAAME,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEf,EAAE,UAAU,EACxf,UAAU,CAAC,GAAG,KAAK,EAAE,MAAQ,GAAC,IAAIe,EAAEvB,EAAE,YAAYqB,GAAErB,EAAE,MAAMoB,GAAEpB,EAAE,cAAc,OAAiB,OAAOoB,GAArB,IAA6B,IAAgB,OAAOG,GAApB,WAAsBA,EAAE,IAAIA,EAAE,qBAAqB,CAAC,WAAW,EAAE,CAAC,EAAe,OAAOF,IAApB,WAAsBE,EAAE,IAAIF,GAAE,qBAAqB,CAAC,WAAW,EAAE,CAAC,GAAGE,EAAEvB,EAAE,SAAS,YAAY,aAAa,EAAEuB,EAAE,gBAAgB,qBAAqB,GAAG,GAAGA,CAAC,GAAGA,EAAE,QAAQ,KAAKA,EAAE,OAAO,KAAK,EAASH,GAAEG,CAAC,EAAC,EAAEf,EAAE,UAAU,EAAE,UAAU,CAAC,GAAS,KAAK,GAAX,KAAa,CAAC,QAAQe,EAAE,EAAEA,EAAE,KAAK,EAAE,OAAO,EAAEA,EAAED,GAAE,EAAE,KAAK,EAAEC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAID,GAAE,IAAIH,EAAE,OAAAX,EAAE,UAAU,EAC9f,SAASe,EAAE,CAAC,IAAIF,GAAE,KAAK,EAAG,EAACE,EAAE,EAAEF,GAAE,QAAQA,GAAE,MAAM,CAAC,EAAEb,EAAE,UAAU,EAAE,SAASe,EAAEF,GAAE,CAAC,IAAID,GAAE,KAAK,EAAC,EAAG,GAAG,CAACG,EAAE,KAAKF,GAAED,GAAE,QAAQA,GAAE,MAAM,CAAC,OAAO9B,GAAE,CAAC8B,GAAE,OAAO9B,EAAC,CAAC,CAAC,EAAEkB,EAAE,UAAU,KAAK,SAASe,EAAEF,GAAE,CAAC,SAASD,GAAE5B,GAAED,GAAE,CAAC,OAAkB,OAAOC,IAAnB,WAAqB,SAASE,GAAE,CAAC,GAAG,CAACJ,GAAEE,GAAEE,EAAC,CAAC,CAAC,OAAOC,GAAE,CAAC6B,GAAE7B,EAAC,CAAC,CAAC,EAAEJ,EAAC,CAAC,IAAID,GAAEkC,GAAE/B,GAAE,IAAIe,EAAE,SAAShB,GAAED,GAAE,CAACD,GAAEE,GAAEgC,GAAEjC,EAAC,CAAC,EAAE,YAAK,EAAE6B,GAAEG,EAAEjC,EAAC,EAAE8B,GAAEC,GAAEG,EAAC,CAAC,EAAS/B,EAAC,EAAEe,EAAE,UAAU,MAAM,SAASe,EAAE,CAAC,OAAO,KAAK,KAAK,OAAOA,CAAC,CAAC,EAAEf,EAAE,UAAU,EAAE,SAASe,EAAEF,GAAE,CAAC,SAASD,IAAG,CAAC,OAAO9B,GAAE,EAAC,CAAE,IAAK,GAAEiC,EAAEjC,GAAE,CAAC,EAAE,MAAM,IAAK,GAAE+B,GAAE/B,GAAE,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,qBAC9fA,GAAE,CAAC,CAAE,CAAC,CAAC,IAAIA,GAAE,KAAW,KAAK,GAAX,KAAagC,GAAE,EAAEF,EAAC,EAAE,KAAK,EAAE,KAAKA,EAAC,EAAE,KAAK,EAAE,EAAE,EAAEZ,EAAE,QAAQU,EAAEV,EAAE,OAAO,SAASe,EAAE,CAAC,OAAO,IAAIf,EAAE,SAASa,GAAED,GAAE,CAACA,GAAEG,CAAC,CAAC,CAAC,CAAC,EAAEf,EAAE,KAAK,SAASe,EAAE,CAAC,OAAO,IAAIf,EAAE,SAASa,GAAED,GAAE,CAAC,QAAQ9B,GAAEe,EAAEkB,CAAC,EAAEC,GAAElC,GAAE,KAAM,EAAC,CAACkC,GAAE,KAAKA,GAAElC,GAAE,KAAI,EAAG4B,EAAEM,GAAE,KAAK,EAAE,EAAEH,GAAED,EAAC,CAAC,CAAC,CAAC,EAAEZ,EAAE,IAAI,SAASe,EAAE,CAAC,IAAIF,GAAEhB,EAAEkB,CAAC,EAAEH,GAAEC,GAAE,KAAM,EAAC,OAAOD,GAAE,KAAKF,EAAE,EAAE,EAAE,IAAIV,EAAE,SAASlB,GAAEkC,GAAE,CAAC,SAAS/B,GAAEC,GAAE,CAAC,OAAO,SAASC,GAAE,CAACH,GAAEE,EAAC,EAAEC,GAAEJ,KAAOA,IAAH,GAAMD,GAAEE,EAAC,CAAC,CAAC,CAAC,IAAIA,GAAE,CAAE,EAACD,GAAE,EAAE,GAAGC,GAAE,KAAK,MAAM,EAAED,KAAI2B,EAAEE,GAAE,KAAK,EAAE,EAAE3B,GAAED,GAAE,OAAO,CAAC,EAAEgC,EAAC,EAAEJ,GAAEC,GAAE,KAAI,QAAS,CAACD,GAAE,KAAK,CAAC,CAAC,EAASZ,CAAC,CAAC,EACne,SAASotG,EAAGztG,EAAEK,EAAE,CAACL,aAAa,SAASA,GAAG,IAAI,IAAIgB,EAAE,EAAED,EAAE,GAAGT,EAAE,CAAC,KAAK,UAAU,CAAC,GAAG,CAACS,GAAGC,EAAEhB,EAAE,OAAO,CAAC,IAAImB,GAAEH,IAAI,MAAM,CAAC,MAAMX,EAAEc,GAAEnB,EAAEmB,EAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAAJ,EAAE,GAAS,CAAC,KAAK,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,OAAAT,EAAE,OAAO,QAAQ,EAAE,UAAU,CAAC,OAAOA,CAAC,EAASA,CAAC,CAAC,IAAIotG,EAAe,OAAO,OAAO,QAA1B,WAAiC,OAAO,OAAO,SAAS1tG,EAAEK,EAAE,CAAC,QAAQW,EAAE,EAAEA,EAAE,UAAU,OAAOA,IAAI,CAAC,IAAID,EAAE,UAAUC,CAAC,EAAE,GAAGD,EAAE,QAAQT,KAAKS,EAAE,OAAO,UAAU,eAAe,KAAKA,EAAET,CAAC,IAAIN,EAAEM,CAAC,EAAES,EAAET,CAAC,EAAE,CAAC,OAAON,CAAC,EAAEC,EAAE,gBAAgB,SAASD,EAAE,CAAC,OAAOA,GAAG0tG,CAAE,CAAC,EAC3dztG,EAAE,YAAY,SAASD,EAAE,CAAC,OAAOA,GAAI,SAASK,EAAEW,EAAE,CAAC,OAAOX,IAAIW,EAAMX,IAAJ,GAAO,EAAEA,IAAI,EAAEW,EAAEX,IAAIA,GAAGW,IAAIA,CAAC,CAAC,CAAC,EAAEf,EAAE,2BAA2B,SAASD,EAAE,CAAC,OAAOA,GAAI,SAASK,EAAEW,EAAE,CAAC,IAAID,EAAE,KAAKA,aAAa,SAASA,EAAE,OAAOA,CAAC,GAAG,IAAIT,EAAES,EAAE,OAAc,IAAPC,EAAEA,GAAG,EAAM,EAAEA,IAAIA,EAAE,KAAK,IAAIA,EAAEV,EAAE,CAAC,GAAGU,EAAEV,EAAEU,IAAI,CAAC,IAAIG,GAAEJ,EAAEC,CAAC,EAAE,GAAGG,KAAId,GAAG,OAAO,GAAGc,GAAEd,CAAC,EAAE,QAAQ,CAAC,MAAQ,GAAC,CAAC,EACpUJ,EAAE,4BAA4B,SAASD,EAAE,CAAC,OAAOA,GAAI,SAASK,EAAEW,EAAE,CAAC,GAAS,MAAN,KAAW,MAAM,IAAI,UAAU,8EAA8E,EAAE,GAAGX,aAAa,OAAO,MAAM,IAAI,UAAU,8EAA8E,EAAE,OAAW,KAAK,QAAQA,EAAEW,GAAG,CAAC,IAAxB,EAAyB,CAAC,CAAC,EAAEf,EAAE,uBAAuB,SAASD,EAAE,CAAC,OAAOA,GAAI,UAAU,CAAC,OAAOytG,EAAG,KAAK,SAASptG,EAAE,CAAC,OAAOA,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAIstG,EAAG,MAAM,KACpc,SAAS/sG,EAAEZ,EAAEK,EAAE,CAACL,EAAEA,EAAE,MAAM,GAAG,EAAE,IAAIgB,EAAE2sG,EAAG3tG,EAAE,CAAC,IAAIgB,GAAgB,OAAOA,EAAE,WAAtB,KAAkCA,EAAE,WAAW,OAAOhB,EAAE,CAAC,CAAC,EAAE,QAAQe,EAAEf,EAAE,SAASe,EAAEf,EAAE,MAAK,IAAKA,EAAE,QAAiBK,IAAT,OAAWW,EAAED,CAAC,GAAGC,EAAED,CAAC,IAAI,OAAO,UAAUA,CAAC,EAAEC,EAAEA,EAAED,CAAC,EAAEC,EAAEA,EAAED,CAAC,EAAE,GAAGC,EAAED,CAAC,EAAEV,CAAC,CAAE,SAASQ,GAAG,CAAC,MAAM,MAAM,cAAc,CAAE,CAAC,SAAS+sG,EAAG5tG,EAAEK,EAAE,CAAC,OAAAA,EAAE,OAAO,aAAa,MAAM,KAAKA,CAAC,EAAeL,GAAN,KAAQK,EAAEL,EAAEK,CAAC,CAAC,IAAI49G,EAAGpQ,EAAiB,OAAO,YAArB,IAAiCC,EAAGC,EAAiB,OAAO,YAArB,IAAqCC,EAAG,CAAE,EAACltG,GAAE,KAAK,SAASmtG,GAAGjuG,EAAE,CAAC,IAAIK,EAAWA,IAAT,SAAaA,EAAE,GAAG6tG,GAAI,EAAC7tG,EAAE2tG,EAAG3tG,CAAC,EAAE,QAAQW,EAAE,MAAM,KAAK,MAAMhB,EAAE,OAAO,CAAC,CAAC,EAAEe,EAAEV,EAAE,EAAE,GAAG,GAAGC,EAAE,EAAEa,GAAE,EAAEb,EAAEN,EAAE,OAAO,EAAEM,GAAG,EAAE,CAAC,IAAIc,EAAEpB,EAAEM,CAAC,EAAEY,GAAElB,EAAEM,EAAE,CAAC,EAAEW,GAAEjB,EAAEM,EAAE,CAAC,EAAEnB,GAAEkB,EAAEe,GAAG,CAAC,EAAEA,EAAEf,GAAGe,EAAE,IAAI,EAAEF,IAAG,CAAC,EAAEA,GAAEb,GAAGa,GAAE,KAAK,EAAED,IAAG,CAAC,EAAEA,GAAEZ,EAAEY,GAAE,EAAE,EAAED,EAAEG,IAAG,EAAEhC,GAAEiC,EAAEF,GAAED,EAAC,CAAS,OAAR9B,GAAE,EAAE8B,GAAEF,EAASf,EAAE,OAAOM,EAAG,KAAK,GAAEnB,GAAEa,EAAEM,EAAE,CAAC,EAAEW,GAAEZ,GAAGlB,GAAE,KAAK,CAAC,GAAG4B,EAAE,IAAK,GAAEf,EAAEA,EAAEM,CAAC,EAAEU,EAAEG,EAAC,EAAEd,EAAEL,GAAG,CAAC,EAAEK,GAAGL,EAAE,IAAI,EAAEb,IAAG,CAAC,EAAE8B,GAAEF,CAAC,CAAC,OAAOC,EAAE,KAAK,EAAE,CAAC,CAC/xB,SAASmtG,GAAGnuG,EAAE,CAAC,IAAIK,EAAEL,EAAE,OAAOgB,EAAE,EAAEX,EAAE,EAAEW,EAAE,EAAEA,EAAE,KAAK,MAAMA,CAAC,EAAM,KAAK,QAAQhB,EAAEK,EAAE,CAAC,CAAC,GAAvB,KAA2BW,EAAM,KAAK,QAAQhB,EAAEK,EAAE,CAAC,CAAC,GAAvB,GAAyBW,EAAE,EAAEA,EAAE,GAAG,IAAID,EAAE,IAAI,WAAWC,CAAC,EAAEV,EAAE,EAAE,OAAA8tG,GAAGpuG,EAAE,SAASmB,GAAE,CAACJ,EAAET,GAAG,EAAEa,EAAC,CAAC,EAASb,IAAIU,EAAED,EAAE,SAAS,EAAET,CAAC,EAAES,CAAC,CAC/M,SAASqtG,GAAGpuG,EAAEK,EAAE,CAAC,SAASW,EAAEC,GAAE,CAAC,KAAKF,EAAEf,EAAE,QAAQ,CAAC,IAAIb,GAAEa,EAAE,OAAOe,GAAG,EAAEM,GAAEP,GAAE3B,EAAC,EAAE,GAASkC,IAAN,KAAQ,OAAOA,GAAE,GAAG,CAAC,cAAc,KAAKlC,EAAC,EAAE,MAAM,MAAM,oCAAoCA,EAAC,CAAE,CAAC,OAAO8B,EAAC,CAACitG,GAAI,EAAC,QAAQntG,EAAE,IAAI,CAAC,IAAIT,EAAEU,EAAE,EAAE,EAAEG,GAAEH,EAAE,CAAC,EAAEI,EAAEJ,EAAE,EAAE,EAAEE,GAAEF,EAAE,EAAE,EAAE,GAAQE,KAAL,IAAaZ,IAAL,GAAO,MAAMD,EAAEC,GAAG,EAAEa,IAAG,CAAC,EAAMC,GAAJ,KAAQf,EAAEc,IAAG,EAAE,IAAIC,GAAG,CAAC,EAAMF,IAAJ,IAAOb,EAAEe,GAAG,EAAE,IAAIF,EAAC,EAAE,CAAC,CAClU,SAASgtG,IAAI,CAAC,GAAG,CAACptG,GAAE,CAACA,GAAE,GAAG,QAAQd,EAAE,iEAAiE,MAAM,EAAE,EAAEK,EAAE,CAAC,MAAM,KAAK,MAAM,MAAM,IAAI,EAAEW,EAAE,EAAE,EAAEA,EAAEA,IAAI,CAAC,IAAID,EAAEf,EAAE,OAAOK,EAAEW,CAAC,EAAE,MAAM,EAAE,CAAC,EAAEgtG,EAAGhtG,CAAC,EAAED,EAAE,QAAQT,EAAE,EAAEA,EAAES,EAAE,OAAOT,IAAI,CAAC,IAAIa,GAAEJ,EAAET,CAAC,EAAWQ,GAAEK,EAAC,IAAZ,SAAgBL,GAAEK,EAAC,EAAEb,EAAE,CAAC,CAAC,CAAC,CAAE,IAAI+tG,GAAgB,OAAO,YAApB,WAA+B,SAASC,GAAGtuG,EAAE,CAAC,OAAOquG,IAAUruG,GAAN,MAASA,aAAa,UAAU,CAAC,IAAIuuG,GAAG,SAASC,GAAGxuG,EAAE,CAAU,GAAT,KAAK,EAAEA,EAAYA,IAAP,MAAcA,EAAE,SAAN,EAAa,MAAM,MAAM,wDAAwD,CAAE,CAAE,IAAIyuG,GAAgB,OAAO,WAAW,UAAU,OAAzC,WAA+CntG,GAAE,EAAEC,GAAE,EACpiB,SAASmtG,GAAG1uG,EAAEK,EAAE,CAAC,GAAGL,EAAE,cAAc,WAAW,OAAOA,EAAE,GAAGA,EAAE,cAAc,YAAY,OAAO,IAAI,WAAWA,CAAC,EAAE,GAAGA,EAAE,cAAc,MAAM,OAAO,IAAI,WAAWA,CAAC,EAAE,GAAGA,EAAE,cAAc,OAAO,OAAOmuG,GAAGnuG,CAAC,EAAE,GAAGA,EAAE,cAAcwuG,GAAI,MAAG,CAACnuG,IAAIA,EAAEL,EAAE,IAAIK,EAAE,cAAc,WAAkBA,GAAEA,EAAEL,EAAE,EAAEK,EAAQA,GAAN,MAASiuG,GAAGjuG,CAAC,EAAEA,EAAa,OAAOA,GAAlB,SAAoB8tG,GAAG9tG,CAAC,EAAE,MAAYL,EAAEA,EAAE,EAAEK,GAAG,IAAI,WAAWL,CAAC,EAAEuuG,KAAKA,GAAG,IAAI,WAAW,CAAC,IAAG,GAAGvuG,aAAa,WAAW,OAAO,IAAI,WAAWA,EAAE,OAAOA,EAAE,WAAWA,EAAE,UAAU,EAAE,MAAM,MAAM,2HAA2H,CACrmB,CAAE,SAAS2uG,GAAG3uG,EAAEK,EAAE,CAAC,OAAO,MAAM,sBAAsBL,EAAE,iBAAiBK,EAAE,GAAG,CAAC,CAAC,SAASuuG,IAAI,CAAC,OAAO,MAAM,6CAA6C,CAAC,CAAE,SAASC,GAAG7uG,EAAEK,EAAE,CAACA,EAAWA,IAAT,OAAW,GAAGA,EAAEA,EAAWA,EAAE,IAAX,OAAa,GAAGA,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAEA,EAAEL,GAAG8uG,EAAG,KAAK9uG,CAAC,CAAC,CAAC,SAAS8uG,EAAG9uG,EAAEK,EAAE,CAACL,EAAE,EAAE0uG,GAAGruG,EAAEL,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAEA,EAAE,EAAE,OAAOA,EAAE,EAAEA,EAAE,CAAC,CAAC6uG,GAAG,UAAU,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,SAASptG,GAAEzB,EAAE,CAAC,GAAGA,EAAE,EAAEA,EAAE,EAAE,MAAM,MAAM,0CAA0CA,EAAE,EAAE,MAAMA,EAAE,CAAC,CAAE,CACrd,SAAS0B,EAAE1B,EAAE,CAAC,IAAIK,EAAEL,EAAE,EAAEgB,EAAEX,EAAEL,EAAE,CAAC,EAAEe,EAAEC,EAAE,IAAI,GAAG,IAAIA,EAAE,OAAOhB,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAEe,EAA2B,GAAzBC,EAAEX,EAAEL,EAAE,EAAE,CAAC,EAAEe,IAAIC,EAAE,MAAM,EAAK,IAAIA,EAAE,OAAOhB,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAEe,EAA4B,GAA1BC,EAAEX,EAAEL,EAAE,EAAE,CAAC,EAAEe,IAAIC,EAAE,MAAM,GAAM,IAAIA,EAAE,OAAOhB,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAEe,EAA4B,GAA1BC,EAAEX,EAAEL,EAAE,EAAE,CAAC,EAAEe,IAAIC,EAAE,MAAM,GAAM,IAAIA,EAAE,OAAOhB,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAEe,EAAkC,GAAhCC,EAAEX,EAAEL,EAAE,EAAE,CAAC,EAAEA,EAAE,GAAG,EAAEe,IAAIC,EAAE,KAAK,GAAM,IAAIA,EAAE,OAAOS,GAAEzB,CAAC,EAAEe,EAAE,GAAG,KAAKV,EAAEL,EAAE,GAAG,GAAG,KAAKK,EAAEL,EAAE,GAAG,GAAG,KAAKK,EAAEL,EAAE,GAAG,GAAG,KAAKK,EAAEL,EAAE,GAAG,GAAG,KAAKK,EAAEL,EAAE,GAAG,EAAE,MAAM4uG,KAAK,OAAAntG,GAAEzB,CAAC,EAASe,CAAC,CAAC,IAAIguG,GAAG,CAAE,EAAC,SAASC,IAAI,CAAC,KAAK,EAAE,CAAE,EAACA,GAAG,UAAU,OAAO,UAAU,CAAC,OAAO,KAAK,EAAE,MAAM,EAAEA,GAAG,UAAU,IAAI,UAAU,CAAC,IAAIhvG,EAAE,KAAK,EAAE,YAAK,EAAE,GAAUA,CAAC,EAAE,SAAS4B,GAAE5B,EAAEK,EAAE,CAAC,KAAK,IAAIA,GAAGL,EAAE,EAAE,KAAKK,EAAE,IAAI,GAAG,EAAEA,KAAK,EAAEL,EAAE,EAAE,KAAKK,CAAC,CAAC,CAAE,SAAS4uG,GAAGjvG,EAAE,CAAC,IAAIK,EAAE,GAAGW,EAAWX,EAAE,IAAX,OAAa,GAAGA,EAAE,EAAE,KAAK,EAAE,CAAC,EAAWA,EAAE,IAAX,OAAa,GAAGA,EAAE,CAAC,EAAE,KAAK,EAAEW,EAAEX,EAAE,KAAK,EAAE0uG,GAAG,QAAQ/tG,EAAE+tG,GAAG,IAAK,EAAC1uG,IAAIW,EAAE,EAAEX,EAAE,GAAGL,GAAG8uG,EAAG9tG,EAAEhB,CAAC,EAAEA,EAAEgB,GAAGhB,EAAE,IAAI6uG,GAAG7uG,EAAEK,CAAC,EAAE,KAAK,EAAEL,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAACivG,GAAG,UAAU,MAAM,UAAU,CAAC,KAAK,EAAE,MAAO,EAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAASC,GAAGlvG,EAAE,CAAC,IAAIK,EAAEL,EAAE,EAAE,GAAGK,EAAE,GAAGA,EAAE,EAAE,MAAM,GAAGL,EAAE,EAAEA,EAAE,EAAE,EAAE,IAAIgB,EAAEU,EAAE1B,EAAE,CAAC,IAAI,EAAe,GAAbK,EAAEW,IAAI,EAAEA,GAAG,EAAK,EAAE,GAAGA,GAAG,GAAGA,GAAG,MAAM2tG,GAAG3tG,EAAEhB,EAAE,CAAC,EAAE,GAAG,EAAEK,EAAE,MAAM,MAAM,yBAAyBA,EAAE,iBAAiBL,EAAE,EAAE,GAAG,EAAE,OAAAA,EAAE,EAAEK,EAAEL,EAAE,EAAEgB,EAAU,GAC/kC,SAASmuG,GAAGnvG,EAAE,CAAC,OAAOA,EAAE,EAAG,KAAK,GAAE,GAAMA,EAAE,GAAL,EAAOmvG,GAAGnvG,CAAC,OAAOA,EAAE,CAACA,EAAEA,EAAE,EAAE,QAAQK,EAAEL,EAAE,EAAEgB,EAAEX,EAAE,GAAGA,EAAEW,GAAG,GAAQ,EAAAhB,EAAE,EAAEK,GAAG,EAAE,KAAK,CAACL,EAAE,EAAEK,EAAEoB,GAAEzB,CAAC,EAAE,MAAMA,CAAC,CAAC,MAAM4uG,GAAI,CAAC,CAAC,MAAM,IAAK,GAAE5uG,EAAEA,EAAE,EAAEA,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAE,MAAM,IAAK,GAAKA,EAAE,GAAL,EAAOmvG,GAAGnvG,CAAC,GAAGK,EAAEqB,EAAE1B,EAAE,CAAC,IAAI,EAAEA,EAAEA,EAAE,EAAEA,EAAE,GAAGK,EAAEoB,GAAEzB,CAAC,GAAG,MAAM,IAAK,GAAEA,EAAEA,EAAE,EAAEA,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAE,MAAM,IAAK,GAAEK,EAAEL,EAAE,EAAE,EAAE,CAAC,GAAG,CAACkvG,GAAGlvG,CAAC,EAAE,MAAM,MAAM,uCAAuC,EAAE,GAAMA,EAAE,GAAL,EAAO,CAAC,GAAGA,EAAE,GAAGK,EAAE,MAAM,MAAM,yBAAyB,EAAE,KAAK,CAAC8uG,GAAGnvG,CAAC,CAAC,OAAO,IAAG,MAAM,QAAQ,MAAM2uG,GAAG3uG,EAAE,EAAEA,EAAE,CAAC,CAAE,CAAC,CAAC,IAAIovG,GAAG,CAAE,EAAC,SAASC,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,IAAIL,EAAE,CAAC,SAASntG,GAAE7B,EAAEK,EAAE,CAAKA,EAAE,SAAN,IAAeL,EAAE,EAAE,KAAKK,CAAC,EAAEL,EAAE,GAAGK,EAAE,OAAO,CAAC,SAASivG,GAAGtvG,EAAEK,EAAE,CAAC,GAAGA,EAAEA,EAAE,GAAG,CAACwB,GAAE7B,EAAEA,EAAE,EAAE,IAAK,GAAE,QAAQgB,EAAE,EAAEA,EAAEX,EAAE,OAAOW,IAAIa,GAAE7B,EAAEK,EAAEW,CAAC,CAAC,CAAC,CAAC,CAAE,IAAIc,GAAe,OAAO,QAApB,YAAuC,OAAO,OAAQ,GAA1B,SAA2B,OAAO,MAAM,EAAE,OAAO,SAASytG,GAAGvvG,EAAEK,EAAE,CAAC,OAAO,SAASL,CAAC,IAAI8B,GAAE9B,EAAE8B,EAAC,GAAGzB,EAAWL,EAAE,IAAX,OAAaA,EAAE,GAAGK,EAAE,OAAO,iBAAiBL,EAAE,CAAC,EAAE,CAAC,MAAMK,EAAE,aAAa,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,SAASmvG,GAAGxvG,EAAE,CAAC,IAAIK,EAAE,OAAAyB,GAAEzB,EAAEL,EAAE8B,EAAC,EAAEzB,EAAEL,EAAE,EAAeK,GAAE,CAAG,CAAC,SAAS69G,GAAGl+G,EAAE,CAAC,OAAAuvG,GAAGvvG,EAAE,CAAC,EAASA,CAAC,CAAC,SAASyvG,GAAGzvG,EAAE,CAAC,OAAO,MAAM,QAAQA,CAAC,EAAE,CAAC,EAAEwvG,GAAGxvG,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS0vG,GAAG1vG,EAAE,CAAC,GAAG,CAAC,MAAM,QAAQA,CAAC,EAAE,MAAM,MAAM,oCAAoC,EAAEuvG,GAAGvvG,EAAE,CAAC,CAAC,CAAE,SAASuoB,GAAGvoB,EAAE,CAAC,OAAcA,IAAP,MAAqB,OAAOA,GAAlB,UAAqB,CAAC,MAAM,QAAQA,CAAC,GAAGA,EAAE,cAAc,MAAM,CAAC,IAAI2vG,GAAG,OAAO,OAAOuO,GAAG,EAAE,CAAC,EAAE,SAAStO,GAAG5vG,EAAE,CAAC,GAAGyvG,GAAGzvG,EAAE,CAAC,EAAE,MAAM,MAAM,oCAAoC,CAAE,CAAC,IAAI6vG,GAAgB,OAAO,OAApB,KAAyC,OAAO,OAAO,YAA3B,IAAuC,SAASC,GAAG9vG,EAAE,CAAC,MAAM,CAAC,MAAMA,EAAE,aAAa,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC,CAAE,SAAS+B,GAAE/B,EAAEK,EAAEW,EAAE,CAAC,OAAWX,IAAH,GAAK,KAAKA,GAAGL,EAAE,EAAEA,EAAE,EAAEA,EAAE,EAAEK,CAAC,EAAE,OAAiBW,IAAT,QAAaA,GAAIhB,EAAE,IAAIgB,EAAEhB,EAAE,EAAEK,CAAC,EAAQW,GAAN,MAASA,EAAEhB,EAAE,EAAEK,EAAEL,EAAE,CAAC,CAAC,CAAC,SAASgC,GAAEhC,EAAEK,EAAEW,EAAED,EAAE,CAACA,EAAWA,IAAT,OAAW,GAAGA,EAAE6uG,GAAG5vG,CAAC,EAAEK,EAAEL,EAAE,GAAG,CAACe,EAAEf,EAAE,EAAEK,EAAEL,EAAE,CAAC,EAAEgB,GAAGhB,EAAE,IAAIA,EAAE,EAAEA,EAAE,EAAEA,EAAE,EAAEA,EAAE,CAAC,EAAE,CAAE,IAAGK,CAAC,EAAEW,CAAC,CAAC,SAAS+uG,GAAG/vG,EAAEK,EAAEW,EAAED,EAAE,CAACC,EAAWA,IAAT,OAAW,GAAGA,EAAED,EAAWA,IAAT,OAAW,GAAGA,EAAE,IAAIT,EAAEyB,GAAE/B,EAAEK,EAAEU,CAAC,EAAE,OAAMT,GAAN,OAAUA,EAAEqvG,IAAOF,GAAGzvG,EAAE,CAAC,EAAEgB,IAAI0uG,GAAGpvG,CAAC,EAAE,OAAO,OAAOA,CAAC,IAAWA,IAAIqvG,IAAIF,GAAGnvG,CAAC,KAAEA,EAAE49G,GAAG59G,EAAE,MAAK,CAAE,EAAE0B,GAAEhC,EAAEK,EAAEC,EAAES,CAAC,GAAST,CAAC,CAAC,SAAS2B,GAAEjC,EAAEK,EAAEW,EAAE,CAAC,OAAAhB,EAAE+B,GAAE/B,EAAEK,CAAC,EAAEL,EAAQA,GAAN,KAAQA,EAAE,CAACA,EAAeA,IAAWgB,IAAT,OAAW,EAAEA,EAAG,CACr6D,SAASgvG,GAAGhwG,EAAEK,EAAEW,EAAED,EAAE,CAACf,EAAE,IAAIA,EAAE,EAAE,CAAE,GAAE,IAAIM,EAAEmvG,GAAGzvG,EAAE,CAAC,EAAEmB,GAAEnB,EAAE,EAAEgB,CAAC,EAAE,GAAG,CAACG,GAAE,CAACJ,EAAEgvG,GAAG/vG,EAAEgB,EAAE,GAAYD,IAAT,OAAW,GAAGA,CAAC,EAAEI,GAAE,CAAE,EAACb,EAAEA,GAAGmvG,GAAG1uG,CAAC,EAAE,QAAQK,EAAE,EAAEA,EAAEL,EAAE,OAAOK,IAAID,GAAEC,CAAC,EAAE,IAAIf,EAAEU,EAAEK,CAAC,CAAC,EAAEd,GAAGovG,GAAGvuG,GAAEC,CAAC,EAAE,CAAC,EAAEd,IAAIovG,GAAGvuG,EAAC,EAAE,OAAO,OAAOA,EAAC,GAAGnB,EAAE,EAAEgB,CAAC,EAAEG,EAAC,CAAC,OAAOA,EAAC,CAAC,SAAS8uG,GAAGjwG,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIa,GAAWA,KAAT,OAAW,GAAGA,GAAE,OAAAyuG,GAAG5vG,CAAC,EAAEmB,GAAE6uG,GAAGhwG,EAAEgB,EAAEX,EAAEc,EAAC,EAAEH,EAAED,GAAI,IAAIC,EAAEhB,EAAE+vG,GAAG/vG,EAAEK,CAAC,EAAUC,GAAR,MAAWa,GAAE,OAAOb,EAAE,EAAEU,CAAC,EAAEhB,EAAE,OAAOM,EAAE,EAAEU,EAAE,CAAC,IAAIG,GAAE,KAAKH,CAAC,EAAEhB,EAAE,KAAKgB,EAAE,CAAC,GAAUA,CAAC,CAAC,SAASkvG,GAAGlwG,EAAEK,EAAE,CAAC,OAAAL,EAAE+B,GAAE/B,EAAEK,CAAC,EAAeL,GAAE,CAAG,CAAC,SAASmwG,GAAGnwG,EAAEK,EAAE,CAAC,OAAAL,EAAE+B,GAAE/B,EAAEK,CAAC,EAAeL,GAAE,EAAI,CAAE,SAASowG,GAAGpwG,EAAE,CAAC,OAAO,OAAOA,EAAG,KAAK,SAAS,OAAO,SAASA,CAAC,EAAEA,EAAE,OAAOA,CAAC,EAAE,IAAK,SAAS,GAAGA,GAAG,CAAC,MAAM,QAAQA,CAAC,EAAE,CAAC,GAAGsuG,GAAGtuG,CAAC,EAAE,OAAOiuG,GAAGjuG,CAAC,EAAE,GAAGA,aAAawuG,GAAG,CAAC,IAAInuG,EAAEL,EAAE,EAAE,OAAAK,EAAQA,GAAN,MAAoB,OAAOA,GAAlB,SAAoBA,EAAEguG,IAAIhuG,aAAa,WAAW4tG,GAAG5tG,CAAC,EAAE,MAAYL,EAAE,EAAEK,IAAI,EAAE,CAAC,CAAC,CAAC,OAAOL,CAAC,CAAE,SAASqwG,GAAGrwG,EAAE,CAAC,IAAIK,EAAEiwG,GAAG,OAAAjwG,EAAWA,IAAT,OAAWkwG,GAAGlwG,EAASmwG,GAAGxwG,EAAEK,CAAC,CAAC,CAAC,SAASowG,GAAGzwG,EAAEK,EAAE,CAAC,GAASL,GAAN,KAAQ,CAAC,GAAG,MAAM,QAAQA,CAAC,EAAEA,EAAEwwG,GAAGxwG,EAAEK,CAAC,UAAUkoB,GAAGvoB,CAAC,EAAE,CAAC,IAAIgB,EAAE,CAAE,EAACD,EAAE,IAAIA,KAAKf,EAAEgB,EAAED,CAAC,EAAE0vG,GAAGzwG,EAAEe,CAAC,EAAEV,CAAC,EAAEL,EAAEgB,CAAC,MAAMhB,EAAEK,EAAEL,CAAC,EAAE,OAAOA,CAAC,CAAC,CAAC,SAASwwG,GAAGxwG,EAAEK,EAAE,CAAC,QAAQW,EAAEhB,EAAE,MAAK,EAAGe,EAAE,EAAEA,EAAEC,EAAE,OAAOD,IAAIC,EAAED,CAAC,EAAE0vG,GAAGzvG,EAAED,CAAC,EAAEV,CAAC,EAAE,aAAM,QAAQL,CAAC,GAAGwvG,GAAGxvG,CAAC,EAAE,GAAGk+G,GAAGl9G,CAAC,EAASA,CAAC,CAAC,SAASsvG,GAAGtwG,EAAE,CAAC,OAAGA,GAAa,OAAOA,GAAjB,UAAoBA,EAAE,OAAcA,EAAE,OAAM,GAAGA,EAAEowG,GAAGpwG,CAAC,EAAS,MAAM,QAAQA,CAAC,EAAEqwG,GAAGrwG,CAAC,EAAEA,EAAC,CAAC,SAASuwG,GAAGvwG,EAAE,CAAC,OAAOsuG,GAAGtuG,CAAC,EAAE,IAAI,WAAWA,CAAC,EAAEA,CAAC,CAAE,SAAS0wG,GAAG1wG,EAAEK,EAAEW,EAAE,CAAChB,IAAIA,EAAE2wG,IAAIA,GAAG,KAAK,IAAI5vG,EAAE,KAAK,YAAY,EAAEf,IAAIA,EAAEe,EAAE,CAACA,CAAC,EAAE,CAAE,GAAE,KAAK,GAAGA,EAAE,EAAE,KAAK,KAAK,YAAY,GAAG,GAAG,KAAK,EAAE,OAAO,KAAK,EAAEf,EAAEA,EAAE,CAAuB,GAAtBe,EAAE,KAAK,EAAE,OAAOf,EAAEe,EAAE,EAAKA,IAAIA,EAAE,KAAK,EAAEf,CAAC,EAAEuoB,GAAGxnB,CAAC,GAAG,CAAC,KAAK,EAAEf,EAAE,KAAK,EAAE,KAAK,EAAEe,EAAE,MAAMf,CAAC,CAAUK,IAAH,QAAM,GAAGA,GAAG,KAAK,EAAE,KAAK,IAAIA,EAAEL,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE,OAAO,SAAS,CAAC,GAAGgB,EAAE,IAAIX,EAAE,EAAEA,EAAEW,EAAE,OAAOX,IAAI,GAAGL,EAAEgB,EAAEX,CAAC,EAAEL,EAAE,KAAK,EAAEA,GAAG,KAAK,GAAGe,EAAE,KAAK,EAAEf,CAAC,GAAG,MAAM,QAAQe,CAAC,GAAGm9G,GAAGn9G,CAAC,EAAE,KAAK,EAAEf,CAAC,EAAE2vG,OAAO,CAAC5uG,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,IAAIT,EAAES,EAAEf,CAAC,EAAEM,EAAE,MAAM,QAAQA,CAAC,GAC1qD49G,GAAG59G,CAAC,EAAES,EAAEf,CAAC,EAAE2vG,EAAE,CAAC,CAACe,GAAG,UAAU,OAAO,UAAU,CAAC,OAAOL,GAAG,KAAK,CAAC,CAAC,EAAEK,GAAG,UAAU,SAAS,UAAU,CAAC,OAAO,KAAK,EAAE,SAAQ,CAAE,EAAE,IAAIC,GAAG,SAASC,IAAI,CAACF,GAAG,MAAM,KAAK,SAAS,CAAC,CAAU,GAATtwG,EAAEwwG,GAAGF,EAAE,EAAKb,GAAG,CAAC,IAAIgB,GAAG,GAAG,OAAO,iBAAiBD,IAAIC,GAAG,OAAO,WAAW,EAAEf,GAAG,UAAU,CAAC,MAAM,MAAM,qDAAqD,CAAE,CAAC,EAAEe,IAAI,CAAE,SAASC,GAAG9wG,EAAEK,EAAEW,EAAE,CAAC,GAAGA,EAAE,CAAC,IAAID,EAAE,GAAGT,EAAE,IAAIA,KAAKU,EAAE,CAAC,IAAIG,GAAEH,EAAEV,CAAC,EAAEc,EAAED,GAAE,GAAGC,IAAIL,EAAE,EAAEI,GAAE,IAAIA,GAAE,GAAG,EAAEA,GAAE,IAAIJ,EAAE,EAAEgwG,GAAG5vG,GAAE,EAAE,EAAEC,EAAE,SAASF,GAAE,CAAC,OAAO,SAASD,GAAE9B,GAAEkC,GAAE,CAAC,OAAOH,GAAE,EAAED,GAAE9B,GAAEkC,GAAEH,GAAE,CAAC,CAAC,CAAC,EAAEH,CAAC,GAAGI,GAAE,IAAIJ,EAAE,EAAEiwG,GAAG7vG,GAAE,EAAE,EAAEA,GAAE,EAAE,EAAEC,EAAE,SAASF,GAAE,CAAC,OAAO,SAASD,GAAE9B,GAAEkC,GAAE,CAAC,OAAOH,GAAE,EAAED,GAAE9B,GAAEkC,GAAEH,GAAE,CAAC,CAAC,CAAC,EAAEH,CAAC,GAAGK,EAAEL,EAAE,EAAEI,GAAE,GAAGC,GAAGA,EAAEf,EAAEL,EAAEmB,GAAE,CAAC,EAAEJ,EAAE,CAAC,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,CAAC,CAAC,CAAC,CAACuuG,GAAGjvG,EAAEL,CAAC,CAAC,CAAC,IAAIixG,GAAG,OAAQ,EAAC,SAASC,GAAGlxG,EAAEK,EAAEW,EAAE,CAAC,OAAOhB,EAAEixG,EAAE,IAAIjxG,EAAEixG,EAAE,EAAE,SAASlwG,EAAET,EAAE,CAAC,OAAOD,EAAEU,EAAET,EAAEU,CAAC,CAAC,EAAE,CACruB,SAASmwG,GAAGnxG,EAAE,CAAC,IAAIK,EAAEL,EAAEixG,EAAE,EAAE,GAAG,CAAC5wG,EAAE,CAAC,IAAIW,EAAEowG,GAAGpxG,CAAC,EAAEK,EAAE,SAASU,EAAET,EAAE,CAAC,OAAO+wG,GAAGtwG,EAAET,EAAEU,CAAC,CAAC,EAAEhB,EAAEixG,EAAE,EAAE5wG,CAAC,CAAC,OAAOA,CAAC,CAAC,SAASixG,GAAGtxG,EAAE,CAAC,IAAIK,EAAEL,EAAE,GAAG,GAAGK,EAAE,OAAO8wG,GAAG9wG,CAAC,EAAE,GAAGA,EAAEL,EAAE,GAAG,OAAOkxG,GAAGlxG,EAAE,EAAE,EAAEK,EAAEL,EAAE,EAAE,CAAC,CAAC,SAASuxG,GAAGvxG,EAAE,CAAC,IAAIK,EAAEixG,GAAGtxG,CAAC,EAAEgB,EAAEhB,EAAE,EAAEe,EAAEf,EAAE,GAAG,EAAE,OAAOK,EAAE,SAASC,EAAEa,GAAE,CAAC,OAAOJ,EAAET,EAAEa,GAAEH,EAAEX,CAAC,CAAC,EAAE,SAASC,EAAEa,GAAE,CAAC,OAAOJ,EAAET,EAAEa,GAAEH,CAAC,CAAC,CAAC,CACjS,SAASwwG,GAAGxxG,EAAEK,EAAEW,EAAED,EAAET,EAAEa,GAAE,CAACnB,EAAEA,EAAC,EAAG,IAAIoB,EAAE,EAAoD,IAAlDpB,EAAE,QAAmB,OAAOA,EAAE,CAAC,GAArB,WAAyBgB,EAAEX,EAAEL,EAAE,CAAC,CAAC,EAAEoB,KAAUA,EAAEpB,EAAE,QAAQ,CAACgB,EAAEhB,EAAEoB,GAAG,EAAE,QAAQF,GAAEE,EAAE,EAAEF,GAAElB,EAAE,QAAmB,OAAOA,EAAEkB,EAAC,GAArB,UAAwBA,KAAI,IAAID,GAAEjB,EAAEoB,GAAG,EAAO,OAALF,IAAGE,EAASF,GAAC,CAAE,IAAK,GAAEH,EAAEV,EAAEW,EAAEC,EAAC,EAAE,MAAM,IAAK,GAAEF,EAAEV,EAAEW,EAAEC,GAAEjB,EAAEoB,GAAG,CAAC,EAAE,MAAM,IAAK,GAAEd,EAAED,EAAEW,EAAEC,GAAEjB,EAAEoB,GAAG,EAAEpB,EAAEoB,GAAG,CAAC,EAAE,MAAM,IAAK,GAAEF,GAAElB,EAAEoB,GAAG,EAAE,IAAIjC,GAAEa,EAAEoB,GAAG,EAAEC,GAAErB,EAAEoB,GAAG,EAAE,MAAM,QAAQC,EAAC,EAAEf,EAAED,EAAEW,EAAEC,GAAEC,GAAE/B,GAAEkC,EAAC,EAAEF,GAAEd,EAAEW,EAAEC,GAAEC,GAAE/B,GAAEkC,EAAC,EAAE,MAAM,IAAK,GAAEF,GAAEd,EAAEW,EAAEC,GAAEjB,EAAEoB,GAAG,EAAEpB,EAAEoB,GAAG,EAAEpB,EAAEoB,GAAG,EAAEpB,EAAEoB,GAAG,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,gDAAgDF,EAAC,CAAE,CAAC,CAAC,OAAOb,CAAC,CAC3f,IAAIoxG,GAAG,OAAM,EAAG,SAASV,GAAG/wG,EAAE,CAAC,IAAIK,EAAEL,EAAEyxG,EAAE,EAAE,GAAG,CAACpxG,EAAE,CAAC,IAAIW,EAAE0wG,GAAG1xG,CAAC,EAAEK,EAAE,SAASU,EAAET,EAAE,CAAC,OAAOqxG,GAAG5wG,EAAET,EAAEU,CAAC,CAAC,EAAEhB,EAAEyxG,EAAE,EAAEpxG,CAAC,CAAC,OAAOA,CAAC,CAAC,SAAS2wG,GAAGhxG,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAEyxG,EAAE,EAAE,OAAAzwG,IAAIA,EAAE,SAASD,EAAET,EAAE,CAAC,OAAOwwG,GAAG/vG,EAAET,EAAED,CAAC,CAAC,EAAEL,EAAEyxG,EAAE,EAAEzwG,GAAUA,CAAC,CAAC,IAAI4wG,GAAG,OAAM,EAAG,SAASC,GAAG7xG,EAAEK,EAAE,CAACL,EAAE,KAAKK,CAAC,CAAC,CAAC,SAASyxG,GAAG9xG,EAAEK,EAAEW,EAAE,CAAChB,EAAE,KAAKK,EAAEW,EAAE,CAAC,CAAC,CAAC,SAAS+wG,GAAG/xG,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIa,GAAE4vG,GAAGzwG,CAAC,EAAEc,EAAEJ,EAAE,EAAEhB,EAAE,KAAKK,EAAE,SAASa,GAAED,GAAE9B,GAAE,CAAC,OAAOiC,EAAEF,GAAED,GAAE9B,GAAE4B,EAAEI,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS6wG,GAAGhyG,EAAEK,EAAEW,EAAED,EAAET,EAAEa,GAAE,CAAC,IAAIC,EAAE4vG,GAAGjwG,EAAEI,EAAC,EAAED,GAAEF,EAAE,EAAEhB,EAAE,KAAKK,EAAE,SAASY,GAAE9B,GAAEkC,GAAE,CAAC,OAAOH,GAAED,GAAE9B,GAAEkC,GAAEN,EAAEK,CAAC,CAAC,CAAC,CAAC,CACrc,SAASswG,GAAG1xG,EAAE,CAAC,IAAIK,EAAEL,EAAE4xG,EAAE,EAAE,OAAOvxG,GAAImxG,GAAGxxG,EAAEA,EAAE4xG,EAAE,EAAE,CAAE,EAACC,GAAGC,GAAGC,GAAGC,EAAE,CAAC,CAAC,IAAIC,GAAG,OAAQ,EAAC,SAASC,GAAGlyG,EAAEK,EAAE,CAACL,EAAE,CAAC,EAAEK,CAAC,CAAC,SAAS8xG,GAAGnyG,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEU,EAAE,EAAEhB,EAAEK,CAAC,EAAEU,EAAE,SAASI,GAAEC,EAAEF,GAAE,CAAC,OAAOZ,EAAEa,GAAEC,EAAEF,GAAEH,CAAC,CAAC,EAAET,CAAC,CAAC,SAAS8xG,GAAGpyG,EAAEK,EAAEW,EAAED,EAAET,EAAEa,GAAE,CAAC,IAAIC,EAAEJ,EAAE,EAAEE,GAAEiwG,GAAG7wG,CAAC,EAAEN,EAAEK,CAAC,EAAE,SAASY,GAAE9B,GAAEkC,GAAE,CAAC,OAAOD,EAAEH,GAAE9B,GAAEkC,GAAEN,EAAEG,GAAEC,EAAC,CAAC,CAAC,CAAC,SAASkxG,GAAGryG,EAAEK,EAAEW,EAAED,EAAET,EAAEa,GAAEC,EAAE,CAAC,IAAIF,GAAEF,EAAE,EAAEC,GAAEiwG,GAAGnwG,EAAET,EAAEa,EAAC,EAAEnB,EAAEK,CAAC,EAAE,SAASlB,GAAEkC,GAAE/B,GAAE,CAAC,OAAO4B,GAAE/B,GAAEkC,GAAE/B,GAAEyB,EAAEE,GAAEG,CAAC,CAAC,CAAC,CAAC,SAASgwG,GAAGpxG,EAAE,CAAC,IAAIK,EAAEL,EAAEiyG,EAAE,EAAE,OAAO5xG,GAAImxG,GAAGxxG,EAAEA,EAAEiyG,EAAE,EAAE,CAAE,EAACC,GAAGC,GAAGC,GAAGC,EAAE,CAAC,CACxa,SAAShB,GAAGrxG,EAAEK,EAAEW,EAAE,CAAC,KAAKkuG,GAAG7uG,CAAC,GAAMA,EAAE,GAAL,GAAQ,CAAC,IAAIU,EAAEV,EAAE,EAAEC,EAAEU,EAAED,CAAC,EAAE,GAAG,CAACT,EAAE,CAAC,IAAIa,GAAEH,EAAE,CAAC,EAAEG,KAAIA,GAAEA,GAAEJ,CAAC,KAAKT,EAAEU,EAAED,CAAC,EAAEwwG,GAAGpwG,EAAC,EAAE,CAAC,IAAG,CAACb,GAAG,CAACA,EAAED,EAAEL,EAAEe,CAAC,KAAKT,EAAED,EAAEU,EAAEf,EAAEmB,GAAEb,EAAE,EAAE6uG,GAAG7uG,CAAC,EAAE,CAACA,EAAE,GAAE,CAAC,IAAIc,EAAEd,EAAE,EAAE,EAAEA,EAAEA,EAAE,EAAE,EAAEA,EAAEa,KAAIb,EAAEiuG,KAAKA,GAAG,IAAI,WAAW,CAAC,GAAGE,GAAGrtG,EAAE,MAAMD,GAAEb,CAAC,EAAE,IAAI,WAAWc,EAAE,SAASD,GAAEb,CAAC,CAAC,GAAGa,GAAEJ,EAAE,IAAII,GAAE,KAAKb,CAAC,EAAES,EAAE,GAAG,CAACT,CAAC,CAAC,CAAC,CAAC,OAAON,CAAC,CACjS,SAASsyG,GAAGtyG,EAAEK,EAAEW,EAAE,CAAC,GAAGouG,GAAG,OAAO,CAAC,IAAIruG,EAAEquG,GAAG,IAAK,EAACpvG,IAAI8uG,EAAG/tG,EAAE,EAAEf,CAAC,EAAEe,EAAE,EAAE,GAAGA,EAAE,EAAE,IAAIf,EAAEe,CAAC,MAAMf,EAAE,IAAIivG,GAAGjvG,CAAC,EAAE,GAAG,CAAC,OAAOqxG,GAAG,IAAIhxG,EAAEL,EAAEoxG,GAAGpwG,CAAC,CAAC,CAAC,QAAC,CAAQX,EAAEL,EAAE,EAAEK,EAAE,EAAE,KAAKA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,EAAEA,EAAE,EAAE,GAAGL,EAAE,EAAE,GAAGA,EAAE,EAAE,GAAG,IAAIovG,GAAG,QAAQA,GAAG,KAAKpvG,CAAC,CAAC,CAAC,CAAC,SAAS2xG,GAAG3xG,EAAEK,EAAEW,EAAE,CAAC,QAAQD,EAAEC,EAAE,OAAOV,EAAKS,EAAE,GAAL,EAAOI,GAAEb,EAAE,EAAE,EAAEa,GAAEJ,EAAEI,IAAG,KAAKH,EAAEG,GAAE,CAAC,GAAGd,EAAEL,EAAEgB,EAAEG,EAAC,CAAC,EAAE2vG,GAAG9wG,EAAEK,EAAEC,EAAEU,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,SAASuxG,GAAGvyG,EAAEK,EAAE,CAAC,IAAIW,EAAE,IAAIquG,GAAGsC,GAAG3xG,EAAEgB,EAAE0wG,GAAGrxG,CAAC,CAAC,EAAEwB,GAAEb,EAAEA,EAAE,EAAE,IAAG,CAAE,EAAEhB,EAAE,IAAI,WAAWgB,EAAE,CAAC,EAAEX,EAAEW,EAAE,EAAE,QAAQD,EAAEV,EAAE,OAAOC,EAAE,EAAEa,GAAE,EAAEA,GAAEJ,EAAEI,KAAI,CAAC,IAAIC,EAAEf,EAAEc,EAAC,EAAEnB,EAAE,IAAIoB,EAAEd,CAAC,EAAEA,GAAGc,EAAE,MAAM,CAAC,OAAAJ,EAAE,EAAE,CAAChB,CAAC,EAASA,CAAC,CAChf,SAASwyG,GAAGxyG,EAAEK,EAAE,CAAC,MAAM,CAAC,EAAEL,EAAE,EAAEK,CAAC,CAAC,CAChC,IAAI8tH,GAAE3b,GAAG,SAASxyG,EAAEK,EAAEW,EAAE,CAAC,GAAOhB,EAAE,IAAN,EAAQ,SAASA,EAAEA,EAAE,EAAE,IAAIe,EAAEf,EAAE,EAAEA,EAAE,CAAC,EAAMM,EAAEN,EAAE,EAAEA,EAAE,EAAE,CAAC,EAAMmB,GAAEnB,EAAE,EAAEA,EAAE,EAAE,CAAC,EAAEoB,EAAEpB,EAAE,EAAEA,EAAE,EAAE,CAAC,EAAE,OAAAA,EAAE,GAAG,EAAEyB,GAAEzB,CAAC,EAAEM,GAAGS,GAAG,EAAET,GAAG,EAAEa,IAAG,GAAGC,GAAG,MAAM,EAAEpB,EAAE,GAAGM,GAAG,IAAI,EAAES,EAAET,IAAI,GAAG,IAAIA,GAAG,QAAQ0B,GAAE3B,EAAEW,EAAOD,GAAL,IAAOT,EAAE,IAAI,IAASN,EAAKe,GAAH,EAAKf,EAAE,KAAK,IAAI,EAAE,IAAI,EAAEM,EAAEN,EAAE,KAAK,IAAI,EAAEe,EAAE,GAAG,GAAGT,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,EAAU,IAAE,SAASN,EAAEK,EAAEW,EAAE,CAAU,GAATX,EAAE0B,GAAE1B,EAAEW,CAAC,EAAWX,GAAN,KAAQ,CAACuB,GAAE5B,EAAE,EAAE,EAAEgB,EAAE,CAAC,EAAEhB,EAAEA,EAAE,EAAE,IAAIe,EAAEV,EAAEU,GAAGC,EAAE,EAAED,EAAE,EAAE,GAAG,CAACA,EAAEA,EAAMA,IAAJ,EAAM,EAAE,EAAEA,EAAEO,GAAEC,GAAE,GAAGA,GAAE,EAAED,GAAE,YAAY,MAAMP,CAAC,GAAGQ,GAAE,EAAED,GAAE,YAAY,qBAAsBP,GAAGQ,GAAE,EAAED,IAAGN,GAAG,GAAG,cAAc,GACnf,sBAAuBD,GAAGA,EAAE,KAAK,MAAMA,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAEQ,GAAE,EAAED,IAAGN,GAAG,GAAGD,KAAK,IAAIV,EAAE,KAAK,MAAM,KAAK,IAAIU,CAAC,EAAE,KAAK,GAAG,EAAEA,GAAG,KAAK,IAAI,EAAE,CAACV,CAAC,EAAEU,EAAE,KAAK,MAAM,QAAQA,CAAC,EAAE,UAAUA,GAAG,EAAEV,EAAEkB,GAAE,EAAED,IAAGN,GAAG,GAAGX,EAAE,KAAK,GAAGU,EAAE,WAAW,GAAGC,EAAEM,GAAEtB,EAAE,EAAE,KAAKgB,IAAI,EAAE,GAAG,EAAEhB,EAAE,EAAE,KAAKgB,IAAI,EAAE,GAAG,EAAEhB,EAAE,EAAE,KAAKgB,IAAI,GAAG,GAAG,EAAEhB,EAAE,EAAE,KAAKgB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAEyxG,GAAGD,GAAG,SAASxyG,EAAEK,EAAEW,EAAE,CAAC,GAAOhB,EAAE,IAAN,EAAQ,MAAM,GAAG,QAAQe,EAAEf,EAAE,EAAEM,EAAE,IAAIa,GAAE,EAAEC,EAAEpB,EAAE,EAAE,EAAEoB,GAAG,KAAKd,EAAEc,IAAId,EAAES,EAAE,EAAEA,EAAE,GAAG,EAAEU,GAAEV,CAAC,EAAEI,KAAIb,EAAE,MAAM,EAAEc,EAA2D,GAAzD,KAAKd,IAAIA,EAAES,EAAE,EAAEA,EAAE,GAAG,EAAEU,GAAEV,CAAC,EAAEI,KAAIb,EAAE,MAAM,GAAGN,IAAIM,EAAE,MAAM,GAAM,KAAKA,EAAE,IAAIc,EAAE,EAAE,EACpfA,GAAG,KAAKd,EAAEc,IAAId,EAAES,EAAE,EAAEA,EAAE,GAAG,EAAEU,GAAEV,CAAC,EAAEf,IAAIM,EAAE,MAAM,EAAEc,EAAE,EAAE,GAAG,IAAId,EAAGS,EAAEI,KAAI,EAAEb,EAAEN,IAAI,GAAKA,EAAEM,EAAE,cAAWS,EAAE,CAACA,EAAE,IAAI,EAAET,EAAE,CAACA,IAAI,EAAKS,GAAH,IAAOT,EAAEA,EAAE,IAAI,IAAGS,EAAE,WAAWT,GAAGS,IAAI,OAAQ,OAAM6tG,GAAE,EAAG,OAAA5sG,GAAE3B,EAAEW,EAAEhB,EAAE,CAACe,EAAEA,CAAC,IAAU,EAAE,SAASf,EAAEK,EAAEW,EAAE,CAAU,GAATX,EAAE0B,GAAE1B,EAAEW,CAAC,EAAWX,GAAN,MAAeA,GAAN,KAAQ,CAACuB,GAAE5B,EAAE,EAAE,EAAEgB,CAAC,EAAEhB,EAAEA,EAAE,EAAE,IAAIe,EAAEV,EAAuJ,IAArJW,EAAE,EAAED,EAAEA,EAAE,KAAK,IAAIA,CAAC,EAAEV,EAAEU,IAAI,EAAEA,EAAE,KAAK,OAAOA,EAAEV,GAAG,UAAU,EAAEU,KAAK,EAAEC,IAAID,EAAE,CAACA,IAAI,EAAEV,GAAG,CAACA,IAAI,GAAG,EAAE,WAAWA,IAAIA,EAAE,EAAEU,IAAI,WAAWA,IAAIA,EAAE,KAAKO,GAAEjB,EAAEkB,GAAER,EAAEC,EAAEM,GAAMjB,EAAEkB,GAAE,EAAElB,GAAG,IAAIW,GAAGhB,EAAE,EAAE,KAAKgB,EAAE,IAAI,GAAG,EAAEA,GAAGA,IAAI,EAAEX,GAAG,MAAM,EAAEA,KAAK,EAAEL,EAAE,EAAE,KAAKgB,CAAC,CAAC,CAAC,CAAC,EAAE0xG,GAAGF,GAAG,SAASxyG,EAChgBK,EAAEW,EAAE,CAAC,OAAOhB,EAAE,IAAN,EAAc,IAAGgC,GAAE3B,EAAEW,EAAEU,EAAE1B,EAAE,CAAC,CAAC,EAAQ,GAAE,EAAE,SAASA,EAAEK,EAAEW,EAAE,CAAU,GAATX,EAAE0B,GAAE1B,EAAEW,CAAC,EAAWX,GAAN,MAAeA,GAAN,KAAQ,GAAGuB,GAAE5B,EAAE,EAAE,EAAEgB,CAAC,EAAEhB,EAAEA,EAAE,EAAEgB,EAAEX,EAAE,GAAGW,EAAEY,GAAE5B,EAAEgB,CAAC,MAAM,CAAC,IAAIX,EAAE,EAAE,EAAEA,EAAEA,IAAIL,EAAE,EAAE,KAAKgB,EAAE,IAAI,GAAG,EAAEA,IAAI,EAAEhB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE2yG,GAAGH,GAAG,SAASxyG,EAAEK,EAAEW,EAAE,CAAC,GAAOhB,EAAE,IAAN,EAAQ,MAAQ,GAAC,IAAIe,EAAEW,EAAE1B,EAAE,CAAC,IAAI,EAAEA,EAAEA,EAAE,EAAE,IAAIM,EAAEN,EAAE,EAAEA,EAAE,GAAGe,EAAEU,GAAEzB,CAAC,EAAEA,EAAEA,EAAE,EAAE,IAAImB,GAAE,GAAG0sG,GAAI1sG,GAAE88G,KAAM98G,GAAE88G,EAAG,IAAI,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG98G,GAAEA,GAAE,OAAOnB,EAAE,SAASM,EAAEA,EAAES,CAAC,CAAC,MAAM,CAACA,EAAET,EAAES,EAAE,QAAQK,EAAE,GAAGF,GAAE,KAAKD,GAAE9B,GAAEkC,GAAEf,EAAES,GAAGE,GAAEjB,EAAEM,GAAG,EAAE,IAAIW,GAAEG,EAAE,KAAKH,EAAC,EAAE,IAAIA,GAAEX,GAAGS,EAAEF,KAAK1B,GAAEa,EAAEM,GAAG,EAAE,IAAIW,KAAU9B,GAAE,OAAT,KAAemB,IAAIO,EAAG,GACnfO,EAAE,MAAMH,GAAE,KAAK,EAAE9B,GAAE,EAAE,GAAG,IAAI8B,GAAEX,GAAGS,EAAE,EAAEF,EAAC,GAAI1B,GAAEa,EAAEM,GAAG,GAASnB,GAAE,OAAT,KAAqB8B,KAAN,KAAS,IAAI9B,IAAS8B,KAAN,KAAS,KAAK9B,MAAWgC,GAAEnB,EAAEM,GAAG,GAAG,OAAlB,KAAwBA,IAAIO,EAAC,GAAIO,EAAE,MAAMH,GAAE,KAAK,IAAI9B,GAAE,KAAK,EAAEgC,GAAE,EAAE,GAAG,KAAKF,GAAEX,GAAGS,EAAE,EAAEF,EAAC,GAAI1B,GAAEa,EAAEM,GAAG,GAASnB,GAAE,OAAT,MAAoB8B,IAAG,KAAK9B,GAAE,MAAM,MAAYgC,GAAEnB,EAAEM,GAAG,GAAG,OAAlB,OAAgCe,GAAErB,EAAEM,GAAG,GAAG,OAAlB,KAAwBA,IAAIO,EAAC,IAAKI,IAAGA,GAAE,IAAI,IAAI9B,GAAE,KAAK,IAAIgC,GAAE,KAAK,EAAEE,GAAE,GAAGJ,IAAG,MAAMG,EAAE,MAAMH,IAAG,GAAG,MAAM,OAAOA,GAAE,MAAM,KAAK,IAAIJ,EAAG,EAAC,MAAMO,EAAE,SAASF,GAAE0sG,EAAG1sG,GAAEE,CAAC,EAAEA,EAAE,OAAO,GAAGD,GAAEysG,EAAG1sG,GAAEE,CAAC,CAAC,CAAC,OAAAY,GAAE3B,EAAEW,EAAEG,EAAC,EAAQ,EAAE,EAAE,SAASnB,EAAEK,EAAEW,EAAE,CAAU,GAATX,EAAE0B,GAAE1B,EAAEW,CAAC,EAAWX,GAAN,KAAQ,CAAC,IAAIU,EAAE,GACje,GAAlBA,EAAWA,IAAT,OAAW,GAAGA,EAAKgtG,EAAG,CAAC,GAAGhtG,GAAG,2EAA2E,KAAKV,CAAC,EAAE,MAAM,MAAM,6BAA6B,EAAEA,GAAGytG,IAAKA,EAAG,IAAI,cAAc,OAAOztG,CAAC,CAAC,KAAK,CAAC,QAAQC,EAAE,EAAEa,GAAE,IAAI,WAAW,EAAEd,EAAE,MAAM,EAAEe,EAAE,EAAEA,EAAEf,EAAE,OAAOe,IAAI,CAAC,IAAIF,GAAEb,EAAE,WAAWe,CAAC,EAAE,GAAG,IAAIF,GAAEC,GAAEb,GAAG,EAAEY,OAAM,CAAC,GAAG,KAAKA,GAAEC,GAAEb,GAAG,EAAEY,IAAG,EAAE,QAAQ,CAAC,GAAG,OAAOA,IAAG,OAAOA,GAAE,CAAC,GAAG,OAAOA,IAAGE,EAAEf,EAAE,OAAO,CAAC,IAAIY,GAAEZ,EAAE,WAAW,EAAEe,CAAC,EAAE,GAAG,OAAOH,IAAG,OAAOA,GAAE,CAACC,GAAE,MAAMA,GAAE,OAAOD,GAAE,MAAM,MAAME,GAAEb,GAAG,EAAEY,IAAG,GAAG,IAAIC,GAAEb,GAAG,EAAEY,IAAG,GAAG,GAAG,IACjfC,GAAEb,GAAG,EAAEY,IAAG,EAAE,GAAG,IAAIC,GAAEb,GAAG,EAAEY,GAAE,GAAG,IAAI,QAAQ,MAAME,GAAG,CAAC,GAAGL,EAAE,MAAM,MAAM,6BAA6B,EAAEG,GAAE,KAAK,CAACC,GAAEb,GAAG,EAAEY,IAAG,GAAG,IAAIC,GAAEb,GAAG,EAAEY,IAAG,EAAE,GAAG,GAAG,CAACC,GAAEb,GAAG,EAAEY,GAAE,GAAG,GAAG,CAAC,CAACb,EAAEc,GAAE,SAAS,EAAEb,CAAC,CAAC,CAACsB,GAAE5B,EAAE,EAAE,EAAEgB,EAAE,CAAC,EAAEY,GAAE5B,EAAE,EAAEK,EAAE,MAAM,EAAEwB,GAAE7B,EAAEA,EAAE,EAAE,IAAG,CAAE,EAAE6B,GAAE7B,EAAEK,CAAC,CAAC,CAAC,CAAC,EAAEuyG,GAAGJ,GAAG,SAASxyG,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,GAAON,EAAE,IAAN,EAAQ,MAAQ,GAACK,EAAE4vG,GAAG5vG,EAAEW,EAAED,CAAC,EAAEC,EAAEhB,EAAE,EAAE,EAAEe,EAAEW,EAAE1B,EAAE,CAAC,IAAI,EAAE,IAAImB,GAAEnB,EAAE,EAAE,EAAEe,EAAEK,EAAED,GAAEH,EAAmC,GAAjC,GAAGI,IAAIpB,EAAE,EAAE,EAAEmB,GAAEb,EAAED,EAAEL,CAAC,EAAEoB,EAAED,GAAEnB,EAAE,EAAE,GAAMoB,EAAE,MAAM,MAAM,yDAAyDL,EAAE,yBAAyBA,EAAEK,GAAG,uFAAuF,EAC/iB,OAAApB,EAAE,EAAE,EAAEmB,GAAEnB,EAAE,EAAE,EAAEgB,EAAQ,EAAE,EAAE,SAAShB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAa,GAAZD,EAAE2vG,GAAG3vG,EAAEU,EAAEC,CAAC,EAAWX,GAAN,KAAQ,IAAIU,EAAE,EAAEA,EAAEV,EAAE,OAAOU,IAAI,CAAC,IAAII,GAAEnB,EAAE4B,GAAET,GAAE,EAAE,EAAEH,EAAE,CAAC,EAAE,IAAII,EAAED,GAAE,EAAE,IAAG,EAAGU,GAAEV,GAAEC,CAAC,EAAEA,EAAE,KAAKD,GAAE,CAAC,EAAEA,GAAEC,EAAEd,EAAED,EAAEU,CAAC,EAAEf,CAAC,EAAEoB,EAAEpB,EAAE,IAAIkB,GAAEC,GAAE,IAAG,EAAG,IAAID,GAAEE,EAAE,EAAEA,EAAE,EAAE,SAASF,GAAE,IAAIA,IAAGC,GAAE,KAAKD,GAAE,IAAI,GAAG,EAAEA,MAAK,EAAEE,EAAE,IAAID,GAAE,KAAKD,EAAC,EAAEE,EAAE,GAAG,CAAC,CAAC,EAAE,SAASgtH,IAAG,CAACxd,GAAG,MAAM,KAAK,SAAS,CAAC,CAAS,GAARxwG,EAAEguH,GAAExd,EAAE,EAAKf,GAAG,CAAC,IAAIgD,GAAG,CAAE,EAAC,OAAO,iBAAiBub,IAAGvb,GAAG,OAAO,WAAW,EAAE/C,GAAG,OAAO,OAAO,WAAW,CAAC,EAAE+C,GAAI,EAAE,SAASC,GAAG9yG,EAAE,CAACouH,GAAE,KAAK,KAAKpuH,CAAC,CAAC,CAACI,EAAE0yG,GAAGsb,EAAC,EAAE,SAASrb,IAAI,CAAC,MAAM,CAAC,EAAEL,GAAG,EAAEyb,GAAE,EAAExb,GAAG,EAAEA,EAAE,CAAC,CAAE,SAASK,GAAGhzG,EAAE,CAACouH,GAAE,KAAK,KAAKpuH,EAAE,GAAGizG,EAAE,CAAC,CAAC7yG,EAAE4yG,GAAGob,EAAC,EAAEpb,GAAG,UAAU,kBAAkB,SAAShzG,EAAEK,EAAE,CAAC,OAAA4vG,GAAG,KAAK,EAAE6C,GAAG9yG,EAAEK,CAAC,EAAS,IAAI,EAAE,SAAS6yG,IAAI,CAAC,MAAM,CAAC,EAAEN,GAAGE,GAAGC,EAAE,CAAC,CAAC,IAAIE,GAAG,CAAC,CAAC,EAAE,SAASE,GAAGnzG,EAAE,CAACouH,GAAE,KAAK,KAAKpuH,CAAC,CAAC,CAACI,EAAE+yG,GAAGib,EAAC,EAAE,SAAShb,IAAI,CAAC,MAAM,CAAC,EAAE+a,GAAE,EAAEA,GAAE,EAAEA,GAAE,EAAEA,GAAE,EAAEA,EAAC,CAAC,CAAE,SAAS9a,GAAGrzG,EAAE,CAACouH,GAAE,KAAK,KAAKpuH,EAAE,GAAGszG,EAAE,CAAC,CAAClzG,EAAEizG,GAAG+a,EAAC,EAAE,SAAS7a,IAAI,CAAC,MAAM,CAAC,EAAEX,GAAGO,GAAGC,EAAE,CAAC,CAAC,IAAIE,GAAG,CAAC,CAAC,EAAE,SAASE,GAAGxzG,EAAE,CAACouH,GAAE,KAAK,KAAKpuH,CAAC,CAAC,CAACI,EAAEozG,GAAG4a,EAAC,EAAE,SAAS3a,IAAI,CAAC,MAAM,CAAC,EAAE0a,GAAE,EAAEA,GAAE,EAAEA,GAAE,EAAEA,GAAE,EAAEA,GAAE,EAAE1b,EAAE,CAAC,CAAE,IAAIkB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAED,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACl4C,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAEE,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAEC,EAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,EAAEC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAEC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACvf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAA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G,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EACrf,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IACrf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EACvf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GACnf,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IACjf,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAClf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACrf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACtf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACjf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACtf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACrf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACjf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACpf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACjf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACvf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACnf,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EACnf,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAClf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAClf,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACrf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EACtf,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAClf,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACtf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACnf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACpf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACrf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACrf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACrf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACjf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACpf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACrf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACpf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IACrf,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EACnf,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CA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B,CAClBp3B,IACAM,IACAC,IACAC,IACAK,IACAG,IACA6B,IACAE,IACAG,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAO,IACAU,IACAN,IACAG,IACAiB,IACA4Z,IACAG,IACA5U,IACA+U,IACA3X,IACAkD,IACA4U,IACAY,IACAO,IACAkB,IACAI,IACAI,IACAG,IACAC,IACAC,IACAW,IACAS,IACAE,IACAE,IACAQ,IACAG,IACAE,IACAK,IACAI,IACAG,IACAC,IACAG,IACA3a,IACA4a,IACA1a,IACA4a,IACA1a,IACA2a,IACAG,IACA5a,IACAE,IACAib,IACAG,IACAG,IACAM,IACAW,IACAvb,IACAE,IACAjM,IACAunB,IACAC,IACAC,IACAC,IACAvb,IACAE,IACAyb,IACAC,IACAvb,IACAwb,IACAC,IACAC,IACAC,IACAG,IACAG,IACAE,IACA9b,IACAgc,IACAG,IACAG,IACAG,IACAI,IACAG,IACAE,IACAhd,IACAwd,IACAK,IACAC,IACA1d,IACAK,IACA6d,IACAI,IACAE,IACAje,IACAme,IACAC,IACAG,IACAE,GACAC,IACAG,IACAle,IACAqe,IACAC,IACAC,IACAC,IACAC,IACAppB,IACAypB,IACAG,IACAE,IACAG,IACAI,IACAO,IACAC,IACA3Z,IACAga,IACAE,IACAO,IACAC,IACAra,IACAsa,IACAC,IACAC,IACA3Z,IACA0U,IACAkF,IACAO,IACAe,IACAU,IACAQ,IACAC,IACAK,IACAK,IACAha,IACAia,IACA/Z,IACAia,IACAS,IACAK,IACAO,IACAE,IACAnZ,IACAqZ,IACAC,IACAC,IACAE,IACAG,IACAM,IACAK,IACAj1B,IACAm1B,IACAG,IACAC,GACJ,EACA,UAAWE,KAAgBD,IACvBxhG,GAAeyhG,CAAY,EClV/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBA,MAAMrtG,GAAM92N,GAAK,EAKjB82N,GAAI,aAAa,wBAAyB,SAAY,CAClD,GAAI,C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3a,IACA4a,IACA1a,IACA4a,IACA1a,IACA6wC,IACAl2B,IACAG,IACA5a,IACAE,IACAob,IACAG,IACAM,IACAW,IACAvb,IACAE,IACAjM,IACAs8C,IACAxO,IACAvmB,IACAC,IACAC,IACAC,IACAvb,IACAE,IACAyb,IACAtb,IACAub,IACAC,IACAC,IACAC,IACA60B,IACAO,IACA30B,IACA9b,IACAgc,IACAG,IACAG,IACAG,IACAI,IACAG,IACAE,IACAhd,IACAwd,IACAM,IACAD,IACAzd,IACAK,IACA6d,IACAI,IACAE,IACAje,IACAme,IACAC,IACAG,IACAE,IACAC,IACAG,IACAle,IACA4xC,IACAG,IACAE,IACA5zB,IACAxmB,IACAymB,GACAC,IACAC,IACAC,IACAppB,IACAypB,IACAG,IACAE,IACAG,IACAI,IACAO,IACAC,IACA3Z,IACAga,IACAE,IACAO,IACAC,IACAra,IACAsa,IACAC,IACAC,IACA3Z,IACA0U,IACAkF,IACAO,IACAe,IACAU,IACAQ,IACAC,IACAK,IACAK,IACAha,IACAia,IACA/Z,IACAE,IACA+Z,IACAS,IACAK,IACAO,IACAE,IACAnZ,IACAqZ,IACAC,IACAC,IACAE,IACAG,IACAM,IACAK,IACAj1B,IACAm1B,IACAG,IACAwyB,IACAvyB,GACJ,EACA,UAAWE,KAAgBD,IACvBxhG,GAAeyhG,CAAY,EC7W/B,SAASsyB,KAAyB,CAC9B,GAAI,CACA,MAAQ,CAAC,CAAC,OAAO,cACZ,CAAC,CAAC,OAAO,YAAY,SAAW,CAAC,CAAC,OAAO,YAAY,iBAClE,MACc,CACN,MAAO,EACf,CACA,CCPA,MAAMC,GAAc,CAKhB,qBAAsB,CAClB,KAAK,oBAAsB,KAAK,WAAY,CACpD,CACA,CCHA,MAAMC,IAAoB,QAKpBC,IAAwB,6FAA6FD,GAAiB,oBACtIE,IAAwB,8FAA8FC,GAAY,IAIxI,MAAMC,YAA+BL,GAAc,CAC/C,YAAYM,EAAYC,EAAc,CAClC,MAAO,EACP,KAAK,aAAeA,GAAgBL,IACpC,KAAK,WAAaI,GAAcH,GACxC,C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","names":["l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","react_production_min","reactModule","require$$0","reactJsxRuntime_production_min","jsxRuntimeModule","extendStatics","__extends","__","__assign","s","i","__rest","__awaiter","thisArg","_arguments","generator","adopt","value","resolve","reject","fulfilled","step","rejected","result","__generator","body","_","verb","op","__values","o","__read","ar","error","__spreadArray","to","from","pack","__await","__asyncGenerator","awaitReturn","resume","settle","fulfill","__asyncValues","SUCCESS_MESSAGE","UNEXPECTED_ERROR_MESSAGE","MAX_RETRIES_EXCEEDED_MESSAGE","OPT_OUT_MESSAGE","MISSING_API_KEY_MESSAGE","INVALID_API_KEY","CLIENT_NOT_INITIALIZED","Status","buildResult","event","code","message","UUID","Timeline","client","plugin","config","_a","_b","_c","existingPlugin","pluginName","index","plugins","_this","timeout","item","before","before_1","before_1_1","e_1_1","enrichment","enrichment_1","enrichment_1_1","e_2_1","destination","executeDestinations","e_1","e_2","_d","_e","eventClone","resolveResult","queue","UNSET_VALUE","AMPLITUDE_PREFIX","STORAGE_PREFIX","AMPLITUDE_SERVER_URL","EU_AMPLITUDE_SERVER_URL","AMPLITUDE_BATCH_SERVER_URL","EU_AMPLITUDE_BATCH_SERVER_URL","MAX_PROPERTY_KEYS","isValidObject","properties","key","isValidProperties","property","isValid","value_1","value_1_1","valueElement","Identify","IdentifyOperation","operation","userPropertyMap","SpecialEventType","createTrackEvent","eventInput","eventProperties","eventOptions","baseEvent","createIdentifyEvent","identify","identifyEvent","createGroupIdentifyEvent","groupType","groupName","groupIdentify","createGroupEvent","groupEvent","createRevenueEvent","revenue","returnWrapper","awaitable","AmplitudeCore","name","queueName","queuedFunctions","queuedFunctions_1","queuedFunctions_1_1","queuedFunction","val","callback","optOut","Revenue","productId","quantity","price","revenueType","currency","receipt","receiptSig","RevenueProperty","chunk","arr","size","chunkSize","chunks","element","chunkIndex","LogLevel","PREFIX","Logger","logLevel","args","_i","getDefaultConfig","Config","options","defaultConfig","serverConfig","createServerConfig","getServerUrl","serverZone","useBatch","serverUrl","_serverZone","RequestMetadata","getErrorMessage","getResponseBodyString","res","responseBodyString","Destination","unsent","context","list","useRetry","later","batches","promise","batch","payload","errorMessage","eventWithoutExtra","status","dropIndex","dropIndexSet","retry","tryable","dropUserIds","dropDeviceIds","throttledIndex","dropUserIdsSet","dropDeviceIdsSet","throttledIndexSet","updatedEvents","eventsToRemove","queuedContext","ApplicationContextProviderImpl","getLanguage","EventBridgeImpl","receiver","isEqual","obj1","obj2","primitive","typeA","typeB","primitive_1","primitive_1_1","isArrayA","isArrayB","sorted1","sorted2","result_1","ID_OP_SET","ID_OP_UNSET","ID_OP_CLEAR_ALL","obj","ownProps","resArray","IdentityStoreImpl","self","actingUserProperties","actingIdentity","userId","deviceId","userProperties","actions","e_3","actingProperties","_f","action","_g","_h","_j","_k","_l","e_3_1","identity","originalIdentity","listener","safeGlobal","AnalyticsConnector","instanceName","getAnalyticsConnector","setConnectorUserId","setConnectorDeviceId","IdentityEventSender","getGlobalScope","ampIntegrationContextName","isNewSession","sessionTimeout","lastEventTime","currentTime","timeSinceLastEvent","getCookieName","apiKey","postKey","limit","getOldCookieName","userLanguage","getQueryParams","globalScope","pairs","params","acc","curr","query","tryDecodeURIComponent","getStacktrace","ignoreDepth","trace","text","getClientLogConfig","logger","getValueByStringPath","path","attr","getClientStates","paths","paths_1","paths_1_1","debugWrapper","fn","fnName","getLogConfig","getStates","fnContext","debugContext","MemoryStorage","CookieStorage","testStrorage","testKey","decodedValue","decodeCookiesAsDefault","decodeCookiesWithDoubleUrlEncoding","cookie","match","expirationDays","expires","expireDate","date","str","getStorageKey","BaseTransport","_serverUrl","_payload","responseJSON","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","statusCode","FetchTransport","_super","response","responseText","OfflineDisabled","DEFAULT_CSS_SELECTOR_ALLOWLIST","DEFAULT_DATA_ATTRIBUTE_PREFIX","DEFAULT_ACTION_CLICK_ALLOWLIST","isTrackingEnabled","autocapture","isAttributionTrackingEnabled","isFileDownloadTrackingEnabled","isFormInteractionTrackingEnabled","isPageViewTrackingEnabled","isSessionTrackingEnabled","isElementInteractionsEnabled","getElementInteractionsConfig","getPageViewTrackingConfig","trackOn","trackHistoryChanges","eventType","pageCounter","isDefaultPageViewTrackingEnabled","getAttributionTrackingConfig","convertProxyObjectToRealObject","instance","name_1","isInstanceProxy","instanceProxy","VERSION","LIBPREFIX","BROWSER_PLATFORM","IP_ADDRESS","Context","time","lastEventId","nextEventId","BrowserStorage","storage","random","testStorage","MAX_ARRAY_LENGTH","LocalStorage","droppedEventsCount","SessionStorage","XHRTransport","xhr","SendBeaconTransport","data","success","parseLegacyCookies","cookieStorage","deleteLegacyCookies","cookieName","cookies","sessionId","decode","parseTime","num","integer","DEFAULT_EVENT_PREFIX","DEFAULT_FORM_START_EVENT","DEFAULT_FORM_SUBMIT_EVENT","DEFAULT_FILE_DOWNLOAD_EVENT","DEFAULT_SESSION_START_EVENT","DEFAULT_SESSION_END_EVENT","FILE_EXTENSION","FILE_NAME","LINK_ID","LINK_TEXT","LINK_URL","FORM_ID","FORM_NAME","FORM_DESTINATION","DEFAULT_IDENTITY_STORAGE","DEFAULT_SERVER_ZONE","BrowserConfig","appVersion","cookieOptions","defaultTracking","flushIntervalMillis","flushMaxRetries","flushQueueSize","identityStorage","ingestionMetadata","loggerProvider","minIdLength","offline","partnerId","plan","storageProvider","trackingOptions","transport","fetchRemoteConfig","debugLogsEnabled","createTransport","cache","useBrowserConfig","amplitudeInstance","legacyCookies","previousCookies","queryParams","browserConfig","_y","_z","_0","_1","_2","_3","getTopLevelDomain","createCookieStorage","url","host","parts","levels","storageKey","domain","UTM_CAMPAIGN","UTM_CONTENT","UTM_ID","UTM_MEDIUM","UTM_SOURCE","UTM_TERM","DCLID","FBCLID","GBRAID","GCLID","KO_CLICK_ID","LI_FAT_ID","MSCLKID","RDT_CID","TTCLID","TWCLID","WBRAID","BASE_CAMPAIGN","CampaignParser","utmCampaign","utmContent","utmId","utmMedium","utmSource","utmTerm","ServerZone","omitUndefined","input","defaultPageViewEvent","pageViewTrackingPlugin","amplitude","pushState","localConfig","getDecodeURI","locationStr","decodedLocationStr","createPageViewEvent","locationHREF","getCampaignParams","shouldTrackOnPageLoad","previousURL","trackHistoryPageView","newURL","shouldTrackPageView","shouldTrackHistoryPageView","trackHistoryPageViewWrapper","target","state","unused","pageViewEvent","isCampaignEvent","$set","$unset","userProperties_1","trackingOption","newURLStr","oldURLStr","oldURL","newBaseStr","oldBaseStr","formInteractionTracking","observer","eventListeners","addEventListener","type","handler","removeClickListeners","setup","initializeFormTracking","window_1","addFormInteractionListener","form","hasFormChanged","formDestination","extractFormAction","stringOrUndefined","forms","mutations","mutation","node","execute","teardown","fileDownloadTracking","initializeFileDownloadTracking","addFileDownloadListener","ext","fileExtension","links","notified","detNotify","networkConnectivityCheckerPlugin","addNetworkListener","removeNetworkListeners","UNEXPECTED_NETWORK_ERROR_MESSAGE","SUCCESS_REMOTE_CONFIG","TIMEOUT_MESSAGE","REMOTE_CONFIG_SERVER_URL","REMOTE_CONFIG_SERVER_URL_STAGING","REMOTE_CONFIG_SERVER_URL_EU","RemoteConfigFetch","configKeys","configNamespace","fetchStartTime","configAPIResponse","remoteConfig","controller","timeoutId","signal","urlParams","configKey","parsedStatus","knownError","err","createRemoteConfigFetch","remoteConfigFetch.createRemoteConfigFetch","BrowserJoinedConfigGenerator","createBrowserJoinedConfigGenerator","joinedConfigGenerator","PLUGIN_NAME","AMPLITUDE_ELEMENT_CLICKED_EVENT","AMPLITUDE_ELEMENT_CHANGED_EVENT","AMPLITUDE_EVENT_PROP_ELEMENT_ID","AMPLITUDE_EVENT_PROP_ELEMENT_CLASS","AMPLITUDE_EVENT_PROP_ELEMENT_TAG","AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY","AMPLITUDE_EVENT_PROP_ELEMENT_HREF","AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT","AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP","AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL","AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES","AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL","AMPLITUDE_EVENT_PROP_PAGE_URL","AMPLITUDE_EVENT_PROP_PAGE_TITLE","AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT","AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH","AMPLITUDE_ORIGIN","AMPLITUDE_ORIGIN_EU","AMPLITUDE_ORIGIN_STAGING","AMPLITUDE_ORIGINS_MAP","AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL","AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS","isFunction","createErrorClass","createImpl","ctorFunc","UnsubscriptionError","errors","arrRemove","Subscription","initialTeardown","_parentage","_parentage_1","_parentage_1_1","parent_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","parent","empty","EMPTY_SUBSCRIPTION","isSubscription","timeoutProvider","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","EMPTY_OBSERVER","next","complete","SafeSubscriber","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","defaultErrorHandler","observable","pipeFromArray","fns","prev","Observable","subscribe","operator","subscriber","isSubscriber","source","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","observers","hasError","isStopped","thrownError","dateTimestampProvider","Action","scheduler","work","delay","intervalProvider","AsyncAction","id","_id","_scheduler","_delay","errored","errorValue","Scheduler","schedulerActionCtor","now","AsyncScheduler","SchedulerAction","asyncScheduler","async","EMPTY","isScheduler","last","popScheduler","popNumber","defaultValue","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","createInvalidObservableTypeError","getSymbolIterator","iterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","reader","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","isValidDate","TimeoutError","info","schedulerArg","first","each","_with","timeoutErrorFactory","meta","originalSourceSubscription","timerSubscription","lastValue","seen","startTimer","map","project","isArray","callOrApply","mapOneOrManyArgs","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","_loop_1","bufferedValue","mergeMap","resultSelector","ii","mergeAll","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","fromEvent","eventName","isEventTarget","methodName","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","add","remove","subTarget","timer","dueTime","intervalOrScheduler","intervalDuration","due","merge","sources","filter","predicate","closingNotifier","currentBuffer","debounceTime","activeTask","lastTime","emit","emitWhenIdle","targetTime","take","count","mapTo","delayWhen","delayDurationSelector","subscriptionDelay","duration","pairwise","hasPrev","share","connector","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","connection","resetConnection","refCount","hasCompleted","hasErrored","cancelReset","reset","resetAndUnsubscribe","conn","dest","handleReset","on","onSubscriber","switchMap","innerSubscriber","innerIndex","outerIndex","SENSITIVE_TAGS","createShouldTrackEvent","autocaptureOptions","allowlist","actionType","pageUrlAllowlist","shouldTrackEventResolver","tag","isPageUrlAllowed","elementType","hasMatchAnyAllowedSelector","selector","computedStyle","isNonSensitiveString","ccRegex","ssnRegex","isTextNode","isNonSensitiveElement","isContentEditable","getText","child","childText","allowedUrl","getAttributesWithPrefix","prefix","attributes","attributeName","attributeKey","attributeValue","isEmpty","removeEmptyProperties","filteredProperties","getNearestLabel","labelElement","labelText","getClosestElement","selectors","getEventTagProps","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","constants.AMPLITUDE_EVENT_PROP_PAGE_URL","asyncLoadScript","scriptElement","generateUniqueId","filterOutNonTrackableEvents","WindowMessenger","origin","request","endpoint","isElementSelectable","cssSelectorAllowlist","actionClickAllowlist","amplitudeVisualTaggingSelectorInstance","eventData","actionData_1","BLOCKED_ATTRIBUTES","SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST","SVG_TAGS","HIGHLY_SENSITIVE_INPUT_TYPES","MAX_ATTRIBUTE_LENGTH","MAX_HIERARCHY_LENGTH","getElementProperties","tagName","siblings","el","prevSiblingTag","classes","attributesArray","filteredAttributes","isSensitiveElement","filteredAttributes_1","filteredAttributes_1_1","getAncestors","targetEl","ancestors","current","getHierarchy","hierarchy","ensureListUnderLimit","bytesLimit","numChars","ensureUnicodePythonCompatible","nested","elements","entries","RAGE_CLICK_THRESHOLD","trackClicks","allObservables","shouldTrackEvent","clickObservable","comparisonTrigger","targetChanged","samePos","timeoutTrigger","triggers","bufferedClicks","click","clicks","clickType","clicks_1","clicks_1_1","trackChange","getEventProperties","changeObservable","filteredChangeObservable","changeEvent","trackActionClick","shouldTrackActionClick","mutationObservable","navigateObservable","filteredClickObservable","closestActionClickEl","clickEvent","changeObservables","mutationOrNavigate","actionClicks","actionClick","ObservablesEnum","isElementBasedEvent","autocapturePlugin","dataAttributePrefix","visualTaggingOptions","constants.PLUGIN_NAME","subscriptions","createObservables","addAdditionalEventProperties","change","navigate","mutationObserver","rect","ariaLabel","nearestLabel","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID","constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS","constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY","constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT","constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES","constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL","constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH","constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF","closestTrackedAncestor","clickTrackingSubscription","changeSubscription","actionClickSubscription","constants.AMPLITUDE_ORIGINS_MAP","subscriptions_1","subscriptions_1_1","subscription","domainWithoutSubdomain","isDirectTraffic","isNewCampaign","previous","referring_domain","currentCampaign","prevReferringDomain","previousCampaign","isExcludedReferrer","hasNewCampaign","hasNewDomain","excludeReferrers","referringDomain","createCampaignEvent","campaign","campaignParameters","getDefaultExcludedReferrers","cookieDomain","WebAttribution","isEventInNewSession","event_id","campaignEvent","AmplitudeBrowser","userIdOrOptions","maybeOptions","browserOptions","attributionTrackingOptions","querySessionId","promises","previousSessionId","isCampaignEventTracked","shouldSetSessionIdOnNewCampaign","browserConfigCopy","createInstance","client$1","logEvent","Types","IdentifyOperationType","SpecialEventTypeType","RevenuePropertyType","LogLevelType","OfflineDisabledType","DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE","DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE","DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE","DEBUG_BUILD","SDK_VERSION","GLOBAL_OBJ","getGlobalSingleton","creator","gbl","__SENTRY__","versionedCarrier","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","level","originalConsoleMethod","makeLogger","enabled","STACKTRACE_FRAME_LIMIT","UNKNOWN_FUNCTION","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","stack","skipFirstLines","framesToPop","frames","lines","line","cleanedLine","parser","frame","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","getLastStackFrame","defaultFunctionName","getFunctionName","getFramesFromEvent","exception","handlers","instrumented","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","msg","column","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","getMainCarrier","getSentryCarrier","carrier","objectToString","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isString","isParameterizedString","isPrimitive","isPlainObject","isEvent","isElement","isRegExp","isThenable","isSyntheticEvent","base","isVueViewModel","WINDOW","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","elem","currentElem","MAX_TRAVERSE_HEIGHT","out","height","len","separator","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getLocationHref","getDomElement","getComponentName","truncate","max","safeJoin","delimiter","output","isMatchingPattern","pattern","requireExactStringMatch","stringMatchesSomePattern","testString","patterns","fill","replacementFactory","original","wrapped","markFunctionWrapped","addNonEnumerableProperty","proto","getOriginalFunction","func","convertToPlainObject","getOwnProperties","newObj","serializeEventTarget","extractedProps","extractExceptionKeysForMessage","maxLength","keys","firstKey","includedKeys","serialized","dropUndefinedKeys","inputValue","_dropUndefinedKeys","memoizationMap","isPojo","memoVal","returnValue","ONE_SECOND_IN_MS","dateTimestampInSeconds","createUnixTimestampInSecondsFunc","performance","approxStartingTimeOrigin","timeOrigin","timestampInSeconds","browserPerformanceTimeOrigin","threshold","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","navigationStartIsReliable","uuid4","crypto","getRandomByte","typedArray","getFirstException","getEventDescription","eventId","firstException","addExceptionTypeValue","values","addExceptionMechanism","newMechanism","defaultMechanism","currentMechanism","mergedData","checkOrSetAlreadyCaught","isAlreadyCaptured","States","RESOLVED","REJECTED","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","reason","executor","onfulfilled","onrejected","onfinally","isRejected","cachedHandlers","makeSession","startingTime","session","sessionToJSON","updateSession","closeSession","generateTraceId","generateSpanId","initialObj","mergeObj","SCOPE_SPAN_FIELD","_setSpanForScope","scope","span","_getSpanForScope","DEFAULT_MAX_BREADCRUMBS","ScopeClass","newScope","user","requestSession","tags","extras","extra","fingerprint","captureContext","scopeToMerge","scopeInstance","Scope","contexts","propagationContext","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","attachment","newData","hint","syntheticException","getDefaultCurrentScope","getDefaultIsolationScope","AsyncContextStack","isolationScope","assignedScope","assignedIsolationScope","maybePromiseResult","getAsyncContextStack","registry","sentry","withScope","withSetScope","withIsolationScope","getStackAsyncContextStrategy","_isolationScope","getAsyncContextStrategy","getCurrentScope","getIsolationScope","rest","acs","getClient","getTraceContextFromScope","traceId","spanId","parentSpanId","METRICS_SPAN_FIELD","getMetricSummaryJsonForSpan","exportKey","summary","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","SEMANTIC_ATTRIBUTE_PROFILE_ID","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","SPAN_STATUS_UNSET","SPAN_STATUS_OK","SPAN_STATUS_ERROR","getSpanStatusFromHttpCode","httpStatus","setHttpStatus","spanStatus","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","MAX_BAGGAGE_STRING_LENGTH","baggageHeaderToDynamicSamplingContext","baggageHeader","baggageObject","parseBaggageHeader","dynamicSamplingContext","nonPrefixedKey","dynamicSamplingContextToSentryBaggageHeader","sentryPrefixedDSC","dscKey","dscValue","objectToBaggageHeader","currBaggageObject","baggageHeaderToObject","baggageEntry","keyOrValue","object","objectKey","objectValue","currentIndex","newBaggageHeader","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","matches","parentSampled","propagationContextFromHeaders","sentryTrace","baggage","traceparentData","virtualSpanId","generateSentryTraceHeader","sampled","sampledString","TRACE_FLAG_NONE","TRACE_FLAG_SAMPLED","hasShownSpanDropWarning","spanToTransactionTraceContext","span_id","trace_id","parent_span_id","spanToJSON","spanToTraceContext","isRemote","spanToTraceHeader","spanIsSampled","spanTimeInputToSeconds","ensureTimestampInSeconds","timestamp","spanIsSentrySpan","spanIsOpenTelemetrySdkTraceBaseSpan","startTime","endTime","getStatusMessage","castSpan","traceFlags","CHILD_SPANS_FIELD","ROOT_SPAN_FIELD","addChildSpanToSpan","childSpan","rootSpan","removeChildSpanFromSpan","getSpanDescendants","resultSet","addSpanChildren","childSpans","getRootSpan","getActiveSpan","showSpanDropWarning","errorsInstrumented","registerSpanErrorInstrumentation","errorCallback","activeSpan","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","setCapturedScopesOnSpan","getCapturedScopesOnSpan","hasTracingEnabled","SentryNonRecordingSpan","spanContext","_timestamp","_key","_value","_values","_status","_name","_attributesOrStartTime","_startTime","_link","_links","_exception","_time","DEFAULT_ENVIRONMENT","FROZEN_DSC_FIELD","freezeDscOnSpan","dsc","getDynamicSamplingContextFromClient","public_key","getDynamicSamplingContextFromScope","getDynamicSamplingContextFromSpan","frozenDsc","traceState","traceStateDsc","dscOnTraceState","jsonSpan","maybeSampleRate","logSpanStart","description","isRootSpan","header","infoParts","logSpanEnd","parseSampleRate","sampleRate","rate","sampleSpan","samplingContext","normalizedRequest","enhancedSamplingContext","parsedSampleRate","DSN_REGEX","isValidProtocol","protocol","dsnToString","dsn","withPassword","pass","port","projectId","publicKey","dsnFromString","lastPath","split","projectMatch","dsnFromComponents","components","validateDsn","component","makeDsn","memoBuilder","hasWeakSet","inner","memoize","unmemoize","normalize","depth","maxProperties","visit","normalizeToSize","maxSize","normalized","jsonSize","memo","stringified","stringifyValue","remainingDepth","valueWithToJSON","jsonValue","numAdded","visitable","visitKey","visitValue","objName","getConstructorName","prototype","utf8Length","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","encodeUTF8","serializeEnvelope","envHeaders","append","itemHeaders","stringifiedPayload","concatBuffers","buffers","totalLength","buf","merged","offset","createSpanEnvelopeItem","spanJson","createAttachmentEnvelopeItem","ITEM_TYPE_TO_DATA_CATEGORY_MAP","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","version","createEventEnvelopeHeaders","sdkInfo","tunnel","enhanceEventWithSdkInfo","createSessionEnvelope","metadata","envelopeHeaders","createEventEnvelope","createSpanEnvelope","spans","dscHasRequiredProps","beforeSendSpan","convertToSpanJSON","setMeasurement","unit","timedEventsToMeasurements","events","measurements","MAX_SPAN_COUNT","SentrySpan","timeInput","endTimestamp","attributesOrStartTime","isSpanTimeInput","sendSpanEnvelope","transactionEvent","isFullFinishedSpan","capturedSpanScope","capturedSpanIsolationScope","isStandaloneSpan","transaction","spanItems","SUPPRESS_TRACING_KEY","startInactiveSpan","getAcs","spanArguments","parseSentrySpanArguments","forceTransaction","customParentSpan","withActiveSpan","parentSpan","getParentSpan","createChildOrRootSpan","_startChildSpan","_startRootSpan","initialCtx","ctx","TRACING_DEFAULTS","FINISH_REASON_HEARTBEAT_FAILED","FINISH_REASON_IDLE_TIMEOUT","FINISH_REASON_FINAL_TIMEOUT","FINISH_REASON_EXTERNAL_FINISH","startIdleSpan","startSpanOptions","activities","_finished","_idleTimeoutID","_finishReason","_autoFinishAllowed","_cleanupHooks","idleTimeout","finalTimeout","childSpanTimeout","beforeSpanEnd","previousActiveSpan","_startIdleSpan","definedEndTimestamp","spanEndTimestamp","onIdleSpanEnded","childEndTimestamps","latestSpanEndTimestamp","spanStartTimestamp","_cancelIdleTimeout","_restartIdleTimeout","_restartChildSpanTimeout","_pushActivity","_popActivity","cleanup","spanJSON","startTimestamp","discardedSpans","childSpanJSON","childEndTimestamp","childStartTimestamp","spanStartedBeforeIdleSpanEnd","timeoutWithMarginOfError","spanEndedBeforeFinalTimeout","stringifiedSpan","startedSpan","endedSpan","spanToAllowAutoFinish","notifyEventProcessors","processors","processor","final","parsedStackResults","lastKeysCount","cachedFilenameDebugIds","getFilenameToDebugIdMap","debugIdMap","debugIdKeys","stackKey","parsedStack","stackFrame","filename","debugId","applyScopeDataToEvent","breadcrumbs","sdkProcessingMetadata","applyDataToEvent","applySpanToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeScopeData","mergeData","eventProcessors","attachments","transactionName","mergeAndOverwriteScopeData","prop","mergeVal","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","mergedBreadcrumbs","prepareEvent","normalizeDepth","normalizeMaxBreadth","prepared","integrations","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","isolationData","finalScopeData","evt","applyDebugMeta","normalizeEvent","environment","release","dist","maxValueLength","filenameDebugIdMap","images","debug_id","integrationNames","maxBreadth","captureException","captureEvent","setContext","setUser","isEnabled","addEventProcessor","startSession","currentScope","userAgent","currentSession","endSession","_sendSessionUpdate","captureSession","end","SENTRY_API_VERSION","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","getEnvelopeEndpointWithUrlEncodedAuth","installedIntegrations","filterDuplicates","integrationsByName","currentInstance","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","integration","resolvedUserIntegrations","finalIntegrations","debugIndex","debugInstance","setupIntegrations","integrationIndex","setupIntegration","afterSetupIntegrations","createClientReportEnvelope","discarded_events","clientReportItem","SentryError","ALREADY_SEEN_ERROR","BaseClient","undefinedOption","option","hintWithEventId","eventMessage","promisedEvent","clientFinished","transportFlushed","eventProcessor","integrationName","isAlreadyInstalled","env","sendResponse","category","eventOrCount","hook","hooks","cbIndex","callbacks","crashed","exceptions","ex","mechanism","sessionNonTerminal","ticked","tick","interval","finalEvent","isTransaction","isTransactionEvent","beforeSendLabel","dataCategory","processBeforeSend","_validateBeforeSendResult","processedEvent","spanCount","spanCountBefore","spanCountAfter","droppedSpanCount","transactionInfo","outcomes","beforeSendResult","invalidValueError","beforeSend","beforeSendTransaction","processedSpans","processedSpan","initAndBind","clientClass","setCurrentClient","makePromiseBuffer","isReady","task","taskProducer","drain","counter","capturedSetTimeout","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","headerDelay","headerDate","disabledUntil","limits","isRateLimited","updateRateLimits","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","DEFAULT_TRANSPORT_BUFFER_SIZE","makeRequest","rateLimits","flush","send","filteredEnvelopeItems","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","isSentryRequestUrl","checkDsn","checkTunnel","removeTrailingSlash","applySdkMetadata","names","getTraceData","scopeToTraceHeader","DEFAULT_BREADCRUMBS","addBreadcrumb","beforeBreadcrumb","finalBreadcrumb","originalFunctionToString","INTEGRATION_NAME","SETUP_CLIENTS","_functionToStringIntegration","originalFunction","functionToStringIntegration","DEFAULT_IGNORE_ERRORS","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","_mergeOptions","_shouldDropEvent","inboundFiltersIntegration","internalOptions","_isSentryError","_isIgnoredError","_isUselessError","_isIgnoredTransaction","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreErrors","_getPossibleEventMessages","ignoreTransactions","denyUrls","allowUrls","possibleMessages","lastException","_getLastValidUrl","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","maxValueLimit","originalException","truncateAggregateExceptions","aggregateExceptionsFromError","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","parentId","parseUrl","fragment","addConsoleInstrumentationHandler","instrumentConsole","log","severityLevelFromString","_dedupeIntegration","previousEvent","currentEvent","dedupeIntegration","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","instrumentFetchRequest","handlerData","shouldCreateSpan","shouldAttachHeaders","spanOrigin","shouldCreateSpanResult","endSpan","method","fullUrl","getFullURL","hasParent","_addTracingHeadersToFetchRequest","fetchOptionsObj","traceHeaders","isRequest","isHeaders","newHeaders","prevBaggageHeader","prevHeaderStrippedFromSentryBaggage","stripBaggageHeaderOfSentryBaggageValues","headerName","headerValue","existingBaggageHeader","newBaggageHeaders","headerItem","contentLength","contentLengthNum","getBreadcrumbLogLevelFromHttpStatusCode","supportsFetch","isNativeFunction","supportsNativeFetch","doc","sandbox","addFetchInstrumentationHandler","skipNativeFetchCheck","instrumentFetch","addFetchEndInstrumentationHandler","streamHandler","onFetchResolved","originalFetch","virtualError","parseFetchArgs","resolveResponse","onFinishedResolving","responseReader","maxFetchDurationTimeout","readingActive","chunkTimeout","clonedResponseForResolving","hasProp","getUrlFromResource","resource","fetchArgs","arg","isBrowserBundle","getSDKSource","isNodeEnv","isBrowser","isElectronNodeRenderer","supportsHistory","chromeVar","isChromePackagedApp","hasHistoryApi","_nullishCoalesce","lhs","rhsFn","_optionalChain","ops","lastAccessLHS","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","wrap","wrapper","sentryWrapped","wrappedArguments","exceptionFromError","parseStackFrames","extractType","extractMessage","eventFromPlainObject","isUnhandledRejection","errorFromProp","getErrorPropertyFromObject","getNonErrorObjectExceptionValue","eventFromError","stacktrace","skipLines","getSkipFirstStackStringLines","getPopFirstTopFrames","reactMinifiedRegexp","isWebAssemblyException","eventFromException","attachStacktrace","eventFromUnknownInput","eventFromMessage","eventFromString","domException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","createUserFeedbackEnvelope","feedback","createUserFeedbackEnvelopeItem","BrowserClient","opts","sdkSource","getRating","thresholds","bindReporter","metric","reportAllChanges","prevValue","delta","forceReport","generateUniqueID","getNavigationEntry","checkResponseStart","navigationEntry","getActivationStart","navEntry","initMetric","navigationType","observe","po","onHidden","onHiddenOrPageHide","runOnce","called","firstHiddenTime","initHiddenTime","onVisibilityUpdate","removeChangeListeners","addChangeListeners","getVisibilityWatcher","whenActivated","FCPThresholds","onFCP","onReport","visibilityWatcher","report","entry","CLSThresholds","onCLS","sessionValue","sessionEntries","handleEntries","firstSessionEntry","lastSessionEntry","FIDThresholds","onFID","handleEntry","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","getInteractionCount","initInteractionCountPolyfill","longestInteractionList","longestInteractionMap","DEFAULT_DURATION_THRESHOLD","prevInteractionCount","getInteractionCountForNavigation","estimateP98LongestInteraction","candidateInteractionIndex","MAX_INTERACTIONS_TO_CONSIDER","entryPreProcessingCallbacks","processInteractionEntry","minLongestInteraction","existingInteraction","interaction","whenIdle","rIC","INPThresholds","onINP","inp","LCPThresholds","reportedMetricIDs","onLCP","stopListening","TTFBThresholds","whenReady","onTTFB","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","addClsInstrumentationHandler","stopOnCallback","addMetricObserver","instrumentCls","addLcpInstrumentationHandler","instrumentLcp","addFidInstrumentationHandler","instrumentFid","addTtfbInstrumentationHandler","instrumentTtfb","addInpInstrumentationHandler","instrumentInp","addPerformanceInstrumentationHandler","instrumentPerformanceObserver","getCleanupCallback","previousValue","isPerformanceEventTiming","isMeasurementValue","startAndEndSpan","startTimeInSeconds","parentStartTime","startStandaloneWebVitalSpan","passedAttributes","replay","replayId","userDisplay","profileId","getBrowserPerformanceAPI","msToSec","extractNetworkProtocol","nextHopProtocol","char","trackClsAsStandaloneSpan","standaloneCLsValue","standaloneClsEntry","pageloadSpanId","supportsLayoutShift","sentSpan","_collectClsOnce","sendStandaloneClsSpan","cleanupClsHandler","unsubscribeStartNavigation","clsValue","routeName","MAX_INT_AS_BYTES","_performanceCursor","_measurements","_lcpEntry","_clsEntry","startTrackingWebVitals","recordClsStandaloneSpans","fidCleanupCallback","_trackFID","lcpCleanupCallback","_trackLCP","ttfbCleanupCallback","_trackTtfb","clsCleanupCallback","_trackCLS","startTrackingLongTasks","parentOp","parentStartTimestamp","startTrackingLongAnimationFrames","initialScript","invoker","invokerType","sourceURL","sourceFunctionName","sourceCharPosition","startTrackingInteractions","spanOptions","componentName","addPerformanceEntries","performanceEntries","transactionStartTime","_addNavigationSpans","_addMeasureSpans","firstHidden","shouldRecord","_addResourceSpans","_trackNavigator","_addTtfbRequestTimeToMeasurements","fidMark","measurementName","measurement","_setWebVitalAttributes","requestTime","measureStartTimestamp","startTimeStamp","measureEndTimestamp","_addPerformanceNavigationTiming","_addRequest","eventEnd","_getEndPropertyNameForNavigationTiming","start","requestStartTimestamp","responseEndTimestamp","responseStartTimestamp","resourceUrl","parsedUrl","setResourceEntrySizeData","deliveryType","renderBlockingStatus","navigator","dataKey","entryVal","responseStart","requestStart","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","targetObj","originalAddEventListener","handlerForType","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","globalListener","getEventTarget","lastHref","addHistoryInstrumentationHandler","instrumentHistory","oldOnPopState","historyReplacementFunction","originalHistoryFunction","cachedImplementations","getNativeImplementation","cached","impl","document","contentWindow","clearCachedImplementation","setTimeout","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","xhrOpenThisArg","xhrOpenArgArray","onreadystatechangeHandler","xhrInfo","originalOnreadystatechange","onreadystatechangeThisArg","onreadystatechangeArgArray","originalSetRequestHeader","setRequestHeaderThisArg","setRequestHeaderArgArray","originalSend","sendThisArg","sendArgArray","sentryXhrData","LAST_INTERACTIONS","INTERACTIONS_SPAN_MAP","startTrackingINP","inpCallback","_trackINP","INP_ENTRY_MAP","interactionId","interactionType","spanToUse","registerInpInteractionListener","_latestRoute","activeRootSpan","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","requestOptions","CHROME_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackParserFn","noFnParts","col","subMatch","extractSafariExtensionDetails","chromeStackLineParser","geckoREgex","geckoEvalRegex","gecko","geckoStackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","_breadcrumbsIntegration","_options","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","breadcrumbsIntegration","dom","_isEvent","status_code","parsedLoc","parsedFrom","parsedTo","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","browserApiErrorsIntegration","originalCallback","wrapOptions","isEventListenerObject","originalEventHandler","browserSessionIntegration","_globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","globalHandlersIntegration","getOptions","_enhanceEventWithInitialFrame","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ev","ev0","ev0s","ev0sf","httpContextIntegration","referrer","DEFAULT_KEY","DEFAULT_LIMIT","_linkedErrorsIntegration","linkedErrorsIntegration","getDefaultIntegrations","applyDefaultOptions","optionsArg","defaultOptions","shouldShowBrowserExtensionError","windowWithMaybeExtension","extensionKey","extensionObject","runtimeId","href","extensionProtocols","isDedicatedExtensionPage","isNWjs","REPLAY_SESSION_KEY","REPLAY_EVENT_NAME","UNABLE_TO_SEND_REPLAY","SESSION_IDLE_PAUSE_DURATION","SESSION_IDLE_EXPIRE_DURATION","DEFAULT_FLUSH_MIN_DELAY","DEFAULT_FLUSH_MAX_DELAY","BUFFER_CHECKOUT_TIME","RETRY_BASE_INTERVAL","RETRY_MAX_COUNT","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","SLOW_CLICK_THRESHOLD","SLOW_CLICK_SCROLL_TIMEOUT","REPLAY_MAX_EVENT_BUFFER_SIZE","MIN_REPLAY_DURATION","MIN_REPLAY_DURATION_LIMIT","MAX_REPLAY_DURATION","_nullishCoalesce$1","_optionalChain$5","NodeType$3","NodeType","isElement$1","isShadowRoot","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","escapeImportStatement","rule","statement","stringifyStylesheet","rules","stringifyRule","fixAllCssProperty","styles","styleDeclaration","attribute","isImportant","importStringified","isCSSImportRule","isCSSStyleRule","needsSafariColonFix","needsAllFix","fixSafariColons","cssStringified","regex","Mirror","_4","_5","childNode","oldNode","createMirror","shouldMaskInput","maskInputOptions","maskInputValue","isMasked","maskInputFn","toLowerCase","toUpperCase","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","getImageData","originalGetImageData","pixel","getInputType","getInputValue","extractFileExtension","baseURL","_6","cachedImplementations$1","getImplementation$1","setTimeout$2","clearTimeout$2","getIframeContentDocument","iframe","tagNameRegex","IGNORED_NODE","genId","getValidTagName","processedTagName","extractOrigin","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path2","path3","filePath","maybeQuote","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","pos","collectCharacters","regEx","chars","absoluteToDoc","descriptorsStr","inParens","cachedDocument","getHref","isSVGElement","customHref","transformAttribute","maskAttributeFn","ignoreAttribute","_isBlockedElement","blockClass","blockSelector","unblockSelector","eIndex","elementClassMatchesRegex","distanceToMatch","matchPredicate","distance","createMatchPredicate","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","autocomplete","maskDistance","unmaskDistance","onceIframeLoaded","iframeEl","iframeLoadTimeout","win","fired","readyState","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","mirror","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","isTextarea","_7","_8","_9","forceMask","isInputMasked","needBlock","stylesheet","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image","imageSrc","priorCrossOrigin","recordInlineImage","width","isCustomElement","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","_optionalChain$4","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle$1","wait","remaining","clearTimeout$1","setTimeout$1","hookSetter","isRevoked","patch","replacement","nowTimestamp","getWindowScroll","_10","_11","_12","_13","_14","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isSerialized","isIgnored","isAncestorRemoved","legacy_isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","_18","StyleSheetMirror","newId","getShadowHost","shadowHost","_19","_20","_21","getRootShadowHost","rootShadowHost","shadowHostInDom","inDom","getImplementation","onRequestAnimationFrame","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","PointerTypes","PointerTypes2","NodeType$1","NodeType$2","getIFrameContentDocument","getIFrameContentWindow","_optionalChain$3","isNodeInLinkedList","DoubleLinkedList","position","moveKey","MutationBuffer","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","childSn","isParentRemoved","isAncestorInSet","candidate","tailNode","_node","unhandledNode","diffAsStr","unchangedAsStr","old","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","set","_isAncestorInSet","parentNode","errorHandler","registerErrorHandler","unregisterErrorHandler","callbackWrapper","_optionalChain$2","mutationBuffers","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","initMoveObserver","mousemoveCb","sampling","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","clientX","clientY","initMouseInteractionObserver","mouseInteractionCb","disableMap","currentPointerType","getHandler","eventKey","pointerType","thisEventKey","initScrollObserver","scrollCb","scrollLeftTop","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","hasNestedCSSRule","getIdAndStyleId","sheet","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","argumentsList","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","_15","_16","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","priority","_17","removeProperty","initMediaInteractionObserver","mediaInteractionCb","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","range","startContainer","startOffset","endContainer","endOffset","initCustomElementObserver","customElementCb","constructor","initObservers","_hooks","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","customElementObserver","pluginHandlers","_22","_23","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","ids","_optionalChain$1","IframeManagerNoop","IframeManager","crossOriginMessageEvent","transformedEvent","style","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","iframeElement","iframeWindow","manager","CanvasManagerNoop","StylesheetManager","linkEl","adoptedStyleSheetData","ProcessedNodeManager","thisBuffer","wrappedEmit","_takeFullSnapshot","cleanFrame","record","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordDOM","recordCrossOriginIframes","recordAfter","collectFonts","onMutation","getCanvasManager","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","isCheckout","exceedCount","exceedTime","takeFullSnapshot","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","processedNodeManager","canvasManager","_getCanvasManager","shadowDomManager","getCanvasManagerFn","ReplayEventTypeIncrementalSnapshot","ReplayEventTypeCustom","timestampToMs","timestampToS","addBreadcrumbEvent","INTERACTIVE_SELECTOR","getClosestInteractive","getClickTargetNode","getTargetNode","isEventWithTarget","onWindowOpen","monkeyPatchWindowOpen","originalWindowOpen","IncrementalMutationSources","handleClick","clickDetector","clickBreadcrumb","ClickDetector","slowClickConfig","_addBreadcrumbEvent","cleanupWindowOpen","nowInSeconds","ignoreElement","isClickBreadcrumb","newClick","timedOutClicks","hadScroll","hadMutation","isSlowClick","clickCount","timeAfterClickMs","endReason","setTimeout$3","SLOW_CLICK_TAGS","updateClickDetectorForRecordingEvent","isIncrementalEvent","isIncrementalMouseInteraction","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","handleDomListener","handleDom","isClick","getBaseDomBreadcrumb","getDomTarget","handleKeyboardEvent","getKeyboardBreadcrumb","metaKey","shiftKey","ctrlKey","altKey","isInputElement","hasModifierKey","isCharacterKey","baseBreadcrumb","ENTRY_TYPES","createResourceEntry","createPaintEntry","createNavigationEntry","webVitalHandler","getter","createPerformanceEntries","createPerformanceEntry","entryType","getAbsoluteTime","decodedBodySize","domComplete","encodedBodySize","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","transferSize","initiatorType","responseEnd","responseStatus","getLargestContentfulPaint","lastEntry","getWebVital","isLayoutShift","getCumulativeLayoutShift","layoutShifts","nodes","nodeIds","getFirstInputDelay","getInteractionToNextPaint","attributions","rating","setupPerformanceObserver","addPerformanceEntry","onEntries","clearCallbacks","clearCallback","_addBreadcrumb","makeReplayLogger","_capture","_trace","_logger","logger$1","EventBufferSizeExceededError","EventBufferArray","eventSize","eventsRet","WorkerHandler","worker","EventBufferCompressionWorker","EventBufferProxy","hasCheckout","waitForCheckout","addEventPromises","createEventBuffer","useCompression","customWorkerUrl","_loadWorker","workerUrl","_getWorkerUrl","hasSessionStorage","clearSession","deleteSession","isSampled","started","lastActivity","segmentId","saveSession","getSessionSampleType","sessionSampleRate","allowBuffering","createSession","stickySession","fetchSession","sessionStringFromStorage","sessionObj","isExpired","initialTime","expiry","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","existingSession","isCustomEvent","addEventSync","shouldAddEvent","_addEvent","addEvent","eventBuffer","isBufferMode","replayOptions","eventAfterPossibleCallback","maybeApplyCallback","isExceeded","timestampInMs","isReplayEvent","isFeedbackEvent","handleAfterSendEvent","handleTransactionEvent","handleErrorEvent","replayContext","beforeErrorSampling","handleBeforeSendEvent","handleHydrationError","exceptionValue","handleBreadcrumbs","beforeAddBreadcrumb","isBreadcrumbWithCategory","normalizeBreadcrumb","normalizeConsoleBreadcrumb","isTruncated","normalizedArgs","normalizedArg","isRrwebError","resetReplayIdOnDynamicSamplingContext","addFeedbackBreadcrumb","shouldSampleForBufferEvent","handleGlobalEventListener","createPerformanceSpans","handleHistory","handleHistorySpanListener","shouldFilterRequest","addNetworkBreadcrumb","getBodySize","textEncoder","formDataStr","_serializeFormData","parseContentLengthHeader","getBodyString","mergeWarning","warning","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","warnings","normalizeNetworkBody","getAllowedHeaders","allowedHeaders","filteredHeaders","formData","exceedsSizeLimit","isProbablyJson","_strIsProbablyJson","truncatedBody","urlMatches","urls","getFullUrl","baseURI","fixedUrl","captureFetchBreadcrumbToReplay","_prepareFetchData","enrichFetchBreadcrumb","_getFetchRequestArgBody","reqSize","resSize","requestBodySize","responseBodySize","captureDetails","_getRequestInfo","_getResponseInfo","networkCaptureBodies","networkRequestHeaders","getRequestHeaders","requestBody","bodyStr","networkResponseHeaders","getAllHeaders","bodyText","_parseFetchResponseBody","getResponseData","_tryCloneResponse","_tryGetResponseText","allHeaders","getHeadersFromOptions","_getResponseText","txt","captureXhrBreadcrumbToReplay","_prepareXhrData","enrichXhrBreadcrumb","_getBodySize","getResponseHeaders","requestWarning","responseBody","responseWarning","_getXhrResponseBody","_parseXhrResponse","responseType","handleNetworkBreadcrumbs","networkDetailAllowUrls","networkDetailDenyUrls","beforeAddNetworkBreadcrumb","_isXhrBreadcrumb","_isXhrHint","_isFetchBreadcrumb","_isFetchHint","addGlobalListeners","feedbackEvent","addMemoryEntry","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","debounce","callbackReturnValue","timerId","maxTimerId","maxWait","invokeFunc","cancelTimers","debounced","NAVIGATOR","getRecordingSamplingOptions","getHandleRecordingEmit","hadFirstEvent","_isCheckout","addSettingsEvent","earliestEvent","createOptionsEvent","createReplayEnvelope","replayEvent","recordingData","prepareRecordingData","payloadWithSequence","replayHeaders","sequence","prepareReplayEvent","eventHint","preparedEvent","sendReplayRequest","segment_id","eventContext","preparedRecordingData","errorIds","traceIds","initialTimestamp","TransportStatusCodeError","RateLimitError","sendReplay","replayData","retryConfig","THROTTLED","SKIPPED","throttle","maxCount","durationSeconds","_cleanup","_getTotalCount","isThrottled","wasThrottled","ReplayContainer","recordingOptions","slowClickTimeout","slowClickIgnoreSelectors","experiments","errorSampleRate","requiresManualStart","canvasOptions","forceFlush","continueRecording","activityTime","hasStoppedRecording","cbResult","urlPath","lastActiveSpan","lastRootSpan","_lastActivity","initialTimestampInSeconds","_context","dropReason","force","tooShort","tooLong","_flushInProgress","mutationLimit","mutationBreadcrumbLimit","overMutationLimit","getOption","defaultSelectors","getPrivacyOptions","mask","unmask","block","unblock","ignore","defaultBlockedElements","maskSelector","unmaskSelector","maskAttribute","maskAttributes","privacyOptions","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","replayIntegration","Replay","flushMinDelay","flushMaxDelay","minReplayDuration","_experiments","blockAllMedia","maskFn","beforeAddRecordingEvent","_getMergedNetworkHeaders","finalOptions","loadReplayOptionsFromClient","canvasIntegration","initialOptions","opt","replaysSessionSampleRate","replaysOnErrorSampleRate","responseToSpanId","spanIdToEndTimestamp","defaultRequestInstrumentationOptions","instrumentOutgoingRequests","traceFetch","traceXHR","trackFetchStreamPerformance","shouldCreateSpanForRequest","enableHTTPTimings","tracePropagationTargets","shouldAttachHeadersWithTargets","updatedTimestamp","createdSpan","addHTTPTimings","xhrCallback","isPerformanceResourceTiming","resourceTimingEntryToSpanData","resourceTiming","timingSpanData","targetUrl","resolvedUrl","currentOrigin","isSameOriginRequest","isRelativeSameOriginRequest","addTracingHeadersToXhrRequest","setHeaderOnXhr","sentryTraceHeader","sentryBaggageHeader","registerBackgroundTabDetection","cancelledStatus","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","browserTracingIntegration","enableInp","enableLongTask","enableLongAnimationFrame","enableInteractions","enableStandaloneClsSpans","beforeStartSpan","markBackgroundSpan","instrumentPageLoad","instrumentNavigation","_collectWebVitals","latestRoute","_createRouteSpan","isPageloadTransaction","finalStartSpanOptions","idleSpan","emitFinish","startingUrl","maybeEndActiveSpan","traceOptions","getMetaContent","oldPropagationContext","startBrowserTracingPageLoadSpan","startBrowserTracingNavigationSpan","registerInteractionListener","metaName","metaTag","inflightInteractionSpan","registerInteractionTransaction","currentRootSpanOp","init$1","exports","schedulerModule","aa","ca","require$$1","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","ob","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","oc","nc","pc","qc","rc","sc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","jd","kd","ld","md","nd","od","pd","qd","rd","sd","td","ud","vd","wd","xd","yd","Ad","zd","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","de","ee","fe","ge","he","ie","je","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","sf","tf","uf","wf","na","xa","$a","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","gi","hi","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Vk","Wk","Xk","Yk","Zk","$k","al","bl","cl","dl","fl","gl","hl","il","jl","kl","ll","ml","nl","ol","pl","ql","rl","sl","tl","ul","vl","reactDom_production_min","checkDCE","reactDomModule","Subscribable","isServer","functionalUpdate","updater","isValidTimeout","timeUntilStale","updatedAt","staleTime","parseQueryArgs","arg1","arg2","arg3","isQueryKey","parseMutationArgs","parseFilterArgs","matchQuery","filters","exact","fetchStatus","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","fetching","mutationKey","hashQueryKey","partialDeepEqual","replaceEqualDeep","isPlainArray","aSize","bItems","bSize","copy","equalItems","shallowEqualObjects","hasObjectPrototype","ctor","prot","sleep","scheduleMicrotask","getAbortController","replaceData","prevData","FocusManager","onFocus","_this$cleanup","_this$cleanup2","focused","focusManager","onlineEvents","OnlineManager","onOnline","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","isCancelledError","createRetryer","isRetryCancelled","isResolved","continueFn","promiseResolve","promiseReject","outerResolve","outerReject","cancel","cancelOptions","cancelRetry","continueRetry","shouldPause","pause","continueResolve","canContinue","run","promiseOrValue","_config$retry","_config$retryDelay","retryDelay","shouldRetry","defaultLogger","createNotifyManager","transactions","notifyFn","batchNotifyFn","schedule","batchCalls","originalQueue","notifyManager","Removable","newCacheTime","Query","getDefaultState","setStateOptions","_this$retryer","_this$retryer2","_this$retryer3","fetchOptions","_this$options$behavio","_context$fetchOptions","_this$retryer4","abortController","queryFnContext","addSignalProperty","fetchFn","_context$fetchOptions2","_this$cache$config$on","_this$cache$config","_this$cache$config$on2","_this$cache$config2","_this$cache$config$on3","_this$cache$config3","_this$cache$config$on4","_this$cache$config4","reducer","_action$meta","_action$dataUpdatedAt","hasData","initialDataUpdatedAt","QueryCache","_options$queryHash","queryHash","queryInMap","Mutation","_this$retryer$continu","executeMutation","_this$options$retry","restored","_this$mutationCache$c3","_this$mutationCache$c4","_this$options$onSucce","_this$options2","_this$mutationCache$c5","_this$mutationCache$c6","_this$options$onSettl","_this$options3","_this$mutationCache$c","_this$mutationCache$c2","_this$options$onMutat","_this$options","_this$mutationCache$c7","_this$mutationCache$c8","_this$options$onError","_this$options4","_this$mutationCache$c9","_this$mutationCache$c10","_this$options$onSettl2","_this$options5","MutationCache","_this$resuming","pausedMutations","infiniteQueryBehavior","_context$fetchOptions3","_context$fetchOptions4","_context$state$data","_context$state$data2","refetchPage","fetchMore","pageParam","isFetchingNextPage","isFetchingPreviousPage","oldPages","oldPageParams","newPageParams","cancelled","_context$signal","_context$signal2","queryFn","buildNewPages","pages","page","fetchPage","manual","queryFnResult","getNextPageParam","getPreviousPageParam","QueryClient","_this$unsubscribeFocu","_this$unsubscribeOnli","_this$queryCache$find","parsedOptions","cachedData","queryKeyOrFilters","defaultedOptions","_this$queryCache$find2","queryCache","refetchFilters","_ref","_filters$refetchType","_options$cancelRefetc","firstMatchingDefaults","QueryObserver","shouldFetchOnMount","shouldFetchOn","notifyOptions","prevOptions","prevQuery","mounted","shouldFetchOptionally","nextRefetchInterval","shouldAssignObserverCurrentProperties","trackedResult","_fetchOptions$cancelR","_this$options$refetch","nextInterval","prevResult","prevResultState","prevResultOptions","queryChange","queryInitialState","prevQueryResult","dataUpdatedAt","errorUpdatedAt","isPreviousData","isPlaceholderData","fetchOnMount","fetchOptionally","selectError","placeholderData","isFetching","isLoading","isStale","nextResult","defaultNotifyOptions","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","shouldLoadOnMount","field","optimisticResult","_this$currentMutation","_this$currentMutation2","variables","_this$mutateOptions$o","_this$mutateOptions","_this$mutateOptions$o2","_this$mutateOptions2","_this$mutateOptions$o3","_this$mutateOptions3","_this$mutateOptions$o4","_this$mutateOptions4","React","is","objectIs","useState","useEffect","useLayoutEffect","useDebugValue","useSyncExternalStore$2","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","shimModule","useSyncExternalStore","defaultContext","React.createContext","QueryClientSharingContext","getQueryClientContext","contextSharing","useQueryClient","queryClient","React.useContext","QueryClientProvider","children","React.useEffect","React.createElement","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","shouldThrowError","_useErrorBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","useErrorBoundary","ensureStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","React.useState","React.useCallback","onStoreChange","unsubscribe","useQuery","useMutation","MutationObserver","mutate","mutateOptions","AWS_CLOUDWATCH_CATEGORY","NO_HUBCALLBACK_PROVIDED_EXCEPTION","LogType","LOG_LEVELS","ConsoleLogger","dt","loggerLevelName","loggerLevel","pluggable","AmplifyError","recoverySuggestion","underlyingError","extendedRequestId","httpStatusCode","requestId","AmplifyErrorCode","createAssertionFunction","errorMap","AssertionError","assertion","additionalContext","AMPLIFY_SYMBOL","HubClass","channel","holder","ampSymbol","capsule","listenerName","Hub","getAtob","base64Decoder","inputStr","AuthConfigurationErrorCode","authConfigurationErrorMap","assert","assertTokenProviderConfig","cognitoConfig","assertionValid","assertIdentityPoolIdConfig","validConfig","decodeJWT","token","tokenParts","base64","jsonStr","isNonRetryableError","functionToRetry","delayFn","onTerminate","attempt","terminated","wakeUp","lastError","retryIn","_resolve","deepFreeze","propNames","authTypeMapping","parseAWSExports","aws_appsync_apiKey","aws_appsync_authenticationType","aws_appsync_graphqlEndpoint","aws_appsync_region","aws_bots_config","aws_cognito_identity_pool_id","aws_cognito_sign_up_verification_method","aws_cognito_mfa_configuration","aws_cognito_mfa_types","aws_cognito_password_protection_settings","aws_cognito_verification_mechanisms","aws_cognito_signup_attributes","aws_cognito_social_providers","aws_cognito_username_attributes","aws_mandatory_sign_in","aws_mobile_analytics_app_id","aws_mobile_analytics_app_region","aws_user_files_s3_bucket","aws_user_files_s3_bucket_region","aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing","aws_user_pools_id","aws_user_pools_web_client_id","geo","oauth","predictions","aws_cloud_logic_custom","Notifications","modelIntrospection","amplifyConfig","InAppMessaging","Push","appId","region","bot","defaultAuthMode","mfaConfig","passwordFormatConfig","userAttributes","loginWithEmailEnabled","loginWithPhoneEnabled","hasOAuthConfig","hasSocialProviderConfig","getOAuthConfig","parseSocialProviders","amazon_location_service","api","service","voiceId","getRedirectUrl","redirectStr","redirectSignIn","redirectSignOut","provider","updatedProvider","ADD_OAUTH_LISTENER","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","randomUUID","native","v4","rnds","isAmplifyOutputs","parseStorage","amplifyOutputsStorageProperties","bucket_name","aws_region","buckets","createBucketInfoMap","parseAuth","amplifyOutputsAuthProperties","user_pool_id","user_pool_client_id","identity_pool_id","password_policy","mfa_configuration","mfa_methods","unauthenticated_identities_enabled","username_attributes","standard_required_attributes","groups","authConfig","getMfaStatus","getOAuthProviders","parseAnalytics","amplifyOutputsAnalyticsProperties","amazon_pinpoint","parseGeo","geofence_collections","maps","search_indices","parseData","amplifyOutputsDataProperties","default_authorization_type","api_key","model_introspection","getGraphQLAuthMode","parseCustom","amplifyOutputsCustomProperties","parseNotifications","amplifyOutputsNotificationsProperties","channels","amazon_pinpoint_app_id","hasInAppMessaging","hasPushNotification","notificationsConfig","parseAmplifyOutputs","amplifyOutputs","resourcesConfig","customConfig","authModeNames","authType","providerNames","providers","oAuthProviders","mfaConfiguration","mappedBuckets","bucketName","sanitizedPaths","parseAmplifyConfig","BLOCK_SIZE","DIGEST_LENGTH","KEY","INIT","MAX_HASHABLE_LENGTH","RawSha256","byteLength","bitsHashed","bufferView","undecoratedLength","state0","state1","state2","state3","state4","state5","state6","state7","t1_1","t2_1","t1","t2","fromUtf8","toUint8Array","toUtf8","fromUtf8Browser","convertToBuffer","isEmptyData","uint32ArrayFrom","a_lookUpTable","return_array","a_index","Sha256","secret","toHash","bufferFromSecret","outer","bufferHash","encodedByte","Framework","Category","AiAction","AnalyticsAction","ApiAction","AuthAction","DataStoreAction","GeoAction","InAppMessagingAction","InteractionsAction","PredictionsAction","PubSubAction","PushNotificationAction","StorageAction","globalExists","windowExists","documentExists","processExists","keyPrefixMatch","reactWebDetect","elementKeyPrefixedWithReact","elementIsReactEnabled","allElementsWithId","reactSSRDetect","define_process_env_default","vueWebDetect","vueSSRDetect","svelteWebDetect","svelteSSRDetect","nextWebDetect","nextSSRDetect","nuxtWebDetect","nuxtSSRDetect","angularWebDetect","angularVersionSetInDocument","angularContentSetInWindow","angularSSRDetect","reactNativeDetect","expoDetect","webDetect","detectionMap","detect","detectionEntry","frameworkCache","frameworkChangeObservers","resetTriggered","SSR_RESET_TIMEOUT","WEB_RESET_TIMEOUT","PRIME_FRAMEWORK_DELAY","detectFramework","fcn","resetTimeout","observeFrameworkChanges","clearCache","framework","customUserAgentState","getCustomUserAgent","BASE_USER_AGENT","sanitizeAmplifyVersion","amplifyVersion","getAmplifyUserAgentObject","customState","getAmplifyUserAgent","customUserAgentDetails","agentKey","agentValue","AuthClass","authResourcesConfig","authOptions","credentialsAndIdentityId","userSub","tokens","AmplifyClass","libraryOptions","resolvedResourceConfig","Amplify","fetchAuthSession","amplify","fetchAuthSession$1","parseMetadata","isMetadataBearer","parseJsonError","parseJsonBody","rawValue","cleanValue","composeServiceApi","transferHandler","serializer","deserializer","resolvedConfig","defaultPartition","partitionsInfo","getDnsSuffix","partitions","regions","outputs","regionRegex","DEFAULT_RETRY_ATTEMPTS","AMZ_SDK_INVOCATION_ID_HEADER","AMZ_SDK_REQUEST_HEADER","DEFAULT_MAX_DELAY_MS","retryMiddlewareFactory","maxAttempts","retryDecider","computeDelay","abortSignal","attemptsCount","handleTerminalErrorOrResponse","addOrIncrementMetadataAttempts","isCredentialsExpiredError","retryable","cancellableSleep","timeoutMs","sleepPromiseResolveFn","sleepPromise","cancelSleep","nextHandlerOutput","attempts","amplifyUuid","amzSdkInvocationIdHeaderMiddlewareFactory","amzSdkRequestHeaderMiddlewareFactory","userAgentMiddlewareFactory","userAgentHeader","userAgentValue","composeTransferHandler","coreHandler","middleware","composedHandler","composeHandlerRequest","withMemoization","payloadAccessor","shouldSendBody","fetchTransferHandler","withCrossDomainCredentials","resp","responseHeaders","httpResponse","bodyWithMixin","unauthenticatedHandler","MAX_DELAY_MS","jitteredBackoff","maxDelayMs","jitteredBackoff$1","CLOCK_SKEW_ERROR_CODES","isClockSkewError","errorCode","getRetryDecider","errorParser","parsedError","isConnectionError","isThrottlingError","isServerSideError","THROTTLING_ERROR_CODES","TIMEOUT_ERROR_CODES","AmplifyUrl","SERVICE_NAME","endpointResolver","disableCacheMiddlewareFactory","cognitoIdentityTransferHandler","getSharedHeaders","buildHttpRpcRequest","getIdSerializer","getIdDeserializer","getId","getCredentialsForIdentitySerializer","getCredentialsForIdentityDeserializer","deserializeCredentials","AccessKeyId","SecretKey","SessionToken","Expiration","getCredentialsForIdentity","PlatformNotSupportedError","KeyValueStorage","InMemoryStorage","getLocalStorageWithFallback","getSessionStorageWithFallback","DefaultStorage","SyncKeyValueStorage","SyncSessionStorage","assign","defaultConverter","converter","defaultAttributes","stringifiedAttributes","get","jar","found","sameSite","secure","JsCookie","defaultStorage","jitteredExponentialRetry","deDupeAsyncFunction","asyncFunction","inflightPromise","isTokenExpired","expiresAt","clockDrift","tolerance","AuthError","getRegionFromUserPoolId","userPoolId","getRegionFromIdentityPoolId","identityPoolId","USER_UNAUTHENTICATED_EXCEPTION","INVALID_REDIRECT_EXCEPTION","INVALID_APP_SCHEME_EXCEPTION","INVALID_PREFERRED_REDIRECT_EXCEPTION","INVALID_ORIGIN_EXCEPTION","TOKEN_REFRESH_EXCEPTION","assertIdTokenInAuthTokens","oAuthTokenRefreshException","tokenRefreshException","assertAuthTokensWithRefreshToken","isAuthenticatedWithImplicitOauthFlow","isAuthenticatedWithRefreshToken","OAuthStorageKeys","isAuthenticated","createUserPoolSerializer","assertServiceError","createUserPoolDeserializer","cognitoUserPoolTransferHandler","COGNITO_IDP_SERVICE_NAME","DEFAULT_SERVICE_CLIENT_API_CONFIG","createInitiateAuthClient","cognitoUserPoolEndpointResolver","createCognitoUserPoolEndpointResolver","endpointOverride","getUserContextData","username","userPoolClientId","amazonCognitoAdvancedSecurityData","advancedSecurityData","refreshAuthTokensFunction","userPoolEndpoint","refreshTokenString","AuthParameters","UserContextData","initiateAuth","AuthenticationResult","accessToken","idToken","iat","refreshAuthTokens","AuthTokenStorageKeys","TokenProviderErrorCode","tokenValidationErrorMap","AUTH_KEY_PREFIX","DefaultTokenStore","keyValueStorage","authKeys","accessTokenString","itString","refreshToken","clockDriftString","signInDetails","lastAuthUser","deviceKey","deviceGroupKey","randomPassword","createKeysForAuthStorage","identifier","oauthMetadataKey","oauthMetadata","getAuthStorageKeys","authKey","V5_HOSTED_UI_KEY","DefaultOAuthStore","pkce","authConfigParam","inflight","isLegacyHostedUISignIn","isOAuthSignIn","preferPrivateSession","oauthSignIn","oAuthStore","TokenOrchestrator","_reject","tokenRefresher","tokenStore","idTokenExpired","accessTokenExpired","newTokens","CognitoUserPoolsTokenProvider","forceRefresh","cognitoUserPoolsTokenProvider","tokenOrchestrator","IdentityIdStorageKeys","DefaultIdentityIdStore","storedIdentityId","formLoginsMap","issuer","domainName","cognitoIdentityIdProvider","identityIdStore","identityId","logins","generatedIdentityId","generateIdentityId","idResult","CREDENTIALS_TTL","CognitoAWSCredentialsAndIdentityIdProvider","getCredentialsOptions","tokenHasChanged","clientResult","authTokens","cognitoCredentialsProvider","DefaultAmplify","resourceConfig","voidElements","warn","i18n","alreadyWarned","warnOnce","loadedClb","initialized","loadNamespaces","loadLanguages","lng","hasLoadedNamespace","i18nInstance","loadNotPending","isObject","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","unescape","setDefaults","getDefaults","setI18n","getI18n","hasChildren","checkLength","getChildren","getAsArray","hasValidReactChildren","isValidElement","mergeProps","newTarget","nodesToString","i18nOptions","i18nKey","stringNode","childrenArray","keepArray","childIndex","props","childPropsCount","shouldKeepChild","childChildren","content","format","clone","renderNodes","targetString","combinedTOpts","shouldUnescape","emptyChildrenButNeedsHandling","keep","getData","childs","ast","HTML","renderInner","rootReactNode","mappedChildren","mapAST","pushTranslatedJSX","mem","isVoid","cloneElement","Children","createElement","reactNode","astNode","reactNodes","translationContent","tmp","isValidTranslationWithChildren","isEmptyTransWithHTML","isKnownComponent","wrapTextNodes","fixComponentProps","translation","componentKey","comp","Componentized","Fragment","generateArrayComponents","generateObjectComponents","componentMap","generateComponents","Trans","tOptions","defaults","i18nFromProps","tFromProps","additionalProps","reactI18nextOptions","nodeAsString","hashTransKey","interpolationOverride","generatedComponents","useAsParent","initReactI18next","I18nContext","createContext","ReportNamespaces","i18nFromContext","defaultNSFromContext","useContext","TransWithoutContext","usePrevious","ref","useRef","alwaysNewT","language","namespace","keyPrefix","useMemoizedT","useCallback","useTranslation","notReadyT","optsOrDefaultValue","retNotReady","useSuspense","ready","memoGetT","getT","getNewT","setT","joinedNS","previousJoinedNS","isMounted","bindI18n","bindI18nStore","boundReset","ret","I18nextProvider","defaultNS","useMemo","_extends","PopStateEventType","createBrowserHistory","createBrowserLocation","window","globalHistory","pathname","search","hash","createLocation","createBrowserHref","createPath","getUrlBasedHistory","invariant","cond","createKey","getHistoryState","location","parsePath","parsedPath","hashIndex","searchIndex","getLocation","createHref","validateLocation","v5Compat","getIndex","handlePop","nextIndex","history","push","historyState","createURL","ResultType","matchRoutes","routes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","rankRouteBranches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","joinPaths","routesMeta","computeScore","_route$path","exploded","explodeOptionalSegments","segments","isOptional","required","restExploded","subpath","compareIndexes","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","score","segment","branch","matchedParams","matchedPathname","remainingPathname","matchPath","normalizePathname","matcher","compiledParams","compilePath","pathnameBase","captureGroups","paramName","splatValue","caseSensitive","regexpSource","startIndex","nextChar","resolvePath","fromPathname","toPathname","resolvePathname","normalizeSearch","normalizeHash","getInvalidPathError","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","idx","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","routePathnameIndex","toSegments","hasExplicitTrailingSlash","hasCurrentTrailingSlash","isRouteErrorResponse","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","RouteErrorContext","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","React.useLayoutEffect","useNavigate","isDataRoute","useNavigateStable","useNavigateUnstable","dataRouterContext","future","routePathnamesJson","UNSAFE_getResolveToMatches","activeRef","React.useRef","useRoutes","useRoutesImpl","dataRouterState","isStatic","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","DefaultErrorComponent","useRouteError","preStyles","React.Fragment","defaultErrorElement","RenderErrorBoundary","React.Component","errorInfo","RenderedRoute","routeContext","_dataRouterState","_future","errorIndex","renderFallback","fallbackIndex","loaderData","needsToRunLoader","outlet","shouldRenderHydrateFallback","errorElement","hydrateFallbackElement","warningOnce","DataRouterHook","DataRouterStateHook","useDataRouterContext","hookName","useDataRouterState","useRouteContext","useCurrentRouteId","thisRoute","_state$errors","routeId","router","alreadyWarned$1","logV6DeprecationWarnings","renderFuture","routerFuture","Navigate","_ref4","relative","jsonPath","Route","_props","Router","_ref5","basenameProp","locationProp","staticProp","navigationContext","React.useMemo","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","React.Children","React.isValidElement","treePath","REACT_ROUTER_VERSION","START_TRANSITION","startTransitionImpl","BrowserRouter","historyRef","setStateImpl","v7_startTransition","setState","newState","UNSAFE_logV6DeprecationWarnings","clsx","$","module","useTelegram","isSelfAtom","atom","hasInitialValue","isActuallyWritableAtom","isAtomStateInitialized","atomState","returnAtomValue","__vite_import_meta_env__","promiseStateMap","isPendingPromise","isPromiseLike","abortPromise","promiseState","registerAbortHandler","abortHandler","addPendingPromiseToDependency","dependencyAtomState","setAtomStateValueOrPromise","valueOrPromise","ensureAtomState","hasPrevValue","getMountedOrPendingDependents","mountedMap","dependents","atomWithPendingPromise","createStoreHook","notify","createStoreHookForAtoms","all","initializeStoreHooks","storeHooks","BUILDING_BLOCKS","buildStore","atomStateMap","invalidatedAtoms","changedAtoms","mountCallbacks","unmountCallbacks","atomRead","atomWrite","atomOnInit","store","atomOnMount","setAtom","buildingBlockFunctions","flushCallbacks","call","recomputeInvalidatedAtoms","topSortedReversed","visiting","visited","aState","hasChangedDeps","dep","readAtomState","mountDependencies","isSync","mountDependenciesIfAsync","_a2","aState2","setSelf","writeAtomState","prevEpochNumber","invalidateDependents","dState","setter","args2","mountAtom","aMounted","unmountAtom","processOnMount","onUnmount","buildingBlocks","listeners","INTERNAL_buildStoreRev1","INTERNAL_initializeStoreHooks","INTERNAL_registerAbortHandler","keyCount","read","write","defaultRead","defaultWrite","createDevStoreRev4","inRestoreAtom","mountedAtoms","debugMountedAtoms","restoreAtom","_get","createStore","defaultStore","getDefaultStore","StoreContext","useStore","attachPromiseMeta","use","ReactExports","continuablePromiseMap","createContinuablePromise","getValue","continuablePromise","onFulfilled","onRejected","onAbort","useAtomValue","valueFromReducer","storeFromReducer","atomFromReducer","rerender","useReducer","unsub","useSetAtom","useAtom","bind","toString","getPrototypeOf","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isBuffer","isArrayBuffer","isArrayBufferView","isNumber","isBoolean","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isResponse","trim","forEach","allOwnKeys","findKey","_global","isContextDefined","caseless","assignValue","targetKey","extend","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","endsWith","searchString","lastIndex","toArray","isTypedArray","TypedArray","forEachEntry","pair","matchAll","regExp","isHTMLForm","toCamelCase","p1","p2","hasOwnProperty","reduceDescriptors","reducedDescriptors","descriptor","freezeMethods","toObjectSet","arrayOrString","define","toFiniteNumber","isSpecCompliantForm","toJSONObject","reducedValue","isAsyncFn","_setImmediate","setImmediateSupported","postMessageSupported","asap","utils$1","AxiosError","utils","customProps","axiosError","httpAdapter","isVisitable","removeBrackets","renderKey","dots","isFlatArray","predicates","toFormData","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","exposedHelpers","build","encode","charMap","AxiosURLSearchParams","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","transitionalDefaults","URLSearchParams$1","FormData$1","Blob$1","platform$1","URLSearchParams","FormData","Blob","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","platform","toURLEncodedForm","helpers","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","stringifySafely","contentType","hasJSONContentType","isObjectPayload","_FormData","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","ignoreDuplicateOf","parseHeaders","rawHeaders","parsed","$internals","normalizeHeader","normalizeValue","parseTokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","buildAccessors","accessorName","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","deleted","deleteHeader","targets","asStrings","computed","accessors","defineAccessor","AxiosHeaders","mapped","transformData","isCancel","CanceledError","validateStatus","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","startedAt","bytesCount","passed","freq","lastArgs","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","loaded","total","progressBytes","inRange","progressEventDecorator","throttled","lengthComputable","asyncDecorator","isURLSameOrigin","isMSIE","isAbsoluteURL","combineURLs","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","configValue","resolveConfig","newConfig","withXSRFToken","xsrfHeaderName","xsrfCookieName","auth","xsrfValue","isXHRAdapterSupported","xhrAdapter","_config","requestData","requestHeaders","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","onloadend","timeoutErrorMessage","composeSignals","signals","length","aborted","onabort","streamChunk","readBytes","readStream","stream","trackStream","onProgress","onFinish","_onFinish","loadedBytes","isFetchSupported","isReadableStreamSupported","encodeText","test","supportsRequestStream","duplexAccessed","hasContentType","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","getBodyLength","resolveBodyLength","fetchAdapter","cancelToken","withCredentials","composedSignal","requestContentLength","_request","contentTypeHeader","isCredentialsSupported","isStreamResponse","responseContentLength","responseData","knownAdapters","renderReason","isResolvedHandle","adapter","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","dispatchRequest","validators","deprecatedWarnings","validator","formatMessage","desc","correctSpelling","assertOptions","schema","allowUnknown","Axios$1","instanceConfig","configOrUrl","dummy","paramsSerializer","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","fullPath","Axios","generateHTTPMethod","isForm","CancelToken$1","CancelToken","resolvePromise","abort","spread","isAxiosError","HttpStatusCode","axios","Cancel","formToJSON","getAdapter","API_URL","URL","BEARER_TOKEN","onSuccess","SearchService","user_id","view","search_id","to_id","button","profileAtom","communityAtom","communityPositionAtom","friendsAtom","inboxAtom","startParamAtom","useSearch","setCommunity","setFriends","setInbox","searchData","isIdle","isSuccess","paramsArray","results","searchResult","card","prevState","cachedCard","feedbackData","AuthService","useProfile","isInitProfile","useAmplitude","setProfile","initData","isInitProfileLoading","refetchInitProfile","isInitProfileSuccess","isInitProfileError","errorInitProfile","welcome","prefill","uploadProfileData","uploadProfile","isUploadProfileSuccess","isUploadProfileLoading","isUploadProfileError","errorUploadProfile","prevProfile","deleteProfile","cancelPremium","isCancelPremiumSuccess","isCancelPremiumLoading","uploadMedia","isUploadMediaSuccess","isUploadMediaLoading","errorUploadMedia","isUploadMediaError","uploadMediaData","uploadDescription","isUploadDescriptionSuccess","isUploadDescriptionLoading","isUploadDescriptionError","startTimeRef","ButtonLayout","jsx","MenuItem","iconName","jsxs","Icon","Typography","cn","menuItems","BottomMenu","MainLayout","startParam","setStartParam","pageParams","redirectPage","ProgressBar","Button","variant","disabled","loading","compact","buttonClasses","textClasses","loaderClasses","getButtonText","WelcomeScreen","EmptyState","getTitle","getDescription","onClick","SkeletonThemeContext","defaultEnableAnimation","styleOptionsToCssProperties","baseColor","highlightColor","borderRadius","circle","direction","enableAnimation","customHighlightBackground","Skeleton","Wrapper","customClassName","containerClassName","containerTestId","styleProp","originalPropsStyleOptions","contextStyleOptions","propsStyleOptions","styleOptions","inline","countCeil","thisStyle","fractionalPart","fractionalWidth","skeletonSpan","SkeletonUI","LayoutGroupContext","useConstant","PresenceContext","MotionConfigContext","PopChildMeasure","prevProps","PopChild","isPresent","useId","nonce","useInsertionEffect","top","left","React.cloneElement","PresenceChild","initial","onExitComplete","custom","presenceAffectsLayout","mode","presenceChildren","newChildrenMap","memoizedOnExitComplete","childId","usePresence","register","safeToRemove","getChildKey","onlyElements","filtered","AnimatePresence","propagate","isParentPresent","presentChildren","presentKeys","isInitialRender","pendingPresentChildren","exitComplete","diffedChildren","setDiffedChildren","renderedChildren","setRenderedChildren","exitingChildren","nextChildren","forceRender","onExit","isEveryExitComplete","isExitComplete","any","progress","toFromDifference","secondsToMilliseconds","seconds","millisecondsToSeconds","milliseconds","MotionGlobalConfig","createRenderStep","runNextFrame","thisFrame","nextFrame","isProcessing","flushNextFrame","toKeepAlive","latestFrameData","triggerCallback","keepAlive","immediate","frameData","stepsOrder","maxElapsed","createRenderBatcher","scheduleNextBatch","allowKeepAlive","useDefaultElapsed","flagRunNextFrame","steps","resolveKeyframes","update","preRender","render","postRender","processBatch","wake","cancelFrame","frameSteps","LazyContext","featureProps","featureDefinitions","loadFeatures","features","validMotionProps","isValidMotionProp","shouldForward","loadExternalIsValidProp","isValidProp","filterProps","isDom","forwardMotionProps","filteredProps","createDOMMotionComponentProxy","componentFactory","componentCache","deprecatedFactoryFunction","_target","MotionContext","isVariantLabel","isAnimationControls","variantPriorityOrder","variantProps","isControllingVariants","isVariantNode","getCurrentTreeVariants","animate","useCreateMotionContext","variantLabelsAsDependency","motionComponentSymbol","isRefObject","useMotionRef","visualState","visualElement","externalRef","camelToDash","optimizedAppearDataId","optimizedAppearDataAttribute","microtask","SwitchLayoutGroupContext","useVisualElement","Component","createVisualElement","ProjectionNodeConstructor","lazyContext","presenceContext","reducedMotionConfig","visualElementRef","initialLayoutGroupConfig","createProjectionNode","optimisedAppearId","wantsHandoff","initialPromotionConfig","layoutId","layout","drag","dragConstraints","layoutScroll","layoutRoot","getClosestProjectingNode","createRendererMotionComponent","preloadedFeatures","useRender","useVisualState","MotionComponent","MeasureLayout","configAndProps","useLayoutId","useStrictMode","layoutProjection","getProjectionFunctionality","ForwardRefMotionComponent","forwardRef","layoutGroupId","combined","lowercaseSVGElements","isSVGComponent","getValueState","resolveVariantFromProps","definition","velocity","isKeyframesTarget","isCustomValue","resolveFinalValueInKeyframes","isMotionValue","resolveMotionValue","unwrappedValue","makeState","scrapeMotionValuesFromProps","createRenderState","onUpdate","makeLatestValues","makeUseVisualState","make","scrapeMotionValues","motionValues","isControllingVariants$1","isVariantNode$1","isInitialAnimationBlocked","variantToSet","resolved","transitionEnd","transition","valueTarget","transformPropOrder","transformProps","checkStringStartsWith","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","getValueAsType","clamp","number","alpha","scale","createUnitType","degrees","percent","px","vw","progressPercentage","browserNumberValueTypes","transformValueTypes","int","numberValueTypes","translateAlias","numTransforms","buildTransform","latestValues","transform","transformTemplate","transformString","transformIsDefault","valueIsDefault","valueAsType","transformName","buildHTMLStyles","vars","transformOrigin","hasTransform","hasTransformOrigin","originX","originY","originZ","dashKeys","camelKeys","buildSVGPath","attrs","spacing","useDashCase","pathLength","pathSpacing","calcOrigin","calcSVGTransformOrigin","dimensions","pxOriginX","pxOriginY","buildSVGAttrs","attrX","attrY","attrScale","pathOffset","latest","isSVGTag","createHtmlRenderState","createSvgRenderState","renderHTML","projection","camelCaseAttributes","renderSVG","renderState","_styleProp","scaleCorrectors","addScaleCorrector","correctors","isForcedMotionValue","newValues","scrapeMotionValuesFromProps$1","updateSVGDimensions","layoutProps","svgMotionConfig","needsMeasure","htmlMotionConfig","copyRawValuesOnly","useInitialMotionValues","useStyle","useHTMLProps","htmlProps","useSVGProps","_isStatic","visualProps","rawStyles","createUseRender","elementProps","createMotionComponentFactory","shallowCompare","prevLength","resolveVariant","supportsScrollTimeline","BaseGroupPlaybackControls","animations","animation","propName","timeline","fallback","speed","controls","GroupPlaybackControls","onResolve","onReject","getValueTransition","maxGeneratorDuration","calcGeneratorDuration","timeStep","isGenerator","attachTimeline","isBezierDefinition","easing","supportsFlags","memoSupports","supportsFlag","memoized","supportsLinearEasing","generateLinearEasing","resolution","points","numPoints","isWaapiSupportedEasing","supportedWaapiEasing","cubicBezierAsString","mapEasingToNativeEasing","segmentEasing","isDragging","isDragActive","resolveElements","elementOrSelector","selectorCache","root","setupGesture","gestureAbortController","filterEvents","hover","onHoverStart","onPointerEnter","enterEvent","onHoverEnd","onPointerLeave","leaveEvent","isNodeOrChild","isPrimaryPointer","focusableElements","isElementKeyboardAccessible","isPressing","firePointerEvent","enableKeyboardPress","focusEvent","handleKeydown","handleKeyup","handleBlur","isValidPressEvent","press","onPressStart","cancelEvents","startPress","startEvent","onPressEnd","onPointerEnd","endEvent","onPointerUp","onPointerCancel","upEvent","cancelEvent","setDragLock","axis","positionalKeys","clearTime","newTime","addUniqueItem","removeItem","SubscriptionManager","numSubscriptions","velocityPerSecond","frameDuration","MAX_VELOCITY_DELTA","isFloat","MotionValue","prevFrameValue","eventManagers","passiveEffect","stopPassiveEffect","endAnimation","startAnimation","motionValue","setMotionValue","setTarget","isWillChangeMotionValue","addValueToWillChange","willChange","getOptimisedAppearId","calcBezier","a1","a2","subdivisionPrecision","subdivisionMaxIterations","binarySubdivide","lowerBound","upperBound","mX1","mX2","currentX","currentT","cubicBezier","mY1","mY2","getTForX","aX","mirrorEasing","reverseEasing","backOut","backIn","backInOut","anticipate","circIn","circOut","circInOut","isZeroValueString","isNone","sanitize","floatRegex","isNullish","singleColorRegex","isColorString","testProp","splitColor","aName","bName","cName","clampRgbUnit","rgbUnit","rgba","red","green","blue","alpha$1","parseHex","hex","hsla","hue","saturation","lightness","color","colorRegex","NUMBER_TOKEN","COLOR_TOKEN","VAR_TOKEN","VAR_FUNCTION_TOKEN","SPLIT_TOKEN","complexRegex","analyseComplexValue","originalValue","types","parsedValue","parseComplexValue","createTransformer","numSections","convertNumbersToZero","getAnimatableNone","complex","maxDefaults","applyDefaultFilter","functionRegex","functions","defaultValueTypes","getDefaultValueType","defaultValueType","invalidTemplates","makeNoneKeyframesAnimatable","unresolvedKeyframes","noneKeyframeIndexes","animatableTemplate","keyframe","noneIndex","isNumOrPxType","getPosFromMatrix","matrix","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","transformKeys","nonTranslationalTransformKeys","removeNonTranslationalTransform","removedTransforms","positionalValues","paddingLeft","paddingRight","paddingTop","paddingBottom","toResolve","isScheduled","anyNeedsMeasurement","measureAllKeyframes","resolversToMeasure","resolver","elementsToMeasure","transformsToRestore","restore","readAllKeyframes","flushKeyframeResolvers","KeyframeResolver","isAsync","currentValue","finalKeyframe","valueAsRead","isNumericalString","splitCSSVariableRegex","parseCSSVariable","token1","token2","getVariableValue","trimmed","testValueType","auto","dimensionValueTypes","findDimensionValueType","DOMKeyframesResolver","originType","targetType","measureKeyframe","finalKeyframeIndex","unsetTransformName","unsetTransformValue","isAnimatable","hasKeyframesChanged","keyframes","canAnimate","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","isNotNull","getFinalKeyframe","repeatType","resolvedKeyframes","MAX_RESOLVE_DELAY","BaseAnimation","autoplay","repeatDelay","resolvedAnimation","mixNumber","hueToRgb","hslaToRgba","mixImmediate","mixLinearColor","fromExpo","expo","colorTypes","getColorType","asRGBA","model","mixColor","fromRGBA","toRGBA","blended","combineFunctions","pipe","transformers","invisibleValues","mixVisibility","mixNumber$1","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","matchOrder","orderedOrigin","pointers","originIndex","originValue","template","originStats","targetStats","mix","velocitySampleDuration","calcGeneratorVelocity","resolveValue","prevT","springDefaults","safeMin","findSpring","bounce","mass","derivative","dampingRatio","undampedFreq","exponentialDecay","calcAngularFreq","initialGuess","approximateRoot","stiffness","rootIterations","durationKeys","physicsKeys","isSpringType","getSpringOptions","springOptions","visualDuration","damping","derived","spring","optionsOrVisualDuration","restSpeed","restDelta","isResolvedFromDuration","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","resolveSpring","angularFreq","dampedAngularFreq","freqForT","currentVelocity","isBelowVelocityThreshold","isBelowDisplacementThreshold","calculatedDuration","inertia","power","timeConstant","bounceDamping","bounceStiffness","modifyTarget","isOutOfBounds","nearestBoundary","ideal","calcDelta","calcLatest","applyFriction","timeReachedBoundary","spring$1","checkCatchBoundary","hasUpdatedFrame","easeIn","easeOut","easeInOut","isEasingArray","ease","easingLookup","easingDefinitionToFunction","x1","y1","x2","y2","createMixers","customMixer","mixers","mixerFactory","numMixers","mixer","easingFunction","interpolate","isClamp","inputLength","isZeroDeltaRange","interpolator","progressInRange","fillOffset","offsetProgress","defaultOffset","convertOffsetToTimes","defaultEasing","keyframeValues","times","easingFunctions","absoluteTimes","mapTimeToKeyframe","frameloopDriver","passTimestamp","generators","percentToProgress","MainThreadAnimation","onStop","KeyframeResolver$1","onResolved","keyframes$1","generatorFactory","mapPercentToKeyframes","mirroredGenerator","resolvedDuration","totalDuration","sample","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","iterationProgress","isAnimationFinished","newSpeed","hasChanged","driver","onPlay","acceleratedValues","startWaapiAnimation","valueName","keyframeOptions","supportsWaapi","sampleDelta","maxDuration","requiresPregeneratedKeyframes","pregenerateKeyframes","sampleAnimation","pregeneratedKeyframes","unsupportedEasingFunctions","isUnsupportedEase","AcceleratedAnimation","pregeneratedAnimation","sampleTime","underDampedSpring","criticallyDampedSpring","keyframesTransition","getDefaultTransition","valueKey","isTransitionDefined","when","delayChildren","staggerChildren","staggerDirection","animateMotionValue","isHandoff","valueTransition","shouldSkip","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","animateTarget","targetAndTransition","transitionOverride","animationTypeState","appearId","animateVariant","getAnimation","getChildAnimations","forwardDelay","animateChildren","maxStaggerDuration","generateStaggerDuration","sortByTreeOrder","animateVisualElement","resolvedDefinition","numVariantProps","getVariantContext","reversePriorityOrder","numAnimationTypes","animateList","createAnimationState","createState","buildResolvedTypeValues","setAnimateFunction","makeAnimator","animateChanges","changedActiveType","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","variantDidChange","checkVariantsDidChange","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","prevResolvedValues","allKeys","markToAnimate","valueHasChanged","fallbackAnimation","fallbackTarget","shouldAnimate","setActive","createTypeState","Feature","AnimationFeature","prevAnimate","ExitAnimationFeature","prevIsPresent","exitAnimation","addDomEvent","extractEventInfo","addPointerInfo","addPointerEvent","distance2D","xDelta","yDelta","PanSession","transformPagePoint","contextWindow","dragSnapToOrigin","getPanInfo","isPanStarted","isDistancePastThreshold","point","onStart","onMove","transformPoint","onEnd","onSessionEnd","resumeAnimation","panInfo","initialInfo","onSessionStart","subtractPoint","lastDevicePoint","startDevicePoint","getVelocity","timeDelta","timestampedPoint","lastPoint","SCALE_PRECISION","SCALE_MIN","SCALE_MAX","TRANSLATE_PRECISION","TRANSLATE_MIN","TRANSLATE_MAX","calcLength","isNear","maxDistance","calcAxisDelta","calcBoxDelta","calcRelativeAxis","calcRelativeBox","calcRelativeAxisPosition","calcRelativePosition","applyConstraints","elastic","calcRelativeAxisConstraints","calcRelativeConstraints","layoutBox","bottom","right","calcViewportAxisConstraints","layoutAxis","constraintsAxis","calcViewportConstraints","constraintsBox","sourceLength","targetLength","rebaseAxisConstraints","constraints","relativeConstraints","defaultElastic","resolveDragElastic","dragElastic","resolveAxisElastic","minLabel","maxLabel","resolvePointElastic","label","createAxisDelta","createDelta","createAxis","createBox","eachAxis","convertBoundingBoxToBox","convertBoxToBoundingBox","transformBoxPoints","topLeft","bottomRight","isIdentityScale","hasScale","scaleX","scaleY","has2DTranslate","is2DTranslate","scalePoint","originPoint","distanceFromOrigin","scaled","applyPointDelta","translate","boxScale","applyAxisDelta","applyBoxDelta","box","TREE_SCALE_SNAP_MIN","TREE_SCALE_SNAP_MAX","applyTreeDeltas","treeScale","isSharedTransition","treeLength","transformBox","translateAxis","transformAxis","axisTranslate","axisScale","axisOrigin","measureViewportBox","measurePageBox","rootProjectionNode","viewportBox","scroll","getContextWindow","elementDragControls","VisualElementDragControls","originEvent","snapToCursor","dragPropagation","onDragStart","measuredAxis","animationState","dragDirectionLock","onDirectionLock","onDrag","getCurrentDirection","onDragEnd","_point","shouldDrag","axisValue","prevConstraints","onMeasureDragConstraints","constraintsElement","measuredConstraints","userConstraints","dragMomentum","dragTransition","onDragTransitionEnd","momentumAnimations","dragKey","externalMotionValue","boxProgress","stopPointerListener","dragListener","measureDragConstraints","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","hasLayoutChanged","currentDirection","lockThreshold","DragGesture","dragControls","asyncHandler","PanGesture","pointerDownEvent","onPanSessionStart","onPanStart","onPan","onPanEnd","globalProjectionState","pixelsToPercent","pixels","correctBorderRadius","correctBoxShadow","projectionDelta","shadow","xScale","yScale","averageScale","MeasureLayoutWithContext","layoutGroup","switchLayoutGroup","defaultScaleCorrectors","layoutDependency","promoteContext","animateSingleValue","motionValue$1","compareByDepth","FlatTree","checkElapsed","borders","numBorders","asNumber","isPx","mixValues","follow","lead","shouldCrossfadeOpacity","isOnlyMember","easeCrossfadeIn","easeCrossfadeOut","borderLabel","followRadius","getRadius","leadRadius","radiusName","compress","copyAxisInto","originAxis","copyBoxInto","originBox","copyAxisDeltaInto","originDelta","removePointDelta","removeAxisDelta","sourceAxis","removeAxisTransforms","transforms","scaleKey","originKey","xKeys","yKeys","removeBoxTransforms","sourceBox","isAxisDeltaZero","isDeltaZero","axisEquals","boxEquals","axisEqualsRounded","boxEqualsRounded","aspectRatio","axisDeltaEquals","NodeStack","prevLead","indexOfNode","member","preserveFollowOpacity","crossfade","resumingFrom","buildProjectionTransform","latestTransform","xTranslate","yTranslate","zTranslate","transformPerspective","rotate","rotateX","rotateY","skewX","skewY","elementScaleX","elementScaleY","metrics","isDebug","transformAxes","hiddenVisibility","animationTarget","resetDistortingTransform","sharedAnimationValues","cancelTreeOptimisedTransformAnimations","projectionNode","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","subscriptionManager","isLayoutDirty","cancelDelay","resizeUnblockUpdate","finishAnimation","hasRelativeTargetChanged","newLayout","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","hasOnlyRelativeTargetChanged","animationOptions","resetSkewAndRotation","clearMeasurements","clearIsLayoutDirty","resetTransformStyle","updateLayout","notifyLayoutUpdate","clearSnapshot","removeLeadSnapshots","prevLayout","phase","needsMeasurement","isRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","roundBox","checkNodeWasScrollRoot","boxWithoutScroll","transformOnly","withTransforms","boxWithoutTransform","nodeBox","forceRecalculation","isShared","relativeParent","canSkip","prevTreeScaleX","prevTreeScaleY","notifyAll","snapshotLatestValues","mixedValues","targetDelta","relativeLayout","snapshotSource","layoutSource","isSharedLayoutAnimation","hasOpacityCrossfade","prevRelativeTarget","mixAxisDelta","mixBox","targetWithTransforms","shouldAnimatePositionOnly","xLength","yLength","needsReset","hasDistortingTransform","resetValues","emptyStyles","valuesToRender","correct","applyTo","corrected","measuredLayout","animationType","axisSnapshot","layoutDelta","visualDelta","parentSnapshot","parentLayout","relativeSnapshot","mixAxis","userAgentContains","string","roundPoint","roundAxis","DocumentProjectionNode","HTMLProjectionNode","documentNode","handleHoverEvent","lifecycle","HoverGesture","FocusGesture","isFocusVisible","handlePressEvent","PressGesture","observerCallbacks","fireObserverCallback","fireAllObserverCallbacks","initIntersectionObserver","lookupRoot","rootObservers","observeIntersection","rootInteresectionObserver","thresholdNames","InViewFeature","viewport","rootMargin","amount","once","onIntersectionUpdate","isIntersecting","onViewportEnter","onViewportLeave","hasViewportOptionChanged","prevViewport","gestureAnimations","prefersReducedMotion","hasReducedMotionListener","initPrefersReducedMotion","motionMediaQuery","setReducedMotionPreferences","valueTypes","findValueType","visualElementStore","updateMotionValuesFromProps","existingValue","latestValue","propEventHandlers","VisualElement","_prevProps","_visualElement","blockInitialAnimation","initialMotionValues","feature","valueIsTransform","removeOnChange","removeOnRenderRequest","removeSyncCheck","other","featureDefinition","FeatureConstructor","closestVariantNode","valueFromInitial","DOMVisualElement","getComputedStyle","HTMLVisualElement","defaultType","SVGVisualElement","createDomVisualElement","createMotionComponent","motion","countCharacters","getRandomMessage","templates","randomIndex","notifyMessage","icon","autoClose","iconColor","getIcon","getIconColor","toast","createCloudinaryUrl","public_id","ModalInvite","isOpen","onClose","BottomSheet","ModalPremium","onSubmit","ButtonContext","ButtonProvider","buttonSpacing","setButtonSpacing","viewportHeight","setViewportHeight","defaultButtonState","buttonState","setButtonState","updateButtonState","mainButtonMethods","getButtonVisibility","handleResize","handleKeyDown","handleFocusIn","useButton","ModalFriends","MainButton","profile","handleClose","ReactDOM","StarImage","Modals","showModals","setShowModals","handlePayment","handleFriend","badge","Settings","paid","handleSettings","Decline","handleDecline","Like","isLike","handleLike","Social","instagram","handleTelegram","handleInstagram","Options","handleShowOptions","Actions","isFriend","showSettings","showDecline","showLike","showSocials","showOptions","src","noExtend","ssrDocument","getDocument","ssrWindow","getWindow","classesToTokens","deleteProps","nextTick","getTranslate","curTransform","transformMatrix","curStyle","isNode","nextSource","keysArray","nextKey","setCSSProperty","varName","varValue","animateCSSModeScroll","swiper","targetPosition","side","startPosition","dir","isOutOfBound","easeProgress","currentPosition","elementChildren","elementIsChildOfSlot","slot","elementsQueue","elementToCheck","elementIsChildOf","isChild","showWarning","elementPrevAll","prevEls","elementNextAll","nextEls","elementStyle","elementIndex","elementParents","parents","elementOuterSize","includeMargins","makeElementsArray","support","calcSupport","getSupport","deviceCached","calcDevice","_temp","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","browser","calcBrowser","needPerspectiveFix","isSafari","major","minor","isWebView","isSafariBrowser","need3dFix","getBrowser","Resize","animationFrame","resizeHandler","createObserver","newWidth","newHeight","_ref2","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","extendParams","attach","ObserverFunc","observerUpdate","containerParents","destroy","eventsEmitter","onceHandler","_len","_len2","_key2","updateSize","updateSlides","getDirectionPropertyValue","wrapperEl","slidesEl","swiperSize","rtl","wrongRTL","isVirtual","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slideEl","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentTransform","currentWebKitTransform","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","groupSize","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","getSlideByIndex","updateSlidesOffset","minusOffset","toggleSlideClasses$1","condition","updateSlidesProgress","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","updateProgress","multiplier","translatesDiff","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","toggleSlideClasses","updateSlidesClasses","activeIndex","getFilteredSlide","activeSlide","prevSlide","nextSlide","processLazyPreloader","imageEl","slideSelector","lazyEl","unlazy","preload","slidesPerView","activeColumn","preloadColumns","slideIndexLastInView","realIndex","getActiveIndexByTranslate","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","skip","firstSlideInColumn","activeSlideIndex","updateClickedSlide","pathEl","slideFound","getSwiperTranslate","currentTranslate","setTranslate","byController","newProgress","minTranslate","maxTranslate","translateTo","runCallbacks","translateBounds","internal","newTranslate","isH","setTransition","transitionEmit","transitionStart","slideTo","normalizedTranslate","normalizedGrid","normalizedGridNext","slideToLoop","newIndex","targetSlideIndex","cols","centeredSlides","needLoopFix","slideNext","animating","perGroup","increment","slidePrev","rtlTranslate","normalizedSnapGrid","isFreeMode","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","currentSnap","nextSnap","slideToClickedSlide","slideToIndex","loopCreate","slideRealIndex","initSlides","slidesPerGroup","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slidesToAdd","loopFix","byMousewheel","allowSlidePrev","allowSlideNext","initialSlide","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","isInitialOverflow","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","currentSlideTranslate","diff","shift","loopParams","loopDestroy","newSlidesOrder","loop","setGrabCursor","moving","unsetGrabCursor","grabCursor","closestElement","__closestFrom","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","onTouchStart","touches","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startY","preventDefault","shouldPreventDefault","onTouchMove","targetTouch","pageX","pageY","diffX","diffY","touchAngle","touchesDiff","prevTouchesDirection","isLoop","allowLoopFix","disableParentSwiper","resistanceRatio","onTouchEnd","touchEndTime","timeDiff","pathTree","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","onResize","isVirtualLoop","onScroll","onLoad","onDocumentTouchStart","capture","domMethod","swiperMethod","attachEvents","detachEvents","events$1","isGridEnabled","setBreakpoint","breakpoints","breakpointsBase","breakpointContainer","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","hasLoop","getBreakpoint","containerEl","currentHeight","minRatio","prepareClasses","resultClasses","classNames","addClasses","suffixes","removeClasses","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideRightEdge","checkOverflow$1","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","extendedDefaults","Swiper$1","Swiper","swipers","newParams","mod","swiperParams","cls","updates","spv","breakLoop","translateValue","translated","newDirection","needUpdate","getWrapperSelector","lazyElements","deleteInstance","cleanStyles","newDefaults","modules","prototypeGroup","protoMethod","paramsList","needsNavigation","needsPagination","needsScrollbar","uniqueClasses","unique","wrapperClass","updateSwiper","passedParams","changedParams","nextEl","prevEl","scrollbarEl","paginationEl","updateParams","currentParams","pagination","navigation","scrollbar","virtual","thumbs","needThumbsInit","needControllerInit","needPaginationInit","needScrollbarInit","needNavigationInit","loopNeedDestroy","loopNeedEnable","loopNeedReloop","destroyModule","getParams","splitEvents","allowedParams","plainObj","mountSwiper","getChangedParams","oldParams","oldChildren","getKey","addKey","oldChildrenKeys","childrenKeys","newKeys","oldKeys","newKey","oldKey","updateOnVirtualData","isChildSwiperSlide","processChildren","slots","foundSlides","renderVirtual","virtualData","getSlideIndex","loopFrom","loopTo","slidesToRender","deps","SwiperSlideContext","SwiperContext","externalElRef","Tag","WrapperTag","onSwiper","eventsAssigned","containerClasses","setContainerClasses","setVirtualData","breakpointChanged","setBreakpointChanged","initializedRef","swiperElRef","swiperRef","oldPassedParamsRef","oldSlides","nextElRef","prevElRef","paginationElRef","scrollbarElRef","restProps","onBeforeBreakpoint","initSwiper","passParams","extendWith","renderSlides","SwiperSlide","zoom","lazy","virtualIndex","swiperSlideIndex","slideElRef","slideClasses","setSlideClasses","lazyLoaded","setLazyLoaded","updateClasses","slideData","renderChildren","Media","currentSlide","setCurrentSlide","setSwiper","renderMediaElement","media","mediaUrl","handleHide","handleReject","handleReport","Content","handleStar","setDisableSliderScroll","expandedDescription","setExpandedDescription","touchEnd","setTouchEnd","descriptionRef","emojiRef","descriptionHeight","fullText","handleClickOutside","descriptionElement","handleScroll","isAtTop","isAtBottom","handleTouchStart","handleTouchEnd","Card","searchId","isSearching","removeCard","friends","setShowOptions","toggleShowOptions","number_of_characters","telegram","addedProfiles","buttonId","this","__importDefault","react_1","iconSet","getSvg","find","iconEl","currentIcon","renderPath","iconObj","IcomoonReact_1","IcomoonReact_2","IcomoonReact","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","getEventValue","getNodeParentName","isNameInFieldArray","tempObject","prototypeCopy","isWeb","cloneObject","isFileListInstance","isKey","stringToPath","tempPath","objValue","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormContext","useFormContext","getProxyFormState","formState","control","localProxyFormState","isEmptyObject","shouldRenderFormState","formStateData","_proxyFormState","updateFormState","convertToArrayPayload","shouldSubscribeByName","signalName","currentName","useSubscribe","useFormState","methods","_mounted","_localProxyFormState","generateWatchOutput","_names","formValues","isGlobal","fieldName","useWatch","updateValue","useController","shouldUnregister","isArrayField","_registerProps","fieldState","elm","_shouldUnregisterField","updateMounted","Controller","appendErrors","validateAllFieldCriteria","getValidationModes","isWatched","isBlurEvent","watchName","iterateFieldsByAction","fields","fieldsNames","abortEarly","currentField","updateFieldArrayRootError","fieldArrayErrors","isFileInput","isHTMLElement","owner","isMessage","isRadioInput","isRegex","defaultResult","validResult","getCheckboxValue","defaultReturn","getRadioValue","getValidateError","getValueAndMessage","validationData","validateField","disabledFieldNames","shouldUseNativeValidation","isFieldArray","refs","minLength","validate","valueAsNumber","mount","inputRef","setCustomValidity","isRadio","isCheckBox","isRadioOrCheckbox","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","baseGet","updatePath","isEmptyArray","unset","childObject","createSubject","_observers","deepEqual","object1","object2","keys1","keys2","val1","val2","isMultipleSelect","live","objectHasFunction","markFieldsDirty","isParentNodeArray","getDirtyFieldsFromDefaultValues","dirtyFieldsFromValues","getDirtyFields","defaultValues","getFieldValueAs","valueAsDate","setValueAs","getFieldValue","getResolverOptions","_fields","criteriaMode","getRuleValue","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","validateFunction","hasValidation","schemaErrorLookup","foundError","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","createFormControl","_formState","_defaultValues","_formValues","_state","delayErrorCallback","_subjects","validationModeBeforeSubmit","validationModeAfterSubmit","shouldDisplayAllAssociatedErrors","_updateValid","shouldUpdateValid","_executeSchema","executeBuiltInValidation","_updateIsValidating","isValidating","_updateFieldArray","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","updateValidAndValue","shouldSkipSetValueAs","setFieldValue","updateTouchAndDirty","fieldValue","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","disabledField","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","previousFieldError","updatedFormState","executeSchemaAndUpdateState","shouldOnlyCheckValid","isFieldArrayRoot","isPromiseFunction","fieldError","_removeUnmounted","unregister","getValues","_getWatch","_getFieldArray","optionRef","checkboxRef","radioRef","trigger","setValues","fieldKey","setValue","cloneValue","onChange","isFieldValueUpdated","getCurrentFieldValue","_updateIsFieldValueUpdated","shouldSkipValidation","watched","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","getFieldState","clearErrors","inputName","setError","currentError","currentRef","restOfErrorTree","watch","_updateDisabledField","disabledIsDefined","fieldRef","radioOrCheckbox","_focusError","_disableForm","handleSubmit","onValid","onInvalid","onValidError","resetField","_reset","keepStateOptions","updatedValues","cloneUpdatedValues","isEmptyResetValues","fieldsToCheck","useForm","_formControl","isDirty","Field","typeField","eventHoc","FieldComponent","FileField","handleFile","files","FileFieldController","Radio","Checkbox","Photo","setPhoto","photo","setHasPhoto","photoFromStorage","file","photoElement","ADDRESS_REGEX","EMAIL_REGEX","DESCRIPTION_REGISTRATION_REGEX","DESCRIPTION_SETTINGS_REGEX","EMOJI_REGEX","INSTAGRAM_REGEX","NAME_REGEX","DATE_REGEX","Description","setText","flow","cacheBuster","imageUrl","getPath","getTransformImage","AuthLayout","title","details","progressData","getProgressValue","isPhotoPage","isPersonalPage","BeautifulPhoto","getTimeSpent","durationUser","setDurationUser","hasPhoto","ProfessionalPhoto","AuthenticPhoto","BeautifulDescription","setIsError","activeElement","ProfessionalDescription","AuthenticDescription","image$3","useAuth","livenessFinishSession","isLivenessFinishSessionLoading","isLivenessFinishSessionError","errorLivenessFinishSession","isLivenessFinishSessionSuccess","livenessStartSession","isLivenessStartSessionLoading","isLivenessStartSessionError","isLivenessStartSessionSuccess","FaceLivenessStart","imageError","FaceLivenessError","textError","freeGlobal","global","_freeGlobal","freeSelf","_root","Symbol","_Symbol","objectProto","nativeObjectToString","symToStringTag","getRawTag","isOwn","unmasked","_getRawTag","_objectToString","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isArray_1","isObjectLike","isObjectLike_1","withSelector_production","getServerSnapshot","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelectorModule","ActionTypes","SpecialTargets","stop","raise","nullEvent","errorPlatform","choose","pure","STATE_DELIMITER","EMPTY_ACTIVITY_MAP","DEFAULT_GUARD_TYPE","TARGETLESS_KEY","matchesState","parentStateId","childStateId","parentStateValue","toStateValue","childStateValue","getEventType","toStatePath","stateId","isStateLike","stateValue","pathToStateValue","statePath","marker","mapValues","collection","iteratee","collectionKeys","mapFilterValues","props_1","props_1_1","nestedPath","accessorProp","props_2","props_2_1","toStatePaths","flatten","subStateValue","subPath","toArrayStrict","mapContext","mapper","_event","e_5","subMapper","e_5_1","isBuiltInEvent","isBehavior","partition","e_6","truthy","falsy","items_1","items_1_1","e_6_1","updateHistoryStates","hist","subHist","updateHistoryValue","updateContext","assignActions","updatedContext","assignAction","e_7","assignment","partialUpdate","propAssignment","e_7_1","toGuard","guardMap","isObservable","symbolObservable","isMachine","isActor","uniqueId","currentId","toEventObject","toSCXMLEvent","scxmlEvent","eventObject","toTransitionConfigArray","configLike","transitions","transitionLike","normalizeTarget","evaluateGuard","machine","guard","guards","guardMeta","condFn","toInvokeSource","toObserver","nextHandler","completionHandler","createInvokeId","stateNodeId","isRaisableAction","initEvent","getActionFunction","actionFunctionMap","toActionObject","actionObject","exec","toActionObjects","subAction","toActivityDefinition","raise$1","resolveRaise","delaysMap","resolvedEvent","resolvedDelay","configDelay","send$1","resolveSend","resolvedTarget","resolveLog","sendId","cancel$1","activity","activityDef","actorRef","resolveStop","actorRefOrString","resolvedActorRef","assign$1","after","delayRef","idSuffix","doneInvoke","pluckAssigns","actionBlocks","actionBlocks_1","actionBlocks_1_1","resolveActions","currentState","currentContext","predictableExec","preserveActionOrder","preservedContexts","deferredToBlockEnd","handleAction","blockType","raisedAction","sendAction","log$1","choose$1","chooseAction","matchedActions","resolvedActionsFromChoose","resolvedContextFromChoose","pure$1","resolvedActionsFromPure","resolvedContext","stop$1","resolvedActionObject","exec_1","contextIndex_1","_ctx","processBlock","resolvedActions","serviceStack","provide","consume","createNullActor","createInvocableActor","invokeDefinition","invokeSrc","serviceCreator","resolvedData","tempActor","createDeferredActor","entity","initialState_1","isSpawnedActor","toActorRef","actorRefLike","isLeafNode","stateNode","getAllChildren","getAllStateNodes","stateNodes","getConfiguration","prevStateNodes","e_4","prevConfiguration","prevAdjList","getAdjList","configuration","configuration_1","configuration_1_1","adjList","configuration_2","configuration_2_1","configuration_3","configuration_3_1","e_4_1","getValueFromAdj","baseNode","childStateNodes","childStateNode","csn","configuration_4","configuration_4_1","rootNode","has","nextEvents","isInFinalState","getMeta","getTagsFromConfiguration","stateValuesEqual","aKeys","bKeys","isStateConfig","bindActionToState","boundAction","State","valueKeys","jsonValues","transitionData","nextCallback","sessionIdIndex","actor","getGlobal","getDevTools","registerService","devTools","spawnBehavior","behavior","mailbox","flushing","event_1","actorCtx","handleError","DEFAULT_SPAWN_OPTIONS","InterpreterStatus","Interpreter","nextState","isParent","error$1","actionOrExec","sendAction_1","invokeSource","autoForward","resolvedOptions","clock","resolvedId","actionsConfig","contextListener","finalChildStateNode","doneData","nextListenerOrObserver","completeListener","completeOnce","initialState","resolvedState","e_8","e_9","e_10","e_8_1","e_9_1","e_10_1","exitActions","e_11","batchChanged","batchedActions","events_1","events_1_1","e_11_1","nextEvent","e_12","e_12_1","childService","doneEvent","canceled","errorData","errorEvent","unsubscribed","receivers","emitted","receive","callbackStop","newListener","implementation","dispose","devToolsOptions","ms","interpret","resolveSpawnOptions","nameOrOptions","spawn","interpreter","simpleSrc","toInvokeDefinition","invokeConfig","invokeDef","NULL_EVENT","STATE_IDENTIFIER","WILDCARD","EMPTY_OBJECT","isStateId","createDefaultOptions","StateNode","_stateInfo","stateConfig","order","dfs","invokeId","services","delays","transient","candidates","sameEventType","afterConfig","mutateEntryExit","delayedTransitions","configTransition","resolvedTransition","delayedTransition","initialStateValue","subStateKeys","subStateNodes","subStateKey","stateFromConfig","transitionMap","subStateNode","stateTransitions","enabledTransitions","st","willTransition","nextStateNodes","selectedTransition","stateIn","isInState","guardPassed","allNextStateNodes","isInternal","targetNode","possibleAncestor","isDone","prevConfig","entrySet","prevConfig_1","prevConfig_1_1","entryStates","exitStates","doneEvents","grandparent","entryActions","invokeActions","stopActions","resolvedStateValue","stateTransition","originalEvent","currentActions","resolvedConfiguration","historyValue","start$1","raisedEvents","nonRaisedActions","didUpdateContext","hasAlwaysTransitions","maybeNextState","raisedEvent","changed","stateKey","resolvedStateId","arrayStatePath","currentStateNode","stateIdentifier","historyConfig","relativeStateId","initialStateNodePaths","initialPath","childStatePath","relativeStateValue","historyTarget","relativeChildPath","subHistoryValue","subStatePath","childStateIds","states","isInternalTarget","targetStateNode","transitionConfig","normalizedTarget","onConfig","wildcardConfigs","strictTransitionConfigs_1","transitionConfigArray","eventlessConfig","doneConfig","settleTransitions","formattedTransitions","delayedTransitions_1","delayedTransitions_1_1","createMachine","useIdleInterpreter","getMachine","interpreterOptions","machineConfig","machineWithConfig","useInterpret","observerOrListener","sub","rehydratedState","getServiceSnapshot","isService","isInterpreterStateEqual","initialStateChanged","isActorWithState","isDeferredActor","defaultGetSnapshot","useActor","actorRefRef","deferredEventsRef","handleStoreChange","boundGetSnapshot","storeSnapshot","useSyncExternalStoreWithSelector","currentActorRef","deferredEvent","defaultCompare","initialStateCacheRef","useSelector","compare","selectedSnapshot","classNameModifier","modifier","classNameModifierByFlag","flag","splitObject","arrayMap","_arrayMap","symbolTag","isSymbol","isSymbol_1","require$$3","symbolProto","symbolToString","baseToString","_baseToString","toString_1","borderWidths","colors","alert","aiConversation","authenticator","avatar","checkbox","checkboxfield","dialcodeselect","divider","dropzone","accordion","fieldcontrol","fieldgroup","fieldset","fieldmessages","fileuploader","flex","heading","highlightmatch","inappmessaging","liveness","loader","menu","passwordfield","phonenumberfield","placeholder","radio","radiogroup","searchfield","select","selectfield","sliderfield","stepperfield","storagemanager","switchfield","table","tabs","textareafield","textfield","togglebutton","togglebuttongroup","fonts","fontSizes","fontWeights","lineHeights","opacities","outlineOffsets","outlineWidths","radii","shadows","space","defaultTheme","arrayReduce","accumulator","initAccum","_arrayReduce","basePropertyOf","_basePropertyOf","deburredLetters","deburrLetter","_deburrLetter","reLatin","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsCombo","reComboMark","deburr","deburr_1","reAsciiWord","asciiWords","_asciiWords","reHasUnicodeWord","hasUnicodeWord","_hasUnicodeWord","rsAstralRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsOptJoin","rsOrdLower","rsOrdUpper","rsSeq","rsEmoji","reUnicodeWord","unicodeWords","_unicodeWords","words","words_1","reApos","createCompounder","_createCompounder","kebabCase","word","kebabCase_1","REFERENCE_REGEX","usesReference","hasReference","CSS_VARIABLE_PREFIX","propsToString","isDesignToken","cssValue","cssNameTransform","SHADOW_PROPERTIES","referenceValue","isShadowTokenObject","setupToken","setupTokens","nextTokens","flattenProperties","to_ret","deepExtend","objects","collision","copyIsArray","nextPath","addVars","recursiveComponentCSS","baseSelector","theme","_modifiers","_element","_vars","createComponentCSS","themeName","baseComponentClassName","componentClassName","componentTheme","override","createColorPalette","createAnimationCSS","animationProperties","createTheme","DefaultTheme","mergedTheme","primaryColor","secondaryColor","overrideTokens","customProperties","colorMode","ComponentClassName","__viteBrowserExternal","ThemeContext","ComponentPropsToStylePropsMap","stylePropsToThemeKeys","isThemeStylePropKey","isEmptyString","isNullOrEmptyString","objectKeys","getCSSVariableIfValueIsThemeKey","propKey","tokenKey","tokenProps","getClosestValueByBreakpoint","breakpointsDesc","lowerBreakpoints","valueObjToBreakpoints","getValueAtCurrentBreakpoint","breakpointCompatValues","breakpointsAscending","getMediaQueries","sortedBreakpoints","minWidth","nextBreakpoint","maxWidth","useIsomorphicEffect","useBreakpoint","defaultBreakpoint","matchMedia","mediaQueries","updateBreakpoint","unsubscribeList","queryList","handleMediaChange","React.useDebugValue","getThemeFromContext","useTheme","useColorMode","getStyleValue","isSpanPrimitiveValue","spanValue","getGridSpan","convertGridSpan","useTransformStyleProps","rowSpan","columnSpan","row","rowFromSpanValue","columnFromSpanValue","isComponentStyleProp","convertStylePropsToStyleObj","nonStyleProps","reactStyleProp","useStyles","propStyles","primitiveWithForwardRef","React.forwardRef","ViewPrimitive","as","testId","isDisabled","inert","View","defaultViewBox","IconPrimitive","pathData","viewBox","minX","minY","_children","IconsContext","useIcons","IconCheckCircle","IconError","IconInfo","IconWarning","AlertIcon","variation","ariaHidden","role","icons","AUTO_GENERATED_ID_PREFIX","useReactId","useStableId","stableId","setStableId","reactId","FieldsetContext","useFieldset","FlexPrimitive","Flex","LINEAR_EMPTY","LINEAR_FILLED","CIRCULAR_EMPTY","CIRCULAR_FILLED","CIRCULAR_STROKE_WIDTH","RADIUS","CIRCUMFERENCE","LoaderPrimitive","filledColor","emptyColor","isDeterminate","isPercentageTextHidden","percentage","componentClasses","linearLoader","circularLoader","Loader","supportedVariations","ButtonPrimitive","colorTheme","isFullWidth","loadingText","colorThemeModifier","isFieldsetDisabled","shouldBeDisabled","IconClose","TextPrimitive","Text","QA_FIELD_DESCRIPTION","FieldDescription","descriptiveText","labelHidden","FieldErrorMessage","LabelPrimitive","visuallyHidden","Label","getUniqueComponentId","suffix","isStyleKey","splitPrimitiveProps","splitProps","createSpaceSeparatedIds","joinedIds","ERROR_SUFFIX","DESCRIPTION_SUFFIX","VisuallyHiddenPrimitive","VisuallyHidden","IconExpandMore","DirectionContext","DirectionProvider","SelectPrimitive","autoComplete","isRequired","isMultiple","selectSize","DEFAULT_PLACEHOLDER_VALUE","shouldSetDefaultPlaceholderValue","isExpanded","Select","selectFieldChildren","SelectFieldPrimitive","inputStyles","_rest","fieldId","descriptionId","errorId","ariaDescribedBy","styleProps","SelectField","Style","ThemeStyle","ThemeProvider","nanoid","byte","IlluminationState","FaceMatchState","LivenessErrorState","FACE_DISTANCE_THRESHOLD","REDUCED_THRESHOLD","REDUCED_THRESHOLD_MOBILE","PUPIL_DISTANCE_WEIGHT","FACE_HEIGHT_WEIGHT","FACE_MATCH_RANGE_MIN","FACE_MATCH_RANGE_MAX","FACE_MATCH_WEIGHT_MIN","FACE_MATCH_WEIGHT_MAX","WS_CLOSURE_CODE","getScaledValueFromRandomSeed","randomSeed","getOvalBoundingBox","ovalDetails","minOvalX","maxOvalX","minOvalY","maxOvalY","getIntersectionOverUnion","box1","box2","xA","yA","xB","yB","intersectionArea","boxAArea","boxBArea","getOvalDetailsFromSessionInformation","sessionInformation","videoWidth","ovalParameters","getStaticLivenessOvalDetails","widthSeed","centerXSeed","centerYSeed","ratioMultiplier","videoHeight","ovalRatio","minOvalCenterX","maxOvalCenterX","minOvalCenterY","maxOvalCenterY","centerX","centerY","ovalWidth","ovalHeight","drawLivenessOvalInCanvas","oval","scaleFactor","videoEl","isStartScreen","flippedCenterX","canvasWidth","canvasHeight","baseDims","drawStaticOval","canvasEl","videoMediaStream","videoScaledWidth","videoScaledHeight","clearOvalCanvas","getPupilDistanceAndFaceHeight","face","leftEye","rightEye","mouth","eyeCenter","pupilDistance","faceHeight","generateBboxFromLandmarks","frameHeight","nose","leftEar","rightEar","ovalTop","ocularWidth","centerFaceX","centerFaceY","estimateIllumination","MAX_SCALE","luma","ind","isCameraDeviceVirtual","INITIAL_ALPHA","SECONDARY_ALPHA","fillFractionalContext","prevColor","nextColor","fraction","fillOverlayCanvasFractional","overlayCanvas","heightFraction","videoX","videoY","updatedCenterX","updatedCenterY","isClientFreshnessColorSequence","getColorsSequencesFromSessionInformation","FreshnessColor","downscrollDuration","flatDisplayDuration","colorArray","getRGBArrayFromColorString","colorStr","getFaceMatchState","faceDetector","detectedFaces","faceMatchState","isFaceDistanceBelowThreshold","reduceThreshold","isMobile","detectedFace","isDistanceBelowThreshold","calibratedPupilDistance","getBoundingBox","deviceHeight","deviceWidth","EPSILON_FLOAT32","EPSILON_FLOAT16","DataStorage","backend","dataMover","dataId","KernelBackend","notYetImplemented","shape","dtype","kernelName","swap","temp","expr","assertShapesMatch","shapeA","shapeB","errorMessagePrefix","arraysEqual","assertNonNull","sizeFromShape","arraysEqualWithNull","n1","n2","isInt","rightPad","inferFromImplicitShape","shapeProd","implicitIdx","newShape","parseAxisParam","rank","ax","squeezeShape","keptDims","axes","j","getTypedArrayFromDType","getArrayFromDType","checkConversionForErrors","vals","isValidDtype","hasEncodingLoss","oldType","newType","bytesPerElement","bytesFromStringArray","inferDtype","computeStrides","strides","createNestedArray","isComplex","toNestedArray","convertBackendValuesAndArrayBuffer","makeOnesTypedArray","makeZerosTypedArray","makeZerosNestedTypedArray","assertNonNegativeIntegerDimensions","dimSize","locToIndex","locs","indexToLoc","TENSORFLOWJS_FLAGS_PREFIX","Environment","platformName","flagName","evaluationFn","setHook","flagValue","flags","keyValue","parseValue","queryString","decodeParam","lowerCaseValue","ENV","setEnvironmentGlobal","globalNameSpace","getGlobalNamespace","getGlobalMap","globalMap","singleton","Abs","Acos","Acosh","Add","AddN","All","Any","ArgMax","ArgMin","Asin","Asinh","Atan","Atanh","Atan2","AvgPool","AvgPoolGrad","AvgPool3D","AvgPool3DGrad","BatchMatMul","BatchToSpaceND","Bincount","BitwiseAnd","BroadcastArgs","Cast","Ceil","ClipByValue","Complex","ComplexAbs","Concat","Conv2D","Conv2DBackpropFilter","Conv2DBackpropInput","Conv3D","Conv3DBackpropFilterV2","Conv3DBackpropInputV2","Cos","Cosh","Cumprod","Cumsum","CropAndResize","DenseBincount","DepthToSpace","DepthwiseConv2dNative","DepthwiseConv2dNativeBackpropFilter","DepthwiseConv2dNativeBackpropInput","Diag","Dilation2D","Dilation2DBackpropInput","Dilation2DBackpropFilter","Draw","RealDiv","Einsum","Elu","EluGrad","Erf","Equal","Exp","ExpandDims","Expm1","FFT","Fill","FlipLeftRight","Floor","FloorDiv","FusedBatchNorm","GatherV2","GatherNd","Greater","GreaterEqual","Identity","IFFT","Imag","IsFinite","IsInf","IsNan","LeakyRelu","Less","LessEqual","LinSpace","Log","Log1p","LogicalAnd","LogicalNot","LogicalOr","LogicalXor","LRN","LRNGrad","Max","Maximum","MaxPool","MaxPoolGrad","MaxPool3D","MaxPool3DGrad","MaxPoolWithArgmax","Mean","Min","Minimum","MirrorPad","Mod","Multinomial","Multiply","Neg","NotEqual","NonMaxSuppressionV3","NonMaxSuppressionV4","NonMaxSuppressionV5","OnesLike","OneHot","Pack","PadV2","Pow","Prelu","Prod","RaggedGather","RaggedRange","RaggedTensorToTensor","Range","Real","Reciprocal","Relu","Reshape","ResizeNearestNeighbor","ResizeNearestNeighborGrad","ResizeBilinear","ResizeBilinearGrad","Relu6","Reverse","Round","Rsqrt","ScatterNd","TensorScatterUpdate","SearchSorted","Selu","Slice","Sin","Sinh","Sign","Sigmoid","Softplus","Sqrt","Sum","SpaceToBatchND","SplitV","Softmax","SparseFillEmptyRows","SparseReshape","SparseSegmentMean","SparseSegmentSum","SparseToDense","SquaredDifference","Square","StaticRegexReplace","StridedSlice","StringNGrams","StringSplit","StringToHashBucketFast","Sub","Tan","Tanh","Tile","TopK","Transform","Transpose","Unique","Unpack","UnsortedSegmentSum","ZerosLike","Step","FromPixels","RotateWithOffset","_FusedMatMul","FusedConv2D","FusedDepthwiseConv2D","kernelRegistry","gradRegistry","getKernel","backendName","makeKey","getGradient","getKernelsForBackend","it","registerKernel","log.warn","isTypedArrayBrowser","long","Long","wasm","low","high","unsigned","isLong","INT_CACHE","UINT_CACHE","fromInt","cachedObj","fromBits","fromNumber","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","MIN_VALUE","TWO_PWR_63_DBL","MAX_VALUE","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","fromString","radix","radixToPower","fromValue","TWO_PWR_16_DBL","TWO_PWR_24_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","radixLong","div","rem1","rem","remDiv","intval","digits","bit","thisNeg","otherNeg","addend","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","subtrahend","divisor","approx","halfThis","log2","approxRes","approxRem","numBits","lo","LongExports.default","LongExports","hexToLong","k0","k1","k2","shiftMix","fetch","numBytes","fetch64","fetch32","rotate64","hashLen16","mul","weakHashLen32WithSeeds","weakHashLen32WithSeedsStr","hashLen0to16","hashLen17to32","hashLen33to64","fingerPrint64","seed","last64","createScalarValue","encodeString","toTypedArray","noConversionNeeded","base.checkConversionForErrors","bool","requestInits","encoding","decodeString","skipTypedArray","base.isPromise","maxIndex","Profiler","backendTimer","inputs","holdResultWrapperFn","util.now","tensorVals","checkComputationForErrors","timing","kernelProfile","timeMs","extraInfo","valueContainer","Logger$1","util.rightPad","paddedName","inputShapesDescription","inputShape","inputRank","getFilteredNodesXToY","tape","xs","tensorsFromX","nodesFromX","nodeInputs","anyInputFromX","tensorsLeadToY","nodesToY","filteredTape","prunedInputs","nodeInput","prunedNode","backpropagateGradients","tensorAccumulatedGradientMap","tidy","dys","gradTensor","inputGradients","dx","util.arraysEqual","curGradient","FORMAT_LIMIT_NUM_VALS","FORMAT_NUM_FIRST_LAST_VALS","FORMAT_NUM_SIG_DIGITS","tensorToString","verbose","padPerCol","computeMaxSizePerColumn","valsLines","subTensorToString","numCols","valuesOrTuples","createComplexTuples","valToString","pad","valStr","boolNumToString","storagePerElement","complexTuple","firstValsSize","firstVals","lastVals","subshape","substrides","stride","sep","newLineSep","complexTuples","TensorBuffer","util.sizeFromShape","util.assert","util.getArrayFromDType","loc","trackerFn","opHandler","setTensorTracker","setOpHandler","Tensor","util.decodeString","trainable","getGlobalTensorClass","Variable","initialValue","tensorId","Rank","UpcastInt32AndMap","UpcastBoolAndMap","UpcastFloat32AndMap","UpcastComplex64AndMap","upcastTypeMap","upcastType","isWebGLData","isWebGPUData","makeTypesMatch","assertTypesMatch","getTensorsInContainer","walkTensorContainer","container","isRegisteredKernelInvocation","kernelInvocation","EngineState","variableName","Engine","sortedBackends","asyncInit","factory","kernel","registryFactoryEntry","promiseId","backendInstance","srcBackend","nameOrFn","ENGINE","grad","dy","gradInputs","saved","numDataIdsBefore","outInfos","numDataIdsAfter","numOutputDataIds","numMoves","dataIdsLeaked","kernelParams","isTapeOn","startingBytecount","startingNumTensors","kernelFunc","kernelOrScopeName","outTensors","outInfo","tensorsToSave","forwardFunc","saveFunc","tensors","tensor","outs","backwardsFunc","gradConfig","inputsToSave","outputsToSave","inputTensorsToSave","outputTensorsToSave","backendVals","util.isString","util.encodeString","newBytes","tensorInfo","util.bytesPerElement","startBytes","startNumTensors","gradientsFunc","tapeNode","util.makeZerosTypedArray","scopeInfo","tensorsToTrackInParent","tensorsToTrackInParentSet","oldScope","allowNoGradients","accumulatedGradientMap","ones","grads","util.isFunction","inputMap","save","gradRes","gradMap","timingInfo","getOrMakeEngine","debugValue","device_util.isBrowser","inferShape","firstElem","usedChannels","deepAssertShapeConsistency","indices","subShape","assertDtype","expectedDtype","actualDType","argName","functionName","convertToTensor","parseAsDtype","inferredDtype","inferredShape","convertToTensorArray","OP_SCOPE_SUFFIX","opName","f2","complex_","real","imag","$real","$imag","util.assertShapesMatch","makeTensor","providedSize","inferredSize","inferred","flatDimsDontMatch","DTYPE_VALUE_SIZE_MAP","CompositeArrayBuffer","bufferOrTypedArray","util.isTypedArray","startShardIndex","outputBuffer","outputArray","sliced","shard","localStart","outputStart","localEnd","outputSlice","byteIndex","check","sortedArray","middle","NUM_BYTES_STRING_LENGTH","encodeWeights","group","specs","dataPromises","spec","utf8bytes","totalNumBytes","bytesOfLength","tensorValues","concatenateTypedArrays","decodeWeights","weightData","compositeBuffer","float16Decode","quantization","quantizationSizeFactor","byteBuffer","quantizedArray","getFloat16Decoder","dtypeFactor","realTensor","imageTensor","totalByteLength","normalizedXs","useNodeBuffer","stringByteLength","arrayBufferToBase64String","base64StringToArrayBuffer","concatenateArrayBuffers","SEPARATOR","getModelJSONForModelArtifacts","artifacts","manifest","getModelArtifactsForJSONSync","modelJSON","weightSpecs","modelArtifacts","getModelArtifactsForJSON","loadWeights","getModelArtifactsInfoForJSON","getWeightSpecs","weightsManifest","computeFloat16MantisaTable","convertMantissa","mantisaTable","computeFloat16ExponentTable","exponentTable","computeFloat16OffsetTable","offsetTable","bufferUint32View","float16Bits","float32Bits","IORouterRegistry","saveRouter","loadRouter","loadOptions","handlerType","validHandlers","registerSaveRouter","loudRouter","registerLoadRouter","getSaveHandlers","getLoadHandlers","DATABASE_NAME","DATABASE_VERSION","MODEL_STORE_NAME","INFO_STORE_NAME","getIndexedDBFactory","theWindow","setUpDatabase","openRequest","BrowserIndexedDB","modelPath","modelTx","getRequest","modelArtifactsInfo","infoTx","infoStore","putInfoRequest","modelStore","putModelRequest","deleteInfoRequest","indexedDBRouter","browserIndexedDB","maybeStripScheme","BrowserIndexedDBManager","tx","getAllInfoRequest","getInfoRequest","deleteModelData","deleteModelRequest","PATH_SEPARATOR","PATH_PREFIX","INFO_SUFFIX","MODEL_TOPOLOGY_SUFFIX","WEIGHT_SPECS_SUFFIX","WEIGHT_DATA_SUFFIX","MODEL_METADATA_SUFFIX","getModelKeys","removeItems","getModelPathFromKey","BrowserLocalStorage","topology","weightBuffer","metadataString","weightDataBase64","localStorageRouter","browserLocalStorage","BrowserLocalStorageManager","URL_SCHEME_SUFFIX","ModelStoreManagerRegistry","scheme","parseURL","cloneModelInternal","destURL","deleteSource","loadHandlers","loadHandler","saveHandlers","saveHandler","sourceScheme","sourcePath","sameMedium","saveResult","listModels","schemes","schemeOut","removeModel","schemeAndPath","copyModel","moveModel","PlatformBrowser","functionRef","getNodeFetch","systemFetch","PlatformNode","util.assertNonNegativeIntegerDimensions","cast_","$x","util.isValidDtype","cast","clone_","print","engine","setBackend","registerBackend","add_","floorDiv_","floorDiv","div_","mul_","abs_","abs","acos_","acos","acosh_","acosh","addN_","$tensors","firstTensor","addN","all_","keepDims","any_","argMax_","argMax","argMin_","argMin","asin_","asin","asinh_","asinh","atan_","atan","atan2_","atan2","atanh_","atanh","computeDilation2DInfo","filterShape","dataFormat","dilations","inputChannels","$filterShape","$dataFormat","convertConv2DDataFormat","computeConv2DInfo","computePool2DInfo","inShape","filterSize","roundingMode","filterHeight","filterWidth","parseTupleParam","computePool3DInfo","filterDepth","parse3TupleParam","computeConv3DInfo","depthwise","batchSize","inHeight","inWidth","inChannels","filterChannels","strideHeight","strideWidth","dilationHeight","dilationWidth","effectiveFilterHeight","getEffectiveFilterSize","effectiveFilterWidth","padInfo","outHeight","outWidth","getPadAndOutInfo","outChannels","outShape","inDepth","strideDepth","dilationDepth","effectiveFilterDepth","outDepth","get3DPadAndOutInfo","computeOutputShape2D","fieldSize","zeroPad","computeDefaultPad","inputRows","inputCols","outputRows","round","outputCols","computeOutputShape4D","dilation","effectiveFieldSize","padAlongHeight","padAlongWidth","padAlongDepth","front","back","tupleValuesAreOne","dimA","dimB","dimC","eitherStridesOrDilationsAreOne","stridesOrDilationsArePositive","checkPadOnDimRoundingMode","opDesc","dimRoundingMode","util.isInt","reshape_","reshape","avgPool_","conv_util.eitherStridesOrDilationsAreOne","x4D","reshapedTo4D","conv_util.checkPadOnDimRoundingMode","avgPool","avgPool3d_","x5D","reshapedTo5D","avgPool3d","concat_","concat","matMul_","transposeA","transposeB","matMul","sigmoid_","sigmoid","slice_","begin","slice","tanh_","tanh","basicLSTMCell_","forgetBias","lstmKernel","lstmBias","$forgetBias","$lstmKernel","$lstmBias","$data","weighted","sliceCols","sliceSize","newC","newH","basicLSTMCell","batchToSpaceND_","blockShape","crops","prod","batchToSpaceND","xAs4D","batchNorm_","mean","variance","varianceEpsilon","$mean","$variance","$scale","$offset","batchNorm","batchNorm2d_","batchNorm2d","batchNorm3d_","batchNorm3d","batchNorm4d_","batchNorm4d","bincount_","weights","$weights","bincount","bitwiseAnd_","$y","bitwiseAnd","broadcastArgs_","s0","s1","shape1Input","shape2Input","broadcastArgs","broadcastTo_","xShape","reps","broadcastTo","ceil_","ceil","clipByValue_","clipValueMin","clipValueMax","clipByValue","concat1d_","concat1d","concat2d_","concat2d","concat3d_","concat3d","concat4d_","concat4d","conv2d_","$filter","conv_util.stridesOrDilationsArePositive","conv2d","conv1d_","x3D","reshapedTo3D","filter4D","input4D","conv1d","conv2DBackpropInput_","xShape4D","dy4D","conv2DBackpropInput","conv2dTranspose_","outputShape","conv2dTranspose","conv3d_","conv3d","conv3DBackpropInput_","xShape5D","dy5D","conv3DBackpropInput","conv3dTranspose_","conv3dTranspose","cos_","cos","cosh_","cosh","cumprod_","exclusive","reverse","cumprod","cumsum_","cumsum","denseBincount_","binaryOutput","denseBincount","depthToSpace_","blockSize","inputHeight","inputWidth","inputDepth","depthToSpace","depthwiseConv2d_","depthwiseConv2d","diag_","diag","dilation2d_","dilation2d","getBroadcastDims","inRank","dims","dim","getReductionAxes","inDim","outAxis","outDim","assertAndGetBroadcastShape","errMsg","equal_","equal","where_","$condition","broadcastShape","$broadcastedCondition","$broadcastedA","$broadcastedB","where","zerosLike_","zerosLike","divNoNan_","divResult","zeros","bEqualsZero","divNoNan","dot_","$t1","$t2","t1Inner","t2Inner","t12D","t22D","t1t2","dot","einsum_","equation","einsum","elu_","elu","ensureShape_","ensureShape","erf_","erf","axesAreInnerMostDims","combineLocations","outputLoc","reduceLoc","outIdx","reduceIdx","computeOutAndReduceShapes","aShape","reduceShape","expandShapeToKeepDim","reduceSubShape","assertAxesAreInnerMostDims","getAxesPermutation","getUndoAxesPermutation","getInnerMostAxes","numAxes","max_","min_","pow_","exp","$base","$exp","pow","scalar","sqrt_","sqrt","square_","square","sum_","sum","norm_","ord","norm","normImpl","keepDimsShape","axis_util.expandShapeToKeepDim","euclideanNorm_","euclideanNorm","exp_","expandDims_","expandDims","expm1_","expm1","tile_","tile","eye_","numRows","numColumns","batchShape","buff","eye","floor_","floor","gather_","batchDims","$indices","gather","greater_","greater","greaterEqual_","greaterEqual","imag_","isFinite_","isFinite","isInf_","isInf","isNaN_","isNaN","leakyRelu_","leakyRelu","less_","less","lessEqual_","lessEqual","linspace","localResponseNormalization_","depthRadius","bias","beta","localResponseNormalization","log_","log1p_","log1p","variableGrads","varList","specifiedVarList","specifiedNonTrainable","variable","originalVarCount","namedGrads","customGrad","neg_","neg","softplus_","softplus","logSigmoid_","logSigmoid","sub_","logSoftmax_","logits","$logits","xMax","shifted","softmax","logSoftmax","logSumExp_","logSumExp","logicalAnd_","logicalAnd","logicalNot_","logicalNot","logicalOr_","logicalOr","logicalXor_","logicalXor","INT32_MAX","searchSorted_","sortedSequence","$sortedSequence","$values","sequenceSize","valuesSize","$sortedSequence2D","$values2D","searchSorted","maxPool_","maxPool","maxPool3d_","maxPool3d","maxPoolWithArgmax_","includeBatchInIndex","maxPoolWithArgmax","maximum_","maximum","mean_","meshgrid","indexing","minimum_","minimum","mirrorPad_","paddings","shapeOffset","mirrorPad","mod_","moments_","xMean","devSquared","moments","multiRNNCell_","lstmCells","newStates","multiRNNCell","multinomial_","numSamples","numOutcomes","origRank","multinomial","notEqual_","notEqual","oneHot_","onValue","offValue","oneHot","onesLike_","onesLike","outerProduct_","v1","v2","$v1","$v2","v12D","v22D","outerProduct","pad_","constantValue","pad1d_","pad1d","pad2d_","pad2d","pad3d_","pad3d","pad4d_","pad4d","spaceToBatchND_","spaceToBatchND","pool_","windowShape","poolingType","convInfo","conv_util.computePool2DInfo","basePadding","withSpaceToBatchBasePaddings","isDilationOne","adjustedPadding","adjustedCrops","requiredSpaceToBatchPaddings","convertedPad","convertedX","padStart","origPadEnd","fullInputShape","padEndExtra","padEnd","padExtraShape","padExtraStart","padExtraEnd","pool","prelu_","$alpha","prelu","prod_","raggedGather_","paramsNestedSplits","paramsDenseValues","outputRaggedRank","$paramsNestedSplits","$paramsDenseValues","raggedGather","raggedRange_","starts","deltas","$starts","$limits","$deltas","raggedRange","raggedTensorToTensor_","rowPartitionTensors","rowPartitionTypes","$shape","$defaultValue","$rowPartitionTensors","raggedTensorToTensor","rand_","randFunction","rand","Alea","mash","Mash","prng","XorGen","strseed","math","rngname","startdenom","significance","overflow","nodecrypto","seedrandom","shortseed","mixkey","tostring","autoseed","arc4","ARC4","is_math_call","keylen","typ","stringseed","smear","alea","xor128","xorwow","xorshift7","xor4096","require$$4","tychei","require$$5","sr","require$$6","MPRandGauss","stdDeviation","truncated","seedValue","seedrandom.alea","resultX","resultY","RandGamma","v0","UniformRandom","randomGamma_","rgamma","randomGamma","randomNormal_","stdDev","randGauss","randomNormal","randomStandardNormal_","randomStandardNormal","randomUniform_","minval","maxval","randomUniform","randomUniformInt_","randomUniformInt","real_","reciprocal_","reciprocal","relu_","relu","relu6_","relu6","reverse_","reverse1d_","reverse1d","reverse2d_","reverse2d","reverse3d_","reverse3d","reverse4d_","reverse4d","round_","rsqrt_","rsqrt","selu_","selu","separableConv2d_","depthwiseFilter","pointwiseFilter","$depthwiseFilter","$pointwiseFilter","channelMultiplier","separableConv2d","setdiff1dAsync_","xVals","yVals","ySet","outputSize","setdiff1dAsync","sign_","sign","sin_","sin","sinh_","sinh","slice1d_","slice1d","slice2d_","slice2d","slice3d_","slice3d","slice4d_","slice4d","softmax_","fft_","fft","ifft_","ifft","irfft_","innerDimensionSize","complexInput","realInput","imagInput","realConjugate","imagConjugate","irfft","split_","numOrSizeSplits","rfft_","fftLength","adjustedInput","zerosShape","zerosInput","half","realValues","imagValues","realComplexConjugate","imagComplexConjugate","rfft","squaredDifference_","squaredDifference","squeeze_","squeeze","stack_","step_","stridedSlice_","beginMask","endMask","ellipsisMask","newAxisMask","shrinkAxisMask","stridedSlice","tan_","tan","tensor1d","tensor2d","tensor3d","tensor4d","tensor5d","tensor6d","validateUpdateShape","sliceDim","batchDim","shapeError","validateInput","calculateShapes","indicesRank","sliceRank","totalNd","safeSliceDim","numUpdates","tensorScatterUpdate_","$tensor","$updates","scatter_nd_util.validateInput","tensorScatterUpdate","topk_","sorted","lastDim","topk","truncatedNormal_","truncatedNormal","unique_","unsortedSegmentSum_","segmentIds","numSegments","$segmentIds","unsortedSegmentSum","unstack_","unstack","whereImpl","condShape","condVals","inBuffer","whereAsync_","whereAsync","booleanMaskAsync_","$mask","axisFrom","maskDim","tensorShape","leadingSize","targetTensorShape","reshapedTensor","reshapedMask","positivePositions","booleanMaskAsync","transpose_","perm","conjugate","transpose","movingAverage_","decay","zeroDebias","$v","$decay","one","oneMinusDecay","$step","movingAverage","scatterND_","scatterND","sparseIndices","sparseValues","numElems","numDims","sparseToDense_","$sparseIndices","$sparseValues","sparse_to_dense.validateInput","sparseToDense","gatherND_","gatherND","getNoiseShape","noiseShape","newDimension","dropout_","$noiseShape","keepProb","dropout","enclosingPowerOfTwo","cosineWindow","windowLength","even","cosArg","inTopKAsync_","$predictions","$targets","predictionsVals","targetsVals","precision","valAndInd","inTopKAsync","conv2DBackpropFilter_","conv2DBackpropFilter","getFusedDyActivation","activation","getFusedBiasGradient","dyActivation","reduceAxes","broadcast_util.getReductionAxes","applyActivation","preluActivationWeights","leakyreluAlpha","shouldFuse","gradientDepth","fusedConv2d_","unfusedConv2d","conv_util.computeConv2DInfo","$bias","broadcast_util.assertAndGetBroadcastShape","$preluActivationWeights","alphaShape","conv_util.tupleValuesAreOne","xDer","filterDer","der","biasDer","depthwiseConv2dNativeBackpropFilter_","depthwiseConv2dNativeBackpropFilter","depthwiseConv2dNativeBackpropInput_","depthwiseConv2dNativeBackpropInput","fusedDepthwiseConv2d_","unfusedDepthwiseConv2d","fusedMatMul_","unfusedMatMul","innerShapeA","innerShapeB","outerShapeA","outerShapeB","outerDimsA","outerDimsB","batchDimA","batchDimB","a3D","b3D","aDer","bDer","hammingWindow_","hammingWindow","hannWindow_","hannWindow","frame_","frameLength","frameStep","padValue","padLen","stft_","windowFn","framedSignal","windowedSignal","stft","cropAndResize_","boxes","boxInd","cropSize","extrapolationValue","$image","$boxes","$boxInd","numBoxes","cropAndResize","flipLeftRight_","flipLeftRight","grayscaleToRGB_","lastDimsIdx","lastDims","grayscaleToRGB","rgbToGrayscale_","origDtype","fltImage","rgbWeights","grayFloat","rgbToGrayscale","rotateWithOffset_","radians","fillValue","center","rotateWithOffset","nonMaxSuppSanityCheck","scores","maxOutputSize","iouThreshold","scoreThreshold","softNmsSigma","nonMaxSuppression_","$scores","nonMaxSuppression","binaryInsert","comparator","binarySearch","insertionPoint","binarySearch_","defaultComparator","compareResult","nonMaxSuppressionV3Impl","nonMaxSuppressionImpl_","nonMaxSuppressionV4Impl","padToMaxOutputSize","nonMaxSuppressionV5Impl","returnScoresTensor","returnValidOutputs","ascendingComparator","selectedIndices","selectedScores","originalScore","boxIndex","suppressBeginIndex","ignoreCandidate","iou","intersectionOverUnion","suppressWeight","validOutputs","elemsToPad","iCoord","jCoord","yminI","xminI","ymaxI","xmaxI","yminJ","xminJ","ymaxJ","xmaxJ","areaI","areaJ","intersectionYmin","intersectionXmin","intersectionYmax","intersectionXmax","weight","c1","c2","nonMaxSuppressionAsync_","boxesAndScores","boxesVals","scoresVals","nonMaxSuppressionAsync","nonMaxSuppressionWithScore_","nonMaxSuppressionWithScore","nonMaxSuppressionWithScoreAsync_","nonMaxSuppressionWithScoreAsync","nonMaxSuppressionPadded_","$maxOutputSize","$iouThreshold","$scoreThreshold","nonMaxSuppressionPadded","nonMaxSuppressionPaddedAsync_","nonMaxSuppressionPaddedAsync","resizeBilinear_","alignCorners","halfPixelCenters","$images","batchImages","resizeBilinear","resizeNearestNeighbor_","resizeNearestNeighbor","threshold_","inverted","threshValue","RED_INTENCITY_COEF","GREEN_INTENCITY_COEF","BLUE_INTENCITY_COEF","totalPixelsInImage","$threshold","grayscale","$r","$histogram","otsu","invCondition","histogram","bestThresh","bestInBetVar","cInBetVar","classFirst","classSecond","meanFirst","meanSec","weightForeground","weightBack","meanFirstDivA","meanSecFill","meanSecAdd","meanSecMul","cInBetVarSubA","cInBetVarSubB","cInBetVarMul","transform_","interpolation","fillMode","$transforms","bandPart_","numLower","numUpper","$numLower","$numUpper","inBand","zero","mat","bandPart","gramSchmidt_","inputIsTensor2D","ys","xs1d","proj","gramSchmidt","qr_","fullMatrices","qr2d","outerDimsProd","x2ds","q2ds","r2ds","x2d","q2d","r2d","one2D","iters","rTemp","wTemp","qTemp","rjEnd1","normX","rjj","u1","wPre","tau","rjEndAll","tauTimesW","wT","rTimesTau","tawTimesWT","qAllJEnd","qTimesTau","qr","Reduction","computeWeightedLoss_","losses","reduction","$losses","weightedLoss","broadcastFactor","broadcastedWeights","numNonZeros","computeWeightedLoss","absoluteDifference_","labels","$labels","absoluteDifference","cosineDistance_","cosineDistance","hingeLoss_","hingeLoss","huberLoss_","deltaScalar","quadratic","linear","huberLoss","logLoss_","epsilon","epsilonScalar","l1","l2","logLoss","meanSquaredError_","meanSquaredError","sigmoidCrossEntropyWithLogits_","outputXTarget","sigmoidOutput","sigmoidCrossEntropy_","multiClassLabels","labelSmoothing","$multiClassLabels","labelSmoothingScalar","sigmoidCrossEntropy","softmaxCrossEntropyWithLogits_","lse","logResult","costVector","dyShape","softmaxCrossEntropy_","onehotLabels","$onehotLabels","numClasses","softmaxCrossEntropy","sparseFillEmptyRows_","denseShape","$denseShape","sparseFillEmptyRows","sparseReshape_","inputIndices","$inputIndices","$inputShape","$newShape","sparseReshape","sparseSegmentMean_","sparseSegmentMean","sparseSegmentSum_","sparseSegmentSum","stringNGrams_","dataSplits","nGramWidths","leftPad","padWidth","preserveShortSequences","$dataSplits","stringNGrams","stringSplit_","skipEmpty","$input","$delimiter","stringSplit","stringToHashBucketFast_","numBuckets","stringToHashBucketFast","staticRegexReplace_","replaceGlobal","staticRegexReplace","spectral","linalg","sparse","GLOBAL_CUSTOM_OBJECT","GLOBAL_CUSTOM_NAMES","Serializable","SerializationMap","registerClass","pkg","registerName","Optimizer","returnCost","gradArray","weightValues","AdadeltaOptimizer","learningRate","rho","variableGradients","gradient","accumulatedGrad","accumulatedUpdate","newAccumulatedGrad","newAccumulatedUpdate","variableCount","AdagradOptimizer","initialAccumulatorValue","AdamOptimizer","beta1","beta2","varNames","oneMinusAccBeta1","oneMinusAccBeta2","firstMoment","secondMoment","newFirstMoment","newSecondMoment","biasCorrectedFirstMoment","biasCorrectedSecondMoment","AdamaxOptimizer","variableNames","lr","weightedInfNorm","ut0","ut1","newWeightedInfNorm","SGDOptimizer","MomentumOptimizer","momentum","useNesterov","accumulation","newAccumulation","RMSPropOptimizer","centered","accumulatedMeanSquare","accumulatedMoments","newAccumulatedMeanSquare","accumulatedMeanGrad","newAccumulatedMeanGrad","gradContribution","newAccumulatedMoments","OPTIMIZERS","registerOptimizers","optimizer","DEFAULT_FILE_NAME_PREFIX","DEFAULT_JSON_EXTENSION_NAME","DEFAULT_WEIGHT_DATA_EXTENSION_NAME","defer","BrowserDownloads","fileNamePrefix","weightsURL","modelJsonURL","jsonAnchor","weightDataAnchor","BrowserFiles","jsonReader","modelTopology","modelArtifactsPromise","pathToFile","weightFileReader","basenames","fileNames","pathBasename","browserDownloadsRouter","browserDownloads","browserFiles","monitorPromisesProgress","startFraction","endFraction","checkPromises","checkFraction","resolvedPromise","registerMonitor","loadWeightsAsArrayBuffer","fetchURLs","fetchFunc","requests","fetchURL","bufferPromises","filePathPrefix","weightNames","requestInit","weightsLoaderFactory","fetchUrls","fetchWeightsFunction","groupIndicesToFetchMap","groupWeightsToFetch","weightsFound","allManifestWeightNames","manifestGroupConfig","groupIndex","groupOffset","weightsEntry","rawDtype","weightsBytes","enqueueWeightsForFetchingFn","weightName","weightIndex","weightsNotFound","groupIndicesToFetch","shouldFetch","filepath","fetchUrl","weightsTensorMap","bufferIndexOffset","numBuffers","weightsBuffer","nameToTensorMap","OCTET_STREAM_MIME_TYPE","JSON_TYPE","HTTPRequest","modelTopologyAndWeightManifest","modelConfigRequest","weightPath","pathPrefix","urlPromises","weightsGroup","lastSlash","lastSearchParam","isHTTPScheme","httpRouter","isHTTP","urlItem","http","browserHTTPRequest","PassthroughLoader","PassthroughSaver","PassthroughAsync","fromMemory","trainingConfig","fromMemorySync","withSaveHandler","withSaveHandlerSync","fromPixels2DContext","fromPixels_","numChannels","isPixelData","isImageData","isVideo","isImage","isCanvasLike","isImageBitmap","numPixels","validateImgTensor","img","toPixels","$img","originalImgTensor","fromPixels","prepareAndValidate","tensorRank","indicesShape","nResult","resultShape","NEW_AXIS","SHRINK_AXIS","assertParamsValid","computeOutShape","isSliceContinous","firstNonOneAxis","computeFlatOffset","flatOffset","parseSliceParams","begin_","xRank","size_","sliceInfo","stridesNonNull","ellipsisSeen","sparseSpec","denseSpec","buildDenseSpec","isIdentity","sliceDim0","isSimpleSlice","processingShape","finalShape","shrinkI","dimI","masks","validRange","beginAndEndMasked","xFwd","canonical","takeAllInDimension","intervalLength","knownInterval","sizeI","denseDim","gatherIndex","dense","fullIndex","strideI","assertParamsConsistent","shapes","firstShape","RowPartitionType","combineRaggedTensorToTensorShapes","raggedRank","valueShape","valueDim","outputShapeDimIndex","outputShapeDim","getRowPartitionTypesHelper","rowPartitionTypeStrings","stringToType","typeStr","getRaggedRank","validateDefaultValueShape","defaultValueShape","defaultNDims","valuesNDims","defaultDim","getImageCenter","imageHeight","imageWidth","getReshaped","batchToSpace","reshaped","spatialLength","getPermuted","reshapedRank","blockShapeRank","permuted","permutedBeforeBatch","permutedAfterBatch","getReshapedPermuted","reshapedPermuted","getSliceBeginCoords","sliceBeginCoords","getSliceSize","uncroppedShape","SELU_SCALEALPHA","SELU_SCALE","ERF_P","ERF_A1","ERF_A2","ERF_A3","ERF_A4","ERF_A5","mergeRealAndImagArrays","splitRealAndImagArrays","complexWithEvenIndex","complexWithOddIndex","getComplexWithIndex","assignToTypedArray","exponents","inverse","exponent","ARROW","ARROW_REGEX","COMMA","ELLIPSIS","decodeEinsumEquation","numTensors","numArrows","inputString","outputString","inputTerms","numInputs","allDims","dimName","inputTerm","idDims","numOutDims","summedDims","getEinsumPermutation","nDims","permutationIndices","checkEinsumDimSizes","dimSizes","getEinsumComputePath","nSteps","computedTermIndices","summedDim","termIndices","findTermsWithDim","termIndex","isIdentityPermutation","prepareSplitSize","splitSizes","numOfNegs","negIndex","getSparseFillEmptyRowsIndicesDenseShapeMismatch","indicesLength","getSparseFillEmptyRowsNegativeIndexErrorMessage","getSparseFillEmptyRowsOutOfRangeIndexErrorMessage","getSparseReshapeMultipleNegativeOneOutputDimErrorMessage","dim1","dim2","getSparseReshapeNegativeOutputDimErrorMessage","getSparseReshapeEmptyTensorZeroOutputDimErrorMessage","getSparseReshapeInputOutputMultipleErrorMessage","inputSize","getSparseReshapeInputOutputMismatchErrorMessage","getSparseSegmentReductionNegativeSegmentIdsErrorMessage","getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage","getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage","getSparseSegmentReductionIndicesOutOfRangeErrorMessage","indexValue","collectGatherOpShapeInfo","outerSize","fromUint8ToStringArray","fromStringArrayToUint8","strings","DataType","SaverDef","CheckpointFormatVersion","CUSTOM_OPS","getRegisteredOp","getParamValue","tensorMap","resourceManager","inputParam","shiftedStart","getTensor","util.toNestedArray","attrParam","tensorsMap","nodeName","parseNodeName","contextId","getNodeNameWithContextId","getTensorsForCurrentContext","getNodeNameAndIndex","outputName","isCacheEnabled","cachedResult","getPadding","explicitPadding","cloneTensor","json","OperationMapper","arithmetic","basicMath","convolution","creation","dynamic","evaluation","graph","hashTable","logical","matrices","normalization","sliceJoin","transformation","mappersJson","signature","tfNodes","placeholders","initNodes","inputNodeNameToKey","outputNodeNameToKey","allNodes","inputNode","outputIndex","newNode","getStringParam","getStringArrayParam","getNumberParam","getNumericArrayParam","getBoolParam","getBoolArrayParam","getTensorShapeParam","getTensorShapeArrayParam","getDtypeParam","getDtypeArrayParam","getFuncParam","functionDef","parseDtypeParam","returnNodeMap","nameMap","decodeBase64","parseStringParam","keepCase","def","tensorflow.DataType","parseTensorShapeParam","NodeValueImpl","executeOp","tfOps","assertShapesMatchAllowUndefinedSize","dim0","fullDefinedShape","elementShape","inferElementShape","listElementShape","partialShape","mergeElementShape","notfullDefinedShape","elementShapeA","elementShapeB","TensorArray","identicalElementShapes","dynamicSize","clearAfterRead","keepIds","tensorWithState","cumulativeLengths","elementPerRow","sizes","TensorList","elementDtype","maxNumElements","numElements","outputElementShape","reshapedTensors","destTensorList","fromTensor","tensorElementShape","tensorList","reserve","scatter","shapeWithoutFirstDim","thenFunc","elseFunc","bodyFunc","condFunc","condResult","argIds","condValue","origResult","resultIds","pred","frameId","tensorArray","writeTensor","writeTensorArray","readId","readIndex","gatherId","gatherIndices","gatherDtype","scatterId","scatterIndices","scatterTensor","scatterTensorArray","concatId","concatTensorArray","concatDtype","splitId","splitTensor","lengths","splitTensorArray","sizeId","sizeTensorArray","closeId","closeTensorArray","idTensor","elementDType","numElementsParam","fusedConvAndDepthWiseParams","extraOp","activationFunc","isBiasAdd","noBiasAdd","isPrelu","isBatchNorm","numArgs","biasArg","preluArg","kernelSize","nmsParams","summarize","HashTable","keyDType","valueDType","tfOps.scalar","$keys","keysLength","valuesLength","existingTableHandle","outputNestedSplits","outputDenseValues","rtNestedSplits","rtDenseValues","squeezedShape","sameShape","outputIndices","outputValues","emptyRowIndicator","reverseIndexMap","nGrams","nGramsSplits","tfc.tidy","arithmetic.executeOp","basicMath.executeOp","control.executeOp","convolution.executeOp","creation.executeOp","dynamic.executeOp","evaluation.executeOp","image.executeOp","graph.executeOp","logical.executeOp","matrices.executeOp","normalization.executeOp","ragged.executeOp","reduction.executeOp","sliceJoin.executeOp","sparse.executeOp","spectral.executeOp","string.executeOp","transformation.executeOp","hashTable.executeOp","opMapper","tfc.util.isPromise","ExecutionContext","weightMap","tensorArrayMap","tensorListMap","functionMap","parseNodeNameCache","frameName","getExecutionSubgraph","usedNodes","missingInputs","dynamicNode","syncInputs","inputNodeNames","initNodeNames","frontier","isControlFlow","isDynamicShape","isHashTable","getNodesInTopologicalOrder","executionInfo","inputNodes","isUsed","predefinedNodes","nameToNode","inCounts","inCount","orderedNodeNames","orderedNodes","filteredOrderedNodes","filterPredefinedReachableNodes","validateNodesExecutionOrder","predefinedReachableNodeNames","NodesExecutionOrderError","nodeNameToOrder","predefinedNodeNames","isPredefined","willBeExecutedNodeNames","willBeExecuted","getNodeLiveUntilMap","INF_LIFE","selfLifespans","nodeOrder","getSelfLifeSpan","selfLife","liveUntilOrders","liveUntilMap","liveUntilOrder","liveUntilNode","CONTROL_FLOW_OPS","DYNAMIC_SHAPE_OPS","HASH_TABLE_OPS","GraphExecutor","weightIds","sortedInputs","sortedOutputs","outNames","inNames","nodeLiveUntilMap","tensorsList","outputNodeNames","outputNodeNameSet","outputNodes","compilationKey","compilation","tensorsToKeep","util.isPromise","intermediateTensorConsumerCount","liveUntilNodes","isNonDisposableNode","nodeToDispose","isFunctionExecution","outputIds","inputIds","mappedInputs","outputNames","added","missingOutputs","alternativeMsg","notInGraph","normalizedName","ResourceManager","hashTableNameToHandle","hashTableMap","TFHUB_SEARCH_PARAM","DEFAULT_MODEL_NAME","GraphModel","modelUrl","tfio","io","loadResult","initializer","handlerOrURL","outputTensors","outputTensorsArray","outputTensorMap","outputTensor","signatureInputs","numCapturedInputs","inputIndex","resourceId","signatureOutputs","newMap","loadGraphModel","getTFHubUrl","n.toPixels","n.fromPixels","i.assert","CppDType","FusableActivation","wasmFusedMatMul","fusedBatchMatMul","aId","bId","biasId","biasData","preluActivationWeightsId","fusedActivation","leftDim","rightDim","outId","aShapeBytes","bShapeBytes","_fusedMatMulConfig","createUnaryKernelConfig","outType","wasmFunc","setupFunc","xId","absConfig","acosConfig","acoshConfig","createBinaryKernelConfig","supportsFullBroadcast","outputType","backend_util.assertAndGetBroadcastShape","addConfig","addn","inputIdsBytes","addNConfig","inVals","identityConfig","wasmTranspose","reducedShape","removeOneSizeDims","permIsNoOp","cloned","permBytes","xShapeBytes","newPerm","minValIdx","transposeConfig","permuteAxesAndTranspose","originalAxes","util.parseAxisParam","permutedAxes","backend_util.getAxesPermutation","xTransposed","inputWasTransposed","backend_util.getInnerMostAxes","wasmAll","inputId","transposed","transposedId","backend_util.assertAxesAreInnerMostDims","backend_util.computeOutAndReduceShapes","reduceSize","backend_util.expandShapeToKeepDim","allConfig","wasmAny","anyConfig","createArgMinMaxKernelConfig","innerSize","argMaxConfig","argMinConfig","asinConfig","asinhConfig","atanConfig","atan2Config","atanhConfig","wasmAvgPool","backend_util.computePool2DInfo","padTop","padRight","padBottom","padLeft","avgPoolConfig","wasmAvgPool3D","avgPool3D","backend_util.computePool3DInfo","avgPool3DConfig","wasmAvgPool3DGrad","avgPool3DGrad","avgPool3DGradConfig","wasmAvgPoolGrad","avgPoolGrad","avgPoolGradConfig","xSize","util.inferFromImplicitShape","reshapeConfig","wasmBatchMatMul","batchMatMul","aRank","bRank","a3dShape","b3dShape","a3d","b3d","a3dId","b3dId","batchMatMulConfig","assertNotComplex","simpleAbsImpl","resultValues","cpuBackend","createSimpleBinaryKernelImpl","bShape","aVals","bVals","resultRank","resultStrides","util.computeStrides","resultSize","util.getTypedArrayFromDType","aStrides","bStrides","aBroadcastDims","backend_util.getBroadcastDims","bBroadcastDims","util.indexToLoc","aLoc","util.locToIndex","bLoc","bIndex","realVals","imagVals","complexInfo","complexConfig","realVal","realConfig","castImpl","inputType","util.toTypedArray","resultData","zerosTensorInfo","floatX","realPart","util.hasEncodingLoss","resultType","castConfig","binaryKernelFunc","simpleImpl","complexImpl","decodedAVals","backend_util.fromUint8ToStringArray","decodedBVals","$dtype","$aComplex","$aComplexVals","aReal","aImag","aRealVals","aImagVals","$bComplex","$bComplexVals","bReal","bImag","bRealVals","bImagVals","resultRealData","resultImagData","resultReal","resultImag","createComplexBinaryKernelImpl","resultRealVals","resultImagVals","backend_util.mergeRealAndImagArrays","aIdx","bIdx","opResult","addImpl","addComplexImpl","bincountImpl","weightsVals","weightsDtype","weightsShape","weightsSize","outVals","bincountReduceImpl","xBuf","weightsBuf","outBuf","bitwiseAndImpl","bitwiseAndConfig","createSimpleUnaryImpl","unaryKernelFunc","unaryKernelFuncFromImpl","unaryImpl","ceilImpl","ceilConfig","concatImpl","simplyConcat","colOffset","decodedData","tIdx","resIdx","equalImpl","equalConfig","expImpl","expConfig","expm1Impl","expm1Config","floorImpl","floorConfig","floorDivImpl","floorDivConfig","gatherNdImpl","indicesData","paramsBuf","numSlices","paramsShape","paramsSize","flattenIndex","gatherV2Impl","indicesBuf","flattenOutputShape","originalLoc","batchIdx","indicesIdx","indicesIndex","originalIndex","greaterImpl","greaterConfig","greaterEqualImpl","greaterEqualConfig","lessImpl","lessConfig","lessEqualImpl","lessEqualConfig","linSpaceImpl","logImpl","logConfig","maxImpl","maximumImpl","aValue","bValue","maximumConfig","minimumImpl","minimumConfig","multiplyImpl","multiplyComplexImpl","multiply","multiplyConfig","negImpl","xDtype","minusOne","util.createScalarValue","negConfig","notEqualImpl","notEqualConfig","transposeImpl","xStrides","newStrides","newLoc","prodImpl","reductionAxes","outDtype","permutation","permutedX","intermediateTensorInfos","prodConfig","validateIndices","numParams","locString","validateSplits","numParamsDenseValues","splits","lastSplit","makeSplits","valueSlices","numSplits","outSplits","nrows","rowLength","outSplitsOutDim","getSplits","splitsOut","computeFlatOuterDims","orig","outDims","writeValueSlices","paramsDenseValuesShape","valueSize","valuesShape","denseM","valuesM","outPos","paramsDenseValuesDType","valuesOut","raggedGatherImpl","paramsNestedSplitsShapes","raggedRangeImpl","startsShape","startsDType","limitsShape","deltasShape","broadcastStarts","broadcastLimits","broadcastDeltas","inSizes","nRows","nVals","valueIndex","rowSize","backend_util.RowPartitionType","RaggedTensorToTensorOp","shapeShape","valuesDType","rowPartitionValues","rowPartitionValuesShapes","backend_util.getRowPartitionTypesHelper","backend_util.getRaggedRank","dimension","rowPartitionTensor","rowSplit","tensorLength","currentWidth","valueRowIds","indexLength","firstEqualIndex","firstEqualIndexValue","tShape","isPartial","makeShape","firstDim","backend_util.validateDefaultValueShape","backend_util.combineRaggedTensorToTensorShapes","firstDimension","outputIndexMultiplier","firstDimensionOutput","minDimension","currentOutputIndex","parentOutputIndex","rowSplitSize","realLength","parentOutputIndexCurrent","indexSize","currentOutputColumn","currentValueRowId","nextValueRowId","partitionType","firstPartitionTensor","firstPartitionType","valuesBase","outputBase","valueElementSize","outputIndexSize","srcShape","defaultValueTensor","srcStart","dstStart","dstEnd","srcI","dstI","dst","copyArray","raggedTensorToTensorImpl","shapesShape","rangeImpl","sameStartStop","increasingRangeNegativeStep","decreasingRangePositiveStep","rsqrtImpl","rsqrtConfig","scatterImpl","sumDupeIndices","flattenShape","updatesData","sigmoidConfig","sliceImpl","isContinous","slice_util.isSliceContinous","slice_util.computeFlatOffset","inBuf","outLoc","inLoc","backend_util.fromStringArrayToUint8","$begin","$size","slice_util.parseSliceParams","slice_util.assertParamsValid","sliceConfig","sparseFillEmptyRowsImpl","indicesDType","indicesCount","denseRows","backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch","rowsAreOrdered","lastIndicesRow","csrOffset","backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage","backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage","allRowsFull","rowEmpty","fullIndicesCount","filledCount","outputI","startingIndex","sparseReshapeImpl","inputIndicesShape","inputDType","targetShape","denseSize","nnz","outputRank","product","unknownIndex","backend_util\n .getSparseReshapeMultipleNegativeOneOutputDimErrorMessage","backend_util.getSparseReshapeNegativeOutputDimErrorMessage","backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage","missing","backend_util.getSparseReshapeInputOutputMultipleErrorMessage","backend_util.getSparseReshapeInputOutputMismatchErrorMessage","inputStrides","outputStrides","newIndices","sparseSegmentReductionImpl","isMean","numIndices","inputFlat","numCol","backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage","outputLength","uninitializedIndex","outIndex","backend_util\n .getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage","backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage","backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage","sqrtConfig","squaredDifferenceImpl","squaredDifferenceConfig","staticRegexReplaceImpl","staticRegexReplaceConfig","stridedSliceImpl","StringNGramsOp","nGramWidth","splitIndex","outputStartIndex","numNGrams","nGramIndex","leftPadding","rightPadding","numTokens","dataStartIndex","nGramSize","numSeparators","nGram","nextNGramIndex","appendToNGram","inputDataSize","splitsSize","prevSplit","validSplits","numBatchItems","outputStartIdx","dataLength","stringNGramsImpl","delimiters","tokenStart","stringSplitImpl","maxNumEntries","prevTokensLength","nEntries","stringToHashBucketFastImpl","util.fingerPrint64","subImpl","subComplexImpl","subConfig","tileImpl","comparePair","valueDiff","newLeft","newRight","util.swap","topKImpl","allTopKVals","allTopKIndices","outOffset","topKVals","topKIndices","uniqueImpl","$axis","uniqueElements","inputBuffer","uniqueIndices","is1DTensor","axisValues","existingIndex","uniqueIndex","outputTmpShape","uniqueElementIndex","outData","sliceImplCPU","xStride","beginI","beginJ","endI","xOffset","xStride1","xStride2","beginK","endJ","xStride3","endK","beginL","backend_util.getReshaped","backend_util.getPermuted","backend_util.getReshapedPermuted","backend_util.getSliceBeginCoords","backend_util.getSliceSize","xReshaped","xTransposedReshaped","batchToSpaceNDConfig","wasmBincount","hasWeights","bincountConfig","s0Vals","s1Vals","broadcastArgsConfig","wasmClip","clip","clipByValueConfig","backend_util.assertParamsConsistent","backend_util.computeOutShape","$inputs","inputs2D","inputsValShapes","concatImplCPU","finalOutShape","sumInnerDims","innerDims","innerDim","inOffset","concatConfig","wasmConv2d","filterId","backend_util.convertConv2DDataFormat","backend_util.computeConv2DInfo","outputChannels","isSamePad","conv2DConfig","wasmConv2DBackpropInput","topPad","isChannelsLast","dxStrides","dyStrides","fltS0","fltS1","fltS2","xBatchStride","xRowStride","xColStride","xChannelStride","yBatchStride","yRowStride","yColStride","yChannelStride","dyId","conv2DBackpropInputConfig","wasmConv3D","conv3D","backend_util.computeConv3DInfo","conv3DConfig","wasmConv3DBackpropFilterV2","conv3DBackpropFilterV2","dw","conv3DBackpropFilterV2Config","wasmConv3DBackpropInputV2","conv3DBackpropInputV2","conv3DBackpropInputV2Config","cosConfig","coshConfig","InterpolationMethod","wasmCropAndResize","cropHeight","cropWidth","imagesData","castedData","imagesId","boxesId","boxIndId","imagesShapeBytes","cropAndResizeConfig","wasmCumprod","permutedAxis","permutedOut","finalDim","permutedXId","permutedOutId","undoPermutation","backend_util.getUndoAxesPermutation","cumprodConfig","wasmCumsum","cumsumConfig","wasmDenseBincount","denseBincountConfig","wasmDepthToSpace","outputHeight","outputWidth","outputDepth","xStridesBytes","outputShapeBytes","outStridesBytes","depthToSpaceConfig","wasmDepthwiseConv2d","$dilations","depthwiseConv2dNativeConfig","wasmDiag","diagConfig","wasmDilation2D","dilation2D","dilationInfo","backend_util.computeDilation2DInfo","dilation2DConfig","wasmDilation2DBackpropFilter","dilation2DBackpropFilter","gradients","dilation2DBackpropFilterConfig","wasmDilation2DBackpropInput","dilation2DBackpropInput","dilation2DBackpropInputConfig","eluConfig","wasmEluGrad","eluGrad","eluGradConfig","erfConfig","$dim","expandDimsConfig","fillConfig","wasmFlipLeftRight","imageId","flipLeftRightConfig","wasmBatchNorm","fusedBatchNorm","meanId","varianceId","offsetId","scaleId","fusedBatchNormConfig","wasmFusedConv2d","fusedConv2d","fusedConv2DConfig","wasmFusedDepthwiseConv2d","fusedDepthwiseConv2d","fusedDepthwiseConv2DConfig","wasmGatherNd","gatherNd","gather_util.prepareAndValidate","indicesId","stridesBytes","gatherNdConfig","wasmGather","gatherV2","parsedAxis","indicesVals","axisDim","shapeInfo","backend_util.segment_util.collectGatherOpShapeInfo","flattenX","indicesSize","stridesSize","gatherV2Config","isFiniteConfig","isInfConfig","isNaNConfig","leakyReluConfig","wasmLinSpace","linSpace","numInt","linSpaceConfig","log1pConfig","logicalAndConfig","logicalNotConfig","logicalOrConfig","logicalXorConfig","wasmLRN","lrn","lrnConfig","wasmLRNGrad","lrnGrad","lrnGradConfig","wasmMax","maxConfig","wasmMaxPool","maxPoolConfig","wasmMaxPool3D","maxPool3D","maxPool3DConfig","wasmMaxPool3DGrad","maxPool3DGrad","maxPool3DGradConfig","wasmMaxPoolGrad","maxPoolGrad","maxPoolGradConfig","wasmMaxPoolWithArgmax","backend_util.eitherStridesOrDilationsAreOne","pooled","maxPoolWithArgmaxConfig","wasmMean","castedInput","meanConfig","wasmMin","minConfig","MirrorPaddingMode","wasmMirrorPad","prePaddingsFlat","padTuple","postPaddingsFlat","prePaddingsBytes","postPaddingsBytes","mirrorPadConfig","softmaxConfig","wasmMultinomial","probabilities","numEvents","multinomialConfig","modConfig","parseResultStruct","resOffset","pSelectedIndices","selectedSize","pSelectedScores","pValidOutputs","scoresId","nonMaxSuppressionV3Config","nonMaxSuppressionV4","selectedIndicesTensor","validOutputsTensor","nonMaxSuppressionV4Config","selectedScoresTensor","nonMaxSuppressionV5Config","wasmOneHot","oneHotConfig","onesLikeConfig","expandedTensors","expandedT","packConfig","wasmPadV2","padV2Config","powConfig","wasmPrelu","weightsId","preluConfig","wasmProd","rangeImplCPU","rangeConfig","realDivConfig","reciprocalConfig","reluConfig","relu6Config","wasmResizeBilinear","oldHeight","oldWidth","xData","resizeBilinearConfig","wasmResizeBilinearGrad","resizeBilinearGrad","resizeBilinearGradConfig","wasmResizeNearestNeighbor","resizeNearestNeighborConfig","wasmResizeNearestNeighborGrad","resizeNearestNeighborGrad","resizeNearestNeighborGradConfig","wasmReverse","axesBytes","outShapeBytes","reverseConfig","wasmRotate","backend_util.getImageCenter","fillIsBlack","fullOpacityValue","fillValues","fillBytes","rotateWithOffsetConfig","roundConfig","wasmScatterNd","scatterNd","scatter_util.calculateShapes","updatesId","scatterNdConfig","wasmSearchSorted","searchSortedConfig","wasmSelect","conditionId","tId","eId","cRank","tRank","selectConfig","seluConfig","signConfig","sinConfig","sinhConfig","softplusConfig","completePaddings","paddedX","reshapedPaddedShape","permutedReshapedPaddedPermutation","paddedXReshaped","paddedXT","spaceToBatchNDConfig","wasmSparseFillEmptyRows","maxOutputIndicesShape","valuesId","defaultValueId","outputIndicesId","outputValuesId","emptyRowIndicatorId","reverseIndexMapId","exceptionValues","exceptionValuesId","exceptionValuesArray","exceptionMessage","resizedIndices","resizedValues","sparseFillEmptyRowsConfig","wasmSparseReshape","inputIndicesId","inputShapeId","newShapeId","newIndicesId","outputShapeId","backend_util.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage","inputShapeValues","outputShapeValues","sparseReshapeConfig","wasmSparseSegmentReduction","sparseSegmentReduction","segmentIdsBack","backend_util\n .getSparseSegmentReductionNegativeSegmentIdsErrorMessage","segmentIdsId","outputId","backend_util\n .getSparseSegmentReductionNegativeSegmentIdsErrorMessage","sparseSegmentMeanConfig","sparseSegmentSumConfig","wasmSparseToDense","backend_util.calculateShapes","sparseIndicesId","sparseValuesId","sparseToDenseConfig","splitV","backend_util.prepareSplitSize","xSliceSize","xSlice","splitVConfig","squareConfig","wasmStep","stepConfig","wasmStridedSlice","finalShapeSparse","$end","$strides","slice_util.sliceInfo","slice_util.computeOutShape","beginBytes","endBytes","stridedSliceConfig","stringNGramsImplCPU","nGramsOut","nGramsOutData","nGramsSplitsOut","stringNGramsConfig","inputVals","delimiterVals","stringSplitImplCPU","indicesOut","valuesOutData","shapeOut","stringSplitConfig","stringToHashBucketFastImplCPU","stringToHashBucketFastConfig","wasmSum","sumConfig","tanConfig","tanhConfig","wasmTensorScatterUpdate","tensorScatterUpdateConfig","wasmTile","newShapeBytes","tileConfig","wasmTopK","outValues","outValuesId","outIndices","outIndicesId","topKConfig","wasmTransform","transformsId","interpolationModeId","fillModeId","transformConfig","uniqueImplCPU","uniqueConfig","unpack","numOutputs","unpackConfig","zerosLikeConfig","kernelConfigs","kernelConfig","WasmBackendModuleThreadedSimd","_scriptDir","GROWABLE_HEAP_I8","wasmMemory","updateGlobalBufferAndViews","HEAP8","GROWABLE_HEAP_U8","HEAPU8","GROWABLE_HEAP_I32","HEAP32","GROWABLE_HEAP_U32","HEAPU32","GROWABLE_HEAP_F64","HEAPF64","Module","readyPromiseResolve","readyPromiseReject","beforeListeners","moduleOverrides","quit_","toThrow","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_PTHREAD","scriptDirectory","locateFile","read_","readAsync","readBinary","logExceptionOnExit","ExitStatus","fs","nodePath","binary","isFileURI","onload","onerror","keepRuntimeAlive","nodeWorkerThreads","defaultPrint","defaultPrintErr","wasmBinary","noExitRuntime","wasmModule","ABORT","EXITSTATUS","UTF8Decoder","UTF8ArrayToString","heapOrArray","maxBytesToRead","endIdx","endPtr","u0","u2","UTF8ToString","ptr","stringToUTF8Array","heap","maxBytesToWrite","startIdx","stringToUTF8","outPtr","INITIAL_MEMORY","wasmTable","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","preRun","addOnPreRun","callRuntimeCallbacks","initRuntime","postRun","addOnPostRun","addOnInit","runDependencies","dependenciesFulfilled","addRunDependency","removeRunDependency","what","dataURIPrefix","isDataURI","wasmBinaryFile","getBinary","getBinaryPromise","createWasm","asmLibraryArg","receiveInstance","registerTLSInit","numWorkersToLoad","PThread","receiveInstantiationResult","instantiateArrayBuffer","instantiateAsync","ASM_CONSTS","killThread","pthread_ptr","__emscripten_thread_free_data","cancelThread","cleanupThread","spawnThread","threadParams","_proc_exit","_emscripten_proxy_to_main_thread_js","exitJS","implicit","exitOnMainThread","_exit","handleException","pthreadPoolSize","onFinishedLoading","cmd","_pthread_self","targetWorker","executeNotifiedProxyingQueue","knownHandlers","pthreadMainJs","establishStackSpace","stackTop","stackSize","stackMax","_emscripten_stack_set_limits","stackRestore","returnCode","wasmTableMirror","getWasmTableEntry","funcPtr","invokeEntryPoint","__emscripten_thread_exit","tlsInitFunc","___emscripten_init_main_thread_js","__emscripten_thread_init","___emscripten_thread_cleanup","thread","pthreadCreateProxied","startRoutine","___pthread_create_js","transferList","__emscripten_default_pthread_stack_size","nowIsMonotonic","__emscripten_get_now_is_monotonic","__emscripten_proxy_execute_task_queue","__emscripten_notify_task_queue","targetThreadId","currThreadId","mainThreadId","__emscripten_set_offscreencanvas_size","_abort","_emscripten_check_blocking_allowed","_emscripten_date_now","getHeapMax","_emscripten_get_heap_max","_emscripten_get_now","_emscripten_memcpy_big","_emscripten_num_logical_cores","withStackSave","stackSave","sync","numCallArgs","outerArgs","serializedNumCallArgs","stackAlloc","_emscripten_run_in_main_runtime_thread_js","_emscripten_receive_on_main_thread_js_callArgs","_emscripten_receive_on_main_thread_js","isEmAsmConst","proxiedFunctionTable","emscripten_realloc_buffer","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","alignUp","multiple","cutDown","overGrownHeapSize","newSize","_emscripten_unwind_to_js_event_loop","_fd_close","_fd_seek","offset_low","offset_high","whence","newOffset","printCharBuffers","printChar","_fd_write","iov","iovcnt","pnum","getCFunc","ident","writeArrayToMemory","ccall","returnType","argTypes","toC","convertReturnValue","cArgs","onDone","cwrap","numericArgs","numericRet","calledRun","runCaller","doRun","listenersAdded","actualModule","tmpDispose","wasmWorkerContents","WasmBackendModule","wasmFactoryThreadedSimd","wasmFactoryThreadedSimd_import.default","wasmFactoryThreadedSimd_import","wasmFactory","wasmFactory_import.default","wasmFactory_import","BackendWasm","threadsCount","stringBytes","memoryOffset","typedArrayFromBuffer","createInstantiateWasmFunc","imports","util.fetch","getPathToWasmBinary","simdSupported","threadsSupported","wasmModuleFolder","wasmFileMap","factoryConfig","blob","wasmPathPrefix","customFetch","initAborted","wasmPath","voidReturnType","wasmBinaryNames","setWasmPaths","prefixOrFileMap","usePlatformFetch","missingPaths","WASM_PRIORITY","kernel_impls.whereImpl","MathBackendCPU","backend_util.warn","encodedValues","tensorData","complexTensorInfos","util.convertBackendValuesAndArrayBuffer","preluImpl","xValue","$xSize","sharedDim","a3dValues","b3dValues","a3dStrides","b3dStrides","aBatch","aOuterStep","aInnerStep","bInnerStep","bOuterStep","bBatch","resVals","batchIndexA","batchIndexB","i0","iBlock","j0","jBlock","kBlock","aVal","bVal","_fusedMatMul","addRes","activationRes","intermediates","currVals","origAxes","expandedShape","reshapedResult","anyVal","outSize","minIndex","atan2Impl","xValues","poolType","outputVals","outputBatchStrides","outputRowStrides","outputColStrides","outputBatchOffset","inputBatchOffset","yR","xRCorner","xRMin","xRMax","outputRowOffset","yC","xCCorner","xCMin","xCMax","minMaxValue","avgValue","xR","xROffset","xC","xCOffset","outputOffset","maxPoolPositions","flattenPositions","maxPositions","maxValue","maxPosition","wR","wC","pool3d","padFront","outputDepthStrides","yDepth","xDepthCorner","xDepthMin","xDepthMax","outputDepthOffset","yRow","xRowCorner","xRowMin","xRowMax","yCol","xColCorner","xColMin","xColMax","outputColOffset","xDepth","xDepthOffset","xRow","xRowOffset","xCol","xColOffset","maxPool3dPositions","wDepth","wRow","wCol","avgMultiplier","dyBuf","dxDepth","dxRow","dxCol","dyDepthCorner","dyRowCorner","dyColCorner","dotProd","dyDepth","dyRow","dyCol","dyData","dxR","dxC","dyRCorner","dyCCorner","dyR","dyC","mVals","varVals","sVals","offVals","offValsLength","sValsLength","varValsLength","mValsLength","offi","batchNormConfig","clipAttrs","complexAbs","complexVals","complexAbsConfig","imagVal","imagConfig","reals","imags","realConcated","imagConcated","conv2D","filterStrides","wVals","xOffset1","yOffset1","yOffset2","wOffset1","xOffset2","yOffset3","wOffset2","xOffset3","wOffset3","d1","xVal","d2","dW","dyVals","yRMin","yRMax","yCMin","yCMax","conv2DBackpropFilterConfig","dxValues","dyValues","fltValues","dyOffset","fltOffset","dxOffset","yF","xFCorner","wF","xF","yOffset4","xOffset4","wOffset4","dwValues","dwS0","dwS1","dwS2","dwS3","dyS0","dyS1","dyS2","dyS3","xS0","xS1","xS2","xS3","frontPad","yFMin","yFMax","dxS0","dxS1","dxS2","dxS3","fltS3","xFMin","boxVals","boxIndVals","imageVals","inStride","outStride","startInd","bInd","heightScale","widthScale","yInd","topInd","bottomInd","yLerp","xInd","leftInd","rightInd","xLerp","topRight","bottomLeft","closestX","closestY","inInd","outInd","resultDtype","util.makeOnesTypedArray","indexAdjuster","prevIdx","reversePermutation","reverseTransposedResult","outputIdx","inH","offsetH","inW","offsetW","offsetD","inputIdx","depthwiseConv2dNative","chMul","dm","depthwiseConv2dNativeBackpropFilterConfig","depthwiseConv2dNativeBackpropInputConfig","filterVals","filterRank","outRank","hOut","hBeg","wOut","wBeg","curVal","hIn","wIn","xIndex","filterIndex","$dy","util.makeZerosNestedTypedArray","hMax","wMax","hInMax","wInMax","draw","contextOptions","imageOptions","contextType","imageData","drawConfig","backend_util.upcastType","oldResult","backend_util.decodeEinsumEquation","backend_util.checkEinsumDimSizes","backend_util.getEinsumComputePath","numDimsRemaining","tensorsToDispose","idTerm","dimsToExpand","backend_util.getEinsumPermutation","backend_util.isIdentityPermutation","einsumConfig","backend_util.ERF_P","backend_util.ERF_A1","backend_util.ERF_A2","a3","backend_util.ERF_A3","a4","backend_util.ERF_A4","a5","backend_util.ERF_A5","realDivImpl","fftBatch","real2D","imag2D","fftImpl","backend_util.getComplexWithIndex","$realInfo","$imagInfo","isExponentOf2","fftRadix2","realInfo","imagInfo","sizeInfo","sizeInfoCopy","divRealInfo","divImagInfo","divRealVals","divImagVals","rawOutput","fourierTransformByMatmul","backend_util.splitRealAndImagArrays","evenComplex","backend_util.complexWithEvenIndex","evenRealVals","evenImagVals","evenShape","evenRealInfo","evenImagInfo","evenTensorInfo","oddComplex","backend_util.complexWithOddIndex","oddRealVals","oddImagVals","oddShape","oddRealInfo","oddImagInfo","oddTensorInfo","$evenComplex","$evenRealVals","$evenImagVals","$evenShape","$evenRealInfo","$evenImagInfo","$evenTensorInfo","$oddComplex","$oddRealVals","$oddImagVals","$oddShape","$oddRealInfo","$oddImagInfo","$oddTensorInfo","backend_util.exponents","eShape","eRealInfo","eImagInfo","exponentInfo","addPart","subPart","addPartReal","subPartReal","addPartImag","subPartImag","$realVals","$imagVals","backend_util.exponent","term","backend_util.assignToTypedArray","input2D","resultReshaped","fftConfig","util.inferDtype","batchOffset","rowOffset","coordX","outputValue","rotatedColOffset","imageIdx","fusedConv2D","resultOld","reshapedBias","reshapedAlpha","fusedDepthwiseConv2D","backend_util.prepareAndValidate","$batchDims","ifftConfig","logicalAndImpl","logicalOrImpl","lRN","maxD","sumAcrossChannels","currentChannel","beginSumOffset","endSumOffset","LRNConfig","lRNGrad","dySize","yValues","depthBegin","depthEnd","dyi","LRNGradConfig","reductionIndices","maxOutShape","inputBuf","maxPosBuf","maxPos","curPos","maxPoolWithArgmaxImpl","maxPools","pooledDataId","indexesDataId","toDispose","reduceSizeScalar","coords","inIndex","modImpl","logitsRank","maxLogit","maxLogitReshaped","sumExp","sumReshaped","probVals","resShape","cdf","sampleId","kernel_impls.nonMaxSuppressionV3Impl","nonMaxSuppressionV3","kernel_impls.nonMaxSuppressionV4Impl","kernel_impls.nonMaxSuppressionV5Impl","nonMaxSuppressionV5","maxOutputSizeVal","iouThresholdVal","scoreThresholdVal","softNmsSigmaVal","indicesVal","imagPart","padV2","outCoords","powImpl","$paramsNestedSplitsShapes","outputDenseValuesShape","outputNestedSplitsTensors","outputDenseValuesTensor","raggedGatherConfig","rtNestedSplitsData","rtDenseValuesData","raggedRangeConfig","$rowPartitionValues","raggedTensorToTensorConfig","imagesStrides","effectiveInputSize","effectiveOutputSize","effectiveRowSizeRatio","effectiveColSizeRatio","sourceFracRow","sourceRowFloor","rowFrac","sourceRowCeil","topRowOffset","botRowOffset","sourceFracCol","sourceColFloor","colFrac","sourceColCeil","topLeftOffest","botLeftOffset","topRightOffset","botRightOffest","xHeight","xWidth","yHeight","yWidth","effectiveXSize","effectiveYSize","bOffset","topDxRIndex","bottomDxRIndex","topDxROffset","bottomDxROffset","dxRLerp","inverseDxRLerp","leftDxCIndex","rightDxCIndex","dxCLerp","inverseDxCLerp","topLeftRCOffset","topRightRCOffset","bottomLeftRCOffset","bottomRightRCOffset","inverseDxRLerpTimesInverseDxCLerp","inverseDxRLerpTimesDxCLerp","dxRLerpTimesInverseDxCLerp","dxRLerpTimesDxCLerp","dyVal","sourceNearestRow","sourceNearestCol","newVal","invHeightScale","invWidthScale","winHeight","winWidth","startRLerp","startDyR","startCLerp","startDyC","accum","dyRIndex","dyROffset","dyCIndex","dyCOffset","$dims","sinFactor","cosFactor","coordY","rotatedRowOffset","updatesBuf","mid","searchSortedImpl","sortedInputsSlice","conditionRank","tValues","eValues","scaleAlpha","backend_util.SELU_SCALEALPHA","backend_util.SELU_SCALE","tooLarge","tooSmall","expX","outputIndicesShape","outputData","outputDataShape","sliceT","stepAttrs","tensorBuf","topK","inStrides","batchInStride","rowInStride","colInStride","outStrides","batchOutStride","rowOutStride","colOutStride","transformVals","outY","outX","inX","inY","mapCoord","nearestInterpolation","bilinearInterpolation","outCoord","mapCoordReflect","mapCoordWrap","mapCoordNearest","mapCoordConstant","inCoord","sz2","util.clamp","sz","readWithFillValue","batchStride","rowStride","colStride","yFloor","xFloor","yCeil","xCeil","valueYFloor","valueYCeil","valueRank","tempRes","segmentIdsRank","numIters","expanded","scalarValue","maskCasted","sumTensorInfo","unsortedSegmentSumConfig","isWebAssemblySupported","FaceDetection","BLAZEFACE_VERSION","DEFAULT_BLAZEFACE_URL","DEFAULT_TFJS_WASM_URL","version_wasm","BlazeFaceFaceDetection","binaryPath","faceModelUrl","createDetector","SupportedModels","timestampMs","prediction","keypoints","keypoint","getFaceMatchStateInLivenessOval","initialFaceIntersection","challengeConfig","OvalIouThreshold","FaceIouHeightThreshold","FaceIouWidthThreshold","faceBoundingBox","minFaceX","maxFaceX","minFaceY","maxFaceY","ovalBoundingBox","intersection","intersectionThreshold","faceDetectionWidthThreshold","faceDetectionHeightThreshold","faceMatchPercentage","isFaceOutsideOvalToTheLeft","isFaceOutsideOvalToTheRight","isFaceMatched","isFaceMatchedClosely","resolveEventStreamConfig","eventSigner","messageSigner","eventStreamPayloadHandler","HttpAuthLocation","HttpApiKeyAuthLocation","EndpointURLScheme","AlgorithmId","FieldPosition","SMITHY_CONTEXT_KEY","IniSectionType","RequestHandlerProtocol","HttpRequest$8","HttpRequest","cloneQuery","req","carry","eventStreamHandlingMiddleware","eventStreamHandlingMiddlewareOptions","eventStreamHeaderMiddleware","eventStreamHeaderMiddlewareOptions","getEventStreamPlugin","clientStack","HttpRequest$7","hostHeaderMiddleware","handlerProtocol","hostHeaderMiddlewareOptions","getHostHeaderPlugin","loggerMiddleware","clientName","commandName","dynamoDbDocumentClientOptions","overrideInputFilterSensitiveLog","overrideOutputFilterSensitiveLog","inputFilterSensitiveLog","outputFilterSensitiveLog","$metadata","outputWithoutMetadata","loggerMiddlewareOptions","getLoggerPlugin","HttpRequest$6","TRACE_ID_HEADER_NAME","ENV_LAMBDA_FUNCTION_NAME","ENV_TRACE_ID","recursionDetectionMiddleware","nonEmptyString","addRecursionDetectionMiddlewareOptions","getRecursionDetectionPlugin","requiresRefresh","pending","hasResult","isConstant","coalesceProvider","SHORT_TO_HEX","HEX_TO_SHORT","fromHex","encoded","toHex","getSmithyContext","normalizeProvider","promisified","escapeUri","uri","hexEncode","ALGORITHM_QUERY_PARAM","CREDENTIAL_QUERY_PARAM","AMZ_DATE_QUERY_PARAM","SIGNED_HEADERS_QUERY_PARAM","EXPIRES_QUERY_PARAM","SIGNATURE_QUERY_PARAM","TOKEN_QUERY_PARAM","AUTH_HEADER","AMZ_DATE_HEADER","DATE_HEADER","GENERATED_HEADERS","SIGNATURE_HEADER","SHA256_HEADER","TOKEN_HEADER","ALWAYS_UNSIGNABLE_HEADERS","PROXY_HEADER_PATTERN","SEC_HEADER_PATTERN","ALGORITHM_IDENTIFIER","EVENT_ALGORITHM_IDENTIFIER","UNSIGNED_PAYLOAD","MAX_CACHE_SIZE","KEY_TYPE_IDENTIFIER","MAX_PRESIGNED_TTL","signingKeyCache","cacheQueue","createScope","shortDate","getSigningKey","sha256Constructor","credentials","credsHash","hmac","cacheKey","signable","getCanonicalHeaders","unsignableHeaders","signableHeaders","canonicalHeaderName","getCanonicalQuery","encodedKey","getPayloadHash","hashConstructor","hashCtor","HeaderFormatter","shortView","intView","longBytes","binView","binBytes","utf8Bytes","strView","strBytes","tsBytes","Int64","UUID_PATTERN","uuidBytes","HEADER_VALUE_TYPE","Int64$2","negate","negative","hasHeader","soughtHeader","HttpRequest$5","HttpResponse$4","moveHeadersToQuery","lname","prepareRequest","iso8601","toDate","SignatureV4$1","applyChecksum","sha256","uriEscapePath","originalRequest","signingDate","expiresIn","unhoistableHeaders","hoistableHeaders","signingRegion","signingService","longDate","formatDate","canonicalHeaders","getCanonicalHeaderList","toSign","priorSignature","hashedPayload","hashedHeaders","stringToSign","signableMessage","requestToSign","payloadHash","sortedHeaders","credentialScope","canonicalRequest","hashedRequest","normalizedPathSegments","pathSegment","normalizedPath","keyPromise","CREDENTIAL_EXPIRE_WINDOW","resolveAwsAuthConfig","normalizedCreds","normalizeCredentialProvider","signingEscapePath","systemClockOffset","signer","regionInfo","SignerCtor","SignatureV4","authScheme","isSigv4a","regionForSigner","getSkewCorrectedDate","isClockSkewed","clockTime","getUpdatedSystemClockOffset","currentSystemClockOffset","clockTimeInMs","awsAuthMiddleware","firstAuthScheme","secondAuthScheme","uncheckedSigner","signedRequest","multiRegionOverride","signingOptions","serverTime","getDateHeader","dateHeader","HttpResponse","awsAuthMiddlewareOptions","getAwsAuthPlugin","resolveUserAgentConfig","IP_V4_REGEX","isIpAddress","VALID_HOST_LABEL_REGEX","isValidHostLabel","allowSubDomains","customEndpointFunctions","toDebugString","EndpointError","booleanEquals","value1","value2","getAttrPathList","pathList","squareBracketIndex","arrayIndex","getAttr","isSet","not","DEFAULT_PORTS","whatwgURL","hostname","urlString","isIp","inputContainsDefaultPort","authority","stringEquals","substring","uriEncode","endpointFunctions","evaluateTemplate","evaluatedTemplateArr","templateContext","openingBraceIndex","closingBraceIndex","parameterName","refName","attrName","getReferenceValue","evaluateExpression","keyName","callFunction","argv","evaluatedArgs","fnSegments","evaluateCondition","fnArgs","evaluateConditions","conditions","conditionsReferenceRecord","toAssign","getEndpointHeaders","headerKey","headerVal","headerValEntry","processedExpr","getEndpointProperty","propertyEntry","getEndpointProperties","propertyKey","propertyVal","getEndpointUrl","endpointUrl","expression","evaluateEndpointRule","endpointRule","referenceRecord","endpointRuleOptions","evaluateErrorRule","errorRule","evaluateTreeRule","treeRule","evaluateRules","endpointOrUndefined","resolveEndpoint","ruleSetObject","endpointParams","parameters","paramsWithDefault","paramKey","paramDefaultValue","requiredParams","requiredParam","isVirtualHostableS3Bucket","parseArn","arn","accountId","selectedPartitionsInfo","regionData","DEFAULT_PARTITION","awsEndpointFunctions","HttpRequest$4","USER_AGENT","X_AMZ_USER_AGENT","SPACE","UA_NAME_SEPARATOR","UA_NAME_ESCAPE_REGEX","UA_VALUE_ESCAPE_REGEX","UA_ESCAPE_CHAR","userAgentMiddleware","escapeUserAgent","defaultUserAgent","customUserAgent","sdkUserAgentValue","normalUAValue","section","userAgentPair","prefixSeparatorIndex","uaName","getUserAgentMiddlewareOptions","getUserAgentPlugin","Crc32","data_1","data_1_1","lookupTable","Int64$1","HeaderMarshaller$1","nameLength","BOOLEAN_TAG","BYTE_TAG","SHORT_TAG","INT_TAG","LONG_TAG","binaryLength","BINARY_TAG","stringLength","STRING_TAG","TIMESTAMP_TAG","UUID_TAG","PRELUDE_MEMBER_LENGTH","PRELUDE_LENGTH","CHECKSUM_LENGTH","MINIMUM_MESSAGE_LENGTH","splitMessage","byteOffset","messageLength","headerLength","expectedPreludeChecksum","expectedMessageChecksum","checksummer","EventStreamCodec","HeaderMarshaller","isEndOfStream","messages","checksum","MessageDecoderStream","MessageEncoderStream","SmithyMessageDecoderStream","deserialized","SmithyMessageEncoderStream","getEventSigningTransformStream","initialSignature","eventStreamCodec","systemClockOffsetProvider","transformer","signedMessage","serializedSigned","EventStreamPayloadHandler","placeHolderStream","signingStream","eventStreamPayloadHandlerProvider","injectSessionIdMiddleware","requestParams","injectSessionIdMiddlewareOptions","HttpRequest$3","HttpResponse$3","websocketEndpointMiddleware","chunkedName","websocketEndpointMiddlewareOptions","getWebSocketPlugin","isWebSocketRequest","WebsocketSignatureV4","resolveWebSocketConfig","signerObj","validateSigner","buildQueryString","iLen","qsEntry","formatUrl","password","readableStreamtoIterable","iterableToReadableStream","requestTimeout","timeoutInMs","timeoutError","keepAliveSupport","FetchHttpHandler$2","FetchHttpHandler","instanceOrOptions","requestTimeoutInMs","abortError","removeSignalEventListener","fetchRequest","raceOfPromises","fetchHeaders","transformedHeaders","alphabetByEncoding","alphabetByValue","bitsPerLetter","bitsPerByte","maxLetterValue","fromBase64","dataView","bits","bitLength","chunkOffset","toBase64","_input","isUint8Array","bitClusterCount","DEFAULT_WS_CONNECTION_TIMEOUT_MS","WebSocketFetchHandler","httpHandler","sockets","socket","connectionTimeout","bodyStream","getIterator","outputPayload","toReadableStream","streamError","socketErrorOccurred","outputStream","inputChunk","SelectorType","DEFAULT_USE_DUALSTACK_ENDPOINT","DEFAULT_USE_FIPS_ENDPOINT","isFipsRegion","getRealRegion","resolveRegionConfig","useFipsEndpoint","providedRegion","resolveEventStreamSerdeConfig","HttpRequest$2","CONTENT_LENGTH_HEADER","contentLengthMiddleware","bodyLengthChecker","contentLengthMiddlewareOptions","getContentLengthPlugin","resolveParamsForS3","bucket","isArnBucketName","isDnsCompatibleBucketName","DOMAIN_PATTERN","IP_ADDRESS_PATTERN","DOTS_PATTERN","isArn","isValidArn","createConfigValueProvider","canonicalEndpointParamKey","configProvider","getEndpointFromConfig","serviceId","parseQueryString","querystring","toEndpointV1","getEndpointFromInstructions","commandInput","instructionsSupplier","clientConfig","endpointFromConfig","resolveParams","instructions","instruction","deserializerMiddleware","serializerMiddleware","deserializerMiddlewareOption","serializerMiddlewareOption","getSerdePlugin","commandStack","HttpRequest$1","transformToString","transformFromString","Uint8ArrayBlobAdapter","collectBody","streamBody","fromContext","extendedEncodeURIComponent","resolvedPath","memberName","labelValueProvider","uriLabel","isGreedyLabel","labelValue","requestBuilder","RequestBuilder","basePath","setFeature","endpointMiddleware","smithyContext","httpAuthOption","endpointMiddlewareOptions","getEndpointPlugin","resolveEndpointConfig","tls","customEndpointProvider","configuredEndpointPromise","RETRY_MODES","DEFAULT_MAX_ATTEMPTS","DEFAULT_RETRY_MODE","TRANSIENT_ERROR_CODES","TRANSIENT_ERROR_STATUS_CODES","NODEJS_TIMEOUT_ERROR_CODES","isClockSkewCorrectedError","isTransientError","isServerError","DefaultRateLimiter","currentTimeInSeconds","fillAmount","calculatedRate","rateToUse","newRate","timeBucket","currentRate","DEFAULT_RETRY_DELAY_BASE","MAXIMUM_RETRY_DELAY","THROTTLING_RETRY_DELAY_BASE","INITIAL_RETRY_TOKENS","RETRY_COST","TIMEOUT_RETRY_COST","NO_RETRY_INCREMENT","INVOCATION_ID_HEADER","REQUEST_HEADER","getDefaultRetryBackoffStrategy","delayBase","createDefaultRetryToken","retryCount","retryCost","StandardRetryStrategy","retryTokenScope","errorType","delayFromErrorType","capacityCost","tokenToRenew","AdaptiveRetryStrategy","maxAttemptsProvider","rateLimiter","HttpResponse$2","asSdkError","resolveRetryConfig","retryStrategy","getAllAliases","aliases","_aliases","alias","getMiddlewareNameWithAliases","constructStack","absoluteEntries","relativeEntries","identifyOnResolve","entriesNameSet","sort","stepWeights","priorityWeights","removeByName","toRemove","isRemoved","filterCb","removeByReference","cloneTo","toStack","expandRelativeMiddlewareList","expandedMiddlewareList","getMiddlewareList","debug","normalizedAbsoluteEntries","normalizedRelativeEntries","normalizedEntriesNameMap","normalizedEntry","toMiddleware","wholeList","toOverrideIndex","toOverride","mw","toggle","Client","command","optionsOrCb","useHandlerCache","Command","ClassBuilder","middlewareFn","CommandCtor","handlerExecutionContext","requestHandler","endpointParameterInstructions","middlewareSupplier","inputFilter","outputFilter","closure","CommandRef","expectNumber","stackTraceWarning","MAX_FLOAT","expectFloat32","expected","expectLong","expectInt32","expectSizedInt","castInt","expectObject","receivedType","expectString","expectUnion","asObject","setKeys","limitedParseFloat32","parseFloatString","ServiceException","decorateServiceException","additions","throwDefaultError","parsedBody","exceptionCtor","deserializeMetadata","withBaseException","ExceptionCtor","loadConfigsForDefaultMode","getChecksumConfiguration","runtimeConfig","checksumAlgorithms","algorithmId","algo","resolveChecksumRuntimeConfig","checksumAlgorithm","getRetryConfiguration","_retryStrategy","resolveRetryRuntimeConfig","retryStrategyConfiguration","getDefaultExtensionConfiguration","resolveDefaultRuntimeConfig","NoOpLogger","arg0","mapWithFilter","applyInstruction","_instructions","nonNullish","valueFn","sourceKey","defaultFilterPassed","customFilterPassed","serializeFloat","_json","isStreamingPayload","retryMiddleware","isRetryStrategyV2","retryToken","totalRetryDelay","retryErrorInfo","getRetryErrorInfo","getRetryErrorType","retryAfterHint","getRetryAfterHint","retryMiddlewareOptions","getRetryPlugin","retryAfterHeaderName","retryAfterSeconds","resolveClientEndpointParameters","commonParams","SHA_256_HASH","SHA_256_HMAC_ALGO","EMPTY_DATA_SHA_256","fallbackWindow","locateWindow","subtleCryptoMethods","supportsWebCrypto","supportsSecureRandom","subtle","supportsSubtleCrypto","WebCryptoSha256","JsSha256","BROWSER_ALIASES_MAP","BROWSER_MAP","PLATFORMS_MAP","OS_MAP","ENGINE_MAP","Utils","regexp","_const","versionA","versionB","isLoose","versionAPrecision","versionBPrecision","lastPrecision","_version","assigners","assigner","browserName","browserAlias","commonVersionIdentifier","browsersList","notLikeAndroid","butAndroid","regexpWithoutDeviceSpec","regexpWithDeviceSpec","osParsersList","versionName","os","platformParsersList","iDevice","likeIDevice","osMajorVersion","enginesParsersList","isGecko","likeGecko","Parser","UA","skipParsing","browserDescriptor","browserParsersList","_browser","_os","_platform","_engine","checkTree","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","osResult","platformMatchingDefinition","platformResult","browserNames","matchingDefinition","includingAlias","defaultBrowserName","browserNameLower","expectedResults","comparableVersion","currentBrowserVersion","osName","platformType","engineName","anything","anythings","Bowser","clientVersion","parsedUA","bowser","sections","getChunkedStream","currentMessageTotalLength","currentMessagePendingLength","messageLengthBuffer","allocateMessage","sourceIterator","currentOffset","bytesRemaining","numBytesForTotal","numBytesToWrite","getMessageUnmarshaller","messageType","unmodeledError","deserializedException","EventStreamMarshaller$1","utf8Encoder","utf8Decoder","inputStream","EventStreamMarshaller","UniversalEventStreamMarshaller","bodyIterable","serialziedIterable","eventStreamSerdeProvider","getHttpHandlerExtensionConfiguration","resolveHttpHandlerRuntimeConfig","httpHandlerExtensionConfiguration","HttpResponse$1","FetchHttpHandler$1","streamCollector","collectBlob","collectStream","readToBase64","arrayBuffer","collected","commaIndex","dataOffset","invalidProvider","TEXT_ENCODER","calculateBodyLength","_data","ruleSet","defaultEndpointResolver","getRuntimeConfig","DEFAULTS_MODE_OPTIONS","resolveDefaultsModeConfig","defaultsMode","isMobileBrowser","defaultConfigProvider","clientSharedValues","getSharedRuntimeConfig","packageInfo","WebSocketRequestHandler","HttpRequestHandler","getAwsRegionExtensionConfiguration","runtimeConfigRegion","resolveAwsRegionExtensionConfiguration","awsRegionExtensionConfiguration","asPartial","resolveRuntimeExtensions","extensions","extensionConfiguration","extension","RekognitionStreamingClient","__Client","_config_0","__getRuntimeConfig","_config_1","_config_2","_config_3","_config_4","_config_5","_config_6","_config_7","_config_8","_config_9","_config_10","_config_11","RekognitionStreamingServiceException","__ServiceException","AccessDeniedException","__BaseException","ClientChallenge","InternalServerException","LivenessRequestStream","ServerChallenge","ServiceQuotaExceededException","ServiceUnavailableException","ThrottlingException","ValidationException","LivenessResponseStream","SessionNotFoundException","StartFaceLivenessSessionRequestFilterSensitiveLog","StartFaceLivenessSessionResponseFilterSensitiveLog","awsExpectUnion","collectBodyString","parseJsonErrorBody","errorBody","loadRestJsonErrorCode","sanitizeErrorCode","se_StartFaceLivenessSessionCommand","isSerializableHeaderValue","_xarslsi","_SI","_xarslvw","_VW","_xarslvh","_VH","_xarslcv","_CV","se_LivenessRequestStream","de_StartFaceLivenessSessionCommand","de_CommandError","contents","de_LivenessResponseStream","parsedOutput","parseErrorBody","de_AccessDeniedExceptionRes","de_InternalServerExceptionRes","de_ServiceQuotaExceededExceptionRes","de_ServiceUnavailableExceptionRes","de_SessionNotFoundExceptionRes","de_ThrottlingExceptionRes","de_ValidationExceptionRes","__expectString","__decorateServiceException","eventMarshallingVisitor","se_VideoEvent_event","se_ClientSessionInformationEvent_event","se_ClientSessionInformationEvent","se_VideoEvent","de_ServerSessionInformationEvent_event","de_DisconnectionEvent_event","de_ValidationException_event","de_InternalServerException_event","de_ThrottlingException_event","de_ServiceQuotaExceededException_event","de_ServiceUnavailableException_event","parseBody","de_ServerSessionInformationEvent","se_BoundingBox","__serializeFloat","se_ClientChallenge","se_FaceMovementAndLightClientChallenge","se_InitialFace","se_TargetFace","de_ChallengeConfig","__limitedParseFloat32","__expectInt32","de_ColorSequence","de_ColorSequences","de_FaceMovementAndLightServerChallenge","de_OvalParameters","de_ServerChallenge","de_SessionInformation","__expectUnion","StartFaceLivenessSessionCommand","$Command","cs","isNewerIpad","isMobileScreen","getLandscapeMediaQuery","isAndroidChromeWithBrokenH264","minorVersion","BITS_PER_SECOND","ALTERNATE_CHROME_MIME_TYPE","VideoRecorder","timeSlice","getLivenessUserAgent","__decorate","decorators","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","__createBinding","__exportStar","__spread","__spreadArrays","__asyncDelegator","__makeTemplateObject","cooked","raw","__importStar","__classPrivateFieldGet","privateMap","__classPrivateFieldSet","surrogatePair","nextByte","byteValue","textEncoderFromUtf8","jsFromUtf8","textEncoderToUtf8","jsToUtf8","convertToBuffer_1","util_utf8_browser_1","isEmptyData_1","numToUint8_1","numToUint8","uint32ArrayFrom_1","aws_crc32","tslib_1","util_1","index_1","AwsCrc32","crc32","aws_crc32_1","WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE","CustomWebSocketFetchHandler","decodedString","closeCode","isCredentialsProvider","credentialsProvider","isCredentials","resolveCredentials","hasCredentialsProvider","cloneRequest","REQUEST_EXPIRY","Signer","CONNECTION_TIMEOUT","CUSTOM_USER_AGENT","createStreamingClient","clientconfig","TIME_SLICE","isClientSessionInformationEvent","isEndStreamWithCodeEvent","LivenessStreamProvider","credentialProvider","clientInfo","livenessRequestGenerator","mediaSettings","TICK_RATE","COLOR_STAGE","FreshnessColorDisplay","freshnessColorsSequence","freshnessColorEl","tickStartTime","timeSinceLastColorChange","currColor","currColorIndex","livenessStreamProvider","challengeId","isServerSesssionInformationEvent","isConnectionTimeoutError","isDisconnectionEvent","isValidationExceptionEvent","isInternalServerExceptionEvent","isThrottlingExceptionEvent","isServiceQuotaExceededExceptionEvent","isInvalidSignatureRegionException","STATIC_VIDEO_CONSTRAINTS","CAMERA_ID_KEY","DEFAULT_FACE_FIT_TIMEOUT","responseStream","responseStreamActor","getLastSelectedCameraId","setLastSelectedCameraId","livenessMachine","componentProps","videoAssociatedParams","ovalAssociatedParams","recordingStartApiTimestamp","recorderStartTimestamp","initialFace","flippedInitialFaceLeft","serverSessionInformation","freshnessColors","freshnessColorDisplay","actions.send","actions.cancel","errorState","livenessError","closureCode","track","videoConstraints","existingDeviceId","initialStream","realVideoDevices","tracksWithMoreThan15Fps","initialStreamDeviceId","isInitialStreamFromRealDevice","realVideoDeviceStream","faceDistanceCheckBeforeRecording","isFaceFarEnoughBeforeRecording","illuminationState","renormalizedFace","initialFaceBoundingBox","faceMatchStateInLivenessOval","faceMatchPercentageInLivenessOval","freshnessColorsComplete","startFace","endFace","livenessActionDocument","onAnalysisComplete","FaceLivenessDetectorContext","React__default","FaceLivenessDetectorProvider","useFaceLivenessDetector","useThemeBreakpoint","useLivenessActor","useLivenessSelector","useMediaStreamInVideo","videoRef","setVideoHeight","setVideoWidth","streamHeight","streamWidth","LivenessClassNames","Toast","isInitial","ToastWithLoader","displayText","selectErrorState","selectFaceMatchState","selectIlluminationState","selectIsFaceFarEnoughBeforeRecording","selectFaceMatchStateBeforeStart","selectFaceMatchPercentage","DefaultToast","Hint","hintDisplayText","faceMatchStateBeforeStart","isFaceFarEnoughBeforeRecordingState","isCheckFaceDetectedBeforeStart","isCheckFaceDistanceBeforeRecording","isStartView","isRecording","isNotRecording","isUploading","isCheckSuccessful","isCheckFailed","isFlashingFreshness","FaceMatchStateStringMap","IlluminationStateStringMap","resultHintString","a11yHintString","MatchIndicator","initialPercentage","matchPercentage","setMatchPercentage","percentageStyles","Overlay","horizontal","vertical","defaultErrorDisplayText","defaultLivenessDisplayText","renderToastErrorModal","connectionTimeoutHeaderText","connectionTimeoutMessageText","errorLabelText","timeoutHeaderText","timeoutMessageText","faceDistanceHeaderText","faceDistanceMessageText","multipleFacesHeaderText","multipleFacesMessageText","clientHeaderText","clientMessageText","serverHeaderText","serverMessageText","renderErrorModal","overrideErrorDisplayText","FaceLivenessErrorModal","onRetry","tryAgainText","CancelButton","isFinalState","RecordingIcon","LivenessIconWithPopover","headingText","shouldShowPopover","setShouldShowPopover","wrapperRef","DefaultPhotosensitiveWarning","infoText","DefaultRecordingIcon","recordingIndicatorText","DefaultCancelButton","cancelLivenessCheckText","selectVideoConstraints","selectVideoStream","selectSelectedDeviceId","selectSelectableDevices","centeredLoader","showMatchIndicatorStates","MemoizedMatchIndicator","LivenessCameraModule","isRecordingStopped","instructionDisplayText","streamDisplayText","errorDisplayText","cameraDisplayText","customComponents","ErrorView","PhotosensitiveWarning","videoStream","selectedDeviceId","selectableDevices","canvasRef","freshnessColorRef","isCameraReady","setIsCameraReady","isCheckingCamera","isWaitingForCamera","isDetectFaceBeforeStart","isCheckSucceeded","mediaWidth","setMediaWidth","mediaHeight","setMediaHeight","setAspectRatio","updateColorModeHandler","darkModePreference","lightModePreference","photoSensitivityWarning","handleMediaPlay","beginLivenessCheck","onCameraChange","newDeviceId","newStream","shouldShowFullScreenCamera","LandscapeErrorModal","portraitMessage","landscapeMessage","isLandscape","setIsLandscape","landscapeMediaQuery","CHECK_CLASS_NAME","CAMERA_ERROR_TEXT_WIDTH","selectIsRecordingStopped","LivenessCheck","isPermissionDenied","recheckCameraPermissions","cameraMinSpecificationsHeadingText","cameraMinSpecificationsMessageText","cameraNotFoundHeadingText","cameraNotFoundMessageText","retryCameraPermissionsText","sendLandscapeWarning","isLandscapeMatched","renderCheck","landscapeHeaderText","portraitMessageText","landscapeMessageText","getMergedDisplayText","overrideDisplayText","mergeField","correctKey","deprecatedKey","getDisplayText","mergedDisplayText","a11yVideoLabelText","hintCanNotIdentifyText","hintCenterFaceText","hintCenterFaceInstructionText","hintFaceOffCenterText","hintConnectingText","hintFaceDetectedText","hintHoldFaceForFreshnessText","hintIlluminationNormalText","hintIlluminationTooBrightText","hintIlluminationTooDarkText","hintMoveFaceFrontOfCameraText","hintTooManyFacesText","hintTooCloseText","hintTooFarText","hintVerifyingText","hintCheckCompleteText","hintMatchIndicatorText","goodFitCaptionText","goodFitAltText","photosensitivityWarningBodyText","photosensitivityWarningHeadingText","photosensitivityWarningInfoText","photosensitivityWarningLabelText","photosensitivyWarningBodyText","photosensitivyWarningHeadingText","photosensitivyWarningInfoText","photosensitivyWarningLabelText","startScreenBeginCheckText","tooFarCaptionText","tooFarAltText","waitingCameraPermissionText","DETECTOR_CLASS_NAME","FaceLivenessDetectorCore","currElementRef","FaceLivenessDetector","FaceLivenessCheck","handleMutations","parentElement","messageElement","lastDiv","handleAnalysisComplete","convertedObject","Name","isEdited","Welcome","Address","setProperties","formattedDate","address","Email","email","Contacts","phone_number","handleInstagramChange","instagramPrefix","userInput","Emoji","emoji","handleEmojiChange","filteredValue","Goals","goals","setGoals","handleChange","prevGoals","PersonalityType","introvert","setIntrovert","newIntrovert","createElementIfNotDefined","originalParams","checkProps","classesToSelector","Pagination","pfx","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","bulletActiveClass","getMoveDirection","onBulletClick","moveDirection","bullets","firstIndex","midIndex","subEl","classesToRemove","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","progressEl","paginationHTML","numberOfBullets","disable","isHidden","enable","Autoplay","raf","autoplayDelayTotal","autoplayDelayCurrent","autoplayTimeLeft","autoplayStartTime","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","pausedByPointerEnter","onTransitionEnd","calcTimeLeft","timeLeft","getSlideDelay","activeSlideEl","delayForce","currentSlideDelay","proceed","onVisibilityChange","attachMouseEvents","detachMouseEvents","attachDocumentEvents","detachDocumentEvents","PreviewPhoto","PreviewPersonal","Congrats","registrationRoutes","Date","SearchButton","SearchModal","setIsOpen","setPosition","setDisableTransition","getTimeSpentInMilliseconds","community","hasSearched","durationRequest","setDurationRequest","lastDistance","setLastDistance","setLastIndex","setFocus","duration_ms","Slide","handleResetValue","handleSearchSubmit","handleInputChange","handleResetFilter","cardMenu","bottomMenu","handleEventChange","handleClickSearch","Slider","communityPosition","setCommunityPosition","setCurrentIndex","setDistance","onTouch","setOnTouch","refreshPercent","setRefreshPercent","isRefresh","setIsRefresh","touchStartY","setTouchStartY","touchStartX","setTouchStartX","disableSliderScroll","disableTransition","cardHeight","lastTouchTime","setLastTouchTime","isMouseClick","setIsMouseClick","setIsSearching","handleChangePosition","onMouseOut","currentY","handleTouchMove","deltaY","deltaX","newDistance","deltaTime","minVelocity","handleRefresh","isCurrent","isDoubleNext","Instruction","optionsHowItWorks","optionsPremium","Community","showInstruction","setShowInstruction","cards","isHasLikes","visibleFriendRequest","usersLikes","resetCommunity","TariffItem","setPlan","Tariffs","tariffs","PaymentService","paramsObject","searchParams","payment_id","usePayment","paymentId","setPaymentId","refetchPaySuccess","refetchPayCancel","Payment","getPayment","waiting","setWaiting","handleBack","Profile","Mt","yt","ct","wt","xt","kt","Wt","Pt","Et","lt","It","ut","tt","et","nt","Dt","Ft","Rt","Ct","rt","Ht","at","Nt","Ot","Tt","Bt","ot","Lt","__privateAdd","_Lt_instances","__publicField","__privateGet","t_get","r_get","__privateSet","_n","t_set","__privateMethod","h_fn","r_set","zt","$t","Vt","Qt","Ut","Kt","qt","Yt","jt","Zt","Gt","Jt","ht","pt","ft","mt","gt","bt","vt","At","St","onLike","setIsLoading","setIsLike","handleClickFriend","Spoiler","Friends","inbox","hasFriends","hasInbox","visibleAllInbox","setVisibleAllInbox","likedCard","countLike","setCountLike","addLikedCard","transferLikedCard","handleGoToPayment","Friend","sourceType","hiddenArrow","isLastIndex","BannerSupport","handleSupport","BannerBuyPremium","daysLeft","handleCancelSubscription","handlePremium","Footer","showPremiumModal","setShowPremiumModal","toggleShowPremiumModal","handleDeleteProfile","usePremium","Premium","isAccepted","throwUrl","setData","optionsGoals","optionsType","handleBackClick","handleIntrovertChange","EditProfile","DescriptionUI","MediaLayout","Beautiful","Professional","Authentic","userRoutes","showModal","setShowModal","maleUserRoutes","Loading","serverErrorRoutes","loadingRoutes","useNavigateRoutes","previousRoutesRef","newRoutes","Navigation","awsmobile","rej","makeString","lastOfPathSeparatorRegExp","cleanKey","canNotTraverseDeeper","getLastOfPath","Empty","stackIndex","setPath","pushPath","getPathWithDefaults","defaultData","overwrite","regexEscape","_entityMap","RegExpCache","capacity","regExpFromCache","regExpNew","looksLikeObjectPathRegExpCache","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","matched","deepFind","getCleanedCode","consoleLogger","concreteLogger","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","EventEmitter","numListeners","numTimesAdded","ResourceStore","ignoreJSONStructure","resources","deep","postProcessor","translator","checkedLoadedFor","shouldHandleAsObject","Translator","wouldCheckForNsInKey","seemsNaturalLanguage","lastKey","returnDetails","appendNamespaceToCIMode","resUsedKey","resExactUsedKey","noObject","joinArrays","handleAsObjectInI18nFormat","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","needsZeroSuffixLookup","resForObjHndl","handleAsObject","resType","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","resForMissing","updateMissing","lngs","fallbackLngs","specificDefaultValue","defaultForMissing","skipOnVariables","nestBef","nestAft","postProcess","postProcessorNames","exactUsedKey","usedLng","usedNS","extracted","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","optionsKeys","useOptionsReplaceForData","LanguageUtil","formattedCode","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","suffixesOrder","dummyRule","PluralResolver","languageUtils","cleanedCode","lngPart","pluralCategory1","pluralCategory2","pluralCategory","deepFindWithDefaults","regexSafe","Interpolator","escape$1","escapeValue","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapeSuffix","unescapePrefix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","getOrResetRegExp","existingRegExp","replaces","handleFormat","missingInterpolationHandler","todo","matchedVar","safeValue","clonedOptions","handleHasOptions","inheritedOptions","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","parseFormatStr","formatStr","formatName","formatOptions","optStr","trimmedKey","createCachedFormatter","optForCache","formatter","Formatter","formats","formatted","valOptions","removePending","Connector","languages","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","loadedKeys","fcName","tried","fallbackValue","isUpdate","clb","transformOptions","bindMemberFunctions","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","deferred","load","finish","usedCallback","lngInLngs","_this2","setLngProps","setLng","_this3","fixedT","resultKey","_len5","_key5","fallbackLng","lastLng","loadState","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","clonedData","_len6","_key6","_typeof","hasXMLHttpRequest","maybePromise","makePromise","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","fetchApi","XmlHttpRequestApi","ActiveXObjectApi","__vitePreload","addQueryString","fetchIt","altFetch","altResponse","omitFetchOptions","requestWithFetch","reqOptions","requestWithXmlHttpRequest","_classCallCheck","_defineProperties","_createClass","Backend","allOptions","loadUrlLanguages","loadUrlNamespaces","loadPath","resolvedLoadPath","isNetworkError","parseErr","_this4","finished","dataArray","addPath","_this5","_this$services","backendConnector","currentLanguage","packageJson","awsexports","App","isFontLoaded","useFontFaceObserver","start_param","sourceIndex","ToastContainer","Sentry.init","Sentry.browserTracingIntegration","Sentry.replayIntegration","Sentry.setUser","amplitude.init","amplitude.Identify","ios_version","amplitude.identify"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,532,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,791,792,793,794,795,796,801,802,807,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2129,2130,2131,2132,2148,2149,2179,2180,2181,2182],"sources":["../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/@amplitude/analytics-core/lib/esm/types/messages.js","../node_modules/@amplitude/analytics-core/lib/esm/types/status.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/result-builder.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/uuid.js","../node_modules/@amplitude/analytics-core/lib/esm/timeline.js","../node_modules/@amplitude/analytics-core/lib/esm/types/constants.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/valid-properties.js","../node_modules/@amplitude/analytics-core/lib/esm/identify.js","../node_modules/@amplitude/analytics-core/lib/esm/types/event/event.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/event-builder.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/return-wrapper.js","../node_modules/@amplitude/analytics-core/lib/esm/core-client.js","../node_modules/@amplitude/analytics-core/lib/esm/revenue.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/chunk.js","../node_modules/@amplitude/analytics-core/lib/esm/types/loglevel.js","../node_modules/@amplitude/analytics-core/lib/esm/logger.js","../node_modules/@amplitude/analytics-core/lib/esm/config.js","../node_modules/@amplitude/analytics-core/lib/esm/plugins/destination.js","../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../node_modules/@amplitude/analytics-core/lib/esm/analytics-connector.js","../node_modules/@amplitude/analytics-core/lib/esm/plugins/identity.js","../node_modules/@amplitude/analytics-core/lib/esm/global-scope.js","../node_modules/@amplitude/analytics-core/lib/esm/session.js","../node_modules/@amplitude/analytics-core/lib/esm/cookie-name.js","../node_modules/@amplitude/analytics-core/lib/esm/language.js","../node_modules/@amplitude/analytics-core/lib/esm/query-params.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/debug.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/memory.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/cookie.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/helpers.js","../node_modules/@amplitude/analytics-core/lib/esm/transports/base.js","../node_modules/@amplitude/analytics-core/lib/esm/transports/fetch.js","../node_modules/@amplitude/analytics-core/lib/esm/types/offline.js","../node_modules/@amplitude/analytics-core/lib/esm/types/element-interactions.js","../node_modules/@amplitude/analytics-browser/lib/esm/default-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/utils/snippet-helper.js","../node_modules/@amplitude/analytics-browser/lib/esm/version.js","../node_modules/@amplitude/analytics-browser/lib/esm/lib-prefix.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/context.js","../node_modules/@amplitude/analytics-browser/lib/esm/storage/browser-storage.js","../node_modules/@amplitude/analytics-browser/lib/esm/storage/local-storage.js","../node_modules/@amplitude/analytics-browser/lib/esm/storage/session-storage.js","../node_modules/@amplitude/analytics-browser/lib/esm/transports/xhr.js","../node_modules/@amplitude/analytics-browser/lib/esm/transports/send-beacon.js","../node_modules/@amplitude/analytics-browser/lib/esm/cookie-migration/index.js","../node_modules/@amplitude/analytics-browser/lib/esm/constants.js","../node_modules/@amplitude/analytics-browser/lib/esm/config.js","../node_modules/@amplitude/analytics-client-common/lib/esm/global-scope.js","../node_modules/@amplitude/analytics-client-common/lib/esm/query-params.js","../node_modules/@amplitude/analytics-client-common/lib/esm/attribution/constants.js","../node_modules/@amplitude/analytics-client-common/lib/esm/attribution/campaign-parser.js","../node_modules/@amplitude/analytics-types/lib/esm/event.js","../node_modules/@amplitude/analytics-types/lib/esm/server-zone.js","../node_modules/@amplitude/analytics-types/lib/esm/status.js","../node_modules/@amplitude/plugin-page-view-tracking-browser/lib/esm/utils.js","../node_modules/@amplitude/plugin-page-view-tracking-browser/lib/esm/page-view-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/form-interaction-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/file-download-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/det-notification.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/network-connectivity-checker.js","../node_modules/@amplitude/analytics-remote-config/lib/esm/remote-config.js","../node_modules/@amplitude/analytics-remote-config/lib/esm/index.js","../node_modules/@amplitude/analytics-browser/lib/esm/config/joined-config.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/constants.js","../node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../node_modules/rxjs/dist/esm5/internal/Subscription.js","../node_modules/rxjs/dist/esm5/internal/config.js","../node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../node_modules/rxjs/dist/esm5/internal/util/noop.js","../node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../node_modules/rxjs/dist/esm5/internal/Subscriber.js","../node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../node_modules/rxjs/dist/esm5/internal/util/identity.js","../node_modules/rxjs/dist/esm5/internal/util/pipe.js","../node_modules/rxjs/dist/esm5/internal/Observable.js","../node_modules/rxjs/dist/esm5/internal/util/lift.js","../node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../node_modules/rxjs/dist/esm5/internal/Subject.js","../node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../node_modules/rxjs/dist/esm5/internal/Scheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../node_modules/rxjs/dist/esm5/internal/observable/empty.js","../node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../node_modules/rxjs/dist/esm5/internal/util/args.js","../node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../node_modules/rxjs/dist/esm5/internal/observable/from.js","../node_modules/rxjs/dist/esm5/internal/util/isDate.js","../node_modules/rxjs/dist/esm5/internal/operators/timeout.js","../node_modules/rxjs/dist/esm5/internal/operators/map.js","../node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js","../node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js","../node_modules/rxjs/dist/esm5/internal/observable/timer.js","../node_modules/rxjs/dist/esm5/internal/observable/merge.js","../node_modules/rxjs/dist/esm5/internal/operators/filter.js","../node_modules/rxjs/dist/esm5/internal/operators/buffer.js","../node_modules/rxjs/dist/esm5/internal/operators/debounceTime.js","../node_modules/rxjs/dist/esm5/internal/operators/take.js","../node_modules/rxjs/dist/esm5/internal/operators/mapTo.js","../node_modules/rxjs/dist/esm5/internal/operators/delayWhen.js","../node_modules/rxjs/dist/esm5/internal/operators/delay.js","../node_modules/rxjs/dist/esm5/internal/operators/pairwise.js","../node_modules/rxjs/dist/esm5/internal/operators/share.js","../node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/helpers.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/libs/messenger.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/hierarchy.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-change.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-action-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture-plugin.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/constants.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/helpers.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/campaign-parser.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/web-attribution.js","../node_modules/@amplitude/analytics-browser/lib/esm/browser-client.js","../node_modules/@amplitude/analytics-browser/lib/esm/browser-client-factory.js","../node_modules/@amplitude/analytics-browser/lib/esm/index.js","../node_modules/@sentry/core/build/esm/debug-build.js","../node_modules/@sentry/core/build/esm/utils-hoist/version.js","../node_modules/@sentry/core/build/esm/utils-hoist/worldwide.js","../node_modules/@sentry/core/build/esm/utils-hoist/debug-build.js","../node_modules/@sentry/core/build/esm/utils-hoist/logger.js","../node_modules/@sentry/core/build/esm/utils-hoist/stacktrace.js","../node_modules/@sentry/core/build/esm/utils-hoist/instrument/handlers.js","../node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalError.js","../node_modules/@sentry/core/build/esm/utils-hoist/instrument/globalUnhandledRejection.js","../node_modules/@sentry/core/build/esm/carrier.js","../node_modules/@sentry/core/build/esm/utils-hoist/is.js","../node_modules/@sentry/core/build/esm/utils-hoist/browser.js","../node_modules/@sentry/core/build/esm/utils-hoist/string.js","../node_modules/@sentry/core/build/esm/utils-hoist/object.js","../node_modules/@sentry/core/build/esm/utils-hoist/time.js","../node_modules/@sentry/core/build/esm/utils-hoist/misc.js","../node_modules/@sentry/core/build/esm/utils-hoist/syncpromise.js","../node_modules/@sentry/core/build/esm/session.js","../node_modules/@sentry/core/build/esm/utils-hoist/propagationContext.js","../node_modules/@sentry/core/build/esm/utils/merge.js","../node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../node_modules/@sentry/core/build/esm/scope.js","../node_modules/@sentry/core/build/esm/defaultScopes.js","../node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../node_modules/@sentry/core/build/esm/asyncContext/index.js","../node_modules/@sentry/core/build/esm/currentScopes.js","../node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../node_modules/@sentry/core/build/esm/semanticAttributes.js","../node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../node_modules/@sentry/core/build/esm/utils-hoist/baggage.js","../node_modules/@sentry/core/build/esm/utils-hoist/tracing.js","../node_modules/@sentry/core/build/esm/utils/spanUtils.js","../node_modules/@sentry/core/build/esm/tracing/errors.js","../node_modules/@sentry/core/build/esm/tracing/utils.js","../node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js","../node_modules/@sentry/core/build/esm/constants.js","../node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../node_modules/@sentry/core/build/esm/tracing/logSpans.js","../node_modules/@sentry/core/build/esm/utils/parseSampleRate.js","../node_modules/@sentry/core/build/esm/tracing/sampling.js","../node_modules/@sentry/core/build/esm/utils-hoist/dsn.js","../node_modules/@sentry/core/build/esm/utils-hoist/memo.js","../node_modules/@sentry/core/build/esm/utils-hoist/normalize.js","../node_modules/@sentry/core/build/esm/utils-hoist/envelope.js","../node_modules/@sentry/core/build/esm/envelope.js","../node_modules/@sentry/core/build/esm/tracing/measurement.js","../node_modules/@sentry/core/build/esm/tracing/sentrySpan.js","../node_modules/@sentry/core/build/esm/tracing/trace.js","../node_modules/@sentry/core/build/esm/tracing/idleSpan.js","../node_modules/@sentry/core/build/esm/eventProcessors.js","../node_modules/@sentry/core/build/esm/utils-hoist/debug-ids.js","../node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../node_modules/@sentry/core/build/esm/exports.js","../node_modules/@sentry/core/build/esm/api.js","../node_modules/@sentry/core/build/esm/integration.js","../node_modules/@sentry/core/build/esm/utils-hoist/clientreport.js","../node_modules/@sentry/core/build/esm/utils-hoist/error.js","../node_modules/@sentry/core/build/esm/baseclient.js","../node_modules/@sentry/core/build/esm/sdk.js","../node_modules/@sentry/core/build/esm/utils-hoist/promisebuffer.js","../node_modules/@sentry/core/build/esm/utils-hoist/ratelimit.js","../node_modules/@sentry/core/build/esm/transports/base.js","../node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js","../node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../node_modules/@sentry/core/build/esm/utils/traceData.js","../node_modules/@sentry/core/build/esm/breadcrumbs.js","../node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../node_modules/@sentry/core/build/esm/integrations/inboundfilters.js","../node_modules/@sentry/core/build/esm/utils-hoist/aggregate-errors.js","../node_modules/@sentry/core/build/esm/utils-hoist/url.js","../node_modules/@sentry/core/build/esm/utils-hoist/instrument/console.js","../node_modules/@sentry/core/build/esm/utils-hoist/severity.js","../node_modules/@sentry/core/build/esm/integrations/dedupe.js","../node_modules/@sentry/core/build/esm/fetch.js","../node_modules/@sentry/core/build/esm/utils-hoist/breadcrumb-log-level.js","../node_modules/@sentry/core/build/esm/utils-hoist/supports.js","../node_modules/@sentry/core/build/esm/utils-hoist/instrument/fetch.js","../node_modules/@sentry/core/build/esm/utils-hoist/env.js","../node_modules/@sentry/core/build/esm/utils-hoist/node.js","../node_modules/@sentry/core/build/esm/utils-hoist/isBrowser.js","../node_modules/@sentry/core/build/esm/utils-hoist/vendor/supportsHistory.js","../node_modules/@sentry/core/build/esm/utils-hoist/buildPolyfills/_nullishCoalesce.js","../node_modules/@sentry/core/build/esm/utils-hoist/buildPolyfills/_optionalChain.js","../node_modules/@sentry/browser/build/npm/esm/helpers.js","../node_modules/@sentry/browser/build/npm/esm/debug-build.js","../node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","../node_modules/@sentry/browser/build/npm/esm/userfeedback.js","../node_modules/@sentry/browser/build/npm/esm/client.js","../node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js","../node_modules/@sentry-internal/browser-utils/build/esm/types.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/interactions.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdle.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js","../node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js","../node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js","../node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js","../node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js","../node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js","../node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","../node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","../node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","../node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","../node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js","../node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","../node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","../node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","../node_modules/@sentry/browser/build/npm/esm/sdk.js","../node_modules/@sentry-internal/replay/build/npm/esm/index.js","../node_modules/@sentry/browser/build/npm/esm/tracing/request.js","../node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js","../node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js","../node_modules/@sentry/react/build/esm/sdk.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/index.js","../node_modules/react-dom/client.js","../node_modules/@tanstack/query-core/build/lib/subscribable.mjs","../node_modules/@tanstack/query-core/build/lib/utils.mjs","../node_modules/@tanstack/query-core/build/lib/focusManager.mjs","../node_modules/@tanstack/query-core/build/lib/onlineManager.mjs","../node_modules/@tanstack/query-core/build/lib/retryer.mjs","../node_modules/@tanstack/query-core/build/lib/logger.mjs","../node_modules/@tanstack/query-core/build/lib/notifyManager.mjs","../node_modules/@tanstack/query-core/build/lib/removable.mjs","../node_modules/@tanstack/query-core/build/lib/query.mjs","../node_modules/@tanstack/query-core/build/lib/queryCache.mjs","../node_modules/@tanstack/query-core/build/lib/mutation.mjs","../node_modules/@tanstack/query-core/build/lib/mutationCache.mjs","../node_modules/@tanstack/query-core/build/lib/infiniteQueryBehavior.mjs","../node_modules/@tanstack/query-core/build/lib/queryClient.mjs","../node_modules/@tanstack/query-core/build/lib/queryObserver.mjs","../node_modules/@tanstack/query-core/build/lib/mutationObserver.mjs","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/@tanstack/react-query/build/lib/useSyncExternalStore.mjs","../node_modules/@tanstack/react-query/build/lib/QueryClientProvider.mjs","../node_modules/@tanstack/react-query/build/lib/isRestoring.mjs","../node_modules/@tanstack/react-query/build/lib/QueryErrorResetBoundary.mjs","../node_modules/@tanstack/react-query/build/lib/utils.mjs","../node_modules/@tanstack/react-query/build/lib/errorBoundaryUtils.mjs","../node_modules/@tanstack/react-query/build/lib/suspense.mjs","../node_modules/@tanstack/react-query/build/lib/useBaseQuery.mjs","../node_modules/@tanstack/react-query/build/lib/useQuery.mjs","../node_modules/@tanstack/react-query/build/lib/useMutation.mjs","../node_modules/@aws-amplify/core/dist/esm/constants.mjs","../node_modules/@aws-amplify/core/dist/esm/Logger/types.mjs","../node_modules/@aws-amplify/core/dist/esm/Logger/ConsoleLogger.mjs","../node_modules/@aws-amplify/core/dist/esm/errors/AmplifyError.mjs","../node_modules/@aws-amplify/core/dist/esm/types/errors.mjs","../node_modules/@aws-amplify/core/dist/esm/errors/createAssertionFunction.mjs","../node_modules/@aws-amplify/core/dist/esm/Hub/index.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/globalHelpers/index.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/convert/base64/base64Decoder.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/Auth/utils/errorHelpers.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/Auth/utils/index.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/retry/isNonRetryableError.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/retry/retry.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/deepFreeze.mjs","../node_modules/@aws-amplify/core/dist/esm/parseAWSExports.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/constants.mjs","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@aws-amplify/core/dist/esm/parseAmplifyOutputs.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/parseAmplifyConfig.mjs","../node_modules/@aws-crypto/sha256-js/build/module/constants.js","../node_modules/@aws-crypto/sha256-js/build/module/RawSha256.js","../node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@smithy/util-utf8/dist-es/toUint8Array.js","../node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../node_modules/@aws-crypto/util/build/module/convertToBuffer.js","../node_modules/@aws-crypto/util/build/module/isEmptyData.js","../node_modules/@aws-crypto/util/build/module/uint32ArrayFrom.js","../node_modules/@aws-crypto/sha256-js/build/module/jsSha256.js","../node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@aws-amplify/core/dist/esm/Platform/types.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/version.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/helpers.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/React.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Vue.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Svelte.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Next.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Nuxt.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Angular.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/ReactNative.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Expo.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/Web.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detection/index.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/detectFramework.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/customUserAgent.mjs","../node_modules/@aws-amplify/core/dist/esm/Platform/index.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/isBrowser.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/Auth/index.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/Amplify.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/apis/internal/fetchAuthSession.mjs","../node_modules/@aws-amplify/core/dist/esm/singleton/apis/fetchAuthSession.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/serde/responseInfo.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/serde/json.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/internal/composeServiceApi.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/endpoints/partitions.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/endpoints/getDnsSuffix.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/constants.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/retryMiddleware.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/amplifyUuid/index.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/amzSdkInvocationIdHeaderMiddleware.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/amzSdkRequestHeaderMiddleware.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/userAgent/middleware.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/internal/composeTransferHandler.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/utils/memoization.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/handlers/fetch.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/handlers/aws/unauthenticated.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/retry/constants.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/retry/jitteredBackoff.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/jitteredBackoff.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/isClockSkewError.mjs","../node_modules/@aws-amplify/core/dist/esm/clients/middleware/retry/defaultRetryDecider.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/amplifyUrl/index.mjs","../node_modules/@aws-amplify/core/dist/esm/awsClients/cognitoIdentity/base.mjs","../node_modules/@aws-amplify/core/dist/esm/awsClients/cognitoIdentity/getId.mjs","../node_modules/@aws-amplify/core/dist/esm/awsClients/cognitoIdentity/getCredentialsForIdentity.mjs","../node_modules/@aws-amplify/core/dist/esm/errors/PlatformNotSupportedError.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/KeyValueStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/InMemoryStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/utils.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/DefaultStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/SessionStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/SyncKeyValueStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/SyncSessionStorage.mjs","../node_modules/js-cookie/dist/js.cookie.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/CookieStorage.mjs","../node_modules/@aws-amplify/core/dist/esm/storage/index.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/retry/jitteredExponentialRetry.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/deDupeAsyncFunction.mjs","../node_modules/@aws-amplify/core/dist/esm/utils/isTokenExpired.mjs","../node_modules/@aws-amplify/auth/dist/esm/errors/AuthError.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/parsers/regionParsers.mjs","../node_modules/@aws-amplify/auth/dist/esm/errors/constants.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/utils/types.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/shared/serde/createUserPoolSerializer.mjs","../node_modules/@aws-amplify/auth/dist/esm/errors/utils/assertServiceError.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/shared/serde/createUserPoolDeserializer.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/constants.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/factories/serviceClients/cognitoIdentityProvider/createInitiateAuthClient.mjs","../node_modules/@aws-amplify/auth/dist/esm/foundation/cognitoUserPoolEndpointResolver.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/factories/createCognitoUserPoolEndpointResolver.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/utils/userContextData.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/utils/refreshAuthTokens.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/types.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/errorHelpers.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/constants.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/TokenStore.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/utils/signInWithRedirectStore.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/utils/oauth/oAuthStore.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/TokenOrchestrator.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/CognitoUserPoolsTokenProvider.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/tokenProvider/tokenProvider.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/types.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/IdentityIdStore.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/utils.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/IdentityIdProvider.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/credentialsProvider.mjs","../node_modules/@aws-amplify/auth/dist/esm/providers/cognito/credentialsProvider/index.mjs","../node_modules/aws-amplify/dist/esm/initSingleton.mjs","../node_modules/void-elements/index.js","../node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","../node_modules/react-i18next/dist/es/utils.js","../node_modules/react-i18next/dist/es/unescape.js","../node_modules/react-i18next/dist/es/defaults.js","../node_modules/react-i18next/dist/es/i18nInstance.js","../node_modules/react-i18next/dist/es/TransWithoutContext.js","../node_modules/react-i18next/dist/es/initReactI18next.js","../node_modules/react-i18next/dist/es/context.js","../node_modules/react-i18next/dist/es/Trans.js","../node_modules/react-i18next/dist/es/useTranslation.js","../node_modules/react-i18next/dist/es/I18nextProvider.js","../node_modules/@remix-run/router/dist/router.js","../node_modules/react-router/dist/index.js","../node_modules/react-router-dom/dist/index.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/react-toastify/dist/react-toastify.esm.mjs","../node_modules/fontfaceobserver/fontfaceobserver.standalone.js","../node_modules/use-font-face-observer/dist/index.modern.js","../src/hooks/useTelegram.ts","../node_modules/jotai/esm/vanilla/internals.mjs","../node_modules/jotai/esm/vanilla.mjs","../node_modules/jotai/esm/react.mjs","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../src/config/api.config.ts","../src/services/api/interceptors.api.ts","../src/services/api/request.api.ts","../src/services/search.service.ts","../src/store.ts","../src/hooks/useSearch.ts","../src/services/auth.service.ts","../src/hooks/useProfile.ts","../src/hooks/useAmplitude.ts","../src/components/ui/layouts/ButtonLayout.tsx","../src/components/ui/layouts/main-layout/bottom-menu/MenuItem.tsx","../src/components/ui/layouts/main-layout/bottom-menu/menu.data.ts","../src/components/ui/layouts/main-layout/bottom-menu/BottomMenu.tsx","../src/components/ui/layouts/main-layout/MainLayout.tsx","../src/components/ui/progress-bar/ProgressBar.tsx","../src/components/ui/button/Button.tsx","../src/components/ui/welcome-screen/WelcomeScreen.tsx","../src/components/ui/empty-state/EmptyState.tsx","../node_modules/react-loading-skeleton/dist/index.js","../src/components/ui/Skeleton.tsx","../node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/utils/use-constant.mjs","../node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../node_modules/framer-motion/dist/es/utils/is-browser.mjs","../node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../node_modules/motion-utils/dist/es/noop.mjs","../node_modules/motion-utils/dist/es/errors.mjs","../node_modules/motion-utils/dist/es/memo.mjs","../node_modules/motion-utils/dist/es/progress.mjs","../node_modules/motion-utils/dist/es/time-conversion.mjs","../node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","../node_modules/framer-motion/dist/es/frameloop/render-step.mjs","../node_modules/framer-motion/dist/es/frameloop/batcher.mjs","../node_modules/framer-motion/dist/es/frameloop/frame.mjs","../node_modules/framer-motion/dist/es/context/LazyContext.mjs","../node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../node_modules/framer-motion/dist/es/frameloop/microtask.mjs","../node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../node_modules/framer-motion/dist/es/motion/index.mjs","../node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../node_modules/framer-motion/dist/es/utils/resolve-value.mjs","../node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","../node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../node_modules/framer-motion/dist/es/render/html/utils/keys-transform.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","../node_modules/framer-motion/dist/es/utils/clamp.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number-browser.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/transform.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","../node_modules/framer-motion/dist/es/render/html/config-motion.mjs","../node_modules/framer-motion/dist/es/render/html/use-props.mjs","../node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../node_modules/framer-motion/dist/es/render/components/create-factory.mjs","../node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../node_modules/motion-dom/dist/es/animation/controls/BaseGroup.mjs","../node_modules/motion-dom/dist/es/animation/controls/Group.mjs","../node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/attach-timeline.mjs","../node_modules/motion-dom/dist/es/utils/is-bezier-definition.mjs","../node_modules/motion-dom/dist/es/utils/supports/flags.mjs","../node_modules/motion-dom/dist/es/utils/supports/memo.mjs","../node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs","../node_modules/motion-dom/dist/es/animation/waapi/utils/easing.mjs","../node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs","../node_modules/motion-dom/dist/es/utils/resolve-elements.mjs","../node_modules/motion-dom/dist/es/gestures/utils/setup.mjs","../node_modules/motion-dom/dist/es/gestures/hover.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs","../node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../node_modules/motion-dom/dist/es/gestures/press/index.mjs","../node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs","../node_modules/framer-motion/dist/es/render/html/utils/keys-position.mjs","../node_modules/framer-motion/dist/es/frameloop/sync-time.mjs","../node_modules/framer-motion/dist/es/utils/array.mjs","../node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","../node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","../node_modules/framer-motion/dist/es/value/index.mjs","../node_modules/framer-motion/dist/es/render/utils/setters.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","../node_modules/framer-motion/dist/es/easing/back.mjs","../node_modules/framer-motion/dist/es/easing/anticipate.mjs","../node_modules/framer-motion/dist/es/easing/circ.mjs","../node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","../node_modules/framer-motion/dist/es/value/types/utils/sanitize.mjs","../node_modules/framer-motion/dist/es/value/types/utils/float-regex.mjs","../node_modules/framer-motion/dist/es/value/types/utils/is-nullish.mjs","../node_modules/framer-motion/dist/es/value/types/utils/single-color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/color/utils.mjs","../node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","../node_modules/framer-motion/dist/es/value/types/color/hex.mjs","../node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","../node_modules/framer-motion/dist/es/value/types/color/index.mjs","../node_modules/framer-motion/dist/es/value/types/utils/color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/complex/index.mjs","../node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","../node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","../node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.mjs","../node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/can-animate.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.mjs","../node_modules/framer-motion/dist/es/utils/mix/number.mjs","../node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","../node_modules/framer-motion/dist/es/utils/mix/immediate.mjs","../node_modules/framer-motion/dist/es/utils/mix/color.mjs","../node_modules/framer-motion/dist/es/utils/pipe.mjs","../node_modules/framer-motion/dist/es/utils/mix/visibility.mjs","../node_modules/framer-motion/dist/es/utils/mix/complex.mjs","../node_modules/framer-motion/dist/es/utils/mix/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/defaults.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","../node_modules/framer-motion/dist/es/easing/ease.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","../node_modules/framer-motion/dist/es/easing/utils/map.mjs","../node_modules/framer-motion/dist/es/utils/interpolate.mjs","../node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","../node_modules/framer-motion/dist/es/utils/offsets/default.mjs","../node_modules/framer-motion/dist/es/utils/offsets/time.mjs","../node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","../node_modules/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs","../node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs","../node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs","../node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs","../node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../node_modules/framer-motion/dist/es/motion/features/animations.mjs","../node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../node_modules/framer-motion/dist/es/events/event-info.mjs","../node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../node_modules/framer-motion/dist/es/utils/distance.mjs","../node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../node_modules/framer-motion/dist/es/projection/node/state.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../node_modules/framer-motion/dist/es/animation/animate/single-value.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","../node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../node_modules/framer-motion/dist/es/utils/delay.mjs","../node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../node_modules/framer-motion/dist/es/motion/features/drag.mjs","../node_modules/framer-motion/dist/es/gestures/hover.mjs","../node_modules/framer-motion/dist/es/gestures/focus.mjs","../node_modules/framer-motion/dist/es/gestures/press.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../node_modules/framer-motion/dist/es/motion/features/layout.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","../node_modules/framer-motion/dist/es/render/store.mjs","../node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../node_modules/framer-motion/dist/es/render/VisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../node_modules/framer-motion/dist/es/render/components/motion/create.mjs","../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../src/utils/countCharacters.ts","../src/utils/getRandomMessage.ts","../src/utils/toastNotifications.tsx","../src/utils/createCloudinaryUrl.ts","../src/components/ui/card/components/modals/ModalInvite.tsx","../src/components/ui/card/components/modals/ModalPremium.tsx","../src/providers/ButtonProvider.tsx","../src/components/ui/card/components/modals/ModalFriends.tsx","../src/components/ui/card/components/Modals.tsx","../src/components/ui/card/components/Buttons.tsx","../src/components/ui/card/components/Actions.tsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/swiper-react.mjs","../src/components/ui/card/components/Media.tsx","../src/components/ui/card/components/Options.tsx","../src/components/ui/card/components/Content.tsx","../src/components/ui/card/Card.tsx","../node_modules/icomoon-react/build/src/IcomoonReact/IcomoonReact.js","../node_modules/icomoon-react/build/src/index.js","../src/components/ui/icon/Icon.tsx","../src/components/ui/bottom-sheet/BottomSheet.tsx","../src/components/ui/typography/typography.config.ts","../src/components/ui/typography/Typography.tsx","../node_modules/react-hook-form/dist/index.esm.mjs","../src/components/ui/form-elements/field/Field.tsx","../src/components/ui/form-elements/file-field/FileField.tsx","../src/components/ui/form-elements/file-field/FileFieldController.tsx","../src/components/ui/form-elements/radio/Radio.tsx","../src/components/ui/form-elements/checxbox/Checkbox.tsx","../src/components/ui/media/Photo.tsx","../src/utils/regex.ts","../src/components/ui/media/Description.tsx","../src/components/ui/star-image/StarImage.tsx","../src/components/screens/unauthorized/registration/AuthLayout.tsx","../src/components/screens/unauthorized/registration/screens/BeautifulPhoto.tsx","../src/components/screens/unauthorized/registration/screens/ProfessionalPhoto.tsx","../src/components/screens/unauthorized/registration/screens/AuthenticPhoto.tsx","../src/components/screens/unauthorized/registration/screens/BeautifulDescription.tsx","../src/components/screens/unauthorized/registration/screens/ProfessionalDescription.tsx","../src/components/screens/unauthorized/registration/screens/AuthenticDescription.tsx","../src/assets/images/face-liveness-start.svg","../src/components/screens/unauthorized/registration/useAuth.ts","../src/components/screens/unauthorized/registration/screens/FaceLivenessStart.tsx","../src/assets/images/face-liveness-error.svg","../src/components/screens/unauthorized/registration/screens/FaceLivenessError.tsx","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isObjectLike.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../node_modules/use-sync-external-store/shim/with-selector.js","../node_modules/xstate/es/_virtual/_tslib.js","../node_modules/xstate/es/types.js","../node_modules/xstate/es/actionTypes.js","../node_modules/xstate/es/constants.js","../node_modules/xstate/es/utils.js","../node_modules/xstate/es/actions.js","../node_modules/xstate/es/serviceScope.js","../node_modules/xstate/es/Actor.js","../node_modules/xstate/es/stateUtils.js","../node_modules/xstate/es/State.js","../node_modules/xstate/es/scheduler.js","../node_modules/xstate/es/registry.js","../node_modules/xstate/es/devTools.js","../node_modules/xstate/es/behaviors.js","../node_modules/xstate/es/interpreter.js","../node_modules/xstate/es/invokeUtils.js","../node_modules/xstate/es/StateNode.js","../node_modules/xstate/es/Machine.js","../node_modules/xstate/es/index.js","../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/@xstate/react/es/useConstant.js","../node_modules/@xstate/react/es/useInterpret.js","../node_modules/@xstate/react/es/utils.js","../node_modules/@xstate/react/es/useActor.js","../node_modules/@xstate/react/es/useSelector.js","../node_modules/@aws-amplify/ui/dist/esm/utils/utils.mjs","../node_modules/lodash/_arrayMap.js","../node_modules/lodash/isSymbol.js","../node_modules/lodash/_baseToString.js","../node_modules/lodash/toString.js","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/borderWidths.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/colors.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/alert.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/aiConversation.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/autocomplete.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/authenticator.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/avatar.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/badge.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/breadcrumbs.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/button.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/card.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/checkbox.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/checkboxField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/collection.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/copy.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/dialCodeSelect.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/divider.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/dropZone.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/accordion.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/field.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/fieldControl.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/fieldGroup.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/fieldset.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/fieldMessages.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/fileuploader.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/flex.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/heading.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/highlightMatch.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/icon.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/input.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/image.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/inAppMessaging.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/link.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/liveness.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/loader.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/menu.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/message.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/pagination.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/passwordField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/phoneNumberField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/placeholder.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/radio.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/radioGroup.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/rating.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/searchField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/select.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/selectField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/sliderField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/stepperField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/storagemanager.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/switchField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/table.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/tabs.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/text.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/textAreaField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/textField.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/toggleButton.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/toggleButtonGroup.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/components/index.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/fonts.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/fontSizes.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/fontWeights.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/lineHeights.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/opacities.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/outlineOffsets.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/outlineWidths.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/radii.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/shadows.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/space.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/time.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/transforms.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/tokens/index.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/breakpoints.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/defaultTheme.mjs","../node_modules/lodash/_arrayReduce.js","../node_modules/lodash/_basePropertyOf.js","../node_modules/lodash/_deburrLetter.js","../node_modules/lodash/deburr.js","../node_modules/lodash/_asciiWords.js","../node_modules/lodash/_hasUnicodeWord.js","../node_modules/lodash/_unicodeWords.js","../node_modules/lodash/words.js","../node_modules/lodash/_createCompounder.js","../node_modules/lodash/kebabCase.js","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/constants.mjs","../node_modules/@aws-amplify/ui/dist/esm/utils/references.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/utils.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/createComponentCSS.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/createColorPalette.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/createAnimationCSS.mjs","../node_modules/@aws-amplify/ui/dist/esm/theme/createTheme/createTheme.mjs","../node_modules/@aws-amplify/ui/dist/esm/utils/classNames.mjs","../node_modules/@aws-amplify/ui/dist/esm/types/primitives/componentClassName.mjs","../__vite-browser-external","../node_modules/@aws-amplify/ui-react/dist/esm/components/ThemeProvider/ThemeContext.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/types/style.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/constants.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/types/theme.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/utils.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/responsive/utils.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/responsive/getMediaQueries.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/responsive/useBreakpoint.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/hooks/useTheme.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/getStyleValue.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/shared/styleUtils.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/primitiveWithForwardRef.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/View/View.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/Icon.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/context/IconsContext.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/context/useIcons.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconCheckCircle.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconError.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconInfo.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconWarning.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Alert/AlertIcon.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/useLayoutEffect.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/useStableId.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Fieldset/useFieldset.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Flex/Flex.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Loader/Loader.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Button/Button.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconClose.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Text/Text.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Field/FieldDescription.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Field/FieldErrorMessage.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Label/Label.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/getUniqueComponentId.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/splitPrimitiveProps.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/utils/createSpaceSeparatedIds.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/helpers/constants.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/VisuallyHidden/VisuallyHidden.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Icon/icons/IconExpandMore.mjs","../node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/Select/Select.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/primitives/SelectField/SelectField.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/components/ThemeProvider/Style.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/components/ThemeProvider/ThemeStyle.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/components/ThemeProvider/ThemeProvider.mjs","../node_modules/nanoid/index.browser.js","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/types/liveness.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/types/error.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/constants.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/liveness.mjs","../node_modules/@tensorflow/tfjs-core/dist/backends/backend.js","../node_modules/@tensorflow/tfjs-core/dist/util_base.js","../node_modules/@tensorflow/tfjs-core/dist/environment.js","../node_modules/@tensorflow/tfjs-core/dist/global_util.js","../node_modules/@tensorflow/tfjs-core/dist/kernel_names.js","../node_modules/@tensorflow/tfjs-core/dist/log.js","../node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js","../node_modules/@tensorflow/tfjs-core/dist/platforms/is_typed_array_browser.js","../node_modules/long/src/long.js","../node_modules/@tensorflow/tfjs-core/dist/hash_util.js","../node_modules/@tensorflow/tfjs-core/dist/util.js","../node_modules/@tensorflow/tfjs-core/dist/profiler.js","../node_modules/@tensorflow/tfjs-core/dist/tape.js","../node_modules/@tensorflow/tfjs-core/dist/tensor_format.js","../node_modules/@tensorflow/tfjs-core/dist/tensor.js","../node_modules/@tensorflow/tfjs-core/dist/types.js","../node_modules/@tensorflow/tfjs-core/dist/tensor_util.js","../node_modules/@tensorflow/tfjs-core/dist/engine.js","../node_modules/@tensorflow/tfjs-core/dist/device_util.js","../node_modules/@tensorflow/tfjs-core/dist/flags.js","../node_modules/@tensorflow/tfjs-core/dist/tensor_util_env.js","../node_modules/@tensorflow/tfjs-core/dist/ops/operation.js","../node_modules/@tensorflow/tfjs-core/dist/ops/complex.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor_ops_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js","../node_modules/@tensorflow/tfjs-core/dist/io/types.js","../node_modules/@tensorflow/tfjs-core/dist/io/composite_array_buffer.js","../node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js","../node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js","../node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js","../node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js","../node_modules/@tensorflow/tfjs-core/dist/io/model_management.js","../node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js","../node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js","../node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js","../node_modules/@tensorflow/tfjs-core/dist/ops/cast.js","../node_modules/@tensorflow/tfjs-core/dist/ops/clone.js","../node_modules/@tensorflow/tfjs-core/dist/ops/print.js","../node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js","../node_modules/@tensorflow/tfjs-core/dist/globals.js","../node_modules/@tensorflow/tfjs-core/dist/ops/add.js","../node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.js","../node_modules/@tensorflow/tfjs-core/dist/ops/div.js","../node_modules/@tensorflow/tfjs-core/dist/ops/mul.js","../node_modules/@tensorflow/tfjs-core/dist/ops/abs.js","../node_modules/@tensorflow/tfjs-core/dist/ops/acos.js","../node_modules/@tensorflow/tfjs-core/dist/ops/acosh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/add_n.js","../node_modules/@tensorflow/tfjs-core/dist/ops/all.js","../node_modules/@tensorflow/tfjs-core/dist/ops/any.js","../node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.js","../node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.js","../node_modules/@tensorflow/tfjs-core/dist/ops/asin.js","../node_modules/@tensorflow/tfjs-core/dist/ops/asinh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/atan.js","../node_modules/@tensorflow/tfjs-core/dist/ops/atan2.js","../node_modules/@tensorflow/tfjs-core/dist/ops/atanh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reshape.js","../node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js","../node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat.js","../node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tanh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/basic_lstm_cell.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/bincount.js","../node_modules/@tensorflow/tfjs-core/dist/ops/bitwise_and.js","../node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_args.js","../node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fill.js","../node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_input.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_input.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js","../node_modules/@tensorflow/tfjs-core/dist/ops/cos.js","../node_modules/@tensorflow/tfjs-core/dist/ops/cosh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/cumprod.js","../node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/dense_bincount.js","../node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js","../node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/diag.js","../node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/equal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/where.js","../node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.js","../node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js","../node_modules/@tensorflow/tfjs-core/dist/ops/dot.js","../node_modules/@tensorflow/tfjs-core/dist/ops/einsum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/elu.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ensure_shape.js","../node_modules/@tensorflow/tfjs-core/dist/ops/erf.js","../node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/max.js","../node_modules/@tensorflow/tfjs-core/dist/ops/min.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pow.js","../node_modules/@tensorflow/tfjs-core/dist/ops/scalar.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.js","../node_modules/@tensorflow/tfjs-core/dist/ops/square.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/norm.js","../node_modules/@tensorflow/tfjs-core/dist/ops/euclidean_norm.js","../node_modules/@tensorflow/tfjs-core/dist/ops/exp.js","../node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.js","../node_modules/@tensorflow/tfjs-core/dist/ops/expm1.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tile.js","../node_modules/@tensorflow/tfjs-core/dist/ops/eye.js","../node_modules/@tensorflow/tfjs-core/dist/ops/floor.js","../node_modules/@tensorflow/tfjs-core/dist/ops/gather.js","../node_modules/@tensorflow/tfjs-core/dist/ops/greater.js","../node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/imag.js","../node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.js","../node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.js","../node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.js","../node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.js","../node_modules/@tensorflow/tfjs-core/dist/ops/less.js","../node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/linspace.js","../node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.js","../node_modules/@tensorflow/tfjs-core/dist/ops/log.js","../node_modules/@tensorflow/tfjs-core/dist/ops/log1p.js","../node_modules/@tensorflow/tfjs-core/dist/gradients.js","../node_modules/@tensorflow/tfjs-core/dist/ops/neg.js","../node_modules/@tensorflow/tfjs-core/dist/ops/softplus.js","../node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sub.js","../node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js","../node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.js","../node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.js","../node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.js","../node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.js","../node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.js","../node_modules/@tensorflow/tfjs-core/dist/ops/search_sorted.js","../node_modules/@tensorflow/tfjs-core/dist/ops/lower_bound.js","../node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.js","../node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_with_argmax.js","../node_modules/@tensorflow/tfjs-core/dist/ops/maximum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/mean.js","../node_modules/@tensorflow/tfjs-core/dist/ops/zeros.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ones.js","../node_modules/@tensorflow/tfjs-core/dist/ops/meshgrid.js","../node_modules/@tensorflow/tfjs-core/dist/ops/minimum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.js","../node_modules/@tensorflow/tfjs-core/dist/ops/mod.js","../node_modules/@tensorflow/tfjs-core/dist/ops/moments.js","../node_modules/@tensorflow/tfjs-core/dist/ops/multi_rnn_cell.js","../node_modules/@tensorflow/tfjs-core/dist/ops/multinomial.js","../node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.js","../node_modules/@tensorflow/tfjs-core/dist/ops/outer_product.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pad.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pad1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pad2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pad3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pad4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js","../node_modules/@tensorflow/tfjs-core/dist/ops/pool.js","../node_modules/@tensorflow/tfjs-core/dist/ops/prelu.js","../node_modules/@tensorflow/tfjs-core/dist/ops/prod.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ragged_gather.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ragged_range.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ragged_tensor_to_tensor.js","../node_modules/@tensorflow/tfjs-core/dist/ops/rand.js","../node_modules/seedrandom/lib/alea.js","../node_modules/seedrandom/lib/xor128.js","../node_modules/seedrandom/lib/xorwow.js","../node_modules/seedrandom/lib/xorshift7.js","../node_modules/seedrandom/lib/xor4096.js","../node_modules/seedrandom/lib/tychei.js","../node_modules/seedrandom/seedrandom.js","../node_modules/seedrandom/index.js","../node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.js","../node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/random_standard_normal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.js","../node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform_int.js","../node_modules/@tensorflow/tfjs-core/dist/ops/range.js","../node_modules/@tensorflow/tfjs-core/dist/ops/real.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/relu.js","../node_modules/@tensorflow/tfjs-core/dist/ops/relu6.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reverse.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reverse_1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reverse_2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reverse_3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/reverse_4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/round.js","../node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.js","../node_modules/@tensorflow/tfjs-core/dist/ops/selu.js","../node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/setdiff1d_async.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sign.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sin.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sinh.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/softmax.js","../node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.js","../node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.js","../node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.js","../node_modules/@tensorflow/tfjs-core/dist/ops/split.js","../node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js","../node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.js","../node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.js","../node_modules/@tensorflow/tfjs-core/dist/ops/stack.js","../node_modules/@tensorflow/tfjs-core/dist/ops/step.js","../node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tan.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor4d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor5d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor6d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/tensor_scatter_update.js","../node_modules/@tensorflow/tfjs-core/dist/ops/topk.js","../node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.js","../node_modules/@tensorflow/tfjs-core/dist/ops/unique.js","../node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/unstack.js","../node_modules/@tensorflow/tfjs-core/dist/ops/upper_bound.js","../node_modules/@tensorflow/tfjs-core/dist/ops/variable.js","../node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.js","../node_modules/@tensorflow/tfjs-core/dist/ops/where_async.js","../node_modules/@tensorflow/tfjs-core/dist/ops/boolean_mask.js","../node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js","../node_modules/@tensorflow/tfjs-core/dist/ops/moving_average.js","../node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense.js","../node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd.js","../node_modules/@tensorflow/tfjs-core/dist/ops/dropout_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js","../node_modules/@tensorflow/tfjs-core/dist/ops/signal_ops_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/in_top_k.js","../node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_filter.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_filter.js","../node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_input.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.js","../node_modules/@tensorflow/tfjs-core/dist/ops/fused_ops.js","../node_modules/@tensorflow/tfjs-core/dist/ops/signal/hamming_window.js","../node_modules/@tensorflow/tfjs-core/dist/ops/signal/hann_window.js","../node_modules/@tensorflow/tfjs-core/dist/ops/signal/frame.js","../node_modules/@tensorflow/tfjs-core/dist/ops/signal/stft.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/crop_and_resize.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/flip_left_right.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/grayscale_to_rgb.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/rgb_to_grayscale.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/rotate_with_offset.js","../node_modules/@tensorflow/tfjs-core/dist/ops/nonmax_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js","../node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_util.js","../node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score_async.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded_async.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_bilinear.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_nearest_neighbor.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/threshold.js","../node_modules/@tensorflow/tfjs-core/dist/ops/image/transform.js","../node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js","../node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js","../node_modules/@tensorflow/tfjs-core/dist/ops/linalg/qr.js","../node_modules/@tensorflow/tfjs-core/dist/ops/loss_ops_utils.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/compute_weighted_loss.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/absolute_difference.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/cosine_distance.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/hinge_loss.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/huber_loss.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/log_loss.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/mean_squared_error.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/sigmoid_cross_entropy.js","../node_modules/@tensorflow/tfjs-core/dist/ops/losses/softmax_cross_entropy.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_mean.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_sum.js","../node_modules/@tensorflow/tfjs-core/dist/ops/string/string_n_grams.js","../node_modules/@tensorflow/tfjs-core/dist/ops/string/string_split.js","../node_modules/@tensorflow/tfjs-core/dist/ops/string/string_to_hash_bucket_fast.js","../node_modules/@tensorflow/tfjs-core/dist/ops/string/static_regex_replace.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ops.js","../node_modules/@tensorflow/tfjs-core/dist/serialization.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js","../node_modules/@tensorflow/tfjs-core/dist/optimizers/register_optimizers.js","../node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js","../node_modules/@tensorflow/tfjs-core/dist/io/progress.js","../node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js","../node_modules/@tensorflow/tfjs-core/dist/io/http.js","../node_modules/@tensorflow/tfjs-core/dist/io/passthrough.js","../node_modules/@tensorflow/tfjs-core/dist/io/io.js","../node_modules/@tensorflow/tfjs-core/dist/ops/browser.js","../node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ragged_to_dense_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.js","../node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.js","../node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_segment_reduction_util.js","../node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js","../node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js","../node_modules/@tensorflow/tfjs-core/dist/index.js","../node_modules/@mediapipe/face_detection/face_detection.js","../node_modules/@tensorflow/tfjs-converter/dist/flags.js","../node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/utils.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/sparse.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/string.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/node_value_impl.js","../node_modules/@tensorflow/tfjs-core/dist/ops/ops_for_converter.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/arithmetic_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/basic_math_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_utils.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/control_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/convolution_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/creation_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/dynamic_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/evaluation_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/graph_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/hash_table_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/image_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/logical_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/matrices_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/normalization_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/ragged_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/reduction_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/slice_join_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/sparse_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/spectral_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/string_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/executors/transformation_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/operations/operation_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js","../node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js","../node_modules/@tensorflow-models/face-detection/dist/face-detection.esm.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/types.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/_FusedMatMul.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/unary_kernel.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Abs.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Acos.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Acosh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/binary_kernel.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Add.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AddN.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Identity.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transpose.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/kernel_utils.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/All.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Any.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/argminmax_kernel.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ArgMax.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ArgMin.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Asin.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Asinh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Atan.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Atan2.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Atanh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPool.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPool3D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPool3DGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/AvgPoolGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reshape.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchMatMul.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/cpu_util.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Complex.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Identity.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Real.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BitwiseAnd.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_utils.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FloorDiv.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd_Impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedGather_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedRange_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedTensorToTensor_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentReduction_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SquaredDifference.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StaticRegexReplace.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Slice.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BatchToSpaceND.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Bincount.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BitwiseAnd.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/BroadcastArgs.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cast.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Ceil.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ClipByValue.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Concat.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv2DBackpropInput.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv3D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv3DBackpropFilterV2.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Conv3DBackpropInputV2.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cos.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cosh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/CropAndResize.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumprod.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Cumsum.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DenseBincount.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthToSpace.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/DepthwiseConv2dNative.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Diag.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Dilation2D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Dilation2DBackpropFilter.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Dilation2DBackpropInput.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Elu.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/EluGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Equal.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Erf.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Exp.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ExpandDims.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Expm1.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Fill.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FlipLeftRight.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Floor.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FloorDiv.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedBatchNorm.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedConv2D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/FusedDepthwiseConv2D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherNd.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GatherV2.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Greater.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/GreaterEqual.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/IsFinite.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/IsInf.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/IsNan.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LeakyRelu.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Less.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LessEqual.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LinSpace.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Log.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Log1p.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalAnd.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalNot.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalOr.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LogicalXor.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LRN.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/LRNGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Max.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Maximum.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPool.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPool3D.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPool3DGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPoolGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MaxPoolWithArgmax.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Mean.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Min.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Minimum.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/MirrorPad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Softmax.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Multinomial.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Mod.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Multiply.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Neg.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppression_util.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV3.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV4.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NonMaxSuppressionV5.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/NotEqual.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OneHot.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/OnesLike.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pack.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/PadV2.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Pow.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prelu.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Prod.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Range.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RealDiv.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reciprocal.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Relu6.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeBilinear.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeBilinearGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeNearestNeighbor.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ResizeNearestNeighborGrad.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Reverse.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/RotateWithOffset.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Round.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Rsqrt.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ScatterNd.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SearchSorted.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Select.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Selu.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sigmoid.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sign.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sin.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sinh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Softplus.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SpaceToBatchND.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseFillEmptyRows.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseReshape.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentReduction.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentMean.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseSegmentSum.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SparseToDense.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SplitV.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sqrt.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Square.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/SquaredDifference.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Step.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StridedSlice.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringNGrams.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringSplit.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/StringToHashBucketFast.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sub.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Sum.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tan.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tanh.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/TensorScatterUpdate.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Tile.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/TopK.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Transform.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Unique.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/Unpack.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/kernels/ZerosLike.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/register_all_kernels.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/flags_wasm.js","../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js","../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js","../node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/backend_wasm.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/version.js","../node_modules/@tensorflow/tfjs-backend-wasm/dist/base.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Elu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LeakyRelu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prelu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu6.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reshape.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acos.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acosh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AddN.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/All.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Any.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMax.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMin.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asin.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asinh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan2.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atanh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/pool_utils.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchToSpaceND.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BroadcastArgs.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ClipByValue.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ComplexAbs.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Imag.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropInput.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropInputV2.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cos.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cosh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumprod.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DenseBincount.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthToSpace.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropInput.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Diag.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropFilter.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropInput.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Draw.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/EluGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Erf.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ExpandDims.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RealDiv.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Fill.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FlipLeftRight.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedConv2D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedDepthwiseConv2D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IFFT.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsFinite.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsInf.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsNaN.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log1p.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalAnd.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalNot.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalOr.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRN.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRNGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3D.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mean.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Min.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MirrorPad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV3.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV4.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV5.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OneHot.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ZerosLike.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pack.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/PadV2.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pow.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedGather.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedRange.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RaggedTensorToTensor.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reciprocal.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinear.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinearGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighbor.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RotateWithOffset.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ScatterNd.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted_impl.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SearchSorted.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Select.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Selu.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sign.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sin.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sinh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softplus.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SpaceToBatchND.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentMean.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseSegmentSum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseToDense.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SplitV.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Square.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Step.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringNGrams.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringSplit.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StringToHashBucketFast.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tan.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tanh.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TensorScatterUpdate.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transform.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unpack.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/UnsortedSegmentSum.js","../node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/support.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/types/faceDetection.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/blazefaceFaceDetection.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/getFaceMatchStateInLivenessOval.mjs","../node_modules/@aws-sdk/middleware-eventstream/dist-es/eventStreamConfiguration.js","../node_modules/@smithy/types/dist-es/auth/auth.js","../node_modules/@smithy/types/dist-es/auth/HttpApiKeyAuth.js","../node_modules/@smithy/types/dist-es/endpoint.js","../node_modules/@smithy/types/dist-es/extensions/checksum.js","../node_modules/@smithy/types/dist-es/http.js","../node_modules/@smithy/types/dist-es/middleware.js","../node_modules/@smithy/types/dist-es/profile.js","../node_modules/@smithy/types/dist-es/transfer.js","../node_modules/@aws-sdk/middleware-eventstream/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-eventstream/dist-es/eventStreamHandlingMiddleware.js","../node_modules/@aws-sdk/middleware-eventstream/dist-es/eventStreamHeaderMiddleware.js","../node_modules/@aws-sdk/middleware-eventstream/dist-es/getEventStreamPlugin.js","../node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-host-header/dist-es/index.js","../node_modules/@aws-sdk/middleware-logger/dist-es/loggerMiddleware.js","../node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/index.js","../node_modules/@smithy/property-provider/dist-es/memoize.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/util-middleware/dist-es/getSmithyContext.js","../node_modules/@smithy/util-middleware/dist-es/normalizeProvider.js","../node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-utf8/dist-es/toUint8Array.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/constants.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/credentialDerivation.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/is-array-buffer/dist-es/index.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/HeaderFormatter.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/headerUtil.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/prepareRequest.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/utilDate.js","../node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4/dist-es/SignatureV4.js","../node_modules/@aws-sdk/middleware-signing/dist-es/awsAuthConfiguration.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/getSkewCorrectedDate.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/isClockSkewed.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/getUpdatedSystemClockOffset.js","../node_modules/@aws-sdk/middleware-signing/dist-es/awsAuthMiddleware.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/configurations.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isIpAddress.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isValidHostLabel.js","../node_modules/@smithy/util-endpoints/dist-es/utils/customEndpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/debug/debugId.js","../node_modules/@smithy/util-endpoints/dist-es/debug/toDebugString.js","../node_modules/@smithy/util-endpoints/dist-es/types/EndpointError.js","../node_modules/@smithy/util-endpoints/dist-es/lib/booleanEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttrPathList.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttr.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isSet.js","../node_modules/@smithy/util-endpoints/dist-es/lib/not.js","../node_modules/@smithy/util-endpoints/dist-es/lib/parseURL.js","../node_modules/@smithy/util-endpoints/dist-es/lib/stringEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/substring.js","../node_modules/@smithy/util-endpoints/dist-es/lib/uriEncode.js","../node_modules/@smithy/util-endpoints/dist-es/utils/endpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTemplate.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getReferenceValue.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateExpression.js","../node_modules/@smithy/util-endpoints/dist-es/utils/callFunction.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateCondition.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateConditions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointHeaders.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperty.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperties.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointUrl.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateEndpointRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateErrorRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTreeRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateRules.js","../node_modules/@smithy/util-endpoints/dist-es/resolveEndpoint.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/user-agent-middleware.js","../node_modules/@aws-crypto/crc32/build/module/index.js","../node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/eventstream-codec/dist-es/Int64.js","../node_modules/@smithy/eventstream-codec/dist-es/HeaderMarshaller.js","../node_modules/@smithy/eventstream-codec/dist-es/splitMessage.js","../node_modules/@smithy/eventstream-codec/dist-es/EventStreamCodec.js","../node_modules/@smithy/eventstream-codec/dist-es/MessageDecoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/MessageEncoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/SmithyMessageDecoderStream.js","../node_modules/@smithy/eventstream-codec/dist-es/SmithyMessageEncoderStream.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/get-event-signing-stream.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/EventStreamPayloadHandler.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/eventstream-payload-handler-provider.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/middleware-session-id.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/middleware-websocket-endpoint.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/getWebSocketPlugin.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/utils.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/WebsocketSignatureV4.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/websocket-configuration.js","../node_modules/@smithy/querystring-builder/dist-es/index.js","../node_modules/@aws-sdk/util-format-url/dist-es/index.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/eventstream-serde-browser/dist-es/utils.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../node_modules/@smithy/util-base64/dist-es/constants.browser.js","../node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js","../node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@smithy/util-base64/dist-es/toBase64.browser.js","../node_modules/@aws-sdk/middleware-websocket/dist-es/websocket-fetch-handler.js","../node_modules/@smithy/util-config-provider/dist-es/types.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseDualstackEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseFipsEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/isFipsRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/getRealRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/resolveRegionConfig.js","../node_modules/@smithy/eventstream-serde-config-resolver/dist-es/EventStreamSerdeConfig.js","../node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@smithy/middleware-content-length/dist-es/index.js","../node_modules/@smithy/middleware-endpoint/dist-es/service-customizations/s3.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/createConfigValueProvider.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromConfig.browser.js","../node_modules/@smithy/querystring-parser/dist-es/index.js","../node_modules/@smithy/url-parser/dist-es/index.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/toEndpointV1.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js","../node_modules/@smithy/middleware-serde/dist-es/deserializerMiddleware.js","../node_modules/@smithy/middleware-serde/dist-es/serializerMiddleware.js","../node_modules/@smithy/middleware-serde/dist-es/serdePlugin.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemePlugin.js","../node_modules/@smithy/core/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../node_modules/@smithy/util-stream/dist-es/blob/transforms.js","../node_modules/@smithy/util-stream/dist-es/blob/Uint8ArrayBlobAdapter.js","../node_modules/@smithy/util-stream/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/core/dist-es/submodules/protocols/collect-stream-body.js","../node_modules/@smithy/core/dist-es/submodules/protocols/extended-encode-uri-component.js","../node_modules/@smithy/core/dist-es/submodules/protocols/resolve-path.js","../node_modules/@smithy/core/dist-es/submodules/protocols/requestBuilder.js","../node_modules/@smithy/core/dist-es/setFeature.js","../node_modules/@smithy/middleware-endpoint/dist-es/endpointMiddleware.js","../node_modules/@smithy/middleware-endpoint/dist-es/getEndpointPlugin.js","../node_modules/@smithy/middleware-endpoint/dist-es/resolveEndpointConfig.js","../node_modules/@smithy/util-retry/dist-es/config.js","../node_modules/@smithy/service-error-classification/dist-es/constants.js","../node_modules/@smithy/service-error-classification/dist-es/index.js","../node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js","../node_modules/@smithy/util-retry/dist-es/constants.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryBackoffStrategy.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryToken.js","../node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js","../node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js","../node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@smithy/middleware-retry/dist-es/util.js","../node_modules/@smithy/middleware-retry/dist-es/configurations.js","../node_modules/@smithy/middleware-stack/dist-es/MiddlewareStack.js","../node_modules/@smithy/smithy-client/dist-es/client.js","../node_modules/@smithy/smithy-client/dist-es/command.js","../node_modules/@smithy/smithy-client/dist-es/parse-utils.js","../node_modules/@smithy/smithy-client/dist-es/exceptions.js","../node_modules/@smithy/smithy-client/dist-es/default-error-handler.js","../node_modules/@smithy/smithy-client/dist-es/defaults-mode.js","../node_modules/@smithy/smithy-client/dist-es/extensions/checksum.js","../node_modules/@smithy/smithy-client/dist-es/extensions/retry.js","../node_modules/@smithy/smithy-client/dist-es/extensions/defaultExtensionConfiguration.js","../node_modules/@smithy/smithy-client/dist-es/NoOpLogger.js","../node_modules/@smithy/smithy-client/dist-es/object-mapping.js","../node_modules/@smithy/smithy-client/dist-es/ser-utils.js","../node_modules/@smithy/smithy-client/dist-es/serde-json.js","../node_modules/@smithy/middleware-retry/dist-es/isStreamingPayload/isStreamingPayload.browser.js","../node_modules/@smithy/middleware-retry/dist-es/retryMiddleware.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/endpoint/EndpointParameters.js","../node_modules/@aws-crypto/sha256-browser/build/module/constants.js","../node_modules/@aws-sdk/util-locate-window/dist-es/index.js","../node_modules/@aws-crypto/sha256-browser/build/module/webCryptoSha256.js","../node_modules/@aws-crypto/supports-web-crypto/build/module/supportsWebCrypto.js","../node_modules/@aws-crypto/sha256-browser/build/module/crossPlatformSha256.js","../node_modules/bowser/src/constants.js","../node_modules/bowser/src/utils.js","../node_modules/bowser/src/parser-browsers.js","../node_modules/bowser/src/parser-os.js","../node_modules/bowser/src/parser-platforms.js","../node_modules/bowser/src/parser-engines.js","../node_modules/bowser/src/parser.js","../node_modules/bowser/src/bowser.js","../node_modules/@aws-sdk/util-user-agent-browser/dist-es/index.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-universal/dist-es/getChunkedStream.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-universal/dist-es/getUnmarshalledStream.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-universal/dist-es/EventStreamMarshaller.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-browser/dist-es/utils.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-browser/dist-es/EventStreamMarshaller.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/eventstream-serde-browser/dist-es/provider.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/protocol-http/dist-es/extensions/httpExtensionConfiguration.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/fetch-http-handler/dist-es/stream-collector.js","../node_modules/@smithy/invalid-dependency/dist-es/invalidProvider.js","../node_modules/@smithy/util-body-length-browser/dist-es/calculateBodyLength.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@aws-sdk/client-rekognitionstreaming/node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/endpoint/ruleset.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/endpoint/endpointResolver.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/runtimeConfig.shared.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/constants.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/resolveDefaultsModeConfig.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/runtimeConfig.browser.js","../node_modules/@aws-sdk/region-config-resolver/dist-es/extensions/index.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/runtimeExtensions.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/RekognitionStreamingClient.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/models/RekognitionStreamingServiceException.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/models/models_0.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/awsExpectUnion.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/common.js","../node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/parseJsonBody.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/protocols/Aws_restJson1.js","../node_modules/@aws-sdk/client-rekognitionstreaming/dist-es/commands/StartFaceLivenessSessionCommand.js","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/utils/device.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/videoRecorder.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/version.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/utils/platform.mjs","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/crc32/node_modules/tslib/tslib.es6.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/pureJs.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/whatwgEncodingApi.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/index.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/util/build/convertToBuffer.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/util/build/isEmptyData.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/util/build/numToUint8.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/util/build/uint32ArrayFrom.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/util/build/index.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/crc32/build/aws_crc32.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/crc32/build/index.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/eventstream-codec/dist-es/HeaderMarshaller.js","../node_modules/@smithy/eventstream-serde-browser/dist-es/utils.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/auth/auth.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/auth/HttpApiKeyAuth.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/endpoint.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/extensions/checksum.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/http.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/profile.js","../node_modules/@smithy/protocol-http/node_modules/@smithy/types/dist-es/transfer.js","../node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../node_modules/@smithy/fetch-http-handler/node_modules/@smithy/querystring-builder/dist-es/index.js","../node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-base64/dist-es/constants.browser.js","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/createStreamingClient/CustomWebSocketFetchHandler.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/createStreamingClient/resolveCredentials.mjs","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/crc32/node_modules/tslib/tslib.es6.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/util/build/convertToBuffer.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/util/build/isEmptyData.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/util/build/numToUint8.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/util/build/uint32ArrayFrom.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/util/build/index.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/crc32/build/aws_crc32.js","../node_modules/@smithy/signature-v4/node_modules/@aws-crypto/crc32/build/index.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/eventstream-codec/dist-es/Int64.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/eventstream-codec/dist-es/HeaderMarshaller.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/auth/auth.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/auth/HttpApiKeyAuth.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/endpoint.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/extensions/checksum.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/http.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/profile.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/types/dist-es/transfer.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/util-middleware/dist-es/normalizeProvider.js","../node_modules/@smithy/signature-v4/dist-es/constants.js","../node_modules/@smithy/signature-v4/dist-es/credentialDerivation.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js","../node_modules/@smithy/signature-v4/node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js","../node_modules/@smithy/is-array-buffer/dist-es/index.js","../node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js","../node_modules/@smithy/signature-v4/dist-es/headerUtil.js","../node_modules/@smithy/signature-v4/dist-es/cloneRequest.js","../node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js","../node_modules/@smithy/signature-v4/dist-es/prepareRequest.js","../node_modules/@smithy/signature-v4/dist-es/utilDate.js","../node_modules/@smithy/signature-v4/dist-es/SignatureV4.js","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/createStreamingClient/Signer.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/createStreamingClient/createStreamingClient.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/streamProvider.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/freshnessColorDisplay.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/utils/eventUtils.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/utils/helpers.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/service/machine/machine.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/providers/FaceLivenessDetectorProvider.mjs","../node_modules/@aws-amplify/ui-react/dist/esm/hooks/useThemeBreakpoint.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/hooks/useLivenessActor.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/hooks/useLivenessSelector.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/hooks/useMediaStreamInVideo.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/types/classNames.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/Toast.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/ToastWithLoader.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/Hint.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/MatchIndicator.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/Overlay.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/displayText.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/FaceLivenessErrorModal.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/CancelButton.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/RecordingIcon.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/LivenessIconWithPopover.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/DefaultStartScreenComponents.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/LivenessCheck/LivenessCameraModule.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/shared/LandscapeErrorModal.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/LivenessCheck/LivenessCheck.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/utils/getDisplayText.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/FaceLivenessDetectorCore.mjs","../node_modules/@aws-amplify/ui-react-liveness/dist/esm/components/FaceLivenessDetector/FaceLivenessDetector.mjs","../src/components/screens/unauthorized/registration/screens/FaceLivenessCheck.tsx","../src/components/screens/unauthorized/registration/screens/Name.tsx","../src/components/screens/unauthorized/registration/screens/Welcome.tsx","../src/components/screens/unauthorized/registration/screens/Date.tsx","../src/components/screens/unauthorized/registration/screens/Address.tsx","../src/components/screens/unauthorized/registration/screens/Email.tsx","../src/components/screens/unauthorized/registration/screens/Contacts.tsx","../src/components/screens/unauthorized/registration/screens/Emoji.tsx","../src/components/screens/unauthorized/registration/screens/Goals.tsx","../src/components/screens/unauthorized/registration/screens/PersonalityType.tsx","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/modules/autoplay.mjs","../src/components/screens/unauthorized/registration/screens/PreviewPhoto.tsx","../src/components/screens/unauthorized/registration/screens/PreviewPersonal.tsx","../src/components/screens/unauthorized/registration/screens/Congrats.tsx","../src/navigation/routes/registrationRoutes.ts","../src/components/screens/authorized/community/components/search-modal/SearchButton.tsx","../src/components/screens/authorized/community/components/search-modal/SearchModal.tsx","../src/components/screens/authorized/community/components/slider/Slider.tsx","../src/components/screens/authorized/community/components/instruction/Instruction.tsx","../src/components/screens/authorized/community/Community.tsx","../src/components/screens/authorized/payment/components/Slider.tsx","../src/components/screens/authorized/payment/components/Tariffs.tsx","../src/services/payment.service.ts","../src/components/screens/authorized/payment/usePayment.ts","../src/components/screens/authorized/payment/Payment.tsx","../src/components/screens/authorized/profile/Profile.tsx","../node_modules/spoiled/esm/Spoiler-BFPnjl0F.js","../node_modules/spoiled/esm/index.js","../src/components/screens/authorized/friends/components/Card.tsx","../src/components/screens/authorized/friends/Friends.tsx","../src/components/screens/authorized/friend/Friend.tsx","../src/components/screens/authorized/settings/components/Actions.tsx","../src/components/screens/authorized/settings/components/BannerSupport.tsx","../src/components/screens/authorized/settings/components/BannerBuyPremium.tsx","../src/components/screens/authorized/settings/components/ModalPremium.tsx","../src/components/screens/authorized/settings/components/Footer.tsx","../src/components/screens/authorized/settings/Settings.tsx","../src/components/screens/authorized/premium/usePremium.ts","../src/components/screens/authorized/premium/Premium.tsx","../src/components/screens/authorized/settings/screens/Contacts.tsx","../src/components/screens/authorized/settings/screens/Goals.tsx","../src/components/screens/authorized/settings/screens/Emoji.tsx","../src/components/screens/authorized/settings/screens/Description.tsx","../src/components/screens/authorized/settings/screens/media/MediaLayout.tsx","../src/components/screens/authorized/settings/screens/media/components/Beautiful.tsx","../src/components/screens/authorized/settings/screens/media/components/Professional.tsx","../src/components/screens/authorized/settings/screens/media/components/Authentic.tsx","../src/navigation/routes/userRoutes.ts","../src/components/screens/unauthorized/male-user/Welcome.tsx","../src/navigation/routes/maleUserRoutes.ts","../src/components/screens/unauthorized/server-error/Loading.tsx","../src/navigation/routes/serverErrorRoutes.ts","../src/components/screens/unauthorized/loading/Loading.tsx","../src/navigation/routes/loadingRoutes.ts","../src/navigation/useNavigateRoutes.ts","../src/navigation/Navigation.tsx","../src/aws-exports.ts","../node_modules/i18next/dist/esm/i18next.js","../node_modules/i18next-http-backend/esm/utils.js","../node_modules/i18next-http-backend/esm/request.js","../node_modules/i18next-http-backend/esm/index.js","../src/i18n.ts","../src/App.tsx","../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1= 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}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var SUCCESS_MESSAGE = 'Event tracked successfully';\nexport var UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport var OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport var MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport var INVALID_API_KEY = 'Invalid API key';\nexport var CLIENT_NOT_INITIALIZED = 'Client not initialized';\n//# sourceMappingURL=messages.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","import { Status } from '../types/status';\nexport var buildResult = function (event, code, message) {\n if (code === void 0) { code = 0; }\n if (message === void 0) { message = Status.Unknown; }\n return { event: event, code: code, message: message };\n};\n//# sourceMappingURL=result-builder.js.map","/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nexport var UUID = function (a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID);\n};\n//# sourceMappingURL=uuid.js.map","import { __assign, __awaiter, __generator, __read, __values } from \"tslib\";\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\nvar Timeline = /** @class */ (function () {\n function Timeline(client) {\n this.client = client;\n this.queue = [];\n // Flag to guarantee one schedule apply is running\n this.applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n this.plugins = [];\n }\n Timeline.prototype.register = function (plugin, config) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (this.plugins.some(function (existingPlugin) { return existingPlugin.name === plugin.name; })) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n config.loggerProvider.warn(\"Plugin with name \".concat(plugin.name, \" already exists, skipping registration\"));\n return [2 /*return*/];\n }\n if (plugin.name === undefined) {\n plugin.name = UUID();\n config.loggerProvider.warn(\"Plugin name is undefined. \\n Generating a random UUID for plugin name: \".concat(plugin.name, \". \\n Set a name for the plugin to prevent it from being added multiple times.\"));\n }\n plugin.type = (_a = plugin.type) !== null && _a !== void 0 ? _a : 'enrichment';\n return [4 /*yield*/, ((_b = plugin.setup) === null || _b === void 0 ? void 0 : _b.call(plugin, config, this.client))];\n case 1:\n _c.sent();\n this.plugins.push(plugin);\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.deregister = function (pluginName, config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var index, plugin;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; });\n if (index === -1) {\n config.loggerProvider.warn(\"Plugin with name \".concat(pluginName, \" does not exist, skipping deregistration\"));\n return [2 /*return*/];\n }\n plugin = this.plugins[index];\n this.plugins.splice(index, 1);\n return [4 /*yield*/, ((_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin))];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.reset = function (client) {\n this.applying = false;\n var plugins = this.plugins;\n plugins.map(function (plugin) { var _a; return (_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin); });\n this.plugins = [];\n this.client = client;\n };\n Timeline.prototype.push = function (event) {\n var _this = this;\n return new Promise(function (resolve) {\n _this.queue.push([event, resolve]);\n _this.scheduleApply(0);\n });\n };\n Timeline.prototype.scheduleApply = function (timeout) {\n var _this = this;\n if (this.applying)\n return;\n this.applying = true;\n setTimeout(function () {\n void _this.apply(_this.queue.shift()).then(function () {\n _this.applying = false;\n if (_this.queue.length > 0) {\n _this.scheduleApply(0);\n }\n });\n }, timeout);\n };\n Timeline.prototype.apply = function (item) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, event, _b, resolve, before, before_1, before_1_1, plugin, e, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e, e_2_1, destination, executeDestinations;\n var e_1, _c, e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!item) {\n return [2 /*return*/];\n }\n _a = __read(item, 1), event = _a[0];\n _b = __read(item, 2), resolve = _b[1];\n before = this.plugins.filter(function (plugin) { return plugin.type === 'before'; });\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n before_1 = __values(before), before_1_1 = before_1.next();\n _e.label = 2;\n case 2:\n if (!!before_1_1.done) return [3 /*break*/, 5];\n plugin = before_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 4];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 3:\n e = _e.sent();\n if (e === null) {\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n }\n _e.label = 4;\n case 4:\n before_1_1 = before_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8:\n enrichment = this.plugins.filter(function (plugin) { return plugin.type === 'enrichment' || plugin.type === undefined; });\n _e.label = 9;\n case 9:\n _e.trys.push([9, 14, 15, 16]);\n enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();\n _e.label = 10;\n case 10:\n if (!!enrichment_1_1.done) return [3 /*break*/, 13];\n plugin = enrichment_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 12];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 11:\n e = _e.sent();\n if (e === null) {\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n }\n _e.label = 12;\n case 12:\n enrichment_1_1 = enrichment_1.next();\n return [3 /*break*/, 10];\n case 13: return [3 /*break*/, 16];\n case 14:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 16];\n case 15:\n try {\n if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 16:\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n executeDestinations = destination.map(function (plugin) {\n var eventClone = __assign({}, event);\n return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });\n });\n void Promise.all(executeDestinations).then(function (_a) {\n var _b = __read(_a, 1), result = _b[0];\n var resolveResult = result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n resolve(resolveResult);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queue, destination, executeDestinations;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queue = this.queue;\n this.queue = [];\n return [4 /*yield*/, Promise.all(queue.map(function (item) { return _this.apply(item); }))];\n case 1:\n _a.sent();\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n executeDestinations = destination.map(function (plugin) {\n return plugin.flush && plugin.flush();\n });\n return [4 /*yield*/, Promise.all(executeDestinations)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n return Timeline;\n}());\nexport { Timeline };\n//# sourceMappingURL=timeline.js.map","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n//# sourceMappingURL=constants.js.map","import { __values } from \"tslib\";\nvar MAX_PROPERTY_KEYS = 1000;\nexport var isValidObject = function (properties) {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (var key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var value = properties[key];\n if (!isValidProperties(key, value))\n return false;\n }\n return true;\n};\nexport var isValidProperties = function (property, value) {\n var e_1, _a;\n if (typeof property !== 'string')\n return false;\n if (Array.isArray(value)) {\n var isValid = true;\n try {\n for (var value_1 = __values(value), value_1_1 = value_1.next(); !value_1_1.done; value_1_1 = value_1.next()) {\n var valueElement = value_1_1.value;\n if (Array.isArray(valueElement)) {\n return false;\n }\n else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement);\n }\n else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else if (value === null || value === undefined) {\n return false;\n }\n else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n }\n else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n//# sourceMappingURL=valid-properties.js.map","import { __assign } from \"tslib\";\nimport { UNSET_VALUE } from './types/constants';\nimport { isValidProperties } from './utils/valid-properties';\nvar Identify = /** @class */ (function () {\n function Identify() {\n this._propertySet = new Set();\n this._properties = {};\n }\n Identify.prototype.getUserProperties = function () {\n return __assign({}, this._properties);\n };\n Identify.prototype.set = function (property, value) {\n this._safeSet(IdentifyOperation.SET, property, value);\n return this;\n };\n Identify.prototype.setOnce = function (property, value) {\n this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n return this;\n };\n Identify.prototype.append = function (property, value) {\n this._safeSet(IdentifyOperation.APPEND, property, value);\n return this;\n };\n Identify.prototype.prepend = function (property, value) {\n this._safeSet(IdentifyOperation.PREPEND, property, value);\n return this;\n };\n Identify.prototype.postInsert = function (property, value) {\n this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n return this;\n };\n Identify.prototype.preInsert = function (property, value) {\n this._safeSet(IdentifyOperation.PREINSERT, property, value);\n return this;\n };\n Identify.prototype.remove = function (property, value) {\n this._safeSet(IdentifyOperation.REMOVE, property, value);\n return this;\n };\n Identify.prototype.add = function (property, value) {\n this._safeSet(IdentifyOperation.ADD, property, value);\n return this;\n };\n Identify.prototype.unset = function (property) {\n this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n return this;\n };\n Identify.prototype.clearAll = function () {\n // When clear all happens, all properties are unset. Reset the entire object.\n this._properties = {};\n this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n return this;\n };\n // Returns whether or not this set actually worked.\n Identify.prototype._safeSet = function (operation, property, value) {\n if (this._validate(operation, property, value)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var userPropertyMap = this._properties[operation];\n if (userPropertyMap === undefined) {\n userPropertyMap = {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._properties[operation] = userPropertyMap;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n userPropertyMap[property] = value;\n this._propertySet.add(property);\n return true;\n }\n return false;\n };\n Identify.prototype._validate = function (operation, property, value) {\n if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n // clear all already set. Skipping operation;\n return false;\n }\n if (this._propertySet.has(property)) {\n // Property already used. Skipping operation\n return false;\n }\n if (operation === IdentifyOperation.ADD) {\n return typeof value === 'number';\n }\n if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n return isValidProperties(property, value);\n }\n return true;\n };\n return Identify;\n}());\nexport { Identify };\nexport var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n//# sourceMappingURL=identify.js.map","export var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport var SpecialEventType;\n(function (SpecialEventType) {\n SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n SpecialEventType[\"GROUP_IDENTIFY\"] = \"$groupidentify\";\n SpecialEventType[\"REVENUE\"] = \"revenue_amount\";\n})(SpecialEventType || (SpecialEventType = {}));\n//# sourceMappingURL=event.js.map","import { __assign } from \"tslib\";\nimport { Identify } from '../identify';\nimport { SpecialEventType } from '../types/event/event';\nexport var createTrackEvent = function (eventInput, eventProperties, eventOptions) {\n var baseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n return __assign(__assign(__assign({}, baseEvent), eventOptions), (eventProperties && { event_properties: eventProperties }));\n};\nexport var createIdentifyEvent = function (identify, eventOptions) {\n var identifyEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties() });\n return identifyEvent;\n};\nexport var createGroupIdentifyEvent = function (groupType, groupName, identify, eventOptions) {\n var _a;\n var groupIdentify = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.GROUP_IDENTIFY, group_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupIdentify;\n};\nexport var createGroupEvent = function (groupType, groupName, eventOptions) {\n var _a;\n var identify = new Identify();\n identify.set(groupType, groupName);\n var groupEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupEvent;\n};\nexport var createRevenueEvent = function (revenue, eventOptions) {\n return __assign(__assign({}, eventOptions), { event_type: SpecialEventType.REVENUE, event_properties: revenue.getEventProperties() });\n};\n//# sourceMappingURL=event-builder.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './types/messages';\nimport { Timeline } from './timeline';\nimport { createGroupEvent, createGroupIdentifyEvent, createIdentifyEvent, createRevenueEvent, createTrackEvent, } from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\nvar AmplitudeCore = /** @class */ (function () {\n function AmplitudeCore(name) {\n if (name === void 0) { name = '$default'; }\n this.initializing = false;\n this.isReady = false;\n this.q = [];\n this.dispatchQ = [];\n this.logEvent = this.track.bind(this);\n this.timeline = new Timeline(this);\n this.name = name;\n }\n AmplitudeCore.prototype._init = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.config = config;\n this.timeline.reset(this);\n return [4 /*yield*/, this.runQueuedFunctions('q')];\n case 1:\n _a.sent();\n this.isReady = true;\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.runQueuedFunctions = function (queueName) {\n return __awaiter(this, void 0, void 0, function () {\n var queuedFunctions, queuedFunctions_1, queuedFunctions_1_1, queuedFunction, val, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queuedFunctions = this[queueName];\n this[queueName] = [];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 8, 9, 10]);\n queuedFunctions_1 = __values(queuedFunctions), queuedFunctions_1_1 = queuedFunctions_1.next();\n _b.label = 2;\n case 2:\n if (!!queuedFunctions_1_1.done) return [3 /*break*/, 7];\n queuedFunction = queuedFunctions_1_1.value;\n val = queuedFunction();\n if (!(val && 'promise' in val)) return [3 /*break*/, 4];\n return [4 /*yield*/, val.promise];\n case 3:\n _b.sent();\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, val];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n queuedFunctions_1_1 = queuedFunctions_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (queuedFunctions_1_1 && !queuedFunctions_1_1.done && (_a = queuedFunctions_1.return)) _a.call(queuedFunctions_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n if (!this[queueName].length) return [3 /*break*/, 12];\n return [4 /*yield*/, this.runQueuedFunctions(queueName)];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {\n var event = createTrackEvent(eventInput, eventProperties, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.identify = function (identify, eventOptions) {\n var event = createIdentifyEvent(identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n var event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.setGroup = function (groupType, groupName, eventOptions) {\n var event = createGroupEvent(groupType, groupName, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.revenue = function (revenue, eventOptions) {\n var event = createRevenueEvent(revenue, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.add = function (plugin) {\n if (!this.isReady) {\n this.q.push(this._addPlugin.bind(this, plugin));\n return returnWrapper();\n }\n return this._addPlugin(plugin);\n };\n AmplitudeCore.prototype._addPlugin = function (plugin) {\n return returnWrapper(this.timeline.register(plugin, this.config));\n };\n AmplitudeCore.prototype.remove = function (pluginName) {\n if (!this.isReady) {\n this.q.push(this._removePlugin.bind(this, pluginName));\n return returnWrapper();\n }\n return this._removePlugin(pluginName);\n };\n AmplitudeCore.prototype._removePlugin = function (pluginName) {\n return returnWrapper(this.timeline.deregister(pluginName, this.config));\n };\n AmplitudeCore.prototype.dispatchWithCallback = function (event, callback) {\n if (!this.isReady) {\n return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n }\n void this.process(event).then(callback);\n };\n AmplitudeCore.prototype.dispatch = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n if (!this.isReady) {\n return [2 /*return*/, new Promise(function (resolve) {\n _this.dispatchQ.push(_this.dispatchWithCallback.bind(_this, event, resolve));\n })];\n }\n return [2 /*return*/, this.process(event)];\n });\n });\n };\n AmplitudeCore.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var result, e_2, message, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n // skip event processing if opt out\n if (this.config.optOut) {\n return [2 /*return*/, buildResult(event, 0, OPT_OUT_MESSAGE)];\n }\n return [4 /*yield*/, this.timeline.push(event)];\n case 1:\n result = _a.sent();\n result.code === 200\n ? this.config.loggerProvider.log(result.message)\n : result.code === 100\n ? this.config.loggerProvider.warn(result.message)\n : this.config.loggerProvider.error(result.message);\n return [2 /*return*/, result];\n case 2:\n e_2 = _a.sent();\n message = String(e_2);\n this.config.loggerProvider.error(message);\n result = buildResult(event, 0, message);\n return [2 /*return*/, result];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.setOptOut = function (optOut) {\n if (!this.isReady) {\n this.q.push(this._setOptOut.bind(this, Boolean(optOut)));\n return;\n }\n this._setOptOut(optOut);\n };\n AmplitudeCore.prototype._setOptOut = function (optOut) {\n this.config.optOut = Boolean(optOut);\n };\n AmplitudeCore.prototype.flush = function () {\n return returnWrapper(this.timeline.flush());\n };\n return AmplitudeCore;\n}());\nexport { AmplitudeCore };\n//# sourceMappingURL=core-client.js.map","import { __assign } from \"tslib\";\nimport { isValidObject } from './utils/valid-properties';\nvar Revenue = /** @class */ (function () {\n function Revenue() {\n this.productId = '';\n this.quantity = 1;\n this.price = 0.0;\n }\n Revenue.prototype.setProductId = function (productId) {\n this.productId = productId;\n return this;\n };\n Revenue.prototype.setQuantity = function (quantity) {\n if (quantity > 0) {\n this.quantity = quantity;\n }\n return this;\n };\n Revenue.prototype.setPrice = function (price) {\n this.price = price;\n return this;\n };\n Revenue.prototype.setRevenueType = function (revenueType) {\n this.revenueType = revenueType;\n return this;\n };\n Revenue.prototype.setCurrency = function (currency) {\n this.currency = currency;\n return this;\n };\n Revenue.prototype.setRevenue = function (revenue) {\n this.revenue = revenue;\n return this;\n };\n Revenue.prototype.setReceipt = function (receipt) {\n this.receipt = receipt;\n return this;\n };\n Revenue.prototype.setReceiptSig = function (receiptSig) {\n this.receiptSig = receiptSig;\n return this;\n };\n Revenue.prototype.setEventProperties = function (properties) {\n if (isValidObject(properties)) {\n this.properties = properties;\n }\n return this;\n };\n Revenue.prototype.getEventProperties = function () {\n var eventProperties = this.properties ? __assign({}, this.properties) : {};\n eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n eventProperties[RevenueProperty.REVENUE_CURRENCY] = this.currency;\n eventProperties[RevenueProperty.REVENUE] = this.revenue;\n eventProperties[RevenueProperty.RECEIPT] = this.receipt;\n eventProperties[RevenueProperty.RECEIPT_SIG] = this.receiptSig;\n return eventProperties;\n };\n return Revenue;\n}());\nexport { Revenue };\nexport var RevenueProperty;\n(function (RevenueProperty) {\n RevenueProperty[\"REVENUE_PRODUCT_ID\"] = \"$productId\";\n RevenueProperty[\"REVENUE_QUANTITY\"] = \"$quantity\";\n RevenueProperty[\"REVENUE_PRICE\"] = \"$price\";\n RevenueProperty[\"REVENUE_TYPE\"] = \"$revenueType\";\n RevenueProperty[\"REVENUE_CURRENCY\"] = \"$currency\";\n RevenueProperty[\"REVENUE\"] = \"$revenue\";\n RevenueProperty[\"RECEIPT\"] = \"$receipt\";\n RevenueProperty[\"RECEIPT_SIG\"] = \"$receiptSig\";\n})(RevenueProperty || (RevenueProperty = {}));\n//# sourceMappingURL=revenue.js.map","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\nexport var chunk = function (arr, size) {\n var chunkSize = Math.max(size, 1);\n return arr.reduce(function (chunks, element, index) {\n var chunkIndex = Math.floor(index / chunkSize);\n if (!chunks[chunkIndex]) {\n chunks[chunkIndex] = [];\n }\n chunks[chunkIndex].push(element);\n return chunks;\n }, []);\n};\n//# sourceMappingURL=chunk.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: '$default_instance',\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","import { __awaiter, __generator, __read, __rest, __spreadArray } from \"tslib\";\nimport { Status } from '../types/status';\nimport { INVALID_API_KEY, MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE, } from '../types/messages';\nimport { STORAGE_PREFIX } from '../types/constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig, RequestMetadata } from '../config';\nimport { UUID } from '../utils/uuid';\nfunction getErrorMessage(error) {\n if (error instanceof Error)\n return error.message;\n return String(error);\n}\nexport function getResponseBodyString(res) {\n var responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n }\n catch (_a) {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\nvar Destination = /** @class */ (function () {\n function Destination() {\n this.name = 'amplitude';\n this.type = 'destination';\n this.retryTimeout = 1000;\n this.throttleTimeout = 30000;\n this.storageKey = '';\n // Indicator of whether events that are scheduled (but not flushed yet).\n // When flush:\n // 1. assign `scheduleId` to `flushId`\n // 2. set `scheduleId` to null\n this.scheduleId = null;\n // Timeout in milliseconds of current schedule\n this.scheduledTimeout = 0;\n // Indicator of whether current flush resolves.\n // When flush resolves, set `flushId` to null\n this.flushId = null;\n this.queue = [];\n }\n Destination.prototype.setup = function (config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var unsent;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.config = config;\n this.storageKey = \"\".concat(STORAGE_PREFIX, \"_\").concat(this.config.apiKey.substring(0, 10));\n return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];\n case 1:\n unsent = _b.sent();\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();\n }\n return [2 /*return*/, Promise.resolve(undefined)];\n }\n });\n });\n };\n Destination.prototype.execute = function (event) {\n var _this = this;\n // Assign insert_id for dropping invalid event later\n if (!event.insert_id) {\n event.insert_id = UUID();\n }\n return new Promise(function (resolve) {\n var context = {\n event: event,\n attempts: 0,\n callback: function (result) { return resolve(result); },\n timeout: 0,\n };\n _this.queue.push(context);\n _this.schedule(_this.config.flushIntervalMillis);\n _this.saveEvents();\n });\n };\n Destination.prototype.removeEventsExceedFlushMaxRetries = function (list) {\n var _this = this;\n return list.filter(function (context) {\n context.attempts += 1;\n if (context.attempts < _this.config.flushMaxRetries) {\n return true;\n }\n void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n };\n Destination.prototype.scheduleEvents = function (list) {\n var _this = this;\n list.forEach(function (context) {\n _this.schedule(context.timeout === 0 ? _this.config.flushIntervalMillis : context.timeout);\n });\n };\n // Schedule a flush in timeout when\n // 1. No schedule\n // 2. Timeout greater than existing timeout.\n // This makes sure that when throttled, no flush when throttle timeout expires.\n Destination.prototype.schedule = function (timeout) {\n var _this = this;\n if (this.config.offline) {\n return;\n }\n if (this.scheduleId === null || (this.scheduleId && timeout > this.scheduledTimeout)) {\n if (this.scheduleId) {\n clearTimeout(this.scheduleId);\n }\n this.scheduledTimeout = timeout;\n this.scheduleId = setTimeout(function () {\n _this.queue = _this.queue.map(function (context) {\n context.timeout = 0;\n return context;\n });\n void _this.flush(true);\n }, timeout);\n return;\n }\n };\n // Mark current schedule is flushed.\n Destination.prototype.resetSchedule = function () {\n this.scheduleId = null;\n this.scheduledTimeout = 0;\n };\n // Flush all events regardless of their timeout\n Destination.prototype.flush = function (useRetry) {\n if (useRetry === void 0) { useRetry = false; }\n return __awaiter(this, void 0, void 0, function () {\n var list, later, batches;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Skip flush if offline\n if (this.config.offline) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush while offline.');\n return [2 /*return*/];\n }\n if (this.flushId) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush because previous flush has not resolved.');\n return [2 /*return*/];\n }\n this.flushId = this.scheduleId;\n this.resetSchedule();\n list = [];\n later = [];\n this.queue.forEach(function (context) { return (context.timeout === 0 ? list.push(context) : later.push(context)); });\n batches = chunk(list, this.config.flushQueueSize);\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n return [4 /*yield*/, batches.reduce(function (promise, batch) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, promise];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.send(batch, useRetry)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); }, Promise.resolve())];\n case 1:\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n _a.sent();\n // Mark current flush is done\n this.flushId = null;\n this.scheduleEvents(this.queue);\n return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.send = function (list, useRetry) {\n if (useRetry === void 0) { useRetry = true; }\n return __awaiter(this, void 0, void 0, function () {\n var payload, serverUrl, res, e_1, errorMessage;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.config.apiKey) {\n return [2 /*return*/, this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE)];\n }\n payload = {\n api_key: this.config.apiKey,\n events: list.map(function (context) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _a = context.event, extra = _a.extra, eventWithoutExtra = __rest(_a, [\"extra\"]);\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\n request_metadata: this.config.requestMetadata,\n };\n this.config.requestMetadata = new RequestMetadata();\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n serverUrl = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch).serverUrl;\n return [4 /*yield*/, this.config.transportProvider.send(serverUrl, payload)];\n case 2:\n res = _a.sent();\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return [2 /*return*/];\n }\n if (!useRetry) {\n if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, \"\".concat(res.status, \": \").concat(getResponseBodyString(res)));\n }\n else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n return [2 /*return*/];\n }\n this.handleResponse(res, list);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n errorMessage = getErrorMessage(e_1);\n this.config.loggerProvider.error(errorMessage);\n this.handleResponse({ status: Status.Failed, statusCode: 0 }, list);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.handleResponse = function (res, list) {\n var status = res.status;\n switch (status) {\n case Status.Success: {\n this.handleSuccessResponse(res, list);\n break;\n }\n case Status.Invalid: {\n this.handleInvalidResponse(res, list);\n break;\n }\n case Status.PayloadTooLarge: {\n this.handlePayloadTooLargeResponse(res, list);\n break;\n }\n case Status.RateLimit: {\n this.handleRateLimitResponse(res, list);\n break;\n }\n default: {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(\"{code: 0, error: \\\"Status '\".concat(status, \"' provided for \").concat(list.length, \" events\\\"}\"));\n this.handleOtherResponse(list);\n break;\n }\n }\n };\n Destination.prototype.handleSuccessResponse = function (res, list) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n };\n Destination.prototype.handleInvalidResponse = function (res, list) {\n var _this = this;\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n var dropIndex = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.values(res.body.eventsWithInvalidFields)), false), __read(Object.values(res.body.eventsWithMissingFields)), false), __read(Object.values(res.body.eventsWithInvalidIdLengths)), false), __read(res.body.silencedEvents), false).flat();\n var dropIndexSet = new Set(dropIndex);\n var retry = list.filter(function (context, index) {\n if (dropIndexSet.has(index)) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handlePayloadTooLargeResponse = function (res, list) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n this.config.flushQueueSize /= 2;\n var tryable = this.removeEventsExceedFlushMaxRetries(list);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleRateLimitResponse = function (res, list) {\n var _this = this;\n var dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n var dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n var throttledIndex = res.body.throttledEvents;\n var dropUserIdsSet = new Set(dropUserIds);\n var dropDeviceIdsSet = new Set(dropDeviceIds);\n var throttledIndexSet = new Set(throttledIndex);\n var retry = list.filter(function (context, index) {\n if ((context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = _this.throttleTimeout;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleOtherResponse = function (list) {\n var _this = this;\n var later = list.map(function (context) {\n context.timeout = context.attempts * _this.retryTimeout;\n return context;\n });\n var tryable = this.removeEventsExceedFlushMaxRetries(later);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.fulfillRequest = function (list, code, message) {\n this.removeEvents(list);\n list.forEach(function (context) { return context.callback(buildResult(context.event, code, message)); });\n };\n /**\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n *\n * Update the event storage based on the queue\n */\n Destination.prototype.saveEvents = function () {\n if (!this.config.storageProvider) {\n return;\n }\n var updatedEvents = this.queue.map(function (context) { return context.event; });\n void this.config.storageProvider.set(this.storageKey, updatedEvents);\n };\n /**\n * This is called on response comes back for a request\n */\n Destination.prototype.removeEvents = function (eventsToRemove) {\n this.queue = this.queue.filter(function (queuedContext) { return !eventsToRemove.some(function (context) { return context.event.insert_id === queuedContext.event.insert_id; }); });\n this.saveEvents();\n };\n return Destination;\n}());\nexport { Destination };\n//# sourceMappingURL=destination.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(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)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = '$default_instance'; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getAnalyticsConnector } from '../analytics-connector';\nvar IdentityEventSender = /** @class */ (function () {\n function IdentityEventSender() {\n this.name = 'identity';\n this.type = 'before';\n this.identityStore = getAnalyticsConnector().identityStore;\n }\n IdentityEventSender.prototype.execute = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties;\n return __generator(this, function (_a) {\n userProperties = context.user_properties;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return [2 /*return*/, context];\n });\n });\n };\n IdentityEventSender.prototype.setup = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (config.instanceName) {\n this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n }\n return [2 /*return*/];\n });\n });\n };\n return IdentityEventSender;\n}());\nexport { IdentityEventSender };\n//# sourceMappingURL=identity.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","export var isNewSession = function (sessionTimeout, lastEventTime) {\n if (lastEventTime === void 0) { lastEventTime = Date.now(); }\n var currentTime = Date.now();\n var timeSinceLastEvent = currentTime - lastEventTime;\n return timeSinceLastEvent > sessionTimeout;\n};\n//# sourceMappingURL=session.js.map","import { AMPLITUDE_PREFIX } from './types/constants';\nexport var getCookieName = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\nexport var getOldCookieName = function (apiKey) {\n return \"\".concat(AMPLITUDE_PREFIX.toLowerCase(), \"_\").concat(apiKey.substring(0, 6));\n};\n//# sourceMappingURL=cookie-name.js.map","export var getLanguage = function () {\n var _a, _b, _c, _d;\n if (typeof navigator === 'undefined')\n return '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var userLanguage = navigator.userLanguage;\n return (_d = (_c = (_b = (_a = navigator.languages) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : navigator.language) !== null && _c !== void 0 ? _c : userLanguage) !== null && _d !== void 0 ? _d : '';\n};\n//# sourceMappingURL=language.js.map","import { getGlobalScope } from './global-scope';\nexport var getQueryParams = function () {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _a === void 0 ? void 0 : _a.search)) {\n return {};\n }\n var pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n var params = pairs.reduce(function (acc, curr) {\n var query = curr.split('=', 2);\n var key = tryDecodeURIComponent(query[0]);\n var value = tryDecodeURIComponent(query[1]);\n if (!value) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n return params;\n};\nexport var tryDecodeURIComponent = function (value) {\n if (value === void 0) { value = ''; }\n try {\n return decodeURIComponent(value);\n }\n catch (_a) {\n return '';\n }\n};\n//# sourceMappingURL=query-params.js.map","import { __assign, __values } from \"tslib\";\nimport { LogLevel } from '../types/loglevel';\nexport var getStacktrace = function (ignoreDepth) {\n if (ignoreDepth === void 0) { ignoreDepth = 0; }\n var trace = new Error().stack || '';\n return trace\n .split('\\n')\n .slice(2 + ignoreDepth)\n .map(function (text) { return text.trim(); });\n};\n// This hook makes sure we always get the latest logger and logLevel.\nexport var getClientLogConfig = function (client) { return function () {\n var _a = __assign({}, client.config), logger = _a.loggerProvider, logLevel = _a.logLevel;\n return {\n logger: logger,\n logLevel: logLevel,\n };\n}; };\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport var getValueByStringPath = function (obj, path) {\n var e_1, _a;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n path = path.replace(/^\\./, ''); // strip a leading dot\n try {\n for (var _b = __values(path.split('.')), _c = _b.next(); !_c.done; _c = _b.next()) {\n var attr = _c.value;\n if (attr in obj) {\n obj = obj[attr];\n }\n else {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return obj;\n};\nexport var getClientStates = function (client, paths) { return function () {\n var e_2, _a;\n var res = {};\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var path = paths_1_1.value;\n res[path] = getValueByStringPath(client, path);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return res;\n}; };\nexport var debugWrapper = function (fn, fnName, getLogConfig, getStates, fnContext) {\n if (fnContext === void 0) { fnContext = null; }\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a = getLogConfig(), logger = _a.logger, logLevel = _a.logLevel;\n // return early if possible to reduce overhead\n if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n return fn.apply(fnContext, args);\n }\n var debugContext = {\n type: 'invoke public method',\n name: fnName,\n args: args,\n stacktrace: getStacktrace(1),\n time: {\n start: new Date().toISOString(),\n },\n states: {},\n };\n if (getStates && debugContext.states) {\n debugContext.states.before = getStates();\n }\n var result = fn.apply(fnContext, args);\n if (result && result.promise) {\n // if result is a promise, add the callback\n result.promise.then(function () {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n });\n }\n else {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n }\n return result;\n };\n};\n//# sourceMappingURL=debug.js.map","import { __awaiter, __generator } from \"tslib\";\nvar MemoryStorage = /** @class */ (function () {\n function MemoryStorage() {\n this.memoryStorage = new Map();\n }\n MemoryStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, true];\n });\n });\n };\n MemoryStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.memoryStorage.get(key)];\n });\n });\n };\n MemoryStorage.prototype.getRaw = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.get(key)];\n case 1:\n value = _a.sent();\n return [2 /*return*/, value ? JSON.stringify(value) : undefined];\n }\n });\n });\n };\n MemoryStorage.prototype.set = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.set(key, value);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.delete(key);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.clear();\n return [2 /*return*/];\n });\n });\n };\n return MemoryStorage;\n}());\nexport { MemoryStorage };\n//# sourceMappingURL=memory.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar CookieStorage = /** @class */ (function () {\n function CookieStorage(options) {\n this.options = __assign({}, options);\n }\n CookieStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var testStrorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!getGlobalScope()) {\n return [2 /*return*/, false];\n }\n CookieStorage.testValue = String(Date.now());\n testStrorage = new CookieStorage(this.options);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStrorage.set(testKey, CookieStorage.testValue)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStrorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === CookieStorage.testValue];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStrorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.get = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, decodedValue;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n try {\n decodedValue = (_a = decodeCookiesAsDefault(value)) !== null && _a !== void 0 ? _a : decodeCookiesWithDoubleUrlEncoding(value);\n if (decodedValue === undefined) {\n console.error(\"Amplitude Logger [Error]: Failed to decode cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(decodedValue)];\n }\n catch (_c) {\n console.error(\"Amplitude Logger [Error]: Failed to parse cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.getRaw = function (key) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var globalScope, cookie, match;\n return __generator(this, function (_c) {\n globalScope = getGlobalScope();\n cookie = (_b = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document) === null || _a === void 0 ? void 0 : _a.cookie.split('; ')) !== null && _b !== void 0 ? _b : [];\n match = cookie.find(function (c) { return c.indexOf(key + '=') === 0; });\n if (!match) {\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/, match.substring(key.length + 1)];\n });\n });\n };\n CookieStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var expirationDays, expires, expireDate, date, str, globalScope, errorMessage;\n return __generator(this, function (_b) {\n try {\n expirationDays = (_a = this.options.expirationDays) !== null && _a !== void 0 ? _a : 0;\n expires = value !== null ? expirationDays : -1;\n expireDate = undefined;\n if (expires) {\n date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n str = \"\".concat(key, \"=\").concat(btoa(encodeURIComponent(JSON.stringify(value))));\n if (expireDate) {\n str += \"; expires=\".concat(expireDate.toUTCString());\n }\n str += '; path=/';\n if (this.options.domain) {\n str += \"; domain=\".concat(this.options.domain);\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += \"; SameSite=\".concat(this.options.sameSite);\n }\n globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.document.cookie = str;\n }\n }\n catch (error) {\n errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"Amplitude Logger [Error]: Failed to set cookie for key: \".concat(key, \". Error: \").concat(errorMessage));\n }\n return [2 /*return*/];\n });\n });\n };\n CookieStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.set(key, null)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n return CookieStorage;\n}());\nexport { CookieStorage };\nvar decodeCookiesAsDefault = function (value) {\n try {\n return decodeURIComponent(atob(value));\n }\n catch (_a) {\n return undefined;\n }\n};\nvar decodeCookiesWithDoubleUrlEncoding = function (value) {\n // Modern Ruby (v7+) automatically encodes cookies with URL encoding by\n // https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html\n try {\n return decodeURIComponent(atob(decodeURIComponent(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n//# sourceMappingURL=cookie.js.map","import { AMPLITUDE_PREFIX } from '../types/constants';\nexport var getStorageKey = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n//# sourceMappingURL=helpers.js.map","import { Status } from '../types/status';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from './base';\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n options = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 2:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","export var OfflineDisabled = null;\n//# sourceMappingURL=offline.js.map","/**\n * Default CSS selectors to define which elements on the page to track.\n * Extend this list to include additional elements to track. For example:\n * ```\n * autocapturePlugin({\n * cssSelectorAllowlist: [...DEFAULT_CSS_SELECTOR_ALLOWLIST, \".my-class\"],\n * })\n * ```\n */\nexport var DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n 'video',\n 'audio',\n '[contenteditable=\"true\" i]',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\n/**\n * Default prefix to allow the plugin to capture data attributes as an event property.\n */\nexport var DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n/**\n * Default list of elements on the page should be tracked when the page changes.\n */\nexport var DEFAULT_ACTION_CLICK_ALLOWLIST = ['div', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n//# sourceMappingURL=element-interactions.js.map","import { __assign } from \"tslib\";\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true\n */\nvar isTrackingEnabled = function (autocapture, event) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if ((autocapture === null || autocapture === void 0 ? void 0 : autocapture[event]) === false) {\n return false;\n }\n return true;\n};\nexport var isAttributionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'attribution');\n};\nexport var isFileDownloadTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'fileDownloads');\n};\nexport var isFormInteractionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'formInteractions');\n};\nexport var isPageViewTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'pageViews');\n};\nexport var isSessionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'sessions');\n};\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport var isElementInteractionsEnabled = function (autocapture) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if (typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')) {\n return true;\n }\n return false;\n};\nexport var getElementInteractionsConfig = function (config) {\n if (isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object') {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\nexport var getPageViewTrackingConfig = function (config) {\n var trackOn = function () { return false; };\n var trackHistoryChanges = undefined;\n var eventType;\n var pageCounter = config.pageCounter;\n var isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n if (config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object') {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n return {\n trackOn: trackOn,\n trackHistoryChanges: trackHistoryChanges,\n eventType: eventType,\n pageCounter: pageCounter,\n };\n};\nexport var getAttributionTrackingConfig = function (config) {\n if (isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object') {\n return __assign({}, config.defaultTracking.attribution);\n }\n return {};\n};\n//# sourceMappingURL=default-tracking.js.map","/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport var runQueuedFunctions = function (instance, queue) {\n convertProxyObjectToRealObject(instance, queue);\n};\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport var convertProxyObjectToRealObject = function (instance, queue) {\n for (var i = 0; i < queue.length; i++) {\n var _a = queue[i], name_1 = _a.name, args = _a.args, resolve = _a.resolve;\n var fn = instance && instance[name_1];\n if (typeof fn === 'function') {\n var result = fn.apply(instance, args);\n if (typeof resolve === 'function') {\n resolve(result === null || result === void 0 ? void 0 : result.promise);\n }\n }\n }\n return instance;\n};\n/**\n * Check if the param is snippet proxy\n */\nexport var isInstanceProxy = function (instance) {\n var instanceProxy = instance;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n//# sourceMappingURL=snippet-helper.js.map","export var VERSION = '2.12.2';\n//# sourceMappingURL=version.js.map","export var LIBPREFIX = 'amplitude-ts';\n//# sourceMappingURL=lib-prefix.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { UUID, getLanguage } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\nimport { LIBPREFIX } from '../lib-prefix';\nvar BROWSER_PLATFORM = 'Web';\nvar IP_ADDRESS = '$remote';\nvar Context = /** @class */ (function () {\n function Context() {\n this.name = '@amplitude/plugin-context-browser';\n this.type = 'before';\n this.library = \"\".concat(LIBPREFIX, \"/\").concat(VERSION);\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n }\n Context.prototype.setup = function (config) {\n this.config = config;\n return Promise.resolve(undefined);\n };\n Context.prototype.execute = function (context) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var time, lastEventId, nextEventId, event;\n return __generator(this, function (_c) {\n time = new Date().getTime();\n lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;\n nextEventId = (_b = context.event_id) !== null && _b !== void 0 ? _b : lastEventId + 1;\n this.config.lastEventId = nextEventId;\n if (!context.time) {\n this.config.lastEventTime = time;\n }\n event = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({ user_id: this.config.userId, device_id: this.config.deviceId, session_id: this.config.sessionId, time: time }, (this.config.appVersion && { app_version: this.config.appVersion })), (this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM })), (this.config.trackingOptions.language && { language: getLanguage() })), (this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS })), { insert_id: UUID(), partner_id: this.config.partnerId, plan: this.config.plan }), (this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n })), context), { event_id: nextEventId, library: this.library, user_agent: this.userAgent });\n return [2 /*return*/, event];\n });\n });\n };\n return Context;\n}());\nexport { Context };\n//# sourceMappingURL=context.js.map","import { __awaiter, __generator } from \"tslib\";\nvar BrowserStorage = /** @class */ (function () {\n function BrowserStorage(storage) {\n this.storage = storage;\n }\n BrowserStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var random, testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!this.storage) {\n return [2 /*return*/, false];\n }\n random = String(Date.now());\n testStorage = new BrowserStorage(this.storage);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, random)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === random];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(value)];\n case 2:\n _a = _b.sent();\n console.error(\"[Amplitude] Error: Could not get value from storage\");\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.getRaw = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, ((_a = this.storage) === null || _a === void 0 ? void 0 : _a.getItem(key)) || undefined];\n });\n });\n };\n BrowserStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.setItem(key, JSON.stringify(value));\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.remove = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.removeItem(key);\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.reset = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.clear();\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n return BrowserStorage;\n}());\nexport { BrowserStorage };\n//# sourceMappingURL=browser-storage.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { getGlobalScope } from '@amplitude/analytics-core';\nimport { BrowserStorage } from './browser-storage';\nvar MAX_ARRAY_LENGTH = 1000;\nvar LocalStorage = /** @class */ (function (_super) {\n __extends(LocalStorage, _super);\n function LocalStorage(config) {\n var _this = this;\n var _a;\n _this = _super.call(this, (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.localStorage) || this;\n _this.loggerProvider = config === null || config === void 0 ? void 0 : config.loggerProvider;\n return _this;\n }\n LocalStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var droppedEventsCount;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(Array.isArray(value) && value.length > MAX_ARRAY_LENGTH)) return [3 /*break*/, 2];\n droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n return [4 /*yield*/, _super.prototype.set.call(this, key, value.slice(0, MAX_ARRAY_LENGTH))];\n case 1:\n _b.sent();\n (_a = this.loggerProvider) === null || _a === void 0 ? void 0 : _a.error(\"Failed to save \".concat(droppedEventsCount, \" events because the queue length exceeded \").concat(MAX_ARRAY_LENGTH, \".\"));\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, _super.prototype.set.call(this, key, value)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return LocalStorage;\n}(BrowserStorage));\nexport { LocalStorage };\n//# sourceMappingURL=local-storage.js.map","import { __extends } from \"tslib\";\nimport { getGlobalScope } from '@amplitude/analytics-core';\nimport { BrowserStorage } from './browser-storage';\nvar SessionStorage = /** @class */ (function (_super) {\n __extends(SessionStorage, _super);\n function SessionStorage() {\n var _a;\n return _super.call(this, (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.sessionStorage) || this;\n }\n return SessionStorage;\n}(BrowserStorage));\nexport { SessionStorage };\n//# sourceMappingURL=session-storage.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from '@amplitude/analytics-core';\nvar XHRTransport = /** @class */ (function (_super) {\n __extends(XHRTransport, _super);\n function XHRTransport() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.state = {\n done: 4,\n };\n return _this;\n }\n XHRTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n var xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === _this.state.done) {\n var responseText = xhr.responseText;\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n resolve(_this.buildResponse(JSON.parse(responseText)));\n }\n catch (_a) {\n resolve(_this.buildResponse({ code: xhr.status }));\n }\n }\n };\n xhr.setRequestHeader('Content-Type', 'application/json');\n xhr.setRequestHeader('Accept', '*/*');\n xhr.send(JSON.stringify(payload));\n })];\n });\n });\n };\n return XHRTransport;\n}(BaseTransport));\nexport { XHRTransport };\n//# sourceMappingURL=xhr.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport, getGlobalScope } from '@amplitude/analytics-core';\nvar SendBeaconTransport = /** @class */ (function (_super) {\n __extends(SendBeaconTransport, _super);\n function SendBeaconTransport() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SendBeaconTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!(globalScope === null || globalScope === void 0 ? void 0 : globalScope.navigator.sendBeacon)) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n var data = JSON.stringify(payload);\n var success = globalScope.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n if (success) {\n return resolve(_this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }));\n }\n return resolve(_this.buildResponse({ code: 500 }));\n }\n catch (e) {\n reject(e);\n }\n })];\n });\n });\n };\n return SendBeaconTransport;\n}(BaseTransport));\nexport { SendBeaconTransport };\n//# sourceMappingURL=send-beacon.js.map","import { __awaiter, __generator, __read } from \"tslib\";\nimport { getOldCookieName } from '@amplitude/analytics-core';\nexport var parseLegacyCookies = function (apiKey, cookieStorage, deleteLegacyCookies) {\n if (deleteLegacyCookies === void 0) { deleteLegacyCookies = true; }\n return __awaiter(void 0, void 0, void 0, function () {\n var cookieName, cookies, _a, deviceId, userId, optOut, sessionId, lastEventTime, lastEventId;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n cookieName = getOldCookieName(apiKey);\n return [4 /*yield*/, cookieStorage.getRaw(cookieName)];\n case 1:\n cookies = _b.sent();\n if (!cookies) {\n return [2 /*return*/, {\n optOut: false,\n }];\n }\n if (!deleteLegacyCookies) return [3 /*break*/, 3];\n return [4 /*yield*/, cookieStorage.remove(cookieName)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _a = __read(cookies.split('.'), 6), deviceId = _a[0], userId = _a[1], optOut = _a[2], sessionId = _a[3], lastEventTime = _a[4], lastEventId = _a[5];\n return [2 /*return*/, {\n deviceId: deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventId: parseTime(lastEventId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n }];\n }\n });\n });\n};\nexport var parseTime = function (num) {\n var integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\nexport var decode = function (value) {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n//# sourceMappingURL=index.js.map","export var DEFAULT_EVENT_PREFIX = '[Amplitude]';\nexport var DEFAULT_PAGE_VIEW_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Page Viewed\");\nexport var DEFAULT_FORM_START_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Started\");\nexport var DEFAULT_FORM_SUBMIT_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Submitted\");\nexport var DEFAULT_FILE_DOWNLOAD_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Downloaded\");\nexport var DEFAULT_SESSION_START_EVENT = 'session_start';\nexport var DEFAULT_SESSION_END_EVENT = 'session_end';\nexport var FILE_EXTENSION = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Extension\");\nexport var FILE_NAME = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Name\");\nexport var LINK_ID = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link ID\");\nexport var LINK_TEXT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link Text\");\nexport var LINK_URL = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link URL\");\nexport var FORM_ID = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form ID\");\nexport var FORM_NAME = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Name\");\nexport var FORM_DESTINATION = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Destination\");\nexport var DEFAULT_IDENTITY_STORAGE = 'cookie';\nexport var DEFAULT_SERVER_ZONE = 'US';\n//# sourceMappingURL=constants.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { Config, Logger, LogLevel, MemoryStorage, UUID, CookieStorage, getCookieName, FetchTransport, getQueryParams, } from '@amplitude/analytics-core';\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { VERSION } from './version';\n// Exported for testing purposes only. Do not expose to public interface.\nvar BrowserConfig = /** @class */ (function (_super) {\n __extends(BrowserConfig, _super);\n function BrowserConfig(apiKey, appVersion, cookieStorage, cookieOptions, defaultTracking, autocapture, deviceId, flushIntervalMillis, flushMaxRetries, flushQueueSize, identityStorage, ingestionMetadata, instanceName, lastEventId, lastEventTime, loggerProvider, logLevel, minIdLength, offline, optOut, partnerId, plan, serverUrl, serverZone, sessionId, sessionTimeout, storageProvider, trackingOptions, transport, useBatch, fetchRemoteConfig, userId, pageCounter, debugLogsEnabled) {\n if (cookieStorage === void 0) { cookieStorage = new MemoryStorage(); }\n if (cookieOptions === void 0) { cookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax',\n secure: false,\n upgrade: true,\n }; }\n if (flushIntervalMillis === void 0) { flushIntervalMillis = 1000; }\n if (flushMaxRetries === void 0) { flushMaxRetries = 5; }\n if (flushQueueSize === void 0) { flushQueueSize = 30; }\n if (identityStorage === void 0) { identityStorage = DEFAULT_IDENTITY_STORAGE; }\n if (loggerProvider === void 0) { loggerProvider = new Logger(); }\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n if (offline === void 0) { offline = false; }\n if (optOut === void 0) { optOut = false; }\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = DEFAULT_SERVER_ZONE; }\n if (sessionTimeout === void 0) { sessionTimeout = 30 * 60 * 1000; }\n if (storageProvider === void 0) { storageProvider = new LocalStorage({ loggerProvider: loggerProvider }); }\n if (trackingOptions === void 0) { trackingOptions = {\n ipAddress: true,\n language: true,\n platform: true,\n }; }\n if (transport === void 0) { transport = 'fetch'; }\n if (useBatch === void 0) { useBatch = false; }\n if (fetchRemoteConfig === void 0) { fetchRemoteConfig = false; }\n var _this = _super.call(this, { apiKey: apiKey, storageProvider: storageProvider, transportProvider: createTransport(transport) }) || this;\n _this.apiKey = apiKey;\n _this.appVersion = appVersion;\n _this.cookieOptions = cookieOptions;\n _this.defaultTracking = defaultTracking;\n _this.autocapture = autocapture;\n _this.flushIntervalMillis = flushIntervalMillis;\n _this.flushMaxRetries = flushMaxRetries;\n _this.flushQueueSize = flushQueueSize;\n _this.identityStorage = identityStorage;\n _this.ingestionMetadata = ingestionMetadata;\n _this.instanceName = instanceName;\n _this.loggerProvider = loggerProvider;\n _this.logLevel = logLevel;\n _this.minIdLength = minIdLength;\n _this.offline = offline;\n _this.partnerId = partnerId;\n _this.plan = plan;\n _this.serverUrl = serverUrl;\n _this.serverZone = serverZone;\n _this.sessionTimeout = sessionTimeout;\n _this.storageProvider = storageProvider;\n _this.trackingOptions = trackingOptions;\n _this.transport = transport;\n _this.useBatch = useBatch;\n _this.fetchRemoteConfig = fetchRemoteConfig;\n _this.version = VERSION;\n _this._optOut = false;\n _this._cookieStorage = cookieStorage;\n _this.deviceId = deviceId;\n _this.lastEventId = lastEventId;\n _this.lastEventTime = lastEventTime;\n _this.optOut = optOut;\n _this.sessionId = sessionId;\n _this.pageCounter = pageCounter;\n _this.userId = userId;\n _this.debugLogsEnabled = debugLogsEnabled;\n _this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : _this.logLevel);\n return _this;\n }\n Object.defineProperty(BrowserConfig.prototype, \"cookieStorage\", {\n get: function () {\n return this._cookieStorage;\n },\n set: function (cookieStorage) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"deviceId\", {\n get: function () {\n return this._deviceId;\n },\n set: function (deviceId) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"userId\", {\n get: function () {\n return this._userId;\n },\n set: function (userId) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"sessionId\", {\n get: function () {\n return this._sessionId;\n },\n set: function (sessionId) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"lastEventTime\", {\n get: function () {\n return this._lastEventTime;\n },\n set: function (lastEventTime) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"lastEventId\", {\n get: function () {\n return this._lastEventId;\n },\n set: function (lastEventId) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"pageCounter\", {\n get: function () {\n return this._pageCounter;\n },\n set: function (pageCounter) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"debugLogsEnabled\", {\n set: function (debugLogsEnabled) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n BrowserConfig.prototype.updateStorage = function () {\n var cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n };\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n };\n return BrowserConfig;\n}(Config));\nexport { BrowserConfig };\nexport var useBrowserConfig = function (apiKey, options, amplitudeInstance) {\n if (options === void 0) { options = {}; }\n return __awaiter(void 0, void 0, void 0, function () {\n var identityStorage, cookieOptions, _a, _b, cookieStorage, legacyCookies, previousCookies, queryParams, deviceId, lastEventId, lastEventTime, optOut, sessionId, userId, trackingOptions, pageCounter, debugLogsEnabled, browserConfig;\n var _c;\n var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;\n return __generator(this, function (_3) {\n switch (_3.label) {\n case 0:\n identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n _c = {};\n if (!(identityStorage !== DEFAULT_IDENTITY_STORAGE)) return [3 /*break*/, 1];\n _a = '';\n return [3 /*break*/, 5];\n case 1:\n if (!((_e = (_d = options.cookieOptions) === null || _d === void 0 ? void 0 : _d.domain) !== null && _e !== void 0)) return [3 /*break*/, 2];\n _b = _e;\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, getTopLevelDomain()];\n case 3:\n _b = (_3.sent());\n _3.label = 4;\n case 4:\n _a = _b;\n _3.label = 5;\n case 5:\n cookieOptions = __assign.apply(void 0, [(_c.domain = _a, _c.expiration = 365, _c.sameSite = 'Lax', _c.secure = false, _c.upgrade = true, _c), options.cookieOptions]);\n cookieStorage = createCookieStorage(options.identityStorage, cookieOptions);\n return [4 /*yield*/, parseLegacyCookies(apiKey, cookieStorage, (_g = (_f = options.cookieOptions) === null || _f === void 0 ? void 0 : _f.upgrade) !== null && _g !== void 0 ? _g : true)];\n case 6:\n legacyCookies = _3.sent();\n return [4 /*yield*/, cookieStorage.get(getCookieName(apiKey))];\n case 7:\n previousCookies = _3.sent();\n queryParams = getQueryParams();\n deviceId = (_m = (_l = (_k = (_j = (_h = options.deviceId) !== null && _h !== void 0 ? _h : queryParams.ampDeviceId) !== null && _j !== void 0 ? _j : queryParams.deviceId) !== null && _k !== void 0 ? _k : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _l !== void 0 ? _l : legacyCookies.deviceId) !== null && _m !== void 0 ? _m : UUID();\n lastEventId = (_o = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventId) !== null && _o !== void 0 ? _o : legacyCookies.lastEventId;\n lastEventTime = (_p = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventTime) !== null && _p !== void 0 ? _p : legacyCookies.lastEventTime;\n optOut = (_r = (_q = options.optOut) !== null && _q !== void 0 ? _q : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.optOut) !== null && _r !== void 0 ? _r : legacyCookies.optOut;\n sessionId = (_s = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.sessionId) !== null && _s !== void 0 ? _s : legacyCookies.sessionId;\n userId = (_u = (_t = options.userId) !== null && _t !== void 0 ? _t : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _u !== void 0 ? _u : legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = (_v = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _v !== void 0 ? _v : legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = (_w = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _w !== void 0 ? _w : legacyCookies.userId;\n trackingOptions = {\n ipAddress: (_y = (_x = options.trackingOptions) === null || _x === void 0 ? void 0 : _x.ipAddress) !== null && _y !== void 0 ? _y : true,\n language: (_0 = (_z = options.trackingOptions) === null || _z === void 0 ? void 0 : _z.language) !== null && _0 !== void 0 ? _0 : true,\n platform: (_2 = (_1 = options.trackingOptions) === null || _1 === void 0 ? void 0 : _1.platform) !== null && _2 !== void 0 ? _2 : true,\n };\n pageCounter = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.pageCounter;\n debugLogsEnabled = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.debugLogsEnabled;\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n browserConfig = new BrowserConfig(apiKey, options.appVersion, cookieStorage, cookieOptions, options.defaultTracking, options.autocapture, deviceId, options.flushIntervalMillis, options.flushMaxRetries, options.flushQueueSize, identityStorage, options.ingestionMetadata, options.instanceName, lastEventId, lastEventTime, options.loggerProvider, options.logLevel, options.minIdLength, options.offline, optOut, options.partnerId, options.plan, options.serverUrl, options.serverZone, sessionId, options.sessionTimeout, options.storageProvider, trackingOptions, options.transport, options.useBatch, options.fetchRemoteConfig, userId, pageCounter, debugLogsEnabled);\n return [4 /*yield*/, browserConfig.storageProvider.isEnabled()];\n case 8:\n if (!(_3.sent())) {\n browserConfig.loggerProvider.warn(\"Storage provider \".concat(browserConfig.storageProvider.constructor.name, \" is not enabled. Falling back to MemoryStorage.\"));\n browserConfig.storageProvider = new MemoryStorage();\n }\n return [2 /*return*/, browserConfig];\n }\n });\n });\n};\nexport var createCookieStorage = function (identityStorage, cookieOptions) {\n if (identityStorage === void 0) { identityStorage = DEFAULT_IDENTITY_STORAGE; }\n if (cookieOptions === void 0) { cookieOptions = {}; }\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage();\n case 'sessionStorage':\n return new SessionStorage();\n case 'none':\n return new MemoryStorage();\n case 'cookie':\n default:\n return new CookieStorage(__assign(__assign({}, cookieOptions), { expirationDays: cookieOptions.expiration }));\n }\n};\nexport var createTransport = function (transport) {\n if (transport === 'xhr') {\n return new XHRTransport();\n }\n if (transport === 'beacon') {\n return new SendBeaconTransport();\n }\n return new FetchTransport();\n};\nexport var getTopLevelDomain = function (url) { return __awaiter(void 0, void 0, void 0, function () {\n var host, parts, levels, storageKey, i, i, domain, options, storage, value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new CookieStorage().isEnabled()];\n case 1:\n if (!(_a.sent()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))) {\n return [2 /*return*/, ''];\n }\n host = url !== null && url !== void 0 ? url : location.hostname;\n parts = host.split('.');\n levels = [];\n storageKey = 'AMP_TLDTEST';\n for (i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n i = 0;\n _a.label = 2;\n case 2:\n if (!(i < levels.length)) return [3 /*break*/, 7];\n domain = levels[i];\n options = { domain: '.' + domain };\n storage = new CookieStorage(options);\n return [4 /*yield*/, storage.set(storageKey, 1)];\n case 3:\n _a.sent();\n return [4 /*yield*/, storage.get(storageKey)];\n case 4:\n value = _a.sent();\n if (!value) return [3 /*break*/, 6];\n return [4 /*yield*/, storage.remove(storageKey)];\n case 5:\n _a.sent();\n return [2 /*return*/, '.' + domain];\n case 6:\n i++;\n return [3 /*break*/, 2];\n case 7: return [2 /*return*/, ''];\n }\n });\n}); };\n//# sourceMappingURL=config.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","import { getGlobalScope } from './global-scope';\nexport var getQueryParams = function () {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _a === void 0 ? void 0 : _a.search)) {\n return {};\n }\n var pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n var params = pairs.reduce(function (acc, curr) {\n var query = curr.split('=', 2);\n var key = tryDecodeURIComponent(query[0]);\n var value = tryDecodeURIComponent(query[1]);\n if (!value) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n return params;\n};\nexport var tryDecodeURIComponent = function (value) {\n if (value === void 0) { value = ''; }\n try {\n return decodeURIComponent(value);\n }\n catch (_a) {\n return '';\n }\n};\n//# sourceMappingURL=query-params.js.map","export var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rtd_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rtd_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n//# sourceMappingURL=constants.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getQueryParams } from '../query-params';\nimport { UTM_CAMPAIGN, UTM_CONTENT, UTM_MEDIUM, UTM_SOURCE, UTM_TERM, GCLID, FBCLID, BASE_CAMPAIGN, DCLID, MSCLKID, RDT_CID, TWCLID, TTCLID, KO_CLICK_ID, LI_FAT_ID, GBRAID, WBRAID, UTM_ID, } from './constants';\nvar CampaignParser = /** @class */ (function () {\n function CampaignParser() {\n }\n CampaignParser.prototype.parse = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, __assign(__assign(__assign(__assign({}, BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds())];\n });\n });\n };\n CampaignParser.prototype.getUtmParam = function () {\n var params = getQueryParams();\n var utmCampaign = params[UTM_CAMPAIGN];\n var utmContent = params[UTM_CONTENT];\n var utmId = params[UTM_ID];\n var utmMedium = params[UTM_MEDIUM];\n var utmSource = params[UTM_SOURCE];\n var utmTerm = params[UTM_TERM];\n return {\n utm_campaign: utmCampaign,\n utm_content: utmContent,\n utm_id: utmId,\n utm_medium: utmMedium,\n utm_source: utmSource,\n utm_term: utmTerm,\n };\n };\n CampaignParser.prototype.getReferrer = function () {\n var _a, _b;\n var data = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;\n }\n catch (_c) {\n // nothing to track\n }\n return data;\n };\n CampaignParser.prototype.getClickIds = function () {\n var _a;\n var params = getQueryParams();\n return _a = {},\n _a[DCLID] = params[DCLID],\n _a[FBCLID] = params[FBCLID],\n _a[GBRAID] = params[GBRAID],\n _a[GCLID] = params[GCLID],\n _a[KO_CLICK_ID] = params[KO_CLICK_ID],\n _a[LI_FAT_ID] = params[LI_FAT_ID],\n _a[MSCLKID] = params[MSCLKID],\n _a[RDT_CID] = params[RDT_CID],\n _a[TTCLID] = params[TTCLID],\n _a[TWCLID] = params[TWCLID],\n _a[WBRAID] = params[WBRAID],\n _a;\n };\n return CampaignParser;\n}());\nexport { CampaignParser };\n//# sourceMappingURL=campaign-parser.js.map","export var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\nexport var RevenueProperty;\n(function (RevenueProperty) {\n RevenueProperty[\"REVENUE_PRODUCT_ID\"] = \"$productId\";\n RevenueProperty[\"REVENUE_QUANTITY\"] = \"$quantity\";\n RevenueProperty[\"REVENUE_PRICE\"] = \"$price\";\n RevenueProperty[\"REVENUE_TYPE\"] = \"$revenueType\";\n RevenueProperty[\"REVENUE_CURRENCY\"] = \"$currency\";\n RevenueProperty[\"REVENUE\"] = \"$revenue\";\n})(RevenueProperty || (RevenueProperty = {}));\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport var SpecialEventType;\n(function (SpecialEventType) {\n SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n SpecialEventType[\"GROUP_IDENTIFY\"] = \"$groupidentify\";\n SpecialEventType[\"REVENUE\"] = \"revenue_amount\";\n})(SpecialEventType || (SpecialEventType = {}));\n//# sourceMappingURL=event.js.map","/**\n * @deprecated use ServerZoneType instead\n */\nexport var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","export var omitUndefined = function (input) {\n var obj = {};\n for (var key in input) {\n var val = input[key];\n if (val) {\n obj[key] = val;\n }\n }\n return obj;\n};\n//# sourceMappingURL=utils.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport { IdentifyOperation, } from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport { omitUndefined } from './utils';\nexport var defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport var pageViewTrackingPlugin = function (options) {\n if (options === void 0) { options = {}; }\n var amplitude;\n var globalScope = getGlobalScope();\n var loggerProvider = undefined;\n var pushState;\n var localConfig;\n var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? defaultPageViewEvent : _a;\n var getDecodeURI = function (locationStr) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n };\n var createPageViewEvent = function () { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, _a;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n _b = {\n event_type: eventType\n };\n _a = [{}];\n return [4 /*yield*/, getCampaignParams()];\n case 1: return [2 /*return*/, (_b.event_properties = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain': \n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path': \n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '', '[Amplitude] Page URL': locationHREF.split('?')[0] }]),\n _b)];\n }\n });\n }); };\n var shouldTrackOnPageLoad = function () { return typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn()); };\n /* istanbul ignore next */\n var previousURL = typeof location !== 'undefined' ? location.href : null;\n var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {\n var newURL, shouldTrackPageView, _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n newURL = location.href;\n shouldTrackPageView = shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n if (!shouldTrackPageView) return [3 /*break*/, 4];\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');\n if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];\n _a = void 0;\n return [3 /*break*/, 3];\n case 1:\n _c = (_b = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 2:\n _a = _c.apply(_b, [_d.sent()]);\n _d.label = 3;\n case 3:\n _a;\n _d.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n /* istanbul ignore next */\n var trackHistoryPageViewWrapper = function () {\n void trackHistoryPageView();\n };\n var plugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n setup: function (config, client) { return __awaiter(void 0, void 0, void 0, function () {\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n amplitude = client;\n localConfig = config;\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n if (globalScope) {\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n // Save reference to original push state, to be used in teardown\n // eslint-disable-next-line @typescript-eslint/unbound-method\n pushState = globalScope.history.pushState;\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n void trackHistoryPageView();\n },\n });\n }\n if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];\n loggerProvider.log('Tracking page view event');\n _b = (_a = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n _b.apply(_a, [_c.sent()]);\n _c.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewEvent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 2];\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n pageViewEvent = _a.sent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = __assign(__assign({}, event.event_properties), pageViewEvent.event_properties);\n _a.label = 2;\n case 2:\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = __assign(__assign({}, event.event_properties), { '[Amplitude] Page Counter': localConfig.pageCounter });\n }\n return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n if (pushState) {\n globalScope.history.pushState = pushState;\n }\n }\n return [2 /*return*/];\n });\n }); },\n };\n return plugin;\n};\nvar getCampaignParams = function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = omitUndefined;\n return [4 /*yield*/, new CampaignParser().parse()];\n case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];\n }\n}); }); };\nvar isCampaignEvent = function (event) {\n if (event.event_type === '$identify' && event.user_properties) {\n var properties = event.user_properties;\n var $set = properties[IdentifyOperation.SET] || {};\n var $unset = properties[IdentifyOperation.UNSET] || {};\n var userProperties_1 = __spreadArray(__spreadArray([], __read(Object.keys($set)), false), __read(Object.keys($unset)), false);\n return Object.keys(BASE_CAMPAIGN).every(function (value) { return userProperties_1.includes(value); });\n }\n return false;\n};\nexport var shouldTrackHistoryPageView = function (trackingOption, newURLStr, oldURLStr) {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '')\n return true;\n var newURL = new URL(newURLStr);\n var oldURL = new URL(oldURLStr);\n var newBaseStr = newURL.origin + newURL.pathname;\n var oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n//# sourceMappingURL=page-view-tracking.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { DEFAULT_FORM_START_EVENT, DEFAULT_FORM_SUBMIT_EVENT, FORM_ID, FORM_NAME, FORM_DESTINATION, } from '../constants';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nexport var formInteractionTracking = function () {\n var observer;\n var eventListeners = [];\n var addEventListener = function (element, type, handler) {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n var removeClickListeners = function () {\n eventListeners.forEach(function (_a) {\n var element = _a.element, type = _a.type, handler = _a.handler;\n /* istanbul ignore next */\n element === null || element === void 0 ? void 0 : element.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n var name = '@amplitude/plugin-form-interaction-tracking-browser';\n var type = 'enrichment';\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var initializeFormTracking, window_1;\n return __generator(this, function (_a) {\n initializeFormTracking = function () {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn('Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.');\n return;\n }\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n var addFormInteractionListener = function (form) {\n var hasFormChanged = false;\n addEventListener(form, 'change', function () {\n var _a;\n var formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, (_a = {},\n _a[FORM_ID] = stringOrUndefined(form.id),\n _a[FORM_NAME] = stringOrUndefined(form.name),\n _a[FORM_DESTINATION] = formDestination,\n _a));\n }\n hasFormChanged = true;\n });\n addEventListener(form, 'submit', function () {\n var _a, _b;\n var formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, (_a = {},\n _a[FORM_ID] = stringOrUndefined(form.id),\n _a[FORM_NAME] = stringOrUndefined(form.name),\n _a[FORM_DESTINATION] = formDestination,\n _a));\n }\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, (_b = {},\n _b[FORM_ID] = stringOrUndefined(form.id),\n _b[FORM_NAME] = stringOrUndefined(form.name),\n _b[FORM_DESTINATION] = formDestination,\n _b));\n hasFormChanged = false;\n });\n };\n // Adds listener to existing anchor tags\n var forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form')).map(addFormInteractionListener);\n }\n });\n });\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n }\n else {\n window_1 = getGlobalScope();\n /* istanbul ignore else*/\n if (window_1) {\n window_1.addEventListener('load', initializeFormTracking);\n }\n else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/, event];\n }); }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n removeClickListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\nexport var stringOrUndefined = function (name) {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined;\n }\n return name;\n};\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport var extractFormAction = function (form) {\n var formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination !== null && formDestination !== void 0 ? formDestination : ''), window.location.href).href;\n }\n catch (_a) {\n //\n }\n return formDestination;\n};\n//# sourceMappingURL=form-interaction-tracking.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nexport var fileDownloadTracking = function () {\n var observer;\n var eventListeners = [];\n var addEventListener = function (element, type, handler) {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n var removeClickListeners = function () {\n eventListeners.forEach(function (_a) {\n var element = _a.element, type = _a.type, handler = _a.handler;\n /* istanbul ignore next */\n element === null || element === void 0 ? void 0 : element.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n var name = '@amplitude/plugin-file-download-tracking-browser';\n var type = 'enrichment';\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var initializeFileDownloadTracking, window_1;\n return __generator(this, function (_a) {\n initializeFileDownloadTracking = function () {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn('File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.');\n return;\n }\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n var addFileDownloadListener = function (a) {\n var url;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n }\n catch (_a) {\n /* istanbul ignore next */\n return;\n }\n var result = ext.exec(url.href);\n var fileExtension = result === null || result === void 0 ? void 0 : result[1];\n if (fileExtension) {\n addEventListener(a, 'click', function () {\n var _a;\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, (_a = {},\n _a[FILE_EXTENSION] = fileExtension,\n _a[FILE_NAME] = url.pathname,\n _a[LINK_ID] = a.id,\n _a[LINK_TEXT] = a.text,\n _a[LINK_URL] = a.href,\n _a));\n }\n });\n }\n };\n var ext = /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n // Adds listener to existing anchor tags\n var links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a')).map(addFileDownloadListener);\n }\n });\n });\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n // If the document is already loaded, initialize immediately.\n /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n }\n else {\n window_1 = getGlobalScope();\n /* istanbul ignore else*/\n if (window_1) {\n window_1.addEventListener('load', initializeFileDownloadTracking);\n }\n else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/, event];\n }); }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n removeClickListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=file-download-tracking.js.map","var notified = false;\nexport var detNotify = function (config) {\n if (notified || config.defaultTracking !== undefined) {\n return;\n }\n var message = \"`options.defaultTracking` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to `options.defaultTracking`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:\\n\\namplitude.init(, {\\n defaultTracking: true,\\n});\\n\\nVisit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.\";\n config.loggerProvider.warn(message);\n notified = true;\n};\n/**\n * @private\n * This function is meant for testing purposes only\n */\nexport var resetNotify = function () {\n notified = false;\n};\n//# sourceMappingURL=det-notification.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getGlobalScope } from '@amplitude/analytics-core';\nexport var networkConnectivityCheckerPlugin = function () {\n var name = '@amplitude/plugin-network-checker-browser';\n var type = 'before';\n var globalScope = getGlobalScope();\n var eventListeners = [];\n var addNetworkListener = function (type, handler) {\n if (globalScope) {\n globalScope.addEventListener(type, handler);\n eventListeners.push({\n type: type,\n handler: handler,\n });\n }\n };\n var removeNetworkListeners = function () {\n eventListeners.forEach(function (_a) {\n var type = _a.type, handler = _a.handler;\n if (globalScope) {\n globalScope.removeEventListener(type, handler);\n }\n });\n eventListeners = [];\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (typeof navigator === 'undefined') {\n config.loggerProvider.debug('Network connectivity checker plugin is disabled because navigator is not available.');\n config.offline = false;\n return [2 /*return*/];\n }\n config.offline = !navigator.onLine;\n addNetworkListener('online', function () {\n config.loggerProvider.debug('Network connectivity changed to online.');\n config.offline = false;\n // Flush immediately will cause ERR_NETWORK_CHANGED\n setTimeout(function () {\n amplitude.flush();\n }, config.flushIntervalMillis);\n });\n addNetworkListener('offline', function () {\n config.loggerProvider.debug('Network connectivity changed to offline.');\n config.offline = true;\n });\n return [2 /*return*/];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n removeNetworkListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=network-connectivity-checker.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport { ServerZone, Status } from '@amplitude/analytics-types';\nvar UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, remote config fetch failed';\nvar SUCCESS_REMOTE_CONFIG = 'Remote config successfully fetched';\nvar MAX_RETRIES_EXCEEDED_MESSAGE = 'Remote config fetch rejected due to exceeded retry count';\nvar TIMEOUT_MESSAGE = 'Remote config fetch rejected due to timeout after 5 seconds';\nvar UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var REMOTE_CONFIG_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_STAGING = 'https://sr-client-cfg.stag2.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_EU = 'https://sr-client-cfg.eu.amplitude.com/config';\nvar RemoteConfigFetch = /** @class */ (function () {\n function RemoteConfigFetch(_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n var _this = this;\n this.retryTimeout = 1000;\n this.attempts = 0;\n this.sessionTargetingMatch = false;\n this.metrics = {};\n this.getRemoteConfig = function (configNamespace, key, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var fetchStartTime, configAPIResponse, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n fetchStartTime = Date.now();\n return [4 /*yield*/, this.fetchWithTimeout(sessionId)];\n case 1:\n configAPIResponse = _a.sent();\n if (configAPIResponse) {\n remoteConfig = configAPIResponse.configs && configAPIResponse.configs[configNamespace];\n if (remoteConfig) {\n this.metrics.fetchTimeAPISuccess = Date.now() - fetchStartTime;\n return [2 /*return*/, remoteConfig[key]];\n }\n }\n this.metrics.fetchTimeAPIFail = Date.now() - fetchStartTime;\n return [2 /*return*/, undefined];\n }\n });\n }); };\n this.fetchWithTimeout = function (sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var controller, timeoutId, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n controller = new AbortController();\n timeoutId = setTimeout(function () { return controller.abort(); }, 5000);\n return [4 /*yield*/, this.fetchRemoteConfig(controller.signal, sessionId)];\n case 1:\n remoteConfig = _a.sent();\n clearTimeout(timeoutId);\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.fetchRemoteConfig = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var urlParams, _a, _b, configKey, options, serverUrl, res, parsedStatus, e_1, knownError;\n var e_2, _c;\n var _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (sessionId === this.lastFetchedSessionId && this.attempts >= this.localConfig.flushMaxRetries) {\n return [2 /*return*/, this.completeRequest({ err: MAX_RETRIES_EXCEEDED_MESSAGE })];\n }\n else if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n else if (sessionId !== this.lastFetchedSessionId) {\n this.lastFetchedSessionId = sessionId;\n this.attempts = 0;\n }\n _e.label = 1;\n case 1:\n _e.trys.push([1, 3, , 4]);\n urlParams = new URLSearchParams({\n api_key: this.localConfig.apiKey,\n });\n try {\n for (_a = __values(this.configKeys), _b = _a.next(); !_b.done; _b = _a.next()) {\n configKey = _b.value;\n urlParams.append('config_keys', configKey);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (sessionId) {\n urlParams.set('session_id', String(sessionId));\n }\n options = {\n headers: {\n Accept: '*/*',\n },\n method: 'GET',\n };\n serverUrl = \"\".concat(this.getServerUrl(), \"?\").concat(urlParams.toString());\n this.attempts += 1;\n return [4 /*yield*/, fetch(serverUrl, __assign(__assign({}, options), { signal: signal }))];\n case 2:\n res = _e.sent();\n if (res === null) {\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_ERROR_MESSAGE })];\n }\n parsedStatus = new BaseTransport().buildStatus(res.status);\n switch (parsedStatus) {\n case Status.Success:\n this.attempts = 0;\n return [2 /*return*/, this.parseAndStoreConfig(res)];\n case Status.Failed:\n return [2 /*return*/, this.retryFetch(signal, sessionId)];\n default:\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_NETWORK_ERROR_MESSAGE })];\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _e.sent();\n knownError = e_1;\n if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n return [2 /*return*/, this.completeRequest({ err: (_d = knownError.message) !== null && _d !== void 0 ? _d : UNEXPECTED_ERROR_MESSAGE })];\n case 4: return [2 /*return*/];\n }\n });\n }); };\n this.retryFetch = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.attempts * _this.retryTimeout); })];\n case 1:\n _a.sent();\n return [2 /*return*/, this.fetchRemoteConfig(signal, sessionId)];\n }\n });\n }); };\n this.parseAndStoreConfig = function (res) { return __awaiter(_this, void 0, void 0, function () {\n var remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, res.json()];\n case 1:\n remoteConfig = (_a.sent());\n this.completeRequest({ success: SUCCESS_REMOTE_CONFIG });\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.localConfig = localConfig;\n this.configKeys = configKeys;\n }\n RemoteConfigFetch.prototype.getServerUrl = function () {\n if (this.localConfig.serverZone === ServerZone.STAGING) {\n return REMOTE_CONFIG_SERVER_URL_STAGING;\n }\n if (this.localConfig.serverZone === ServerZone.EU) {\n return REMOTE_CONFIG_SERVER_URL_EU;\n }\n return REMOTE_CONFIG_SERVER_URL;\n };\n RemoteConfigFetch.prototype.completeRequest = function (_a) {\n var err = _a.err, success = _a.success;\n if (err) {\n throw new Error(err);\n }\n else if (success) {\n this.localConfig.loggerProvider.log(success);\n }\n };\n return RemoteConfigFetch;\n}());\nexport { RemoteConfigFetch };\nexport var createRemoteConfigFetch = function (_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, new RemoteConfigFetch({ localConfig: localConfig, configKeys: configKeys })];\n });\n });\n};\n//# sourceMappingURL=remote-config.js.map","import * as remoteConfigFetch from './remote-config';\nexport var createRemoteConfigFetch = remoteConfigFetch.createRemoteConfigFetch;\n//# sourceMappingURL=index.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { createRemoteConfigFetch } from '@amplitude/analytics-remote-config';\nimport { RequestMetadata } from '@amplitude/analytics-core';\nvar BrowserJoinedConfigGenerator = /** @class */ (function () {\n function BrowserJoinedConfigGenerator(localConfig) {\n this.config = localConfig;\n this.config.loggerProvider.debug('Local configuration before merging with remote config', JSON.stringify(this.config, null, 2));\n }\n BrowserJoinedConfigGenerator.prototype.initialize = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, createRemoteConfigFetch({\n localConfig: this.config,\n configKeys: ['analyticsSDK'],\n })];\n case 1:\n _a.remoteConfigFetch = _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n BrowserJoinedConfigGenerator.prototype.generateJoinedConfig = function () {\n var _a, _b, _c;\n var _d;\n return __awaiter(this, void 0, void 0, function () {\n var remoteConfig, _e, e_1;\n return __generator(this, function (_f) {\n switch (_f.label) {\n case 0:\n _f.trys.push([0, 3, , 4]);\n _e = this.remoteConfigFetch;\n if (!_e) return [3 /*break*/, 2];\n return [4 /*yield*/, this.remoteConfigFetch.getRemoteConfig('analyticsSDK', 'browserSDK', this.config.sessionId)];\n case 1:\n _e = (_f.sent());\n _f.label = 2;\n case 2:\n remoteConfig = _e;\n this.config.loggerProvider.debug('Remote configuration:', JSON.stringify(remoteConfig, null, 2));\n // merge remoteConfig.autocapture and this.config.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from this.config.autocapture\n if (remoteConfig && 'autocapture' in remoteConfig) {\n if (typeof remoteConfig.autocapture === 'boolean') {\n this.config.autocapture = remoteConfig.autocapture;\n }\n if (typeof remoteConfig.autocapture === 'object') {\n if (this.config.autocapture === undefined) {\n this.config.autocapture = remoteConfig.autocapture;\n }\n if (typeof this.config.autocapture === 'boolean') {\n this.config.autocapture = __assign({ attribution: this.config.autocapture, fileDownloads: this.config.autocapture, formInteractions: this.config.autocapture, pageViews: this.config.autocapture, sessions: this.config.autocapture, elementInteractions: this.config.autocapture }, remoteConfig.autocapture);\n }\n if (typeof this.config.autocapture === 'object') {\n this.config.autocapture = __assign(__assign({}, this.config.autocapture), remoteConfig.autocapture);\n }\n }\n // Override default tracking options if autocapture is updated by remote config\n this.config.defaultTracking = this.config.autocapture;\n }\n this.config.loggerProvider.debug('Joined configuration: ', JSON.stringify(this.config, null, 2));\n (_a = (_d = this.config).requestMetadata) !== null && _a !== void 0 ? _a : (_d.requestMetadata = new RequestMetadata());\n if ((_b = this.remoteConfigFetch) === null || _b === void 0 ? void 0 : _b.metrics.fetchTimeAPISuccess) {\n this.config.requestMetadata.recordHistogram('remote_config_fetch_time_API_success', this.remoteConfigFetch.metrics.fetchTimeAPISuccess);\n }\n if ((_c = this.remoteConfigFetch) === null || _c === void 0 ? void 0 : _c.metrics.fetchTimeAPIFail) {\n this.config.requestMetadata.recordHistogram('remote_config_fetch_time_API_fail', this.remoteConfigFetch.metrics.fetchTimeAPIFail);\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _f.sent();\n this.config.loggerProvider.error('Failed to fetch remote configuration because of error: ', e_1);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/, this.config];\n }\n });\n });\n };\n return BrowserJoinedConfigGenerator;\n}());\nexport { BrowserJoinedConfigGenerator };\nexport var createBrowserJoinedConfigGenerator = function (localConfig) { return __awaiter(void 0, void 0, void 0, function () {\n var joinedConfigGenerator;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n joinedConfigGenerator = new BrowserJoinedConfigGenerator(localConfig);\n return [4 /*yield*/, joinedConfigGenerator.initialize()];\n case 1:\n _a.sent();\n return [2 /*return*/, joinedConfigGenerator];\n }\n });\n}); };\n//# sourceMappingURL=joined-config.js.map","export var PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport var AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport var AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport var AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\n// Visual Tagging related constants\nexport var AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport var AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport var AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport var AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\nexport var AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport var AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n//# sourceMappingURL=constants.js.map","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","export var dateTimestampProvider = {\n now: function () {\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n __extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) { delay = 0; }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n setInterval: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = intervalProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearInterval: function (handle) {\n var delegate = intervalProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n __extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n var _a;\n if (delay === void 0) { delay = 0; }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n if (delay === void 0) { delay = 0; }\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n if (delay === void 0) { delay = 0; }\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n if (id != null) {\n intervalProvider.clearInterval(id);\n }\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, _delay) {\n var errored = false;\n var errorValue;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype.unsubscribe = function () {\n if (!this.closed) {\n var _a = this, id = _a.id, scheduler = _a.scheduler;\n var actions = scheduler.actions;\n this.work = this.state = this.scheduler = null;\n this.pending = false;\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n _super.prototype.unsubscribe.call(this);\n }\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n function Scheduler(schedulerActionCtor, now) {\n if (now === void 0) { now = Scheduler.now; }\n this.schedulerActionCtor = schedulerActionCtor;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) { delay = 0; }\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n };\n Scheduler.now = dateTimestampProvider.now;\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n __extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) { now = Scheduler.now; }\n var _this = _super.call(this, SchedulerAction, now) || this;\n _this.actions = [];\n _this._active = false;\n return _this;\n }\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this._active) {\n actions.push(action);\n return;\n }\n var error;\n this._active = true;\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()));\n this._active = false;\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","export function isValidDate(value) {\n return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport var TimeoutError = createErrorClass(function (_super) {\n return function TimeoutErrorImpl(info) {\n if (info === void 0) { info = null; }\n _super(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n this.info = info;\n };\n});\nexport function timeout(config, schedulerArg) {\n var _a = (isValidDate(config) ? { first: config } : typeof config === 'number' ? { each: config } : config), first = _a.first, each = _a.each, _b = _a.with, _with = _b === void 0 ? timeoutErrorFactory : _b, _c = _a.scheduler, scheduler = _c === void 0 ? schedulerArg !== null && schedulerArg !== void 0 ? schedulerArg : asyncScheduler : _c, _d = _a.meta, meta = _d === void 0 ? null : _d;\n if (first == null && each == null) {\n throw new TypeError('No timeout provided.');\n }\n return operate(function (source, subscriber) {\n var originalSourceSubscription;\n var timerSubscription;\n var lastValue = null;\n var seen = 0;\n var startTimer = function (delay) {\n timerSubscription = executeSchedule(subscriber, scheduler, function () {\n try {\n originalSourceSubscription.unsubscribe();\n innerFrom(_with({\n meta: meta,\n lastValue: lastValue,\n seen: seen,\n })).subscribe(subscriber);\n }\n catch (err) {\n subscriber.error(err);\n }\n }, delay);\n };\n originalSourceSubscription = source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n seen++;\n subscriber.next((lastValue = value));\n each > 0 && startTimer(each);\n }, undefined, undefined, function () {\n if (!(timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.closed)) {\n timerSubscription === null || timerSubscription === void 0 ? void 0 : timerSubscription.unsubscribe();\n }\n lastValue = null;\n }));\n !seen && startTimer(first != null ? (typeof first === 'number' ? first : +first - scheduler.now()) : each);\n });\n}\nfunction timeoutErrorFactory(info) {\n throw new TimeoutError(info);\n}\n//# sourceMappingURL=timeout.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","import { __read } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nvar nodeEventEmitterMethods = ['addListener', 'removeListener'];\nvar eventTargetMethods = ['addEventListener', 'removeEventListener'];\nvar jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n }\n var _a = __read(isEventTarget(target)\n ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })\n :\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [], 2), add = _a[0], remove = _a[1];\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target));\n }\n }\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n return new Observable(function (subscriber) {\n var handler = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return subscriber.next(1 < args.length ? args : args[0]);\n };\n add(handler);\n return function () { return remove(handler); };\n });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };\n}\nfunction isNodeStyleEventEmitter(target) {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n//# sourceMappingURL=fromEvent.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n if (dueTime === void 0) { dueTime = 0; }\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var intervalDuration = -1;\n if (intervalOrScheduler != null) {\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n }\n else {\n intervalDuration = intervalOrScheduler;\n }\n }\n return new Observable(function (subscriber) {\n var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n if (due < 0) {\n due = 0;\n }\n var n = 0;\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n subscriber.next(n++);\n if (0 <= intervalDuration) {\n this.schedule(undefined, intervalDuration);\n }\n else {\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n//# sourceMappingURL=timer.js.map","import { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\nexport function merge() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var concurrent = popNumber(args, Infinity);\n var sources = args;\n return !sources.length\n ?\n EMPTY\n : sources.length === 1\n ?\n innerFrom(sources[0])\n :\n mergeAll(concurrent)(from(sources, scheduler));\n}\n//# sourceMappingURL=merge.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function buffer(closingNotifier) {\n return operate(function (source, subscriber) {\n var currentBuffer = [];\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return currentBuffer.push(value); }, function () {\n subscriber.next(currentBuffer);\n subscriber.complete();\n }));\n innerFrom(closingNotifier).subscribe(createOperatorSubscriber(subscriber, function () {\n var b = currentBuffer;\n currentBuffer = [];\n subscriber.next(b);\n }, noop));\n return function () {\n currentBuffer = null;\n };\n });\n}\n//# sourceMappingURL=buffer.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function debounceTime(dueTime, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n return operate(function (source, subscriber) {\n var activeTask = null;\n var lastValue = null;\n var lastTime = null;\n var emit = function () {\n if (activeTask) {\n activeTask.unsubscribe();\n activeTask = null;\n var value = lastValue;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle() {\n var targetTime = lastTime + dueTime;\n var now = scheduler.now();\n if (now < targetTime) {\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n emit();\n }\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n lastValue = value;\n lastTime = scheduler.now();\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n }, function () {\n emit();\n subscriber.complete();\n }, undefined, function () {\n lastValue = activeTask = null;\n }));\n });\n}\n//# sourceMappingURL=debounceTime.js.map","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n function () { return EMPTY; }\n : operate(function (source, subscriber) {\n var seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n//# sourceMappingURL=take.js.map","import { map } from './map';\nexport function mapTo(value) {\n return map(function () { return value; });\n}\n//# sourceMappingURL=mapTo.js.map","import { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\nimport { innerFrom } from '../observable/innerFrom';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return function (source) {\n return concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n };\n }\n return mergeMap(function (value, index) { return innerFrom(delayDurationSelector(value, index)).pipe(take(1), mapTo(value)); });\n}\n//# sourceMappingURL=delayWhen.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\nexport function delay(due, scheduler) {\n if (scheduler === void 0) { scheduler = asyncScheduler; }\n var duration = timer(due, scheduler);\n return delayWhen(function () { return duration; });\n}\n//# sourceMappingURL=delay.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function pairwise() {\n return operate(function (source, subscriber) {\n var prev;\n var hasPrev = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var p = prev;\n prev = value;\n hasPrev && subscriber.next([p, value]);\n hasPrev = true;\n }));\n });\n}\n//# sourceMappingURL=pairwise.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options) {\n if (options === void 0) { options = {}; }\n var _a = options.connector, connector = _a === void 0 ? function () { return new Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d;\n return function (wrapperSource) {\n var connection;\n var resetConnection;\n var subject;\n var refCount = 0;\n var hasCompleted = false;\n var hasErrored = false;\n var cancelReset = function () {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = undefined;\n };\n var reset = function () {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n var resetAndUnsubscribe = function () {\n var conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate(function (source, subscriber) {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n var dest = (subject = subject !== null && subject !== void 0 ? subject : connector());\n subscriber.add(function () {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection &&\n refCount > 0) {\n connection = new SafeSubscriber({\n next: function (value) { return dest.next(value); },\n error: function (err) {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: function () {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (on === true) {\n reset();\n return;\n }\n if (on === false) {\n return;\n }\n var onSubscriber = new SafeSubscriber({\n next: function () {\n onSubscriber.unsubscribe();\n reset();\n },\n });\n return innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);\n}\n//# sourceMappingURL=share.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n return operate(function (source, subscriber) {\n var innerSubscriber = null;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n var innerIndex = 0;\n var outerIndex = index++;\n innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n innerSubscriber = null;\n checkComplete();\n })));\n }, function () {\n isComplete = true;\n checkComplete();\n }));\n });\n}\n//# sourceMappingURL=switchMap.js.map","/* eslint-disable no-restricted-globals */\nimport * as constants from './constants';\nvar SENSITIVE_TAGS = ['input', 'select', 'textarea'];\nexport var createShouldTrackEvent = function (autocaptureOptions, allowlist) {\n return function (actionType, element) {\n var _a, _b, _c;\n var pageUrlAllowlist = autocaptureOptions.pageUrlAllowlist, shouldTrackEventResolver = autocaptureOptions.shouldTrackEventResolver;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n /* istanbul ignore next */\n var elementType = String(element === null || element === void 0 ? void 0 : element.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n /* istanbul ignore if */\n if (allowlist) {\n var hasMatchAnyAllowedSelector = allowlist.some(function (selector) { var _a; return !!((_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector)); });\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n var computedStyle = (_c = window === null || window === void 0 ? void 0 : window.getComputedStyle) === null || _c === void 0 ? void 0 : _c.call(window, element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\nexport var isNonSensitiveString = function (text) {\n if (text == null) {\n return false;\n }\n if (typeof text === 'string') {\n var ccRegex = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((text || '').replace(/[- ]/g, ''))) {\n return false;\n }\n var ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(text)) {\n return false;\n }\n }\n return true;\n};\nexport var isTextNode = function (node) {\n return !!node && node.nodeType === 3;\n};\nexport var isNonSensitiveElement = function (element) {\n var _a, _b, _c;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n var isContentEditable = element instanceof HTMLElement ? ((_c = element.getAttribute('contenteditable')) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'true' : false;\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n// Maybe this can be simplified with element.innerText, keep and manual concatenating for now, more research needed.\nexport var getText = function (element) {\n var text = '';\n if (isNonSensitiveElement(element) && element.childNodes && element.childNodes.length) {\n element.childNodes.forEach(function (child) {\n var childText = '';\n if (isTextNode(child)) {\n if (child.textContent) {\n childText = child.textContent;\n }\n }\n else {\n childText = getText(child);\n }\n text += childText\n .split(/(\\s+)/)\n .filter(isNonSensitiveString)\n .join('')\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n .substring(0, 255);\n });\n }\n return text;\n};\nexport var isPageUrlAllowed = function (url, pageUrlAllowlist) {\n if (!pageUrlAllowlist || !pageUrlAllowlist.length) {\n return true;\n }\n return pageUrlAllowlist.some(function (allowedUrl) {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\nexport var getAttributesWithPrefix = function (element, prefix) {\n return element.getAttributeNames().reduce(function (attributes, attributeName) {\n if (attributeName.startsWith(prefix)) {\n var attributeKey = attributeName.replace(prefix, '');\n var attributeValue = element.getAttribute(attributeName);\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\nexport var isEmpty = function (value) {\n return (value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0));\n};\nexport var removeEmptyProperties = function (properties) {\n return Object.keys(properties).reduce(function (filteredProperties, key) {\n var value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\nexport var getNearestLabel = function (element) {\n var parent = element.parentElement;\n if (!parent) {\n return '';\n }\n var labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n }\n catch (error) {\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n var labelText = labelElement.textContent || '';\n return isNonSensitiveString(labelText) ? labelText : '';\n }\n return getNearestLabel(parent);\n};\nexport var querySelectUniqueElements = function (root, selectors) {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n var elementSet = selectors.reduce(function (elements, selector) {\n if (selector) {\n var selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach(function (element) {\n elements.add(element);\n });\n }\n return elements;\n }, new Set());\n return Array.from(elementSet);\n }\n return [];\n};\n// Similar as element.closest, but works with multiple selectors\nexport var getClosestElement = function (element, selectors) {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some(function (selector) { var _a; return (_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector); })) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element === null || element === void 0 ? void 0 : element.parentElement, selectors);\n};\n// Returns the element properties for the given element in Visual Labeling.\nexport var getEventTagProps = function (element) {\n var _a;\n var _b, _c;\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],\n _a);\n return removeEmptyProperties(properties);\n};\nexport var asyncLoadScript = function (url) {\n return new Promise(function (resolve, reject) {\n var _a;\n try {\n var scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener('load', function () {\n resolve({ status: true });\n }, { once: true });\n scriptElement.addEventListener('error', function () {\n reject({\n status: false,\n message: \"Failed to load the script \".concat(url),\n });\n });\n /* istanbul ignore next */\n (_a = document.head) === null || _a === void 0 ? void 0 : _a.appendChild(scriptElement);\n }\n catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\nexport function generateUniqueId() {\n return \"\".concat(Date.now(), \"-\").concat(Math.random().toString(36).substr(2, 9));\n}\nexport var filterOutNonTrackableEvents = function (event) {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n return true;\n};\n//# sourceMappingURL=helpers.js.map","/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport { AMPLITUDE_ORIGIN, AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL, AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS, } from '../constants';\nimport { asyncLoadScript, generateUniqueId, getEventTagProps } from '../helpers';\n// TODO: use MessageChannel instead of window.postMessage\nvar WindowMessenger = /** @class */ (function () {\n function WindowMessenger(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.origin, origin = _c === void 0 ? AMPLITUDE_ORIGIN : _c;\n var _this = this;\n this.endpoint = AMPLITUDE_ORIGIN;\n this.requestCallbacks = {};\n this.onSelect = function (data) {\n _this.notify({ action: 'element-selected', data: data });\n };\n this.onTrack = function (type, properties) {\n if (type === 'selector-mode-changed') {\n _this.notify({ action: 'track-selector-mode-changed', data: properties });\n }\n else if (type === 'selector-moved') {\n _this.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n this.endpoint = origin;\n }\n WindowMessenger.prototype.notify = function (message) {\n var _a, _b, _c, _d;\n (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message sent: ', JSON.stringify(message));\n (_d = (_c = window.opener) === null || _c === void 0 ? void 0 : _c.postMessage) === null || _d === void 0 ? void 0 : _d.call(_c, message, this.endpoint);\n };\n // Send an async request to the parent window\n WindowMessenger.prototype.sendRequest = function (action, args, options) {\n var _this = this;\n if (options === void 0) { options = { timeout: 15000 }; }\n // Create Request ID\n var id = generateUniqueId();\n var request = {\n id: id,\n action: action,\n args: args,\n };\n // Create a Promise that will be resolved when the response is received\n var promise = new Promise(function (resolve, reject) {\n _this.requestCallbacks[id] = { resolve: resolve, reject: reject };\n // Send the request\n _this.notify(request);\n // Handle request timeouts\n if ((options === null || options === void 0 ? void 0 : options.timeout) > 0) {\n setTimeout(function () {\n reject(new Error(\"\".concat(action, \" timed out (id: \").concat(id, \")\")));\n delete _this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n return promise;\n };\n // Handle messages from the parent window\n WindowMessenger.prototype.handleResponse = function (response) {\n var _a;\n if (!this.requestCallbacks[response.id]) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(\"No callback found for request id: \".concat(response.id));\n return;\n }\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n };\n WindowMessenger.prototype.setup = function (_a) {\n var _this = this;\n var _b = _a === void 0 ? {} : _a, logger = _b.logger, endpoint = _b.endpoint, isElementSelectable = _b.isElementSelectable, cssSelectorAllowlist = _b.cssSelectorAllowlist, actionClickAllowlist = _b.actionClickAllowlist;\n this.logger = logger;\n // If endpoint is customized, don't override it.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n var amplitudeVisualTaggingSelectorInstance = null;\n // Attach Event Listener to listen for messages from the parent window\n window.addEventListener('message', function (event) {\n var _a, _b, _c, _d, _e;\n (_b = (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message received: ', JSON.stringify(event));\n // Only accept messages from the specified origin\n if (_this.endpoint !== event.origin) {\n return;\n }\n var eventData = event === null || event === void 0 ? void 0 : event.data;\n var action = eventData === null || eventData === void 0 ? void 0 : eventData.action;\n // Ignore messages without action\n if (!action) {\n return;\n }\n // If id exists, handle responses to previous requests\n if ('id' in eventData) {\n (_d = (_c = _this.logger) === null || _c === void 0 ? void 0 : _c.debug) === null || _d === void 0 ? void 0 : _d.call(_c, 'Received Response to previous request: ', JSON.stringify(event));\n _this.handleResponse(eventData);\n // If action exists, handle the action using existing handlers\n }\n else {\n if (action === 'ping') {\n _this.notify({ action: 'pong' });\n }\n else if (action === 'initialize-visual-tagging-selector') {\n var actionData_1 = eventData === null || eventData === void 0 ? void 0 : eventData.data;\n asyncLoadScript(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(function () {\n var _a;\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (_a = window === null || window === void 0 ? void 0 : window.amplitudeVisualTaggingSelector) === null || _a === void 0 ? void 0 : _a.call(window, {\n getEventTagProps: getEventTagProps,\n isElementSelectable: function (element) {\n if (isElementSelectable) {\n return isElementSelectable((actionData_1 === null || actionData_1 === void 0 ? void 0 : actionData_1.actionType) || 'click', element);\n }\n return true;\n },\n onTrack: _this.onTrack,\n onSelect: _this.onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: _this,\n cssSelectorAllowlist: cssSelectorAllowlist,\n actionClickAllowlist: actionClickAllowlist,\n });\n _this.notify({ action: 'selector-loaded' });\n })\n .catch(function () {\n var _a;\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.warn('Failed to initialize visual tagging selector');\n });\n }\n else if (action === 'close-visual-tagging-selector') {\n // eslint-disable-next-line\n (_e = amplitudeVisualTaggingSelectorInstance === null || amplitudeVisualTaggingSelectorInstance === void 0 ? void 0 : amplitudeVisualTaggingSelectorInstance.close) === null || _e === void 0 ? void 0 : _e.call(amplitudeVisualTaggingSelectorInstance);\n }\n }\n });\n // Notify the parent window that the page has loaded\n this.notify({ action: 'page-loaded' });\n };\n return WindowMessenger;\n}());\nexport { WindowMessenger };\n//# sourceMappingURL=messenger.js.map","import { __read, __values } from \"tslib\";\nimport { isNonSensitiveElement } from './helpers';\nvar BLOCKED_ATTRIBUTES = [\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n // non-useful and potentially large attribute\n 'style',\n // sensitive as prefilled form data may populate this attribute\n 'value',\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n];\nvar SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\nvar SVG_TAGS = ['svg', 'path', 'g'];\nvar HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nvar MAX_ATTRIBUTE_LENGTH = 128;\nvar MAX_HIERARCHY_LENGTH = 1024;\nexport function getElementProperties(element) {\n var e_1, _a;\n var _b, _c, _d, _e;\n if (element === null) {\n return null;\n }\n var tagName = String(element.tagName).toLowerCase();\n var properties = {\n tag: tagName,\n };\n var siblings = Array.from((_c = (_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter(function (el) { return el.tagName === element.tagName; }).indexOf(element);\n }\n var prevSiblingTag = (_e = (_d = element.previousElementSibling) === null || _d === void 0 ? void 0 : _d.tagName) === null || _e === void 0 ? void 0 : _e.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = String(prevSiblingTag);\n }\n var id = element.getAttribute('id');\n if (id) {\n properties.id = String(id);\n }\n var classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n var attributes = {};\n var attributesArray = Array.from(element.attributes);\n var filteredAttributes = attributesArray.filter(function (attr) { return !BLOCKED_ATTRIBUTES.includes(attr.name); });\n var isSensitiveElement = !isNonSensitiveElement(element);\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes(String(element.getAttribute('type'))) && !SVG_TAGS.includes(tagName)) {\n try {\n for (var filteredAttributes_1 = __values(filteredAttributes), filteredAttributes_1_1 = filteredAttributes_1.next(); !filteredAttributes_1_1.done; filteredAttributes_1_1 = filteredAttributes_1.next()) {\n var attr = filteredAttributes_1_1.value;\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n // Finally cast attribute value to string and limit attribute value length\n attributes[attr.name] = String(attr.value).substring(0, MAX_ATTRIBUTE_LENGTH);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (filteredAttributes_1_1 && !filteredAttributes_1_1.done && (_a = filteredAttributes_1.return)) _a.call(filteredAttributes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n return properties;\n}\nexport function getAncestors(targetEl) {\n var ancestors = [];\n if (!targetEl) {\n return ancestors;\n }\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n var current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n// Get the DOM hierarchy of the element, starting from the target element to the root element.\nexport var getHierarchy = function (element) {\n var hierarchy = [];\n if (!element) {\n return [];\n }\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n var ancestors = getAncestors(element);\n hierarchy = ensureListUnderLimit(ancestors.map(function (el) { return getElementProperties(el); }), MAX_HIERARCHY_LENGTH);\n return hierarchy;\n};\nexport function ensureListUnderLimit(list, bytesLimit) {\n var numChars = 0;\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n if (node === null) {\n // simulate 'None' in python\n numChars += 4;\n }\n else {\n var value = ensureUnicodePythonCompatible(node);\n // Using Array.from(string).length instead of string.length\n // to correctly count Unicode characters (including emojis)\n numChars += value ? Array.from(value).length : 4;\n }\n if (numChars > bytesLimit) {\n return list.slice(0, i);\n }\n }\n return list;\n}\n/**\n * Converts a JSON-compatible value to a Python-compatible string representation.\n * This function handles various data types and ensures proper escaping and formatting.\n *\n * @param value - The value to be converted (can be any JSON-compatible type)\n * @param nested - Indicates if the value is nested within another structure (default: false)\n * @returns A string representation of the value compatible with Python, or null if conversion fails\n */\nexport function ensureUnicodePythonCompatible(value, nested) {\n if (nested === void 0) { nested = false; }\n try {\n if (value == null) {\n // Handle null values\n if (nested) {\n return 'None'; // Represent null as 'None' in Python when nested\n }\n return null; // Return null for top-level null values\n }\n else if (typeof value === 'string') {\n if (nested) {\n // Escape special characters in nested strings\n value = value.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r');\n // Handle quotes in the string\n if (value.includes('\"')) {\n return \"'\".concat(value, \"'\"); // Wrap in single quotes if it contains double quotes\n }\n if (value.includes(\"'\")) {\n return \"\\\"\".concat(value.replace(/'/g, \"\\\\'\"), \"\\\"\"); // Wrap in double quotes and escape single quotes\n }\n return \"'\".concat(value, \"'\"); // Default to wrapping in single quotes\n }\n return value; // Return non-nested strings as-is\n }\n else if (typeof value === 'boolean') {\n // Convert boolean to Python-style capitalized string\n return value ? 'True' : 'False';\n }\n else if (Array.isArray(value)) {\n // Handle arrays by recursively converting each element\n var elements = value.map(function (o) { return ensureUnicodePythonCompatible(o, true); });\n return \"[\".concat(elements.join(', '), \"]\");\n }\n else if (typeof value === 'object') {\n // Handle objects (dictionaries in Python)\n var entries = Object.entries(value)\n .filter(function (_a) {\n var _b = __read(_a, 1), key = _b[0];\n return key != null;\n }) // Filter out null keys\n .map(function (_a) {\n var _b = __read(_a, 2), key = _b[0], val = _b[1];\n return \"\".concat(String(ensureUnicodePythonCompatible(key, true)), \": \").concat(String(ensureUnicodePythonCompatible(val, true)));\n });\n var result = \"{\".concat(entries.join(', '), \"}\");\n // Handle single quotes in the resulting string\n if (result.includes(\"\\\\'\")) {\n result = result.replace(/'/g, \"'\").replace(/'/g, \"\\\\'\");\n }\n return result;\n }\n // For any other types, return their string representation;\n return value.toString();\n }\n catch (e) {\n // Return null if any error occurs during the conversion\n return null;\n }\n}\n//# sourceMappingURL=hierarchy.js.map","import { __read, __values } from \"tslib\";\nimport { buffer, filter, map, debounceTime, merge, pairwise, delay } from 'rxjs';\nimport { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nvar RAGE_CLICK_THRESHOLD = 5;\nexport function trackClicks(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, shouldTrackEvent = _a.shouldTrackEvent;\n var clickObservable = allObservables.clickObservable;\n // Trigger if the target of the click event has changed and position is different\n // Keeping track of position is important to avoid false positives when the user clicks on the same\n // element where certain frameworks could replace the element instance between rerenders\n var comparisonTrigger = clickObservable.pipe(pairwise(), filter(function (_a) {\n var _b = __read(_a, 2), prev = _b[0], current = _b[1];\n var targetChanged = prev.event.target !== current.event.target;\n /* istanbul ignore next */\n var samePos = Math.abs(current.event.screenX - prev.event.screenX) <= 20 &&\n Math.abs(current.event.screenY - prev.event.screenY) <= 20;\n return targetChanged && !samePos;\n }));\n // Trigger if there is no click event within 1 second\n var timeoutTrigger = clickObservable.pipe(debounceTime(options.debounceTime), map(function () { return 'timeout'; }));\n var triggers = merge(comparisonTrigger, timeoutTrigger);\n // Get buffers of clicks, if the buffer length is over 5, it is rage click\n var bufferedClicks = clickObservable.pipe(delay(0), filter(filterOutNonTrackableEvents), filter(function (click) {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n }), buffer(triggers));\n return bufferedClicks.subscribe(function (clicks) {\n var e_1, _a;\n // TODO: update this when rage clicks are added\n var clickType = clicks.length >= RAGE_CLICK_THRESHOLD ? AMPLITUDE_ELEMENT_CLICKED_EVENT : AMPLITUDE_ELEMENT_CLICKED_EVENT;\n try {\n for (var clicks_1 = __values(clicks), clicks_1_1 = clicks_1.next(); !clicks_1_1.done; clicks_1_1 = clicks_1.next()) {\n var click = clicks_1_1.value;\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(clickType, click.targetElementProperties);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (clicks_1_1 && !clicks_1_1.done && (_a = clicks_1.return)) _a.call(clicks_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n });\n}\n//# sourceMappingURL=track-click.js.map","import { filter } from 'rxjs';\nimport { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\nexport function trackChange(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent;\n var changeObservable = allObservables.changeObservable;\n var filteredChangeObservable = changeObservable.pipe(filter(filterOutNonTrackableEvents), filter(function (changeEvent) {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n }));\n return filteredChangeObservable.subscribe(function (changeEvent) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-change.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { filter, map, merge, switchMap, take, timeout, EMPTY } from 'rxjs';\nimport { filterOutNonTrackableEvents, getClosestElement } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackActionClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, shouldTrackActionClick = _a.shouldTrackActionClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable.pipe(filter(function (click) {\n // Filter out regularly tracked click events that are already handled in trackClicks\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n }), map(function (click) {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n var closestActionClickEl = getClosestElement(click.event.target, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl;\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n }), filter(filterOutNonTrackableEvents), filter(function (clickEvent) {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n }));\n var changeObservables = [mutationObservable];\n /* istanbul ignore next */\n if (navigateObservable) {\n changeObservables.push(navigateObservable);\n }\n var mutationOrNavigate = merge.apply(void 0, __spreadArray([], __read(changeObservables), false));\n var actionClicks = filteredClickObservable.pipe(\n // If a mutation occurs within 0.5 seconds of a click event (timeout({ first: 500 })), it emits the original first click event.\n // take 1 to only limit the action events in case there are multiple\n switchMap(function (click) {\n return mutationOrNavigate.pipe(take(1), timeout({ first: 500, with: function () { return EMPTY; } }), // in case of timeout, map to empty to prevent any click from being emitted\n map(function () { return click; }));\n }));\n return actionClicks.subscribe(function (actionClick) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-action-click.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_ACTION_CLICK_ALLOWLIST, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { fromEvent, map, Observable, share } from 'rxjs';\nimport { getText, getAttributesWithPrefix, removeEmptyProperties, getNearestLabel, createShouldTrackEvent, getClosestElement, } from './helpers';\nimport { WindowMessenger } from './libs/messenger';\nimport { getHierarchy } from './hierarchy';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"ClickObservable\"] = \"clickObservable\";\n ObservablesEnum[\"ChangeObservable\"] = \"changeObservable\";\n // ErrorObservable = 'errorObservable',\n ObservablesEnum[\"NavigateObservable\"] = \"navigateObservable\";\n ObservablesEnum[\"MutationObservable\"] = \"mutationObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\n// Type predicate\nexport function isElementBasedEvent(event) {\n return event.type === 'click' || event.type === 'change';\n}\nexport var autocapturePlugin = function (options) {\n var _a, _b, _c;\n if (options === void 0) { options = {}; }\n var _d = options.dataAttributePrefix, dataAttributePrefix = _d === void 0 ? DEFAULT_DATA_ATTRIBUTE_PREFIX : _d, _e = options.visualTaggingOptions, visualTaggingOptions = _e === void 0 ? {\n enabled: true,\n messenger: new WindowMessenger(),\n } : _e;\n options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = (_c = options.debounceTime) !== null && _c !== void 0 ? _c : 0; // TODO: update this when rage clicks are added to 1000ms\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n // Create Observables from direct user events\n var clickObservable = fromEvent(document, 'click', { capture: true }).pipe(map(function (click) { return addAdditionalEventProperties(click, 'click'); }), share());\n var changeObservable = fromEvent(document, 'change', { capture: true }).pipe(map(function (change) { return addAdditionalEventProperties(change, 'change'); }), share());\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n // Create observable for URL changes\n var navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = fromEvent(window.navigation, 'navigate').pipe(map(function (navigate) { return addAdditionalEventProperties(navigate, 'navigate'); }), share());\n }\n // Track DOM Mutations\n var mutationObservable = new Observable(function (observer) {\n var mutationObserver = new MutationObserver(function (mutations) {\n observer.next(mutations);\n });\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n return function () { return mutationObserver.disconnect(); };\n }).pipe(map(function (mutation) { return addAdditionalEventProperties(mutation, 'mutation'); }), share());\n return _a = {},\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.ChangeObservable] = changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n _a[ObservablesEnum.NavigateObservable] = navigateObservable,\n _a[ObservablesEnum.MutationObservable] = mutationObservable,\n _a;\n };\n // Returns the Amplitude event properties for the given element.\n var getEventProperties = function (actionType, element) {\n var _a;\n var _b, _c;\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n /* istanbul ignore next */\n var rect = typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n var ariaLabel = element.getAttribute('aria-label');\n var attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n var nearestLabel = getNearestLabel(element);\n /* istanbul ignore next */\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '',\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class'),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY] = getHierarchy(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT] = rect.left == null ? null : Math.round(rect.left),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = ariaLabel,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = (typeof document !== 'undefined' && document.title) || '',\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = window.innerHeight,\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = window.innerWidth,\n _a);\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n var addAdditionalEventProperties = function (event, type) {\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n // Retrieve additional event properties from the target element\n var closestTrackedAncestor = getClosestElement(baseEvent.event.target, options.cssSelectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = getEventProperties(baseEvent.type, closestTrackedAncestor);\n }\n return baseEvent;\n }\n return baseEvent;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;\n var _a, _b;\n return __generator(this, function (_c) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n shouldTrackEvent = createShouldTrackEvent(options, options.cssSelectorAllowlist);\n shouldTrackActionClick = createShouldTrackEvent(options, options.actionClickAllowlist);\n allObservables = createObservables();\n clickTrackingSubscription = trackClicks({\n allObservables: allObservables,\n options: options,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(clickTrackingSubscription);\n changeSubscription = trackChange({\n allObservables: allObservables,\n getEventProperties: getEventProperties,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(changeSubscription);\n actionClickSubscription = trackActionClick({\n allObservables: allObservables,\n options: options,\n getEventProperties: getEventProperties,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n subscriptions.push(actionClickSubscription);\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n // Setup visual tagging selector\n if (window.opener && visualTaggingOptions.enabled) {\n allowlist = options.cssSelectorAllowlist;\n actionClickAllowlist = options.actionClickAllowlist;\n /* istanbul ignore next */\n (_b = visualTaggingOptions.messenger) === null || _b === void 0 ? void 0 : _b.setup(__assign(__assign({ logger: config === null || config === void 0 ? void 0 : config.loggerProvider }, ((config === null || config === void 0 ? void 0 : config.serverZone) && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] })), { isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)), cssSelectorAllowlist: allowlist, actionClickAllowlist: actionClickAllowlist }));\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=autocapture-plugin.js.map","export var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rtd_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rtd_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n//# sourceMappingURL=constants.js.map","import { __assign, __read, __rest } from \"tslib\";\nimport { createIdentifyEvent, Identify } from '@amplitude/analytics-core';\nimport { BASE_CAMPAIGN } from './constants';\nvar domainWithoutSubdomain = function (domain) {\n var parts = domain.split('.');\n if (parts.length <= 2) {\n return domain;\n }\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nvar isDirectTraffic = function (current) {\n return Object.values(current).every(function (value) { return !value; });\n};\nexport var isNewCampaign = function (current, previous, options, logger, isNewSession) {\n if (isNewSession === void 0) { isNewSession = true; }\n var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = __rest(current, [\"referrer\", \"referring_domain\"]);\n var _a = previous || {}, _previous_referrer = _a.referrer, prevReferringDomain = _a.referring_domain, previousCampaign = __rest(_a, [\"referrer\", \"referring_domain\"]);\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(\"This is not a new campaign because \".concat(current.referring_domain, \" is in the exclude referrer list.\"));\n return false;\n }\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n var hasNewDomain = domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n var result = !previous || hasNewCampaign || hasNewDomain;\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n }\n else {\n logger.debug(\"This is a new campaign. An $identify event will be sent.\");\n }\n return result;\n};\nexport var isExcludedReferrer = function (excludeReferrers, referringDomain) {\n if (excludeReferrers === void 0) { excludeReferrers = []; }\n if (referringDomain === void 0) { referringDomain = ''; }\n return excludeReferrers.some(function (value) {\n return value instanceof RegExp ? value.test(referringDomain) : value === referringDomain;\n });\n};\nexport var createCampaignEvent = function (campaign, options) {\n var campaignParameters = __assign(__assign({}, BASE_CAMPAIGN), campaign);\n var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {\n var _b;\n var _c = __read(_a, 2), key = _c[0], value = _c[1];\n identify.setOnce(\"initial_\".concat(key), (_b = value !== null && value !== void 0 ? value : options.initialEmptyValue) !== null && _b !== void 0 ? _b : 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n return createIdentifyEvent(identifyEvent);\n};\nexport var getDefaultExcludedReferrers = function (cookieDomain) {\n var domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(\"\".concat(domain.replace('.', '\\\\.'), \"$\"))];\n }\n return [];\n};\n//# sourceMappingURL=helpers.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getQueryParams } from '@amplitude/analytics-core';\nimport { UTM_CAMPAIGN, UTM_CONTENT, UTM_MEDIUM, UTM_SOURCE, UTM_TERM, GCLID, FBCLID, BASE_CAMPAIGN, DCLID, MSCLKID, RDT_CID, TWCLID, TTCLID, KO_CLICK_ID, LI_FAT_ID, GBRAID, WBRAID, UTM_ID, } from './constants';\nvar CampaignParser = /** @class */ (function () {\n function CampaignParser() {\n }\n CampaignParser.prototype.parse = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, __assign(__assign(__assign(__assign({}, BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds())];\n });\n });\n };\n CampaignParser.prototype.getUtmParam = function () {\n var params = getQueryParams();\n var utmCampaign = params[UTM_CAMPAIGN];\n var utmContent = params[UTM_CONTENT];\n var utmId = params[UTM_ID];\n var utmMedium = params[UTM_MEDIUM];\n var utmSource = params[UTM_SOURCE];\n var utmTerm = params[UTM_TERM];\n return {\n utm_campaign: utmCampaign,\n utm_content: utmContent,\n utm_id: utmId,\n utm_medium: utmMedium,\n utm_source: utmSource,\n utm_term: utmTerm,\n };\n };\n CampaignParser.prototype.getReferrer = function () {\n var _a, _b;\n var data = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;\n }\n catch (_c) {\n // nothing to track\n }\n return data;\n };\n CampaignParser.prototype.getClickIds = function () {\n var _a;\n var params = getQueryParams();\n return _a = {},\n _a[DCLID] = params[DCLID],\n _a[FBCLID] = params[FBCLID],\n _a[GBRAID] = params[GBRAID],\n _a[GCLID] = params[GCLID],\n _a[KO_CLICK_ID] = params[KO_CLICK_ID],\n _a[LI_FAT_ID] = params[LI_FAT_ID],\n _a[MSCLKID] = params[MSCLKID],\n _a[RDT_CID] = params[RDT_CID],\n _a[TTCLID] = params[TTCLID],\n _a[TWCLID] = params[TWCLID],\n _a[WBRAID] = params[WBRAID],\n _a;\n };\n return CampaignParser;\n}());\nexport { CampaignParser };\n//# sourceMappingURL=campaign-parser.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getStorageKey, isNewSession } from '@amplitude/analytics-core';\nimport { getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\nimport { CampaignParser } from './campaign-parser';\nimport { BASE_CAMPAIGN } from './constants';\nvar WebAttribution = /** @class */ (function () {\n function WebAttribution(options, config) {\n var _a;\n this.shouldTrackNewCampaign = false;\n this.options = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) }, options);\n this.storage = config.cookieStorage;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n WebAttribution.prototype.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var isEventInNewSession;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.fetchCampaign()];\n case 1:\n _a = __read.apply(void 0, [_b.sent(), 2]), this.currentCampaign = _a[0], this.previousCampaign = _a[1];\n isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n if (!isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession)) return [3 /*break*/, 3];\n this.shouldTrackNewCampaign = true;\n return [4 /*yield*/, this.storage.set(this.storageKey, this.currentCampaign)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n WebAttribution.prototype.fetchCampaign = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all([new CampaignParser().parse(), this.storage.get(this.storageKey)])];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n WebAttribution.prototype.generateCampaignEvent = function (event_id) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n var campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n };\n WebAttribution.prototype.shouldSetSessionIdOnNewCampaign = function () {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n };\n return WebAttribution;\n}());\nexport { WebAttribution };\n//# sourceMappingURL=web-attribution.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID, getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId, isNewSession, IdentityEventSender, getQueryParams, OfflineDisabled, } from '@amplitude/analytics-core';\nimport { getAttributionTrackingConfig, getPageViewTrackingConfig, getElementInteractionsConfig, isAttributionTrackingEnabled, isSessionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, isElementInteractionsEnabled, isPageViewTrackingEnabled, } from './default-tracking';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\nimport { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';\nimport { createBrowserJoinedConfigGenerator } from './config/joined-config';\nimport { autocapturePlugin } from '@amplitude/plugin-autocapture-browser';\nimport { WebAttribution } from './attribution/web-attribution';\nvar AmplitudeBrowser = /** @class */ (function (_super) {\n __extends(AmplitudeBrowser, _super);\n function AmplitudeBrowser() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AmplitudeBrowser.prototype.init = function (apiKey, userIdOrOptions, maybeOptions) {\n if (apiKey === void 0) { apiKey = ''; }\n var userId;\n var options;\n if (arguments.length > 2) {\n userId = userIdOrOptions;\n options = maybeOptions;\n }\n else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n }\n else {\n userId = userIdOrOptions === null || userIdOrOptions === void 0 ? void 0 : userIdOrOptions.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init(__assign(__assign({}, options), { userId: userId, apiKey: apiKey })));\n };\n AmplitudeBrowser.prototype._init = function (options) {\n var _a, _b, _c;\n return __awaiter(this, void 0, void 0, function () {\n var browserOptions, joinedConfigGenerator, attributionTrackingOptions, queryParams, querySessionId, connector;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return [2 /*return*/];\n }\n this.initializing = true;\n return [4 /*yield*/, useBrowserConfig(options.apiKey, options, this)];\n case 1:\n browserOptions = _d.sent();\n if (!options.fetchRemoteConfig) return [3 /*break*/, 4];\n return [4 /*yield*/, createBrowserJoinedConfigGenerator(browserOptions)];\n case 2:\n joinedConfigGenerator = _d.sent();\n return [4 /*yield*/, joinedConfigGenerator.generateJoinedConfig()];\n case 3:\n browserOptions = _d.sent();\n _d.label = 4;\n case 4: return [4 /*yield*/, _super.prototype._init.call(this, browserOptions)];\n case 5:\n _d.sent();\n this.logBrowserOptions(browserOptions);\n if (!isAttributionTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 7];\n attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n this.webAttribution = new WebAttribution(attributionTrackingOptions, this.config);\n // Fetch the current campaign, check if need to track web attribution later\n return [4 /*yield*/, this.webAttribution.init()];\n case 6:\n // Fetch the current campaign, check if need to track web attribution later\n _d.sent();\n _d.label = 7;\n case 7:\n queryParams = getQueryParams();\n querySessionId = Number.isNaN(Number(queryParams.ampSessionId))\n ? undefined\n : Number(queryParams.ampSessionId);\n this.setSessionId((_c = (_b = (_a = options.sessionId) !== null && _a !== void 0 ? _a : querySessionId) !== null && _b !== void 0 ? _b : this.config.sessionId) !== null && _c !== void 0 ? _c : Date.now());\n connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n if (!(this.config.offline !== OfflineDisabled)) return [3 /*break*/, 9];\n return [4 /*yield*/, this.add(networkConnectivityCheckerPlugin()).promise];\n case 8:\n _d.sent();\n _d.label = 9;\n case 9: return [4 /*yield*/, this.add(new Destination()).promise];\n case 10:\n _d.sent();\n return [4 /*yield*/, this.add(new Context()).promise];\n case 11:\n _d.sent();\n return [4 /*yield*/, this.add(new IdentityEventSender()).promise];\n case 12:\n _d.sent();\n // Notify if DET is enabled\n detNotify(this.config);\n if (!isFileDownloadTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 14];\n this.config.loggerProvider.debug('Adding file download tracking plugin');\n return [4 /*yield*/, this.add(fileDownloadTracking()).promise];\n case 13:\n _d.sent();\n _d.label = 14;\n case 14:\n if (!isFormInteractionTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 16];\n this.config.loggerProvider.debug('Adding form interaction plugin');\n return [4 /*yield*/, this.add(formInteractionTracking()).promise];\n case 15:\n _d.sent();\n _d.label = 16;\n case 16:\n if (!isPageViewTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 18];\n this.config.loggerProvider.debug('Adding page view tracking plugin');\n return [4 /*yield*/, this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise];\n case 17:\n _d.sent();\n _d.label = 18;\n case 18:\n if (!isElementInteractionsEnabled(this.config.autocapture)) return [3 /*break*/, 20];\n this.config.loggerProvider.debug('Adding user interactions plugin (autocapture plugin)');\n return [4 /*yield*/, this.add(autocapturePlugin(getElementInteractionsConfig(this.config))).promise];\n case 19:\n _d.sent();\n _d.label = 20;\n case 20:\n this.initializing = false;\n // Step 6: Run queued dispatch functions\n return [4 /*yield*/, this.runQueuedFunctions('dispatchQ')];\n case 21:\n // Step 6: Run queued dispatch functions\n _d.sent();\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver(function (event) {\n void _this.track(event.eventType, event.eventProperties);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeBrowser.prototype.getUserId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.userId;\n };\n AmplitudeBrowser.prototype.setUserId = function (userId) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.loggerProvider.debug('function setUserId: ', userId);\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n setConnectorUserId(userId, this.config.instanceName);\n }\n };\n AmplitudeBrowser.prototype.getDeviceId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.deviceId;\n };\n AmplitudeBrowser.prototype.setDeviceId = function (deviceId) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.loggerProvider.debug('function setDeviceId: ', deviceId);\n this.config.deviceId = deviceId;\n setConnectorDeviceId(deviceId, this.config.instanceName);\n };\n AmplitudeBrowser.prototype.reset = function () {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n };\n AmplitudeBrowser.prototype.getSessionId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.sessionId;\n };\n AmplitudeBrowser.prototype.setSessionId = function (sessionId) {\n var _a;\n var promises = [];\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return returnWrapper(Promise.resolve());\n }\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return returnWrapper(Promise.resolve());\n }\n this.config.loggerProvider.debug('function setSessionId: ', sessionId);\n var previousSessionId = this.getSessionId();\n var lastEventTime = this.config.lastEventTime;\n var lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n this.config.pageCounter = 0;\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n promises.push(this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n }).promise);\n }\n this.config.lastEventTime = this.config.sessionId;\n }\n // Fire web attribution event when enable webAttribution tracking\n // 1. has new campaign (call setSessionId from init function)\n // 2. or shouldTrackNewCampaign (call setSessionId from async process(event) when there has new campaign and resetSessionOnNewCampaign = true )\n var isCampaignEventTracked = this.trackCampaignEventIfNeeded(++lastEventId, promises);\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n promises.push(this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: isCampaignEventTracked ? ++lastEventId : lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n }).promise);\n }\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n return returnWrapper(Promise.all(promises));\n };\n AmplitudeBrowser.prototype.extendSession = function () {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n };\n AmplitudeBrowser.prototype.setTransport = function (transport) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n };\n AmplitudeBrowser.prototype.identify = function (identify, eventOptions) {\n if (isInstanceProxy(identify)) {\n var queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions === null || eventOptions === void 0 ? void 0 : eventOptions.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions === null || eventOptions === void 0 ? void 0 : eventOptions.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return _super.prototype.identify.call(this, identify, eventOptions);\n };\n AmplitudeBrowser.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n if (isInstanceProxy(identify)) {\n var queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return _super.prototype.groupIdentify.call(this, groupType, groupName, identify, eventOptions);\n };\n AmplitudeBrowser.prototype.revenue = function (revenue, eventOptions) {\n if (isInstanceProxy(revenue)) {\n var queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return _super.prototype.revenue.call(this, revenue, eventOptions);\n };\n AmplitudeBrowser.prototype.trackCampaignEventIfNeeded = function (lastEventId, promises) {\n if (!this.webAttribution || !this.webAttribution.shouldTrackNewCampaign) {\n return false;\n }\n var campaignEvent = this.webAttribution.generateCampaignEvent(lastEventId);\n if (promises) {\n promises.push(this.track(campaignEvent).promise);\n }\n else {\n this.track(campaignEvent);\n }\n this.config.loggerProvider.log('Tracking attribution.');\n return true;\n };\n AmplitudeBrowser.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var currentTime, isEventInNewSession, shouldSetSessionIdOnNewCampaign;\n return __generator(this, function (_a) {\n currentTime = Date.now();\n isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n shouldSetSessionIdOnNewCampaign = this.webAttribution && this.webAttribution.shouldSetSessionIdOnNewCampaign();\n if (event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId())) {\n if (isEventInNewSession || shouldSetSessionIdOnNewCampaign) {\n this.setSessionId(currentTime);\n if (shouldSetSessionIdOnNewCampaign) {\n this.config.loggerProvider.log('Created a new session for new campaign.');\n }\n }\n else if (!isEventInNewSession) {\n // Web attribution should be tracked during the middle of a session\n // if there has been a chance in the campaign information.\n this.trackCampaignEventIfNeeded();\n }\n }\n return [2 /*return*/, _super.prototype.process.call(this, event)];\n });\n });\n };\n AmplitudeBrowser.prototype.logBrowserOptions = function (browserConfig) {\n try {\n var browserConfigCopy = __assign(__assign({}, browserConfig), { apiKey: browserConfig.apiKey.substring(0, 10) + '********' });\n this.config.loggerProvider.debug('Initialized Amplitude with BrowserConfig:', JSON.stringify(browserConfigCopy));\n }\n catch (e) {\n /* istanbul ignore next */\n this.config.loggerProvider.error('Error logging browser config', e);\n }\n };\n return AmplitudeBrowser;\n}(AmplitudeCore));\nexport { AmplitudeBrowser };\n//# sourceMappingURL=browser-client.js.map","import { debugWrapper, getClientLogConfig, getClientStates } from '@amplitude/analytics-core';\nimport { AmplitudeBrowser } from './browser-client';\nexport var createInstance = function () {\n var client = new AmplitudeBrowser();\n return {\n init: debugWrapper(client.init.bind(client), 'init', getClientLogConfig(client), getClientStates(client, ['config'])),\n add: debugWrapper(client.add.bind(client), 'add', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.plugins'])),\n remove: debugWrapper(client.remove.bind(client), 'remove', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.plugins'])),\n track: debugWrapper(client.track.bind(client), 'track', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n logEvent: debugWrapper(client.logEvent.bind(client), 'logEvent', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n identify: debugWrapper(client.identify.bind(client), 'identify', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n groupIdentify: debugWrapper(client.groupIdentify.bind(client), 'groupIdentify', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n setGroup: debugWrapper(client.setGroup.bind(client), 'setGroup', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n revenue: debugWrapper(client.revenue.bind(client), 'revenue', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n flush: debugWrapper(client.flush.bind(client), 'flush', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n getUserId: debugWrapper(client.getUserId.bind(client), 'getUserId', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId'])),\n setUserId: debugWrapper(client.setUserId.bind(client), 'setUserId', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId'])),\n getDeviceId: debugWrapper(client.getDeviceId.bind(client), 'getDeviceId', getClientLogConfig(client), getClientStates(client, ['config', 'config.deviceId'])),\n setDeviceId: debugWrapper(client.setDeviceId.bind(client), 'setDeviceId', getClientLogConfig(client), getClientStates(client, ['config', 'config.deviceId'])),\n reset: debugWrapper(client.reset.bind(client), 'reset', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId', 'config.deviceId'])),\n getSessionId: debugWrapper(client.getSessionId.bind(client), 'getSessionId', getClientLogConfig(client), getClientStates(client, ['config'])),\n setSessionId: debugWrapper(client.setSessionId.bind(client), 'setSessionId', getClientLogConfig(client), getClientStates(client, ['config'])),\n extendSession: debugWrapper(client.extendSession.bind(client), 'extendSession', getClientLogConfig(client), getClientStates(client, ['config'])),\n setOptOut: debugWrapper(client.setOptOut.bind(client), 'setOptOut', getClientLogConfig(client), getClientStates(client, ['config'])),\n setTransport: debugWrapper(client.setTransport.bind(client), 'setTransport', getClientLogConfig(client), getClientStates(client, ['config'])),\n };\n};\nexport default createInstance();\n//# sourceMappingURL=browser-client-factory.js.map","/* eslint-disable @typescript-eslint/unbound-method */\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport var add = client.add, extendSession = client.extendSession, flush = client.flush, getDeviceId = client.getDeviceId, getSessionId = client.getSessionId, getUserId = client.getUserId, groupIdentify = client.groupIdentify, identify = client.identify, init = client.init, logEvent = client.logEvent, remove = client.remove, reset = client.reset, revenue = client.revenue, setDeviceId = client.setDeviceId, setGroup = client.setGroup, setOptOut = client.setOptOut, setSessionId = client.setSessionId, setTransport = client.setTransport, setUserId = client.setUserId, track = client.track;\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nimport { IdentifyOperation as IdentifyOperationType, SpecialEventType as SpecialEventTypeType, RevenueProperty as RevenuePropertyType, LogLevel as LogLevelType, OfflineDisabled as OfflineDisabledType, DEFAULT_CSS_SELECTOR_ALLOWLIST as DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE, DEFAULT_DATA_ATTRIBUTE_PREFIX as DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE, DEFAULT_ACTION_CLICK_ALLOWLIST as DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE, } from '@amplitude/analytics-core';\n// Export the following types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Types;\n(function (Types) {\n Types.IdentifyOperation = IdentifyOperationType;\n Types.SpecialEventType = SpecialEventTypeType;\n Types.RevenueProperty = RevenuePropertyType;\n Types.LogLevel = LogLevelType;\n Types.OfflineDisabled = OfflineDisabledType;\n Types.DEFAULT_CSS_SELECTOR_ALLOWLIST = DEFAULT_CSS_SELECTOR_ALLOWLIST_TYPE;\n Types.DEFAULT_DATA_ATTRIBUTE_PREFIX = DEFAULT_DATA_ATTRIBUTE_PREFIX_TYPE;\n Types.DEFAULT_ACTION_CLICK_ALLOWLIST = DEFAULT_ACTION_CLICK_ALLOWLIST_TYPE;\n})(Types || (Types = {}));\n//# sourceMappingURL=index.js.map","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"8.55.0\" ;\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './version.js';\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n const gbl = (obj || GLOBAL_OBJ) ;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n\nexport { GLOBAL_OBJ, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { getGlobalSingleton, GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nconst logger = getGlobalSingleton('logger', makeLogger);\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i] ;\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n\n if (exception) {\n const frames = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n Object.keys(handlers).forEach(key => {\n handlers[key ] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n if (!instrumented[type]) {\n instrumented[type] = true;\n try {\n instrumentFn();\n } catch (e) {\n DEBUG_BUILD && logger.error(`Error while instrumenting ${type}`, e);\n }\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=handlers.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n // Note: The reason we are doing window.onerror instead of window.addEventListener('error')\n // is that we are using this handler in the Loader Script, to handle buffered errors consistently\n GLOBAL_OBJ.onerror = function (\n msg,\n url,\n line,\n column,\n error,\n ) {\n const handlerData = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n handler,\n) {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n // Note: The reason we are doing window.onunhandledrejection instead of window.addEventListener('unhandledrejection')\n // is that we are using this handler in the Loader Script, to handle buffered rejections consistently\n GLOBAL_OBJ.onunhandledrejection = function (e) {\n const handlerData = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","import { SDK_VERSION } from './utils-hoist/version.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\nexport { getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n if (!elem) {\n return '';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n const className = elem.className;\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (const k of allowedAttrs) {\n const attr = elem.getAttribute(k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existence of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n *\n * @deprecated This method is deprecated and will be removed in the next major version.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) ;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] ;\n const wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n try {\n source[name] = wrapped;\n } catch (e) {\n DEBUG_BUILD && logger.log(`Failed to replace method \"${name}\" in object`, source);\n }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n *\n * @deprecated This function is deprecated and will be removed in the next major version of the SDK.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction urlEncode(object) {\n return Object.entries(object)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(value)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n const firstKey = keys[0];\n\n if (!firstKey) {\n return '[object has no keys]';\n }\n\n if (firstKey.length >= maxLength) {\n return truncate(firstKey, maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.getOwnPropertyNames(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input) {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) ).constructor.name;\n return !name || name === 'Object';\n } catch (e2) {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n // this will catch both undefined and null\n case wat == undefined:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n *\n * @deprecated This variable will be removed in the next major version.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n // eslint-disable-next-line deprecation/deprecation\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n const gbl = GLOBAL_OBJ ;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n // We guard here to ensure this is not larger than the existing number of lines\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n if (isAlreadyCaptured(exception)) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\nfunction isAlreadyCaptured(exception) {\n try {\n return (exception ).__sentry_captured__;\n } catch (e) {} // eslint-disable-line no-empty\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n *\n * @deprecated This function has been deprecated and will not be replaced.\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n constructor(\n executor,\n ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init2() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init3() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init4() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { dropUndefinedKeys } from './utils-hoist/object.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport './utils-hoist/syncpromise.js';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Returns a new minimal propagation context.\n *\n * @deprecated Use `generateTraceId` and `generateSpanId` instead.\n */\nfunction generatePropagationContext() {\n return {\n traceId: generateTraceId(),\n spanId: generateSpanId(),\n };\n}\n\n/**\n * Generate a random, valid trace ID.\n */\nfunction generateTraceId() {\n return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nfunction generateSpanId() {\n return uuid4().substring(16);\n}\n\nexport { generatePropagationContext, generateSpanId, generateTraceId };\n//# sourceMappingURL=propagationContext.js.map\n","/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nfunction merge(initialObj, mergeObj, levels = 2) {\n // If the merge value is not an object, or we have no merge levels left,\n // we just set the value to the merge value\n if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n return mergeObj;\n }\n\n // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n if (initialObj && mergeObj && Object.keys(mergeObj).length === 0) {\n return initialObj;\n }\n\n // Clone object\n const output = { ...initialObj };\n\n // Merge values into output, resursively\n for (const key in mergeObj) {\n if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n output[key] = merge(output[key], mergeObj[key], levels - 1);\n }\n }\n\n return output;\n}\n\nexport { merge };\n//# sourceMappingURL=merge.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n if (span) {\n addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope )[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { updateSession } from './session.js';\nimport { isPlainObject } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { generateTraceId, generateSpanId } from './utils-hoist/propagationContext.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\nimport { merge } from './utils/merge.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called during event processing. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n\n /** Fingerprint */\n\n /** Severity */\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n\n /** Session */\n\n /** Request Mode Session Status */\n // eslint-disable-next-line deprecation/deprecation\n\n /** The client on this scope */\n\n /** Contains the last event id of a captured event. */\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = {\n traceId: generateTraceId(),\n spanId: generateSpanId(),\n };\n }\n\n /**\n * @inheritDoc\n */\n clone() {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n if (this._contexts.flags) {\n // We need to copy the `values` array so insertions on a cloned scope\n // won't affect the original array.\n newScope._contexts.flags = {\n values: [...this._contexts.flags.values],\n };\n }\n\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n setClient(client) {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this._client ;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line deprecation/deprecation\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope so that the name of e.g. taken server route or\n * the page location is attached to future events.\n *\n * IMPORTANT: Calling this function does NOT change the name of the currently active\n * root span. If you want to change the name of the active root span, use\n * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n *\n * By default, the SDK updates the scope's transaction name automatically on sensible\n * occasions, such as a page navigation or when handling a new request on the server.\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? // eslint-disable-next-line deprecation/deprecation\n [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext , (captureContext ).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this.setPropagationContext({ traceId: generateTraceId() });\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n this._breadcrumbs.push(mergedBreadcrumb);\n if (this._breadcrumbs.length > maxCrumbs) {\n this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n if (this._client) {\n this._client.recordDroppedEvent('buffer_overflow', 'log_item');\n }\n }\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setPropagationContext(\n context,\n ) {\n this._propagationContext = {\n // eslint-disable-next-line deprecation/deprecation\n spanId: generateSpanId(),\n ...context,\n };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(message, level, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n/**\n * Holds additional event information.\n */\nconst Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { Scope } from './scope.js';\nimport { getGlobalSingleton } from './utils-hoist/worldwide.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { isThenable } from '../utils-hoist/is.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n // scope stack for domains or the process\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1] ;\n }\n\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack() ;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier } from './carrier.js';\nimport { Scope } from './scope.js';\nimport { dropUndefinedKeys } from './utils-hoist/object.js';\nimport { getGlobalSingleton } from './utils-hoist/worldwide.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n ...rest\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n ...rest\n\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentScope().getClient();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nfunction getTraceContextFromScope(scope) {\n const propagationContext = scope.getPropagationContext();\n\n // TODO(v9): Use generateSpanId() instead of spanId\n // eslint-disable-next-line deprecation/deprecation\n const { traceId, spanId, parentSpanId } = propagationContext;\n\n const traceContext = dropUndefinedKeys({\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanId,\n });\n\n return traceContext;\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, getTraceContextFromScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { dropUndefinedKeys } from '../utils-hoist/object.js';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nfunction getMetricSummaryJsonForSpan(span) {\n const storage = (span )[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output = {};\n\n for (const [, [exportKey, summary]] of storage) {\n const arr = output[exportKey] || (output[exportKey] = []);\n arr.push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nfunction updateMetricSummaryOnSpan(\n span,\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const existingStorage = (span )[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span )[METRICS_SPAN_FIELD] = new Map());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n\nexport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan };\n//# sourceMappingURL=metric-summary.js.map\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\n/**\n * @deprecated Use a `\"baggage\"` string directly\n */\nconst BAGGAGE_HEADER_NAME = 'baggage';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader,\n) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext ;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext,\n) {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n baggageHeader,\n) {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { baggageHeaderToDynamicSamplingContext } from './baggage.js';\nimport { generateTraceId, generateSpanId } from './propagationContext.js';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nconst TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nfunction extractTraceparentData(traceparent) {\n if (!traceparent) {\n return undefined;\n }\n\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (!matches) {\n return undefined;\n }\n\n let parentSampled;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nfunction propagationContextFromHeaders(\n sentryTrace,\n baggage,\n) {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n if (!traceparentData || !traceparentData.traceId) {\n return { traceId: generateTraceId(), spanId: generateSpanId() };\n }\n\n const { traceId, parentSpanId, parentSampled } = traceparentData;\n\n const virtualSpanId = generateSpanId();\n\n return {\n traceId,\n parentSpanId,\n spanId: virtualSpanId,\n sampled: parentSampled,\n dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nfunction generateSentryTraceHeader(\n traceId = generateTraceId(),\n spanId = generateSpanId(),\n sampled,\n) {\n let sampledString = '';\n if (sampled !== undefined) {\n sampledString = sampled ? '-1' : '-0';\n }\n return `${traceId}-${spanId}${sampledString}`;\n}\n\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, propagationContextFromHeaders };\n//# sourceMappingURL=tracing.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { consoleSandbox } from '../utils-hoist/logger.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { generateSentryTraceHeader } from '../utils-hoist/tracing.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n// todo(v9): Remove this once we've stopped dropping spans via `beforeSendSpan`\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n // If the span is remote, we use a random/virtual span as span_id to the trace context,\n // and the remote span as parent_span_id\n const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n const span_id = isRemote ? generateSpanId() : spanId;\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch (e) {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span ;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n const resultSet = new Set();\n\n function addSpanChildren(span) {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nfunction updateMetricSummaryOnActiveSpan(\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n *\n * todo(v9): Remove this once we've stopped dropping spans via `beforeSendSpan`.\n */\nfunction showSpanDropWarning() {\n if (!hasShownSpanDropWarning) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Deprecation warning: Returning null from `beforeSendSpan` will be disallowed from SDK version 9.0.0 onwards. The callback will only support mutating spans. To drop certain spans, configure the respective integrations directly.',\n );\n });\n hasShownSpanDropWarning = true;\n }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nfunction updateSpanName(span, name) {\n span.updateName(name);\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n });\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, showSpanDropWarning, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateMetricSummaryOnActiveSpan, updateSpanName };\n//# sourceMappingURL=spanUtils.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { addGlobalErrorInstrumentationHandler } from '../utils-hoist/instrument/globalError.js';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from '../utils-hoist/instrument/globalUnhandledRejection.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\n\nlet errorsInstrumented = false;\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nfunction registerSpanErrorInstrumentation() {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback() {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const message = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occurred`);\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n\nexport { registerSpanErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { addNonEnumerableProperty } from '../utils-hoist/object.js';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nfunction getCapturedScopesOnSpan(span) {\n return {\n scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n // eslint-disable-next-line deprecation/deprecation\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","import { generateTraceId, generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils.js';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nclass SentryNonRecordingSpan {\n\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n }\n\n /** @inheritdoc */\n spanContext() {\n return {\n spanId: this._spanId,\n traceId: this._traceId,\n traceFlags: TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n end(_timestamp) {}\n\n /** @inheritdoc */\n setAttribute(_key, _value) {\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(_values) {\n return this;\n }\n\n /** @inheritdoc */\n setStatus(_status) {\n return this;\n }\n\n /** @inheritdoc */\n updateName(_name) {\n return this;\n }\n\n /** @inheritdoc */\n isRecording() {\n return false;\n }\n\n /** @inheritdoc */\n addEvent(\n _name,\n _attributesOrStartTime,\n _startTime,\n ) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n}\n\nexport { SentryNonRecordingSpan };\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage.js';\nimport { dropUndefinedKeys, addNonEnumerableProperty } from '../utils-hoist/object.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { getRootSpan, spanToJSON, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span ;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) ;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nfunction getDynamicSamplingContextFromScope(client, scope) {\n const propagationContext = scope.getPropagationContext();\n return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const rootSpan = getRootSpan(span);\n\n // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n // For OpenTelemetry, we freeze the DSC on the trace state\n const traceState = rootSpan.spanContext().traceState;\n const traceStateDsc = traceState && traceState.get('sentry.dsc');\n\n // If the span has a DSC, we want it to take precedence\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n if (dscOnTraceState) {\n return dscOnTraceState;\n }\n\n // Else, we generate it from the span\n const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n const name = jsonSpan.description;\n if (source !== 'url' && name) {\n dsc.transaction = name;\n }\n\n // How can we even land here with hasTracingEnabled() returning false?\n // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n // So we end up with an active span that is not sampled (neither positively nor negatively)\n if (hasTracingEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n }\n\n client.emit('createDsc', dsc, rootSpan);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { spanToJSON, spanIsSampled, getRootSpan } from '../utils/spanUtils.js';\n\n/**\n * Print a log message for a started span.\n */\nfunction logSpanStart(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n const { spanId } = span.spanContext();\n\n const sampled = spanIsSampled(span);\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n if (parentSpanId) {\n infoParts.push(`parent ID: ${parentSpanId}`);\n }\n\n if (!isRootSpan) {\n const { op, description } = spanToJSON(rootSpan);\n infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n if (op) {\n infoParts.push(`root op: ${op}`);\n }\n if (description) {\n infoParts.push(`root description: ${description}`);\n }\n }\n\n logger.log(`${header}\n ${infoParts.join('\\n ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nfunction logSpanEnd(span) {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n const { spanId } = span.spanContext();\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n logger.log(msg);\n}\n\nexport { logSpanEnd, logSpanStart };\n//# sourceMappingURL=logSpans.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\n\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nfunction parseSampleRate(sampleRate) {\n if (typeof sampleRate === 'boolean') {\n return Number(sampleRate);\n }\n\n const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n sampleRate,\n )} of type ${JSON.stringify(typeof sampleRate)}.`,\n );\n return undefined;\n }\n\n return rate;\n}\n\nexport { parseSampleRate };\n//# sourceMappingURL=parseSampleRate.js.map\n","import { getIsolationScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { parseSampleRate } from '../utils/parseSampleRate.js';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nfunction sampleSpan(\n options,\n samplingContext,\n) {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n return [false];\n }\n\n // Casting this from unknown, as the type of `sdkProcessingMetadata` is only changed in v9 and `normalizedRequest` is set in SentryHttpInstrumentation\n const normalizedRequest = getIsolationScope().getScopeData().sdkProcessingMetadata\n .normalizedRequest ;\n\n const enhancedSamplingContext = {\n ...samplingContext,\n normalizedRequest: samplingContext.normalizedRequest || normalizedRequest,\n };\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(enhancedSamplingContext);\n } else if (enhancedSamplingContext.parentSampled !== undefined) {\n sampleRate = enhancedSamplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n // (The only valid values are booleans or numbers between 0 and 1.)\n const parsedSampleRate = parseSampleRate(sampleRate);\n\n if (parsedSampleRate === undefined) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n return [false];\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!parsedSampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n return [false, parsedSampleRate];\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n const shouldSample = Math.random() < parsedSampleRate;\n\n // if we're not going to keep it, we're done\n if (!shouldSample) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return [false, parsedSampleRate];\n }\n\n return [true, parsedSampleRate];\n}\n\nexport { sampleSpan };\n//# sourceMappingURL=sampling.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() ;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn) {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n *\n * @deprecated This function is deprecated and will be removed in the next major version.\n */\n// TODO(v9): Move this function into normalize() directly\nfunction memoBuilder() {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n // eslint-disable-next-line deprecation/deprecation\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n ['boolean', 'string'].includes(typeof value) ||\n (typeof value === 'number' && Number.isFinite(value))\n ) {\n return value ;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value );\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n return `[${value}]`;\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n envelope,\n callback,\n) {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input) {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input)\n : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input) {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input)\n : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope) {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts = JSON.stringify(envHeaders);\n\n function append(next) {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(env) {\n let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n function readBinary(length) {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson() {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(decodeUTF8(readBinary(i))) ;\n }\n\n const envelopeHeader = readJson();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items = [];\n\n while (buffer.length) {\n const itemHeader = readJson();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nfunction createSpanEnvelopeItem(spanJson) {\n const spanHeaders = {\n type: 'span',\n };\n\n return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(attachment) {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n profile_chunk: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n statsd: 'metric_bucket',\n raw_security: 'security',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n event,\n sdkInfo,\n tunnel,\n dsn,\n) {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id ,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext.js';\nimport { dsnToString } from './utils-hoist/dsn.js';\nimport { getSdkMetadataForEnvelopeHeader, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem } from './utils-hoist/envelope.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport { spanToJSON, showSpanDropWarning } from './utils/spanUtils.js';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n session,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const envelopeItem =\n 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n event,\n dsn,\n metadata,\n tunnel,\n) {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n /*\n Note: Due to TS, event.type may be `replay_event`, theoretically.\n In practice, we never call `createEventEnvelope` with `replay_event` type,\n and we'd have to adjust a looot of types to make this work properly.\n We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n So the safe choice is to really guard against the replay_event type here.\n */\n const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete event.sdkProcessingMetadata;\n\n const eventItem = [{ type: eventType }, event];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nfunction createSpanEnvelope(spans, client) {\n function dscHasRequiredProps(dsc) {\n return !!dsc.trace_id && !!dsc.public_key;\n }\n\n // For the moment we'll obtain the DSC from the first span in the array\n // This might need to be changed if we permit sending multiple spans from\n // different segments in one envelope\n const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n\n const headers = {\n sent_at: new Date().toISOString(),\n ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const beforeSendSpan = client && client.getOptions().beforeSendSpan;\n const convertToSpanJSON = beforeSendSpan\n ? (span) => {\n const spanJson = beforeSendSpan(spanToJSON(span) );\n if (!spanJson) {\n showSpanDropWarning();\n }\n return spanJson;\n }\n : (span) => spanToJSON(span);\n\n const items = [];\n for (const span of spans) {\n const spanJson = convertToSpanJSON(span);\n if (spanJson) {\n items.push(createSpanEnvelopeItem(spanJson));\n }\n }\n\n return createEnvelope(headers, items);\n}\n\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getRootSpan, getActiveSpan } from '../utils/spanUtils.js';\n\n/**\n * Adds a measurement to the active transaction on the current global scope. You can optionally pass in a different span\n * as the 4th parameter.\n */\nfunction setMeasurement(name, value, unit, activeSpan = getActiveSpan()) {\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n if (rootSpan) {\n DEBUG_BUILD && logger.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n rootSpan.addEvent(name, {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit ,\n });\n }\n}\n\n/**\n * Convert timed events to measurements.\n */\nfunction timedEventsToMeasurements(events) {\n if (!events || events.length === 0) {\n return undefined;\n }\n\n const measurements = {};\n events.forEach(event => {\n const attributes = event.attributes || {};\n const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] ;\n const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] ;\n\n if (typeof unit === 'string' && typeof value === 'number') {\n measurements[event.name] = { value, unit };\n }\n });\n\n return measurements;\n}\n\nexport { setMeasurement, timedEventsToMeasurements };\n//# sourceMappingURL=measurement.js.map\n","import { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { createSpanEnvelope } from '../envelope.js';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { dropUndefinedKeys } from '../utils-hoist/object.js';\nimport { generateTraceId, generateSpanId } from '../utils-hoist/propagationContext.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { TRACE_FLAG_SAMPLED, TRACE_FLAG_NONE, spanTimeInputToSeconds, getStatusMessage, getRootSpan, spanToJSON, getSpanDescendants, spanToTransactionTraceContext } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext.js';\nimport { logSpanEnd } from './logSpans.js';\nimport { timedEventsToMeasurements } from './measurement.js';\nimport { getCapturedScopesOnSpan } from './utils.js';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nclass SentrySpan {\n\n /** Epoch timestamp in seconds when the span started. */\n\n /** Epoch timestamp in seconds when the span ended. */\n\n /** Internal keeper of the status */\n\n /** The timed events added to this span. */\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n constructor(spanContext = {}) {\n this._traceId = spanContext.traceId || generateTraceId();\n this._spanId = spanContext.spanId || generateSpanId();\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLink(_link) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n addLinks(_links) {\n return this;\n }\n\n /**\n * This should generally not be used,\n * but it is needed for being compliant with the OTEL Span interface.\n *\n * @hidden\n * @internal\n */\n recordException(_exception, _time) {\n // noop\n }\n\n /** @inheritdoc */\n spanContext() {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n setAttribute(key, value) {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n\n return this;\n }\n\n /** @inheritdoc */\n setAttributes(attributes) {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n return this;\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n updateStartTime(timeInput) {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n setStatus(value) {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n updateName(name) {\n this._name = name;\n this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n return this;\n }\n\n /** @inheritdoc */\n end(endTimestamp) {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n getSpanJSON() {\n return dropUndefinedKeys({\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n });\n }\n\n /** @inheritdoc */\n isRecording() {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n addEvent(\n name,\n attributesOrStartTime,\n startTime,\n ) {\n DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n isStandaloneSpan() {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n _onSpanEnded() {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n if (this._sampled) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n } else {\n DEBUG_BUILD &&\n logger.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n if (client) {\n client.recordDroppedEvent('sample_rate', 'span');\n }\n }\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n _convertSpanToTransaction() {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to ``.');\n this._name = '';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n const scope = capturedSpanScope || getCurrentScope();\n const client = scope.getClient() || getClient();\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ;\n\n // remove internal root span attributes we don't need to send.\n /* eslint-disable @typescript-eslint/no-dynamic-delete */\n delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n spans.forEach(span => {\n span.data && delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n });\n // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n const transaction = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n ...dropUndefinedKeys({\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n }),\n },\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log(\n '[Measurements] Adding measurements to transaction event',\n JSON.stringify(measurements, undefined, 2),\n );\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value) {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input) {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span) {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n client.sendEnvelope(envelope);\n}\n\nexport { SentrySpan };\n//# sourceMappingURL=sentrySpan.js.map\n","import { getMainCarrier } from '../carrier.js';\nimport { withScope, getCurrentScope, getIsolationScope, getClient } from '../currentScopes.js';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { generateTraceId } from '../utils-hoist/propagationContext.js';\nimport { propagationContextFromHeaders } from '../utils-hoist/tracing.js';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope, _getSpanForScope } from '../utils/spanOnScope.js';\nimport { spanToJSON, addChildSpanToSpan, spanIsSampled, spanTimeInputToSeconds, getRootSpan } from '../utils/spanUtils.js';\nimport { getDynamicSamplingContextFromSpan, freezeDscOnSpan } from './dynamicSamplingContext.js';\nimport { logSpanStart } from './logSpans.js';\nimport { sampleSpan } from './sampling.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SentrySpan } from './sentrySpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { setCapturedScopesOnSpan } from './utils.js';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpan(options, callback) {\n const acs = getAcs();\n if (acs.startSpan) {\n return acs.startSpan(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n () => activeSpan.end(),\n );\n });\n });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpanManual(options, callback) {\n const acs = getAcs();\n if (acs.startSpanManual) {\n return acs.startSpanManual(options, callback);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n return withScope(options.scope, () => {\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = getActiveSpanWrapper(customParentSpan);\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n function finishAndSetSpan() {\n activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n );\n });\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startInactiveSpan(options) {\n const acs = getAcs();\n if (acs.startInactiveSpan) {\n return acs.startInactiveSpan(options);\n }\n\n const spanArguments = parseSentrySpanArguments(options);\n const { forceTransaction, parentSpan: customParentSpan } = options;\n\n // If `options.scope` is defined, we use this as as a wrapper,\n // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n const wrapper = options.scope\n ? (callback) => withScope(options.scope, callback)\n : customParentSpan !== undefined\n ? (callback) => withActiveSpan(customParentSpan, callback)\n : (callback) => callback();\n\n return wrapper(() => {\n const scope = getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n if (shouldSkipSpan) {\n return new SentryNonRecordingSpan();\n }\n\n return createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n });\n });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from ``\n * and `` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nconst continueTrace = (\n options\n\n,\n callback,\n) => {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.continueTrace) {\n return acs.continueTrace(options, callback);\n }\n\n const { sentryTrace, baggage } = options;\n\n return withScope(scope => {\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n scope.setPropagationContext(propagationContext);\n return callback();\n });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n const acs = getAcs();\n if (acs.withActiveSpan) {\n return acs.withActiveSpan(span, callback);\n }\n\n return withScope(scope => {\n _setSpanForScope(scope, span || undefined);\n return callback(scope);\n });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nfunction suppressTracing(callback) {\n const acs = getAcs();\n\n if (acs.suppressTracing) {\n return acs.suppressTracing(callback);\n }\n\n return withScope(scope => {\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n return callback();\n });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n * or page will automatically create a new trace.\n */\nfunction startNewTrace(callback) {\n return withScope(scope => {\n scope.setPropagationContext({ traceId: generateTraceId() });\n DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n return withActiveSpan(null, callback);\n });\n}\n\nfunction createChildOrRootSpan({\n parentSpan,\n spanArguments,\n forceTransaction,\n scope,\n}\n\n) {\n if (!hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const isolationScope = getIsolationScope();\n\n let span;\n if (parentSpan && !forceTransaction) {\n span = _startChildSpan(parentSpan, scope, spanArguments);\n addChildSpanToSpan(parentSpan, span);\n } else if (parentSpan) {\n // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n const parentSampled = spanIsSampled(parentSpan);\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n freezeDscOnSpan(span, dsc);\n } else {\n const {\n traceId,\n dsc,\n parentSpanId,\n sampled: parentSampled,\n } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanArguments,\n },\n scope,\n parentSampled,\n );\n\n if (dsc) {\n freezeDscOnSpan(span, dsc);\n }\n }\n\n logSpanStart(span);\n\n setCapturedScopesOnSpan(span, scope, isolationScope);\n\n return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options) {\n const exp = options.experimental || {};\n const initialCtx = {\n isStandalone: exp.standalone,\n ...options,\n };\n\n if (options.startTime) {\n const ctx = { ...initialCtx };\n ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return initialCtx;\n}\n\nfunction getAcs() {\n const carrier = getMainCarrier();\n return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments, scope, parentSampled) {\n const client = getClient();\n const options = (client && client.getOptions()) || {};\n\n const { name = '', attributes } = spanArguments;\n const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY]\n ? [false]\n : sampleSpan(options, {\n name,\n parentSampled,\n attributes,\n transactionContext: {\n name,\n parentSampled,\n },\n });\n\n const rootSpan = new SentrySpan({\n ...spanArguments,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n ...spanArguments.attributes,\n },\n sampled,\n });\n if (sampleRate !== undefined) {\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n if (client) {\n client.emit('spanStart', rootSpan);\n }\n\n return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan, scope, spanArguments) {\n const { spanId, traceId } = parentSpan.spanContext();\n const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n const childSpan = sampled\n ? new SentrySpan({\n ...spanArguments,\n parentSpanId: spanId,\n traceId,\n sampled,\n })\n : new SentryNonRecordingSpan({ traceId });\n\n addChildSpanToSpan(parentSpan, childSpan);\n\n const client = getClient();\n if (client) {\n client.emit('spanStart', childSpan);\n // If it has an endTimestamp, it's already ended\n if (spanArguments.endTimestamp) {\n client.emit('spanEnd', childSpan);\n }\n }\n\n return childSpan;\n}\n\nfunction getParentSpan(scope) {\n const span = _getSpanForScope(scope) ;\n\n if (!span) {\n return undefined;\n }\n\n const client = getClient();\n const options = client ? client.getOptions() : {};\n if (options.parentSpanIsAlwaysRootSpan) {\n return getRootSpan(span) ;\n }\n\n return span;\n}\n\nfunction getActiveSpanWrapper(parentSpan) {\n return parentSpan !== undefined\n ? (callback) => {\n return withActiveSpan(parentSpan, callback);\n }\n : (callback) => callback();\n}\n\nexport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan };\n//# sourceMappingURL=trace.js.map\n","import { getClient, getCurrentScope } from '../currentScopes.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { timestampInSeconds } from '../utils-hoist/time.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { _setSpanForScope } from '../utils/spanOnScope.js';\nimport { getActiveSpan, spanTimeInputToSeconds, getSpanDescendants, spanToJSON, removeChildSpanFromSpan } from '../utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan.js';\nimport { SPAN_STATUS_ERROR } from './spanstatus.js';\nimport { startInactiveSpan } from './trace.js';\n\nconst TRACING_DEFAULTS = {\n idleTimeout: 1000,\n finalTimeout: 30000,\n childSpanTimeout: 15000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nfunction startIdleSpan(startSpanOptions, options = {}) {\n // Activities store a list of active spans\n const activities = new Map();\n\n // We should not use heartbeat if we finished a span\n let _finished = false;\n\n // Timer that tracks idleTimeout\n let _idleTimeoutID;\n\n // The reason why the span was finished\n let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n let _autoFinishAllowed = !options.disableAutoFinish;\n\n const _cleanupHooks = [];\n\n const {\n idleTimeout = TRACING_DEFAULTS.idleTimeout,\n finalTimeout = TRACING_DEFAULTS.finalTimeout,\n childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n beforeSpanEnd,\n } = options;\n\n const client = getClient();\n\n if (!client || !hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const scope = getCurrentScope();\n const previousActiveSpan = getActiveSpan();\n const span = _startIdleSpan(startSpanOptions);\n\n // We patch span.end to ensure we can run some things before the span is ended\n // eslint-disable-next-line @typescript-eslint/unbound-method\n span.end = new Proxy(span.end, {\n apply(target, thisArg, args) {\n if (beforeSpanEnd) {\n beforeSpanEnd(span);\n }\n\n // Just ensuring that this keeps working, even if we ever have more arguments here\n const [definedEndTimestamp, ...rest] = args;\n const timestamp = definedEndTimestamp || timestampInSeconds();\n const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n\n // Ensure we end with the last span timestamp, if possible\n const spans = getSpanDescendants(span).filter(child => child !== span);\n\n // If we have no spans, we just end, nothing else to do here\n if (!spans.length) {\n onIdleSpanEnded(spanEndTimestamp);\n return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n }\n\n const childEndTimestamps = spans\n .map(span => spanToJSON(span).timestamp)\n .filter(timestamp => !!timestamp) ;\n const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n // In reality this should always exist here, but type-wise it may be undefined...\n const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n // The final endTimestamp should:\n // * Never be before the span start timestamp\n // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n // * Otherwise be the passed end timestamp\n // Final timestamp can never be after finalTimeout\n const endTimestamp = Math.min(\n spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n );\n\n onIdleSpanEnded(endTimestamp);\n return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n },\n });\n\n /**\n * Cancels the existing idle timeout, if there is one.\n */\n function _cancelIdleTimeout() {\n if (_idleTimeoutID) {\n clearTimeout(_idleTimeoutID);\n _idleTimeoutID = undefined;\n }\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n function _restartIdleTimeout(endTimestamp) {\n _cancelIdleTimeout();\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n span.end(endTimestamp);\n }\n }, idleTimeout);\n }\n\n /**\n * Restarts child span timeout, if there is none running it will start one.\n */\n function _restartChildSpanTimeout(endTimestamp) {\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n span.end(endTimestamp);\n }\n }, childSpanTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n function _pushActivity(spanId) {\n _cancelIdleTimeout();\n activities.set(spanId, true);\n\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n function _popActivity(spanId) {\n if (activities.has(spanId)) {\n activities.delete(spanId);\n }\n\n if (activities.size === 0) {\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n }\n }\n\n function onIdleSpanEnded(endTimestamp) {\n _finished = true;\n activities.clear();\n\n _cleanupHooks.forEach(cleanup => cleanup());\n\n _setSpanForScope(scope, previousActiveSpan);\n\n const spanJSON = spanToJSON(span);\n\n const { start_timestamp: startTimestamp } = spanJSON;\n // This should never happen, but to make TS happy...\n if (!startTimestamp) {\n return;\n }\n\n const attributes = spanJSON.data || {};\n if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n }\n\n logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n let discardedSpans = 0;\n childSpans.forEach(childSpan => {\n // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n if (childSpan.isRecording()) {\n childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n childSpan.end(endTimestamp);\n DEBUG_BUILD &&\n logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n }\n\n const childSpanJSON = spanToJSON(childSpan);\n const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n if (!spanStartedBeforeIdleSpanEnd) {\n logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n }\n }\n\n if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n removeChildSpanFromSpan(span, childSpan);\n discardedSpans++;\n }\n });\n\n if (discardedSpans > 0) {\n span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n }\n }\n\n _cleanupHooks.push(\n client.on('spanStart', startedSpan => {\n // If we already finished the idle span,\n // or if this is the idle span itself being started,\n // or if the started span has already been closed,\n // we don't care about it for activity\n if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n return;\n }\n\n const allSpans = getSpanDescendants(span);\n\n // If the span that was just started is a child of the idle span, we should track it\n if (allSpans.includes(startedSpan)) {\n _pushActivity(startedSpan.spanContext().spanId);\n }\n }),\n );\n\n _cleanupHooks.push(\n client.on('spanEnd', endedSpan => {\n if (_finished) {\n return;\n }\n\n _popActivity(endedSpan.spanContext().spanId);\n }),\n );\n\n _cleanupHooks.push(\n client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n if (spanToAllowAutoFinish === span) {\n _autoFinishAllowed = true;\n _restartIdleTimeout();\n\n if (activities.size) {\n _restartChildSpanTimeout();\n }\n }\n }),\n );\n\n // We only start the initial idle timeout if we are not delaying the auto finish\n if (!options.disableAutoFinish) {\n _restartIdleTimeout();\n }\n\n setTimeout(() => {\n if (!_finished) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n span.end();\n }\n }, finalTimeout);\n\n return span;\n}\n\nfunction _startIdleSpan(options) {\n const span = startInactiveSpan(options);\n\n _setSpanForScope(getCurrentScope(), span);\n\n DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n return span;\n}\n\nexport { TRACING_DEFAULTS, startIdleSpan };\n//# sourceMappingURL=idleSpan.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { SyncPromise } from './utils-hoist/syncpromise.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) ;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nlet parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameDebugIds;\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n if (!debugIdMap) {\n return {};\n }\n\n const debugIdKeys = Object.keys(debugIdMap);\n\n // If the count of registered globals hasn't changed since the last call, we\n // can just return the cached result.\n if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) {\n return cachedFilenameDebugIds;\n }\n\n lastKeysCount = debugIdKeys.length;\n\n // Build a map of filename -> debug_id.\n cachedFilenameDebugIds = debugIdKeys.reduce((acc, stackKey) => {\n if (!parsedStackResults) {\n parsedStackResults = {};\n }\n\n const result = parsedStackResults[stackKey];\n\n if (result) {\n acc[result[0]] = result[1];\n } else {\n const parsedStack = stackParser(stackKey);\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const filename = stackFrame && stackFrame.filename;\n const debugId = debugIdMap[stackKey];\n\n if (filename && debugId) {\n acc[filename] = debugId;\n parsedStackResults[stackKey] = [filename, debugId];\n break;\n }\n }\n }\n\n return acc;\n }, {});\n\n return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n stackParser,\n resource_paths,\n) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n if (!filenameDebugIdMap) {\n return [];\n }\n\n const images = [];\n for (const path of resource_paths) {\n if (path && filenameDebugIdMap[path]) {\n images.push({\n type: 'sourcemap',\n code_file: path,\n debug_id: filenameDebugIdMap[path] ,\n });\n }\n }\n\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","import { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { dropUndefinedKeys } from '../utils-hoist/object.js';\nimport { merge } from './merge.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n\n data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n data[prop] = merge(data[prop], mergeVal, 1);\n}\n\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { getFilenameToDebugIdMap } from '../utils-hoist/debug-ids.js';\nimport { uuid4, addExceptionMechanism } from '../utils-hoist/misc.js';\nimport { normalize } from '../utils-hoist/normalize.js';\nimport { truncate } from '../utils-hoist/string.js';\nimport { dateTimestampInSeconds } from '../utils-hoist/time.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n isolationScope,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n if (client) {\n client.emit('applyFrameMetadata', event);\n }\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n // empty strings do not make sense for environment, release, and dist\n // so we handle them the same as if they were not provided\n event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n if (!event.release && release) {\n event.release = release;\n }\n\n if (!event.dist && dist) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (filenameDebugIdMap && frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id,\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n // event.contexts.flags (FeatureFlagContext) stores context for our feature\n // flag integrations. It has a greater nesting depth than our other typed\n // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n // to skip this in case of conflicting, user-provided context.\n if (event.contexts && event.contexts.flags && normalized.contexts) {\n normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope,\n captureContext,\n) {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint,\n) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyClientOptions, applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getCurrentScope, getIsolationScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { isThenable } from './utils-hoist/is.js';\nimport { logger } from './utils-hoist/logger.js';\nimport { uuid4 } from './utils-hoist/misc.js';\nimport { timestampInSeconds } from './utils-hoist/time.js';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(exception, hint) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nfunction setContext(name, context) {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n const client = getClient();\n return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nfunction captureSession(end = false) {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n","import { makeDsn, dsnToString } from './utils-hoist/dsn.js';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n const params = {\n sentry_version: SENTRY_API_VERSION,\n };\n\n if (dsn.publicKey) {\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n params.sentry_key = dsn.publicKey;\n }\n\n if (sdkInfo) {\n params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n }\n\n return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n dsnLike,\n dialogOptions\n\n,\n) {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { getClient } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './utils-hoist/logger.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n const integrationsByName = {};\n\n integrations.forEach((currentInstance) => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach((integration) => {\n integration.isDefaultInstance = true;\n });\n\n let integrations;\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = finalIntegrations.findIndex(integration => integration.name === 'Debug');\n if (debugIndex > -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1) ;\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n const integrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration && integration.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nfunction setupIntegration(client, integration, integrationIndex) {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n integration.setupOnce();\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) ;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) ;\n\n const processor = Object.assign((event, hint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nfunction addIntegration(integration) {\n const client = getClient();\n\n if (!client) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n discarded_events,\n dsn,\n timestamp,\n) {\n const clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n\n constructor(\n message,\n logLevel = 'warn',\n ) {\n super(message);this.message = message;\n this.logLevel = logLevel;\n }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { getTraceContextFromScope, getCurrentScope, getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext.js';\nimport { createClientReportEnvelope } from './utils-hoist/clientreport.js';\nimport { makeDsn, dsnToString } from './utils-hoist/dsn.js';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils-hoist/envelope.js';\nimport { SentryError } from './utils-hoist/error.js';\nimport { isPrimitive, isThenable, isPlainObject, isParameterizedString } from './utils-hoist/is.js';\nimport { logger, consoleSandbox } from './utils-hoist/logger.js';\nimport { uuid4, checkOrSetAlreadyCaught } from './utils-hoist/misc.js';\nimport { resolvedSyncPromise, SyncPromise, rejectedSyncPromise } from './utils-hoist/syncpromise.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\nimport { showSpanDropWarning } from './utils/spanUtils.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nclass BaseClient {\n /** Options passed to the SDK. */\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n /** Array of set up integrations. */\n\n /** Number of calls being processed */\n\n /** Holds flushable */\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {\n this._options = options;\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n\n // TODO(v9): Remove this deprecation warning\n const tracingOptions = ['enableTracing', 'tracesSampleRate', 'tracesSampler'] ;\n const undefinedOption = tracingOptions.find(option => option in options && options[option] == undefined);\n if (undefinedOption) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n `[Sentry] Deprecation warning: \\`${undefinedOption}\\` is set to undefined, which leads to tracing being enabled. In v9, a value of \\`undefined\\` will result in tracing being disabled.`,\n );\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint, scope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n currentScope,\n ) {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint, currentScope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureSession(session) {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n getDsn() {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n getOptions() {\n return this._options;\n }\n\n /**\n * @see SdkMetadata\n *\n * @return The metadata of the SDK\n */\n getSdkMetadata() {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n getTransport() {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n flush(timeout) {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n close(timeout) {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /** Get all installed event processors. */\n getEventProcessors() {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n addEventProcessor(eventProcessor) {\n this._eventProcessors.push(eventProcessor);\n }\n\n /** @inheritdoc */\n init() {\n if (\n this._isEnabled() ||\n // Force integrations to be setup even if no DSN was set when we have\n // Spotlight enabled. This is particularly important for browser as we\n // don't support the `spotlight` option there and rely on the users\n // adding the `spotlightBrowserIntegration()` to their integrations which\n // wouldn't get initialized with the check below when there's no DSN set.\n this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n ) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n getIntegrationByName(integrationName) {\n return this._integrations[integrationName] ;\n }\n\n /**\n * @inheritDoc\n */\n addIntegration(integration) {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendEvent(event, hint = {}) {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n\n const promise = this.sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendSession(session) {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n recordDroppedEvent(reason, category, eventOrCount) {\n if (this._options.sendClientReports) {\n // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n // If event is passed as third argument, we assume this is a count of 1\n const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n this._outcomes[key] = (this._outcomes[key] || 0) + count;\n }\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n on(hook, callback) {\n const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n // @ts-expect-error We assume the types are correct\n hooks.push(callback);\n\n // This function returns a callback execution handler that, when invoked,\n // deregisters a callback. This is crucial for managing instances where callbacks\n // need to be unregistered to prevent self-referencing in callback closures,\n // ensuring proper garbage collection.\n return () => {\n // @ts-expect-error We assume the types are correct\n const cbIndex = hooks.indexOf(callback);\n if (cbIndex > -1) {\n hooks.splice(cbIndex, 1);\n }\n };\n }\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n emit(hook, ...rest) {\n const callbacks = this._hooks[hook];\n if (callbacks) {\n callbacks.forEach(callback => callback(...rest));\n }\n }\n\n /**\n * @inheritdoc\n */\n sendEnvelope(envelope) {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending envelope:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n _setupIntegrations() {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let crashed = event.level === 'fatal';\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n _isClientDoneProcessing(timeout) {\n return new SyncPromise(resolve => {\n let ticked = 0;\n const tick = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n _isEnabled() {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(\n event,\n hint,\n currentScope = getCurrentScope(),\n isolationScope = getIsolationScope(),\n ) {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n evt.contexts = {\n trace: getTraceContextFromScope(currentScope),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n _captureEvent(event, hint = {}, scope) {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n if (reason instanceof SentryError && reason.logLevel === 'log') {\n logger.log(reason.message);\n } else {\n logger.warn(reason);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n _processEvent(event, hint, currentScope) {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(this, options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n if (isTransaction) {\n const spans = event.spans || [];\n // the transaction itself counts as one span, plus all the child spans that are added\n const spanCount = 1 + spans.length;\n this.recordDroppedEvent('before_send', 'span', spanCount);\n }\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope && currentScope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n if (isTransaction) {\n const spanCountBefore =\n (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n 0;\n const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n const droppedSpanCount = spanCountBefore - spanCountAfter;\n if (droppedSpanCount > 0) {\n this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n }\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n _process(promise) {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.entries(outcomes).map(([key, quantity]) => {\n const [reason, category] = key.split(':') ;\n return {\n reason,\n category,\n quantity,\n };\n });\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n DEBUG_BUILD && logger.log('Flushing outcomes...');\n\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult,\n beforeSendLabel,\n) {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n client,\n options,\n event,\n hint,\n) {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event)) {\n if (event.spans && beforeSendSpan) {\n const processedSpans = [];\n for (const span of event.spans) {\n const processedSpan = beforeSendSpan(span);\n if (processedSpan) {\n processedSpans.push(processedSpan);\n } else {\n showSpanDropWarning();\n client.recordDroppedEvent('before_send', 'span');\n }\n }\n event.spans = processedSpans;\n }\n\n if (beforeSendTransaction) {\n if (event.spans) {\n // We store the # of spans before processing in SDK metadata,\n // so we can compare it afterwards to determine how many spans were dropped\n const spanCountBefore = event.spans.length;\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n spanCountBeforeProcessing: spanCountBefore,\n };\n }\n return beforeSendTransaction(event, hint);\n }\n }\n\n return event;\n}\n\nfunction isErrorEvent(event) {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map\n","import { getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { logger, consoleSandbox } from './utils-hoist/logger.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n clientClass,\n options,\n) {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n setCurrentClient(client);\n client.init();\n return client;\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n getCurrentScope().setClient(client);\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n const buffer = [];\n\n function isReady() {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike\n * @returns Removed promise.\n */\n function remove(task) {\n return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike; In previous versions this used to be `task:\n * PromiseLike`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer) {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout) {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n limits,\n { statusCode, headers },\n now = Date.now(),\n) {\n const updatedRateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
,
,..\n * where each
is of the form\n * : : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n * Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5) ;\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { forEachEnvelopeItem, envelopeItemTypeToDataCategory, createEnvelope, serializeEnvelope } from '../utils-hoist/envelope.js';\nimport { SentryError } from '../utils-hoist/error.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { makePromiseBuffer } from '../utils-hoist/promisebuffer.js';\nimport { isRateLimited, updateRateLimits } from '../utils-hoist/ratelimit.js';\nimport { resolvedSyncPromise } from '../utils-hoist/syncpromise.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n options,\n makeRequest,\n buffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n) {\n let rateLimits = {};\n const flush = (timeout) => buffer.drain(timeout);\n\n function send(envelope) {\n const filteredEnvelopeItems = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise({});\n }\n\n const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason) => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = () =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise({});\n } else {\n throw error;\n }\n },\n );\n }\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nfunction isSentryRequestUrl(url, client) {\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url, tunnel) {\n if (!tunnel) {\n return false;\n }\n\n return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url, dsn) {\n return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str) {\n return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nexport { isSentryRequestUrl };\n//# sourceMappingURL=isSentryRequestUrl.js.map\n","import { SDK_VERSION } from '../utils-hoist/version.js';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n const metadata = options._metadata || {};\n\n if (!metadata.sdk) {\n metadata.sdk = {\n name: `sentry.javascript.${name}`,\n packages: names.map(name => ({\n name: `${source}:@sentry/${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n };\n }\n\n options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getClient, getCurrentScope } from '../currentScopes.js';\nimport { isEnabled } from '../exports.js';\nimport '../tracing/errors.js';\nimport '../utils-hoist/debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport '../debug-build.js';\nimport '../utils-hoist/time.js';\nimport { getActiveSpan, spanToTraceHeader } from './spanUtils.js';\nimport { TRACEPARENT_REGEXP, generateSentryTraceHeader } from '../utils-hoist/tracing.js';\nimport { getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromScope } from '../tracing/dynamicSamplingContext.js';\nimport { dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage.js';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate\n * a trace via our tracing Http headers or Html `` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nfunction getTraceData(options = {}) {\n const client = getClient();\n if (!isEnabled() || !client) {\n return {};\n }\n\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getTraceData) {\n return acs.getTraceData(options);\n }\n\n const scope = getCurrentScope();\n const span = options.span || getActiveSpan();\n const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n if (!isValidSentryTraceHeader) {\n logger.warn('Invalid sentry-trace data. Cannot generate trace data');\n return {};\n }\n\n return {\n 'sentry-trace': sentryTrace,\n baggage,\n };\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope) {\n // TODO(v9): Use generateSpanId() instead of spanId\n // eslint-disable-next-line deprecation/deprecation\n const { traceId, sampled, spanId } = scope.getPropagationContext();\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\nexport { getTraceData };\n//# sourceMappingURL=traceData.js.map\n","import { getClient, getIsolationScope } from './currentScopes.js';\nimport { consoleSandbox } from './utils-hoist/logger.js';\nimport { dateTimestampInSeconds } from './utils-hoist/time.js';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nfunction addBreadcrumb(breadcrumb, hint) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\nimport { getOriginalFunction } from '../utils-hoist/object.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n Function.prototype.toString = function ( ...args) {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n return originalFunctionToString.apply(context, args);\n };\n } catch (e) {\n // ignore errors here, just don't patch this\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n * integrations: [\n * functionToStringIntegration(),\n * ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getEventDescription } from '../utils-hoist/misc.js';\nimport { stringMatchesSomePattern } from '../utils-hoist/string.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n \"undefined is not an object (evaluating 'a.L')\", // Random error that happens but not actionable or noticeable to end-users.\n 'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\\d+, MethodName:simulateEvent, ParamCount:\\d+$/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n return {\n name: INTEGRATION_NAME,\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\nfunction _mergeOptions(\n internalOptions = {},\n clientOptions = {},\n) {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event, options) {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isUselessError(event)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n event,\n )}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n const possibleMessages = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event) {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n\nfunction _isUselessError(event) {\n if (event.type) {\n // event is not an error\n return false;\n }\n\n // We only want to consider events for dropping that actually have recorded exception values.\n if (!event.exception || !event.exception.values || event.exception.values.length === 0) {\n return false;\n }\n\n return (\n // No top-level message\n !event.message &&\n // There are no exception values that have a stacktrace, a non-generic-Error type or value\n !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n );\n}\n\nexport { inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation,\n parser,\n maxValueLimit = 250,\n key,\n limit,\n event,\n hint,\n) {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException ,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error,\n key,\n prevExceptions,\n exception,\n exceptionId,\n) {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n // Recursively call this function in order to walk down a chain of errors\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception,\n source,\n exceptionId,\n parentId,\n) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n return (urlPath.split(/[?#]/, 1) )[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n *\n * @deprecated This function will be removed in the next major version.\n */\n// TODO(v9): Hoist this function into the places where we use it. (as it stands only react router v6 instrumentation)\nfunction getNumberOfUrlSegments(url) {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n const { protocol, host, path } = url;\n\n const filteredHost =\n (host &&\n host\n // Always filter out authority\n .replace(/^.*@/, '[filtered]:[filtered]@')\n // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n // TODO: Use new URL global if it exists\n .replace(/(:80)$/, '')\n .replace(/(:443)$/, '')) ||\n '';\n\n return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args) {\n const handlerData = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","/**\n * @deprecated This variable has been deprecated and will be removed in the next major version.\n */\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n return (\n level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n ) ;\n}\n\nexport { severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { defineIntegration } from '../integration.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../utils-hoist/logger.js';\nimport { getFramesFromEvent } from '../utils-hoist/stacktrace.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n let currentFrames = getFramesFromEvent(currentEvent);\n let previousFrames = getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames ;\n previousFrames = previousFrames ;\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameA = previousFrames[i];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint ;\n previousFingerprint = previousFingerprint ;\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event) {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP } from './semanticAttributes.js';\nimport './tracing/errors.js';\nimport { isInstanceOf } from './utils-hoist/is.js';\nimport './utils-hoist/debug-build.js';\nimport './utils-hoist/logger.js';\nimport './utils-hoist/time.js';\nimport './utils-hoist/syncpromise.js';\nimport { parseUrl } from './utils-hoist/url.js';\nimport { SENTRY_BAGGAGE_KEY_PREFIX } from './utils-hoist/baggage.js';\nimport './debug-build.js';\nimport { hasTracingEnabled } from './utils/hasTracingEnabled.js';\nimport { getActiveSpan } from './utils/spanUtils.js';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nimport { setHttpStatus, SPAN_STATUS_ERROR } from './tracing/spanstatus.js';\nimport { startInactiveSpan } from './tracing/trace.js';\nimport { getTraceData } from './utils/traceData.js';\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n spanOrigin = 'auto.http.browser',\n) {\n if (!handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n endSpan(span, handlerData);\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const { method, url } = handlerData.fetchData;\n\n const fullUrl = getFullURL(url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${method} ${url}`,\n attributes: {\n url,\n type: 'fetch',\n 'http.method': method,\n 'http.url': fullUrl,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n\n if (shouldAttachHeaders(handlerData.fetchData.url)) {\n const request = handlerData.args[0];\n\n const options = handlerData.args[1] || {};\n\n const headers = _addTracingHeadersToFetchRequest(\n request,\n options,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n if (headers) {\n // Ensure this is actually set, if no options have been passed previously\n handlerData.args[1] = options;\n options.headers = headers;\n }\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n */\nfunction _addTracingHeadersToFetchRequest(\n request,\n fetchOptionsObj\n\n,\n span,\n) {\n const traceHeaders = getTraceData({ span });\n const sentryTrace = traceHeaders['sentry-trace'];\n const baggage = traceHeaders.baggage;\n\n // Nothing to do, when we return undefined here, the original headers will be used\n if (!sentryTrace) {\n return undefined;\n }\n\n const headers = fetchOptionsObj.headers || (isRequest(request) ? request.headers : undefined);\n\n if (!headers) {\n return { ...traceHeaders };\n } else if (isHeaders(headers)) {\n const newHeaders = new Headers(headers);\n newHeaders.set('sentry-trace', sentryTrace);\n\n if (baggage) {\n const prevBaggageHeader = newHeaders.get('baggage');\n if (prevBaggageHeader) {\n const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues(prevBaggageHeader);\n newHeaders.set(\n 'baggage',\n // If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header\n // otherwise just set the sentry baggage header\n prevHeaderStrippedFromSentryBaggage ? `${prevHeaderStrippedFromSentryBaggage},${baggage}` : baggage,\n );\n } else {\n newHeaders.set('baggage', baggage);\n }\n }\n\n return newHeaders;\n } else if (Array.isArray(headers)) {\n const newHeaders = [\n ...headers\n // Remove any existing sentry-trace headers\n .filter(header => {\n return !(Array.isArray(header) && header[0] === 'sentry-trace');\n })\n // Get rid of previous sentry baggage values in baggage header\n .map(header => {\n if (Array.isArray(header) && header[0] === 'baggage' && typeof header[1] === 'string') {\n const [headerName, headerValue, ...rest] = header;\n return [headerName, stripBaggageHeaderOfSentryBaggageValues(headerValue), ...rest];\n } else {\n return header;\n }\n }),\n // Attach the new sentry-trace header\n ['sentry-trace', sentryTrace],\n ];\n\n if (baggage) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push(['baggage', baggage]);\n }\n\n return newHeaders ;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n let newBaggageHeaders = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders = existingBaggageHeader\n .map(headerItem =>\n typeof headerItem === 'string' ? stripBaggageHeaderOfSentryBaggageValues(headerItem) : headerItem,\n )\n .filter(headerItem => headerItem === '');\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(stripBaggageHeaderOfSentryBaggageValues(existingBaggageHeader));\n }\n\n if (baggage) {\n newBaggageHeaders.push(baggage);\n }\n\n return {\n ...(headers ),\n 'sentry-trace': sentryTrace,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n *\n * @deprecated This function will not be exported anymore in v9.\n */\nfunction addTracingHeadersToFetchRequest(\n request,\n _client,\n _scope,\n fetchOptionsObj\n\n,\n span,\n) {\n return _addTracingHeadersToFetchRequest(request , fetchOptionsObj, span);\n}\n\nfunction getFullURL(url) {\n try {\n const parsed = new URL(url);\n return parsed.href;\n } catch (e) {\n return undefined;\n }\n}\n\nfunction endSpan(span, handlerData) {\n if (handlerData.response) {\n setHttpStatus(span, handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n span.end();\n}\n\nfunction stripBaggageHeaderOfSentryBaggageValues(baggageHeader) {\n return (\n baggageHeader\n .split(',')\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .filter(baggageEntry => !baggageEntry.split('=')[0].startsWith(SENTRY_BAGGAGE_KEY_PREFIX))\n .join(',')\n );\n}\n\nfunction isRequest(request) {\n return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n\nfunction isHeaders(headers) {\n return typeof Headers !== 'undefined' && isInstanceOf(headers, Headers);\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nfunction getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n // NOTE: undefined defaults to 'info' in Sentry\n if (statusCode === undefined) {\n return undefined;\n } else if (statusCode >= 400 && statusCode < 500) {\n return 'warning';\n } else if (statusCode >= 500) {\n return 'error';\n } else {\n return undefined;\n }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-expect-error It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n if (!('fetch' in WINDOW)) {\n return false;\n }\n\n try {\n new Headers();\n new Request('http://www.example.com');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n if (typeof EdgeRuntime === 'string') {\n return true;\n }\n\n if (!supportsFetch()) {\n return false;\n }\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFunction(WINDOW.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement ) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFunction(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' ,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { isError } from '../is.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { timestampInSeconds } from '../time.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(\n handler,\n skipNativeFetchCheck,\n) {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nfunction addFetchEndInstrumentationHandler(handler) {\n const type = 'fetch-body-resolved';\n addHandler(type, handler);\n maybeInstrument(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n if (skipNativeFetchCheck && !supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n return function (...args) {\n // We capture the error right here and not in the Promise error callback because Safari (and probably other\n // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n const virtualError = new Error();\n\n const { method, url } = parseFetchArgs(args);\n const handlerData = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: timestampInSeconds() * 1000,\n // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n virtualError,\n };\n\n // if there is no callback, fetch is instrumented directly\n if (!onFetchResolved) {\n triggerHandlers('fetch', {\n ...handlerData,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n async (response) => {\n if (onFetchResolved) {\n onFetchResolved(response);\n } else {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n }\n\n return response;\n },\n (error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n error,\n });\n\n if (isError(error) && error.stack === undefined) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your fetch call did not\n // have a stack trace, so the SDK backfilled the stack trace so\n // you can see which fetch call failed.\n error.stack = virtualError.stack;\n addNonEnumerableProperty(error, 'framesToPop', 1);\n }\n\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nasync function resolveResponse(res, onFinishedResolving) {\n if (res && res.body) {\n const body = res.body;\n const responseReader = body.getReader();\n\n // Define a maximum duration after which we just cancel\n const maxFetchDurationTimeout = setTimeout(\n () => {\n body.cancel().then(null, () => {\n // noop\n });\n },\n 90 * 1000, // 90s\n );\n\n let readingActive = true;\n while (readingActive) {\n let chunkTimeout;\n try {\n // abort reading if read op takes more than 5s\n chunkTimeout = setTimeout(() => {\n body.cancel().then(null, () => {\n // noop on error\n });\n }, 5000);\n\n // This .read() call will reject/throw when we abort due to timeouts through `body.cancel()`\n const { done } = await responseReader.read();\n\n clearTimeout(chunkTimeout);\n\n if (done) {\n onFinishedResolving();\n readingActive = false;\n }\n } catch (error) {\n readingActive = false;\n } finally {\n clearTimeout(chunkTimeout);\n }\n }\n\n clearTimeout(maxFetchDurationTimeout);\n\n responseReader.releaseLock();\n body.cancel().then(null, () => {\n // noop on error\n });\n }\n}\n\nfunction streamHandler(response) {\n // clone response for awaiting stream\n let clonedResponseForResolving;\n try {\n clonedResponseForResolving = response.clone();\n } catch (e) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n resolveResponse(clonedResponseForResolving, () => {\n triggerHandlers('fetch-body-resolved', {\n endTimestamp: timestampInSeconds() * 1000,\n response,\n });\n });\n}\n\nfunction hasProp(obj, prop) {\n return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs ;\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg ),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n * @deprecated This function will be removed in the next major version.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod, request) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @param existingModule module to use for requiring\n * @returns possibly required module\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction loadModule(moduleName, existingModule = module) {\n let mod;\n\n try {\n // eslint-disable-next-line deprecation/deprecation\n mod = dynamicRequire(existingModule, moduleName);\n } catch (e) {\n // no-empty\n }\n\n if (!mod) {\n try {\n // eslint-disable-next-line deprecation/deprecation\n const { cwd } = dynamicRequire(existingModule, 'process');\n // eslint-disable-next-line deprecation/deprecation\n mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) ;\n } catch (e) {\n // no-empty\n }\n }\n\n return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Returns true if we are in the browser.\n */\nfunction isBrowser() {\n // eslint-disable-next-line no-restricted-globals\n return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer() {\n const process = (GLOBAL_OBJ ).process;\n return !!process && process.type === 'renderer';\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\n\n// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n\nconst WINDOW = GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n // TODO(v9): Remove this custom check, it is pretty old and likely not needed anymore\n const chromeVar = (WINDOW ).chrome;\n const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { supportsHistory };\n//# sourceMappingURL=supportsHistory.js.map\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nfunction _nullishCoalesce(lhs, rhsFn) {\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n// if (lhs != null) {\n// return lhs;\n// } else {\n// return rhsFn();\n// }\n// }\n\nexport { _nullishCoalesce };\n//# sourceMappingURL=_nullishCoalesce.js.map\n","/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nfunction _optionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i] ;\n const fn = ops[i + 1] ;\n i += 2;\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n return;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args) => (value ).call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n// let lastAccessLHS = undefined;\n// let value = ops[0];\n// let i = 1;\n// while (i < ops.length) {\n// const op = ops[i];\n// const fn = ops[i + 1];\n// i += 2;\n// if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n// return undefined;\n// }\n// if (op === 'access' || op === 'optionalAccess') {\n// lastAccessLHS = value;\n// value = fn(value);\n// } else if (op === 'call' || op === 'optionalCall') {\n// value = fn((...args) => value.call(lastAccessLHS, ...args));\n// lastAccessLHS = undefined;\n// }\n// }\n// return value;\n// }\n\nexport { _optionalChain };\n//# sourceMappingURL=_optionalChain.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n fn,\n options\n\n = {},\n) {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n function isFunction(fn) {\n return typeof fn === 'function';\n }\n\n if (!isFunction(fn)) {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = (fn ).__sentry_wrapped__;\n if (wrapper) {\n if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n // Wrap the function itself\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function ( ...args) {\n try {\n // Also wrap arguments that are themselves functions\n const wrappedArguments = args.map(arg => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n } ;\n\n // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property ] = fn[property ];\n }\n }\n } catch (e2) {\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n }\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n } catch (e3) {\n // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n // to save some bytes we simply try-catch this\n }\n\n return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/core';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n } ,\n ],\n },\n extra,\n } ;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex) {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception) {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nfunction extractType(ex) {\n const name = ex && ex.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n const message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n stackParser,\n message,\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n stackParser,\n exception,\n syntheticException,\n attachStacktrace,\n isUnhandledRejection,\n) {\n let event;\n\n if (isErrorEvent(exception ) && (exception ).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception ;\n return eventFromError(stackParser, errorEvent.error );\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception )) {\n const domException = exception ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception ;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser,\n message,\n syntheticException,\n attachStacktrace,\n) {\n const event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception,\n { isUnhandledRejection },\n) {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { dsnToString, createEnvelope } from '@sentry/core';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n feedback,\n {\n metadata,\n tunnel,\n dsn,\n }\n\n,\n) {\n const headers = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata &&\n metadata.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n const feedbackHeaders = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n","import { BaseClient, getSDKSource, applySdkMetadata, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/core Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const opts = {\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...options,\n };\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n super(opts);\n\n if (opts.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n eventFromMessage(\n message,\n level = 'info',\n hint,\n ) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\n captureUserFeedback(feedback) {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const getRating = (value, thresholds) => {\n if (value > thresholds[1]) {\n return 'poor';\n }\n if (value > thresholds[0]) {\n return 'needs-improvement';\n }\n return 'good';\n};\n\nconst bindReporter = (\n callback,\n metric,\n thresholds,\n reportAllChanges,\n) => {\n let prevValue;\n let delta;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n metric.rating = getRating(metric.value, thresholds);\n callback(metric);\n }\n }\n }\n };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ\n\n;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n return `v4-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// sentry-specific change:\n// add optional param to not check for responseStart (see comment below)\nconst getNavigationEntry = (checkResponseStart = true) => {\n const navigationEntry =\n WINDOW.performance && WINDOW.performance.getEntriesByType && WINDOW.performance.getEntriesByType('navigation')[0];\n // Check to ensure the `responseStart` property is present and valid.\n // In some cases no value is reported by the browser (for\n // privacy/security reasons), and in other cases (bugs) the value is\n // negative or is larger than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n // https://github.com/GoogleChrome/web-vitals/issues/275\n if (\n // sentry-specific change:\n // We don't want to check for responseStart for our own use of `getNavigationEntry`\n !checkResponseStart ||\n (navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now())\n ) {\n return navigationEntry;\n }\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst getActivationStart = () => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst initMetric = (name, value) => {\n const navEntry = getNavigationEntry();\n let navigationType = 'navigate';\n\n if (navEntry) {\n if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else if (WINDOW.document && WINDOW.document.wasDiscarded) {\n navigationType = 'restore';\n } else if (navEntry.type) {\n navigationType = navEntry.type.replace(/_/g, '-') ;\n }\n }\n\n // Use `entries` type specific for the metric.\n const entries = [];\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good' , // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n delta: 0,\n entries,\n id: generateUniqueID(),\n navigationType,\n };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n type,\n callback,\n opts,\n) => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n // Delay by a microtask to workaround a bug in Safari where the\n // callback is invoked immediately, rather than in a separate task.\n // See: https://github.com/GoogleChrome/web-vitals/issues/277\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n callback(list.getEntries() );\n });\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) ,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// Sentry-specific change:\n// This function's logic was NOT updated to web-vitals 4.2.4 but we continue\n// to use the web-vitals 3.5.2 due to us having stricter browser support.\n// PR with context that made the changes: https://github.com/GoogleChrome/web-vitals/pull/442/files#r1530492402\n// The PR removed listening to the `pagehide` event, in favour of only listening to `visibilitychange` event.\n// This is \"more correct\" but some browsers we still support (Safari 12.1-14.0) don't fully support `visibilitychange`\n// or have known bugs w.r.t the `visibilitychange` event.\n// TODO (v9): If we decide to drop support for Safari 12.1-14.0, we can use the logic from web-vitals 4.2.4\n// In this case, we also need to update the integration tests that currently trigger the `pagehide` event to\n// simulate the page being hidden.\nconst onHidden = (cb) => {\n const onHiddenOrPageHide = (event) => {\n if (event.type === 'pagehide' || (WINDOW.document && WINDOW.document.visibilityState === 'hidden')) {\n cb(event);\n }\n };\n\n if (WINDOW.document) {\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n }\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst runOnce = (cb) => {\n let called = false;\n return () => {\n if (!called) {\n cb();\n called = true;\n }\n };\n};\n\nexport { runOnce };\n//# sourceMappingURL=runOnce.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n // If the document is hidden when this code runs, assume it was always\n // hidden and the page was loaded in the background, with the one exception\n // that visibility state is always 'hidden' during prerendering, so we have\n // to ignore that case until prerendering finishes (see: `prerenderingchange`\n // event logic below).\n return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event) => {\n // If the document is 'hidden' and no previous hidden timestamp has been\n // set, update it based on the current event data.\n if (WINDOW.document.visibilityState === 'hidden' && firstHiddenTime > -1) {\n // If the event is a 'visibilitychange' event, it means the page was\n // visible prior to this change, so the event timestamp is the first\n // hidden time.\n // However, if the event is not a 'visibilitychange' event, then it must\n // be a 'prerenderingchange' event, and the fact that the document is\n // still 'hidden' from the above check means the tab was activated\n // in a background state and so has always been hidden.\n firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n // Remove all listeners now that a `firstHiddenTime` value has been set.\n removeChangeListeners();\n }\n};\n\nconst addChangeListeners = () => {\n addEventListener('visibilitychange', onVisibilityUpdate, true);\n // IMPORTANT: when a page is prerendering, its `visibilityState` is\n // 'hidden', so in order to account for cases where this module checks for\n // visibility during prerendering, an additional check after prerendering\n // completes is also required.\n addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst removeChangeListeners = () => {\n removeEventListener('visibilitychange', onVisibilityUpdate, true);\n removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst getVisibilityWatcher = () => {\n if (WINDOW.document && firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n addChangeListeners();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../../types.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst whenActivated = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n addEventListener('prerenderingchange', () => callback(), true);\n } else {\n callback();\n }\n};\n\nexport { whenActivated };\n//# sourceMappingURL=whenActivated.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nconst FCPThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nconst onFCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FCP');\n let report;\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n if (entry.name === 'first-contentful-paint') {\n po.disconnect();\n\n // Only report if the page wasn't hidden prior to the first paint.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The activationStart reference is used because FCP should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the FCP, this time should be clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries.push(entry);\n report(true);\n }\n }\n });\n };\n\n const po = observe('paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n }\n });\n};\n\nexport { FCPThresholds, onFCP };\n//# sourceMappingURL=onFCP.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nconst CLSThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport, opts = {}) => {\n // Start monitoring FCP so we can only report CLS if FCP is also reported.\n // Note: this is done to match the current behavior of CrUX.\n onFCP(\n runOnce(() => {\n const metric = initMetric('CLS', 0);\n let report;\n\n let sessionValue = 0;\n let sessionEntries = [];\n\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry\n // and less than 5 seconds after the first entry in the session,\n // include the entry in the current session. Otherwise, start a new\n // session.\n if (\n sessionValue &&\n firstSessionEntry &&\n lastSessionEntry &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n }\n });\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n report();\n }\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n report(true);\n });\n\n // Queue a task to report (if nothing else triggers a report first).\n // This allows CLS to be reported as soon as FCP fires when\n // `reportAllChanges` is true.\n setTimeout(report, 0);\n }\n }),\n );\n};\n\nexport { CLSThresholds, onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nconst FIDThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntry = (entry) => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries) => {\n (entries ).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n\n report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n if (po) {\n onHidden(\n runOnce(() => {\n handleEntries(po.takeRecords() );\n po.disconnect();\n }),\n );\n }\n });\n};\n\nexport { FIDThresholds, onFID };\n//# sourceMappingURL=getFID.js.map\n","import { observe } from '../observe.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n entries.forEach(e => {\n if (e.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n }\n });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n if ('interactionCount' in performance || po) return;\n\n po = observe('event', updateEstimate, {\n type: 'event',\n buffered: true,\n durationThreshold: 0,\n } );\n};\n\nexport { getInteractionCount, initInteractionCountPolyfill };\n//# sourceMappingURL=interactionCountPolyfill.js.map\n","import { getInteractionCount } from './polyfills/interactionCountPolyfill.js';\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap = new Map();\n\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\nconst DEFAULT_DURATION_THRESHOLD = 40;\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nlet prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n return getInteractionCount() - prevInteractionCount;\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n const candidateInteractionIndex = Math.min(\n longestInteractionList.length - 1,\n Math.floor(getInteractionCountForNavigation() / 50),\n );\n\n return longestInteractionList[candidateInteractionIndex];\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n/**\n * A list of callback functions to run before each entry is processed.\n * Exposing this list allows the attribution build to hook into the\n * entry processing pipeline.\n */\nconst entryPreProcessingCallbacks = [];\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processInteractionEntry = (entry) => {\n entryPreProcessingCallbacks.forEach(cb => cb(entry));\n\n // Skip further processing for entries that cannot be INP candidates.\n if (!(entry.interactionId || entry.entryType === 'first-input')) return;\n\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n const existingInteraction = longestInteractionMap.get(entry.interactionId);\n\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (\n existingInteraction ||\n longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n (minLongestInteraction && entry.duration > minLongestInteraction.latency)\n ) {\n // If the interaction already exists, update it. Otherwise create one.\n if (existingInteraction) {\n // If the new entry has a longer duration, replace the old entries,\n // otherwise add to the array.\n if (entry.duration > existingInteraction.latency) {\n existingInteraction.entries = [entry];\n existingInteraction.latency = entry.duration;\n } else if (\n entry.duration === existingInteraction.latency &&\n entry.startTime === (existingInteraction.entries[0] && existingInteraction.entries[0].startTime)\n ) {\n existingInteraction.entries.push(entry);\n }\n } else {\n const interaction = {\n id: entry.interactionId,\n latency: entry.duration,\n entries: [entry],\n };\n longestInteractionMap.set(interaction.id, interaction);\n longestInteractionList.push(interaction);\n }\n\n // Sort the entries by latency (descending) and keep only the top ten.\n longestInteractionList.sort((a, b) => b.latency - a.latency);\n if (longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => longestInteractionMap.delete(i.id));\n }\n }\n};\n\nexport { DEFAULT_DURATION_THRESHOLD, entryPreProcessingCallbacks, estimateP98LongestInteraction, longestInteractionList, longestInteractionMap, processInteractionEntry };\n//# sourceMappingURL=interactions.js.map\n","import { WINDOW } from '../../../types.js';\nimport { onHidden } from './onHidden.js';\nimport { runOnce } from './runOnce.js';\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nconst whenIdle = (cb) => {\n const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n\n let handle = -1;\n // eslint-disable-next-line no-param-reassign\n cb = runOnce(cb) ;\n // If the document is hidden, run the callback immediately, otherwise\n // race an idle callback with the next `visibilitychange` event.\n if (WINDOW.document && WINDOW.document.visibilityState === 'hidden') {\n cb();\n } else {\n handle = rIC(cb);\n onHidden(cb);\n }\n return handle;\n};\n\nexport { whenIdle };\n//# sourceMappingURL=whenIdle.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { DEFAULT_DURATION_THRESHOLD, processInteractionEntry, estimateP98LongestInteraction } from './lib/interactions.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdle } from './lib/whenIdle.js';\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nconst INPThresholds = [200, 500];\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts = {}) => {\n // Return if the browser doesn't support all APIs needed to measure INP.\n if (!('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype)) {\n return;\n }\n\n whenActivated(() => {\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n\n const metric = initMetric('INP');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntries = (entries) => {\n // Queue the `handleEntries()` callback in the next idle task.\n // This is needed to increase the chances that all event entries that\n // occurred between the user interaction and the next paint\n // have been dispatched. Note: there is currently an experiment\n // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n // 123+ that if rolled out fully may make this no longer necessary.\n whenIdle(() => {\n entries.forEach(processInteractionEntry);\n\n const inp = estimateP98LongestInteraction();\n\n if (inp && inp.latency !== metric.value) {\n metric.value = inp.latency;\n metric.entries = inp.entries;\n report();\n }\n });\n };\n\n const po = observe('event', handleEntries, {\n // Event Timing entries have their durations rounded to the nearest 8ms,\n // so a duration of 40ms would be any event that spans 2.5 or more frames\n // at 60Hz. This threshold is chosen to strike a balance between usefulness\n // and performance. Running this callback for any interaction that spans\n // just one or two frames is likely not worth the insight that could be\n // gained.\n durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : DEFAULT_DURATION_THRESHOLD,\n });\n\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n if (po) {\n // Also observe entries of type `first-input`. This is useful in cases\n // where the first interaction is less than the `durationThreshold`.\n po.observe({ type: 'first-input', buffered: true });\n\n onHidden(() => {\n handleEntries(po.takeRecords() );\n report(true);\n });\n }\n });\n};\n\nexport { INPThresholds, onINP };\n//# sourceMappingURL=getINP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdle } from './lib/whenIdle.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nconst LCPThresholds = [2500, 4000];\n\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nconst onLCP = (onReport, opts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report;\n\n const handleEntries = (entries) => {\n // If reportAllChanges is set then call this function for each entry,\n // otherwise only consider the last one.\n if (!opts.reportAllChanges) {\n // eslint-disable-next-line no-param-reassign\n entries = entries.slice(-1);\n }\n\n entries.forEach(entry => {\n // Only report if the page wasn't hidden prior to LCP.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was pre-rendered. But in cases\n // where `activationStart` occurs after the LCP, this time should be\n // clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries = [entry];\n report();\n }\n });\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n const stopListening = runOnce(() => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() );\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n });\n\n // Stop listening after input. Note: while scrolling is an input that\n // stops LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n // Wrap in a setTimeout so the callback is run in a separate task\n // to avoid extending the keyboard/click handler to reduce INP impact\n // https://github.com/GoogleChrome/web-vitals/issues/383\n if (WINDOW.document) {\n addEventListener(type, () => whenIdle(stopListening ), {\n once: true,\n capture: true,\n });\n }\n });\n\n onHidden(stopListening);\n }\n });\n};\n\nexport { LCPThresholds, onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { WINDOW } from '../../types.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { whenActivated } from './lib/whenActivated.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nconst TTFBThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n whenActivated(() => whenReady(callback));\n } else if (WINDOW.document && WINDOW.document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n } else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback, 0);\n }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts = {}) => {\n const metric = initMetric('TTFB');\n const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n whenReady(() => {\n const navigationEntry = getNavigationEntry();\n\n if (navigationEntry) {\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(navigationEntry.responseStart - getActivationStart(), 0);\n\n metric.entries = [navigationEntry];\n report(true);\n }\n });\n};\n\nexport { TTFBThresholds, onTTFB };\n//# sourceMappingURL=onTTFB.js.map\n","import { logger, getFunctionName } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onINP } from './web-vitals/getINP.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\nimport { onTTFB } from './web-vitals/onTTFB.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n callback,\n stopOnCallback = false,\n) {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(\n callback,\n) {\n return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n type,\n callback,\n) {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls() {\n return onCLS(\n metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n },\n // We want the callback to be called whenever the CLS value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentFid() {\n return onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp() {\n return onLCP(\n metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n },\n // We want the callback to be called whenever the LCP value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentTtfb() {\n return onTTFB(metric => {\n triggerHandlers('ttfb', {\n metric,\n });\n _previousTtfb = metric;\n });\n}\n\nfunction instrumentInp() {\n return onINP(metric => {\n triggerHandlers('inp', {\n metric,\n });\n _previousInp = metric;\n });\n}\n\nfunction addMetricObserver(\n type,\n callback,\n instrumentFn,\n previousValue,\n stopOnCallback = false,\n) {\n addHandler(type, callback);\n\n let stopListening;\n\n if (!instrumented[type]) {\n stopListening = instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n const options = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n type,\n callback,\n stopListening,\n) {\n return () => {\n if (stopListening) {\n stopListening();\n }\n\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nfunction isPerformanceEventTiming(entry) {\n return 'duration' in entry;\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler, addTtfbInstrumentationHandler, isPerformanceEventTiming };\n//# sourceMappingURL=instrument.js.map\n","import { spanToJSON, withActiveSpan, startInactiveSpan, getClient, getCurrentScope } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction startAndEndSpan(\n parentSpan,\n startTimeInSeconds,\n endTime,\n { ...ctx },\n) {\n const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n if (parentStartTime && parentStartTime > startTimeInSeconds) {\n // We can only do this for SentrySpans...\n if (typeof (parentSpan ).updateStartTime === 'function') {\n (parentSpan ).updateStartTime(startTimeInSeconds);\n }\n }\n\n // The return value only exists for tests\n return withActiveSpan(parentSpan, () => {\n const span = startInactiveSpan({\n startTime: startTimeInSeconds,\n ...ctx,\n });\n\n if (span) {\n span.end(endTime);\n }\n\n return span;\n });\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nfunction startStandaloneWebVitalSpan(options) {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n const { release, environment } = client.getOptions();\n // We need to get the replay, user, and activeTransaction from the current scope\n // so that we can associate replay id, profile id, and a user display to the span\n const replay = client.getIntegrationByName('Replay');\n const replayId = replay && replay.getReplayId();\n\n const scope = getCurrentScope();\n\n const user = scope.getUser();\n const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n let profileId;\n try {\n // @ts-expect-error skip optional chaining to save bundle size with try catch\n profileId = scope.getScopeData().contexts.profile.profile_id;\n } catch (e) {\n // do nothing\n }\n\n const attributes = {\n release,\n environment,\n\n user: userDisplay || undefined,\n profile_id: profileId || undefined,\n replay_id: replayId || undefined,\n\n transaction,\n\n // Web vital score calculation relies on the user agent to account for different\n // browsers setting different thresholds for what is considered a good/meh/bad value.\n // For example: Chrome vs. Chrome Mobile\n 'user_agent.original': WINDOW.navigator && WINDOW.navigator.userAgent,\n\n ...passedAttributes,\n };\n\n return startInactiveSpan({\n name,\n attributes,\n startTime,\n experimental: {\n standalone: true,\n },\n });\n}\n\n/** Get the browser performance API. */\nfunction getBrowserPerformanceAPI() {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n return time / 1000;\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/') ;\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1] ;\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nexport { extractNetworkProtocol, getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan, startStandaloneWebVitalSpan };\n//# sourceMappingURL=utils.js.map\n","import { getClient, getActiveSpan, getRootSpan, spanToJSON, logger, browserPerformanceTimeOrigin, getCurrentScope, htmlTreeAsString, dropUndefinedKeys, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { addClsInstrumentationHandler } from './instrument.js';\nimport { msToSec, startStandaloneWebVitalSpan } from './utils.js';\nimport { onHidden } from './web-vitals/lib/onHidden.js';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nfunction trackClsAsStandaloneSpan() {\n let standaloneCLsValue = 0;\n let standaloneClsEntry;\n let pageloadSpanId;\n\n if (!supportsLayoutShift()) {\n return;\n }\n\n let sentSpan = false;\n function _collectClsOnce() {\n if (sentSpan) {\n return;\n }\n sentSpan = true;\n if (pageloadSpanId) {\n sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId);\n }\n cleanupClsHandler();\n }\n\n const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n standaloneCLsValue = metric.value;\n standaloneClsEntry = entry;\n }, true);\n\n // use pagehide event from web-vitals\n onHidden(() => {\n _collectClsOnce();\n });\n\n // Since the call chain of this function is synchronous and evaluates before the SDK client is created,\n // we need to wait with subscribing to a client hook until the client is created. Therefore, we defer\n // to the next tick after the SDK setup.\n setTimeout(() => {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n const unsubscribeStartNavigation = client.on('startNavigationSpan', () => {\n _collectClsOnce();\n unsubscribeStartNavigation && unsubscribeStartNavigation();\n });\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n const spanJSON = rootSpan && spanToJSON(rootSpan);\n if (spanJSON && spanJSON.op === 'pageload') {\n pageloadSpanId = rootSpan.spanContext().spanId;\n }\n }, 0);\n}\n\nfunction sendStandaloneClsSpan(clsValue, entry, pageloadSpanId) {\n DEBUG_BUILD && logger.log(`Sending CLS span (${clsValue})`);\n\n const startTime = msToSec((browserPerformanceTimeOrigin || 0) + ((entry && entry.startTime) || 0));\n const routeName = getCurrentScope().getScopeData().transactionName;\n\n const name = entry ? htmlTreeAsString(entry.sources[0] && entry.sources[0].node) : 'Layout shift';\n\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: (entry && entry.duration) || 0,\n // attach the pageload span id to the CLS span so that we can link them in the UI\n 'sentry.pageload.span_id': pageloadSpanId,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n if (span) {\n span.addEvent('cls', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n });\n\n // LayoutShift performance entries always have a duration of 0, so we don't need to add `entry.duration` here\n // see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/duration\n span.end(startTime);\n }\n}\n\nfunction supportsLayoutShift() {\n try {\n return PerformanceObserver.supportedEntryTypes.includes('layout-shift');\n } catch (e) {\n return false;\n }\n}\n\nexport { trackClsAsStandaloneSpan };\n//# sourceMappingURL=cls.js.map\n","import { browserPerformanceTimeOrigin, getActiveSpan, spanToJSON, setMeasurement, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, parseUrl, htmlTreeAsString, getComponentName } from '@sentry/core';\nimport { WINDOW } from '../types.js';\nimport { trackClsAsStandaloneSpan } from './cls.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler, addTtfbInstrumentationHandler } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startAndEndSpan, extractNetworkProtocol, isMeasurementValue } from './utils.js';\nimport { getActivationStart } from './web-vitals/lib/getActivationStart.js';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry.js';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher.js';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals({ recordClsStandaloneSpans }) {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCleanupCallback = _trackFID();\n const lcpCleanupCallback = _trackLCP();\n const ttfbCleanupCallback = _trackTtfb();\n const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS();\n\n return () => {\n fidCleanupCallback();\n lcpCleanupCallback();\n ttfbCleanupCallback();\n clsCleanupCallback && clsCleanupCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n\n const { op: parentOp, start_timestamp: parentStartTimestamp } = spanToJSON(parent);\n\n for (const entry of entries) {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n // Skip adding a span if the long task started before the navigation started.\n // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n // time, potentially skewing the duration of the actual navigation as reported via our\n // routing instrumentations\n continue;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, {\n name: 'Main UI thread blocked',\n op: 'ui.long-task',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n }\n });\n}\n\n/**\n * Start tracking long animation frames.\n */\nfunction startTrackingLongAnimationFrames() {\n // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n // we directly observe `long-animation-frame` events instead of through the web-vitals\n // `observe` helper function.\n const observer = new PerformanceObserver(list => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n for (const entry of list.getEntries() ) {\n if (!entry.scripts[0]) {\n continue;\n }\n\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n\n const { start_timestamp: parentStartTimestamp, op: parentOp } = spanToJSON(parent);\n\n if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n // Skip adding the span if the long animation frame started before the navigation started.\n // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n // time, potentially skewing the duration of the actual navigation as reported via our\n // routing instrumentations\n continue;\n }\n\n const duration = msToSec(entry.duration);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n };\n\n const initialScript = entry.scripts[0];\n const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n attributes['browser.script.invoker'] = invoker;\n attributes['browser.script.invoker_type'] = invokerType;\n if (sourceURL) {\n attributes['code.filepath'] = sourceURL;\n }\n if (sourceFunctionName) {\n attributes['code.function'] = sourceFunctionName;\n }\n if (sourceCharPosition !== -1) {\n attributes['browser.script.source_char_position'] = sourceCharPosition;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, {\n name: 'Main UI thread blocked',\n op: 'ui.long-animation-frame',\n attributes,\n });\n }\n });\n\n observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n const parent = getActiveSpan();\n if (!parent) {\n return;\n }\n for (const entry of entries) {\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const spanOptions = {\n name: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n startTime: startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n spanOptions.attributes['ui.component_name'] = componentName;\n }\n\n startAndEndSpan(parent, startTime, startTime + duration, spanOptions);\n }\n }\n });\n}\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS() {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1] ;\n if (!entry) {\n return;\n }\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry;\n }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry ;\n }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n const startTime = msToSec(entry.startTime);\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\nfunction _trackTtfb() {\n return addTtfbInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(span, options) {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n performanceEntries.slice(_performanceCursor).forEach(entry => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(\n // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n Math.max(0, entry.duration),\n );\n\n if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(span, entry , timeOrigin);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n _addResourceSpans(span, entry , entry.name, startTime, duration, timeOrigin);\n break;\n }\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(span);\n\n // Measurements are only available for pageload transactions\n if (op === 'pageload') {\n _addTtfbRequestTimeToMeasurements(_measurements);\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n name: 'first input delay',\n op: 'ui.action',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n // TODO: Check if the first condition is still necessary: `onCLS` already only fires once `onFCP` was called.\n if (!('fcp' in _measurements) || !options.recordClsOnPageloadSpan) {\n delete _measurements.cls;\n }\n\n Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n setMeasurement(measurementName, measurement.value, measurement.unit);\n });\n\n // Set timeOrigin which denotes the timestamp which to base the LCP/FCP/FP/TTFB measurements on\n span.setAttribute('performance.timeOrigin', timeOrigin);\n\n // In prerendering scenarios, where a page might be prefetched and pre-rendered before the user clicks the link,\n // the navigation starts earlier than when the user clicks it. Web Vitals should always be based on the\n // user-perceived time, so they are not reported from the actual start of the navigation, but rather from the\n // time where the user actively started the navigation, for example by clicking a link.\n // This is user action is called \"activation\" and the time between navigation and activation is stored in\n // the `activationStart` attribute of the \"navigation\" PerformanceEntry.\n span.setAttribute('performance.activationStart', getActivationStart());\n\n _setWebVitalAttributes(span);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/**\n * Create measure related spans.\n * Exported only for tests.\n */\nfunction _addMeasureSpans(\n span,\n entry,\n startTime,\n duration,\n timeOrigin,\n) {\n const navEntry = getNavigationEntry(false);\n const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);\n // Because performance.measure accepts arbitrary timestamps it can produce\n // spans that happen before the browser even makes a request for the page.\n //\n // An example of this is the automatically generated Next.js-before-hydration\n // spans created by the Next.js framework.\n //\n // To prevent this we will pin the start timestamp to the request start time\n // This does make duration inaccurate, so if this does happen, we will add\n // an attribute to the span\n const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n const startTimeStamp = timeOrigin + startTime;\n const measureEndTimestamp = startTimeStamp + duration;\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n\n if (measureStartTimestamp !== startTimeStamp) {\n attributes['sentry.browser.measure_happened_before_request'] = true;\n attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n }\n\n startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n name: entry.name ,\n op: entry.entryType ,\n attributes,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\nfunction _addNavigationSpans(span, entry, timeOrigin) {\n (['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'] ).forEach(event => {\n _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL');\n _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache');\n _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n\n _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n span,\n entry,\n event,\n timeOrigin,\n name = event,\n) {\n const eventEnd = _getEndPropertyNameForNavigationTiming(event) ;\n const end = entry[eventEnd];\n const start = entry[`${event}Start`];\n if (!start || !end) {\n return;\n }\n startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n op: `browser.${name}`,\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n}\n\nfunction _getEndPropertyNameForNavigationTiming(event) {\n if (event === 'secureConnection') {\n return 'connectEnd';\n }\n if (event === 'fetch') {\n return 'domainLookupStart';\n }\n return `${event}End`;\n}\n\n/** Create request and response related spans */\nfunction _addRequest(span, entry, timeOrigin) {\n const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart );\n const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd );\n const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart );\n if (entry.responseEnd) {\n // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n op: 'browser.request',\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n op: 'browser.response',\n name: entry.name,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n }\n}\n\n/**\n * Create resource-related spans.\n * Exported only for tests.\n */\nfunction _addResourceSpans(\n span,\n entry,\n resourceUrl,\n startTime,\n duration,\n timeOrigin,\n) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const parsedUrl = parseUrl(resourceUrl);\n\n const attributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n // `deliveryType` is experimental and does not exist everywhere\n const deliveryType = (entry ).deliveryType;\n if (deliveryType != null) {\n attributes['http.response_delivery_type'] = deliveryType;\n }\n\n // Types do not reflect this property yet\n const renderBlockingStatus = (entry )\n .renderBlockingStatus;\n if (renderBlockingStatus) {\n attributes['resource.render_blocking_status'] = renderBlockingStatus;\n }\n\n if (parsedUrl.protocol) {\n attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n }\n\n if (parsedUrl.host) {\n attributes['server.address'] = parsedUrl.host;\n }\n\n attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n const { name, version } = extractNetworkProtocol(entry.nextHopProtocol);\n attributes['network.protocol.name'] = name;\n attributes['network.protocol.version'] = version;\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n startAndEndSpan(span, startTimestamp, endTimestamp, {\n name: resourceUrl.replace(WINDOW.location.origin, ''),\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n attributes,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span) {\n const navigator = WINDOW.navigator ;\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n span.setAttribute('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n span.setAttribute('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _setWebVitalAttributes(span) {\n if (_lcpEntry) {\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n span.setAttribute('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n if (_lcpEntry.loadTime != null) {\n // loadTime is the time of LCP that's related to receiving the LCP element response..\n span.setAttribute('lcp.loadTime', _lcpEntry.loadTime);\n }\n\n if (_lcpEntry.renderTime != null) {\n // renderTime is loadTime + rendering time\n // it's 0 if the LCP element is loaded from a 3rd party origin that doesn't send the\n // `Timing-Allow-Origin` header.\n span.setAttribute('lcp.renderTime', _lcpEntry.renderTime);\n }\n\n span.setAttribute('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n _clsEntry.sources.forEach((source, index) =>\n span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n attributes,\n entry,\n key,\n dataKey,\n) {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n attributes[dataKey] = entryVal;\n }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n const navEntry = getNavigationEntry(false);\n if (!navEntry) {\n return;\n }\n\n const { responseStart, requestStart } = navEntry;\n\n if (requestStart <= responseStart) {\n _measurements['ttfb.requestTime'] = {\n value: responseStart - requestStart,\n unit: 'millisecond',\n };\n }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingInteractions, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=browserMetrics.js.map\n","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target) => {\n const globalObject = WINDOW ;\n const targetObj = globalObject[target];\n const proto = targetObj && targetObj.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = (this.__sentry_instrumentation_handlers__ =\n this.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener) {\n return function ( type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n const handlers = this.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete this.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler,\n globalListener = false,\n) {\n return (event) => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event) {\n try {\n return event.target ;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { addHandler, maybeInstrument, supportsHistory, triggerHandlers, fill } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory() {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function ( ...args) {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n const handlerData = { from, to };\n triggerHandlers('history', handlerData);\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n function historyReplacementFunction(originalHistoryFunction) {\n return function ( ...args) {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n const handlerData = { from, to };\n triggerHandlers('history', handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nexport { addHistoryInstrumentationHandler };\n//# sourceMappingURL=history.js.map\n","import { isNativeFunction, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n name,\n) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n\n let impl = WINDOW[name] ;\n\n // Fast path to avoid DOM I/O\n if (isNativeFunction(impl)) {\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n }\n\n const document = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl = contentWindow[name] ;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n // Could not create sandbox iframe, just use window.xxx\n DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl) {\n return impl;\n }\n\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nfunction fetch(...rest) {\n return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n return getNativeImplementation('setTimeout')(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { addHandler, maybeInstrument, timestampInSeconds, isString, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types.js';\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n if (!(WINDOW ).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.open = new Proxy(xhrproto.open, {\n apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) {\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the error, that was caused by your XHR call did not\n // have a stack trace. If you are using HttpClient integration,\n // this is the expected behavior, as we are using this virtual error to capture\n // the location of your XHR call, and group your HttpClient events accordingly.\n const virtualError = new Error();\n\n const startTimestamp = timestampInSeconds() * 1000;\n\n // open() should always be called with two or more arguments\n // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : undefined;\n const url = parseUrl(xhrOpenArgArray[1]);\n\n if (!method || !url) {\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n }\n\n xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {},\n };\n\n // if Sentry key appears in URL, don't capture it as a request\n if (method === 'POST' && url.match(/sentry_key/)) {\n xhrOpenThisArg.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (xhrOpenThisArg.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhrOpenThisArg.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData = {\n endTimestamp: timestampInSeconds() * 1000,\n startTimestamp,\n xhr: xhrOpenThisArg,\n virtualError,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === 'function') {\n xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n onreadystatechangeHandler();\n return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n },\n });\n } else {\n xhrOpenThisArg.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n apply(\n originalSetRequestHeader,\n setRequestHeaderThisArg,\n setRequestHeaderArgArray,\n ) {\n const [header, value] = setRequestHeaderArgArray;\n\n const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n },\n });\n\n return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n xhrproto.send = new Proxy(xhrproto.send, {\n apply(originalSend, sendThisArg, sendArgArray) {\n const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(sendThisArg, sendArgArray);\n }\n\n if (sendArgArray[0] !== undefined) {\n sentryXhrData.body = sendArgArray[0];\n }\n\n const handlerData = {\n startTimestamp: timestampInSeconds() * 1000,\n xhr: sendThisArg,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(sendThisArg, sendArgArray);\n },\n });\n}\n\nfunction parseUrl(url) {\n if (isString(url)) {\n return url;\n }\n\n try {\n // url can be a string or URL\n // but since URL is not available in IE11, we do not check for it,\n // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n // If that fails, we just return undefined\n return (url ).toString();\n } catch (e2) {} // eslint-disable-line no-empty\n\n return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","import { browserPerformanceTimeOrigin, getActiveSpan, getRootSpan, spanToJSON, getCurrentScope, htmlTreeAsString, dropUndefinedKeys, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE } from '@sentry/core';\nimport { addInpInstrumentationHandler, addPerformanceInstrumentationHandler, isPerformanceEventTiming } from './instrument.js';\nimport { getBrowserPerformanceAPI, msToSec, startStandaloneWebVitalSpan } from './utils.js';\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = new Map();\n\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP() {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n const inpCallback = _trackINP();\n\n return () => {\n inpCallback();\n };\n }\n\n return () => undefined;\n}\n\nconst INP_ENTRY_MAP = {\n click: 'click',\n pointerdown: 'click',\n pointerup: 'click',\n mousedown: 'click',\n mouseup: 'click',\n touchstart: 'click',\n touchend: 'click',\n mouseover: 'hover',\n mouseout: 'hover',\n mouseenter: 'hover',\n mouseleave: 'hover',\n pointerover: 'hover',\n pointerout: 'hover',\n pointerenter: 'hover',\n pointerleave: 'hover',\n dragstart: 'drag',\n dragend: 'drag',\n drag: 'drag',\n dragenter: 'drag',\n dragleave: 'drag',\n dragover: 'drag',\n drop: 'drag',\n keydown: 'press',\n keyup: 'press',\n keypress: 'press',\n input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP() {\n return addInpInstrumentationHandler(({ metric }) => {\n if (metric.value == undefined) {\n return;\n }\n\n const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n if (!entry) {\n return;\n }\n\n const { interactionId } = entry;\n const interactionType = INP_ENTRY_MAP[entry.name];\n\n /** Build the INP span, create an envelope from the span, and then send the envelope */\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(metric.value);\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n // where we cache the route per interactionId\n const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n const spanToUse = cachedSpan || rootSpan;\n\n // Else, we try to use the active span.\n // Finally, we fall back to look at the transactionName on the scope\n const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope().getScopeData().transactionName;\n\n const name = htmlTreeAsString(entry.target);\n const attributes = dropUndefinedKeys({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n });\n\n const span = startStandaloneWebVitalSpan({\n name,\n transaction: routeName,\n attributes,\n startTime,\n });\n\n if (span) {\n span.addEvent('inp', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n });\n\n span.end(startTime + duration);\n }\n });\n}\n\n/**\n * Register a listener to cache route information for INP interactions.\n * TODO(v9): `latestRoute` no longer needs to be passed in and will be removed in v9.\n */\nfunction registerInpInteractionListener(_latestRoute) {\n const handleEntries = ({ entries }) => {\n const activeSpan = getActiveSpan();\n const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n\n entries.forEach(entry => {\n if (!isPerformanceEventTiming(entry) || !activeRootSpan) {\n return;\n }\n\n const interactionId = entry.interactionId;\n if (interactionId == null) {\n return;\n }\n\n // If the interaction was already recorded before, nothing more to do\n if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n return;\n }\n\n // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n if (LAST_INTERACTIONS.length > 10) {\n const last = LAST_INTERACTIONS.shift() ;\n INTERACTIONS_SPAN_MAP.delete(last);\n }\n\n // We add the interaction to the list of recorded interactions\n // and store the span for this interaction\n LAST_INTERACTIONS.push(interactionId);\n INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n });\n };\n\n addPerformanceInstrumentationHandler('event', handleEntries);\n addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n\nexport { registerInpInteractionListener, startTrackingINP };\n//# sourceMappingURL=inp.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport, rejectedSyncPromise } from '@sentry/core';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n options,\n nativeFetch = getNativeImplementation('fetch'),\n) {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request) {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n if (!nativeFetch) {\n clearCachedImplementation('fetch');\n return rejectedSyncPromise('No fetch implementation available');\n }\n\n try {\n // TODO: This may need a `suppressTracing` call in the future when we switch the browser SDK to OTEL\n return nativeFetch(options.url, requestOptions).then(response => {\n pendingBodySize -= requestSize;\n pendingCount--;\n return {\n statusCode: response.status,\n headers: {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n },\n };\n });\n } catch (e) {\n clearCachedImplementation('fetch');\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\n\n// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\n filename,\n function: func === '' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\n const parts = chromeRegex.exec(line) ;\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]) ;\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n const parts = geckoREgex.exec(line) ;\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]) ;\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n const parts = winjsRegex.exec(line) ;\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n const parts = opera10Regex.exec(line) ;\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n const parts = opera11Regex.exec(line) ;\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? (func.split('@')[0] ) : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getClient, addBreadcrumb, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\n\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n return function addSentryBreadcrumb(event) {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client,\n dom,\n) {\n return function _innerDomBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event ;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n return function _consoleBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n return function _xhrBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data = {\n method,\n url,\n status_code,\n };\n\n const hint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code);\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n return function _fetchBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data = handlerData.fetchData;\n const hint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response ;\n const data = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(data.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n return function _historyBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event) {\n return !!event && !!(event ).target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'BroadcastChannel',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'SharedWorker',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n }\n\n if (_options.setInterval) {\n fill(WINDOW, 'setInterval', _wrapTimeFunction);\n }\n\n if (_options.requestAnimationFrame) {\n fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n },\n };\n}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n return function ( ...args) {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: false,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\nfunction _wrapRAF(original) {\n return function ( callback) {\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend) {\n return function ( ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n fill(xhr, prop, function (original) {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\nfunction _wrapEventTarget(target) {\n const globalObject = WINDOW ;\n const targetObj = globalObject[target];\n const proto = targetObj && targetObj.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original)\n\n {\n return function ( eventName, fn, options) {\n try {\n if (isEventListenerObject(fn)) {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (e2) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n wrap(fn, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(proto, 'removeEventListener', function (originalRemoveEventListener)\n\n {\n return function ( eventName, fn, options) {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n try {\n const originalEventHandler = (fn ).__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, fn, options);\n };\n });\n}\n\nfunction isEventListenerObject(obj) {\n return typeof (obj ).handleEvent === 'function';\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { defineIntegration, logger, startSession, captureSession } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * When added, automatically creates sessions which allow you to track adoption and crashes (crash free rate) in your Releases in Sentry.\n * More information: https://docs.sentry.io/product/releases/health/\n *\n * Note: In order for session tracking to work, you need to set up Releases: https://docs.sentry.io/product/releases/\n */\nconst browserSessionIntegration = defineIntegration(() => {\n return {\n name: 'BrowserSession',\n setupOnce() {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD &&\n logger.warn('Using the `browserSessionIntegration` in non-browser environments is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n },\n };\n});\n\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event = _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e );\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onunhandledrejection',\n },\n });\n });\n}\n\nfunction _getUnhandledRejectionError(error) {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in (error )) {\n return (error ).reason;\n }\n\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n if ('detail' in (error ) && 'reason' in (error ).detail) {\n return (error ).detail.reason;\n }\n } catch (e2) {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\nfunction _enhanceEventWithInitialFrame(\n event,\n url,\n line,\n column,\n) {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = column;\n const lineno = line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type) {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n const client = getClient();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n\nexport { globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nconst httpContextIntegration = defineIntegration(() => {\n return {\n name: 'HttpContext',\n preprocessEvent(event) {\n // if none of the information we want exists, don't bother\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...event.request, ...(url && { url }), headers };\n\n event.request = request;\n },\n };\n});\n\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, dedupeIntegration, consoleSandbox, supportsFetch, logger, stackParserFromStackParserOptions, getIntegrationsToSetup, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, getClient } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(options) {\n /**\n * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n * `getDefaultIntegrations` but with an adjusted set of integrations.\n */\n const integrations = [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n ];\n\n // eslint-disable-next-line deprecation/deprecation\n if (options.autoSessionTracking !== false) {\n integrations.push(browserSessionIntegration());\n }\n\n return integrations;\n}\n\nfunction applyDefaultOptions(optionsArg = {}) {\n const defaultOptions = {\n defaultIntegrations: getDefaultIntegrations(optionsArg),\n release:\n typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n ? __SENTRY_RELEASE__\n : WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id // This supports the variable that sentry-webpack-plugin injects\n ? WINDOW.SENTRY_RELEASE.id\n : undefined,\n autoSessionTracking: true,\n sendClientReports: true,\n };\n\n // TODO: Instead of dropping just `defaultIntegrations`, we should simply\n // call `dropUndefinedKeys` on the entire `optionsArg`.\n // However, for this to work we need to adjust the `hasTracingEnabled()` logic\n // first as it differentiates between `undefined` and the key not being in the object.\n if (optionsArg.defaultIntegrations == null) {\n delete optionsArg.defaultIntegrations;\n }\n\n return { ...defaultOptions, ...optionsArg };\n}\n\nfunction shouldShowBrowserExtensionError() {\n const windowWithMaybeExtension =\n typeof WINDOW.window !== 'undefined' && (WINDOW );\n if (!windowWithMaybeExtension) {\n // No need to show the error if we're not in a browser window environment (e.g. service workers)\n return false;\n }\n\n const extensionKey = windowWithMaybeExtension.chrome ? 'chrome' : 'browser';\n const extensionObject = windowWithMaybeExtension[extensionKey];\n\n const runtimeId = extensionObject && extensionObject.runtime && extensionObject.runtime.id;\n const href = (WINDOW.location && WINDOW.location.href) || '';\n\n const extensionProtocols = ['chrome-extension:', 'moz-extension:', 'ms-browser-extension:', 'safari-web-extension:'];\n\n // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n const isDedicatedExtensionPage =\n !!runtimeId && WINDOW === WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}//`));\n\n // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n // see: https://github.com/getsentry/sentry-javascript/issues/12668\n const isNWjs = typeof windowWithMaybeExtension.nw !== 'undefined';\n\n return !!runtimeId && !isDedicatedExtensionPage && !isNWjs;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(browserOptions = {}) {\n const options = applyDefaultOptions(browserOptions);\n\n if (!options.skipBrowserExtensionCheck && shouldShowBrowserExtensionError()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(\n '[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n );\n });\n return;\n }\n\n if (DEBUG_BUILD) {\n if (!supportsFetch()) {\n logger.warn(\n 'No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill.',\n );\n }\n }\n const clientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || makeFetchTransport,\n };\n\n return initAndBind(BrowserClient, clientOptions);\n}\n\n/**\n * All properties the report dialog supports\n */\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nfunction showReportDialog(options = {}) {\n // doesn't work without a document (React Native)\n if (!WINDOW.document) {\n DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const scope = getCurrentScope();\n const client = scope.getClient();\n const dsn = client && client.getDsn();\n\n if (!dsn) {\n DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n const eventId = lastEventId();\n if (eventId) {\n options.eventId = eventId;\n }\n }\n\n const script = WINDOW.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n const { onClose } = options;\n if (onClose) {\n const reportDialogClosedMessageHandler = (event) => {\n if (event.data === '__sentry_reportdialog_closed__') {\n try {\n onClose();\n } finally {\n WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n }\n }\n };\n WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n }\n\n const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n callback();\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\nfunction captureUserFeedback(feedback) {\n const client = getClient();\n if (client) {\n // eslint-disable-next-line deprecation/deprecation\n client.captureUserFeedback(feedback);\n }\n}\n\nexport { captureUserFeedback, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog };\n//# sourceMappingURL=sdk.js.map\n","import { _nullishCoalesce, _optionalChain } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger as logger$1, severityLevelFromString, captureException, addBreadcrumb, uuid4, getClient, getLocationHref, getCurrentScope, getActiveSpan, getDynamicSamplingContextFromSpan, isSentryRequestUrl, dropUndefinedKeys, stringMatchesSomePattern, addEventProcessor, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, prepareEvent, getIsolationScope, resolvedSyncPromise, updateRateLimits, isRateLimited, setContext, getRootSpan, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, isBrowser, parseSampleRate, consoleSandbox } from '@sentry/core';\nimport { setTimeout as setTimeout$3, addPerformanceInstrumentationHandler, addLcpInstrumentationHandler, addClsInstrumentationHandler, addFidInstrumentationHandler, addInpInstrumentationHandler, SENTRY_XHR_DATA_KEY, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$3;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$3 || (NodeType$3 = {}));\n\nfunction isElement$1(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')) {\n cssText = cssText.replace(/\\sbackground-clip:\\s*text;/g, ' -webkit-background-clip: text; background-clip: text;');\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n }\n else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n try {\n const rules = s.rules || s.cssRules;\n return rules\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction fixAllCssProperty(rule) {\n let styles = '';\n for (let i = 0; i < rule.style.length; i++) {\n const styleDeclaration = rule.style;\n const attribute = styleDeclaration[i];\n const isImportant = styleDeclaration.getPropertyPriority(attribute);\n styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : ''};`;\n }\n return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified =\n stringifyStylesheet(rule.styleSheet) ||\n escapeImportStatement(rule);\n }\n catch (error) {\n }\n }\n else if (isCSSStyleRule(rule)) {\n let cssText = rule.cssText;\n const needsSafariColonFix = rule.selectorText.includes(':');\n const needsAllFix = typeof rule.style['all'] === 'string' && rule.style['all'];\n if (needsAllFix) {\n cssText = fixAllCssProperty(rule);\n }\n if (needsSafariColonFix) {\n cssText = fixSafariColons(cssText);\n }\n if (needsSafariColonFix || needsAllFix) {\n return cssText;\n }\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\nclass Mirror {\n constructor() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n getId(n) {\n if (!n)\n return -1;\n const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n return _nullishCoalesce$1(id, () => ( -1));\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n) {\n return this.nodeMetaMap.get(n) || null;\n }\n removeNodeFromMap(n) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n if (n.childNodes) {\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n replace(id, n) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\nfunction createMirror() {\n return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n if (tagName === 'OPTION') {\n tagName = 'SELECT';\n }\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n (type && maskInputOptions[type]) ||\n type === 'password' ||\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n let text = value || '';\n if (!isMasked) {\n return text;\n }\n if (maskInputFn) {\n text = maskInputFn(text, element);\n }\n return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ?\n toLowerCase(type)\n : null;\n}\nfunction getInputValue(el, tagName, type) {\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return el.getAttribute('value') || '';\n }\n return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n let url;\n try {\n url = new URL(path, _nullishCoalesce$1(baseURL, () => ( window.location.href)));\n }\n catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return _nullishCoalesce$1(_optionalChain$5([match, 'optionalAccess', _6 => _6[1]]), () => ( null));\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n const cached = cachedImplementations$1[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations$1[name] = impl.bind(window));\n}\nfunction setTimeout$2(...rest) {\n return getImplementation$1('setTimeout')(...rest);\n}\nfunction clearTimeout$2(...rest) {\n return getImplementation$1('clearTimeout')(...rest);\n}\nfunction getIframeContentDocument(iframe) {\n try {\n return iframe.contentDocument;\n }\n catch (e) {\n }\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n let descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nconst cachedDocument = new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n let a = cachedDocument.get(doc);\n if (!a) {\n a = doc.createElement('a');\n cachedDocument.set(doc, a);\n }\n if (!customHref) {\n customHref = '';\n }\n else if (customHref.startsWith('blob:') || customHref.startsWith('data:')) {\n return customHref;\n }\n a.setAttribute('href', customHref);\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n if (!value) {\n return value;\n }\n if (name === 'src' ||\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset') {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style') {\n return absoluteToStylesheet(value, getHref(doc));\n }\n else if (tagName === 'object' && name === 'data') {\n return absoluteToDoc(doc, value);\n }\n if (typeof maskAttributeFn === 'function') {\n return maskAttributeFn(name, value, element);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n try {\n if (unblockSelector && element.matches(unblockSelector)) {\n return false;\n }\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (let eIndex = element.classList.length; eIndex--;) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n }\n catch (e) {\n }\n return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n for (let eIndex = el.classList.length; eIndex--;) {\n const className = el.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n if (!node)\n return -1;\n if (node.nodeType !== node.ELEMENT_NODE)\n return -1;\n if (distance > limit)\n return -1;\n if (matchPredicate(node))\n return distance;\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n return (node) => {\n const el = node;\n if (el === null)\n return false;\n try {\n if (className) {\n if (typeof className === 'string') {\n if (el.matches(`.${className}`))\n return true;\n }\n else if (elementClassMatchesRegex(el, className)) {\n return true;\n }\n }\n if (selector && el.matches(selector))\n return true;\n return false;\n }\n catch (e2) {\n return false;\n }\n };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (el === null)\n return false;\n if (el.tagName === 'INPUT') {\n const autocomplete = el.getAttribute('autocomplete');\n const disallowedAutocompleteValues = [\n 'current-password',\n 'new-password',\n 'cc-number',\n 'cc-exp',\n 'cc-exp-month',\n 'cc-exp-year',\n 'cc-csc',\n ];\n if (disallowedAutocompleteValues.includes(autocomplete)) {\n return true;\n }\n }\n let maskDistance = -1;\n let unmaskDistance = -1;\n if (maskAllText) {\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n if (unmaskDistance < 0) {\n return true;\n }\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n }\n else {\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n if (maskDistance < 0) {\n return false;\n }\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n }\n return maskDistance >= 0\n ? unmaskDistance >= 0\n ? maskDistance <= unmaskDistance\n : true\n : unmaskDistance >= 0\n ? false\n : !!maskAllText;\n }\n catch (e) {\n }\n return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n const timer = setTimeout$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout$2(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout$2(listener, 0);\n return iframeEl.addEventListener('load', listener);\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n }\n catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout$2(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout$2(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n const rootId = getRootId(doc, mirror);\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$3.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$3.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId,\n };\n case n.ELEMENT_NODE:\n return serializeElementNode(n, {\n doc,\n blockClass,\n blockSelector,\n unblockSelector,\n inlineStylesheet,\n maskAttributeFn,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n });\n case n.TEXT_NODE:\n return serializeTextNode(n, {\n doc,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskTextFn,\n maskInputOptions,\n maskInputFn,\n rootId,\n });\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType$3.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$3.Comment,\n textContent: n.textContent || '',\n rootId,\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror) {\n if (!mirror.hasNode(doc))\n return undefined;\n const docId = mirror.getId(doc);\n return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n const parentTagName = n.parentNode && n.parentNode.tagName;\n let textContent = n.textContent;\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if (_optionalChain$5([n, 'access', _7 => _7.parentNode, 'access', _8 => _8.sheet, 'optionalAccess', _9 => _9.cssRules])) {\n textContent = stringifyStylesheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n }\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n textContent = maskTextFn\n ? maskTextFn(textContent, n.parentElement)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n textContent = maskInputFn\n ? maskInputFn(textContent, n.parentNode)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (parentTagName === 'OPTION' && textContent) {\n const isInputMasked = shouldMaskInput({\n type: null,\n tagName: parentTagName,\n maskInputOptions,\n });\n textContent = maskInputValue({\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n element: n,\n value: textContent,\n maskInputFn,\n });\n }\n return {\n type: NodeType$3.Text,\n textContent: textContent || '',\n isStyle,\n rootId,\n };\n}\nfunction serializeElementNode(n, options) {\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n const tagName = getValidTagName(n);\n let attributes = {};\n const len = n.attributes.length;\n for (let i = 0; i < len; i++) {\n const attr = n.attributes[i];\n if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n }\n }\n if (tagName === 'link' && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\n return s.href === n.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n attributes.rel = null;\n attributes.href = null;\n attributes.crossorigin = null;\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText || n.textContent || '').trim().length) {\n const cssText = stringifyStylesheet(n.sheet);\n if (cssText) {\n attributes._cssText = absoluteToStylesheet(cssText, getHref(doc));\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select' ||\n tagName === 'option') {\n const el = n;\n const type = getInputType(el);\n const value = getInputValue(el, toUpperCase(tagName), type);\n const checked = el.checked;\n if (type !== 'submit' && type !== 'button' && value) {\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n type,\n tagName: toUpperCase(tagName),\n maskInputOptions,\n }));\n attributes.value = maskInputValue({\n isMasked: forceMask,\n element: el,\n value,\n maskInputFn,\n });\n }\n if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes.selected = true;\n }\n else {\n delete attributes.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n const blankCanvas = doc.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n const image = n;\n const imageSrc = image.currentSrc || image.getAttribute('src') || '';\n const priorCrossOrigin = image.crossOrigin;\n const recordInlineImage = () => {\n image.removeEventListener('load', recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n if (image.crossOrigin !== 'anonymous') {\n image.crossOrigin = 'anonymous';\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n return;\n }\n else {\n console.warn(`Cannot inline img src=${imageSrc}! Error: ${err}`);\n }\n }\n if (image.crossOrigin === 'anonymous') {\n priorCrossOrigin\n ? (attributes.crossOrigin = priorCrossOrigin)\n : image.removeAttribute('crossorigin');\n }\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes.rr_mediaCurrentTime = n.currentTime;\n }\n if (!newlyAddedElement) {\n if (n.scrollLeft) {\n attributes.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes.rr_scrollTop = n.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n };\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n if (!needBlock && !getIframeContentDocument(n)) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n }\n catch (e) {\n }\n return {\n type: NodeType$3.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock,\n rootId,\n isCustom: isCustomElement,\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined || maybeAttr === null) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) {\n return true;\n }\n else if (sn.type === NodeType$3.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n (sn.attributes.rel === 'preload' ||\n sn.attributes.rel === 'modulepreload')) ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n extractFileExtension(sn.attributes.href) === 'js'))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n let { preserveWhiteSpace = true } = options;\n const _serializedNode = serializeNode(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n let id;\n if (mirror.hasNode(n)) {\n id = mirror.getId(n);\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType$3.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror.add(n, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$3.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRoot = n.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$3.Document ||\n serializedNode.type === NodeType$3.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$3.Element &&\n serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n };\n for (const childN of Array.from(n.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement$1(n) && n.shadowRoot) {\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n.shadowRoot) &&\n (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode &&\n isShadowRoot(n.parentNode) &&\n isNativeShadowDom(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$3.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = getIframeContentDocument(n);\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$3.Element &&\n serializedNode.tagName === 'link' &&\n typeof serializedNode.attributes.rel === 'string' &&\n (serializedNode.attributes.rel === 'stylesheet' ||\n (serializedNode.attributes.rel === 'preload' &&\n typeof serializedNode.attributes.href === 'string' &&\n extractFileExtension(serializedNode.attributes.href) === 'css'))) {\n onceStylesheetLoaded(n, () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n }\n : maskAllInputs === false\n ? {}\n : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true,\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return serializeNodeWithId(n, {\n doc: n,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false,\n });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nfunction throttle$1(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function (...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout$1(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout$1(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked\n ? d\n : {\n set(value) {\n setTimeout$1(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n });\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n }\n catch (e2) {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n 0,\n };\n}\nfunction getWindowHeight() {\n return (window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n return (window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth));\n}\nfunction closestElementOfNode(node) {\n if (!node) {\n return null;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = closestElementOfNode(node);\n if (!el) {\n return false;\n }\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n if (!checkAncestors) {\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\n return blockedPredicate(el) && !isUnblocked;\n }\n const blockDistance = distanceToMatch(el, blockedPredicate);\n let unblockDistance = -1;\n if (blockDistance < 0) {\n return false;\n }\n if (unblockSelector) {\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n }\n if (blockDistance > -1 && unblockDistance < 0) {\n return true;\n }\n return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype\n .forEach;\n }\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype\n .forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError('1 argument is required');\n }\n do {\n if (this === node) {\n return true;\n }\n } while ((node = node && node.parentNode));\n return false;\n };\n }\n}\nfunction isSerializedIframe(n, mirror) {\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n return Boolean(n.nodeName === 'LINK' &&\n n.nodeType === n.ELEMENT_NODE &&\n n.getAttribute &&\n n.getAttribute('rel') === 'stylesheet' &&\n mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n constructor() {\n this.id = 1;\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n }\n getId(stylesheet) {\n return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === undefined) {\n newId = this.id++;\n }\n else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n) {\n let shadowHost = null;\n if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n n.getRootNode().host)\n shadowHost = n.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n) {\n let rootShadowHost = n;\n let shadowHost;\n while ((shadowHost = getShadowHost(rootShadowHost)))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n);\n return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n) || shadowHostInDom(n);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n const document = window.document;\n let impl = window[name];\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl =\n contentWindow[name];\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedImplementations[name] = impl.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n return getImplementation('requestAnimationFrame')(...rest);\n}\nfunction setTimeout$1(...rest) {\n return getImplementation('setTimeout')(...rest);\n}\nfunction clearTimeout$1(...rest) {\n return getImplementation('clearTimeout')(...rest);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\n\nvar NodeType$1;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\nvar NodeType$2;\n(function (NodeType) {\n NodeType[NodeType[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\n NodeType[NodeType[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n NodeType[NodeType[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\n NodeType[NodeType[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n NodeType[NodeType[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\n NodeType[NodeType[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\n NodeType[NodeType[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\n NodeType[NodeType[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\n NodeType[NodeType[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n NodeType[NodeType[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n NodeType[NodeType[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\n NodeType[NodeType[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n})(NodeType$2 || (NodeType$2 = {}));\n\nfunction getIFrameContentDocument(iframe) {\n try {\n return iframe.contentDocument;\n }\n catch (e) {\n }\n}\nfunction getIFrameContentWindow(iframe) {\n try {\n return iframe.contentWindow;\n }\n catch (e) {\n }\n}\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n return '__ln' in n;\n}\nclass DoubleLinkedList {\n constructor() {\n this.length = 0;\n this.head = null;\n this.tail = null;\n }\n get(position) {\n if (position >= this.length) {\n throw new Error('Position outside of list range');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n }\n return current;\n }\n addNode(n) {\n const node = {\n value: n,\n previous: null,\n next: null,\n };\n n.__ln = node;\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n const current = n.previousSibling.__ln.next;\n node.next = current;\n node.previous = n.previousSibling.__ln;\n n.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n }\n else if (n.nextSibling &&\n isNodeInLinkedList(n.nextSibling) &&\n n.nextSibling.__ln.previous) {\n const current = n.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n.nextSibling.__ln;\n n.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n }\n else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n) {\n const current = n.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n }\n else {\n this.tail = null;\n }\n }\n else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n }\n else {\n this.tail = current.previous;\n }\n }\n if (n.__ln) {\n delete n.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n this.frozen = false;\n this.locked = false;\n this.texts = [];\n this.attributes = [];\n this.attributeMap = new WeakMap();\n this.removes = [];\n this.mapRemoves = [];\n this.movedMap = {};\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.processMutations = (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n };\n this.emit = () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n) => {\n let ns = n;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n) => {\n if (!n.parentNode || !inDom(n)) {\n return;\n }\n const parentId = isShadowRoot(n.parentNode)\n ? this.mirror.getId(getShadowHost(n))\n : this.mirror.getId(n.parentNode);\n const nextId = getNextId(n);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n);\n }\n const sn = serializeNodeWithId(n, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskAllText: this.maskAllText,\n unblockSelector: this.unblockSelector,\n maskTextClass: this.maskTextClass,\n unmaskTextClass: this.unmaskTextClass,\n maskTextSelector: this.maskTextSelector,\n unmaskTextSelector: this.unmaskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskAttributeFn: this.maskAttributeFn,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror) &&\n !isBlocked(currentN, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n)) {\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n if (isBlocked(iframe, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n return;\n }\n this.iframeManager.attachIframe(iframe, childSn);\n if (iframe.contentWindow) {\n this.canvasManager.addWindow(iframe.contentWindow);\n }\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn,\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n of this.movedSet) {\n if (isParentRemoved(this.removes, n, this.mirror) &&\n !this.movedSet.has(n.parentNode)) {\n continue;\n }\n pushAdd(n);\n }\n for (const n of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n) &&\n !isParentRemoved(this.removes, n, this.mirror)) {\n pushAdd(n);\n }\n else if (isAncestorInSet(this.movedSet, n)) {\n pushAdd(n);\n }\n else {\n this.droppedSet.add(n);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n }\n else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode &&\n unhandledNode.parentNode.nodeType ===\n Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode\n .host;\n const parentId = this.mirror.getId(shadowHost);\n if (parentId !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts\n .map((text) => ({\n id: this.mirror.getId(text.node),\n value: text.value,\n }))\n .filter((text) => !addedIds.has(text.id))\n .filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes\n .map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === 'string') {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\n attributes.style.split('var(').length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes: attributes,\n };\n })\n .filter((attribute) => !addedIds.has(attribute.id))\n .filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds,\n };\n if (!payload.texts.length &&\n !payload.attributes.length &&\n !payload.removes.length &&\n !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.attributeMap = new WeakMap();\n this.removes = [];\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n };\n this.processMutation = (m) => {\n if (isIgnored(m.target, this.mirror)) {\n return;\n }\n switch (m.type) {\n case 'characterData': {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n ? this.maskTextFn\n ? this.maskTextFn(value, closestElementOfNode(m.target))\n : value.replace(/[\\S]/g, '*')\n : value,\n node: m.target,\n });\n }\n break;\n }\n case 'attributes': {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === 'value') {\n const type = getInputType(target);\n const tagName = target.tagName;\n value = getInputValue(target, tagName, type);\n const isInputMasked = shouldMaskInput({\n maskInputOptions: this.maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n value = maskInputValue({\n isMasked: forceMask,\n element: target,\n value,\n maskInputFn: this.maskInputFn,\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n value === m.oldValue) {\n return;\n }\n let item = this.attributeMap.get(m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n const iframeDoc = getIFrameContentDocument(target);\n if (!iframeDoc) {\n attributeName = 'rr_src';\n }\n else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {},\n };\n this.attributes.push(item);\n this.attributeMap.set(m.target, item);\n }\n if (attributeName === 'type' &&\n target.tagName === 'INPUT' &&\n (m.oldValue || '').toLowerCase() === 'password') {\n target.setAttribute('data-rr-is-password', 'true');\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n if (attributeName === 'style') {\n if (!this.unattachedDoc) {\n try {\n this.unattachedDoc =\n document.implementation.createHTMLDocument();\n }\n catch (e) {\n this.unattachedDoc = this.doc;\n }\n }\n const old = this.unattachedDoc.createElement('span');\n if (m.oldValue) {\n old.setAttribute('style', m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) ||\n newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === '') {\n item.styleDiff[pname] = newValue;\n }\n else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n }\n else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === '') {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case 'childList': {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n return;\n }\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n m.removedNodes.forEach((n) => {\n const nodeId = this.mirror.getId(n);\n const parentId = isShadowRoot(m.target)\n ? this.mirror.getId(m.target.host)\n : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n isIgnored(n, this.mirror) ||\n !isSerialized(n, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n)) {\n deepDelete(this.addedSet, n);\n this.droppedSet.add(n);\n }\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n) &&\n this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n);\n }\n else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n ? true\n : undefined,\n });\n }\n this.mapRemoves.push(n);\n });\n break;\n }\n }\n };\n this.genAdds = (n, target) => {\n if (this.processedNodeManager.inOtherBuffer(n, this))\n return;\n if (this.addedSet.has(n) || this.movedSet.has(n))\n return;\n if (this.mirror.hasNode(n)) {\n if (isIgnored(n, this.mirror)) {\n return;\n }\n this.movedSet.add(n);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n }\n }\n else {\n this.addedSet.add(n);\n this.droppedSet.delete(n);\n }\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n n.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n)) {\n n.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n);\n });\n }\n }\n };\n }\n init(options) {\n [\n 'mutationCb',\n 'blockClass',\n 'blockSelector',\n 'unblockSelector',\n 'maskAllText',\n 'maskTextClass',\n 'unmaskTextClass',\n 'maskTextSelector',\n 'unmaskTextSelector',\n 'inlineStylesheet',\n 'maskInputOptions',\n 'maskAttributeFn',\n 'maskTextFn',\n 'maskInputFn',\n 'keepIframeSrcFn',\n 'recordCanvas',\n 'inlineImages',\n 'slimDOMOptions',\n 'dataURLOptions',\n 'doc',\n 'mirror',\n 'iframeManager',\n 'stylesheetManager',\n 'shadowDomManager',\n 'canvasManager',\n 'processedNodeManager',\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n) {\n addsSet.delete(n);\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n let node = n.parentNode;\n while (node) {\n const parentId = mirror.getId(node);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\nfunction isAncestorInSet(set, n) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = ((...rest) => {\n try {\n return cb(...rest);\n }\n catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return () => {\n };\n }\n throw error;\n }\n });\n return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if ('composedPath' in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n }\n else if ('path' in event && event.path.length) {\n return event.path[0];\n }\n }\n catch (e2) {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver ||\n window.__rrMutationObserver;\n const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n if (angularZoneSymbol &&\n window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n if (options.onMutation && options.onMutation(mutations) === false) {\n return;\n }\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n }));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n ? sampling.mousemoveCallback\n : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle$1(callbackWrapper((source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt)\n ? evt.changedTouches[0]\n : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror.getId(target),\n timeOffset: nowTimestamp() - timeBaseline,\n });\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n ? IncrementalSource.Drag\n : evt instanceof MouseEvent\n ? IncrementalSource.MouseMove\n : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false,\n }));\n const handlers = [\n on('mousemove', updatePosition, doc),\n on('touchmove', updatePosition, doc),\n on('drag', updatePosition, doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true ||\n sampling.mouseInteraction === undefined\n ? {}\n : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if ('pointerType' in event) {\n switch (event.pointerType) {\n case 'mouse':\n pointerType = PointerTypes.Mouse;\n break;\n case 'touch':\n pointerType = PointerTypes.Touch;\n break;\n case 'pen':\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = 'TouchStart';\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = 'TouchEnd';\n }\n }\n else if (pointerType === PointerTypes.Pen) ;\n }\n else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if ((thisEventKey.startsWith('Touch') &&\n pointerType === PointerTypes.Touch) ||\n (thisEventKey.startsWith('Mouse') &&\n pointerType === PointerTypes.Mouse)) {\n pointerType = null;\n }\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e) {\n return;\n }\n const id = mirror.getId(target);\n const { clientX, clientY } = e;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...(pointerType !== null && { pointerType }),\n });\n };\n };\n Object.keys(MouseInteractions)\n .filter((key) => Number.isNaN(Number(key)) &&\n !key.endsWith('_Departed') &&\n disableMap[key] !== false)\n .forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace('mouse', 'pointer');\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const id = mirror.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top,\n });\n }\n else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop,\n });\n }\n }), sampling.scroll || 100));\n return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height),\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && toUpperCase(target.tagName);\n if (tagName === 'OPTION')\n target = target.parentElement;\n if (!target ||\n !tagName ||\n INPUT_TAGS.indexOf(tagName) < 0 ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const el = target;\n if (el.classList.contains(ignoreClass) ||\n (ignoreSelector && el.matches(ignoreSelector))) {\n return;\n }\n const type = getInputType(target);\n let text = getInputValue(el, tagName, type);\n let isChecked = false;\n const isInputMasked = shouldMaskInput({\n maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n if (type === 'radio' || type === 'checkbox') {\n isChecked = target.checked;\n }\n text = maskInputValue({\n isMasked: forceMask,\n element: target,\n value: text,\n maskInputFn,\n });\n cbWithDedup(target, userTriggeredOnInput\n ? { text, isChecked, userTriggered }\n : { text, isChecked });\n const name = target.name;\n if (type === 'radio' && name && isChecked) {\n doc\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n .forEach((el) => {\n if (el !== target) {\n const text = maskInputValue({\n isMasked: forceMask,\n element: el,\n value: getInputValue(el, tagName, type),\n maskInputFn,\n });\n cbWithDedup(el, userTriggeredOnInput\n ? { text, isChecked: !isChecked, userTriggered: false }\n : { text, isChecked: !isChecked });\n }\n });\n }\n }\n function cbWithDedup(target, v) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue ||\n lastInputValue.text !== v.text ||\n lastInputValue.isChecked !== v.isChecked) {\n lastInputValueMap.set(target, v);\n const id = mirror.getId(target);\n callbackWrapper(inputCb)({\n ...v,\n id,\n });\n }\n }\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, 'value'],\n [currentWindow.HTMLInputElement.prototype, 'checked'],\n [currentWindow.HTMLSelectElement.prototype, 'value'],\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false,\n });\n },\n }, false, currentWindow)));\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if ((hasNestedCSSRule('CSSGroupingRule') &&\n childRule.parentRule instanceof CSSGroupingRule) ||\n (hasNestedCSSRule('CSSMediaRule') &&\n childRule.parentRule instanceof CSSMediaRule) ||\n (hasNestedCSSRule('CSSSupportsRule') &&\n childRule.parentRule instanceof CSSSupportsRule) ||\n (hasNestedCSSRule('CSSConditionRule') &&\n childRule.parentRule instanceof CSSConditionRule)) {\n const rules = Array.from(childRule.parentRule.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n else if (childRule.parentStyleSheet) {\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id,\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n }\n else {\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n insertRule: type.prototype.insertRule,\n deleteRule: type.prototype.deleteRule,\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0,\n ],\n },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n let hostId = null;\n if (host.nodeName === '#document')\n hostId = mirror.getId(host);\n else\n hostId = mirror.getId(host.host);\n const patchTarget = host.nodeName === '#document'\n ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n : undefined;\n if (hostId === null ||\n hostId === -1 ||\n !patchTarget ||\n !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n },\n set(sheets) {\n const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n }\n catch (e) {\n }\n }\n return result;\n },\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: originalPropertyDescriptor.get,\n set: originalPropertyDescriptor.set,\n });\n });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate } = target;\n mediaInteractionCb({\n type,\n id: mirror.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n });\n }), sampling.media || 500));\n const handlers = [\n on('play', handler(0), doc),\n on('pause', handler(1), doc),\n on('seeked', handler(2), doc),\n on('volumechange', handler(3), doc),\n on('ratechange', handler(4), doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== 'string',\n descriptors,\n fontSource: typeof source === 'string'\n ? source\n : JSON.stringify(Array.from(new Uint8Array(source))),\n });\n return fontFace;\n };\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\n return function (fontFace) {\n setTimeout$1(callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [fontFace]);\n };\n });\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i = 0; i < count; i++) {\n const range = selection.getRangeAt(i);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror.getId(startContainer),\n startOffset,\n end: mirror.getId(endContainer),\n endOffset,\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n const win = doc.defaultView;\n if (!win || !win.customElements)\n return () => { };\n const restoreHandler = patch(win.customElements, 'define', function (original) {\n return function (name, constructor, options) {\n try {\n customElementCb({\n define: {\n name,\n },\n });\n }\n catch (e) {\n }\n return original.apply(this, [name, constructor, options]);\n };\n });\n return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n const currentWindow = o.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n let mutationObserver;\n if (o.recordDOM) {\n mutationObserver = initMutationObserver(o, o.doc);\n }\n const mousemoveHandler = initMoveObserver(o);\n const mouseInteractionHandler = initMouseInteractionObserver(o);\n const scrollHandler = initScrollObserver(o);\n const viewportResizeHandler = initViewportResizeObserver(o, {\n win: currentWindow,\n });\n const inputHandler = initInputObserver(o);\n const mediaInteractionHandler = initMediaInteractionObserver(o);\n let styleSheetObserver = () => { };\n let adoptedStyleSheetObserver = () => { };\n let styleDeclarationObserver = () => { };\n let fontObserver = () => { };\n if (o.recordDOM) {\n styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n if (o.collectFonts) {\n fontObserver = initFontObserver(o);\n }\n }\n const selectionObserver = initSelectionObserver(o);\n const customElementObserver = initCustomElementObserver(o);\n const pluginHandlers = [];\n for (const plugin of o.plugins) {\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n _optionalChain$2([mutationObserver, 'optionalAccess', _22 => _22.disconnect, 'call', _23 => _23()]);\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== 'undefined' &&\n window[prop].prototype &&\n 'insertRule' in window[prop].prototype &&\n 'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n this.generateIdFn = generateIdFn;\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== 'number')\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n constructor() {\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n }\n addIframe() {\n }\n addLoadListener() {\n }\n attachIframe() {\n }\n}\nclass IframeManager {\n constructor(options) {\n this.iframes = new WeakMap();\n this.crossOriginIframeMap = new WeakMap();\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n });\n _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n const iframeDoc = getIFrameContentDocument(iframeEl);\n if (iframeDoc &&\n iframeDoc.adoptedStyleSheets &&\n iframeDoc.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeDoc.adoptedStyleSheets, this.mirror.getId(iframeDoc));\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent)\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n }\n transformCrossOriginEvent(iframeEl, e) {\n switch (e.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e.data.node, iframeEl);\n const rootId = e.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e.data.node, rootId);\n return {\n timestamp: e.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e.data.node,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n },\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e;\n }\n case EventType.Custom: {\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n return e;\n }\n case EventType.IncrementalSnapshot: {\n switch (e.data.source) {\n case IncrementalSource.Mutation: {\n e.data.adds.forEach((n) => {\n this.replaceIds(n, iframeEl, [\n 'parentId',\n 'nextId',\n 'previousId',\n ]);\n this.replaceIdOnNode(n.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n.node, rootId);\n });\n e.data.removes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\n });\n e.data.attributes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n e.data.texts.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e.data, iframeEl, ['id']);\n return e;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n return e;\n }\n case IncrementalSource.Font: {\n return e;\n }\n case IncrementalSource.Selection: {\n e.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, ['start', 'end']);\n });\n return e;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n this.replaceStyleIds(style, iframeEl, ['styleId']);\n })]);\n return e;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n }\n else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$3.Document && !node.rootId)\n node.rootId = rootId;\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\n\nclass ShadowDomManagerNoop {\n init() {\n }\n addShadowRoot() {\n }\n observeAttachShadow() {\n }\n reset() {\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n this.shadowDoms = new WeakSet();\n this.restoreHandlers = [];\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n const observer = initMutationObserver({\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this,\n }, shadowRoot);\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n doc: shadowRoot,\n mirror: this.mirror,\n }));\n setTimeout$1(() => {\n if (shadowRoot.adoptedStyleSheets &&\n shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager,\n }, shadowRoot));\n }, 0);\n }\n observeAttachShadow(iframeElement) {\n const iframeDoc = getIFrameContentDocument(iframeElement);\n const iframeWindow = getIFrameContentWindow(iframeElement);\n if (!iframeDoc || !iframeWindow)\n return;\n this.patchAttachShadow(iframeWindow.Element, iframeDoc);\n }\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n return function (option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }));\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n }\n catch (e) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = new WeakSet();\n this.bypassOptions.canvasManager.resetShadowRoots();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n snapshot() {\n }\n addWindow() {\n }\n addShadowRoot() {\n }\n resetShadowRoots() {\n }\n}\n\nclass StylesheetManager {\n constructor(options) {\n this.trackedLinkElements = new WeakSet();\n this.styleMirror = new StyleSheetMirror();\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if ('_cssText' in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn\n .attributes,\n },\n ],\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: [],\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n rule: stringifyRule(r),\n index,\n })),\n });\n }\n else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = new WeakSet();\n }\n trackStylesheetInLinkElement(linkEl) {\n }\n}\n\nclass ProcessedNodeManager {\n constructor() {\n this.nodeMap = new WeakMap();\n this.active = false;\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n }\n add(node, buffer) {\n if (!this.active) {\n this.active = true;\n onRequestAnimationFrame(() => {\n this.nodeMap = new WeakMap();\n this.active = false;\n });\n }\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n destroy() {\n }\n}\n\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n if (Array.from([1], (x) => x * 2)[0] !== 2) {\n const cleanFrame = document.createElement('iframe');\n document.body.appendChild(cleanFrame);\n Array.from = _optionalChain([cleanFrame, 'access', _ => _.contentWindow, 'optionalAccess', _2 => _2.Array, 'access', _3 => _3.from]) || Array.from;\n document.body.removeChild(cleanFrame);\n }\n}\ncatch (err) {\n console.debug('Unable to override Array.from', err);\n}\nconst mirror = createMirror();\nfunction record(options = {}) {\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n ? options.recordAfter\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n registerErrorHandler(errorHandler);\n const inEmittingFrame = recordCrossOriginIframes\n ? window.parent === window\n : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n }\n catch (e) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error('emit function is required');\n }\n if (!inEmittingFrame && !passEmitsToParent) {\n return () => {\n };\n }\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n radio: true,\n checkbox: true,\n }\n : _maskInputOptions !== undefined\n ? _maskInputOptions\n : {};\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n headMetaAuthorship: _slimDOMOptions === 'all',\n headMetaDescKeywords: _slimDOMOptions === 'all',\n }\n : _slimDOMOptions\n ? _slimDOMOptions\n : {};\n polyfill();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e) => {\n for (const plugin of plugins || []) {\n if (plugin.eventProcessor) {\n e = plugin.eventProcessor(e);\n }\n }\n if (packFn &&\n !passEmitsToParent) {\n e = packFn(e);\n }\n return e;\n };\n wrappedEmit = (r, isCheckout) => {\n const e = r;\n e.timestamp = nowTimestamp();\n if (_optionalChain([mutationBuffers, 'access', _4 => _4[0], 'optionalAccess', _5 => _5.isFrozen, 'call', _6 => _6()]) &&\n e.type !== EventType.FullSnapshot &&\n !(e.type === EventType.IncrementalSnapshot &&\n e.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n _optionalChain([emit, 'optionalCall', _7 => _7(eventProcessor(e), isCheckout)]);\n }\n else if (passEmitsToParent) {\n const message = {\n type: 'rrweb',\n event: eventProcessor(e),\n origin: window.location.origin,\n isCheckout,\n };\n window.parent.postMessage(message, '*');\n }\n if (e.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e;\n incrementalSnapshotCount = 0;\n }\n else if (e.type === EventType.IncrementalSnapshot) {\n if (e.data.source === IncrementalSource.Mutation &&\n e.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms &&\n lastFullSnapshotEvent &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n const wrappedMutationEmit = (m) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m,\n },\n });\n };\n const wrappedScrollEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p,\n },\n });\n const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n });\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a,\n },\n });\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n });\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n ? new IframeManagerNoop()\n : new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit,\n });\n for (const plugin of plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n const canvasManager = _getCanvasManager(getCanvasManager, {\n mirror,\n win: window,\n mutationCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n }),\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n maxCanvasSize,\n sampling: sampling['canvas'],\n dataURLOptions,\n errorHandler,\n });\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n __RRWEB_EXCLUDE_SHADOW_DOM__\n ? new ShadowDomManagerNoop()\n : new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n onMutation,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager,\n },\n mirror,\n });\n const takeFullSnapshot = (isCheckout = false) => {\n if (!recordDOM) {\n return;\n }\n wrappedEmit({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight(),\n },\n }, isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n) => {\n if (isSerializedIframe(n, mirror)) {\n iframeManager.addIframe(n);\n }\n if (isSerializedStylesheet(n, mirror)) {\n stylesheetManager.trackLinkElement(n);\n }\n if (hasShadowRoot(n)) {\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n if (iframe.contentWindow) {\n canvasManager.addWindow(iframe.contentWindow);\n }\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn,\n });\n if (!node) {\n return console.warn('Failed to snapshot the document');\n }\n wrappedEmit({\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window),\n },\n });\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n _takeFullSnapshot = takeFullSnapshot;\n try {\n const handlers = [];\n const observe = (doc) => {\n return callbackWrapper(initObservers)({\n onMutation,\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n }),\n mouseInteractionCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d,\n },\n }),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d,\n },\n }),\n inputCb: (v) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v,\n },\n }),\n mediaInteractionCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p,\n },\n }),\n styleSheetRuleCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r,\n },\n }),\n styleDeclarationCb: (r) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r,\n },\n }),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p,\n },\n }),\n selectionCb: (p) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p,\n },\n });\n },\n customElementCb: (c) => {\n wrappedEmit({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c,\n },\n });\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordDOM,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n unblockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: _optionalChain([plugins\n, 'optionalAccess', _8 => _8.filter, 'call', _9 => _9((p) => p.observer)\n, 'optionalAccess', _10 => _10.map, 'call', _11 => _11((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload,\n },\n }),\n }))]) || [],\n }, {});\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n }\n catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n };\n if (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n init();\n }\n else {\n handlers.push(on('DOMContentLoaded', () => {\n wrappedEmit({\n type: EventType.DomContentLoaded,\n data: {},\n });\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit({\n type: EventType.Load,\n data: {},\n });\n if (recordAfter === 'load')\n init();\n }, window));\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n _takeFullSnapshot = undefined;\n unregisterErrorHandler();\n };\n }\n catch (error) {\n console.warn(error);\n }\n}\nfunction takeFullSnapshot(isCheckout) {\n if (!_takeFullSnapshot) {\n throw new Error('please take full snapshot after start recording');\n }\n _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n try {\n return getCanvasManagerFn\n ? getCanvasManagerFn(options)\n : new CanvasManagerNoop();\n }\n catch (e2) {\n console.warn('Unable to initialize CanvasManager');\n return new CanvasManagerNoop();\n }\n}\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in ,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n if (isEventWithTarget(event)) {\n return event.target ;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event) {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers ).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen() {\n fill(WINDOW, 'open', function (originalWindowOpen) {\n return function (...args) {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n\n/** Any IncrementalSource for rrweb that we interpret as a kind of mutation. */\nconst IncrementalMutationSources = new Set([\n IncrementalSource.Mutation,\n IncrementalSource.StyleSheetRule,\n IncrementalSource.StyleDeclaration,\n IncrementalSource.AdoptedStyleSheet,\n IncrementalSource.CanvasMutation,\n IncrementalSource.Selection,\n IncrementalSource.MediaInteraction,\n]);\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector {\n // protected for testing\n\n constructor(\n replay,\n slowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scrollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n addListeners() {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n removeListeners() {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n handleClick(breadcrumb, node) {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n registerMutation(timestamp = Date.now()) {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerScroll(timestamp = Date.now()) {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerClick(element) {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node );\n }\n\n /** Count multiple clicks on elements. */\n _handleMultiClick(node) {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n _getClicks(node) {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n _checkClicks() {\n const timedOutClicks = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n _generateBreadcrumbs(click) {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scrollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n _scheduleCheckClicks() {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout$3(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (IncrementalMutationSources.has(source)) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch (e) {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event) {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event,\n) {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n breadcrumb,\n) {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n 'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n const obj = {};\n if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n attributes['data-sentry-component'] = attributes['data-sentry-element'];\n }\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n\nconst handleDomListener = (\n replay,\n) => {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick ? (handlerData.event ) : undefined;\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n event.target &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result ,\n getClickTargetNode(handlerData.event ) ,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text ).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData) {\n const isClick = handlerData.name === 'click';\n\n let message;\n let target = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node) {\n return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target ) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target) {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Handler creater for web vitals\n */\nfunction webVitalHandler(\n getter,\n replay,\n) {\n return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n entries,\n) {\n return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n const entryType = ENTRY_TYPES[entry.entryType];\n if (!entryType) {\n return null;\n }\n\n return entryType(entry);\n}\n\nfunction getAbsoluteTime(time) {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry) {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry,\n) {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on a LCP metric.\n */\nfunction getLargestContentfulPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.element ? [lastEntry.element] : undefined;\n return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\nfunction isLayoutShift(entry) {\n return (entry ).sources !== undefined;\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nfunction getCumulativeLayoutShift(metric) {\n const layoutShifts = [];\n const nodes = [];\n for (const entry of metric.entries) {\n if (isLayoutShift(entry)) {\n const nodeIds = [];\n for (const source of entry.sources) {\n if (source.node) {\n nodes.push(source.node);\n const nodeId = record.mirror.getId(source.node);\n if (nodeId) {\n nodeIds.push(nodeId);\n }\n }\n }\n layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : undefined });\n }\n }\n\n return getWebVital(metric, 'cumulative-layout-shift', nodes, layoutShifts);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nfunction getFirstInputDelay(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nfunction getInteractionToNextPaint(metric) {\n const lastEntry = metric.entries[metric.entries.length - 1] ;\n const node = lastEntry && lastEntry.target ? [lastEntry.target] : undefined;\n return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(\n metric,\n name,\n nodes,\n attributions,\n) {\n const value = metric.value;\n const rating = metric.rating;\n\n const end = getAbsoluteTime(value);\n\n return {\n type: 'web-vital',\n name,\n start: end,\n end,\n data: {\n value,\n size: value,\n rating,\n nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n attributions,\n },\n };\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n function addPerformanceEntry(entry) {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }) {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks = [];\n\n (['navigation', 'paint', 'resource'] ).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)),\n addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)),\n addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},_=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},x=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=A(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){_(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=C[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=U(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(J)return J.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),a=0,s=function(t){i[a++]=t},o=0;oi.length){var f=new t(a+8+(e-o<<1));f.set(i),i=f}var h=n.charCodeAt(o);h<128||r?s(h):h<2048?(s(192|h>>6),s(128|63&h)):h>55295&&h<57344?(s(240|(h=65536+(1047552&h)|1023&n.charCodeAt(++o))>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|63&h)):(s(224|h>>12),s(128|h>>6&63),s(128|63&h))}return b(i,0,a)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\nconst CONSOLE_LEVELS = ['info', 'warn', 'error', 'log'] ;\nconst PREFIX = '[Replay] ';\n\nfunction _addBreadcrumb(message, level = 'info') {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level,\n message: `${PREFIX}${message}`,\n },\n { level },\n );\n}\n\nfunction makeReplayLogger() {\n let _capture = false;\n let _trace = false;\n\n const _logger = {\n exception: () => undefined,\n infoTick: () => undefined,\n setConfig: (opts) => {\n _capture = opts.captureExceptions;\n _trace = opts.traceInternals;\n },\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = (...args) => {\n logger$1[name](PREFIX, ...args);\n if (_trace) {\n _addBreadcrumb(args.join(''), severityLevelFromString(name));\n }\n };\n });\n\n _logger.exception = (error, ...message) => {\n if (message.length && _logger.error) {\n _logger.error(...message);\n }\n\n logger$1.error(PREFIX, error);\n\n if (_capture) {\n captureException(error);\n } else if (_trace) {\n // No need for a breadcrumb if `_capture` is enabled since it should be\n // captured as an exception\n _addBreadcrumb(error, 'error');\n }\n };\n\n _logger.infoTick = (...args) => {\n logger$1.info(PREFIX, ...args);\n if (_trace) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => _addBreadcrumb(args[0]), 0);\n }\n };\n } else {\n CONSOLE_LEVELS.forEach(name => {\n _logger[name] = () => undefined;\n });\n }\n\n return _logger ;\n}\n\nconst logger = makeReplayLogger();\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray {\n /** All the events that are buffered to be sent. */\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n this.waitForCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n get type() {\n return 'sync';\n }\n\n /** @inheritdoc */\n destroy() {\n this.events = [];\n }\n\n /** @inheritdoc */\n async addEvent(event) {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n finish() {\n return new Promise(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n clear() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n constructor(worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occurred.\n */\n ensureReady() {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }) => {\n if ((data ).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n destroy() {\n DEBUG_BUILD && logger.info('Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n postMessage(method, arg) {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }) => {\n const response = data ;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n DEBUG_BUILD && logger.error('Error in compression worker: ', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response );\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n _getAndIncrementId() {\n return this._id++;\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker {\n /** @inheritdoc */\n\n /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n this.waitForCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n get type() {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occurred.\n */\n ensureReady() {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n destroy() {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully received and processed by worker.\n */\n addEvent(event) {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n finish() {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n clear() {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n this._worker.postMessage('clear').then(null, e => {\n DEBUG_BUILD && logger.exception(e, 'Sending \"clear\" message to worker failed', e);\n });\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n _sendEventToWorker(data) {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n async _finishRequest() {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy {\n\n constructor(worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n get waitForCheckout() {\n return this._used.waitForCheckout;\n }\n\n /** @inheritdoc */\n get type() {\n return this._used.type;\n }\n\n /** @inheritDoc */\n get hasEvents() {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n get hasCheckout() {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n set hasCheckout(value) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritdoc */\n // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n set waitForCheckout(value) {\n this._used.waitForCheckout = value;\n }\n\n /** @inheritDoc */\n destroy() {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n clear() {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n addEvent(event) {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n async finish() {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n ensureWorkerIsLoaded() {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n async _ensureWorkerIsLoaded() {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n DEBUG_BUILD && logger.exception(error, 'Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n async _switchToCompressionWorker() {\n const { events, hasCheckout, waitForCheckout } = this._fallback;\n\n const addEventPromises = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n this._compression.waitForCheckout = waitForCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n\n // Can now clear fallback buffer as it's no longer necessary\n this._fallback.clear();\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to add events when switching buffers.');\n }\n }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}) {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n DEBUG_BUILD && logger.info('Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n DEBUG_BUILD && logger.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl() {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return e();\n }\n\n return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n { sessionSampleRate, allowBuffering, stickySession = false },\n { previousSessionId } = {},\n) {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession() {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n DEBUG_BUILD && logger.infoTick('Loading existing session');\n\n return makeSession(sessionObj);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n initialTime,\n expiry,\n targetTime = +new Date(),\n) {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n },\n) {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n session,\n { sessionIdleExpire, maxReplayDuration },\n) {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n {\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession();\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n DEBUG_BUILD && logger.infoTick('Creating new session');\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n DEBUG_BUILD && logger.infoTick('Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay,\n event,\n isCheckout,\n) {\n const { eventBuffer } = replay;\n\n if (!eventBuffer || (eventBuffer.waitForCheckout && !isCheckout)) {\n return null;\n }\n\n const isBufferMode = replay.recordingMode === 'buffer';\n\n try {\n if (isCheckout && isBufferMode) {\n eventBuffer.clear();\n }\n\n if (isCheckout) {\n eventBuffer.hasCheckout = true;\n eventBuffer.waitForCheckout = false;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const isExceeded = error && error instanceof EventBufferSizeExceededError;\n const reason = isExceeded ? 'addEventSizeExceeded' : 'addEvent';\n\n if (isExceeded && isBufferMode) {\n // Clear buffer and wait for next checkout\n eventBuffer.clear();\n eventBuffer.waitForCheckout = true;\n\n return null;\n }\n\n replay.handleException(error);\n\n await replay.stop({ reason });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n DEBUG_BUILD &&\n logger.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event,\n callback,\n) {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n DEBUG_BUILD &&\n logger.exception(error, 'An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...');\n return null;\n }\n\n return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n return (event, sendResponse) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (!statusCode || statusCode < 200 || statusCode >= 300) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id );\n }\n}\n\nfunction handleErrorEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout$3(async () => {\n try {\n // Capture current event buffer as new replay\n await replay.sendBufferedReplayOrFlush();\n } catch (err) {\n replay.handleException(err);\n }\n });\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n return (event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay, event) {\n const exceptionValue =\n event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].value;\n if (typeof exceptionValue !== 'string') {\n return;\n }\n\n if (\n // Only matches errors in production builds of react-dom\n // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n exceptionValue.match(\n /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n ) ||\n // Development builds of react-dom\n // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n ) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.hydrate-error',\n data: {\n url: getLocationHref(),\n },\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nfunction handleBreadcrumbs(replay) {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n return;\n }\n\n const result = normalizeBreadcrumb(breadcrumb);\n if (result) {\n addBreadcrumbEvent(replay, result);\n }\n}\n\n/** Exported only for tests. */\nfunction normalizeBreadcrumb(breadcrumb) {\n if (\n !isBreadcrumbWithCategory(breadcrumb) ||\n [\n // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n 'fetch',\n 'xhr',\n // These two are breadcrumbs for emitted sentry events, we don't care about them\n 'sentry.event',\n 'sentry.transaction',\n ].includes(breadcrumb.category) ||\n // We capture UI breadcrumbs separately\n breadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (breadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(breadcrumb);\n }\n\n return createBreadcrumb(breadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n breadcrumb,\n) {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch (e) {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Reset the `replay_id` field on the DSC.\n */\nfunction resetReplayIdOnDynamicSamplingContext() {\n // Reset DSC on the current scope, if there is one\n const dsc = getCurrentScope().getPropagationContext().dsc;\n if (dsc) {\n delete dsc.replay_id;\n }\n\n // Clear it from frozen DSC on the active span\n const activeSpan = getActiveSpan();\n if (activeSpan) {\n const dsc = getDynamicSamplingContextFromSpan(activeSpan);\n delete (dsc ).replay_id;\n }\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n replay.triggerUserActivity();\n replay.addUpdate(() => {\n if (!event.timestamp) {\n // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n // Return true here so that we don't flush\n return true;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: event.timestamp * 1000,\n data: {\n tag: 'breadcrumb',\n payload: {\n timestamp: event.timestamp,\n type: 'default',\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n } );\n\n return false;\n });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `handleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(replay) {\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled or paused\n if (!replay.isEnabled() || replay.isPaused()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors, transactions, and feedbacks, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n // prevent exceeding replay durations by removing the expired replayId from the DSC\n resetReplayIdOnDynamicSamplingContext();\n return event;\n }\n\n if (isFeedbackEvent(event)) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n event.contexts.feedback.replay_id = replay.getSessionId();\n // Add a replay breadcrumb for this piece of feedback\n addFeedbackBreadcrumb(replay, event);\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n DEBUG_BUILD && logger.log('Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n replay,\n entries,\n) {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n\nfunction handleHistory(handlerData) {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n replay,\n result,\n) {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n\n/** Get the size of a body. */\nfunction getBodySize(body) {\n if (!body) {\n return undefined;\n }\n\n const textEncoder = new TextEncoder();\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch (e) {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nfunction parseContentLengthHeader(header) {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof URLSearchParams) {\n return [body.toString()];\n }\n\n if (body instanceof FormData) {\n return [_serializeFormData(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n info,\n warning,\n) {\n if (!info) {\n return {\n headers: {},\n size: undefined,\n _meta: {\n warnings: [warning],\n },\n };\n }\n\n const newMeta = { ...info._meta };\n const existingWarnings = newMeta.warnings || [];\n newMeta.warnings = [...existingWarnings, warning];\n\n info._meta = newMeta;\n return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n type,\n data,\n) {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n headers,\n bodySize,\n body,\n) {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n return Object.entries(headers).reduce((filteredHeaders, [key, value]) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = value;\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData) {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch (e2) {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str) {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n breadcrumb,\n hint,\n options\n\n,\n) {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to capture fetch breadcrumb');\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n breadcrumb,\n hint,\n) {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders },\n input,\n requestBodySize,\n) {\n const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const [bodyStr, warning] = getBodyString(requestBody);\n const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n if (warning) {\n return mergeWarning(data, warning);\n }\n\n return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n captureDetails,\n {\n networkCaptureBodies,\n networkResponseHeaders,\n },\n response,\n responseBodySize,\n) {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n const [bodyText, warning] = await _parseFetchResponseBody(response);\n const result = getResponseData(bodyText, {\n networkCaptureBodies,\n\n responseBodySize,\n captureDetails,\n headers,\n });\n\n if (warning) {\n return mergeWarning(result, warning);\n }\n\n return result;\n}\n\nfunction getResponseData(\n bodyText,\n {\n networkCaptureBodies,\n responseBodySize,\n captureDetails,\n headers,\n }\n\n,\n) {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined ? getBodySize(bodyText) : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize response body');\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchResponseBody(response) {\n const res = _tryCloneResponse(response);\n\n if (!res) {\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n try {\n const text = await _tryGetResponseText(res);\n return [text];\n } catch (error) {\n if (error instanceof Error && error.message.indexOf('Timeout') > -1) {\n DEBUG_BUILD && logger.warn('Parsing text body from response timed out');\n return [undefined, 'BODY_PARSE_TIMEOUT'];\n }\n\n DEBUG_BUILD && logger.exception(error, 'Failed to get text body from response');\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n const allHeaders = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) ;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input,\n allowedHeaders,\n) {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n try {\n // We have to clone this, as the body can only be read once\n return response.clone();\n } catch (error) {\n // this can throw if the response was already consumed before\n DEBUG_BUILD && logger.exception(error, 'Failed to clone response body');\n }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout$3(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n _getResponseText(response)\n .then(\n txt => resolve(txt),\n reason => reject(reason),\n )\n .finally(() => clearTimeout(timeout));\n });\n}\n\nasync function _getResponseText(response) {\n // Force this to be a promise, just to be safe\n // eslint-disable-next-line no-return-await\n return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n breadcrumb,\n hint,\n options,\n) {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to capture xhr breadcrumb');\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n breadcrumb,\n hint,\n) {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request: requestWarning ? mergeWarning(request, requestWarning) : request,\n response: responseWarning ? mergeWarning(response, responseWarning) : response,\n };\n}\n\nfunction getResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ') ;\n if (value) {\n acc[key.toLowerCase()] = value;\n }\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors = [];\n\n try {\n return [xhr.responseText];\n } catch (e) {\n errors.push(e);\n }\n\n // Try to manually parse the response body, if responseText fails\n try {\n return _parseXhrResponse(xhr.response, xhr.responseType);\n } catch (e) {\n errors.push(e);\n }\n\n DEBUG_BUILD && logger.warn('Failed to get xhr response body', ...errors);\n\n return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n body,\n responseType,\n) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof Document) {\n return [body.body.outerHTML];\n }\n\n if (responseType === 'json' && body && typeof body === 'object') {\n return [JSON.stringify(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (error) {\n DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body,\n responseType,\n) {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr);\n } catch (e2) {\n return undefined;\n }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n const client = getClient();\n\n try {\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n }\n } catch (e2) {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n options,\n breadcrumb,\n hint,\n) {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n DEBUG_BUILD && logger.exception(e, 'Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n return hint && hint.response;\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const client = getClient();\n\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleBreadcrumbs(replay);\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay);\n addEventProcessor(eventProcessor);\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (client) {\n client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('spanStart', span => {\n replay.lastActiveSpan = span;\n });\n\n // We may be missing the initial spanStart due to timing issues,\n // so we capture it on finish again.\n client.on('spanEnd', span => {\n replay.lastActiveSpan = span;\n });\n\n // We want to flush replay\n client.on('beforeSendFeedback', (feedbackEvent, options) => {\n const replayId = replay.getSessionId();\n if (options && options.includeReplay && replay.isEnabled() && replayId) {\n // This should never reject\n if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n let callbackReturnValue;\n\n let timerId;\n let maxTimerId;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc() {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers() {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush() {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced() {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout$3(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout$3(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\nconst NAVIGATOR = GLOBAL_OBJ.navigator;\n\n/**\n * Disable sampling mousemove events on iOS browsers as this can cause blocking the main thread\n * https://github.com/getsentry/sentry-javascript/issues/14534\n */\nfunction getRecordingSamplingOptions() {\n if (\n /iPhone|iPad|iPod/i.test((NAVIGATOR && NAVIGATOR.userAgent) || '') ||\n (/Macintosh/i.test((NAVIGATOR && NAVIGATOR.userAgent) || '') &&\n NAVIGATOR &&\n NAVIGATOR.maxTouchPoints &&\n NAVIGATOR.maxTouchPoints > 1)\n ) {\n return {\n sampling: {\n mousemove: false,\n },\n };\n }\n\n return {};\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n let hadFirstEvent = false;\n\n return (event, _isCheckout) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.warn('Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n const session = replay.session;\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time. We have an experimental mode\n // to perform multiple checkouts a session (the idea is to improve\n // seeking during playback), so also only include if segmentId is 0\n // (handled in `addSettingsEvent`).\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n DEBUG_BUILD &&\n logger.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(session);\n }\n }\n }\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (session && session.previousSessionId) {\n return true;\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n shouldRecordCanvas: replay.isRecordingCanvas(),\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n replayEvent,\n recordingData,\n dsn,\n tunnel,\n) {\n return createEnvelope(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n recordingData,\n headers,\n}\n\n) {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}\n\n) {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint = { event_id, integrations };\n\n client.emit('preprocessEvent', event, eventHint);\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) ;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}) {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const client = getClient();\n const scope = getCurrentScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return resolvedSyncPromise({});\n }\n\n const baseEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n DEBUG_BUILD && logger.info('An event processor returned `null`, will not send event.');\n return resolvedSyncPromise({});\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n constructor(statusCode) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n constructor(rateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n replayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n) {\n const { recordingData, onError } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if (onError) {\n onError(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout$3(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n fn,\n maxCount,\n durationSeconds,\n) {\n const counter = new Map();\n\n const _cleanup = (now) => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = () => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest) => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer {\n\n /**\n * Recording can happen in one of two modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n\n /**\n * The current or last active span.\n * This is only available when performance is enabled.\n */\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n\n /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n\n /**\n * Is the integration currently active?\n */\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n\n /**\n * Function to stop recording\n */\n\n /**\n * Internal use for canvas recording options\n */\n\n constructor({\n options,\n recordingOptions,\n }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } ;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._requiresManualStart = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event, isCheckout) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n\n // Configure replay logger w/ experimental options\n if (DEBUG_BUILD) {\n const experiments = options._experiments;\n logger.setConfig({\n captureExceptions: !!experiments.captureExceptions,\n traceInternals: !!experiments.traceInternals,\n });\n }\n }\n\n /** Get the event context. */\n getContext() {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n isEnabled() {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n isPaused() {\n return this._isPaused;\n }\n\n /**\n * Determine if canvas recording is enabled\n */\n isRecordingCanvas() {\n return Boolean(this._canvas);\n }\n\n /** Get the replay integration options. */\n getOptions() {\n return this._options;\n }\n\n /** A wrapper to conditionally capture exceptions. */\n handleException(error) {\n DEBUG_BUILD && logger.exception(error);\n if (this._options.onError) {\n this._options.onError(error);\n }\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n initializeSampling(previousSessionId) {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n this._requiresManualStart = requiresManualStart;\n\n if (requiresManualStart) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n DEBUG_BUILD && logger.exception(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n DEBUG_BUILD && logger.infoTick(`Starting replay in ${this.recordingMode} mode`);\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will log a message if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (this._isEnabled && this.recordingMode === 'session') {\n DEBUG_BUILD && logger.info('Recording is already in progress');\n return;\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in session mode');\n\n // Required as user activity is initially set in\n // constructor, so if `start()` is called after\n // session idle expiration, a replay will not be\n // created due to an idle timeout.\n this._updateUserActivity();\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n startBuffering() {\n if (this._isEnabled) {\n DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n return;\n }\n\n DEBUG_BUILD && logger.infoTick('Starting replay in buffer mode');\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n startRecording() {\n try {\n const canvasOptions = this._canvas;\n\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer'\n ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME }\n : // Otherwise, use experimental option w/ min checkout time of 6 minutes\n // This is to improve playback seeking as there could potentially be\n // less mutations to process in the worse cases.\n //\n // checkout by \"N\" events is probably ideal, but means we have less\n // control about the number of checkouts we make (which generally\n // increases replay size)\n this._options._experiments.continuousCheckout && {\n // Minimum checkout time is 6 minutes\n checkoutEveryNms: Math.max(360000, this._options._experiments.continuousCheckout),\n }),\n emit: getHandleRecordingEmit(this),\n ...getRecordingSamplingOptions(),\n onMutation: this._onMutationHandler,\n ...(canvasOptions\n ? {\n recordCanvas: canvasOptions.recordCanvas,\n getCanvasManager: canvasOptions.getCanvasManager,\n sampling: canvasOptions.sampling,\n dataURLOptions: canvasOptions.dataURLOptions,\n }\n : {}),\n });\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n stopRecording() {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this.handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n async stop({ forceFlush = false, reason } = {}) {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n DEBUG_BUILD && logger.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n resetReplayIdOnDynamicSamplingContext();\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n pause() {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n DEBUG_BUILD && logger.info('Pausing replay');\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n resume() {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n DEBUG_BUILD && logger.info('Resuming replay');\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n DEBUG_BUILD && logger.info('Converting buffer to session');\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode ) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `` milliseconds have elapsed since the last event\n * *OR* if `` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n addUpdate(cb) {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n triggerUserActivity() {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n updateUserActivity() {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n conditionalFlush() {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n flush() {\n return this._debouncedFlush() ;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of multiple flushes happening closely together.\n */\n flushImmediate() {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() ;\n }\n\n /**\n * Cancels queued up flushes.\n */\n cancelFlush() {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current session (=replay) ID */\n getSessionId() {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n checkAndHandleExpiredSession() {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n setInitialState() {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n throttledAddEvent(\n event,\n isCheckout,\n ) {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n getCurrentRoute() {\n const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastRootSpan).description;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n _initializeRecording() {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n _initializeSessionForSampling(previousSessionId) {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n _checkSession() {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n async _refreshSession(session) {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n _addListeners() {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this.handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n _removeListeners() {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this.handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n __init() {this._handleVisibilityChange = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };}\n\n /**\n * Handle when page is blurred\n */\n __init2() {this._handleWindowBlur = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };}\n\n /**\n * Handle when page is focused\n */\n __init3() {this._handleWindowFocus = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };}\n\n /** Ensure page remains active when a key is pressed. */\n __init4() {this._handleKeyboardEvent = (event) => {\n handleKeyboardEvent(this, event);\n };}\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n _doChangeToBackgroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n _doChangeToForegroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n DEBUG_BUILD && logger.info('Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n _updateUserActivity(_lastActivity = Date.now()) {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n _updateSessionActivity(_lastActivity = Date.now()) {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n _createCustomBreadcrumb(breadcrumb) {\n this.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n _addPerformanceEntries() {\n let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // If we are manually starting, we want to ensure we only include performance entries\n // that are after the initial timestamp\n // The reason for this is that we may have performance entries from the page load, but may decide to start\n // the replay later on, in which case we do not want to include these entries.\n // without this, manually started replays can have events long before the actual replay recording starts,\n // which messes with the timeline etc.\n if (this._requiresManualStart) {\n const initialTimestampInSeconds = this._context.initialTimestamp / 1000;\n performanceEntries = performanceEntries.filter(entry => entry.start >= initialTimestampInSeconds);\n }\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n _clearContext() {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n _updateInitialTimestampFromEventBuffer() {\n const { session, eventBuffer } = this;\n // If replay was started manually (=no sample rate was given),\n // We do not want to back-port the initial timestamp\n if (!session || !eventBuffer || this._requiresManualStart) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n _popEventContext() {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n async _runFlush() {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n DEBUG_BUILD && logger.error('No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accommodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n timestamp,\n onError: err => this.handleException(err),\n });\n } catch (err) {\n this.handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'sendReplay' });\n\n const client = getClient();\n\n if (client) {\n const dropReason = err instanceof RateLimitError ? 'ratelimit_backoff' : 'send_error';\n client.recordDroppedEvent(dropReason, 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n __init5() {this._flush = async ({\n force = false,\n }\n\n = {}) => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.error('Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5000;\n if (tooShort || tooLong) {\n DEBUG_BUILD &&\n logger.info(\n `Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n DEBUG_BUILD && logger.info('Flushing initial segment without checkout.');\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n const _flushInProgress = !!this._flushLock;\n\n // this._flushLock acts as a lock so that future calls to `_flush()` will\n // be blocked until current flush is finished (i.e. this promise resolves)\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n }\n\n try {\n await this._flushLock;\n } catch (err) {\n this.handleException(err);\n } finally {\n this._flushLock = undefined;\n\n if (_flushInProgress) {\n // Wait for previous flush to finish, then call the debounced\n // `_flush()`. It's possible there are other flush requests queued and\n // waiting for it to resolve. We want to reduce all outstanding\n // requests (as well as any new flush requests that occur within a\n // second of the locked flush completing) into a single flush.\n this._debouncedFlush();\n }\n }\n };}\n\n /** Save the session, if it is sticky */\n _maybeSaveSession() {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n __init6() {this._onMutationHandler = (mutations) => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };}\n}\n\nfunction getOption(selectors, defaultSelectors) {\n return [\n ...selectors,\n // sentry defaults\n ...defaultSelectors,\n ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n const defaultBlockedElements = ['base', 'iframe[srcdoc]:not([src])'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n const unmaskSelector = getOption(unmask, []);\n\n const options = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n unblockSelector: getOption(unblock, []),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n };\n\n return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}) {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precedence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n * dsn: '__DSN__',\n * integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nconst replayIntegration = ((options) => {\n return new Replay(options);\n}) ;\n\n/**\n * Replay integration\n *\n * TODO: Rewrite this to be functional integration\n * Exported for tests.\n */\nclass Replay {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Replay';}\n\n /**\n * @inheritDoc\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n\n constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10000,\n\n slowClickTimeout = 7000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n onError,\n } = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key, value, el) =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n onError,\n\n _experiments,\n };\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n get _isInitialized() {\n return _initialized;\n }\n\n /** Update _isInitialized */\n set _isInitialized(value) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n afterAllSetup(client) {\n if (!isBrowser() || this._replay) {\n return;\n }\n\n this._setup(client);\n this._initialize(client);\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will log a message if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (!this._replay) {\n return;\n }\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n startBuffering() {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n stop() {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * If replay is not enabled, a new session replay is started.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n flush(options) {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n // assuming a session should be recorded in this case\n if (!this._replay.isEnabled()) {\n this._replay.start();\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n getReplayId() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n\n /**\n * Get the current recording mode. This can be either `session` or `buffer`.\n *\n * `session`: Recording the whole session, sending it continuously\n * `buffer`: Always keeping the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n getRecordingMode() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.recordingMode;\n }\n\n /**\n * Initializes replay.\n */\n _initialize(client) {\n if (!this._replay) {\n return;\n }\n\n this._maybeLoadFromReplayCanvasIntegration(client);\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup(client) {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n\n /** Get canvas options from ReplayCanvas integration, if it is also added. */\n _maybeLoadFromReplayCanvasIntegration(client) {\n // To save bundle size, we skip checking for stuff here\n // and instead just try-catch everything - as generally this should all be defined\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n try {\n const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n if (!canvasIntegration) {\n return;\n }\n\n this._replay['_canvas'] = canvasIntegration.getOptions();\n } catch (e) {\n // ignore errors here\n }\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n }\n}Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions, client) {\n const opt = client.getOptions() ;\n\n const finalOptions = {\n sessionSampleRate: 0,\n errorSampleRate: 0,\n ...dropUndefinedKeys(initialOptions),\n };\n\n const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n\n if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n });\n }\n\n if (replaysSessionSampleRate != null) {\n finalOptions.sessionSampleRate = replaysSessionSampleRate;\n }\n\n if (replaysOnErrorSampleRate != null) {\n finalOptions.errorSampleRate = replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\nfunction getReplay() {\n const client = getClient();\n return client && client.getIntegrationByName('Replay');\n}\n\nexport { getReplay, replayIntegration };\n//# sourceMappingURL=index.js.map\n","import { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, extractNetworkProtocol, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, instrumentFetchRequest, parseUrl, spanToJSON, browserPerformanceTimeOrigin, hasTracingEnabled, setHttpStatus, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentryNonRecordingSpan, getTraceData, stringMatchesSomePattern } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n trackFetchStreamPerformance: false,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(client, _options) {\n const {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n tracePropagationTargets,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n trackFetchStreamPerformance: defaultRequestInstrumentationOptions.trackFetchStreamPerformance,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n const spans = {};\n\n if (traceFetch) {\n // Keeping track of http requests, whose body payloads resolved later than the initial resolved request\n // e.g. streaming using server sent events (SSE)\n client.addEventProcessor(event => {\n if (event.type === 'transaction' && event.spans) {\n event.spans.forEach(span => {\n if (span.op === 'http.client') {\n const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n if (updatedTimestamp) {\n span.timestamp = updatedTimestamp / 1000;\n spanIdToEndTimestamp.delete(span.span_id);\n }\n }\n });\n }\n return event;\n });\n\n if (trackFetchStreamPerformance) {\n addFetchEndInstrumentationHandler(handlerData => {\n if (handlerData.response) {\n const span = responseToSpanId.get(handlerData.response);\n if (span && handlerData.endTimestamp) {\n spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n }\n }\n });\n }\n\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n if (handlerData.response && handlerData.fetchData.__span) {\n responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n }\n\n // We cannot use `window.location` in the generic fetch instrumentation,\n // but we need it for reliable `server.address` attribute.\n // so we extend this in here\n if (createdSpan) {\n const fullUrl = getFullURL(handlerData.fetchData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n createdSpan.setAttributes({\n 'http.url': fullUrl,\n 'server.address': host,\n });\n }\n\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry ).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\nfunction getAbsoluteTime(time = 0) {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n targetUrl,\n tracePropagationTargets,\n) {\n // window.location.href not being defined is an edge case in the browser but we need to handle it.\n // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n const href = WINDOW.location && WINDOW.location.href;\n\n if (!href) {\n // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n // so we need a to exclude those requests, because they might be cross origin.\n const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n if (!tracePropagationTargets) {\n return isRelativeSameOriginRequest;\n } else {\n return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n }\n } else {\n let resolvedUrl;\n let currentOrigin;\n\n // URL parsing may fail, we default to not attaching trace headers in that case.\n try {\n resolvedUrl = new URL(targetUrl, href);\n currentOrigin = new URL(href).origin;\n } catch (e) {\n return false;\n }\n\n const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n if (!tracePropagationTargets) {\n return isSameOriginRequest;\n } else {\n return (\n stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n );\n }\n }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n) {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n setHttpStatus(span, sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const fullUrl = getFullURL(sentryXhrData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n attributes: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n 'http.url': fullUrl,\n url: sentryXhrData.url,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n\n if (shouldAttachHeaders(sentryXhrData.url)) {\n addTracingHeadersToXhrRequest(\n xhr,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr, span) {\n const { 'sentry-trace': sentryTrace, baggage } = getTraceData({ span });\n\n if (sentryTrace) {\n setHeaderOnXhr(xhr, sentryTrace, baggage);\n }\n}\n\nfunction setHeaderOnXhr(\n xhr,\n sentryTraceHeader,\n sentryBaggageHeader,\n) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('baggage', sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nfunction getFullURL(url) {\n try {\n // By adding a base URL to new URL(), this will also work for relative urls\n // If `url` is a full URL, the base URL is ignored anyhow\n const parsed = new URL(url, WINDOW.location.origin);\n return parsed.href;\n } catch (e2) {\n return undefined;\n }\n}\n\nexport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, logger, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { startTrackingWebVitals, startTrackingINP, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingInteractions, addHistoryInstrumentationHandler, registerInpInteractionListener, addPerformanceEntries } from '@sentry-internal/browser-utils';\nimport { TRACING_DEFAULTS, registerSpanErrorInstrumentation, GLOBAL_OBJ, getClient, propagationContextFromHeaders, getCurrentScope, spanToJSON, getRootSpan, spanIsSampled, getDynamicSamplingContextFromSpan, browserPerformanceTimeOrigin, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getIsolationScope, generateTraceId, getDomElement, startIdleSpan, logger, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\n\n/* eslint-disable max-lines */\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n ...TRACING_DEFAULTS,\n instrumentNavigation: true,\n instrumentPageLoad: true,\n markBackgroundSpan: true,\n enableLongTask: true,\n enableLongAnimationFrame: true,\n enableInp: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nconst browserTracingIntegration = ((_options = {}) => {\n registerSpanErrorInstrumentation();\n\n const {\n enableInp,\n enableLongTask,\n enableLongAnimationFrame,\n _experiments: { enableInteractions, enableStandaloneClsSpans },\n beforeStartSpan,\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n markBackgroundSpan,\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n instrumentPageLoad,\n instrumentNavigation,\n } = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n if (enableInp) {\n startTrackingINP();\n }\n\n if (\n enableLongAnimationFrame &&\n GLOBAL_OBJ.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n ) {\n startTrackingLongAnimationFrames();\n } else if (enableLongTask) {\n startTrackingLongTasks();\n }\n\n if (enableInteractions) {\n startTrackingInteractions();\n }\n\n const latestRoute = {\n name: undefined,\n source: undefined,\n };\n\n /** Create routing idle transaction. */\n function _createRouteSpan(client, startSpanOptions) {\n const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n const finalStartSpanOptions = beforeStartSpan\n ? beforeStartSpan(startSpanOptions)\n : startSpanOptions;\n\n const attributes = finalStartSpanOptions.attributes || {};\n\n // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n if (startSpanOptions.name !== finalStartSpanOptions.name) {\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n finalStartSpanOptions.attributes = attributes;\n }\n\n latestRoute.name = finalStartSpanOptions.name;\n latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n const idleSpan = startIdleSpan(finalStartSpanOptions, {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n // should wait for finish signal if it's a pageload transaction\n disableAutoFinish: isPageloadTransaction,\n beforeSpanEnd: span => {\n _collectWebVitals();\n addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n },\n });\n\n function emitFinish() {\n if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n client.emit('idleSpanEnableAutoFinish', idleSpan);\n }\n }\n\n if (isPageloadTransaction && WINDOW.document) {\n WINDOW.document.addEventListener('readystatechange', () => {\n emitFinish();\n });\n\n emitFinish();\n }\n\n return idleSpan;\n }\n\n return {\n name: BROWSER_TRACING_INTEGRATION_ID,\n afterAllSetup(client) {\n let activeSpan;\n let startingUrl = WINDOW.location && WINDOW.location.href;\n\n function maybeEndActiveSpan() {\n if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open active span, we need to finish it before creating an new one.\n activeSpan.end();\n }\n }\n\n client.on('startNavigationSpan', startSpanOptions => {\n if (getClient() !== client) {\n return;\n }\n\n maybeEndActiveSpan();\n\n activeSpan = _createRouteSpan(client, {\n op: 'navigation',\n ...startSpanOptions,\n });\n });\n\n client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n if (getClient() !== client) {\n return;\n }\n maybeEndActiveSpan();\n\n const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n getCurrentScope().setPropagationContext(propagationContext);\n\n activeSpan = _createRouteSpan(client, {\n op: 'pageload',\n ...startSpanOptions,\n });\n });\n\n // A trace should to stay the consistent over the entire time span of one route.\n // Therefore, when the initial pageload or navigation root span ends, we update the\n // scope's propagation context to keep span-specific attributes like the `sampled` decision and\n // the dynamic sampling context valid, even after the root span has ended.\n // This ensures that the trace data is consistent for the entire duration of the route.\n client.on('spanEnd', span => {\n const op = spanToJSON(span).op;\n if (span !== getRootSpan(span) || (op !== 'navigation' && op !== 'pageload')) {\n return;\n }\n\n const scope = getCurrentScope();\n const oldPropagationContext = scope.getPropagationContext();\n\n scope.setPropagationContext({\n ...oldPropagationContext,\n sampled: oldPropagationContext.sampled !== undefined ? oldPropagationContext.sampled : spanIsSampled(span),\n dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span),\n });\n });\n\n if (WINDOW.location) {\n if (instrumentPageLoad) {\n startBrowserTracingPageLoadSpan(client, {\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n },\n });\n }\n\n if (instrumentNavigation) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n startBrowserTracingNavigationSpan(client, {\n name: WINDOW.location.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n },\n });\n }\n });\n }\n }\n\n if (markBackgroundSpan) {\n registerBackgroundTabDetection();\n }\n\n if (enableInteractions) {\n registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n }\n\n if (enableInp) {\n registerInpInteractionListener();\n }\n\n instrumentOutgoingRequests(client, {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n tracePropagationTargets: client.getOptions().tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n },\n };\n}) ;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the tags.\n */\nfunction startBrowserTracingPageLoadSpan(\n client,\n spanOptions,\n traceOptions,\n) {\n client.emit('startPageLoadSpan', spanOptions, traceOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nfunction startBrowserTracingNavigationSpan(client, spanOptions) {\n getIsolationScope().setPropagationContext({ traceId: generateTraceId() });\n getCurrentScope().setPropagationContext({ traceId: generateTraceId() });\n\n client.emit('startNavigationSpan', spanOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n // eslint-disable-next-line deprecation/deprecation\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n latestRoute,\n) {\n let inflightInteractionSpan;\n const registerInteractionTransaction = () => {\n const op = 'ui.action.click';\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const currentRootSpanOp = spanToJSON(rootSpan).op;\n if (['navigation', 'pageload'].includes(currentRootSpanOp )) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n return undefined;\n }\n }\n\n if (inflightInteractionSpan) {\n inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n inflightInteractionSpan.end();\n inflightInteractionSpan = undefined;\n }\n\n if (!latestRoute.name) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n inflightInteractionSpan = startIdleSpan(\n {\n name: latestRoute.name,\n op,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n },\n },\n {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n },\n );\n };\n\n if (WINDOW.document) {\n addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n }\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","import { setContext, init as init$1 } from '@sentry/browser';\nimport { applySdkMetadata } from '@sentry/core';\nimport { version } from 'react';\n\n/**\n * Inits the React SDK\n */\nfunction init(options) {\n const opts = {\n ...options,\n };\n\n applySdkMetadata(opts, 'react');\n setContext('react', { version });\n return init$1(opts);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3 {\n this.listeners.delete(identity);\n this.onUnsubscribe();\n };\n }\n\n hasListeners() {\n return this.listeners.size > 0;\n }\n\n onSubscribe() {// Do nothing\n }\n\n onUnsubscribe() {// Do nothing\n }\n\n}\n\nexport { Subscribable };\n//# sourceMappingURL=subscribable.mjs.map\n","// TYPES\n// UTILS\nconst isServer = typeof window === 'undefined' || 'Deno' in window;\nfunction noop() {\n return undefined;\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === 'number' && value >= 0 && value !== Infinity;\n}\nfunction difference(array1, array2) {\n return array1.filter(x => !array2.includes(x));\n}\nfunction replaceAt(array, index, value) {\n const copy = array.slice(0);\n copy[index] = value;\n return copy;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction parseQueryArgs(arg1, arg2, arg3) {\n if (!isQueryKey(arg1)) {\n return arg1;\n }\n\n if (typeof arg2 === 'function') {\n return { ...arg3,\n queryKey: arg1,\n queryFn: arg2\n };\n }\n\n return { ...arg2,\n queryKey: arg1\n };\n}\nfunction parseMutationArgs(arg1, arg2, arg3) {\n if (isQueryKey(arg1)) {\n if (typeof arg2 === 'function') {\n return { ...arg3,\n mutationKey: arg1,\n mutationFn: arg2\n };\n }\n\n return { ...arg2,\n mutationKey: arg1\n };\n }\n\n if (typeof arg1 === 'function') {\n return { ...arg2,\n mutationFn: arg1\n };\n }\n\n return { ...arg1\n };\n}\nfunction parseFilterArgs(arg1, arg2, arg3) {\n return isQueryKey(arg1) ? [{ ...arg2,\n queryKey: arg1\n }, arg3] : [arg1 || {}, arg2];\n}\nfunction parseMutationFilterArgs(arg1, arg2, arg3) {\n return isQueryKey(arg1) ? [{ ...arg2,\n mutationKey: arg1\n }, arg3] : [arg1 || {}, arg2];\n}\nfunction matchQuery(filters, query) {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n\n if (isQueryKey(queryKey)) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive();\n\n if (type === 'active' && !isActive) {\n return false;\n }\n\n if (type === 'inactive' && isActive) {\n return false;\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false;\n }\n\n if (typeof fetchStatus !== 'undefined' && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n\n if (predicate && !predicate(query)) {\n return false;\n }\n\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const {\n exact,\n fetching,\n predicate,\n mutationKey\n } = filters;\n\n if (isQueryKey(mutationKey)) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n\n if (exact) {\n if (hashQueryKey(mutation.options.mutationKey) !== hashQueryKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n\n if (typeof fetching === 'boolean' && mutation.state.status === 'loading' !== fetching) {\n return false;\n }\n\n if (predicate && !predicate(mutation)) {\n return false;\n }\n\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = (options == null ? void 0 : options.queryKeyHashFn) || hashQueryKey;\n return hashFn(queryKey);\n}\n/**\n * Default query keys hash function.\n * Hashes the value into a stable hash.\n */\n\nfunction hashQueryKey(queryKey) {\n return JSON.stringify(queryKey, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val);\n}\n/**\n * Checks if key `b` partially matches with key `a`.\n */\n\nfunction partialMatchKey(a, b) {\n return partialDeepEqual(a, b);\n}\n/**\n * Checks if `b` partially matches with `a`.\n */\n\nfunction partialDeepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some(key => !partialDeepEqual(a[key], b[key]));\n }\n\n return false;\n}\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\n\nfunction replaceEqualDeep(a, b) {\n if (a === b) {\n return a;\n }\n\n const array = isPlainArray(a) && isPlainArray(b);\n\n if (array || isPlainObject(a) && isPlainObject(b)) {\n const aSize = array ? a.length : Object.keys(a).length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? [] : {};\n let equalItems = 0;\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n copy[key] = replaceEqualDeep(a[key], b[key]);\n\n if (copy[key] === a[key]) {\n equalItems++;\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy;\n }\n\n return b;\n}\n/**\n * Shallow compare objects. Only works with objects that always have the same properties.\n */\n\nfunction shallowEqualObjects(a, b) {\n if (a && !b || b && !a) {\n return false;\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n} // Copied from: https://github.com/jonschlinkert/is-plain-object\n\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n } // If has modified constructor\n\n\n const ctor = o.constructor;\n\n if (typeof ctor === 'undefined') {\n return true;\n } // If has modified prototype\n\n\n const prot = ctor.prototype;\n\n if (!hasObjectPrototype(prot)) {\n return false;\n } // If constructor does not have an Object-specific method\n\n\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false;\n } // Most likely a plain Object\n\n\n return true;\n}\n\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isQueryKey(value) {\n return Array.isArray(value);\n}\nfunction isError(value) {\n return value instanceof Error;\n}\nfunction sleep(timeout) {\n return new Promise(resolve => {\n setTimeout(resolve, timeout);\n });\n}\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\n\nfunction scheduleMicrotask(callback) {\n sleep(0).then(callback);\n}\nfunction getAbortController() {\n if (typeof AbortController === 'function') {\n return new AbortController();\n }\n\n return;\n}\nfunction replaceData(prevData, data, options) {\n // Use prev data if an isDataEqual function is defined and returns `true`\n if (options.isDataEqual != null && options.isDataEqual(prevData, data)) {\n return prevData;\n } else if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data);\n }\n\n return data;\n}\n\nexport { difference, functionalUpdate, getAbortController, hashQueryKey, hashQueryKeyByOptions, isError, isPlainArray, isPlainObject, isQueryKey, isServer, isValidTimeout, matchMutation, matchQuery, noop, parseFilterArgs, parseMutationArgs, parseMutationFilterArgs, parseQueryArgs, partialDeepEqual, partialMatchKey, replaceAt, replaceData, replaceEqualDeep, scheduleMicrotask, shallowEqualObjects, sleep, timeUntilStale };\n//# sourceMappingURL=utils.mjs.map\n","import { Subscribable } from './subscribable.mjs';\nimport { isServer } from './utils.mjs';\n\nclass FocusManager extends Subscribable {\n constructor() {\n super();\n\n this.setup = onFocus => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus(); // Listen to visibillitychange and focus\n\n\n window.addEventListener('visibilitychange', listener, false);\n window.addEventListener('focus', listener, false);\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener);\n window.removeEventListener('focus', listener);\n };\n }\n\n return;\n };\n }\n\n onSubscribe() {\n if (!this.cleanup) {\n this.setEventListener(this.setup);\n }\n }\n\n onUnsubscribe() {\n if (!this.hasListeners()) {\n var _this$cleanup;\n\n (_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);\n this.cleanup = undefined;\n }\n }\n\n setEventListener(setup) {\n var _this$cleanup2;\n\n this.setup = setup;\n (_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);\n this.cleanup = setup(focused => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n\n setFocused(focused) {\n const changed = this.focused !== focused;\n\n if (changed) {\n this.focused = focused;\n this.onFocus();\n }\n }\n\n onFocus() {\n this.listeners.forEach(({\n listener\n }) => {\n listener();\n });\n }\n\n isFocused() {\n if (typeof this.focused === 'boolean') {\n return this.focused;\n } // document global can be unavailable in react native\n\n\n if (typeof document === 'undefined') {\n return true;\n }\n\n return [undefined, 'visible', 'prerender'].includes(document.visibilityState);\n }\n\n}\nconst focusManager = new FocusManager();\n\nexport { FocusManager, focusManager };\n//# sourceMappingURL=focusManager.mjs.map\n","import { Subscribable } from './subscribable.mjs';\nimport { isServer } from './utils.mjs';\n\nconst onlineEvents = ['online', 'offline'];\nclass OnlineManager extends Subscribable {\n constructor() {\n super();\n\n this.setup = onOnline => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onOnline(); // Listen to online\n\n\n onlineEvents.forEach(event => {\n window.addEventListener(event, listener, false);\n });\n return () => {\n // Be sure to unsubscribe if a new handler is set\n onlineEvents.forEach(event => {\n window.removeEventListener(event, listener);\n });\n };\n }\n\n return;\n };\n }\n\n onSubscribe() {\n if (!this.cleanup) {\n this.setEventListener(this.setup);\n }\n }\n\n onUnsubscribe() {\n if (!this.hasListeners()) {\n var _this$cleanup;\n\n (_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);\n this.cleanup = undefined;\n }\n }\n\n setEventListener(setup) {\n var _this$cleanup2;\n\n this.setup = setup;\n (_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);\n this.cleanup = setup(online => {\n if (typeof online === 'boolean') {\n this.setOnline(online);\n } else {\n this.onOnline();\n }\n });\n }\n\n setOnline(online) {\n const changed = this.online !== online;\n\n if (changed) {\n this.online = online;\n this.onOnline();\n }\n }\n\n onOnline() {\n this.listeners.forEach(({\n listener\n }) => {\n listener();\n });\n }\n\n isOnline() {\n if (typeof this.online === 'boolean') {\n return this.online;\n }\n\n if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {\n return true;\n }\n\n return navigator.onLine;\n }\n\n}\nconst onlineManager = new OnlineManager();\n\nexport { OnlineManager, onlineManager };\n//# sourceMappingURL=onlineManager.mjs.map\n","import { focusManager } from './focusManager.mjs';\nimport { onlineManager } from './onlineManager.mjs';\nimport { sleep } from './utils.mjs';\n\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1000 * 2 ** failureCount, 30000);\n}\n\nfunction canFetch(networkMode) {\n return (networkMode != null ? networkMode : 'online') === 'online' ? onlineManager.isOnline() : true;\n}\nclass CancelledError {\n constructor(options) {\n this.revert = options == null ? void 0 : options.revert;\n this.silent = options == null ? void 0 : options.silent;\n }\n\n}\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let isResolved = false;\n let continueFn;\n let promiseResolve;\n let promiseReject;\n const promise = new Promise((outerResolve, outerReject) => {\n promiseResolve = outerResolve;\n promiseReject = outerReject;\n });\n\n const cancel = cancelOptions => {\n if (!isResolved) {\n reject(new CancelledError(cancelOptions));\n config.abort == null ? void 0 : config.abort();\n }\n };\n\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n\n const shouldPause = () => !focusManager.isFocused() || config.networkMode !== 'always' && !onlineManager.isOnline();\n\n const resolve = value => {\n if (!isResolved) {\n isResolved = true;\n config.onSuccess == null ? void 0 : config.onSuccess(value);\n continueFn == null ? void 0 : continueFn();\n promiseResolve(value);\n }\n };\n\n const reject = value => {\n if (!isResolved) {\n isResolved = true;\n config.onError == null ? void 0 : config.onError(value);\n continueFn == null ? void 0 : continueFn();\n promiseReject(value);\n }\n };\n\n const pause = () => {\n return new Promise(continueResolve => {\n continueFn = value => {\n const canContinue = isResolved || !shouldPause();\n\n if (canContinue) {\n continueResolve(value);\n }\n\n return canContinue;\n };\n\n config.onPause == null ? void 0 : config.onPause();\n }).then(() => {\n continueFn = undefined;\n\n if (!isResolved) {\n config.onContinue == null ? void 0 : config.onContinue();\n }\n });\n }; // Create loop function\n\n\n const run = () => {\n // Do nothing if already resolved\n if (isResolved) {\n return;\n }\n\n let promiseOrValue; // Execute query\n\n try {\n promiseOrValue = config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n\n Promise.resolve(promiseOrValue).then(resolve).catch(error => {\n var _config$retry, _config$retryDelay;\n\n // Stop if the fetch is already resolved\n if (isResolved) {\n return;\n } // Do we need to retry the request?\n\n\n const retry = (_config$retry = config.retry) != null ? _config$retry : 3;\n const retryDelay = (_config$retryDelay = config.retryDelay) != null ? _config$retryDelay : defaultRetryDelay;\n const delay = typeof retryDelay === 'function' ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === 'number' && failureCount < retry || typeof retry === 'function' && retry(failureCount, error);\n\n if (isRetryCancelled || !shouldRetry) {\n // We are done if the query does not need to be retried\n reject(error);\n return;\n }\n\n failureCount++; // Notify on fail\n\n config.onFail == null ? void 0 : config.onFail(failureCount, error); // Delay\n\n sleep(delay) // Pause if the document is not visible or when the device is offline\n .then(() => {\n if (shouldPause()) {\n return pause();\n }\n\n return;\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n }; // Start loop\n\n\n if (canFetch(config.networkMode)) {\n run();\n } else {\n pause().then(run);\n }\n\n return {\n promise,\n cancel,\n continue: () => {\n const didContinue = continueFn == null ? void 0 : continueFn();\n return didContinue ? promise : Promise.resolve();\n },\n cancelRetry,\n continueRetry\n };\n}\n\nexport { CancelledError, canFetch, createRetryer, isCancelledError };\n//# sourceMappingURL=retryer.mjs.map\n","const defaultLogger = console;\n\nexport { defaultLogger };\n//# sourceMappingURL=logger.mjs.map\n","import { scheduleMicrotask } from './utils.mjs';\n\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n\n let notifyFn = callback => {\n callback();\n };\n\n let batchNotifyFn = callback => {\n callback();\n };\n\n const batch = callback => {\n let result;\n transactions++;\n\n try {\n result = callback();\n } finally {\n transactions--;\n\n if (!transactions) {\n flush();\n }\n }\n\n return result;\n };\n\n const schedule = callback => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleMicrotask(() => {\n notifyFn(callback);\n });\n }\n };\n /**\n * All calls to the wrapped function will be batched.\n */\n\n\n const batchCalls = callback => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n };\n\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n\n if (originalQueue.length) {\n scheduleMicrotask(() => {\n batchNotifyFn(() => {\n originalQueue.forEach(callback => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n\n\n const setNotifyFunction = fn => {\n notifyFn = fn;\n };\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n\n\n const setBatchNotifyFunction = fn => {\n batchNotifyFn = fn;\n };\n\n return {\n batch,\n batchCalls,\n schedule,\n setNotifyFunction,\n setBatchNotifyFunction\n };\n} // SINGLETON\n\nconst notifyManager = createNotifyManager();\n\nexport { createNotifyManager, notifyManager };\n//# sourceMappingURL=notifyManager.mjs.map\n","import { isValidTimeout, isServer } from './utils.mjs';\n\nclass Removable {\n destroy() {\n this.clearGcTimeout();\n }\n\n scheduleGc() {\n this.clearGcTimeout();\n\n if (isValidTimeout(this.cacheTime)) {\n this.gcTimeout = setTimeout(() => {\n this.optionalRemove();\n }, this.cacheTime);\n }\n }\n\n updateCacheTime(newCacheTime) {\n // Default to 5 minutes (Infinity for server-side) if no cache time is set\n this.cacheTime = Math.max(this.cacheTime || 0, newCacheTime != null ? newCacheTime : isServer ? Infinity : 5 * 60 * 1000);\n }\n\n clearGcTimeout() {\n if (this.gcTimeout) {\n clearTimeout(this.gcTimeout);\n this.gcTimeout = undefined;\n }\n }\n\n}\n\nexport { Removable };\n//# sourceMappingURL=removable.mjs.map\n","import { replaceData, noop, timeUntilStale, getAbortController } from './utils.mjs';\nimport { defaultLogger } from './logger.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { createRetryer, isCancelledError, canFetch } from './retryer.mjs';\nimport { Removable } from './removable.mjs';\n\n// CLASS\nclass Query extends Removable {\n constructor(config) {\n super();\n this.abortSignalConsumed = false;\n this.defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.cache = config.cache;\n this.logger = config.logger || defaultLogger;\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.initialState = config.state || getDefaultState(this.options);\n this.state = this.initialState;\n this.scheduleGc();\n }\n\n get meta() {\n return this.options.meta;\n }\n\n setOptions(options) {\n this.options = { ...this.defaultOptions,\n ...options\n };\n this.updateCacheTime(this.options.cacheTime);\n }\n\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === 'idle') {\n this.cache.remove(this);\n }\n }\n\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options); // Set data and mark it as cached\n\n this.dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options == null ? void 0 : options.updatedAt,\n manual: options == null ? void 0 : options.manual\n });\n return data;\n }\n\n setState(state, setStateOptions) {\n this.dispatch({\n type: 'setState',\n state,\n setStateOptions\n });\n }\n\n cancel(options) {\n var _this$retryer;\n\n const promise = this.promise;\n (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n\n destroy() {\n super.destroy();\n this.cancel({\n silent: true\n });\n }\n\n reset() {\n this.destroy();\n this.setState(this.initialState);\n }\n\n isActive() {\n return this.observers.some(observer => observer.options.enabled !== false);\n }\n\n isDisabled() {\n return this.getObserversCount() > 0 && !this.isActive();\n }\n\n isStale() {\n return this.state.isInvalidated || !this.state.dataUpdatedAt || this.observers.some(observer => observer.getCurrentResult().isStale);\n }\n\n isStaleByTime(staleTime = 0) {\n return this.state.isInvalidated || !this.state.dataUpdatedAt || !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n\n onFocus() {\n var _this$retryer2;\n\n const observer = this.observers.find(x => x.shouldFetchOnWindowFocus());\n\n if (observer) {\n observer.refetch({\n cancelRefetch: false\n });\n } // Continue fetch if currently paused\n\n\n (_this$retryer2 = this.retryer) == null ? void 0 : _this$retryer2.continue();\n }\n\n onOnline() {\n var _this$retryer3;\n\n const observer = this.observers.find(x => x.shouldFetchOnReconnect());\n\n if (observer) {\n observer.refetch({\n cancelRefetch: false\n });\n } // Continue fetch if currently paused\n\n\n (_this$retryer3 = this.retryer) == null ? void 0 : _this$retryer3.continue();\n }\n\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer); // Stop the query from being garbage collected\n\n this.clearGcTimeout();\n this.cache.notify({\n type: 'observerAdded',\n query: this,\n observer\n });\n }\n }\n\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter(x => x !== observer);\n\n if (!this.observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.retryer) {\n if (this.abortSignalConsumed) {\n this.retryer.cancel({\n revert: true\n });\n } else {\n this.retryer.cancelRetry();\n }\n }\n\n this.scheduleGc();\n }\n\n this.cache.notify({\n type: 'observerRemoved',\n query: this,\n observer\n });\n }\n }\n\n getObserversCount() {\n return this.observers.length;\n }\n\n invalidate() {\n if (!this.state.isInvalidated) {\n this.dispatch({\n type: 'invalidate'\n });\n }\n }\n\n fetch(options, fetchOptions) {\n var _this$options$behavio, _context$fetchOptions;\n\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.dataUpdatedAt && fetchOptions != null && fetchOptions.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetches\n this.cancel({\n silent: true\n });\n } else if (this.promise) {\n var _this$retryer4;\n\n // make sure that retries that were potentially cancelled due to unmounts can continue\n (_this$retryer4 = this.retryer) == null ? void 0 : _this$retryer4.continueRetry(); // Return current promise if we are already fetching\n\n return this.promise;\n }\n } // Update config if passed, otherwise the config from the last execution is used\n\n\n if (options) {\n this.setOptions(options);\n } // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n\n\n if (!this.options.queryFn) {\n const observer = this.observers.find(x => x.options.queryFn);\n\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n this.logger.error(\"As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']\");\n }\n }\n\n const abortController = getAbortController(); // Create query function context\n\n const queryFnContext = {\n queryKey: this.queryKey,\n pageParam: undefined,\n meta: this.meta\n }; // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n\n const addSignalProperty = object => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (abortController) {\n this.abortSignalConsumed = true;\n return abortController.signal;\n }\n\n return undefined;\n }\n });\n };\n\n addSignalProperty(queryFnContext); // Create fetch function\n\n const fetchFn = () => {\n if (!this.options.queryFn) {\n return Promise.reject(\"Missing queryFn for queryKey '\" + this.options.queryHash + \"'\");\n }\n\n this.abortSignalConsumed = false;\n return this.options.queryFn(queryFnContext);\n }; // Trigger behavior hook\n\n\n const context = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context);\n (_this$options$behavio = this.options.behavior) == null ? void 0 : _this$options$behavio.onFetch(context); // Store state in case the current fetch needs to be reverted\n\n this.revertState = this.state; // Set to fetching state if not already in it\n\n if (this.state.fetchStatus === 'idle' || this.state.fetchMeta !== ((_context$fetchOptions = context.fetchOptions) == null ? void 0 : _context$fetchOptions.meta)) {\n var _context$fetchOptions2;\n\n this.dispatch({\n type: 'fetch',\n meta: (_context$fetchOptions2 = context.fetchOptions) == null ? void 0 : _context$fetchOptions2.meta\n });\n }\n\n const onError = error => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.dispatch({\n type: 'error',\n error: error\n });\n }\n\n if (!isCancelledError(error)) {\n var _this$cache$config$on, _this$cache$config, _this$cache$config$on2, _this$cache$config2;\n\n // Notify cache callback\n (_this$cache$config$on = (_this$cache$config = this.cache.config).onError) == null ? void 0 : _this$cache$config$on.call(_this$cache$config, error, this);\n (_this$cache$config$on2 = (_this$cache$config2 = this.cache.config).onSettled) == null ? void 0 : _this$cache$config$on2.call(_this$cache$config2, this.state.data, error, this);\n\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(error);\n }\n }\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc();\n }\n\n this.isFetchingOptimistic = false;\n }; // Try to fetch the data\n\n\n this.retryer = createRetryer({\n fn: context.fetchFn,\n abort: abortController == null ? void 0 : abortController.abort.bind(abortController),\n onSuccess: data => {\n var _this$cache$config$on3, _this$cache$config3, _this$cache$config$on4, _this$cache$config4;\n\n if (typeof data === 'undefined') {\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(\"Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: \" + this.queryHash);\n }\n\n onError(new Error(this.queryHash + \" data is undefined\"));\n return;\n }\n\n this.setData(data); // Notify cache callback\n\n (_this$cache$config$on3 = (_this$cache$config3 = this.cache.config).onSuccess) == null ? void 0 : _this$cache$config$on3.call(_this$cache$config3, data, this);\n (_this$cache$config$on4 = (_this$cache$config4 = this.cache.config).onSettled) == null ? void 0 : _this$cache$config$on4.call(_this$cache$config4, data, this.state.error, this);\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc();\n }\n\n this.isFetchingOptimistic = false;\n },\n onError,\n onFail: (failureCount, error) => {\n this.dispatch({\n type: 'failed',\n failureCount,\n error\n });\n },\n onPause: () => {\n this.dispatch({\n type: 'pause'\n });\n },\n onContinue: () => {\n this.dispatch({\n type: 'continue'\n });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode\n });\n this.promise = this.retryer.promise;\n return this.promise;\n }\n\n dispatch(action) {\n const reducer = state => {\n var _action$meta, _action$dataUpdatedAt;\n\n switch (action.type) {\n case 'failed':\n return { ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n\n case 'pause':\n return { ...state,\n fetchStatus: 'paused'\n };\n\n case 'continue':\n return { ...state,\n fetchStatus: 'fetching'\n };\n\n case 'fetch':\n return { ...state,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: (_action$meta = action.meta) != null ? _action$meta : null,\n fetchStatus: canFetch(this.options.networkMode) ? 'fetching' : 'paused',\n ...(!state.dataUpdatedAt && {\n error: null,\n status: 'loading'\n })\n };\n\n case 'success':\n return { ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: (_action$dataUpdatedAt = action.dataUpdatedAt) != null ? _action$dataUpdatedAt : Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null\n })\n };\n\n case 'error':\n const error = action.error;\n\n if (isCancelledError(error) && error.revert && this.revertState) {\n return { ...this.revertState,\n fetchStatus: 'idle'\n };\n }\n\n return { ...state,\n error: error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: 'idle',\n status: 'error'\n };\n\n case 'invalidate':\n return { ...state,\n isInvalidated: true\n };\n\n case 'setState':\n return { ...state,\n ...action.state\n };\n }\n };\n\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach(observer => {\n observer.onQueryUpdate(action);\n });\n this.cache.notify({\n query: this,\n type: 'updated',\n action\n });\n });\n }\n\n}\n\nfunction getDefaultState(options) {\n const data = typeof options.initialData === 'function' ? options.initialData() : options.initialData;\n const hasData = typeof data !== 'undefined';\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === 'function' ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt != null ? initialDataUpdatedAt : Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'loading',\n fetchStatus: 'idle'\n };\n}\n\nexport { Query };\n//# sourceMappingURL=query.mjs.map\n","import { hashQueryKeyByOptions, parseFilterArgs, matchQuery } from './utils.mjs';\nimport { Query } from './query.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { Subscribable } from './subscribable.mjs';\n\n// CLASS\nclass QueryCache extends Subscribable {\n constructor(config) {\n super();\n this.config = config || {};\n this.queries = [];\n this.queriesMap = {};\n }\n\n build(client, options, state) {\n var _options$queryHash;\n\n const queryKey = options.queryKey;\n const queryHash = (_options$queryHash = options.queryHash) != null ? _options$queryHash : hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n\n if (!query) {\n query = new Query({\n cache: this,\n logger: client.getLogger(),\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n\n return query;\n }\n\n add(query) {\n if (!this.queriesMap[query.queryHash]) {\n this.queriesMap[query.queryHash] = query;\n this.queries.push(query);\n this.notify({\n type: 'added',\n query\n });\n }\n }\n\n remove(query) {\n const queryInMap = this.queriesMap[query.queryHash];\n\n if (queryInMap) {\n query.destroy();\n this.queries = this.queries.filter(x => x !== query);\n\n if (queryInMap === query) {\n delete this.queriesMap[query.queryHash];\n }\n\n this.notify({\n type: 'removed',\n query\n });\n }\n }\n\n clear() {\n notifyManager.batch(() => {\n this.queries.forEach(query => {\n this.remove(query);\n });\n });\n }\n\n get(queryHash) {\n return this.queriesMap[queryHash];\n }\n\n getAll() {\n return this.queries;\n }\n\n find(arg1, arg2) {\n const [filters] = parseFilterArgs(arg1, arg2);\n\n if (typeof filters.exact === 'undefined') {\n filters.exact = true;\n }\n\n return this.queries.find(query => matchQuery(filters, query));\n }\n\n findAll(arg1, arg2) {\n const [filters] = parseFilterArgs(arg1, arg2);\n return Object.keys(filters).length > 0 ? this.queries.filter(query => matchQuery(filters, query)) : this.queries;\n }\n\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach(({\n listener\n }) => {\n listener(event);\n });\n });\n }\n\n onFocus() {\n notifyManager.batch(() => {\n this.queries.forEach(query => {\n query.onFocus();\n });\n });\n }\n\n onOnline() {\n notifyManager.batch(() => {\n this.queries.forEach(query => {\n query.onOnline();\n });\n });\n }\n\n}\n\nexport { QueryCache };\n//# sourceMappingURL=queryCache.mjs.map\n","import { defaultLogger } from './logger.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { Removable } from './removable.mjs';\nimport { createRetryer, canFetch } from './retryer.mjs';\n\n// CLASS\nclass Mutation extends Removable {\n constructor(config) {\n super();\n this.defaultOptions = config.defaultOptions;\n this.mutationId = config.mutationId;\n this.mutationCache = config.mutationCache;\n this.logger = config.logger || defaultLogger;\n this.observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n\n setOptions(options) {\n this.options = { ...this.defaultOptions,\n ...options\n };\n this.updateCacheTime(this.options.cacheTime);\n }\n\n get meta() {\n return this.options.meta;\n }\n\n setState(state) {\n this.dispatch({\n type: 'setState',\n state\n });\n }\n\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer); // Stop the mutation from being garbage collected\n\n this.clearGcTimeout();\n this.mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer\n });\n }\n }\n\n removeObserver(observer) {\n this.observers = this.observers.filter(x => x !== observer);\n this.scheduleGc();\n this.mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer\n });\n }\n\n optionalRemove() {\n if (!this.observers.length) {\n if (this.state.status === 'loading') {\n this.scheduleGc();\n } else {\n this.mutationCache.remove(this);\n }\n }\n }\n\n continue() {\n var _this$retryer$continu, _this$retryer;\n\n return (_this$retryer$continu = (_this$retryer = this.retryer) == null ? void 0 : _this$retryer.continue()) != null ? _this$retryer$continu : this.execute();\n }\n\n async execute() {\n const executeMutation = () => {\n var _this$options$retry;\n\n this.retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject('No mutationFn found');\n }\n\n return this.options.mutationFn(this.state.variables);\n },\n onFail: (failureCount, error) => {\n this.dispatch({\n type: 'failed',\n failureCount,\n error\n });\n },\n onPause: () => {\n this.dispatch({\n type: 'pause'\n });\n },\n onContinue: () => {\n this.dispatch({\n type: 'continue'\n });\n },\n retry: (_this$options$retry = this.options.retry) != null ? _this$options$retry : 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode\n });\n return this.retryer.promise;\n };\n\n const restored = this.state.status === 'loading';\n\n try {\n var _this$mutationCache$c3, _this$mutationCache$c4, _this$options$onSucce, _this$options2, _this$mutationCache$c5, _this$mutationCache$c6, _this$options$onSettl, _this$options3;\n\n if (!restored) {\n var _this$mutationCache$c, _this$mutationCache$c2, _this$options$onMutat, _this$options;\n\n this.dispatch({\n type: 'loading',\n variables: this.options.variables\n }); // Notify cache callback\n\n await ((_this$mutationCache$c = (_this$mutationCache$c2 = this.mutationCache.config).onMutate) == null ? void 0 : _this$mutationCache$c.call(_this$mutationCache$c2, this.state.variables, this));\n const context = await ((_this$options$onMutat = (_this$options = this.options).onMutate) == null ? void 0 : _this$options$onMutat.call(_this$options, this.state.variables));\n\n if (context !== this.state.context) {\n this.dispatch({\n type: 'loading',\n context,\n variables: this.state.variables\n });\n }\n }\n\n const data = await executeMutation(); // Notify cache callback\n\n await ((_this$mutationCache$c3 = (_this$mutationCache$c4 = this.mutationCache.config).onSuccess) == null ? void 0 : _this$mutationCache$c3.call(_this$mutationCache$c4, data, this.state.variables, this.state.context, this));\n await ((_this$options$onSucce = (_this$options2 = this.options).onSuccess) == null ? void 0 : _this$options$onSucce.call(_this$options2, data, this.state.variables, this.state.context)); // Notify cache callback\n\n await ((_this$mutationCache$c5 = (_this$mutationCache$c6 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c5.call(_this$mutationCache$c6, data, null, this.state.variables, this.state.context, this));\n await ((_this$options$onSettl = (_this$options3 = this.options).onSettled) == null ? void 0 : _this$options$onSettl.call(_this$options3, data, null, this.state.variables, this.state.context));\n this.dispatch({\n type: 'success',\n data\n });\n return data;\n } catch (error) {\n try {\n var _this$mutationCache$c7, _this$mutationCache$c8, _this$options$onError, _this$options4, _this$mutationCache$c9, _this$mutationCache$c10, _this$options$onSettl2, _this$options5;\n\n // Notify cache callback\n await ((_this$mutationCache$c7 = (_this$mutationCache$c8 = this.mutationCache.config).onError) == null ? void 0 : _this$mutationCache$c7.call(_this$mutationCache$c8, error, this.state.variables, this.state.context, this));\n\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error(error);\n }\n\n await ((_this$options$onError = (_this$options4 = this.options).onError) == null ? void 0 : _this$options$onError.call(_this$options4, error, this.state.variables, this.state.context)); // Notify cache callback\n\n await ((_this$mutationCache$c9 = (_this$mutationCache$c10 = this.mutationCache.config).onSettled) == null ? void 0 : _this$mutationCache$c9.call(_this$mutationCache$c10, undefined, error, this.state.variables, this.state.context, this));\n await ((_this$options$onSettl2 = (_this$options5 = this.options).onSettled) == null ? void 0 : _this$options$onSettl2.call(_this$options5, undefined, error, this.state.variables, this.state.context));\n throw error;\n } finally {\n this.dispatch({\n type: 'error',\n error: error\n });\n }\n }\n }\n\n dispatch(action) {\n const reducer = state => {\n switch (action.type) {\n case 'failed':\n return { ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n\n case 'pause':\n return { ...state,\n isPaused: true\n };\n\n case 'continue':\n return { ...state,\n isPaused: false\n };\n\n case 'loading':\n return { ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: !canFetch(this.options.networkMode),\n status: 'loading',\n variables: action.variables\n };\n\n case 'success':\n return { ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false\n };\n\n case 'error':\n return { ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error'\n };\n\n case 'setState':\n return { ...state,\n ...action.state\n };\n }\n };\n\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach(observer => {\n observer.onMutationUpdate(action);\n });\n this.mutationCache.notify({\n mutation: this,\n type: 'updated',\n action\n });\n });\n }\n\n}\nfunction getDefaultState() {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined\n };\n}\n\nexport { Mutation, getDefaultState };\n//# sourceMappingURL=mutation.mjs.map\n","import { notifyManager } from './notifyManager.mjs';\nimport { Mutation } from './mutation.mjs';\nimport { matchMutation, noop } from './utils.mjs';\nimport { Subscribable } from './subscribable.mjs';\n\n// CLASS\nclass MutationCache extends Subscribable {\n constructor(config) {\n super();\n this.config = config || {};\n this.mutations = [];\n this.mutationId = 0;\n }\n\n build(client, options, state) {\n const mutation = new Mutation({\n mutationCache: this,\n logger: client.getLogger(),\n mutationId: ++this.mutationId,\n options: client.defaultMutationOptions(options),\n state,\n defaultOptions: options.mutationKey ? client.getMutationDefaults(options.mutationKey) : undefined\n });\n this.add(mutation);\n return mutation;\n }\n\n add(mutation) {\n this.mutations.push(mutation);\n this.notify({\n type: 'added',\n mutation\n });\n }\n\n remove(mutation) {\n this.mutations = this.mutations.filter(x => x !== mutation);\n this.notify({\n type: 'removed',\n mutation\n });\n }\n\n clear() {\n notifyManager.batch(() => {\n this.mutations.forEach(mutation => {\n this.remove(mutation);\n });\n });\n }\n\n getAll() {\n return this.mutations;\n }\n\n find(filters) {\n if (typeof filters.exact === 'undefined') {\n filters.exact = true;\n }\n\n return this.mutations.find(mutation => matchMutation(filters, mutation));\n }\n\n findAll(filters) {\n return this.mutations.filter(mutation => matchMutation(filters, mutation));\n }\n\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach(({\n listener\n }) => {\n listener(event);\n });\n });\n }\n\n resumePausedMutations() {\n var _this$resuming;\n\n this.resuming = ((_this$resuming = this.resuming) != null ? _this$resuming : Promise.resolve()).then(() => {\n const pausedMutations = this.mutations.filter(x => x.state.isPaused);\n return notifyManager.batch(() => pausedMutations.reduce((promise, mutation) => promise.then(() => mutation.continue().catch(noop)), Promise.resolve()));\n }).then(() => {\n this.resuming = undefined;\n });\n return this.resuming;\n }\n\n}\n\nexport { MutationCache };\n//# sourceMappingURL=mutationCache.mjs.map\n","function infiniteQueryBehavior() {\n return {\n onFetch: context => {\n context.fetchFn = () => {\n var _context$fetchOptions, _context$fetchOptions2, _context$fetchOptions3, _context$fetchOptions4, _context$state$data, _context$state$data2;\n\n const refetchPage = (_context$fetchOptions = context.fetchOptions) == null ? void 0 : (_context$fetchOptions2 = _context$fetchOptions.meta) == null ? void 0 : _context$fetchOptions2.refetchPage;\n const fetchMore = (_context$fetchOptions3 = context.fetchOptions) == null ? void 0 : (_context$fetchOptions4 = _context$fetchOptions3.meta) == null ? void 0 : _context$fetchOptions4.fetchMore;\n const pageParam = fetchMore == null ? void 0 : fetchMore.pageParam;\n const isFetchingNextPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'forward';\n const isFetchingPreviousPage = (fetchMore == null ? void 0 : fetchMore.direction) === 'backward';\n const oldPages = ((_context$state$data = context.state.data) == null ? void 0 : _context$state$data.pages) || [];\n const oldPageParams = ((_context$state$data2 = context.state.data) == null ? void 0 : _context$state$data2.pageParams) || [];\n let newPageParams = oldPageParams;\n let cancelled = false;\n\n const addSignalProperty = object => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n var _context$signal;\n\n if ((_context$signal = context.signal) != null && _context$signal.aborted) {\n cancelled = true;\n } else {\n var _context$signal2;\n\n (_context$signal2 = context.signal) == null ? void 0 : _context$signal2.addEventListener('abort', () => {\n cancelled = true;\n });\n }\n\n return context.signal;\n }\n });\n }; // Get query function\n\n\n const queryFn = context.options.queryFn || (() => Promise.reject(\"Missing queryFn for queryKey '\" + context.options.queryHash + \"'\"));\n\n const buildNewPages = (pages, param, page, previous) => {\n newPageParams = previous ? [param, ...newPageParams] : [...newPageParams, param];\n return previous ? [page, ...pages] : [...pages, page];\n }; // Create function to fetch a page\n\n\n const fetchPage = (pages, manual, param, previous) => {\n if (cancelled) {\n return Promise.reject('Cancelled');\n }\n\n if (typeof param === 'undefined' && !manual && pages.length) {\n return Promise.resolve(pages);\n }\n\n const queryFnContext = {\n queryKey: context.queryKey,\n pageParam: param,\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext);\n const queryFnResult = queryFn(queryFnContext);\n const promise = Promise.resolve(queryFnResult).then(page => buildNewPages(pages, param, page, previous));\n return promise;\n };\n\n let promise; // Fetch first page?\n\n if (!oldPages.length) {\n promise = fetchPage([]);\n } // Fetch next page?\n else if (isFetchingNextPage) {\n const manual = typeof pageParam !== 'undefined';\n const param = manual ? pageParam : getNextPageParam(context.options, oldPages);\n promise = fetchPage(oldPages, manual, param);\n } // Fetch previous page?\n else if (isFetchingPreviousPage) {\n const manual = typeof pageParam !== 'undefined';\n const param = manual ? pageParam : getPreviousPageParam(context.options, oldPages);\n promise = fetchPage(oldPages, manual, param, true);\n } // Refetch pages\n else {\n newPageParams = [];\n const manual = typeof context.options.getNextPageParam === 'undefined';\n const shouldFetchFirstPage = refetchPage && oldPages[0] ? refetchPage(oldPages[0], 0, oldPages) : true; // Fetch first page\n\n promise = shouldFetchFirstPage ? fetchPage([], manual, oldPageParams[0]) : Promise.resolve(buildNewPages([], oldPageParams[0], oldPages[0])); // Fetch remaining pages\n\n for (let i = 1; i < oldPages.length; i++) {\n promise = promise.then(pages => {\n const shouldFetchNextPage = refetchPage && oldPages[i] ? refetchPage(oldPages[i], i, oldPages) : true;\n\n if (shouldFetchNextPage) {\n const param = manual ? oldPageParams[i] : getNextPageParam(context.options, pages);\n return fetchPage(pages, manual, param);\n }\n\n return Promise.resolve(buildNewPages(pages, oldPageParams[i], oldPages[i]));\n });\n }\n }\n\n const finalPromise = promise.then(pages => ({\n pages,\n pageParams: newPageParams\n }));\n return finalPromise;\n };\n }\n };\n}\nfunction getNextPageParam(options, pages) {\n return options.getNextPageParam == null ? void 0 : options.getNextPageParam(pages[pages.length - 1], pages);\n}\nfunction getPreviousPageParam(options, pages) {\n return options.getPreviousPageParam == null ? void 0 : options.getPreviousPageParam(pages[0], pages);\n}\n/**\n * Checks if there is a next page.\n * Returns `undefined` if it cannot be determined.\n */\n\nfunction hasNextPage(options, pages) {\n if (options.getNextPageParam && Array.isArray(pages)) {\n const nextPageParam = getNextPageParam(options, pages);\n return typeof nextPageParam !== 'undefined' && nextPageParam !== null && nextPageParam !== false;\n }\n\n return;\n}\n/**\n * Checks if there is a previous page.\n * Returns `undefined` if it cannot be determined.\n */\n\nfunction hasPreviousPage(options, pages) {\n if (options.getPreviousPageParam && Array.isArray(pages)) {\n const previousPageParam = getPreviousPageParam(options, pages);\n return typeof previousPageParam !== 'undefined' && previousPageParam !== null && previousPageParam !== false;\n }\n\n return;\n}\n\nexport { getNextPageParam, getPreviousPageParam, hasNextPage, hasPreviousPage, infiniteQueryBehavior };\n//# sourceMappingURL=infiniteQueryBehavior.mjs.map\n","import { parseFilterArgs, parseQueryArgs, functionalUpdate, noop, hashQueryKey, partialMatchKey, hashQueryKeyByOptions } from './utils.mjs';\nimport { QueryCache } from './queryCache.mjs';\nimport { MutationCache } from './mutationCache.mjs';\nimport { focusManager } from './focusManager.mjs';\nimport { onlineManager } from './onlineManager.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior.mjs';\nimport { defaultLogger } from './logger.mjs';\n\n// CLASS\nclass QueryClient {\n constructor(config = {}) {\n this.queryCache = config.queryCache || new QueryCache();\n this.mutationCache = config.mutationCache || new MutationCache();\n this.logger = config.logger || defaultLogger;\n this.defaultOptions = config.defaultOptions || {};\n this.queryDefaults = [];\n this.mutationDefaults = [];\n this.mountCount = 0;\n\n if (process.env.NODE_ENV !== 'production' && config.logger) {\n this.logger.error(\"Passing a custom logger has been deprecated and will be removed in the next major version.\");\n }\n }\n\n mount() {\n this.mountCount++;\n if (this.mountCount !== 1) return;\n this.unsubscribeFocus = focusManager.subscribe(() => {\n if (focusManager.isFocused()) {\n this.resumePausedMutations();\n this.queryCache.onFocus();\n }\n });\n this.unsubscribeOnline = onlineManager.subscribe(() => {\n if (onlineManager.isOnline()) {\n this.resumePausedMutations();\n this.queryCache.onOnline();\n }\n });\n }\n\n unmount() {\n var _this$unsubscribeFocu, _this$unsubscribeOnli;\n\n this.mountCount--;\n if (this.mountCount !== 0) return;\n (_this$unsubscribeFocu = this.unsubscribeFocus) == null ? void 0 : _this$unsubscribeFocu.call(this);\n this.unsubscribeFocus = undefined;\n (_this$unsubscribeOnli = this.unsubscribeOnline) == null ? void 0 : _this$unsubscribeOnli.call(this);\n this.unsubscribeOnline = undefined;\n }\n\n isFetching(arg1, arg2) {\n const [filters] = parseFilterArgs(arg1, arg2);\n filters.fetchStatus = 'fetching';\n return this.queryCache.findAll(filters).length;\n }\n\n isMutating(filters) {\n return this.mutationCache.findAll({ ...filters,\n fetching: true\n }).length;\n }\n\n getQueryData(queryKey, filters) {\n var _this$queryCache$find;\n\n return (_this$queryCache$find = this.queryCache.find(queryKey, filters)) == null ? void 0 : _this$queryCache$find.state.data;\n }\n\n ensureQueryData(arg1, arg2, arg3) {\n const parsedOptions = parseQueryArgs(arg1, arg2, arg3);\n const cachedData = this.getQueryData(parsedOptions.queryKey);\n return cachedData ? Promise.resolve(cachedData) : this.fetchQuery(parsedOptions);\n }\n\n getQueriesData(queryKeyOrFilters) {\n return this.getQueryCache().findAll(queryKeyOrFilters).map(({\n queryKey,\n state\n }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n\n setQueryData(queryKey, updater, options) {\n const query = this.queryCache.find(queryKey);\n const prevData = query == null ? void 0 : query.state.data;\n const data = functionalUpdate(updater, prevData);\n\n if (typeof data === 'undefined') {\n return undefined;\n }\n\n const parsedOptions = parseQueryArgs(queryKey);\n const defaultedOptions = this.defaultQueryOptions(parsedOptions);\n return this.queryCache.build(this, defaultedOptions).setData(data, { ...options,\n manual: true\n });\n }\n\n setQueriesData(queryKeyOrFilters, updater, options) {\n return notifyManager.batch(() => this.getQueryCache().findAll(queryKeyOrFilters).map(({\n queryKey\n }) => [queryKey, this.setQueryData(queryKey, updater, options)]));\n }\n\n getQueryState(queryKey, filters) {\n var _this$queryCache$find2;\n\n return (_this$queryCache$find2 = this.queryCache.find(queryKey, filters)) == null ? void 0 : _this$queryCache$find2.state;\n }\n\n removeQueries(arg1, arg2) {\n const [filters] = parseFilterArgs(arg1, arg2);\n const queryCache = this.queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach(query => {\n queryCache.remove(query);\n });\n });\n }\n\n resetQueries(arg1, arg2, arg3) {\n const [filters, options] = parseFilterArgs(arg1, arg2, arg3);\n const queryCache = this.queryCache;\n const refetchFilters = {\n type: 'active',\n ...filters\n };\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach(query => {\n query.reset();\n });\n return this.refetchQueries(refetchFilters, options);\n });\n }\n\n cancelQueries(arg1, arg2, arg3) {\n const [filters, cancelOptions = {}] = parseFilterArgs(arg1, arg2, arg3);\n\n if (typeof cancelOptions.revert === 'undefined') {\n cancelOptions.revert = true;\n }\n\n const promises = notifyManager.batch(() => this.queryCache.findAll(filters).map(query => query.cancel(cancelOptions)));\n return Promise.all(promises).then(noop).catch(noop);\n }\n\n invalidateQueries(arg1, arg2, arg3) {\n const [filters, options] = parseFilterArgs(arg1, arg2, arg3);\n return notifyManager.batch(() => {\n var _ref, _filters$refetchType;\n\n this.queryCache.findAll(filters).forEach(query => {\n query.invalidate();\n });\n\n if (filters.refetchType === 'none') {\n return Promise.resolve();\n }\n\n const refetchFilters = { ...filters,\n type: (_ref = (_filters$refetchType = filters.refetchType) != null ? _filters$refetchType : filters.type) != null ? _ref : 'active'\n };\n return this.refetchQueries(refetchFilters, options);\n });\n }\n\n refetchQueries(arg1, arg2, arg3) {\n const [filters, options] = parseFilterArgs(arg1, arg2, arg3);\n const promises = notifyManager.batch(() => this.queryCache.findAll(filters).filter(query => !query.isDisabled()).map(query => {\n var _options$cancelRefetc;\n\n return query.fetch(undefined, { ...options,\n cancelRefetch: (_options$cancelRefetc = options == null ? void 0 : options.cancelRefetch) != null ? _options$cancelRefetc : true,\n meta: {\n refetchPage: filters.refetchPage\n }\n });\n }));\n let promise = Promise.all(promises).then(noop);\n\n if (!(options != null && options.throwOnError)) {\n promise = promise.catch(noop);\n }\n\n return promise;\n }\n\n fetchQuery(arg1, arg2, arg3) {\n const parsedOptions = parseQueryArgs(arg1, arg2, arg3);\n const defaultedOptions = this.defaultQueryOptions(parsedOptions); // https://github.com/tannerlinsley/react-query/issues/652\n\n if (typeof defaultedOptions.retry === 'undefined') {\n defaultedOptions.retry = false;\n }\n\n const query = this.queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(defaultedOptions.staleTime) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n\n prefetchQuery(arg1, arg2, arg3) {\n return this.fetchQuery(arg1, arg2, arg3).then(noop).catch(noop);\n }\n\n fetchInfiniteQuery(arg1, arg2, arg3) {\n const parsedOptions = parseQueryArgs(arg1, arg2, arg3);\n parsedOptions.behavior = infiniteQueryBehavior();\n return this.fetchQuery(parsedOptions);\n }\n\n prefetchInfiniteQuery(arg1, arg2, arg3) {\n return this.fetchInfiniteQuery(arg1, arg2, arg3).then(noop).catch(noop);\n }\n\n resumePausedMutations() {\n return this.mutationCache.resumePausedMutations();\n }\n\n getQueryCache() {\n return this.queryCache;\n }\n\n getMutationCache() {\n return this.mutationCache;\n }\n\n getLogger() {\n return this.logger;\n }\n\n getDefaultOptions() {\n return this.defaultOptions;\n }\n\n setDefaultOptions(options) {\n this.defaultOptions = options;\n }\n\n setQueryDefaults(queryKey, options) {\n const result = this.queryDefaults.find(x => hashQueryKey(queryKey) === hashQueryKey(x.queryKey));\n\n if (result) {\n result.defaultOptions = options;\n } else {\n this.queryDefaults.push({\n queryKey,\n defaultOptions: options\n });\n }\n }\n\n getQueryDefaults(queryKey) {\n if (!queryKey) {\n return undefined;\n } // Get the first matching defaults\n\n\n const firstMatchingDefaults = this.queryDefaults.find(x => partialMatchKey(queryKey, x.queryKey)); // Additional checks and error in dev mode\n\n if (process.env.NODE_ENV !== 'production') {\n // Retrieve all matching defaults for the given key\n const matchingDefaults = this.queryDefaults.filter(x => partialMatchKey(queryKey, x.queryKey)); // It is ok not having defaults, but it is error prone to have more than 1 default for a given key\n\n if (matchingDefaults.length > 1) {\n this.logger.error(\"[QueryClient] Several query defaults match with key '\" + JSON.stringify(queryKey) + \"'. The first matching query defaults are used. Please check how query defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetquerydefaults.\");\n }\n }\n\n return firstMatchingDefaults == null ? void 0 : firstMatchingDefaults.defaultOptions;\n }\n\n setMutationDefaults(mutationKey, options) {\n const result = this.mutationDefaults.find(x => hashQueryKey(mutationKey) === hashQueryKey(x.mutationKey));\n\n if (result) {\n result.defaultOptions = options;\n } else {\n this.mutationDefaults.push({\n mutationKey,\n defaultOptions: options\n });\n }\n }\n\n getMutationDefaults(mutationKey) {\n if (!mutationKey) {\n return undefined;\n } // Get the first matching defaults\n\n\n const firstMatchingDefaults = this.mutationDefaults.find(x => partialMatchKey(mutationKey, x.mutationKey)); // Additional checks and error in dev mode\n\n if (process.env.NODE_ENV !== 'production') {\n // Retrieve all matching defaults for the given key\n const matchingDefaults = this.mutationDefaults.filter(x => partialMatchKey(mutationKey, x.mutationKey)); // It is ok not having defaults, but it is error prone to have more than 1 default for a given key\n\n if (matchingDefaults.length > 1) {\n this.logger.error(\"[QueryClient] Several mutation defaults match with key '\" + JSON.stringify(mutationKey) + \"'. The first matching mutation defaults are used. Please check how mutation defaults are registered. Order does matter here. cf. https://react-query.tanstack.com/reference/QueryClient#queryclientsetmutationdefaults.\");\n }\n }\n\n return firstMatchingDefaults == null ? void 0 : firstMatchingDefaults.defaultOptions;\n }\n\n defaultQueryOptions(options) {\n if (options != null && options._defaulted) {\n return options;\n }\n\n const defaultedOptions = { ...this.defaultOptions.queries,\n ...this.getQueryDefaults(options == null ? void 0 : options.queryKey),\n ...options,\n _defaulted: true\n };\n\n if (!defaultedOptions.queryHash && defaultedOptions.queryKey) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(defaultedOptions.queryKey, defaultedOptions);\n } // dependent default values\n\n\n if (typeof defaultedOptions.refetchOnReconnect === 'undefined') {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== 'always';\n }\n\n if (typeof defaultedOptions.useErrorBoundary === 'undefined') {\n defaultedOptions.useErrorBoundary = !!defaultedOptions.suspense;\n }\n\n return defaultedOptions;\n }\n\n defaultMutationOptions(options) {\n if (options != null && options._defaulted) {\n return options;\n }\n\n return { ...this.defaultOptions.mutations,\n ...this.getMutationDefaults(options == null ? void 0 : options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n\n clear() {\n this.queryCache.clear();\n this.mutationCache.clear();\n }\n\n}\n\nexport { QueryClient };\n//# sourceMappingURL=queryClient.mjs.map\n","import { shallowEqualObjects, noop, isServer, isValidTimeout, timeUntilStale, replaceData } from './utils.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { focusManager } from './focusManager.mjs';\nimport { Subscribable } from './subscribable.mjs';\nimport { canFetch, isCancelledError } from './retryer.mjs';\n\nclass QueryObserver extends Subscribable {\n constructor(client, options) {\n super();\n this.client = client;\n this.options = options;\n this.trackedProps = new Set();\n this.selectError = null;\n this.bindMethods();\n this.setOptions(options);\n }\n\n bindMethods() {\n this.remove = this.remove.bind(this);\n this.refetch = this.refetch.bind(this);\n }\n\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.currentQuery.addObserver(this);\n\n if (shouldFetchOnMount(this.currentQuery, this.options)) {\n this.executeFetch();\n }\n\n this.updateTimers();\n }\n }\n\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n\n shouldFetchOnReconnect() {\n return shouldFetchOn(this.currentQuery, this.options, this.options.refetchOnReconnect);\n }\n\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(this.currentQuery, this.options, this.options.refetchOnWindowFocus);\n }\n\n destroy() {\n this.listeners = new Set();\n this.clearStaleTimeout();\n this.clearRefetchInterval();\n this.currentQuery.removeObserver(this);\n }\n\n setOptions(options, notifyOptions) {\n const prevOptions = this.options;\n const prevQuery = this.currentQuery;\n this.options = this.client.defaultQueryOptions(options);\n\n if (process.env.NODE_ENV !== 'production' && typeof (options == null ? void 0 : options.isDataEqual) !== 'undefined') {\n this.client.getLogger().error(\"The isDataEqual option has been deprecated and will be removed in the next major version. You can achieve the same functionality by passing a function as the structuralSharing option\");\n }\n\n if (!shallowEqualObjects(prevOptions, this.options)) {\n this.client.getQueryCache().notify({\n type: 'observerOptionsUpdated',\n query: this.currentQuery,\n observer: this\n });\n }\n\n if (typeof this.options.enabled !== 'undefined' && typeof this.options.enabled !== 'boolean') {\n throw new Error('Expected enabled to be a boolean');\n } // Keep previous query key if the user does not supply one\n\n\n if (!this.options.queryKey) {\n this.options.queryKey = prevOptions.queryKey;\n }\n\n this.updateQuery();\n const mounted = this.hasListeners(); // Fetch if there are subscribers\n\n if (mounted && shouldFetchOptionally(this.currentQuery, prevQuery, this.options, prevOptions)) {\n this.executeFetch();\n } // Update result\n\n\n this.updateResult(notifyOptions); // Update stale interval if needed\n\n if (mounted && (this.currentQuery !== prevQuery || this.options.enabled !== prevOptions.enabled || this.options.staleTime !== prevOptions.staleTime)) {\n this.updateStaleTimeout();\n }\n\n const nextRefetchInterval = this.computeRefetchInterval(); // Update refetch interval if needed\n\n if (mounted && (this.currentQuery !== prevQuery || this.options.enabled !== prevOptions.enabled || nextRefetchInterval !== this.currentRefetchInterval)) {\n this.updateRefetchInterval(nextRefetchInterval);\n }\n }\n\n getOptimisticResult(options) {\n const query = this.client.getQueryCache().build(this.client, options);\n const result = this.createResult(query, options);\n\n if (shouldAssignObserverCurrentProperties(this, result, options)) {\n // this assigns the optimistic result to the current Observer\n // because if the query function changes, useQuery will be performing\n // an effect where it would fetch again.\n // When the fetch finishes, we perform a deep data cloning in order\n // to reuse objects references. This deep data clone is performed against\n // the `observer.currentResult.data` property\n // When QueryKey changes, we refresh the query and get new `optimistic`\n // result, while we leave the `observer.currentResult`, so when new data\n // arrives, it finds the old `observer.currentResult` which is related\n // to the old QueryKey. Which means that currentResult and selectData are\n // out of sync already.\n // To solve this, we move the cursor of the currentResult everytime\n // an observer reads an optimistic value.\n // When keeping the previous data, the result doesn't change until new\n // data arrives.\n this.currentResult = result;\n this.currentResultOptions = this.options;\n this.currentResultState = this.currentQuery.state;\n }\n\n return result;\n }\n\n getCurrentResult() {\n return this.currentResult;\n }\n\n trackResult(result) {\n const trackedResult = {};\n Object.keys(result).forEach(key => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackedProps.add(key);\n return result[key];\n }\n });\n });\n return trackedResult;\n }\n\n getCurrentQuery() {\n return this.currentQuery;\n }\n\n remove() {\n this.client.getQueryCache().remove(this.currentQuery);\n }\n\n refetch({\n refetchPage,\n ...options\n } = {}) {\n return this.fetch({ ...options,\n meta: {\n refetchPage\n }\n });\n }\n\n fetchOptimistic(options) {\n const defaultedOptions = this.client.defaultQueryOptions(options);\n const query = this.client.getQueryCache().build(this.client, defaultedOptions);\n query.isFetchingOptimistic = true;\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n\n fetch(fetchOptions) {\n var _fetchOptions$cancelR;\n\n return this.executeFetch({ ...fetchOptions,\n cancelRefetch: (_fetchOptions$cancelR = fetchOptions.cancelRefetch) != null ? _fetchOptions$cancelR : true\n }).then(() => {\n this.updateResult();\n return this.currentResult;\n });\n }\n\n executeFetch(fetchOptions) {\n // Make sure we reference the latest query as the current one might have been removed\n this.updateQuery(); // Fetch\n\n let promise = this.currentQuery.fetch(this.options, fetchOptions);\n\n if (!(fetchOptions != null && fetchOptions.throwOnError)) {\n promise = promise.catch(noop);\n }\n\n return promise;\n }\n\n updateStaleTimeout() {\n this.clearStaleTimeout();\n\n if (isServer || this.currentResult.isStale || !isValidTimeout(this.options.staleTime)) {\n return;\n }\n\n const time = timeUntilStale(this.currentResult.dataUpdatedAt, this.options.staleTime); // The timeout is sometimes triggered 1 ms before the stale time expiration.\n // To mitigate this issue we always add 1 ms to the timeout.\n\n const timeout = time + 1;\n this.staleTimeoutId = setTimeout(() => {\n if (!this.currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n\n computeRefetchInterval() {\n var _this$options$refetch;\n\n return typeof this.options.refetchInterval === 'function' ? this.options.refetchInterval(this.currentResult.data, this.currentQuery) : (_this$options$refetch = this.options.refetchInterval) != null ? _this$options$refetch : false;\n }\n\n updateRefetchInterval(nextInterval) {\n this.clearRefetchInterval();\n this.currentRefetchInterval = nextInterval;\n\n if (isServer || this.options.enabled === false || !isValidTimeout(this.currentRefetchInterval) || this.currentRefetchInterval === 0) {\n return;\n }\n\n this.refetchIntervalId = setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.executeFetch();\n }\n }, this.currentRefetchInterval);\n }\n\n updateTimers() {\n this.updateStaleTimeout();\n this.updateRefetchInterval(this.computeRefetchInterval());\n }\n\n clearStaleTimeout() {\n if (this.staleTimeoutId) {\n clearTimeout(this.staleTimeoutId);\n this.staleTimeoutId = undefined;\n }\n }\n\n clearRefetchInterval() {\n if (this.refetchIntervalId) {\n clearInterval(this.refetchIntervalId);\n this.refetchIntervalId = undefined;\n }\n }\n\n createResult(query, options) {\n const prevQuery = this.currentQuery;\n const prevOptions = this.options;\n const prevResult = this.currentResult;\n const prevResultState = this.currentResultState;\n const prevResultOptions = this.currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.currentQueryInitialState;\n const prevQueryResult = queryChange ? this.currentResult : this.previousQueryResult;\n const {\n state\n } = query;\n let {\n dataUpdatedAt,\n error,\n errorUpdatedAt,\n fetchStatus,\n status\n } = state;\n let isPreviousData = false;\n let isPlaceholderData = false;\n let data; // Optimistically set result in fetching state if needed\n\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n\n if (fetchOnMount || fetchOptionally) {\n fetchStatus = canFetch(query.options.networkMode) ? 'fetching' : 'paused';\n\n if (!dataUpdatedAt) {\n status = 'loading';\n }\n }\n\n if (options._optimisticResults === 'isRestoring') {\n fetchStatus = 'idle';\n }\n } // Keep previous data if needed\n\n\n if (options.keepPreviousData && !state.dataUpdatedAt && prevQueryResult != null && prevQueryResult.isSuccess && status !== 'error') {\n data = prevQueryResult.data;\n dataUpdatedAt = prevQueryResult.dataUpdatedAt;\n status = prevQueryResult.status;\n isPreviousData = true;\n } // Select data if needed\n else if (options.select && typeof state.data !== 'undefined') {\n // Memoize select result\n if (prevResult && state.data === (prevResultState == null ? void 0 : prevResultState.data) && options.select === this.selectFn) {\n data = this.selectResult;\n } else {\n try {\n this.selectFn = options.select;\n data = options.select(state.data);\n data = replaceData(prevResult == null ? void 0 : prevResult.data, data, options);\n this.selectResult = data;\n this.selectError = null;\n } catch (selectError) {\n if (process.env.NODE_ENV !== 'production') {\n this.client.getLogger().error(selectError);\n }\n\n this.selectError = selectError;\n }\n }\n } // Use query data\n else {\n data = state.data;\n } // Show placeholder data if needed\n\n\n if (typeof options.placeholderData !== 'undefined' && typeof data === 'undefined' && status === 'loading') {\n let placeholderData; // Memoize placeholder data\n\n if (prevResult != null && prevResult.isPlaceholderData && options.placeholderData === (prevResultOptions == null ? void 0 : prevResultOptions.placeholderData)) {\n placeholderData = prevResult.data;\n } else {\n placeholderData = typeof options.placeholderData === 'function' ? options.placeholderData() : options.placeholderData;\n\n if (options.select && typeof placeholderData !== 'undefined') {\n try {\n placeholderData = options.select(placeholderData);\n this.selectError = null;\n } catch (selectError) {\n if (process.env.NODE_ENV !== 'production') {\n this.client.getLogger().error(selectError);\n }\n\n this.selectError = selectError;\n }\n }\n }\n\n if (typeof placeholderData !== 'undefined') {\n status = 'success';\n data = replaceData(prevResult == null ? void 0 : prevResult.data, placeholderData, options);\n isPlaceholderData = true;\n }\n }\n\n if (this.selectError) {\n error = this.selectError;\n data = this.selectResult;\n errorUpdatedAt = Date.now();\n status = 'error';\n }\n\n const isFetching = fetchStatus === 'fetching';\n const isLoading = status === 'loading';\n const isError = status === 'error';\n const result = {\n status,\n fetchStatus,\n isLoading,\n isSuccess: status === 'success',\n isError,\n isInitialLoading: isLoading && isFetching,\n data,\n dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: state.fetchFailureCount,\n failureReason: state.fetchFailureReason,\n errorUpdateCount: state.errorUpdateCount,\n isFetched: state.dataUpdateCount > 0 || state.errorUpdateCount > 0,\n isFetchedAfterMount: state.dataUpdateCount > queryInitialState.dataUpdateCount || state.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isLoading,\n isLoadingError: isError && state.dataUpdatedAt === 0,\n isPaused: fetchStatus === 'paused',\n isPlaceholderData,\n isPreviousData,\n isRefetchError: isError && state.dataUpdatedAt !== 0,\n isStale: isStale(query, options),\n refetch: this.refetch,\n remove: this.remove\n };\n return result;\n }\n\n updateResult(notifyOptions) {\n const prevResult = this.currentResult;\n const nextResult = this.createResult(this.currentQuery, this.options);\n this.currentResultState = this.currentQuery.state;\n this.currentResultOptions = this.options; // Only notify and update result if something has changed\n\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n\n this.currentResult = nextResult; // Determine which callbacks to trigger\n\n const defaultNotifyOptions = {\n cache: true\n };\n\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n\n const {\n notifyOnChangeProps\n } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === 'function' ? notifyOnChangeProps() : notifyOnChangeProps;\n\n if (notifyOnChangePropsValue === 'all' || !notifyOnChangePropsValue && !this.trackedProps.size) {\n return true;\n }\n\n const includedProps = new Set(notifyOnChangePropsValue != null ? notifyOnChangePropsValue : this.trackedProps);\n\n if (this.options.useErrorBoundary) {\n includedProps.add('error');\n }\n\n return Object.keys(this.currentResult).some(key => {\n const typedKey = key;\n const changed = this.currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n\n if ((notifyOptions == null ? void 0 : notifyOptions.listeners) !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true;\n }\n\n this.notify({ ...defaultNotifyOptions,\n ...notifyOptions\n });\n }\n\n updateQuery() {\n const query = this.client.getQueryCache().build(this.client, this.options);\n\n if (query === this.currentQuery) {\n return;\n }\n\n const prevQuery = this.currentQuery;\n this.currentQuery = query;\n this.currentQueryInitialState = query.state;\n this.previousQueryResult = this.currentResult;\n\n if (this.hasListeners()) {\n prevQuery == null ? void 0 : prevQuery.removeObserver(this);\n query.addObserver(this);\n }\n }\n\n onQueryUpdate(action) {\n const notifyOptions = {};\n\n if (action.type === 'success') {\n notifyOptions.onSuccess = !action.manual;\n } else if (action.type === 'error' && !isCancelledError(action.error)) {\n notifyOptions.onError = true;\n }\n\n this.updateResult(notifyOptions);\n\n if (this.hasListeners()) {\n this.updateTimers();\n }\n }\n\n notify(notifyOptions) {\n notifyManager.batch(() => {\n // First trigger the configuration callbacks\n if (notifyOptions.onSuccess) {\n var _this$options$onSucce, _this$options, _this$options$onSettl, _this$options2;\n\n (_this$options$onSucce = (_this$options = this.options).onSuccess) == null ? void 0 : _this$options$onSucce.call(_this$options, this.currentResult.data);\n (_this$options$onSettl = (_this$options2 = this.options).onSettled) == null ? void 0 : _this$options$onSettl.call(_this$options2, this.currentResult.data, null);\n } else if (notifyOptions.onError) {\n var _this$options$onError, _this$options3, _this$options$onSettl2, _this$options4;\n\n (_this$options$onError = (_this$options3 = this.options).onError) == null ? void 0 : _this$options$onError.call(_this$options3, this.currentResult.error);\n (_this$options$onSettl2 = (_this$options4 = this.options).onSettled) == null ? void 0 : _this$options$onSettl2.call(_this$options4, undefined, this.currentResult.error);\n } // Then trigger the listeners\n\n\n if (notifyOptions.listeners) {\n this.listeners.forEach(({\n listener\n }) => {\n listener(this.currentResult);\n });\n } // Then the cache listeners\n\n\n if (notifyOptions.cache) {\n this.client.getQueryCache().notify({\n query: this.currentQuery,\n type: 'observerResultsUpdated'\n });\n }\n });\n }\n\n}\n\nfunction shouldLoadOnMount(query, options) {\n return options.enabled !== false && !query.state.dataUpdatedAt && !(query.state.status === 'error' && options.retryOnMount === false);\n}\n\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.dataUpdatedAt > 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\n\nfunction shouldFetchOn(query, options, field) {\n if (options.enabled !== false) {\n const value = typeof field === 'function' ? field(query) : field;\n return value === 'always' || value !== false && isStale(query, options);\n }\n\n return false;\n}\n\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return options.enabled !== false && (query !== prevQuery || prevOptions.enabled === false) && (!options.suspense || query.state.status !== 'error') && isStale(query, options);\n}\n\nfunction isStale(query, options) {\n return query.isStaleByTime(options.staleTime);\n} // this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\n\n\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult, options) {\n // it is important to keep this condition like this for three reasons:\n // 1. It will get removed in the v5\n // 2. it reads: don't update the properties if we want to keep the previous\n // data.\n // 3. The opposite condition (!options.keepPreviousData) would fallthrough\n // and will result in a bad decision\n if (options.keepPreviousData) {\n return false;\n } // this means we want to put some placeholder data when pending and queryKey\n // changed.\n\n\n if (options.placeholderData !== undefined) {\n // re-assign properties only if current data is placeholder data\n // which means that data did not arrive yet, so, if there is some cached data\n // we need to \"prepare\" to receive it\n return optimisticResult.isPlaceholderData;\n } // if the newly created result isn't what the observer is holding as current,\n // then we'll need to update the properties as well\n\n\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n } // basically, just keep previous properties if nothing changed\n\n\n return false;\n}\n\nexport { QueryObserver };\n//# sourceMappingURL=queryObserver.mjs.map\n","import { getDefaultState } from './mutation.mjs';\nimport { notifyManager } from './notifyManager.mjs';\nimport { Subscribable } from './subscribable.mjs';\nimport { shallowEqualObjects } from './utils.mjs';\n\n// CLASS\nclass MutationObserver extends Subscribable {\n constructor(client, options) {\n super();\n this.client = client;\n this.setOptions(options);\n this.bindMethods();\n this.updateResult();\n }\n\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n\n setOptions(options) {\n var _this$currentMutation;\n\n const prevOptions = this.options;\n this.options = this.client.defaultMutationOptions(options);\n\n if (!shallowEqualObjects(prevOptions, this.options)) {\n this.client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.currentMutation,\n observer: this\n });\n }\n\n (_this$currentMutation = this.currentMutation) == null ? void 0 : _this$currentMutation.setOptions(this.options);\n }\n\n onUnsubscribe() {\n if (!this.hasListeners()) {\n var _this$currentMutation2;\n\n (_this$currentMutation2 = this.currentMutation) == null ? void 0 : _this$currentMutation2.removeObserver(this);\n }\n }\n\n onMutationUpdate(action) {\n this.updateResult(); // Determine which callbacks to trigger\n\n const notifyOptions = {\n listeners: true\n };\n\n if (action.type === 'success') {\n notifyOptions.onSuccess = true;\n } else if (action.type === 'error') {\n notifyOptions.onError = true;\n }\n\n this.notify(notifyOptions);\n }\n\n getCurrentResult() {\n return this.currentResult;\n }\n\n reset() {\n this.currentMutation = undefined;\n this.updateResult();\n this.notify({\n listeners: true\n });\n }\n\n mutate(variables, options) {\n this.mutateOptions = options;\n\n if (this.currentMutation) {\n this.currentMutation.removeObserver(this);\n }\n\n this.currentMutation = this.client.getMutationCache().build(this.client, { ...this.options,\n variables: typeof variables !== 'undefined' ? variables : this.options.variables\n });\n this.currentMutation.addObserver(this);\n return this.currentMutation.execute();\n }\n\n updateResult() {\n const state = this.currentMutation ? this.currentMutation.state : getDefaultState();\n const result = { ...state,\n isLoading: state.status === 'loading',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset\n };\n this.currentResult = result;\n }\n\n notify(options) {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.mutateOptions && this.hasListeners()) {\n if (options.onSuccess) {\n var _this$mutateOptions$o, _this$mutateOptions, _this$mutateOptions$o2, _this$mutateOptions2;\n\n (_this$mutateOptions$o = (_this$mutateOptions = this.mutateOptions).onSuccess) == null ? void 0 : _this$mutateOptions$o.call(_this$mutateOptions, this.currentResult.data, this.currentResult.variables, this.currentResult.context);\n (_this$mutateOptions$o2 = (_this$mutateOptions2 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o2.call(_this$mutateOptions2, this.currentResult.data, null, this.currentResult.variables, this.currentResult.context);\n } else if (options.onError) {\n var _this$mutateOptions$o3, _this$mutateOptions3, _this$mutateOptions$o4, _this$mutateOptions4;\n\n (_this$mutateOptions$o3 = (_this$mutateOptions3 = this.mutateOptions).onError) == null ? void 0 : _this$mutateOptions$o3.call(_this$mutateOptions3, this.currentResult.error, this.currentResult.variables, this.currentResult.context);\n (_this$mutateOptions$o4 = (_this$mutateOptions4 = this.mutateOptions).onSettled) == null ? void 0 : _this$mutateOptions$o4.call(_this$mutateOptions4, undefined, this.currentResult.error, this.currentResult.variables, this.currentResult.context);\n }\n } // Then trigger the listeners\n\n\n if (options.listeners) {\n this.listeners.forEach(({\n listener\n }) => {\n listener(this.currentResult);\n });\n }\n });\n }\n\n}\n\nexport { MutationObserver };\n//# sourceMappingURL=mutationObserver.mjs.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","'use client';\nimport { useSyncExternalStore as useSyncExternalStore$1 } from 'use-sync-external-store/shim/index.js';\n\nconst useSyncExternalStore = useSyncExternalStore$1;\n\nexport { useSyncExternalStore };\n//# sourceMappingURL=useSyncExternalStore.mjs.map\n","'use client';\nimport * as React from 'react';\n\nconst defaultContext = /*#__PURE__*/React.createContext(undefined);\nconst QueryClientSharingContext = /*#__PURE__*/React.createContext(false); // If we are given a context, we will use it.\n// Otherwise, if contextSharing is on, we share the first and at least one\n// instance of the context across the window\n// to ensure that if React Query is used across\n// different bundles or microfrontends they will\n// all use the same **instance** of context, regardless\n// of module scoping.\n\nfunction getQueryClientContext(context, contextSharing) {\n if (context) {\n return context;\n }\n\n if (contextSharing && typeof window !== 'undefined') {\n if (!window.ReactQueryClientContext) {\n window.ReactQueryClientContext = defaultContext;\n }\n\n return window.ReactQueryClientContext;\n }\n\n return defaultContext;\n}\n\nconst useQueryClient = ({\n context\n} = {}) => {\n const queryClient = React.useContext(getQueryClientContext(context, React.useContext(QueryClientSharingContext)));\n\n if (!queryClient) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one');\n }\n\n return queryClient;\n};\nconst QueryClientProvider = ({\n client,\n children,\n context,\n contextSharing = false\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n\n if (process.env.NODE_ENV !== 'production' && contextSharing) {\n client.getLogger().error(\"The contextSharing option has been deprecated and will be removed in the next major version\");\n }\n\n const Context = getQueryClientContext(context, contextSharing);\n return /*#__PURE__*/React.createElement(QueryClientSharingContext.Provider, {\n value: !context && contextSharing\n }, /*#__PURE__*/React.createElement(Context.Provider, {\n value: client\n }, children));\n};\n\nexport { QueryClientProvider, defaultContext, useQueryClient };\n//# sourceMappingURL=QueryClientProvider.mjs.map\n","'use client';\nimport * as React from 'react';\n\nconst IsRestoringContext = /*#__PURE__*/React.createContext(false);\nconst useIsRestoring = () => React.useContext(IsRestoringContext);\nconst IsRestoringProvider = IsRestoringContext.Provider;\n\nexport { IsRestoringProvider, useIsRestoring };\n//# sourceMappingURL=isRestoring.mjs.map\n","'use client';\nimport * as React from 'react';\n\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\n\nconst QueryErrorResetBoundaryContext = /*#__PURE__*/React.createContext(createValue()); // HOOK\n\nconst useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext); // COMPONENT\n\nconst QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /*#__PURE__*/React.createElement(QueryErrorResetBoundaryContext.Provider, {\n value: value\n }, typeof children === 'function' ? children(value) : children);\n};\n\nexport { QueryErrorResetBoundary, useQueryErrorResetBoundary };\n//# sourceMappingURL=QueryErrorResetBoundary.mjs.map\n","function shouldThrowError(_useErrorBoundary, params) {\n // Allow useErrorBoundary function to override throwing behavior on a per-error basis\n if (typeof _useErrorBoundary === 'function') {\n return _useErrorBoundary(...params);\n }\n\n return !!_useErrorBoundary;\n}\n\nexport { shouldThrowError };\n//# sourceMappingURL=utils.mjs.map\n","'use client';\nimport * as React from 'react';\nimport { shouldThrowError } from './utils.mjs';\n\nconst ensurePreventErrorBoundaryRetry = (options, errorResetBoundary) => {\n if (options.suspense || options.useErrorBoundary) {\n // Prevent retrying failed query if the error boundary has not been reset yet\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nconst useClearResetErrorBoundary = errorResetBoundary => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nconst getHasError = ({\n result,\n errorResetBoundary,\n useErrorBoundary,\n query\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && shouldThrowError(useErrorBoundary, [result.error, query]);\n};\n\nexport { ensurePreventErrorBoundaryRetry, getHasError, useClearResetErrorBoundary };\n//# sourceMappingURL=errorBoundaryUtils.mjs.map\n","const ensureStaleTime = defaultedOptions => {\n if (defaultedOptions.suspense) {\n // Always set stale time when using suspense to prevent\n // fetching again when directly mounting after suspending\n if (typeof defaultedOptions.staleTime !== 'number') {\n defaultedOptions.staleTime = 1000;\n }\n }\n};\nconst willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nconst shouldSuspend = (defaultedOptions, result, isRestoring) => (defaultedOptions == null ? void 0 : defaultedOptions.suspense) && willFetch(result, isRestoring);\nconst fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).then(({\n data\n}) => {\n defaultedOptions.onSuccess == null ? void 0 : defaultedOptions.onSuccess(data);\n defaultedOptions.onSettled == null ? void 0 : defaultedOptions.onSettled(data, null);\n}).catch(error => {\n errorResetBoundary.clearReset();\n defaultedOptions.onError == null ? void 0 : defaultedOptions.onError(error);\n defaultedOptions.onSettled == null ? void 0 : defaultedOptions.onSettled(undefined, error);\n});\n\nexport { ensureStaleTime, fetchOptimistic, shouldSuspend, willFetch };\n//# sourceMappingURL=suspense.mjs.map\n","'use client';\nimport * as React from 'react';\nimport { notifyManager } from '@tanstack/query-core';\nimport { useSyncExternalStore } from './useSyncExternalStore.mjs';\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary.mjs';\nimport { useQueryClient } from './QueryClientProvider.mjs';\nimport { useIsRestoring } from './isRestoring.mjs';\nimport { ensurePreventErrorBoundaryRetry, useClearResetErrorBoundary, getHasError } from './errorBoundaryUtils.mjs';\nimport { ensureStaleTime, shouldSuspend, fetchOptimistic } from './suspense.mjs';\n\nfunction useBaseQuery(options, Observer) {\n const queryClient = useQueryClient({\n context: options.context\n });\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const defaultedOptions = queryClient.defaultQueryOptions(options); // Make sure results are optimistically set in fetching state before subscribing or updating options\n\n defaultedOptions._optimisticResults = isRestoring ? 'isRestoring' : 'optimistic'; // Include callbacks in batch renders\n\n if (defaultedOptions.onError) {\n defaultedOptions.onError = notifyManager.batchCalls(defaultedOptions.onError);\n }\n\n if (defaultedOptions.onSuccess) {\n defaultedOptions.onSuccess = notifyManager.batchCalls(defaultedOptions.onSuccess);\n }\n\n if (defaultedOptions.onSettled) {\n defaultedOptions.onSettled = notifyManager.batchCalls(defaultedOptions.onSettled);\n }\n\n ensureStaleTime(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary);\n useClearResetErrorBoundary(errorResetBoundary);\n const [observer] = React.useState(() => new Observer(queryClient, defaultedOptions));\n const result = observer.getOptimisticResult(defaultedOptions);\n useSyncExternalStore(React.useCallback(onStoreChange => {\n const unsubscribe = isRestoring ? () => undefined : observer.subscribe(notifyManager.batchCalls(onStoreChange)); // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n\n observer.updateResult();\n return unsubscribe;\n }, [observer, isRestoring]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, {\n listeners: false\n });\n }, [defaultedOptions, observer]); // Handle suspense\n\n if (shouldSuspend(defaultedOptions, result, isRestoring)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n } // Handle error boundary\n\n\n if (getHasError({\n result,\n errorResetBoundary,\n useErrorBoundary: defaultedOptions.useErrorBoundary,\n query: observer.getCurrentQuery()\n })) {\n throw result.error;\n } // Handle result property usage tracking\n\n\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\n\nexport { useBaseQuery };\n//# sourceMappingURL=useBaseQuery.mjs.map\n","'use client';\nimport { parseQueryArgs, QueryObserver } from '@tanstack/query-core';\nimport { useBaseQuery } from './useBaseQuery.mjs';\n\nfunction useQuery(arg1, arg2, arg3) {\n const parsedOptions = parseQueryArgs(arg1, arg2, arg3);\n return useBaseQuery(parsedOptions, QueryObserver);\n}\n\nexport { useQuery };\n//# sourceMappingURL=useQuery.mjs.map\n","'use client';\nimport * as React from 'react';\nimport { parseMutationArgs, MutationObserver, notifyManager } from '@tanstack/query-core';\nimport { useSyncExternalStore } from './useSyncExternalStore.mjs';\nimport { useQueryClient } from './QueryClientProvider.mjs';\nimport { shouldThrowError } from './utils.mjs';\n\nfunction useMutation(arg1, arg2, arg3) {\n const options = parseMutationArgs(arg1, arg2, arg3);\n const queryClient = useQueryClient({\n context: options.context\n });\n const [observer] = React.useState(() => new MutationObserver(queryClient, options));\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = useSyncExternalStore(React.useCallback(onStoreChange => observer.subscribe(notifyManager.batchCalls(onStoreChange)), [observer]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n const mutate = React.useCallback((variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n }, [observer]);\n\n if (result.error && shouldThrowError(observer.options.useErrorBoundary, [result.error])) {\n throw result.error;\n }\n\n return { ...result,\n mutate,\n mutateAsync: result.mutate\n };\n} // eslint-disable-next-line @typescript-eslint/no-empty-function\n\nfunction noop() {}\n\nexport { useMutation };\n//# sourceMappingURL=useMutation.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Logging constants\nconst AWS_CLOUDWATCH_CATEGORY = 'Logging';\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\n// Error exception code constants\nconst NO_HUBCALLBACK_PROVIDED_EXCEPTION = 'NoHubcallbackProvidedException';\n\nexport { AWS_CLOUDWATCH_CATEGORY, NO_HUBCALLBACK_PROVIDED_EXCEPTION, USER_AGENT_HEADER };\n//# sourceMappingURL=constants.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar LogType;\n(function (LogType) {\n LogType[\"DEBUG\"] = \"DEBUG\";\n LogType[\"ERROR\"] = \"ERROR\";\n LogType[\"INFO\"] = \"INFO\";\n LogType[\"WARN\"] = \"WARN\";\n LogType[\"VERBOSE\"] = \"VERBOSE\";\n LogType[\"NONE\"] = \"NONE\";\n})(LogType || (LogType = {}));\n\nexport { LogType };\n//# sourceMappingURL=types.mjs.map\n","import { AWS_CLOUDWATCH_CATEGORY } from '../constants.mjs';\nimport { LogType } from './types.mjs';\n\n/* eslint-disable no-console */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst LOG_LEVELS = {\n VERBOSE: 1,\n DEBUG: 2,\n INFO: 3,\n WARN: 4,\n ERROR: 5,\n NONE: 6,\n};\n/**\n * Write logs\n * @class Logger\n */\nclass ConsoleLogger {\n /**\n * @constructor\n * @param {string} name - Name of the logger\n */\n constructor(name, level = LogType.WARN) {\n this.name = name;\n this.level = level;\n this._pluggables = [];\n }\n _padding(n) {\n return n < 10 ? '0' + n : '' + n;\n }\n _ts() {\n const dt = new Date();\n return ([this._padding(dt.getMinutes()), this._padding(dt.getSeconds())].join(':') +\n '.' +\n dt.getMilliseconds());\n }\n configure(config) {\n if (!config)\n return this._config;\n this._config = config;\n return this._config;\n }\n /**\n * Write log\n * @method\n * @memeberof Logger\n * @param {LogType|string} type - log type, default INFO\n * @param {string|object} msg - Logging message or object\n */\n _log(type, ...msg) {\n let loggerLevelName = this.level;\n if (ConsoleLogger.LOG_LEVEL) {\n loggerLevelName = ConsoleLogger.LOG_LEVEL;\n }\n if (typeof window !== 'undefined' && window.LOG_LEVEL) {\n loggerLevelName = window.LOG_LEVEL;\n }\n const loggerLevel = LOG_LEVELS[loggerLevelName];\n const typeLevel = LOG_LEVELS[type];\n if (!(typeLevel >= loggerLevel)) {\n // Do nothing if type is not greater than or equal to logger level (handle undefined)\n return;\n }\n let log = console.log.bind(console);\n if (type === LogType.ERROR && console.error) {\n log = console.error.bind(console);\n }\n if (type === LogType.WARN && console.warn) {\n log = console.warn.bind(console);\n }\n if (ConsoleLogger.BIND_ALL_LOG_LEVELS) {\n if (type === LogType.INFO && console.info) {\n log = console.info.bind(console);\n }\n if (type === LogType.DEBUG && console.debug) {\n log = console.debug.bind(console);\n }\n }\n const prefix = `[${type}] ${this._ts()} ${this.name}`;\n let message = '';\n if (msg.length === 1 && typeof msg[0] === 'string') {\n message = `${prefix} - ${msg[0]}`;\n log(message);\n }\n else if (msg.length === 1) {\n message = `${prefix} ${msg[0]}`;\n log(prefix, msg[0]);\n }\n else if (typeof msg[0] === 'string') {\n let obj = msg.slice(1);\n if (obj.length === 1) {\n obj = obj[0];\n }\n message = `${prefix} - ${msg[0]} ${obj}`;\n log(`${prefix} - ${msg[0]}`, obj);\n }\n else {\n message = `${prefix} ${msg}`;\n log(prefix, msg);\n }\n for (const plugin of this._pluggables) {\n const logEvent = { message, timestamp: Date.now() };\n plugin.pushLogs([logEvent]);\n }\n }\n /**\n * Write General log. Default to INFO\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n log(...msg) {\n this._log(LogType.INFO, ...msg);\n }\n /**\n * Write INFO log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n info(...msg) {\n this._log(LogType.INFO, ...msg);\n }\n /**\n * Write WARN log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n warn(...msg) {\n this._log(LogType.WARN, ...msg);\n }\n /**\n * Write ERROR log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n error(...msg) {\n this._log(LogType.ERROR, ...msg);\n }\n /**\n * Write DEBUG log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n debug(...msg) {\n this._log(LogType.DEBUG, ...msg);\n }\n /**\n * Write VERBOSE log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n verbose(...msg) {\n this._log(LogType.VERBOSE, ...msg);\n }\n addPluggable(pluggable) {\n if (pluggable && pluggable.getCategoryName() === AWS_CLOUDWATCH_CATEGORY) {\n this._pluggables.push(pluggable);\n pluggable.configure(this._config);\n }\n }\n listPluggables() {\n return this._pluggables;\n }\n}\nConsoleLogger.LOG_LEVEL = null;\nConsoleLogger.BIND_ALL_LOG_LEVELS = false;\n\nexport { ConsoleLogger };\n//# sourceMappingURL=ConsoleLogger.mjs.map\n","class AmplifyError extends Error {\n /**\n * Constructs an AmplifyError.\n *\n * @param message text that describes the main problem.\n * @param underlyingError the underlying cause of the error.\n * @param recoverySuggestion suggestion to recover from the error.\n *\n */\n constructor({ message, name, recoverySuggestion, underlyingError, metadata, }) {\n super(message);\n this.name = name;\n this.underlyingError = underlyingError;\n this.recoverySuggestion = recoverySuggestion;\n if (metadata) {\n // If metadata exists, explicitly only record the following properties.\n const { extendedRequestId, httpStatusCode, requestId } = metadata;\n this.metadata = { extendedRequestId, httpStatusCode, requestId };\n }\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n this.constructor = AmplifyError;\n Object.setPrototypeOf(this, AmplifyError.prototype);\n }\n}\n\nexport { AmplifyError };\n//# sourceMappingURL=AmplifyError.mjs.map\n","var AmplifyErrorCode;\n(function (AmplifyErrorCode) {\n AmplifyErrorCode[\"NoEndpointId\"] = \"NoEndpointId\";\n AmplifyErrorCode[\"PlatformNotSupported\"] = \"PlatformNotSupported\";\n AmplifyErrorCode[\"Unknown\"] = \"Unknown\";\n AmplifyErrorCode[\"NetworkError\"] = \"NetworkError\";\n})(AmplifyErrorCode || (AmplifyErrorCode = {}));\n\nexport { AmplifyErrorCode };\n//# sourceMappingURL=errors.mjs.map\n","import { AmplifyError } from './AmplifyError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createAssertionFunction = (errorMap, AssertionError = AmplifyError) => (assertion, name, additionalContext) => {\n const { message, recoverySuggestion } = errorMap[name];\n if (!assertion) {\n throw new AssertionError({\n name,\n message: additionalContext\n ? `${message} ${additionalContext}`\n : message,\n recoverySuggestion,\n });\n }\n};\n\nexport { createAssertionFunction };\n//# sourceMappingURL=createAssertionFunction.mjs.map\n","import { ConsoleLogger } from '../Logger/ConsoleLogger.mjs';\nimport { NO_HUBCALLBACK_PROVIDED_EXCEPTION } from '../constants.mjs';\nimport { AmplifyError } from '../errors/AmplifyError.mjs';\nimport '../types/errors.mjs';\nimport '../errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined'\n ? Symbol('amplify_default')\n : '@@amplify_default');\nconst logger = new ConsoleLogger('Hub');\nclass HubClass {\n constructor(name) {\n this.listeners = new Map();\n this.protectedChannels = [\n 'core',\n 'auth',\n 'api',\n 'analytics',\n 'interactions',\n 'pubsub',\n 'storage',\n 'ui',\n 'xr',\n ];\n this.name = name;\n }\n /**\n * Used internally to remove a Hub listener.\n *\n * @remarks\n * This private method is for internal use only. Instead of calling Hub.remove, call the result of Hub.listen.\n */\n _remove(channel, listener) {\n const holder = this.listeners.get(channel);\n if (!holder) {\n logger.warn(`No listeners for ${channel}`);\n return;\n }\n this.listeners.set(channel, [\n ...holder.filter(({ callback }) => callback !== listener),\n ]);\n }\n dispatch(channel, payload, source, ampSymbol) {\n if (typeof channel === 'string' &&\n this.protectedChannels.indexOf(channel) > -1) {\n const hasAccess = ampSymbol === AMPLIFY_SYMBOL;\n if (!hasAccess) {\n logger.warn(`WARNING: ${channel} is protected and dispatching on it can have unintended consequences`);\n }\n }\n const capsule = {\n channel,\n payload: { ...payload },\n source,\n patternInfo: [],\n };\n try {\n this._toListeners(capsule);\n }\n catch (e) {\n logger.error(e);\n }\n }\n listen(channel, callback, listenerName = 'noname') {\n let cb;\n if (typeof callback !== 'function') {\n throw new AmplifyError({\n name: NO_HUBCALLBACK_PROVIDED_EXCEPTION,\n message: 'No callback supplied to Hub',\n });\n }\n else {\n // Needs to be casted as a more generic type\n cb = callback;\n }\n let holder = this.listeners.get(channel);\n if (!holder) {\n holder = [];\n this.listeners.set(channel, holder);\n }\n holder.push({\n name: listenerName,\n callback: cb,\n });\n return () => {\n this._remove(channel, cb);\n };\n }\n _toListeners(capsule) {\n const { channel, payload } = capsule;\n const holder = this.listeners.get(channel);\n if (holder) {\n holder.forEach(listener => {\n logger.debug(`Dispatching to ${channel} with `, payload);\n try {\n listener.callback(capsule);\n }\n catch (e) {\n logger.error(e);\n }\n });\n }\n }\n}\n/* We export a __default__ instance of HubClass to use it as a\npseudo Singleton for the main messaging bus, however you can still create\nyour own instance of HubClass() for a separate \"private bus\" of events. */\nconst Hub = new HubClass('__default__');\n/**\n * @internal\n *\n * Internal hub used for core Amplify functionality. Not intended for use outside of Amplify.\n *\n */\nconst HubInternal = new HubClass('internal-hub');\n\nexport { AMPLIFY_SYMBOL, Hub, HubClass, HubInternal };\n//# sourceMappingURL=index.mjs.map\n","import { AmplifyError } from '../../errors/AmplifyError.mjs';\nimport '../../types/errors.mjs';\nimport '../../errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst getCrypto = () => {\n if (typeof window === 'object' && typeof window.crypto === 'object') {\n return window.crypto;\n }\n // Next.js global polyfill\n if (typeof crypto === 'object') {\n return crypto;\n }\n throw new AmplifyError({\n name: 'MissingPolyfill',\n message: 'Cannot resolve the `crypto` function from the environment.',\n });\n};\nconst getBtoa = () => {\n // browser\n if (typeof window !== 'undefined' && typeof window.btoa === 'function') {\n return window.btoa;\n }\n // Next.js global polyfill\n if (typeof btoa === 'function') {\n return btoa;\n }\n throw new AmplifyError({\n name: 'Base64EncoderError',\n message: 'Cannot resolve the `btoa` function from the environment.',\n });\n};\nconst getAtob = () => {\n // browser\n if (typeof window !== 'undefined' && typeof window.atob === 'function') {\n return window.atob;\n }\n // Next.js global polyfill\n if (typeof atob === 'function') {\n return atob;\n }\n throw new AmplifyError({\n name: 'Base64EncoderError',\n message: 'Cannot resolve the `atob` function from the environment.',\n });\n};\n\nexport { getAtob, getBtoa, getCrypto };\n//# sourceMappingURL=index.mjs.map\n","import { getAtob } from '../../globalHelpers/index.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst base64Decoder = {\n convert(input, options) {\n let inputStr = input;\n // urlSafe character replacement options conform to the base64 url spec\n // https://datatracker.ietf.org/doc/html/rfc4648#page-7\n if (options?.urlSafe) {\n inputStr = inputStr.replace(/-/g, '+').replace(/_/g, '/');\n }\n return getAtob()(inputStr);\n },\n};\n\nexport { base64Decoder };\n//# sourceMappingURL=base64Decoder.mjs.map\n","import { createAssertionFunction } from '../../../errors/createAssertionFunction.mjs';\nimport '../../../types/errors.mjs';\nimport '../../../errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar AuthConfigurationErrorCode;\n(function (AuthConfigurationErrorCode) {\n AuthConfigurationErrorCode[\"AuthTokenConfigException\"] = \"AuthTokenConfigException\";\n AuthConfigurationErrorCode[\"AuthUserPoolAndIdentityPoolException\"] = \"AuthUserPoolAndIdentityPoolException\";\n AuthConfigurationErrorCode[\"AuthUserPoolException\"] = \"AuthUserPoolException\";\n AuthConfigurationErrorCode[\"InvalidIdentityPoolIdException\"] = \"InvalidIdentityPoolIdException\";\n AuthConfigurationErrorCode[\"OAuthNotConfigureException\"] = \"OAuthNotConfigureException\";\n})(AuthConfigurationErrorCode || (AuthConfigurationErrorCode = {}));\nconst authConfigurationErrorMap = {\n [AuthConfigurationErrorCode.AuthTokenConfigException]: {\n message: 'Auth Token Provider not configured.',\n recoverySuggestion: 'Make sure to call Amplify.configure in your app.',\n },\n [AuthConfigurationErrorCode.AuthUserPoolAndIdentityPoolException]: {\n message: 'Auth UserPool or IdentityPool not configured.',\n recoverySuggestion: 'Make sure to call Amplify.configure in your app with UserPoolId and IdentityPoolId.',\n },\n [AuthConfigurationErrorCode.AuthUserPoolException]: {\n message: 'Auth UserPool not configured.',\n recoverySuggestion: 'Make sure to call Amplify.configure in your app with userPoolId and userPoolClientId.',\n },\n [AuthConfigurationErrorCode.InvalidIdentityPoolIdException]: {\n message: 'Invalid identity pool id provided.',\n recoverySuggestion: 'Make sure a valid identityPoolId is given in the config.',\n },\n [AuthConfigurationErrorCode.OAuthNotConfigureException]: {\n message: 'oauth param not configured.',\n recoverySuggestion: 'Make sure to call Amplify.configure with oauth parameter in your app.',\n },\n};\nconst assert = createAssertionFunction(authConfigurationErrorMap);\n\nexport { AuthConfigurationErrorCode, assert };\n//# sourceMappingURL=errorHelpers.mjs.map\n","import { base64Decoder } from '../../../utils/convert/base64/base64Decoder.mjs';\nimport '../../../types/errors.mjs';\nimport '../../../errors/errorHelpers.mjs';\nimport { assert, AuthConfigurationErrorCode } from './errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction assertTokenProviderConfig(cognitoConfig) {\n let assertionValid = true; // assume valid until otherwise proveed\n if (!cognitoConfig) {\n assertionValid = false;\n }\n else {\n assertionValid =\n !!cognitoConfig.userPoolId && !!cognitoConfig.userPoolClientId;\n }\n assert(assertionValid, AuthConfigurationErrorCode.AuthUserPoolException);\n}\nfunction assertOAuthConfig(cognitoConfig) {\n const validOAuthConfig = !!cognitoConfig?.loginWith?.oauth?.domain &&\n !!cognitoConfig?.loginWith?.oauth?.redirectSignOut &&\n !!cognitoConfig?.loginWith?.oauth?.redirectSignIn &&\n !!cognitoConfig?.loginWith?.oauth?.responseType;\n assert(validOAuthConfig, AuthConfigurationErrorCode.OAuthNotConfigureException);\n}\nfunction assertIdentityPoolIdConfig(cognitoConfig) {\n const validConfig = !!cognitoConfig?.identityPoolId;\n assert(validConfig, AuthConfigurationErrorCode.InvalidIdentityPoolIdException);\n}\n/**\n * Decodes payload of JWT token\n *\n * @param {String} token A string representing a token to be decoded\n * @throws {@link Error} - Throws error when token is invalid or payload malformed.\n */\nfunction decodeJWT(token) {\n const tokenParts = token.split('.');\n if (tokenParts.length !== 3) {\n throw new Error('Invalid token');\n }\n try {\n const base64WithUrlSafe = tokenParts[1];\n const base64 = base64WithUrlSafe.replace(/-/g, '+').replace(/_/g, '/');\n const jsonStr = decodeURIComponent(base64Decoder\n .convert(base64)\n .split('')\n .map(char => `%${`00${char.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join(''));\n const payload = JSON.parse(jsonStr);\n return {\n toString: () => token,\n payload,\n };\n }\n catch (err) {\n throw new Error('Invalid token payload');\n }\n}\n\nexport { assertIdentityPoolIdConfig, assertOAuthConfig, assertTokenProviderConfig, decodeJWT };\n//# sourceMappingURL=index.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst isNonRetryableError = (obj) => {\n const key = 'nonRetryable';\n return obj && obj[key];\n};\n\nexport { isNonRetryableError };\n//# sourceMappingURL=isNonRetryableError.mjs.map\n","import { ConsoleLogger } from '../../Logger/ConsoleLogger.mjs';\nimport { isNonRetryableError } from './isNonRetryableError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst logger = new ConsoleLogger('retryUtil');\n/**\n * @private\n * Internal use of Amplify only\n */\nasync function retry(functionToRetry, args, delayFn, onTerminate) {\n if (typeof functionToRetry !== 'function') {\n throw Error('functionToRetry must be a function');\n }\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let attempt = 0;\n let terminated = false;\n let timeout;\n let wakeUp = () => {\n // no-op\n }; // will be replaced with a resolver()\n // used after the loop if terminated while waiting for a timer.\n let lastError;\n onTerminate &&\n onTerminate.then(() => {\n // signal not to try anymore.\n terminated = true;\n // stop sleeping if we're sleeping.\n clearTimeout(timeout);\n wakeUp();\n });\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-unmodified-loop-condition\n while (!terminated) {\n attempt++;\n logger.debug(`${functionToRetry.name} attempt #${attempt} with this vars: ${JSON.stringify(args)}`);\n try {\n resolve(await functionToRetry(...args));\n return;\n }\n catch (err) {\n lastError = err;\n logger.debug(`error on ${functionToRetry.name}`, err);\n if (isNonRetryableError(err)) {\n logger.debug(`${functionToRetry.name} non retryable error`, err);\n reject(err);\n return;\n }\n const retryIn = delayFn(attempt, args, err);\n logger.debug(`${functionToRetry.name} retrying in ${retryIn} ms`);\n // we check `terminated` again here because it could have flipped\n // in the time it took `functionToRetry` to return.\n if (retryIn === false || terminated) {\n reject(err);\n return;\n }\n else {\n await new Promise(_resolve => {\n wakeUp = _resolve; // export wakeUp for onTerminate handling\n timeout = setTimeout(wakeUp, retryIn);\n });\n }\n }\n }\n // reached if terminated while waiting for a timer.\n reject(lastError);\n });\n}\n\nexport { retry };\n//# sourceMappingURL=retry.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst deepFreeze = (object) => {\n const propNames = Reflect.ownKeys(object);\n for (const name of propNames) {\n const value = object[name];\n if ((value && typeof value === 'object') || typeof value === 'function') {\n deepFreeze(value);\n }\n }\n return Object.freeze(object);\n};\n\nexport { deepFreeze };\n//# sourceMappingURL=deepFreeze.mjs.map\n","import { ConsoleLogger } from './Logger/ConsoleLogger.mjs';\nimport { AmplifyError } from './errors/AmplifyError.mjs';\nimport './types/errors.mjs';\nimport './errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst logger = new ConsoleLogger('parseAWSExports');\nconst authTypeMapping = {\n API_KEY: 'apiKey',\n AWS_IAM: 'iam',\n AMAZON_COGNITO_USER_POOLS: 'userPool',\n OPENID_CONNECT: 'oidc',\n NONE: 'none',\n AWS_LAMBDA: 'lambda',\n // `LAMBDA` is an incorrect value that was added during the v6 rewrite.\n // Keeping it as a valid value until v7 to prevent breaking customers who might\n // be relying on it as a workaround.\n // ref: https://github.com/aws-amplify/amplify-js/pull/12922\n // TODO: @v7 remove next line\n LAMBDA: 'lambda',\n};\n/**\n * Converts the object imported from `aws-exports.js` or `amplifyconfiguration.json` files generated by\n * the Amplify CLI into an object that conforms to the {@link ResourcesConfig}.\n *\n * @param config A configuration object imported from `aws-exports.js` or `amplifyconfiguration.json`.\n *\n * @returns An object that conforms to the {@link ResourcesConfig} .\n */\nconst parseAWSExports = (config = {}) => {\n if (!Object.prototype.hasOwnProperty.call(config, 'aws_project_region')) {\n throw new AmplifyError({\n name: 'InvalidParameterException',\n message: 'Invalid config parameter.',\n recoverySuggestion: 'Ensure passing the config object imported from `amplifyconfiguration.json`.',\n });\n }\n const { aws_appsync_apiKey, aws_appsync_authenticationType, aws_appsync_graphqlEndpoint, aws_appsync_region, aws_bots_config, aws_cognito_identity_pool_id, aws_cognito_sign_up_verification_method, aws_cognito_mfa_configuration, aws_cognito_mfa_types, aws_cognito_password_protection_settings, aws_cognito_verification_mechanisms, aws_cognito_signup_attributes, aws_cognito_social_providers, aws_cognito_username_attributes, aws_mandatory_sign_in, aws_mobile_analytics_app_id, aws_mobile_analytics_app_region, aws_user_files_s3_bucket, aws_user_files_s3_bucket_region, aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing, aws_user_pools_id, aws_user_pools_web_client_id, geo, oauth, predictions, aws_cloud_logic_custom, Notifications, modelIntrospection, } = config;\n const amplifyConfig = {};\n // Analytics\n if (aws_mobile_analytics_app_id) {\n amplifyConfig.Analytics = {\n Pinpoint: {\n appId: aws_mobile_analytics_app_id,\n region: aws_mobile_analytics_app_region,\n },\n };\n }\n // Notifications\n const { InAppMessaging, Push } = Notifications ?? {};\n if (InAppMessaging?.AWSPinpoint || Push?.AWSPinpoint) {\n if (InAppMessaging?.AWSPinpoint) {\n const { appId, region } = InAppMessaging.AWSPinpoint;\n amplifyConfig.Notifications = {\n InAppMessaging: {\n Pinpoint: {\n appId,\n region,\n },\n },\n };\n }\n if (Push?.AWSPinpoint) {\n const { appId, region } = Push.AWSPinpoint;\n amplifyConfig.Notifications = {\n ...amplifyConfig.Notifications,\n PushNotification: {\n Pinpoint: {\n appId,\n region,\n },\n },\n };\n }\n }\n // Interactions\n if (Array.isArray(aws_bots_config)) {\n amplifyConfig.Interactions = {\n LexV1: Object.fromEntries(aws_bots_config.map(bot => [bot.name, bot])),\n };\n }\n // API\n if (aws_appsync_graphqlEndpoint) {\n const defaultAuthMode = authTypeMapping[aws_appsync_authenticationType];\n if (!defaultAuthMode) {\n logger.debug(`Invalid authentication type ${aws_appsync_authenticationType}. Falling back to IAM.`);\n }\n amplifyConfig.API = {\n GraphQL: {\n endpoint: aws_appsync_graphqlEndpoint,\n apiKey: aws_appsync_apiKey,\n region: aws_appsync_region,\n defaultAuthMode: defaultAuthMode ?? 'iam',\n },\n };\n if (modelIntrospection) {\n amplifyConfig.API.GraphQL.modelIntrospection = modelIntrospection;\n }\n }\n // Auth\n const mfaConfig = aws_cognito_mfa_configuration\n ? {\n status: aws_cognito_mfa_configuration &&\n aws_cognito_mfa_configuration.toLowerCase(),\n totpEnabled: aws_cognito_mfa_types?.includes('TOTP') ?? false,\n smsEnabled: aws_cognito_mfa_types?.includes('SMS') ?? false,\n }\n : undefined;\n const passwordFormatConfig = aws_cognito_password_protection_settings\n ? {\n minLength: aws_cognito_password_protection_settings.passwordPolicyMinLength,\n requireLowercase: aws_cognito_password_protection_settings.passwordPolicyCharacters?.includes('REQUIRES_LOWERCASE') ?? false,\n requireUppercase: aws_cognito_password_protection_settings.passwordPolicyCharacters?.includes('REQUIRES_UPPERCASE') ?? false,\n requireNumbers: aws_cognito_password_protection_settings.passwordPolicyCharacters?.includes('REQUIRES_NUMBERS') ?? false,\n requireSpecialCharacters: aws_cognito_password_protection_settings.passwordPolicyCharacters?.includes('REQUIRES_SYMBOLS') ?? false,\n }\n : undefined;\n const mergedUserAttributes = Array.from(new Set([\n ...(aws_cognito_verification_mechanisms ?? []),\n ...(aws_cognito_signup_attributes ?? []),\n ]));\n const userAttributes = mergedUserAttributes.reduce((attributes, key) => ({\n ...attributes,\n // All user attributes generated by the CLI are required\n [key.toLowerCase()]: { required: true },\n }), {});\n const loginWithEmailEnabled = aws_cognito_username_attributes?.includes('EMAIL') ?? false;\n const loginWithPhoneEnabled = aws_cognito_username_attributes?.includes('PHONE_NUMBER') ?? false;\n if (aws_cognito_identity_pool_id || aws_user_pools_id) {\n amplifyConfig.Auth = {\n Cognito: {\n identityPoolId: aws_cognito_identity_pool_id,\n allowGuestAccess: aws_mandatory_sign_in !== 'enable',\n signUpVerificationMethod: aws_cognito_sign_up_verification_method,\n userAttributes,\n userPoolClientId: aws_user_pools_web_client_id,\n userPoolId: aws_user_pools_id,\n mfa: mfaConfig,\n passwordFormat: passwordFormatConfig,\n loginWith: {\n username: !(loginWithEmailEnabled || loginWithPhoneEnabled),\n email: loginWithEmailEnabled,\n phone: loginWithPhoneEnabled,\n },\n },\n };\n }\n const hasOAuthConfig = oauth ? Object.keys(oauth).length > 0 : false;\n const hasSocialProviderConfig = aws_cognito_social_providers\n ? aws_cognito_social_providers.length > 0\n : false;\n if (amplifyConfig.Auth && hasOAuthConfig) {\n amplifyConfig.Auth.Cognito.loginWith = {\n ...amplifyConfig.Auth.Cognito.loginWith,\n oauth: {\n ...getOAuthConfig(oauth),\n ...(hasSocialProviderConfig && {\n providers: parseSocialProviders(aws_cognito_social_providers),\n }),\n },\n };\n }\n // Storage\n if (aws_user_files_s3_bucket) {\n amplifyConfig.Storage = {\n S3: {\n bucket: aws_user_files_s3_bucket,\n region: aws_user_files_s3_bucket_region,\n dangerouslyConnectToHttpEndpointForTesting: aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing,\n },\n };\n }\n // Geo\n if (geo) {\n const { amazon_location_service } = geo;\n amplifyConfig.Geo = {\n LocationService: {\n maps: amazon_location_service.maps,\n geofenceCollections: amazon_location_service.geofenceCollections,\n searchIndices: amazon_location_service.search_indices,\n region: amazon_location_service.region,\n },\n };\n }\n // REST API\n if (aws_cloud_logic_custom) {\n amplifyConfig.API = {\n ...amplifyConfig.API,\n REST: aws_cloud_logic_custom.reduce((acc, api) => {\n const { name, endpoint, region, service } = api;\n return {\n ...acc,\n [name]: {\n endpoint,\n ...(service ? { service } : undefined),\n ...(region ? { region } : undefined),\n },\n };\n }, {}),\n };\n }\n // Predictions\n if (predictions) {\n // map VoiceId from speechGenerator defaults to voiceId\n const { VoiceId: voiceId } = predictions?.convert?.speechGenerator?.defaults ?? {};\n amplifyConfig.Predictions = voiceId\n ? {\n ...predictions,\n convert: {\n ...predictions.convert,\n speechGenerator: {\n ...predictions.convert.speechGenerator,\n defaults: { voiceId },\n },\n },\n }\n : predictions;\n }\n return amplifyConfig;\n};\nconst getRedirectUrl = (redirectStr) => redirectStr?.split(',') ?? [];\nconst getOAuthConfig = ({ domain, scope, redirectSignIn, redirectSignOut, responseType, }) => ({\n domain,\n scopes: scope,\n redirectSignIn: getRedirectUrl(redirectSignIn),\n redirectSignOut: getRedirectUrl(redirectSignOut),\n responseType,\n});\nconst parseSocialProviders = (aws_cognito_social_providers) => {\n return aws_cognito_social_providers.map((provider) => {\n const updatedProvider = provider.toLowerCase();\n return updatedProvider.charAt(0).toUpperCase() + updatedProvider.slice(1);\n });\n};\n\nexport { parseAWSExports };\n//# sourceMappingURL=parseAWSExports.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst ADD_OAUTH_LISTENER = Symbol('oauth-listener');\n\nexport { ADD_OAUTH_LISTENER };\n//# sourceMappingURL=constants.mjs.map\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()).\nlet getRandomValues;\nconst 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.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\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}","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\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 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 return 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]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // 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;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const 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 (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction isAmplifyOutputs(config) {\n // version format initially will be '1' but is expected to be something like x.y where x is major and y minor version\n const { version } = config;\n if (!version) {\n return false;\n }\n return version.startsWith('1');\n}\nfunction parseStorage(amplifyOutputsStorageProperties) {\n if (!amplifyOutputsStorageProperties) {\n return undefined;\n }\n const { bucket_name, aws_region, buckets } = amplifyOutputsStorageProperties;\n return {\n S3: {\n bucket: bucket_name,\n region: aws_region,\n buckets: buckets && createBucketInfoMap(buckets),\n },\n };\n}\nfunction parseAuth(amplifyOutputsAuthProperties) {\n if (!amplifyOutputsAuthProperties) {\n return undefined;\n }\n const { user_pool_id, user_pool_client_id, identity_pool_id, password_policy, mfa_configuration, mfa_methods, unauthenticated_identities_enabled, oauth, username_attributes, standard_required_attributes, groups, } = amplifyOutputsAuthProperties;\n const authConfig = {\n Cognito: {\n userPoolId: user_pool_id,\n userPoolClientId: user_pool_client_id,\n groups,\n },\n };\n if (identity_pool_id) {\n authConfig.Cognito = {\n ...authConfig.Cognito,\n identityPoolId: identity_pool_id,\n };\n }\n if (password_policy) {\n authConfig.Cognito.passwordFormat = {\n requireLowercase: password_policy.require_lowercase,\n requireNumbers: password_policy.require_numbers,\n requireUppercase: password_policy.require_uppercase,\n requireSpecialCharacters: password_policy.require_symbols,\n minLength: password_policy.min_length ?? 6,\n };\n }\n if (mfa_configuration) {\n authConfig.Cognito.mfa = {\n status: getMfaStatus(mfa_configuration),\n smsEnabled: mfa_methods?.includes('SMS'),\n totpEnabled: mfa_methods?.includes('TOTP'),\n };\n }\n if (unauthenticated_identities_enabled) {\n authConfig.Cognito.allowGuestAccess = unauthenticated_identities_enabled;\n }\n if (oauth) {\n authConfig.Cognito.loginWith = {\n oauth: {\n domain: oauth.domain,\n redirectSignIn: oauth.redirect_sign_in_uri,\n redirectSignOut: oauth.redirect_sign_out_uri,\n responseType: oauth.response_type === 'token' ? 'token' : 'code',\n scopes: oauth.scopes,\n providers: getOAuthProviders(oauth.identity_providers),\n },\n };\n }\n if (username_attributes) {\n authConfig.Cognito.loginWith = {\n ...authConfig.Cognito.loginWith,\n email: username_attributes.includes('email'),\n phone: username_attributes.includes('phone_number'),\n // Signing in with a username is not currently supported in Gen2, this should always evaluate to false\n username: username_attributes.includes('username'),\n };\n }\n if (standard_required_attributes) {\n authConfig.Cognito.userAttributes = standard_required_attributes.reduce((acc, curr) => ({ ...acc, [curr]: { required: true } }), {});\n }\n return authConfig;\n}\nfunction parseAnalytics(amplifyOutputsAnalyticsProperties) {\n if (!amplifyOutputsAnalyticsProperties?.amazon_pinpoint) {\n return undefined;\n }\n const { amazon_pinpoint } = amplifyOutputsAnalyticsProperties;\n return {\n Pinpoint: {\n appId: amazon_pinpoint.app_id,\n region: amazon_pinpoint.aws_region,\n },\n };\n}\nfunction parseGeo(amplifyOutputsAnalyticsProperties) {\n if (!amplifyOutputsAnalyticsProperties) {\n return undefined;\n }\n const { aws_region, geofence_collections, maps, search_indices } = amplifyOutputsAnalyticsProperties;\n return {\n LocationService: {\n region: aws_region,\n searchIndices: search_indices,\n geofenceCollections: geofence_collections,\n maps,\n },\n };\n}\nfunction parseData(amplifyOutputsDataProperties) {\n if (!amplifyOutputsDataProperties) {\n return undefined;\n }\n const { aws_region, default_authorization_type, url, api_key, model_introspection, } = amplifyOutputsDataProperties;\n const GraphQL = {\n endpoint: url,\n defaultAuthMode: getGraphQLAuthMode(default_authorization_type),\n region: aws_region,\n apiKey: api_key,\n modelIntrospection: model_introspection,\n };\n return {\n GraphQL,\n };\n}\nfunction parseCustom(amplifyOutputsCustomProperties) {\n if (!amplifyOutputsCustomProperties?.events) {\n return undefined;\n }\n const { url, aws_region, api_key, default_authorization_type } = amplifyOutputsCustomProperties.events;\n const Events = {\n endpoint: url,\n defaultAuthMode: getGraphQLAuthMode(default_authorization_type),\n region: aws_region,\n apiKey: api_key,\n };\n return {\n Events,\n };\n}\nfunction parseNotifications(amplifyOutputsNotificationsProperties) {\n if (!amplifyOutputsNotificationsProperties) {\n return undefined;\n }\n const { aws_region, channels, amazon_pinpoint_app_id } = amplifyOutputsNotificationsProperties;\n const hasInAppMessaging = channels.includes('IN_APP_MESSAGING');\n const hasPushNotification = channels.includes('APNS') || channels.includes('FCM');\n if (!(hasInAppMessaging || hasPushNotification)) {\n return undefined;\n }\n // At this point, we know the Amplify outputs contains at least one supported channel\n const notificationsConfig = {};\n if (hasInAppMessaging) {\n notificationsConfig.InAppMessaging = {\n Pinpoint: {\n appId: amazon_pinpoint_app_id,\n region: aws_region,\n },\n };\n }\n if (hasPushNotification) {\n notificationsConfig.PushNotification = {\n Pinpoint: {\n appId: amazon_pinpoint_app_id,\n region: aws_region,\n },\n };\n }\n return notificationsConfig;\n}\nfunction parseAmplifyOutputs(amplifyOutputs) {\n const resourcesConfig = {};\n if (amplifyOutputs.storage) {\n resourcesConfig.Storage = parseStorage(amplifyOutputs.storage);\n }\n if (amplifyOutputs.auth) {\n resourcesConfig.Auth = parseAuth(amplifyOutputs.auth);\n }\n if (amplifyOutputs.analytics) {\n resourcesConfig.Analytics = parseAnalytics(amplifyOutputs.analytics);\n }\n if (amplifyOutputs.geo) {\n resourcesConfig.Geo = parseGeo(amplifyOutputs.geo);\n }\n if (amplifyOutputs.data) {\n resourcesConfig.API = parseData(amplifyOutputs.data);\n }\n if (amplifyOutputs.custom) {\n const customConfig = parseCustom(amplifyOutputs.custom);\n if (customConfig && 'Events' in customConfig) {\n resourcesConfig.API = { ...resourcesConfig.API, ...customConfig };\n }\n }\n if (amplifyOutputs.notifications) {\n resourcesConfig.Notifications = parseNotifications(amplifyOutputs.notifications);\n }\n return resourcesConfig;\n}\nconst authModeNames = {\n AMAZON_COGNITO_USER_POOLS: 'userPool',\n API_KEY: 'apiKey',\n AWS_IAM: 'iam',\n AWS_LAMBDA: 'lambda',\n OPENID_CONNECT: 'oidc',\n};\nfunction getGraphQLAuthMode(authType) {\n return authModeNames[authType];\n}\nconst providerNames = {\n GOOGLE: 'Google',\n LOGIN_WITH_AMAZON: 'Amazon',\n FACEBOOK: 'Facebook',\n SIGN_IN_WITH_APPLE: 'Apple',\n};\nfunction getOAuthProviders(providers = []) {\n return providers.reduce((oAuthProviders, provider) => {\n if (providerNames[provider] !== undefined) {\n oAuthProviders.push(providerNames[provider]);\n }\n return oAuthProviders;\n }, []);\n}\nfunction getMfaStatus(mfaConfiguration) {\n if (mfaConfiguration === 'OPTIONAL')\n return 'optional';\n if (mfaConfiguration === 'REQUIRED')\n return 'on';\n return 'off';\n}\nfunction createBucketInfoMap(buckets) {\n const mappedBuckets = {};\n buckets.forEach(({ name, bucket_name: bucketName, aws_region: region, paths }) => {\n if (name in mappedBuckets) {\n throw new Error(`Duplicate friendly name found: ${name}. Name must be unique.`);\n }\n const sanitizedPaths = paths\n ? Object.entries(paths).reduce((acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = value;\n }\n return acc;\n }, {})\n : undefined;\n mappedBuckets[name] = {\n bucketName,\n region,\n paths: sanitizedPaths,\n };\n });\n return mappedBuckets;\n}\n\nexport { isAmplifyOutputs, parseAmplifyOutputs, parseAnalytics };\n//# sourceMappingURL=parseAmplifyOutputs.mjs.map\n","import { parseAWSExports } from '../parseAWSExports.mjs';\nimport { isAmplifyOutputs, parseAmplifyOutputs } from '../parseAmplifyOutputs.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Parses the variety of configuration shapes that Amplify can accept into a ResourcesConfig.\n *\n * @param amplifyConfig An Amplify configuration object conforming to one of the supported schemas.\n * @return A ResourcesConfig for the provided configuration object.\n */\nconst parseAmplifyConfig = (amplifyConfig) => {\n if (Object.keys(amplifyConfig).some(key => key.startsWith('aws_'))) {\n return parseAWSExports(amplifyConfig);\n }\n else if (isAmplifyOutputs(amplifyConfig)) {\n return parseAmplifyOutputs(amplifyConfig);\n }\n else {\n return amplifyConfig;\n }\n};\n\nexport { parseAmplifyConfig };\n//# sourceMappingURL=parseAmplifyConfig.mjs.map\n","/**\n * @internal\n */\nexport var BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexport var DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexport var KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/**\n * @internal\n */\nexport var INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n];\n/**\n * @internal\n */\nexport var MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","import { BLOCK_SIZE, DIGEST_LENGTH, INIT, KEY, MAX_HASHABLE_LENGTH } from \"./constants\";\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n function RawSha256() {\n this.state = Int32Array.from(INIT);\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @internal\n */\n this.finished = false;\n }\n RawSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error(\"Attempted to update an already finished hash.\");\n }\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n }\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n };\n RawSha256.prototype.digest = function () {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Uint8Array(DIGEST_LENGTH);\n for (var i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return out;\n };\n RawSha256.prototype.hashBuffer = function () {\n var _a = this, buffer = _a.buffer, state = _a.state;\n var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n for (var i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] =\n ((buffer[i * 4] & 0xff) << 24) |\n ((buffer[i * 4 + 1] & 0xff) << 16) |\n ((buffer[i * 4 + 2] & 0xff) << 8) |\n (buffer[i * 4 + 3] & 0xff);\n }\n else {\n var u = this.temp[i - 2];\n var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n u = this.temp[i - 15];\n var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n this.temp[i] =\n ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n }\n var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n ((state4 >>> 11) | (state4 << 21)) ^\n ((state4 >>> 25) | (state4 << 7))) +\n ((state4 & state5) ^ (~state4 & state6))) |\n 0) +\n ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) |\n 0;\n var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n ((state0 >>> 13) | (state0 << 19)) ^\n ((state0 >>> 22) | (state0 << 10))) +\n ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n };\n return RawSha256;\n}());\nexport { RawSha256 };\n//# sourceMappingURL=RawSha256.js.map","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"./fromUtf8\";\nexport const toUint8Array = (data) => {\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n};\n","export const toUtf8 = (input) => {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n }\n return new TextDecoder(\"utf-8\").decode(input);\n};\n","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { fromUtf8 as fromUtf8Browser } from \"@smithy/util-utf8\";\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : fromUtf8Browser;\nexport function convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\n//# sourceMappingURL=convertToBuffer.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport function isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\n//# sourceMappingURL=isEmptyData.js.map","// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// IE 11 does not support Array.from, so we do it manually\nexport function uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\n//# sourceMappingURL=uint32ArrayFrom.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { BLOCK_SIZE } from \"./constants\";\nimport { RawSha256 } from \"./RawSha256\";\nimport { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.secret = secret;\n this.hash = new RawSha256();\n this.reset();\n }\n Sha256.prototype.update = function (toHash) {\n if (isEmptyData(toHash) || this.error) {\n return;\n }\n try {\n this.hash.update(convertToBuffer(toHash));\n }\n catch (e) {\n this.error = e;\n }\n };\n /* This synchronous method keeps compatibility\n * with the v2 aws-sdk.\n */\n Sha256.prototype.digestSync = function () {\n if (this.error) {\n throw this.error;\n }\n if (this.outer) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n return this.outer.digest();\n }\n return this.hash.digest();\n };\n /* The underlying digest method here is synchronous.\n * To keep the same interface with the other hash functions\n * the default is to expose this as an async method.\n * However, it can sometimes be useful to have a sync method.\n */\n Sha256.prototype.digest = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.digestSync()];\n });\n });\n };\n Sha256.prototype.reset = function () {\n this.hash = new RawSha256();\n if (this.secret) {\n this.outer = new RawSha256();\n var inner = bufferFromSecret(this.secret);\n var outer = new Uint8Array(BLOCK_SIZE);\n outer.set(inner);\n for (var i = 0; i < BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n this.hash.update(inner);\n this.outer.update(outer);\n // overwrite the copied key in memory\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n }\n };\n return Sha256;\n}());\nexport { Sha256 };\nfunction bufferFromSecret(secret) {\n var input = convertToBuffer(secret);\n if (input.byteLength > BLOCK_SIZE) {\n var bufferHash = new RawSha256();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n var buffer = new Uint8Array(BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n//# sourceMappingURL=jsSha256.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar Framework;\n(function (Framework) {\n // < 100 - Web frameworks\n Framework[\"WebUnknown\"] = \"0\";\n Framework[\"React\"] = \"1\";\n Framework[\"NextJs\"] = \"2\";\n Framework[\"Angular\"] = \"3\";\n Framework[\"VueJs\"] = \"4\";\n Framework[\"Nuxt\"] = \"5\";\n Framework[\"Svelte\"] = \"6\";\n // 100s - Server side frameworks\n Framework[\"ServerSideUnknown\"] = \"100\";\n Framework[\"ReactSSR\"] = \"101\";\n Framework[\"NextJsSSR\"] = \"102\";\n Framework[\"AngularSSR\"] = \"103\";\n Framework[\"VueJsSSR\"] = \"104\";\n Framework[\"NuxtSSR\"] = \"105\";\n Framework[\"SvelteSSR\"] = \"106\";\n // 200s - Mobile framework\n Framework[\"ReactNative\"] = \"201\";\n Framework[\"Expo\"] = \"202\";\n})(Framework || (Framework = {}));\nvar Category;\n(function (Category) {\n Category[\"AI\"] = \"ai\";\n Category[\"API\"] = \"api\";\n Category[\"Auth\"] = \"auth\";\n Category[\"Analytics\"] = \"analytics\";\n Category[\"DataStore\"] = \"datastore\";\n Category[\"Geo\"] = \"geo\";\n Category[\"InAppMessaging\"] = \"inappmessaging\";\n Category[\"Interactions\"] = \"interactions\";\n Category[\"Predictions\"] = \"predictions\";\n Category[\"PubSub\"] = \"pubsub\";\n Category[\"PushNotification\"] = \"pushnotification\";\n Category[\"Storage\"] = \"storage\";\n})(Category || (Category = {}));\nvar AiAction;\n(function (AiAction) {\n AiAction[\"CreateConversation\"] = \"1\";\n AiAction[\"GetConversation\"] = \"2\";\n AiAction[\"ListConversations\"] = \"3\";\n AiAction[\"DeleteConversation\"] = \"4\";\n AiAction[\"SendMessage\"] = \"5\";\n AiAction[\"ListMessages\"] = \"6\";\n AiAction[\"OnMessage\"] = \"7\";\n AiAction[\"Generation\"] = \"8\";\n AiAction[\"UpdateConversation\"] = \"9\";\n})(AiAction || (AiAction = {}));\nvar AnalyticsAction;\n(function (AnalyticsAction) {\n AnalyticsAction[\"Record\"] = \"1\";\n AnalyticsAction[\"IdentifyUser\"] = \"2\";\n})(AnalyticsAction || (AnalyticsAction = {}));\nvar ApiAction;\n(function (ApiAction) {\n ApiAction[\"GraphQl\"] = \"1\";\n ApiAction[\"Get\"] = \"2\";\n ApiAction[\"Post\"] = \"3\";\n ApiAction[\"Put\"] = \"4\";\n ApiAction[\"Patch\"] = \"5\";\n ApiAction[\"Del\"] = \"6\";\n ApiAction[\"Head\"] = \"7\";\n})(ApiAction || (ApiAction = {}));\nvar AuthAction;\n(function (AuthAction) {\n AuthAction[\"SignUp\"] = \"1\";\n AuthAction[\"ConfirmSignUp\"] = \"2\";\n AuthAction[\"ResendSignUpCode\"] = \"3\";\n AuthAction[\"SignIn\"] = \"4\";\n AuthAction[\"FetchMFAPreference\"] = \"6\";\n AuthAction[\"UpdateMFAPreference\"] = \"7\";\n AuthAction[\"SetUpTOTP\"] = \"10\";\n AuthAction[\"VerifyTOTPSetup\"] = \"11\";\n AuthAction[\"ConfirmSignIn\"] = \"12\";\n AuthAction[\"DeleteUserAttributes\"] = \"15\";\n AuthAction[\"DeleteUser\"] = \"16\";\n AuthAction[\"UpdateUserAttributes\"] = \"17\";\n AuthAction[\"FetchUserAttributes\"] = \"18\";\n AuthAction[\"ConfirmUserAttribute\"] = \"22\";\n AuthAction[\"SignOut\"] = \"26\";\n AuthAction[\"UpdatePassword\"] = \"27\";\n AuthAction[\"ResetPassword\"] = \"28\";\n AuthAction[\"ConfirmResetPassword\"] = \"29\";\n AuthAction[\"FederatedSignIn\"] = \"30\";\n AuthAction[\"RememberDevice\"] = \"32\";\n AuthAction[\"ForgetDevice\"] = \"33\";\n AuthAction[\"FetchDevices\"] = \"34\";\n AuthAction[\"SendUserAttributeVerificationCode\"] = \"35\";\n AuthAction[\"SignInWithRedirect\"] = \"36\";\n AuthAction[\"StartWebAuthnRegistration\"] = \"37\";\n AuthAction[\"CompleteWebAuthnRegistration\"] = \"38\";\n AuthAction[\"ListWebAuthnCredentials\"] = \"39\";\n AuthAction[\"DeleteWebAuthnCredential\"] = \"40\";\n})(AuthAction || (AuthAction = {}));\nvar DataStoreAction;\n(function (DataStoreAction) {\n DataStoreAction[\"Subscribe\"] = \"1\";\n DataStoreAction[\"GraphQl\"] = \"2\";\n})(DataStoreAction || (DataStoreAction = {}));\nvar GeoAction;\n(function (GeoAction) {\n GeoAction[\"SearchByText\"] = \"0\";\n GeoAction[\"SearchByCoordinates\"] = \"1\";\n GeoAction[\"SearchForSuggestions\"] = \"2\";\n GeoAction[\"SearchByPlaceId\"] = \"3\";\n GeoAction[\"SaveGeofences\"] = \"4\";\n GeoAction[\"GetGeofence\"] = \"5\";\n GeoAction[\"ListGeofences\"] = \"6\";\n GeoAction[\"DeleteGeofences\"] = \"7\";\n})(GeoAction || (GeoAction = {}));\nvar InAppMessagingAction;\n(function (InAppMessagingAction) {\n InAppMessagingAction[\"SyncMessages\"] = \"1\";\n InAppMessagingAction[\"IdentifyUser\"] = \"2\";\n InAppMessagingAction[\"NotifyMessageInteraction\"] = \"3\";\n})(InAppMessagingAction || (InAppMessagingAction = {}));\nvar InteractionsAction;\n(function (InteractionsAction) {\n InteractionsAction[\"None\"] = \"0\";\n})(InteractionsAction || (InteractionsAction = {}));\nvar PredictionsAction;\n(function (PredictionsAction) {\n PredictionsAction[\"Convert\"] = \"1\";\n PredictionsAction[\"Identify\"] = \"2\";\n PredictionsAction[\"Interpret\"] = \"3\";\n})(PredictionsAction || (PredictionsAction = {}));\nvar PubSubAction;\n(function (PubSubAction) {\n PubSubAction[\"Subscribe\"] = \"1\";\n})(PubSubAction || (PubSubAction = {}));\nvar PushNotificationAction;\n(function (PushNotificationAction) {\n PushNotificationAction[\"InitializePushNotifications\"] = \"1\";\n PushNotificationAction[\"IdentifyUser\"] = \"2\";\n})(PushNotificationAction || (PushNotificationAction = {}));\nvar StorageAction;\n(function (StorageAction) {\n StorageAction[\"UploadData\"] = \"1\";\n StorageAction[\"DownloadData\"] = \"2\";\n StorageAction[\"List\"] = \"3\";\n StorageAction[\"Copy\"] = \"4\";\n StorageAction[\"Remove\"] = \"5\";\n StorageAction[\"GetProperties\"] = \"6\";\n StorageAction[\"GetUrl\"] = \"7\";\n StorageAction[\"GetDataAccess\"] = \"8\";\n StorageAction[\"ListCallerAccessGrants\"] = \"9\";\n})(StorageAction || (StorageAction = {}));\n\nexport { AiAction, AnalyticsAction, ApiAction, AuthAction, Category, DataStoreAction, Framework, GeoAction, InAppMessagingAction, InteractionsAction, PredictionsAction, PubSubAction, PushNotificationAction, StorageAction };\n//# sourceMappingURL=types.mjs.map\n","// generated by genversion\nconst version = '6.14.0';\n\nexport { version };\n//# sourceMappingURL=version.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst globalExists = () => {\n return typeof global !== 'undefined';\n};\nconst globalThisExists = () => {\n return typeof globalThis !== 'undefined';\n};\nconst windowExists = () => {\n return typeof window !== 'undefined';\n};\nconst documentExists = () => {\n return typeof document !== 'undefined';\n};\nconst processExists = () => {\n return typeof process !== 'undefined';\n};\nconst keyPrefixMatch = (object, prefix) => {\n return !!Object.keys(object).find(key => key.startsWith(prefix));\n};\n\nexport { documentExists, globalExists, globalThisExists, keyPrefixMatch, processExists, windowExists };\n//# sourceMappingURL=helpers.mjs.map\n","import { documentExists, processExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with react 18.2 - built using Vite\nfunction reactWebDetect() {\n const elementKeyPrefixedWithReact = (key) => {\n return key.startsWith('_react') || key.startsWith('__react');\n };\n const elementIsReactEnabled = (element) => {\n return Object.keys(element).find(elementKeyPrefixedWithReact);\n };\n const allElementsWithId = () => Array.from(document.querySelectorAll('[id]'));\n return documentExists() && allElementsWithId().some(elementIsReactEnabled);\n}\nfunction reactSSRDetect() {\n return (processExists() &&\n typeof process.env !== 'undefined' &&\n !!Object.keys(process.env).find(key => key.includes('react')));\n}\n// use the some\n\nexport { reactSSRDetect, reactWebDetect };\n//# sourceMappingURL=React.mjs.map\n","import { windowExists, keyPrefixMatch, globalExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with vue 3.3.2\nfunction vueWebDetect() {\n return windowExists() && keyPrefixMatch(window, '__VUE');\n}\nfunction vueSSRDetect() {\n return globalExists() && keyPrefixMatch(global, '__VUE');\n}\n\nexport { vueSSRDetect, vueWebDetect };\n//# sourceMappingURL=Vue.mjs.map\n","import { windowExists, keyPrefixMatch, processExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with svelte 3.59\nfunction svelteWebDetect() {\n return windowExists() && keyPrefixMatch(window, '__SVELTE');\n}\nfunction svelteSSRDetect() {\n return (processExists() &&\n typeof process.env !== 'undefined' &&\n !!Object.keys(process.env).find(key => key.includes('svelte')));\n}\n\nexport { svelteSSRDetect, svelteWebDetect };\n//# sourceMappingURL=Svelte.mjs.map\n","import { windowExists, globalExists, keyPrefixMatch } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with next 13.4 / react 18.2\nfunction nextWebDetect() {\n return (windowExists() &&\n window.next &&\n typeof window.next === 'object');\n}\nfunction nextSSRDetect() {\n return (globalExists() &&\n (keyPrefixMatch(global, '__next') || keyPrefixMatch(global, '__NEXT')));\n}\n\nexport { nextSSRDetect, nextWebDetect };\n//# sourceMappingURL=Next.mjs.map\n","import { windowExists, globalExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with nuxt 2.15 / vue 2.7\nfunction nuxtWebDetect() {\n return (windowExists() &&\n (window.__NUXT__ !== undefined ||\n window.$nuxt !== undefined));\n}\nfunction nuxtSSRDetect() {\n return (globalExists() && typeof global.__NUXT_PATHS__ !== 'undefined');\n}\n\nexport { nuxtSSRDetect, nuxtWebDetect };\n//# sourceMappingURL=Nuxt.mjs.map\n","import { documentExists, processExists, windowExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with @angular/core 16.0.0\nfunction angularWebDetect() {\n const angularVersionSetInDocument = Boolean(documentExists() && document.querySelector('[ng-version]'));\n const angularContentSetInWindow = Boolean(windowExists() && typeof window.ng !== 'undefined');\n return angularVersionSetInDocument || angularContentSetInWindow;\n}\nfunction angularSSRDetect() {\n return ((processExists() &&\n typeof process.env === 'object' &&\n process.env.npm_lifecycle_script?.startsWith('ng ')) ||\n false);\n}\n\nexport { angularSSRDetect, angularWebDetect };\n//# sourceMappingURL=Angular.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with react-native 0.17.7\nfunction reactNativeDetect() {\n return (typeof navigator !== 'undefined' &&\n typeof navigator.product !== 'undefined' &&\n navigator.product === 'ReactNative');\n}\n\nexport { reactNativeDetect };\n//# sourceMappingURL=ReactNative.mjs.map\n","import { globalExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Tested with expo 48 / react-native 0.71.3\nfunction expoDetect() {\n return globalExists() && typeof global.expo !== 'undefined';\n}\n\nexport { expoDetect };\n//# sourceMappingURL=Expo.mjs.map\n","import { windowExists } from './helpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction webDetect() {\n return windowExists();\n}\n\nexport { webDetect };\n//# sourceMappingURL=Web.mjs.map\n","import { Framework } from '../types.mjs';\nimport { reactWebDetect, reactSSRDetect } from './React.mjs';\nimport { vueWebDetect, vueSSRDetect } from './Vue.mjs';\nimport { svelteWebDetect, svelteSSRDetect } from './Svelte.mjs';\nimport { nextWebDetect, nextSSRDetect } from './Next.mjs';\nimport { nuxtWebDetect, nuxtSSRDetect } from './Nuxt.mjs';\nimport { angularWebDetect, angularSSRDetect } from './Angular.mjs';\nimport { reactNativeDetect } from './ReactNative.mjs';\nimport { expoDetect } from './Expo.mjs';\nimport { webDetect } from './Web.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// These are in the order of detection where when both are detectable, the early Framework will be reported\nconst detectionMap = [\n // First, detect mobile\n { platform: Framework.Expo, detectionMethod: expoDetect },\n { platform: Framework.ReactNative, detectionMethod: reactNativeDetect },\n // Next, detect web frameworks\n { platform: Framework.NextJs, detectionMethod: nextWebDetect },\n { platform: Framework.Nuxt, detectionMethod: nuxtWebDetect },\n { platform: Framework.Angular, detectionMethod: angularWebDetect },\n { platform: Framework.React, detectionMethod: reactWebDetect },\n { platform: Framework.VueJs, detectionMethod: vueWebDetect },\n { platform: Framework.Svelte, detectionMethod: svelteWebDetect },\n { platform: Framework.WebUnknown, detectionMethod: webDetect },\n // Last, detect ssr frameworks\n { platform: Framework.NextJsSSR, detectionMethod: nextSSRDetect },\n { platform: Framework.NuxtSSR, detectionMethod: nuxtSSRDetect },\n { platform: Framework.ReactSSR, detectionMethod: reactSSRDetect },\n { platform: Framework.VueJsSSR, detectionMethod: vueSSRDetect },\n { platform: Framework.AngularSSR, detectionMethod: angularSSRDetect },\n { platform: Framework.SvelteSSR, detectionMethod: svelteSSRDetect },\n];\nfunction detect() {\n return (detectionMap.find(detectionEntry => detectionEntry.detectionMethod())\n ?.platform || Framework.ServerSideUnknown);\n}\n\nexport { detect };\n//# sourceMappingURL=index.mjs.map\n","import { Framework } from './types.mjs';\nimport { detect } from './detection/index.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// We want to cache detection since the framework won't change\nlet frameworkCache;\nconst frameworkChangeObservers = [];\n// Setup the detection reset tracking / timeout delays\nlet resetTriggered = false;\nconst SSR_RESET_TIMEOUT = 10; // ms\nconst WEB_RESET_TIMEOUT = 10; // ms\nconst PRIME_FRAMEWORK_DELAY = 1000; // ms\nconst detectFramework = () => {\n if (!frameworkCache) {\n frameworkCache = detect();\n if (resetTriggered) {\n // The final run of detectFramework:\n // Starting from this point, the `frameworkCache` becomes \"final\".\n // So we don't need to notify the observers again so the observer\n // can be removed after the final notice.\n while (frameworkChangeObservers.length) {\n frameworkChangeObservers.pop()?.();\n }\n }\n else {\n // The first run of detectFramework:\n // Every time we update the cache, call each observer function\n frameworkChangeObservers.forEach(fcn => {\n fcn();\n });\n }\n // Retry once for either Unknown type after a delay (explained below)\n resetTimeout(Framework.ServerSideUnknown, SSR_RESET_TIMEOUT);\n resetTimeout(Framework.WebUnknown, WEB_RESET_TIMEOUT);\n }\n return frameworkCache;\n};\n/**\n * @internal Setup observer callback that will be called everytime the framework changes\n */\nconst observeFrameworkChanges = (fcn) => {\n // When the `frameworkCache` won't be updated again, we ignore all incoming\n // observers.\n if (resetTriggered) {\n return;\n }\n frameworkChangeObservers.push(fcn);\n};\nfunction clearCache() {\n frameworkCache = undefined;\n}\n// For a framework type and a delay amount, setup the event to re-detect\n// During the runtime boot, it is possible that framework detection will\n// be triggered before the framework has made modifications to the\n// global/window/etc needed for detection. When no framework is detected\n// we will reset and try again to ensure we don't use a cached\n// non-framework detection result for all requests.\nfunction resetTimeout(framework, delay) {\n if (frameworkCache === framework && !resetTriggered) {\n setTimeout(() => {\n clearCache();\n resetTriggered = true;\n setTimeout(detectFramework, PRIME_FRAMEWORK_DELAY);\n }, delay);\n }\n}\n\nexport { clearCache, detectFramework, frameworkChangeObservers, observeFrameworkChanges };\n//# sourceMappingURL=detectFramework.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// Maintains custom user-agent state set by external consumers.\nconst customUserAgentState = {};\n/**\n * Sets custom user agent state which will be appended to applicable requests. Returns a function that can be used to\n * clean up any custom state set with this API.\n *\n * @note\n * This API operates globally. Calling this API multiple times will result in the most recently set values for a\n * particular API being used.\n *\n * @note\n * This utility IS NOT compatible with SSR.\n *\n * @param input - SetCustomUserAgentInput that defines custom state to apply to the specified APIs.\n */\nconst setCustomUserAgent = (input) => {\n // Save custom user-agent state & increment reference counter\n // TODO Remove `any` when we upgrade to TypeScript 5.2, see: https://github.com/microsoft/TypeScript/issues/44373\n customUserAgentState[input.category] = input.apis.reduce((acc, api) => ({\n ...acc,\n [api]: {\n refCount: acc[api]?.refCount ? acc[api].refCount + 1 : 1,\n additionalDetails: input.additionalDetails,\n },\n }), customUserAgentState[input.category] ?? {});\n // Callback that cleans up state for APIs recorded by this call\n let cleanUpCallbackCalled = false;\n const cleanUpCallback = () => {\n // Only allow the cleanup callback to be called once\n if (cleanUpCallbackCalled) {\n return;\n }\n cleanUpCallbackCalled = true;\n input.apis.forEach(api => {\n const apiRefCount = customUserAgentState[input.category][api].refCount;\n if (apiRefCount > 1) {\n customUserAgentState[input.category][api].refCount = apiRefCount - 1;\n }\n else {\n delete customUserAgentState[input.category][api];\n // Clean up category if no more APIs set\n if (!Object.keys(customUserAgentState[input.category]).length) {\n delete customUserAgentState[input.category];\n }\n }\n });\n };\n return cleanUpCallback;\n};\nconst getCustomUserAgent = (category, api) => customUserAgentState[category]?.[api]?.additionalDetails;\n\nexport { getCustomUserAgent, setCustomUserAgent };\n//# sourceMappingURL=customUserAgent.mjs.map\n","import { Framework } from './types.mjs';\nimport { version } from './version.mjs';\nimport { detectFramework, observeFrameworkChanges } from './detectFramework.mjs';\nimport { getCustomUserAgent } from './customUserAgent.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst BASE_USER_AGENT = `aws-amplify`;\n/** Sanitize Amplify version string be removing special character + and character post the special character */\nconst sanitizeAmplifyVersion = (amplifyVersion) => amplifyVersion.replace(/\\+.*/, '');\nclass PlatformBuilder {\n constructor() {\n this.userAgent = `${BASE_USER_AGENT}/${sanitizeAmplifyVersion(version)}`;\n }\n get framework() {\n return detectFramework();\n }\n get isReactNative() {\n return (this.framework === Framework.ReactNative ||\n this.framework === Framework.Expo);\n }\n observeFrameworkChanges(fcn) {\n observeFrameworkChanges(fcn);\n }\n}\nconst Platform = new PlatformBuilder();\nconst getAmplifyUserAgentObject = ({ category, action, } = {}) => {\n const userAgent = [\n [BASE_USER_AGENT, sanitizeAmplifyVersion(version)],\n ];\n if (category) {\n userAgent.push([category, action]);\n }\n userAgent.push(['framework', detectFramework()]);\n if (category && action) {\n const customState = getCustomUserAgent(category, action);\n if (customState) {\n customState.forEach(state => {\n userAgent.push(state);\n });\n }\n }\n return userAgent;\n};\nconst getAmplifyUserAgent = (customUserAgentDetails) => {\n const userAgent = getAmplifyUserAgentObject(customUserAgentDetails);\n const userAgentString = userAgent\n .map(([agentKey, agentValue]) => agentKey && agentValue ? `${agentKey}/${agentValue}` : agentKey)\n .join(' ');\n return userAgentString;\n};\n\nexport { Platform, getAmplifyUserAgent, getAmplifyUserAgentObject, sanitizeAmplifyVersion };\n//# sourceMappingURL=index.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst isBrowser = () => typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.mjs.map\n","class AuthClass {\n /**\n * Configure Auth category\n *\n * @internal\n *\n * @param authResourcesConfig - Resources configurations required by Auth providers.\n * @param authOptions - Client options used by library\n *\n * @returns void\n */\n configure(authResourcesConfig, authOptions) {\n this.authConfig = authResourcesConfig;\n this.authOptions = authOptions;\n }\n /**\n * Fetch the auth tokens, and the temporary AWS credentials and identity if they are configured. By default it\n * does not refresh the auth tokens or credentials if they are loaded in storage already. You can force a refresh\n * with `{ forceRefresh: true }` input.\n *\n * @param options - Options configuring the fetch behavior.\n *\n * @returns Promise of current auth session {@link AuthSession}.\n */\n async fetchAuthSession(options = {}) {\n let credentialsAndIdentityId;\n let userSub;\n // Get tokens will throw if session cannot be refreshed (network or service error) or return null if not available\n const tokens = await this.getTokens(options);\n if (tokens) {\n userSub = tokens.accessToken?.payload?.sub;\n // getCredentialsAndIdentityId will throw if cannot get credentials (network or service error)\n credentialsAndIdentityId =\n await this.authOptions?.credentialsProvider?.getCredentialsAndIdentityId({\n authConfig: this.authConfig,\n tokens,\n authenticated: true,\n forceRefresh: options.forceRefresh,\n });\n }\n else {\n // getCredentialsAndIdentityId will throw if cannot get credentials (network or service error)\n credentialsAndIdentityId =\n await this.authOptions?.credentialsProvider?.getCredentialsAndIdentityId({\n authConfig: this.authConfig,\n authenticated: false,\n forceRefresh: options.forceRefresh,\n });\n }\n return {\n tokens,\n credentials: credentialsAndIdentityId?.credentials,\n identityId: credentialsAndIdentityId?.identityId,\n userSub,\n };\n }\n async clearCredentials() {\n await this.authOptions?.credentialsProvider?.clearCredentialsAndIdentityId();\n }\n async getTokens(options) {\n return ((await this.authOptions?.tokenProvider?.getTokens(options)) ?? undefined);\n }\n}\n\nexport { AuthClass };\n//# sourceMappingURL=index.mjs.map\n","import { Hub, AMPLIFY_SYMBOL } from '../Hub/index.mjs';\nimport '../types/errors.mjs';\nimport '../errors/errorHelpers.mjs';\nimport '../utils/getClientInfo/getClientInfo.mjs';\nimport '../utils/retry/retry.mjs';\nimport { deepFreeze } from '../utils/deepFreeze.mjs';\nimport '../parseAWSExports.mjs';\nimport { ADD_OAUTH_LISTENER } from './constants.mjs';\nimport 'uuid';\nimport { parseAmplifyConfig } from '../utils/parseAmplifyConfig.mjs';\nimport './Auth/utils/errorHelpers.mjs';\nimport '@aws-crypto/sha256-js';\nimport '@smithy/util-hex-encoding';\nimport '../Platform/index.mjs';\nimport '../Platform/types.mjs';\nimport '../BackgroundProcessManager/types.mjs';\nimport '../Reachability/Reachability.mjs';\nimport '../utils/sessionListener/index.mjs';\nimport { AuthClass } from './Auth/index.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass AmplifyClass {\n constructor() {\n this.oAuthListener = undefined;\n this.resourcesConfig = {};\n this.libraryOptions = {};\n this.Auth = new AuthClass();\n }\n /**\n * Configures Amplify for use with your back-end resources.\n *\n * @remarks\n * This API does not perform any merging of either `resourcesConfig` or `libraryOptions`. The most recently\n * provided values will be used after configuration.\n *\n * @remarks\n * `configure` can be used to specify additional library options where available for supported categories.\n *\n * @param resourceConfig - Back-end resource configuration. Typically provided via the `aws-exports.js` file.\n * @param libraryOptions - Additional options for customizing the behavior of the library.\n */\n configure(resourcesConfig, libraryOptions) {\n const resolvedResourceConfig = parseAmplifyConfig(resourcesConfig);\n this.resourcesConfig = resolvedResourceConfig;\n if (libraryOptions) {\n this.libraryOptions = libraryOptions;\n }\n // Make resource config immutable\n this.resourcesConfig = deepFreeze(this.resourcesConfig);\n this.Auth.configure(this.resourcesConfig.Auth, this.libraryOptions.Auth);\n Hub.dispatch('core', {\n event: 'configure',\n data: this.resourcesConfig,\n }, 'Configure', AMPLIFY_SYMBOL);\n this.notifyOAuthListener();\n }\n /**\n * Provides access to the current back-end resource configuration for the Library.\n *\n * @returns Returns the immutable back-end resource configuration.\n */\n getConfig() {\n return this.resourcesConfig;\n }\n /** @internal */\n [ADD_OAUTH_LISTENER](listener) {\n if (this.resourcesConfig.Auth?.Cognito.loginWith?.oauth) {\n // when Amplify has been configured with a valid OAuth config while adding the listener, run it directly\n listener(this.resourcesConfig.Auth?.Cognito);\n }\n else {\n // otherwise register the listener and run it later when Amplify gets configured with a valid oauth config\n this.oAuthListener = listener;\n }\n }\n notifyOAuthListener() {\n if (!this.resourcesConfig.Auth?.Cognito.loginWith?.oauth ||\n !this.oAuthListener) {\n return;\n }\n this.oAuthListener(this.resourcesConfig.Auth?.Cognito);\n // the listener should only be notified once with a valid oauth config\n this.oAuthListener = undefined;\n }\n}\n/**\n * The `Amplify` utility is used to configure the library.\n *\n * @remarks\n * `Amplify` orchestrates cross-category communication within the library.\n */\nconst Amplify = new AmplifyClass();\n\nexport { Amplify, AmplifyClass };\n//# sourceMappingURL=Amplify.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst fetchAuthSession = (amplify, options) => {\n return amplify.Auth.fetchAuthSession(options);\n};\n\nexport { fetchAuthSession };\n//# sourceMappingURL=fetchAuthSession.mjs.map\n","import { Amplify } from '../Amplify.mjs';\nimport { fetchAuthSession as fetchAuthSession$1 } from './internal/fetchAuthSession.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Fetch the auth session including the tokens and credentials if they are available. By default it\n * does not refresh the auth tokens or credentials if they are loaded in storage already. You can force a refresh\n * with `{ forceRefresh: true }` input.\n *\n * @param options - Options configuring the fetch behavior.\n * @throws {@link AuthError} - Throws error when session information cannot be refreshed.\n * @returns Promise\n */\nconst fetchAuthSession = (options) => {\n return fetchAuthSession$1(Amplify, options);\n};\n\nexport { fetchAuthSession };\n//# sourceMappingURL=fetchAuthSession.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst parseMetadata = (response) => {\n const { headers, statusCode } = response;\n return {\n ...(isMetadataBearer(response) ? response.$metadata : {}),\n httpStatusCode: statusCode,\n requestId: headers['x-amzn-requestid'] ??\n headers['x-amzn-request-id'] ??\n headers['x-amz-request-id'],\n extendedRequestId: headers['x-amz-id-2'],\n cfId: headers['x-amz-cf-id'],\n };\n};\nconst isMetadataBearer = (response) => typeof response?.$metadata === 'object';\n\nexport { parseMetadata };\n//# sourceMappingURL=responseInfo.mjs.map\n","import { parseMetadata } from './responseInfo.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Utility functions for serializing and deserializing of JSON protocol in general(including: REST-JSON, JSON-RPC, etc.)\n */\n/**\n * Error parser for AWS JSON protocol.\n */\nconst parseJsonError = async (response) => {\n if (!response || response.statusCode < 300) {\n return;\n }\n const body = await parseJsonBody(response);\n const sanitizeErrorCode = (rawValue) => {\n const [cleanValue] = rawValue.toString().split(/[,:]+/);\n if (cleanValue.includes('#')) {\n return cleanValue.split('#')[1];\n }\n return cleanValue;\n };\n const code = sanitizeErrorCode(response.headers['x-amzn-errortype'] ??\n body.code ??\n body.__type ??\n 'UnknownError');\n const message = body.message ?? body.Message ?? 'Unknown error';\n const error = new Error(message);\n return Object.assign(error, {\n name: code,\n $metadata: parseMetadata(response),\n });\n};\n/**\n * Parse JSON response body to JavaScript object.\n */\nconst parseJsonBody = async (response) => {\n if (!response.body) {\n throw new Error('Missing response payload');\n }\n const output = await response.body.json();\n return Object.assign(output, {\n $metadata: parseMetadata(response),\n });\n};\n\nexport { parseJsonBody, parseJsonError };\n//# sourceMappingURL=json.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Compose a service API handler that accepts input as defined shape and responds conforming to defined output shape.\n * A service API handler is composed with:\n * * A transfer handler\n * * A serializer function\n * * A deserializer function\n * * A default config object\n *\n * The returned service API handler, when called, will trigger the following workflow:\n * 1. When calling the service API handler function, the default config object is merged into the input config\n * object to assign the default values of some omitted configs, resulting to a resolved config object.\n * 2. The `endpointResolver` function from the default config object will be invoked with the resolved config object and\n * API input object resulting to an endpoint instance.\n * 3. The serializer function is invoked with API input object and the endpoint instance resulting to an HTTP request\n * instance.\n * 4. The HTTP request instance and the resolved config object is passed to the transfer handler function.\n * 5. The transfer handler function resolves to an HTTP response instance(can be either successful or failed status code).\n * 6. The deserializer function is invoked with the HTTP response instance resulting to the API output object, and\n * return to the caller.\n *\n *\n * @param transferHandler Async function for dispatching HTTP requests and returning HTTP response.\n * @param serializer Async function for converting object in defined input shape into HTTP request targeting a given\n * \tendpoint.\n * @param deserializer Async function for converting HTTP response into output object in defined output shape, or error\n * \tshape.\n * @param defaultConfig object containing default options to be consumed by transfer handler, serializer and\n * deserializer.\n * @returns a async service API handler function that accepts a config object and input object in defined shape, returns\n * \tan output object in defined shape. It may also throw error instance in defined shape in deserializer. The config\n * object type is composed with options type of transferHandler, endpointResolver function as well as endpointResolver\n * function's input options type, region string. The config object property will be marked as optional if it's also\n * \tdefined in defaultConfig.\n *\n * @internal\n */\nconst composeServiceApi = (transferHandler, serializer, deserializer, defaultConfig) => {\n return async (config, input) => {\n const resolvedConfig = {\n ...defaultConfig,\n ...config,\n };\n // We need to allow different endpoints based on both given config(other than region) and input.\n // However for most of non-S3 services, region is the only input for endpoint resolver.\n const endpoint = await resolvedConfig.endpointResolver(resolvedConfig, input);\n // Unlike AWS SDK clients, a serializer should NOT populate the `host` or `content-length` headers.\n // Both of these headers are prohibited per Spec(https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name).\n // They will be populated automatically by browser, or node-fetch polyfill.\n const request = await serializer(input, endpoint);\n const response = await transferHandler(request, {\n ...resolvedConfig,\n });\n return deserializer(response);\n };\n};\n\nexport { composeServiceApi };\n//# sourceMappingURL=composeServiceApi.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Default partition for AWS services. This is used when the region is not provided or the region is not recognized.\n *\n * @internal\n */\nconst defaultPartition = {\n id: 'aws',\n outputs: {\n dnsSuffix: 'amazonaws.com',\n },\n regionRegex: '^(us|eu|ap|sa|ca|me|af)\\\\-\\\\w+\\\\-\\\\d+$',\n regions: ['aws-global'],\n};\n/**\n * This data is adapted from the partition file from AWS SDK shared utilities but remove some contents for bundle size\n * concern. Information removed are `dualStackDnsSuffix`, `supportDualStack`, `supportFIPS`, restricted partitions, and\n * list of regions for each partition other than global regions.\n *\n * * Ref: https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints\n * * Ref: https://github.com/aws/aws-sdk-js-v3/blob/0201baef03c2379f1f6f7150b9d401d4b230d488/packages/util-endpoints/src/lib/aws/partitions.json#L1\n *\n * @internal\n */\nconst partitionsInfo = {\n partitions: [\n defaultPartition,\n {\n id: 'aws-cn',\n outputs: {\n dnsSuffix: 'amazonaws.com.cn',\n },\n regionRegex: '^cn\\\\-\\\\w+\\\\-\\\\d+$',\n regions: ['aws-cn-global'],\n },\n ],\n};\n\nexport { defaultPartition, partitionsInfo };\n//# sourceMappingURL=partitions.mjs.map\n","import { partitionsInfo, defaultPartition } from './partitions.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Get the AWS Services endpoint URL's DNS suffix for a given region. A typical AWS regional service endpoint URL will\n * follow this pattern: {endpointPrefix}.{region}.{dnsSuffix}. For example, the endpoint URL for Cognito Identity in\n * us-east-1 will be cognito-identity.us-east-1.amazonaws.com. Here the DnsSuffix is `amazonaws.com`.\n *\n * @param region\n * @returns The DNS suffix\n *\n * @internal\n */\nconst getDnsSuffix = (region) => {\n const { partitions } = partitionsInfo;\n for (const { regions, outputs, regionRegex } of partitions) {\n const regex = new RegExp(regionRegex);\n if (regions.includes(region) || regex.test(region)) {\n return outputs.dnsSuffix;\n }\n }\n return defaultPartition.outputs.dnsSuffix;\n};\n\nexport { getDnsSuffix };\n//# sourceMappingURL=getDnsSuffix.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst AMZ_SDK_INVOCATION_ID_HEADER = 'amz-sdk-invocation-id';\nconst AMZ_SDK_REQUEST_HEADER = 'amz-sdk-request';\nconst DEFAULT_MAX_DELAY_MS = 5 * 60 * 1000;\n\nexport { AMZ_SDK_INVOCATION_ID_HEADER, AMZ_SDK_REQUEST_HEADER, DEFAULT_MAX_DELAY_MS, DEFAULT_RETRY_ATTEMPTS };\n//# sourceMappingURL=constants.mjs.map\n","import { DEFAULT_RETRY_ATTEMPTS } from './constants.mjs';\n\n/**\n * Middleware that executes the retry logic.\n */\nconst retryMiddlewareFactory = ({ maxAttempts = DEFAULT_RETRY_ATTEMPTS, retryDecider, computeDelay, abortSignal, }) => {\n if (maxAttempts < 1) {\n throw new Error('maxAttempts must be greater than 0');\n }\n return (next, context) => async function retryMiddleware(request) {\n let error;\n let attemptsCount = context.attemptsCount ?? 0;\n let response;\n // When retry is not needed or max attempts is reached, either error or response will be set. This function handles either cases.\n const handleTerminalErrorOrResponse = () => {\n if (response) {\n addOrIncrementMetadataAttempts(response, attemptsCount);\n return response;\n }\n else {\n addOrIncrementMetadataAttempts(error, attemptsCount);\n throw error;\n }\n };\n while (!abortSignal?.aborted && attemptsCount < maxAttempts) {\n try {\n response = await next(request);\n error = undefined;\n }\n catch (e) {\n error = e;\n response = undefined;\n }\n // context.attemptsCount may be updated after calling next handler which may retry the request by itself.\n attemptsCount =\n (context.attemptsCount ?? 0) > attemptsCount\n ? (context.attemptsCount ?? 0)\n : attemptsCount + 1;\n context.attemptsCount = attemptsCount;\n const { isCredentialsExpiredError, retryable } = await retryDecider(response, error, context);\n if (retryable) {\n // Setting isCredentialsInvalid flag to notify signing middleware to forceRefresh credentials provider.\n context.isCredentialsExpired = !!isCredentialsExpiredError;\n if (!abortSignal?.aborted && attemptsCount < maxAttempts) {\n // prevent sleep for last attempt or cancelled request;\n const delay = computeDelay(attemptsCount);\n await cancellableSleep(delay, abortSignal);\n }\n continue;\n }\n else {\n return handleTerminalErrorOrResponse();\n }\n }\n if (abortSignal?.aborted) {\n throw new Error('Request aborted.');\n }\n else {\n return handleTerminalErrorOrResponse();\n }\n };\n};\nconst cancellableSleep = (timeoutMs, abortSignal) => {\n if (abortSignal?.aborted) {\n return Promise.resolve();\n }\n let timeoutId;\n let sleepPromiseResolveFn;\n const sleepPromise = new Promise(resolve => {\n sleepPromiseResolveFn = resolve;\n timeoutId = setTimeout(resolve, timeoutMs);\n });\n abortSignal?.addEventListener('abort', function cancelSleep(_) {\n clearTimeout(timeoutId);\n abortSignal?.removeEventListener('abort', cancelSleep);\n sleepPromiseResolveFn();\n });\n return sleepPromise;\n};\nconst addOrIncrementMetadataAttempts = (nextHandlerOutput, attempts) => {\n if (Object.prototype.toString.call(nextHandlerOutput) !== '[object Object]') {\n return;\n }\n nextHandlerOutput.$metadata = {\n ...(nextHandlerOutput.$metadata ?? {}),\n attempts,\n };\n};\n\nexport { retryMiddlewareFactory };\n//# sourceMappingURL=retryMiddleware.mjs.map\n","import { v4 } from 'uuid';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst amplifyUuid = v4;\n\nexport { amplifyUuid };\n//# sourceMappingURL=index.mjs.map\n","import '../../../types/errors.mjs';\nimport '../../../errors/errorHelpers.mjs';\nimport '../../../utils/getClientInfo/getClientInfo.mjs';\nimport '../../../utils/retry/retry.mjs';\nimport '../../../parseAWSExports.mjs';\nimport { amplifyUuid } from '../../../utils/amplifyUuid/index.mjs';\nimport '../../../singleton/Auth/utils/errorHelpers.mjs';\nimport '@aws-crypto/sha256-js';\nimport '@smithy/util-hex-encoding';\nimport '../../../Platform/index.mjs';\nimport '../../../Platform/types.mjs';\nimport '../../../BackgroundProcessManager/types.mjs';\nimport '../../../Reachability/Reachability.mjs';\nimport '../../../Hub/index.mjs';\nimport '../../../utils/sessionListener/index.mjs';\nimport { AMZ_SDK_INVOCATION_ID_HEADER } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Middleware injects a UUID string to `amz-sdk-invocation-id` header.\n * if the header is not set already. This header is helpful to provide\n * observability to group the requests caused by automatic retry.\n *\n * This middleware is standalone because of extra UUID dependency, we will\n * NOT use this middleware for API categories.\n *\n * Ref: https://sdk.amazonaws.com/kotlin/api/smithy-kotlin/api/1.0.9/http-client/aws.smithy.kotlin.runtime.http.operation/-http-operation-context/-sdk-invocation-id.html\n */\nconst amzSdkInvocationIdHeaderMiddlewareFactory = () => next => {\n return async function amzSdkInvocationIdHeaderMiddleware(request) {\n if (!request.headers[AMZ_SDK_INVOCATION_ID_HEADER]) {\n request.headers[AMZ_SDK_INVOCATION_ID_HEADER] = amplifyUuid();\n }\n return next(request);\n };\n};\n\nexport { amzSdkInvocationIdHeaderMiddlewareFactory };\n//# sourceMappingURL=amzSdkInvocationIdHeaderMiddleware.mjs.map\n","import { DEFAULT_RETRY_ATTEMPTS, AMZ_SDK_REQUEST_HEADER } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Middleware injects `amz-sdk-request` header to indicate the retry state at the time an HTTP request is made.\n * This middleware should co-exist with retryMiddleware as it relies on the retryAttempts value in middleware context\n * set by the retry middleware.\n *\n * Example header: `amz-sdk-request: attempt=1; max=3`.\n *\n * This middleware is standalone because of extra headers may conflict with custom endpoint settings(e.g. CORS), we will\n * NOT use this middleware for API categories.\n */\nconst amzSdkRequestHeaderMiddlewareFactory = ({ maxAttempts = DEFAULT_RETRY_ATTEMPTS }) => (next, context) => {\n return async function amzSdkRequestHeaderMiddleware(request) {\n const attemptsCount = context.attemptsCount ?? 0;\n request.headers[AMZ_SDK_REQUEST_HEADER] =\n `attempt=${attemptsCount + 1}; max=${maxAttempts}`;\n return next(request);\n };\n};\n\nexport { amzSdkRequestHeaderMiddlewareFactory };\n//# sourceMappingURL=amzSdkRequestHeaderMiddleware.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Middleware injects user agent string to specified header(default to 'x-amz-user-agent'),\n * if the header is not set already.\n *\n * TODO: incorporate new user agent design\n */\nconst userAgentMiddlewareFactory = ({ userAgentHeader = 'x-amz-user-agent', userAgentValue = '', }) => next => {\n return async function userAgentMiddleware(request) {\n if (userAgentValue.trim().length === 0) {\n const result = await next(request);\n return result;\n }\n else {\n const headerName = userAgentHeader.toLowerCase();\n request.headers[headerName] = request.headers[headerName]\n ? `${request.headers[headerName]} ${userAgentValue}`\n : userAgentValue;\n const response = await next(request);\n return response;\n }\n };\n};\n\nexport { userAgentMiddlewareFactory };\n//# sourceMappingURL=middleware.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Compose a transfer handler with a core transfer handler and a list of middleware.\n * @param coreHandler Core transfer handler\n * @param middleware\tList of middleware\n * @returns A transfer handler whose option type is the union of the core\n * \ttransfer handler's option type and the middleware's option type.\n * @internal\n */\nconst composeTransferHandler = (coreHandler, middleware) => (request, options) => {\n const context = {};\n let composedHandler = (composeHandlerRequest) => coreHandler(composeHandlerRequest, options);\n for (let i = middleware.length - 1; i >= 0; i--) {\n const m = middleware[i];\n const resolvedMiddleware = m(options);\n composedHandler = resolvedMiddleware(composedHandler, context);\n }\n return composedHandler(request);\n};\n\nexport { composeTransferHandler };\n//# sourceMappingURL=composeTransferHandler.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Cache the payload of a response body. It allows multiple calls to the body,\n * for example, when reading the body in both retry decider and error deserializer.\n * Caching body is allowed here because we call the body accessor(blob(), json(),\n * etc.) when body is small or streaming implementation is not available(RN).\n *\n * @internal\n */\nconst withMemoization = (payloadAccessor) => {\n let cached;\n return () => {\n if (!cached) {\n // Explicitly not awaiting. Intermediate await would add overhead and\n // introduce a possible race in the event that this wrapper is called\n // again before the first `payloadAccessor` call resolves.\n cached = payloadAccessor();\n }\n return cached;\n };\n};\n\nexport { withMemoization };\n//# sourceMappingURL=memoization.mjs.map\n","import { AmplifyError } from '../../errors/AmplifyError.mjs';\nimport { AmplifyErrorCode } from '../../types/errors.mjs';\nimport '../../errors/errorHelpers.mjs';\nimport { withMemoization } from '../utils/memoization.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst shouldSendBody = (method) => !['HEAD', 'GET', 'DELETE'].includes(method.toUpperCase());\n// TODO[AllanZhengYP]: we need to provide isCanceledError utility\nconst fetchTransferHandler = async ({ url, method, headers, body }, { abortSignal, cache, withCrossDomainCredentials }) => {\n let resp;\n try {\n resp = await fetch(url, {\n method,\n headers,\n body: shouldSendBody(method) ? body : undefined,\n signal: abortSignal,\n cache,\n credentials: withCrossDomainCredentials ? 'include' : 'same-origin',\n });\n }\n catch (e) {\n if (e instanceof TypeError) {\n throw new AmplifyError({\n name: AmplifyErrorCode.NetworkError,\n message: 'A network error has occurred.',\n underlyingError: e,\n });\n }\n throw e;\n }\n const responseHeaders = {};\n resp.headers?.forEach((value, key) => {\n responseHeaders[key.toLowerCase()] = value;\n });\n const httpResponse = {\n statusCode: resp.status,\n headers: responseHeaders,\n body: null,\n };\n // resp.body is a ReadableStream according to Fetch API spec, but React Native\n // does not implement it.\n const bodyWithMixin = Object.assign(resp.body ?? {}, {\n text: withMemoization(() => resp.text()),\n blob: withMemoization(() => resp.blob()),\n json: withMemoization(() => resp.json()),\n });\n return {\n ...httpResponse,\n body: bodyWithMixin,\n };\n};\n\nexport { fetchTransferHandler };\n//# sourceMappingURL=fetch.mjs.map\n","import { retryMiddlewareFactory } from '../../middleware/retry/retryMiddleware.mjs';\nimport '../../../types/errors.mjs';\nimport '../../../errors/errorHelpers.mjs';\nimport '../../../utils/getClientInfo/getClientInfo.mjs';\nimport '../../../utils/retry/retry.mjs';\nimport { amzSdkInvocationIdHeaderMiddlewareFactory } from '../../middleware/retry/amzSdkInvocationIdHeaderMiddleware.mjs';\nimport { amzSdkRequestHeaderMiddlewareFactory } from '../../middleware/retry/amzSdkRequestHeaderMiddleware.mjs';\nimport { userAgentMiddlewareFactory } from '../../middleware/userAgent/middleware.mjs';\nimport { composeTransferHandler } from '../../internal/composeTransferHandler.mjs';\nimport { fetchTransferHandler } from '../fetch.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst unauthenticatedHandler = composeTransferHandler(fetchTransferHandler, [\n userAgentMiddlewareFactory,\n amzSdkInvocationIdHeaderMiddlewareFactory,\n retryMiddlewareFactory,\n amzSdkRequestHeaderMiddlewareFactory,\n]);\n\nexport { unauthenticatedHandler };\n//# sourceMappingURL=unauthenticated.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst MAX_DELAY_MS = 5 * 60 * 1000;\n\nexport { MAX_DELAY_MS };\n//# sourceMappingURL=constants.mjs.map\n","import { MAX_DELAY_MS } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @private\n * Internal use of Amplify only\n */\nfunction jitteredBackoff(maxDelayMs = MAX_DELAY_MS) {\n const BASE_TIME_MS = 100;\n const JITTER_FACTOR = 100;\n return attempt => {\n const delay = 2 ** attempt * BASE_TIME_MS + JITTER_FACTOR * Math.random();\n return delay > maxDelayMs ? false : delay;\n };\n}\n\nexport { jitteredBackoff };\n//# sourceMappingURL=jitteredBackoff.mjs.map\n","import '../../../types/errors.mjs';\nimport '../../../errors/errorHelpers.mjs';\nimport '../../../utils/getClientInfo/getClientInfo.mjs';\nimport { jitteredBackoff as jitteredBackoff$1 } from '../../../utils/retry/jitteredBackoff.mjs';\nimport '../../../utils/retry/retry.mjs';\nimport { DEFAULT_MAX_DELAY_MS } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// TODO: [v6] The separate retry utility is used by Data packages now and will replaced by retry middleware.\nconst jitteredBackoff = attempt => {\n const delayFunction = jitteredBackoff$1(DEFAULT_MAX_DELAY_MS);\n const delay = delayFunction(attempt);\n // The delayFunction returns false when the delay is greater than the max delay(5 mins).\n // In this case, the retry middleware will delay 5 mins instead, as a ceiling of the delay.\n return delay === false ? DEFAULT_MAX_DELAY_MS : delay;\n};\n\nexport { jitteredBackoff };\n//# sourceMappingURL=jitteredBackoff.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n// via https://github.com/aws/aws-sdk-js-v3/blob/ab0e7be36e7e7f8a0c04834357aaad643c7912c3/packages/service-error-classification/src/constants.ts#L8\nconst CLOCK_SKEW_ERROR_CODES = [\n 'AuthFailure',\n 'InvalidSignatureException',\n 'RequestExpired',\n 'RequestInTheFuture',\n 'RequestTimeTooSkewed',\n 'SignatureDoesNotMatch',\n 'BadRequestException', // API Gateway\n];\n/**\n * Given an error code, returns true if it is related to a clock skew error.\n *\n * @param errorCode String representation of some error.\n * @returns True if given error is present in `CLOCK_SKEW_ERROR_CODES`, false otherwise.\n *\n * @internal\n */\nconst isClockSkewError = (errorCode) => !!errorCode && CLOCK_SKEW_ERROR_CODES.includes(errorCode);\n\nexport { isClockSkewError };\n//# sourceMappingURL=isClockSkewError.mjs.map\n","import { AmplifyErrorCode } from '../../../types/errors.mjs';\nimport { isClockSkewError } from './isClockSkewError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Get retry decider function\n * @param errorParser Function to load JavaScript error from HTTP response\n */\nconst getRetryDecider = (errorParser) => async (response, error) => {\n const parsedError = error ??\n (await errorParser(response)) ??\n undefined;\n const errorCode = parsedError?.code || parsedError?.name;\n const statusCode = response?.statusCode;\n const isRetryable = isConnectionError(error) ||\n isThrottlingError(statusCode, errorCode) ||\n isClockSkewError(errorCode) ||\n isServerSideError(statusCode, errorCode);\n return {\n retryable: isRetryable,\n };\n};\n// reference: https://github.com/aws/aws-sdk-js-v3/blob/ab0e7be36e7e7f8a0c04834357aaad643c7912c3/packages/service-error-classification/src/constants.ts#L22-L37\nconst THROTTLING_ERROR_CODES = [\n 'BandwidthLimitExceeded',\n 'EC2ThrottledException',\n 'LimitExceededException',\n 'PriorRequestNotComplete',\n 'ProvisionedThroughputExceededException',\n 'RequestLimitExceeded',\n 'RequestThrottled',\n 'RequestThrottledException',\n 'SlowDown',\n 'ThrottledException',\n 'Throttling',\n 'ThrottlingException',\n 'TooManyRequestsException',\n];\nconst TIMEOUT_ERROR_CODES = [\n 'TimeoutError',\n 'RequestTimeout',\n 'RequestTimeoutException',\n];\nconst isThrottlingError = (statusCode, errorCode) => statusCode === 429 ||\n (!!errorCode && THROTTLING_ERROR_CODES.includes(errorCode));\nconst isConnectionError = (error) => [\n AmplifyErrorCode.NetworkError,\n // TODO(vNext): unify the error code `ERR_NETWORK` used by the Storage XHR handler\n 'ERR_NETWORK',\n].includes(error?.name);\nconst isServerSideError = (statusCode, errorCode) => (!!statusCode && [500, 502, 503, 504].includes(statusCode)) ||\n (!!errorCode && TIMEOUT_ERROR_CODES.includes(errorCode));\n\nexport { getRetryDecider };\n//# sourceMappingURL=defaultRetryDecider.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst AmplifyUrl = URL;\nconst AmplifyUrlSearchParams = URLSearchParams;\n\nexport { AmplifyUrl, AmplifyUrlSearchParams };\n//# sourceMappingURL=index.mjs.map\n","import { getDnsSuffix } from '../../clients/endpoints/getDnsSuffix.mjs';\nimport '../../types/errors.mjs';\nimport '../../errors/errorHelpers.mjs';\nimport { unauthenticatedHandler } from '../../clients/handlers/aws/unauthenticated.mjs';\nimport { jitteredBackoff } from '../../clients/middleware/retry/jitteredBackoff.mjs';\nimport { getRetryDecider } from '../../clients/middleware/retry/defaultRetryDecider.mjs';\nimport '../../utils/getClientInfo/getClientInfo.mjs';\nimport '../../utils/retry/retry.mjs';\nimport '../../parseAWSExports.mjs';\nimport 'uuid';\nimport { AmplifyUrl } from '../../utils/amplifyUrl/index.mjs';\nimport '../../singleton/Auth/utils/errorHelpers.mjs';\nimport '@aws-crypto/sha256-js';\nimport '@smithy/util-hex-encoding';\nimport { getAmplifyUserAgent } from '../../Platform/index.mjs';\nimport '../../Platform/types.mjs';\nimport '../../BackgroundProcessManager/types.mjs';\nimport '../../Reachability/Reachability.mjs';\nimport '../../Hub/index.mjs';\nimport '../../utils/sessionListener/index.mjs';\nimport { composeTransferHandler } from '../../clients/internal/composeTransferHandler.mjs';\nimport { parseJsonError } from '../../clients/serde/json.mjs';\nimport { observeFrameworkChanges } from '../../Platform/detectFramework.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * The service name used to sign requests if the API requires authentication.\n */\nconst SERVICE_NAME = 'cognito-identity';\n/**\n * The endpoint resolver function that returns the endpoint URL for a given region.\n */\nconst endpointResolver = ({ region }) => ({\n url: new AmplifyUrl(`https://cognito-identity.${region}.${getDnsSuffix(region)}`),\n});\n/**\n * A Cognito Identity-specific middleware that disables caching for all requests.\n */\nconst disableCacheMiddlewareFactory = () => next => async function disableCacheMiddleware(request) {\n request.headers['cache-control'] = 'no-store';\n return next(request);\n};\n/**\n * A Cognito Identity-specific transfer handler that does NOT sign requests, and\n * disables caching.\n *\n * @internal\n */\nconst cognitoIdentityTransferHandler = composeTransferHandler(unauthenticatedHandler, [disableCacheMiddlewareFactory]);\n/**\n * @internal\n */\nconst defaultConfig = {\n service: SERVICE_NAME,\n endpointResolver,\n retryDecider: getRetryDecider(parseJsonError),\n computeDelay: jitteredBackoff,\n userAgentValue: getAmplifyUserAgent(),\n cache: 'no-store',\n};\nobserveFrameworkChanges(() => {\n defaultConfig.userAgentValue = getAmplifyUserAgent();\n});\n/**\n * @internal\n */\nconst getSharedHeaders = (operation) => ({\n 'content-type': 'application/x-amz-json-1.1',\n 'x-amz-target': `AWSCognitoIdentityService.${operation}`,\n});\n/**\n * @internal\n */\nconst buildHttpRpcRequest = ({ url }, headers, body) => ({\n headers,\n url,\n body,\n method: 'POST',\n});\n\nexport { buildHttpRpcRequest, cognitoIdentityTransferHandler, defaultConfig, getSharedHeaders };\n//# sourceMappingURL=base.mjs.map\n","import '../../types/errors.mjs';\nimport '../../errors/errorHelpers.mjs';\nimport '../../utils/getClientInfo/getClientInfo.mjs';\nimport '../../utils/retry/retry.mjs';\nimport '../../parseAWSExports.mjs';\nimport 'uuid';\nimport '../../singleton/Auth/utils/errorHelpers.mjs';\nimport '@aws-crypto/sha256-js';\nimport '@smithy/util-hex-encoding';\nimport '../../Platform/index.mjs';\nimport '../../Platform/types.mjs';\nimport '../../BackgroundProcessManager/types.mjs';\nimport '../../Reachability/Reachability.mjs';\nimport '../../Hub/index.mjs';\nimport '../../utils/sessionListener/index.mjs';\nimport { parseMetadata } from '../../clients/serde/responseInfo.mjs';\nimport { parseJsonError, parseJsonBody } from '../../clients/serde/json.mjs';\nimport { composeServiceApi } from '../../clients/internal/composeServiceApi.mjs';\nimport { defaultConfig, cognitoIdentityTransferHandler, buildHttpRpcRequest, getSharedHeaders } from './base.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst getIdSerializer = (input, endpoint) => {\n const headers = getSharedHeaders('GetId');\n const body = JSON.stringify(input);\n return buildHttpRpcRequest(endpoint, headers, body);\n};\nconst getIdDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n const error = await parseJsonError(response);\n throw error;\n }\n else {\n const body = await parseJsonBody(response);\n return {\n IdentityId: body.IdentityId,\n $metadata: parseMetadata(response),\n };\n }\n};\n/**\n * @internal\n */\nconst getId = composeServiceApi(cognitoIdentityTransferHandler, getIdSerializer, getIdDeserializer, defaultConfig);\n\nexport { getId };\n//# sourceMappingURL=getId.mjs.map\n","import '../../types/errors.mjs';\nimport '../../errors/errorHelpers.mjs';\nimport '../../utils/getClientInfo/getClientInfo.mjs';\nimport '../../utils/retry/retry.mjs';\nimport '../../parseAWSExports.mjs';\nimport 'uuid';\nimport '../../singleton/Auth/utils/errorHelpers.mjs';\nimport '@aws-crypto/sha256-js';\nimport '@smithy/util-hex-encoding';\nimport '../../Platform/index.mjs';\nimport '../../Platform/types.mjs';\nimport '../../BackgroundProcessManager/types.mjs';\nimport '../../Reachability/Reachability.mjs';\nimport '../../Hub/index.mjs';\nimport '../../utils/sessionListener/index.mjs';\nimport { parseMetadata } from '../../clients/serde/responseInfo.mjs';\nimport { parseJsonError, parseJsonBody } from '../../clients/serde/json.mjs';\nimport { composeServiceApi } from '../../clients/internal/composeServiceApi.mjs';\nimport { defaultConfig, cognitoIdentityTransferHandler, buildHttpRpcRequest, getSharedHeaders } from './base.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst getCredentialsForIdentitySerializer = (input, endpoint) => {\n const headers = getSharedHeaders('GetCredentialsForIdentity');\n const body = JSON.stringify(input);\n return buildHttpRpcRequest(endpoint, headers, body);\n};\nconst getCredentialsForIdentityDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n const error = await parseJsonError(response);\n throw error;\n }\n else {\n const body = await parseJsonBody(response);\n return {\n IdentityId: body.IdentityId,\n Credentials: deserializeCredentials(body.Credentials),\n $metadata: parseMetadata(response),\n };\n }\n};\nconst deserializeCredentials = ({ AccessKeyId, SecretKey, SessionToken, Expiration, } = {}) => {\n return {\n AccessKeyId,\n SecretKey,\n SessionToken,\n Expiration: Expiration && new Date(Expiration * 1000),\n };\n};\n/**\n * @internal\n */\nconst getCredentialsForIdentity = composeServiceApi(cognitoIdentityTransferHandler, getCredentialsForIdentitySerializer, getCredentialsForIdentityDeserializer, defaultConfig);\n\nexport { getCredentialsForIdentity };\n//# sourceMappingURL=getCredentialsForIdentity.mjs.map\n","import { AmplifyErrorCode } from '../types/errors.mjs';\nimport { AmplifyError } from './AmplifyError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass PlatformNotSupportedError extends AmplifyError {\n constructor() {\n super({\n name: AmplifyErrorCode.PlatformNotSupported,\n message: 'Function not supported on current platform',\n });\n }\n}\n\nexport { PlatformNotSupportedError };\n//# sourceMappingURL=PlatformNotSupportedError.mjs.map\n","import { PlatformNotSupportedError } from '../errors/PlatformNotSupportedError.mjs';\nimport '../errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass KeyValueStorage {\n constructor(storage) {\n this.storage = storage;\n }\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n async setItem(key, value) {\n if (!this.storage)\n throw new PlatformNotSupportedError();\n this.storage.setItem(key, value);\n }\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n async getItem(key) {\n if (!this.storage)\n throw new PlatformNotSupportedError();\n return this.storage.getItem(key);\n }\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n async removeItem(key) {\n if (!this.storage)\n throw new PlatformNotSupportedError();\n this.storage.removeItem(key);\n }\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n async clear() {\n if (!this.storage)\n throw new PlatformNotSupportedError();\n this.storage.clear();\n }\n}\n\nexport { KeyValueStorage };\n//# sourceMappingURL=KeyValueStorage.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass InMemoryStorage {\n constructor() {\n this.storage = new Map();\n }\n get length() {\n return this.storage.size;\n }\n key(index) {\n if (index > this.length - 1) {\n return null;\n }\n return Array.from(this.storage.keys())[index];\n }\n setItem(key, value) {\n this.storage.set(key, value);\n }\n getItem(key) {\n return this.storage.get(key) ?? null;\n }\n removeItem(key) {\n this.storage.delete(key);\n }\n clear() {\n this.storage.clear();\n }\n}\n\nexport { InMemoryStorage };\n//# sourceMappingURL=InMemoryStorage.mjs.map\n","import { ConsoleLogger } from '../Logger/ConsoleLogger.mjs';\nimport { InMemoryStorage } from './InMemoryStorage.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n * @returns Either a reference to window.localStorage or an in-memory storage as fallback\n */\nconst logger = new ConsoleLogger('CoreStorageUtils');\nconst getLocalStorageWithFallback = () => {\n try {\n // Attempt to use localStorage directly\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage;\n }\n }\n catch (e) {\n // Handle any errors related to localStorage access\n logger.info('localStorage not found. InMemoryStorage is used as a fallback.');\n }\n // Return in-memory storage as a fallback if localStorage is not accessible\n return new InMemoryStorage();\n};\n/**\n * @internal\n * @returns Either a reference to window.sessionStorage or an in-memory storage as fallback\n */\nconst getSessionStorageWithFallback = () => {\n try {\n // Attempt to use sessionStorage directly\n if (typeof window !== 'undefined' && window.sessionStorage) {\n // Verify we can actually use it by testing access\n window.sessionStorage.getItem('test');\n return window.sessionStorage;\n }\n throw new Error('sessionStorage is not defined');\n }\n catch (e) {\n // Handle any errors related to sessionStorage access\n logger.info('sessionStorage not found. InMemoryStorage is used as a fallback.');\n return new InMemoryStorage();\n }\n};\n\nexport { getLocalStorageWithFallback, getSessionStorageWithFallback };\n//# sourceMappingURL=utils.mjs.map\n","import { KeyValueStorage } from './KeyValueStorage.mjs';\nimport { getLocalStorageWithFallback } from './utils.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass DefaultStorage extends KeyValueStorage {\n constructor() {\n super(getLocalStorageWithFallback());\n }\n}\n\nexport { DefaultStorage };\n//# sourceMappingURL=DefaultStorage.mjs.map\n","import { KeyValueStorage } from './KeyValueStorage.mjs';\nimport { getSessionStorageWithFallback } from './utils.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass SessionStorage extends KeyValueStorage {\n constructor() {\n super(getSessionStorageWithFallback());\n }\n}\n\nexport { SessionStorage };\n//# sourceMappingURL=SessionStorage.mjs.map\n","import { PlatformNotSupportedError } from '../errors/PlatformNotSupportedError.mjs';\nimport '../errors/errorHelpers.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass SyncKeyValueStorage {\n constructor(storage) {\n this._storage = storage;\n }\n get storage() {\n if (!this._storage)\n throw new PlatformNotSupportedError();\n return this._storage;\n }\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n setItem(key, value) {\n this.storage.setItem(key, value);\n }\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n getItem(key) {\n return this.storage.getItem(key);\n }\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n removeItem(key) {\n this.storage.removeItem(key);\n }\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n clear() {\n this.storage.clear();\n }\n}\n\nexport { SyncKeyValueStorage };\n//# sourceMappingURL=SyncKeyValueStorage.mjs.map\n","import { SyncKeyValueStorage } from './SyncKeyValueStorage.mjs';\nimport { getSessionStorageWithFallback } from './utils.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @internal\n */\nclass SyncSessionStorage extends SyncKeyValueStorage {\n constructor() {\n super(getSessionStorageWithFallback());\n }\n}\n\nexport { SyncSessionStorage };\n//# sourceMappingURL=SyncSessionStorage.mjs.map\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import JsCookie from 'js-cookie';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass CookieStorage {\n constructor(data = {}) {\n const { path, domain, expires, sameSite, secure } = data;\n this.domain = domain;\n this.path = path || '/';\n this.expires = Object.prototype.hasOwnProperty.call(data, 'expires')\n ? expires\n : 365;\n this.secure = Object.prototype.hasOwnProperty.call(data, 'secure')\n ? secure\n : true;\n if (Object.prototype.hasOwnProperty.call(data, 'sameSite')) {\n if (!sameSite || !['strict', 'lax', 'none'].includes(sameSite)) {\n throw new Error('The sameSite value of cookieStorage must be \"lax\", \"strict\" or \"none\".');\n }\n if (sameSite === 'none' && !this.secure) {\n throw new Error('sameSite = None requires the Secure attribute in latest browser versions.');\n }\n this.sameSite = sameSite;\n }\n }\n async setItem(key, value) {\n JsCookie.set(key, value, this.getData());\n }\n async getItem(key) {\n const item = JsCookie.get(key);\n return item ?? null;\n }\n async removeItem(key) {\n JsCookie.remove(key, this.getData());\n }\n async clear() {\n const cookie = JsCookie.get();\n const promises = Object.keys(cookie).map(key => this.removeItem(key));\n await Promise.all(promises);\n }\n getData() {\n return {\n path: this.path,\n expires: this.expires,\n domain: this.domain,\n secure: this.secure,\n ...(this.sameSite && { sameSite: this.sameSite }),\n };\n }\n}\n\nexport { CookieStorage };\n//# sourceMappingURL=CookieStorage.mjs.map\n","import { DefaultStorage } from './DefaultStorage.mjs';\nimport { InMemoryStorage } from './InMemoryStorage.mjs';\nimport { KeyValueStorage } from './KeyValueStorage.mjs';\nimport { SessionStorage } from './SessionStorage.mjs';\nimport { SyncSessionStorage } from './SyncSessionStorage.mjs';\nexport { CookieStorage } from './CookieStorage.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst defaultStorage = new DefaultStorage();\nconst sessionStorage = new SessionStorage();\nconst syncSessionStorage = new SyncSessionStorage();\nconst sharedInMemoryStorage = new KeyValueStorage(new InMemoryStorage());\n\nexport { defaultStorage, sessionStorage, sharedInMemoryStorage, syncSessionStorage };\n//# sourceMappingURL=index.mjs.map\n","import { MAX_DELAY_MS } from './constants.mjs';\nimport { jitteredBackoff } from './jitteredBackoff.mjs';\nimport { retry } from './retry.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * @private\n * Internal use of Amplify only\n */\nconst jitteredExponentialRetry = (functionToRetry, args, maxDelayMs = MAX_DELAY_MS, onTerminate) => retry(functionToRetry, args, jitteredBackoff(maxDelayMs), onTerminate);\n\nexport { jitteredExponentialRetry };\n//# sourceMappingURL=jitteredExponentialRetry.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * returns in-flight promise if there is one\n *\n * @param asyncFunction - asyncFunction to be deduped.\n * @returns - the return type of the callback\n */\nconst deDupeAsyncFunction = (asyncFunction) => {\n let inflightPromise;\n return async (...args) => {\n if (inflightPromise)\n return inflightPromise;\n inflightPromise = new Promise((resolve, reject) => {\n asyncFunction(...args)\n .then(result => {\n resolve(result);\n })\n .catch(error => {\n reject(error);\n })\n .finally(() => {\n inflightPromise = undefined;\n });\n });\n return inflightPromise;\n };\n};\n\nexport { deDupeAsyncFunction };\n//# sourceMappingURL=deDupeAsyncFunction.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction isTokenExpired({ expiresAt, clockDrift, tolerance = 5000, }) {\n const currentTime = Date.now();\n return currentTime + clockDrift + tolerance > expiresAt;\n}\n\nexport { isTokenExpired };\n//# sourceMappingURL=isTokenExpired.mjs.map\n","import { AmplifyError } from '@aws-amplify/core/internals/utils';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass AuthError extends AmplifyError {\n constructor(params) {\n super(params);\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n this.constructor = AuthError;\n Object.setPrototypeOf(this, AuthError.prototype);\n }\n}\n\nexport { AuthError };\n//# sourceMappingURL=AuthError.mjs.map\n","import { AuthError } from '../../errors/AuthError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction getRegionFromUserPoolId(userPoolId) {\n const region = userPoolId?.split('_')[0];\n if (!userPoolId ||\n userPoolId.indexOf('_') < 0 ||\n !region ||\n typeof region !== 'string')\n throw new AuthError({\n name: 'InvalidUserPoolId',\n message: 'Invalid user pool id provided.',\n });\n return region;\n}\nfunction getRegionFromIdentityPoolId(identityPoolId) {\n if (!identityPoolId || !identityPoolId.includes(':')) {\n throw new AuthError({\n name: 'InvalidIdentityPoolIdException',\n message: 'Invalid identity pool id provided.',\n recoverySuggestion: 'Make sure a valid identityPoolId is given in the config.',\n });\n }\n return identityPoolId.split(':')[0];\n}\n\nexport { getRegionFromIdentityPoolId, getRegionFromUserPoolId };\n//# sourceMappingURL=regionParsers.mjs.map\n","import { AuthError } from './AuthError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst USER_UNAUTHENTICATED_EXCEPTION = 'UserUnAuthenticatedException';\nconst USER_ALREADY_AUTHENTICATED_EXCEPTION = 'UserAlreadyAuthenticatedException';\nconst DEVICE_METADATA_NOT_FOUND_EXCEPTION = 'DeviceMetadataNotFoundException';\nconst AUTO_SIGN_IN_EXCEPTION = 'AutoSignInException';\nconst INVALID_REDIRECT_EXCEPTION = 'InvalidRedirectException';\nconst INVALID_APP_SCHEME_EXCEPTION = 'InvalidAppSchemeException';\nconst INVALID_PREFERRED_REDIRECT_EXCEPTION = 'InvalidPreferredRedirectUrlException';\nconst invalidRedirectException = new AuthError({\n name: INVALID_REDIRECT_EXCEPTION,\n message: 'signInRedirect or signOutRedirect had an invalid format or was not found.',\n recoverySuggestion: 'Please make sure the signIn/Out redirect in your oauth config is valid.',\n});\nconst invalidAppSchemeException = new AuthError({\n name: INVALID_APP_SCHEME_EXCEPTION,\n message: 'A valid non-http app scheme was not found in the config.',\n recoverySuggestion: 'Please make sure a valid custom app scheme is present in the config.',\n});\nconst invalidPreferredRedirectUrlException = new AuthError({\n name: INVALID_PREFERRED_REDIRECT_EXCEPTION,\n message: 'The given preferredRedirectUrl does not match any items in the redirectSignOutUrls array from the config.',\n recoverySuggestion: 'Please make sure a matching preferredRedirectUrl is provided.',\n});\nconst INVALID_ORIGIN_EXCEPTION = 'InvalidOriginException';\nconst invalidOriginException = new AuthError({\n name: INVALID_ORIGIN_EXCEPTION,\n message: 'redirect is coming from a different origin. The oauth flow needs to be initiated from the same origin',\n recoverySuggestion: 'Please call signInWithRedirect from the same origin.',\n});\nconst OAUTH_SIGNOUT_EXCEPTION = 'OAuthSignOutException';\nconst TOKEN_REFRESH_EXCEPTION = 'TokenRefreshException';\nconst UNEXPECTED_SIGN_IN_INTERRUPTION_EXCEPTION = 'UnexpectedSignInInterruptionException';\n\nexport { AUTO_SIGN_IN_EXCEPTION, DEVICE_METADATA_NOT_FOUND_EXCEPTION, INVALID_APP_SCHEME_EXCEPTION, INVALID_ORIGIN_EXCEPTION, INVALID_PREFERRED_REDIRECT_EXCEPTION, INVALID_REDIRECT_EXCEPTION, OAUTH_SIGNOUT_EXCEPTION, TOKEN_REFRESH_EXCEPTION, UNEXPECTED_SIGN_IN_INTERRUPTION_EXCEPTION, USER_ALREADY_AUTHENTICATED_EXCEPTION, USER_UNAUTHENTICATED_EXCEPTION, invalidAppSchemeException, invalidOriginException, invalidPreferredRedirectUrlException, invalidRedirectException };\n//# sourceMappingURL=constants.mjs.map\n","import { AuthError } from '../../../errors/AuthError.mjs';\nimport { TOKEN_REFRESH_EXCEPTION, USER_UNAUTHENTICATED_EXCEPTION, DEVICE_METADATA_NOT_FOUND_EXCEPTION } from '../../../errors/constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction isTypeUserPoolConfig(authConfig) {\n if (authConfig &&\n authConfig.Cognito.userPoolId &&\n authConfig.Cognito.userPoolClientId) {\n return true;\n }\n return false;\n}\nfunction assertAuthTokens(tokens) {\n if (!tokens || !tokens.accessToken) {\n throw new AuthError({\n name: USER_UNAUTHENTICATED_EXCEPTION,\n message: 'User needs to be authenticated to call this API.',\n recoverySuggestion: 'Sign in before calling this API again.',\n });\n }\n}\nfunction assertIdTokenInAuthTokens(tokens) {\n if (!tokens || !tokens.idToken) {\n throw new AuthError({\n name: USER_UNAUTHENTICATED_EXCEPTION,\n message: 'User needs to be authenticated to call this API.',\n recoverySuggestion: 'Sign in before calling this API again.',\n });\n }\n}\nconst oAuthTokenRefreshException = new AuthError({\n name: TOKEN_REFRESH_EXCEPTION,\n message: `Token refresh is not supported when authenticated with the 'implicit grant' (token) oauth flow. \n\tPlease change your oauth configuration to use 'code grant' flow.`,\n recoverySuggestion: `Please logout and change your Amplify configuration to use \"code grant\" flow. \n\tE.g { responseType: 'code' }`,\n});\nconst tokenRefreshException = new AuthError({\n name: USER_UNAUTHENTICATED_EXCEPTION,\n message: 'User needs to be authenticated to call this API.',\n recoverySuggestion: 'Sign in before calling this API again.',\n});\nfunction assertAuthTokensWithRefreshToken(tokens) {\n if (isAuthenticatedWithImplicitOauthFlow(tokens)) {\n throw oAuthTokenRefreshException;\n }\n if (!isAuthenticatedWithRefreshToken(tokens)) {\n throw tokenRefreshException;\n }\n}\nfunction assertDeviceMetadata(deviceMetadata) {\n if (!deviceMetadata ||\n !deviceMetadata.deviceKey ||\n !deviceMetadata.deviceGroupKey ||\n !deviceMetadata.randomPassword) {\n throw new AuthError({\n name: DEVICE_METADATA_NOT_FOUND_EXCEPTION,\n message: 'Either deviceKey, deviceGroupKey or secretPassword were not found during the sign-in process.',\n recoverySuggestion: 'Make sure to not clear storage after calling the signIn API.',\n });\n }\n}\nconst OAuthStorageKeys = {\n inflightOAuth: 'inflightOAuth',\n oauthSignIn: 'oauthSignIn',\n oauthPKCE: 'oauthPKCE',\n oauthState: 'oauthState',\n};\nfunction isAuthenticated(tokens) {\n return tokens?.accessToken || tokens?.idToken;\n}\nfunction isAuthenticatedWithRefreshToken(tokens) {\n return isAuthenticated(tokens) && tokens?.refreshToken;\n}\nfunction isAuthenticatedWithImplicitOauthFlow(tokens) {\n return isAuthenticated(tokens) && !tokens?.refreshToken;\n}\n\nexport { OAuthStorageKeys, assertAuthTokens, assertAuthTokensWithRefreshToken, assertDeviceMetadata, assertIdTokenInAuthTokens, isTypeUserPoolConfig, oAuthTokenRefreshException, tokenRefreshException };\n//# sourceMappingURL=types.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createUserPoolSerializer = (operation) => (input, endpoint) => {\n const headers = getSharedHeaders(operation);\n const body = JSON.stringify(input);\n return buildHttpRpcRequest(endpoint, headers, body);\n};\nconst getSharedHeaders = (operation) => ({\n 'content-type': 'application/x-amz-json-1.1',\n 'x-amz-target': `AWSCognitoIdentityProviderService.${operation}`,\n});\nconst buildHttpRpcRequest = ({ url }, headers, body) => ({\n headers,\n url,\n body,\n method: 'POST',\n});\n\nexport { createUserPoolSerializer };\n//# sourceMappingURL=createUserPoolSerializer.mjs.map\n","import { AmplifyErrorCode } from '@aws-amplify/core/internals/utils';\nimport { AuthError } from '../AuthError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction assertServiceError(error) {\n if (!error ||\n error.name === 'Error' ||\n error instanceof TypeError) {\n throw new AuthError({\n name: AmplifyErrorCode.Unknown,\n message: 'An unknown error has occurred.',\n underlyingError: error,\n });\n }\n}\n\nexport { assertServiceError };\n//# sourceMappingURL=assertServiceError.mjs.map\n","import { parseJsonError, parseJsonBody } from '@aws-amplify/core/internals/aws-client-utils';\nimport { assertServiceError } from '../../../../../../errors/utils/assertServiceError.mjs';\nimport { AuthError } from '../../../../../../errors/AuthError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createUserPoolDeserializer = () => async (response) => {\n if (response.statusCode >= 300) {\n const error = await parseJsonError(response);\n assertServiceError(error);\n throw new AuthError({\n name: error.name,\n message: error.message,\n metadata: error.$metadata,\n });\n }\n return parseJsonBody(response);\n};\n\nexport { createUserPoolDeserializer };\n//# sourceMappingURL=createUserPoolDeserializer.mjs.map\n","import { composeTransferHandler } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { unauthenticatedHandler } from '@aws-amplify/core/internals/aws-client-utils';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * A Cognito Identity-specific middleware that disables caching for all requests.\n */\nconst disableCacheMiddlewareFactory = () => (next, _) => async function disableCacheMiddleware(request) {\n request.headers['cache-control'] = 'no-store';\n return next(request);\n};\n/**\n * A Cognito Identity-specific transfer handler that does NOT sign requests, and\n * disables caching.\n *\n * @internal\n */\nconst cognitoUserPoolTransferHandler = composeTransferHandler(unauthenticatedHandler, [disableCacheMiddlewareFactory]);\n\nexport { cognitoUserPoolTransferHandler };\n//# sourceMappingURL=cognitoUserPoolTransferHandler.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * The service name used to sign requests if the API requires authentication.\n */\nconst COGNITO_IDP_SERVICE_NAME = 'cognito-idp';\n\nexport { COGNITO_IDP_SERVICE_NAME };\n//# sourceMappingURL=constants.mjs.map\n","import { getRetryDecider, parseJsonError, jitteredBackoff } from '@aws-amplify/core/internals/aws-client-utils';\nimport { getAmplifyUserAgent } from '@aws-amplify/core/internals/utils';\nimport { COGNITO_IDP_SERVICE_NAME } from '../../../constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst DEFAULT_SERVICE_CLIENT_API_CONFIG = {\n service: COGNITO_IDP_SERVICE_NAME,\n retryDecider: getRetryDecider(parseJsonError),\n computeDelay: jitteredBackoff,\n userAgentValue: getAmplifyUserAgent(),\n cache: 'no-store',\n};\n\nexport { DEFAULT_SERVICE_CLIENT_API_CONFIG };\n//# sourceMappingURL=constants.mjs.map\n","import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { createUserPoolSerializer } from './shared/serde/createUserPoolSerializer.mjs';\nimport { createUserPoolDeserializer } from './shared/serde/createUserPoolDeserializer.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '@aws-amplify/core/internals/utils';\nimport { cognitoUserPoolTransferHandler } from './shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport { DEFAULT_SERVICE_CLIENT_API_CONFIG } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst createInitiateAuthClient = (config) => composeServiceApi(cognitoUserPoolTransferHandler, createUserPoolSerializer('InitiateAuth'), createUserPoolDeserializer(), {\n ...DEFAULT_SERVICE_CLIENT_API_CONFIG,\n ...config,\n});\n\nexport { createInitiateAuthClient };\n//# sourceMappingURL=createInitiateAuthClient.mjs.map\n","import { getDnsSuffix } from '@aws-amplify/core/internals/aws-client-utils';\nimport { AmplifyUrl } from '@aws-amplify/core/internals/utils';\nimport { COGNITO_IDP_SERVICE_NAME } from './constants.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst cognitoUserPoolEndpointResolver = ({ region, }) => ({\n url: new AmplifyUrl(`https://${COGNITO_IDP_SERVICE_NAME}.${region}.${getDnsSuffix(region)}`),\n});\n\nexport { cognitoUserPoolEndpointResolver };\n//# sourceMappingURL=cognitoUserPoolEndpointResolver.mjs.map\n","import { AmplifyUrl } from '@aws-amplify/core/internals/utils';\nimport { cognitoUserPoolEndpointResolver } from '../../../foundation/cognitoUserPoolEndpointResolver.mjs';\n\nconst createCognitoUserPoolEndpointResolver = ({ endpointOverride }) => (input) => {\n if (endpointOverride) {\n return { url: new AmplifyUrl(endpointOverride) };\n }\n return cognitoUserPoolEndpointResolver(input);\n};\n\nexport { createCognitoUserPoolEndpointResolver };\n//# sourceMappingURL=createCognitoUserPoolEndpointResolver.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction getUserContextData({ username, userPoolId, userPoolClientId, }) {\n if (typeof window === 'undefined') {\n return undefined;\n }\n const amazonCognitoAdvancedSecurityData = window\n .AmazonCognitoAdvancedSecurityData;\n if (typeof amazonCognitoAdvancedSecurityData === 'undefined') {\n return undefined;\n }\n const advancedSecurityData = amazonCognitoAdvancedSecurityData.getData(username, userPoolId, userPoolClientId);\n if (advancedSecurityData) {\n const userContextData = {\n EncodedData: advancedSecurityData,\n };\n return userContextData;\n }\n return {};\n}\n\nexport { getUserContextData };\n//# sourceMappingURL=userContextData.mjs.map\n","import { deDupeAsyncFunction, assertTokenProviderConfig, decodeJWT } from '@aws-amplify/core/internals/utils';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { assertAuthTokensWithRefreshToken } from './types.mjs';\nimport { AuthError } from '../../../errors/AuthError.mjs';\nimport { createInitiateAuthClient } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider/createInitiateAuthClient.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils/composers';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/shared/handler/cognitoUserPoolTransferHandler.mjs';\nimport '@aws-amplify/core/internals/aws-client-utils';\nimport '../../../foundation/factories/serviceClients/cognitoIdentityProvider/constants.mjs';\nimport '../../../common/AuthErrorStrings.mjs';\nimport '../../../errors/types/validation.mjs';\nimport '../types/errors.mjs';\nimport { createCognitoUserPoolEndpointResolver } from '../factories/createCognitoUserPoolEndpointResolver.mjs';\nimport { getUserContextData } from './userContextData.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst refreshAuthTokensFunction = async ({ tokens, authConfig, username, }) => {\n assertTokenProviderConfig(authConfig?.Cognito);\n const { userPoolId, userPoolClientId, userPoolEndpoint } = authConfig.Cognito;\n const region = getRegionFromUserPoolId(userPoolId);\n assertAuthTokensWithRefreshToken(tokens);\n const refreshTokenString = tokens.refreshToken;\n const AuthParameters = {\n REFRESH_TOKEN: refreshTokenString,\n };\n if (tokens.deviceMetadata?.deviceKey) {\n AuthParameters.DEVICE_KEY = tokens.deviceMetadata.deviceKey;\n }\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const initiateAuth = createInitiateAuthClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const { AuthenticationResult } = await initiateAuth({ region }, {\n ClientId: userPoolClientId,\n AuthFlow: 'REFRESH_TOKEN_AUTH',\n AuthParameters,\n UserContextData,\n });\n const accessToken = decodeJWT(AuthenticationResult?.AccessToken ?? '');\n const idToken = AuthenticationResult?.IdToken\n ? decodeJWT(AuthenticationResult.IdToken)\n : undefined;\n const { iat } = accessToken.payload;\n // This should never happen. If it does, it's a bug from the service.\n if (!iat) {\n throw new AuthError({\n name: 'iatNotFoundException',\n message: 'iat not found in access token',\n });\n }\n const clockDrift = iat * 1000 - new Date().getTime();\n return {\n accessToken,\n idToken,\n clockDrift,\n refreshToken: refreshTokenString,\n username,\n };\n};\nconst refreshAuthTokens = deDupeAsyncFunction(refreshAuthTokensFunction);\nconst refreshAuthTokensWithoutDedupe = refreshAuthTokensFunction;\n\nexport { refreshAuthTokens, refreshAuthTokensWithoutDedupe };\n//# sourceMappingURL=refreshAuthTokens.mjs.map\n","const AuthTokenStorageKeys = {\n accessToken: 'accessToken',\n idToken: 'idToken',\n oidcProvider: 'oidcProvider',\n clockDrift: 'clockDrift',\n refreshToken: 'refreshToken',\n deviceKey: 'deviceKey',\n randomPasswordKey: 'randomPasswordKey',\n deviceGroupKey: 'deviceGroupKey',\n signInDetails: 'signInDetails',\n oauthMetadata: 'oauthMetadata',\n};\n\nexport { AuthTokenStorageKeys };\n//# sourceMappingURL=types.mjs.map\n","import { createAssertionFunction } from '@aws-amplify/core/internals/utils';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar TokenProviderErrorCode;\n(function (TokenProviderErrorCode) {\n TokenProviderErrorCode[\"InvalidAuthTokens\"] = \"InvalidAuthTokens\";\n})(TokenProviderErrorCode || (TokenProviderErrorCode = {}));\nconst tokenValidationErrorMap = {\n [TokenProviderErrorCode.InvalidAuthTokens]: {\n message: 'Invalid tokens.',\n recoverySuggestion: 'Make sure the tokens are valid.',\n },\n};\nconst assert = createAssertionFunction(tokenValidationErrorMap);\n\nexport { TokenProviderErrorCode, assert };\n//# sourceMappingURL=errorHelpers.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst AUTH_KEY_PREFIX = 'CognitoIdentityServiceProvider';\n\nexport { AUTH_KEY_PREFIX };\n//# sourceMappingURL=constants.mjs.map\n","import { decodeJWT, assertTokenProviderConfig } from '@aws-amplify/core/internals/utils';\nimport { AuthError } from '../../../errors/AuthError.mjs';\nimport { AuthTokenStorageKeys } from './types.mjs';\nimport { assert, TokenProviderErrorCode } from './errorHelpers.mjs';\nimport { AUTH_KEY_PREFIX } from './constants.mjs';\n\nclass DefaultTokenStore {\n getKeyValueStorage() {\n if (!this.keyValueStorage) {\n throw new AuthError({\n name: 'KeyValueStorageNotFoundException',\n message: 'KeyValueStorage was not found in TokenStore',\n });\n }\n return this.keyValueStorage;\n }\n setKeyValueStorage(keyValueStorage) {\n this.keyValueStorage = keyValueStorage;\n }\n setAuthConfig(authConfig) {\n this.authConfig = authConfig;\n }\n async loadTokens() {\n // TODO(v6): migration logic should be here\n // Reading V5 tokens old format\n try {\n const authKeys = await this.getAuthKeys();\n const accessTokenString = await this.getKeyValueStorage().getItem(authKeys.accessToken);\n if (!accessTokenString) {\n throw new AuthError({\n name: 'NoSessionFoundException',\n message: 'Auth session was not found. Make sure to call signIn.',\n });\n }\n const accessToken = decodeJWT(accessTokenString);\n const itString = await this.getKeyValueStorage().getItem(authKeys.idToken);\n const idToken = itString ? decodeJWT(itString) : undefined;\n const refreshToken = (await this.getKeyValueStorage().getItem(authKeys.refreshToken)) ??\n undefined;\n const clockDriftString = (await this.getKeyValueStorage().getItem(authKeys.clockDrift)) ?? '0';\n const clockDrift = Number.parseInt(clockDriftString);\n const signInDetails = await this.getKeyValueStorage().getItem(authKeys.signInDetails);\n const tokens = {\n accessToken,\n idToken,\n refreshToken,\n deviceMetadata: (await this.getDeviceMetadata()) ?? undefined,\n clockDrift,\n username: await this.getLastAuthUser(),\n };\n if (signInDetails) {\n tokens.signInDetails = JSON.parse(signInDetails);\n }\n return tokens;\n }\n catch (err) {\n return null;\n }\n }\n async storeTokens(tokens) {\n assert(tokens !== undefined, TokenProviderErrorCode.InvalidAuthTokens);\n const lastAuthUser = tokens.username;\n await this.getKeyValueStorage().setItem(this.getLastAuthUserKey(), lastAuthUser);\n const authKeys = await this.getAuthKeys();\n await this.getKeyValueStorage().setItem(authKeys.accessToken, tokens.accessToken.toString());\n if (tokens.idToken) {\n await this.getKeyValueStorage().setItem(authKeys.idToken, tokens.idToken.toString());\n }\n else {\n await this.getKeyValueStorage().removeItem(authKeys.idToken);\n }\n if (tokens.refreshToken) {\n await this.getKeyValueStorage().setItem(authKeys.refreshToken, tokens.refreshToken);\n }\n else {\n await this.getKeyValueStorage().removeItem(authKeys.refreshToken);\n }\n if (tokens.deviceMetadata) {\n if (tokens.deviceMetadata.deviceKey) {\n await this.getKeyValueStorage().setItem(authKeys.deviceKey, tokens.deviceMetadata.deviceKey);\n }\n if (tokens.deviceMetadata.deviceGroupKey) {\n await this.getKeyValueStorage().setItem(authKeys.deviceGroupKey, tokens.deviceMetadata.deviceGroupKey);\n }\n await this.getKeyValueStorage().setItem(authKeys.randomPasswordKey, tokens.deviceMetadata.randomPassword);\n }\n if (tokens.signInDetails) {\n await this.getKeyValueStorage().setItem(authKeys.signInDetails, JSON.stringify(tokens.signInDetails));\n }\n else {\n await this.getKeyValueStorage().removeItem(authKeys.signInDetails);\n }\n await this.getKeyValueStorage().setItem(authKeys.clockDrift, `${tokens.clockDrift}`);\n }\n async clearTokens() {\n const authKeys = await this.getAuthKeys();\n // Not calling clear because it can remove data that is not managed by AuthTokenStore\n await Promise.all([\n this.getKeyValueStorage().removeItem(authKeys.accessToken),\n this.getKeyValueStorage().removeItem(authKeys.idToken),\n this.getKeyValueStorage().removeItem(authKeys.clockDrift),\n this.getKeyValueStorage().removeItem(authKeys.refreshToken),\n this.getKeyValueStorage().removeItem(authKeys.signInDetails),\n this.getKeyValueStorage().removeItem(this.getLastAuthUserKey()),\n this.getKeyValueStorage().removeItem(authKeys.oauthMetadata),\n ]);\n }\n async getDeviceMetadata(username) {\n const authKeys = await this.getAuthKeys(username);\n const deviceKey = await this.getKeyValueStorage().getItem(authKeys.deviceKey);\n const deviceGroupKey = await this.getKeyValueStorage().getItem(authKeys.deviceGroupKey);\n const randomPassword = await this.getKeyValueStorage().getItem(authKeys.randomPasswordKey);\n return randomPassword && deviceGroupKey && deviceKey\n ? {\n deviceKey,\n deviceGroupKey,\n randomPassword,\n }\n : null;\n }\n async clearDeviceMetadata(username) {\n const authKeys = await this.getAuthKeys(username);\n await Promise.all([\n this.getKeyValueStorage().removeItem(authKeys.deviceKey),\n this.getKeyValueStorage().removeItem(authKeys.deviceGroupKey),\n this.getKeyValueStorage().removeItem(authKeys.randomPasswordKey),\n ]);\n }\n async getAuthKeys(username) {\n assertTokenProviderConfig(this.authConfig?.Cognito);\n const lastAuthUser = username ?? (await this.getLastAuthUser());\n return createKeysForAuthStorage(AUTH_KEY_PREFIX, `${this.authConfig.Cognito.userPoolClientId}.${lastAuthUser}`);\n }\n getLastAuthUserKey() {\n assertTokenProviderConfig(this.authConfig?.Cognito);\n const identifier = this.authConfig.Cognito.userPoolClientId;\n return `${AUTH_KEY_PREFIX}.${identifier}.LastAuthUser`;\n }\n async getLastAuthUser() {\n const lastAuthUser = (await this.getKeyValueStorage().getItem(this.getLastAuthUserKey())) ??\n 'username';\n return lastAuthUser;\n }\n async setOAuthMetadata(metadata) {\n const { oauthMetadata: oauthMetadataKey } = await this.getAuthKeys();\n await this.getKeyValueStorage().setItem(oauthMetadataKey, JSON.stringify(metadata));\n }\n async getOAuthMetadata() {\n const { oauthMetadata: oauthMetadataKey } = await this.getAuthKeys();\n const oauthMetadata = await this.getKeyValueStorage().getItem(oauthMetadataKey);\n return oauthMetadata && JSON.parse(oauthMetadata);\n }\n}\nconst createKeysForAuthStorage = (provider, identifier) => {\n return getAuthStorageKeys(AuthTokenStorageKeys)(`${provider}`, identifier);\n};\nfunction getAuthStorageKeys(authKeys) {\n const keys = Object.values({ ...authKeys });\n return (prefix, identifier) => keys.reduce((acc, authKey) => ({\n ...acc,\n [authKey]: `${prefix}.${identifier}.${authKey}`,\n }), {});\n}\n\nexport { DefaultTokenStore, createKeysForAuthStorage, getAuthStorageKeys };\n//# sourceMappingURL=TokenStore.mjs.map\n","import { assertTokenProviderConfig } from '@aws-amplify/core/internals/utils';\nimport { getAuthStorageKeys } from '../tokenProvider/TokenStore.mjs';\nimport { OAuthStorageKeys } from './types.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst V5_HOSTED_UI_KEY = 'amplify-signin-with-hostedUI';\nconst name = 'CognitoIdentityServiceProvider';\nclass DefaultOAuthStore {\n constructor(keyValueStorage) {\n this.keyValueStorage = keyValueStorage;\n }\n async clearOAuthInflightData() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n await Promise.all([\n this.keyValueStorage.removeItem(authKeys.inflightOAuth),\n this.keyValueStorage.removeItem(authKeys.oauthPKCE),\n this.keyValueStorage.removeItem(authKeys.oauthState),\n ]);\n }\n async clearOAuthData() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n await this.clearOAuthInflightData();\n await this.keyValueStorage.removeItem(V5_HOSTED_UI_KEY); // remove in case a customer migrated an App from v5 to v6\n return this.keyValueStorage.removeItem(authKeys.oauthSignIn);\n }\n loadOAuthState() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n return this.keyValueStorage.getItem(authKeys.oauthState);\n }\n storeOAuthState(state) {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n return this.keyValueStorage.setItem(authKeys.oauthState, state);\n }\n loadPKCE() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n return this.keyValueStorage.getItem(authKeys.oauthPKCE);\n }\n storePKCE(pkce) {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n return this.keyValueStorage.setItem(authKeys.oauthPKCE, pkce);\n }\n setAuthConfig(authConfigParam) {\n this.cognitoConfig = authConfigParam;\n }\n async loadOAuthInFlight() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n return ((await this.keyValueStorage.getItem(authKeys.inflightOAuth)) === 'true');\n }\n async storeOAuthInFlight(inflight) {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n await this.keyValueStorage.setItem(authKeys.inflightOAuth, `${inflight}`);\n }\n async loadOAuthSignIn() {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n const isLegacyHostedUISignIn = await this.keyValueStorage.getItem(V5_HOSTED_UI_KEY);\n const [isOAuthSignIn, preferPrivateSession] = (await this.keyValueStorage.getItem(authKeys.oauthSignIn))?.split(',') ??\n [];\n return {\n isOAuthSignIn: isOAuthSignIn === 'true' || isLegacyHostedUISignIn === 'true',\n preferPrivateSession: preferPrivateSession === 'true',\n };\n }\n async storeOAuthSignIn(oauthSignIn, preferPrivateSession = false) {\n assertTokenProviderConfig(this.cognitoConfig);\n const authKeys = createKeysForAuthStorage(name, this.cognitoConfig.userPoolClientId);\n await this.keyValueStorage.setItem(authKeys.oauthSignIn, `${oauthSignIn},${preferPrivateSession}`);\n }\n}\nconst createKeysForAuthStorage = (provider, identifier) => {\n return getAuthStorageKeys(OAuthStorageKeys)(provider, identifier);\n};\n\nexport { DefaultOAuthStore };\n//# sourceMappingURL=signInWithRedirectStore.mjs.map\n","import { defaultStorage } from '@aws-amplify/core';\nimport { DefaultOAuthStore } from '../signInWithRedirectStore.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst oAuthStore = new DefaultOAuthStore(defaultStorage);\n\nexport { oAuthStore };\n//# sourceMappingURL=oAuthStore.mjs.map\n","import { Hub } from '@aws-amplify/core';\nimport { isBrowser, assertTokenProviderConfig, isTokenExpired, AMPLIFY_SYMBOL, AmplifyErrorCode } from '@aws-amplify/core/internals/utils';\nimport { assertServiceError } from '../../../errors/utils/assertServiceError.mjs';\nimport { AuthError } from '../../../errors/AuthError.mjs';\nimport { oAuthStore } from '../utils/oauth/oAuthStore.mjs';\nimport { addInflightPromise } from '../utils/oauth/inflightPromise.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass TokenOrchestrator {\n constructor() {\n this.waitForInflightOAuth = isBrowser()\n ? async () => {\n if (!(await oAuthStore.loadOAuthInFlight())) {\n return;\n }\n if (this.inflightPromise) {\n return this.inflightPromise;\n }\n // when there is valid oauth config and there is an inflight oauth flow, try\n // to block async calls that require fetching tokens before the oauth flow completes\n // e.g. getCurrentUser, fetchAuthSession etc.\n this.inflightPromise = new Promise((resolve, _reject) => {\n addInflightPromise(resolve);\n });\n return this.inflightPromise;\n }\n : async () => {\n // no-op for non-browser environments\n };\n }\n setAuthConfig(authConfig) {\n oAuthStore.setAuthConfig(authConfig.Cognito);\n this.authConfig = authConfig;\n }\n setTokenRefresher(tokenRefresher) {\n this.tokenRefresher = tokenRefresher;\n }\n setAuthTokenStore(tokenStore) {\n this.tokenStore = tokenStore;\n }\n getTokenStore() {\n if (!this.tokenStore) {\n throw new AuthError({\n name: 'EmptyTokenStoreException',\n message: 'TokenStore not set',\n });\n }\n return this.tokenStore;\n }\n getTokenRefresher() {\n if (!this.tokenRefresher) {\n throw new AuthError({\n name: 'EmptyTokenRefresherException',\n message: 'TokenRefresher not set',\n });\n }\n return this.tokenRefresher;\n }\n async getTokens(options) {\n let tokens;\n try {\n assertTokenProviderConfig(this.authConfig?.Cognito);\n }\n catch (_err) {\n // Token provider not configured\n return null;\n }\n await this.waitForInflightOAuth();\n this.inflightPromise = undefined;\n tokens = await this.getTokenStore().loadTokens();\n const username = await this.getTokenStore().getLastAuthUser();\n if (tokens === null) {\n return null;\n }\n const idTokenExpired = !!tokens?.idToken &&\n isTokenExpired({\n expiresAt: (tokens.idToken?.payload?.exp ?? 0) * 1000,\n clockDrift: tokens.clockDrift ?? 0,\n });\n const accessTokenExpired = isTokenExpired({\n expiresAt: (tokens.accessToken?.payload?.exp ?? 0) * 1000,\n clockDrift: tokens.clockDrift ?? 0,\n });\n if (options?.forceRefresh || idTokenExpired || accessTokenExpired) {\n tokens = await this.refreshTokens({\n tokens,\n username,\n });\n if (tokens === null) {\n return null;\n }\n }\n return {\n accessToken: tokens?.accessToken,\n idToken: tokens?.idToken,\n signInDetails: tokens?.signInDetails,\n };\n }\n async refreshTokens({ tokens, username, }) {\n try {\n const { signInDetails } = tokens;\n const newTokens = await this.getTokenRefresher()({\n tokens,\n authConfig: this.authConfig,\n username,\n });\n newTokens.signInDetails = signInDetails;\n await this.setTokens({ tokens: newTokens });\n Hub.dispatch('auth', { event: 'tokenRefresh' }, 'Auth', AMPLIFY_SYMBOL);\n return newTokens;\n }\n catch (err) {\n return this.handleErrors(err);\n }\n }\n handleErrors(err) {\n assertServiceError(err);\n if (err.name !== AmplifyErrorCode.NetworkError) {\n // TODO(v6): Check errors on client\n this.clearTokens();\n }\n Hub.dispatch('auth', {\n event: 'tokenRefresh_failure',\n data: { error: err },\n }, 'Auth', AMPLIFY_SYMBOL);\n if (err.name.startsWith('NotAuthorizedException')) {\n return null;\n }\n throw err;\n }\n async setTokens({ tokens }) {\n return this.getTokenStore().storeTokens(tokens);\n }\n async clearTokens() {\n return this.getTokenStore().clearTokens();\n }\n getDeviceMetadata(username) {\n return this.getTokenStore().getDeviceMetadata(username);\n }\n clearDeviceMetadata(username) {\n return this.getTokenStore().clearDeviceMetadata(username);\n }\n setOAuthMetadata(metadata) {\n return this.getTokenStore().setOAuthMetadata(metadata);\n }\n getOAuthMetadata() {\n return this.getTokenStore().getOAuthMetadata();\n }\n}\n\nexport { TokenOrchestrator };\n//# sourceMappingURL=TokenOrchestrator.mjs.map\n","import { defaultStorage } from '@aws-amplify/core';\nimport { refreshAuthTokens } from '../utils/refreshAuthTokens.mjs';\nimport { DefaultTokenStore } from './TokenStore.mjs';\nimport { TokenOrchestrator } from './TokenOrchestrator.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nclass CognitoUserPoolsTokenProvider {\n constructor() {\n this.authTokenStore = new DefaultTokenStore();\n this.authTokenStore.setKeyValueStorage(defaultStorage);\n this.tokenOrchestrator = new TokenOrchestrator();\n this.tokenOrchestrator.setAuthTokenStore(this.authTokenStore);\n this.tokenOrchestrator.setTokenRefresher(refreshAuthTokens);\n }\n getTokens({ forceRefresh } = { forceRefresh: false }) {\n return this.tokenOrchestrator.getTokens({ forceRefresh });\n }\n setKeyValueStorage(keyValueStorage) {\n this.authTokenStore.setKeyValueStorage(keyValueStorage);\n }\n setAuthConfig(authConfig) {\n this.authTokenStore.setAuthConfig(authConfig);\n this.tokenOrchestrator.setAuthConfig(authConfig);\n }\n}\n\nexport { CognitoUserPoolsTokenProvider };\n//# sourceMappingURL=CognitoUserPoolsTokenProvider.mjs.map\n","import { CognitoUserPoolsTokenProvider } from './CognitoUserPoolsTokenProvider.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * The default provider for the JWT access token and ID token issued from the configured Cognito user pool. It manages\n * the refresh and storage of the tokens. It stores the tokens in `window.localStorage` if available, and falls back to\n * in-memory storage if not.\n */\nconst cognitoUserPoolsTokenProvider = new CognitoUserPoolsTokenProvider();\nconst { tokenOrchestrator } = cognitoUserPoolsTokenProvider;\n\nexport { cognitoUserPoolsTokenProvider, tokenOrchestrator };\n//# sourceMappingURL=tokenProvider.mjs.map\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst IdentityIdStorageKeys = {\n identityId: 'identityId',\n};\n\nexport { IdentityIdStorageKeys };\n//# sourceMappingURL=types.mjs.map\n","import { ConsoleLogger } from '@aws-amplify/core';\nimport { assertIdentityPoolIdConfig } from '@aws-amplify/core/internals/utils';\nimport { getAuthStorageKeys } from '../tokenProvider/TokenStore.mjs';\nimport { IdentityIdStorageKeys } from './types.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst logger = new ConsoleLogger('DefaultIdentityIdStore');\nclass DefaultIdentityIdStore {\n setAuthConfig(authConfigParam) {\n assertIdentityPoolIdConfig(authConfigParam.Cognito);\n this.authConfig = authConfigParam;\n this._authKeys = createKeysForAuthStorage('Cognito', authConfigParam.Cognito.identityPoolId);\n }\n constructor(keyValueStorage) {\n this._authKeys = {};\n this._hasGuestIdentityId = false;\n this.keyValueStorage = keyValueStorage;\n }\n async loadIdentityId() {\n assertIdentityPoolIdConfig(this.authConfig?.Cognito);\n try {\n if (this._primaryIdentityId) {\n return {\n id: this._primaryIdentityId,\n type: 'primary',\n };\n }\n else {\n const storedIdentityId = await this.keyValueStorage.getItem(this._authKeys.identityId);\n if (storedIdentityId) {\n this._hasGuestIdentityId = true;\n return {\n id: storedIdentityId,\n type: 'guest',\n };\n }\n return null;\n }\n }\n catch (err) {\n logger.log('Error getting stored IdentityId.', err);\n return null;\n }\n }\n async storeIdentityId(identity) {\n assertIdentityPoolIdConfig(this.authConfig?.Cognito);\n if (identity.type === 'guest') {\n this.keyValueStorage.setItem(this._authKeys.identityId, identity.id);\n // Clear in-memory storage of primary identityId\n this._primaryIdentityId = undefined;\n this._hasGuestIdentityId = true;\n }\n else {\n this._primaryIdentityId = identity.id;\n // Clear locally stored guest id\n if (this._hasGuestIdentityId) {\n this.keyValueStorage.removeItem(this._authKeys.identityId);\n this._hasGuestIdentityId = false;\n }\n }\n }\n async clearIdentityId() {\n this._primaryIdentityId = undefined;\n await this.keyValueStorage.removeItem(this._authKeys.identityId);\n }\n}\nconst createKeysForAuthStorage = (provider, identifier) => {\n return getAuthStorageKeys(IdentityIdStorageKeys)(`com.amplify.${provider}`, identifier);\n};\n\nexport { DefaultIdentityIdStore };\n//# sourceMappingURL=IdentityIdStore.mjs.map\n","import { decodeJWT } from '@aws-amplify/core/internals/utils';\nimport { AuthError } from '../../../errors/AuthError.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nfunction formLoginsMap(idToken) {\n const issuer = decodeJWT(idToken).payload.iss;\n const res = {};\n if (!issuer) {\n throw new AuthError({\n name: 'InvalidIdTokenException',\n message: 'Invalid Idtoken.',\n });\n }\n const domainName = issuer.replace(/(^\\w+:|^)\\/\\//, '');\n res[domainName] = idToken;\n return res;\n}\n\nexport { formLoginsMap };\n//# sourceMappingURL=utils.mjs.map\n","import { getId } from '@aws-amplify/core';\nimport { AuthError } from '../../../errors/AuthError.mjs';\nimport { assertServiceError } from '../../../errors/utils/assertServiceError.mjs';\nimport { getRegionFromIdentityPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { formLoginsMap } from './utils.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Provides a Cognito identityId\n *\n * @param tokens - The AuthTokens received after SignIn\n * @returns string\n * @throws configuration exceptions: `InvalidIdentityPoolIdException`\n * - Auth errors that may arise from misconfiguration.\n * @throws service exceptions: {@link GetIdException }\n */\nasync function cognitoIdentityIdProvider({ tokens, authConfig, identityIdStore, }) {\n identityIdStore.setAuthConfig({ Cognito: authConfig });\n // will return null only if there is no identityId cached or if there is an error retrieving it\n const identityId = await identityIdStore.loadIdentityId();\n if (identityId) {\n return identityId.id;\n }\n const logins = tokens?.idToken\n ? formLoginsMap(tokens.idToken.toString())\n : {};\n const generatedIdentityId = await generateIdentityId(logins, authConfig);\n // Store generated identityId\n identityIdStore.storeIdentityId({\n id: generatedIdentityId,\n type: tokens ? 'primary' : 'guest',\n });\n return generatedIdentityId;\n}\nasync function generateIdentityId(logins, authConfig) {\n const identityPoolId = authConfig?.identityPoolId;\n const region = getRegionFromIdentityPoolId(identityPoolId);\n // IdentityId is absent so get it using IdentityPoolId with Cognito's GetId API\n let idResult;\n // for a first-time user, this will return a brand new identity\n // for a returning user, this will retrieve the previous identity assocaited with the logins\n try {\n idResult = (await getId({\n region,\n }, {\n IdentityPoolId: identityPoolId,\n Logins: logins,\n })).IdentityId;\n }\n catch (e) {\n assertServiceError(e);\n throw new AuthError(e);\n }\n if (!idResult) {\n throw new AuthError({\n name: 'GetIdResponseException',\n message: 'Received undefined response from getId operation',\n recoverySuggestion: 'Make sure to pass a valid identityPoolId in the configuration.',\n });\n }\n return idResult;\n}\n\nexport { cognitoIdentityIdProvider };\n//# sourceMappingURL=IdentityIdProvider.mjs.map\n","import { ConsoleLogger, getCredentialsForIdentity } from '@aws-amplify/core';\nimport { assertIdentityPoolIdConfig } from '@aws-amplify/core/internals/utils';\nimport { AuthError } from '../../../errors/AuthError.mjs';\nimport { assertServiceError } from '../../../errors/utils/assertServiceError.mjs';\nimport { getRegionFromIdentityPoolId } from '../../../foundation/parsers/regionParsers.mjs';\nimport { assertIdTokenInAuthTokens } from '../utils/types.mjs';\nimport { cognitoIdentityIdProvider } from './IdentityIdProvider.mjs';\nimport { formLoginsMap } from './utils.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst logger = new ConsoleLogger('CognitoCredentialsProvider');\nconst CREDENTIALS_TTL = 50 * 60 * 1000; // 50 min, can be modified on config if required in the future\nclass CognitoAWSCredentialsAndIdentityIdProvider {\n constructor(identityIdStore) {\n this._nextCredentialsRefresh = 0;\n this._identityIdStore = identityIdStore;\n }\n async clearCredentialsAndIdentityId() {\n logger.debug('Clearing out credentials and identityId');\n this._credentialsAndIdentityId = undefined;\n await this._identityIdStore.clearIdentityId();\n }\n async clearCredentials() {\n logger.debug('Clearing out in-memory credentials');\n this._credentialsAndIdentityId = undefined;\n }\n async getCredentialsAndIdentityId(getCredentialsOptions) {\n const isAuthenticated = getCredentialsOptions.authenticated;\n const { tokens } = getCredentialsOptions;\n const { authConfig } = getCredentialsOptions;\n try {\n assertIdentityPoolIdConfig(authConfig?.Cognito);\n }\n catch {\n // No identity pool configured, skipping\n return;\n }\n if (!isAuthenticated && !authConfig.Cognito.allowGuestAccess) {\n // TODO(V6): return partial result like Native platforms\n return;\n }\n const { forceRefresh } = getCredentialsOptions;\n const tokenHasChanged = this.hasTokenChanged(tokens);\n const identityId = await cognitoIdentityIdProvider({\n tokens,\n authConfig: authConfig.Cognito,\n identityIdStore: this._identityIdStore,\n });\n // Clear cached credentials when forceRefresh is true OR the cache token has changed\n if (forceRefresh || tokenHasChanged) {\n this.clearCredentials();\n }\n if (!isAuthenticated) {\n return this.getGuestCredentials(identityId, authConfig.Cognito);\n }\n else {\n assertIdTokenInAuthTokens(tokens);\n return this.credsForOIDCTokens(authConfig.Cognito, tokens, identityId);\n }\n }\n async getGuestCredentials(identityId, authConfig) {\n // Return existing in-memory cached credentials only if it exists, is not past it's lifetime and is unauthenticated credentials\n if (this._credentialsAndIdentityId &&\n !this.isPastTTL() &&\n this._credentialsAndIdentityId.isAuthenticatedCreds === false) {\n logger.info('returning stored credentials as they neither past TTL nor expired.');\n return this._credentialsAndIdentityId;\n }\n // Clear to discard if any authenticated credentials are set and start with a clean slate\n this.clearCredentials();\n const region = getRegionFromIdentityPoolId(authConfig.identityPoolId);\n // use identityId to obtain guest credentials\n // save credentials in-memory\n // No logins params should be passed for guest creds:\n // https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html\n let clientResult;\n try {\n clientResult = await getCredentialsForIdentity({ region }, {\n IdentityId: identityId,\n });\n }\n catch (e) {\n assertServiceError(e);\n throw new AuthError(e);\n }\n if (clientResult?.Credentials?.AccessKeyId &&\n clientResult?.Credentials?.SecretKey) {\n this._nextCredentialsRefresh = new Date().getTime() + CREDENTIALS_TTL;\n const res = {\n credentials: {\n accessKeyId: clientResult.Credentials.AccessKeyId,\n secretAccessKey: clientResult.Credentials.SecretKey,\n sessionToken: clientResult.Credentials.SessionToken,\n expiration: clientResult.Credentials.Expiration,\n },\n identityId,\n };\n if (clientResult.IdentityId) {\n res.identityId = clientResult.IdentityId;\n this._identityIdStore.storeIdentityId({\n id: clientResult.IdentityId,\n type: 'guest',\n });\n }\n this._credentialsAndIdentityId = {\n ...res,\n isAuthenticatedCreds: false,\n };\n return res;\n }\n else {\n throw new AuthError({\n name: 'CredentialsNotFoundException',\n message: `Cognito did not respond with either Credentials, AccessKeyId or SecretKey.`,\n });\n }\n }\n async credsForOIDCTokens(authConfig, authTokens, identityId) {\n if (this._credentialsAndIdentityId &&\n !this.isPastTTL() &&\n this._credentialsAndIdentityId.isAuthenticatedCreds === true) {\n logger.debug('returning stored credentials as they neither past TTL nor expired.');\n return this._credentialsAndIdentityId;\n }\n // Clear to discard if any unauthenticated credentials are set and start with a clean slate\n this.clearCredentials();\n const logins = authTokens.idToken\n ? formLoginsMap(authTokens.idToken.toString())\n : {};\n const region = getRegionFromIdentityPoolId(authConfig.identityPoolId);\n let clientResult;\n try {\n clientResult = await getCredentialsForIdentity({ region }, {\n IdentityId: identityId,\n Logins: logins,\n });\n }\n catch (e) {\n assertServiceError(e);\n throw new AuthError(e);\n }\n if (clientResult?.Credentials?.AccessKeyId &&\n clientResult?.Credentials?.SecretKey) {\n this._nextCredentialsRefresh = new Date().getTime() + CREDENTIALS_TTL;\n const res = {\n credentials: {\n accessKeyId: clientResult.Credentials.AccessKeyId,\n secretAccessKey: clientResult.Credentials.SecretKey,\n sessionToken: clientResult.Credentials.SessionToken,\n expiration: clientResult.Credentials.Expiration,\n },\n identityId,\n };\n if (clientResult.IdentityId) {\n res.identityId = clientResult.IdentityId;\n // note: the following call removes guest identityId from the persistent store (localStorage)\n this._identityIdStore.storeIdentityId({\n id: clientResult.IdentityId,\n type: 'primary',\n });\n }\n // Store the credentials in-memory along with the expiration\n this._credentialsAndIdentityId = {\n ...res,\n isAuthenticatedCreds: true,\n associatedIdToken: authTokens.idToken?.toString(),\n };\n return res;\n }\n else {\n throw new AuthError({\n name: 'CredentialsException',\n message: `Cognito did not respond with either Credentials, AccessKeyId or SecretKey.`,\n });\n }\n }\n isPastTTL() {\n return this._nextCredentialsRefresh === undefined\n ? true\n : this._nextCredentialsRefresh <= Date.now();\n }\n hasTokenChanged(tokens) {\n return (!!tokens &&\n !!this._credentialsAndIdentityId?.associatedIdToken &&\n tokens.idToken?.toString() !==\n this._credentialsAndIdentityId.associatedIdToken);\n }\n}\n\nexport { CognitoAWSCredentialsAndIdentityIdProvider };\n//# sourceMappingURL=credentialsProvider.mjs.map\n","import { defaultStorage } from '@aws-amplify/core';\nimport { DefaultIdentityIdStore } from './IdentityIdStore.mjs';\nimport { CognitoAWSCredentialsAndIdentityIdProvider } from './credentialsProvider.mjs';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Cognito specific implmentation of the CredentialsProvider interface\n * that manages setting and getting of AWS Credentials.\n *\n * @throws configuration expections: `InvalidIdentityPoolIdException`\n * - Auth errors that may arise from misconfiguration.\n * @throws service expections: {@link GetCredentialsForIdentityException}, {@link GetIdException}\n *\n */\nconst cognitoCredentialsProvider = new CognitoAWSCredentialsAndIdentityIdProvider(new DefaultIdentityIdStore(defaultStorage));\n\nexport { CognitoAWSCredentialsAndIdentityIdProvider, DefaultIdentityIdStore, cognitoCredentialsProvider };\n//# sourceMappingURL=index.mjs.map\n","import { Amplify, CookieStorage, defaultStorage } from '@aws-amplify/core';\nimport { parseAmplifyConfig } from '@aws-amplify/core/internals/utils';\nimport { cognitoUserPoolsTokenProvider, cognitoCredentialsProvider } from '@aws-amplify/auth/cognito';\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst DefaultAmplify = {\n /**\n * Configures Amplify with the {@link resourceConfig} and {@link libraryOptions}.\n *\n * @param resourceConfig The {@link ResourcesConfig} object that is typically imported from the\n * `amplifyconfiguration.json` file. It can also be an object literal created inline when calling `Amplify.configure`.\n * @param libraryOptions The {@link LibraryOptions} additional options for the library.\n *\n * @example\n * import config from './amplifyconfiguration.json';\n *\n * Amplify.configure(config);\n */\n configure(resourceConfig, libraryOptions) {\n const resolvedResourceConfig = parseAmplifyConfig(resourceConfig);\n // If no Auth config is provided, no special handling will be required, configure as is.\n // Otherwise, we can assume an Auth config is provided from here on.\n if (!resolvedResourceConfig.Auth) {\n Amplify.configure(resolvedResourceConfig, libraryOptions);\n return;\n }\n // If Auth options are provided, always just configure as is.\n // Otherwise, we can assume no Auth libraryOptions were provided from here on.\n if (libraryOptions?.Auth) {\n Amplify.configure(resolvedResourceConfig, libraryOptions);\n return;\n }\n // If no Auth libraryOptions were previously configured, then always add default providers.\n if (!Amplify.libraryOptions.Auth) {\n cognitoUserPoolsTokenProvider.setAuthConfig(resolvedResourceConfig.Auth);\n cognitoUserPoolsTokenProvider.setKeyValueStorage(\n // TODO: allow configure with a public interface\n libraryOptions?.ssr\n ? new CookieStorage({ sameSite: 'lax' })\n : defaultStorage);\n Amplify.configure(resolvedResourceConfig, {\n ...libraryOptions,\n Auth: {\n tokenProvider: cognitoUserPoolsTokenProvider,\n credentialsProvider: cognitoCredentialsProvider,\n },\n });\n return;\n }\n // At this point, Auth libraryOptions would have been previously configured and no overriding\n // Auth options were given, so we should preserve the currently configured Auth libraryOptions.\n if (libraryOptions) {\n // If ssr is provided through libraryOptions, we should respect the intentional reconfiguration.\n if (libraryOptions.ssr !== undefined) {\n cognitoUserPoolsTokenProvider.setKeyValueStorage(\n // TODO: allow configure with a public interface\n libraryOptions.ssr\n ? new CookieStorage({ sameSite: 'lax' })\n : defaultStorage);\n }\n Amplify.configure(resolvedResourceConfig, {\n Auth: Amplify.libraryOptions.Auth,\n ...libraryOptions,\n });\n return;\n }\n // Finally, if there were no libraryOptions given at all, we should simply not touch the currently\n // configured libraryOptions.\n Amplify.configure(resolvedResourceConfig);\n },\n /**\n * Returns the {@link ResourcesConfig} object passed in as the `resourceConfig` parameter when calling\n * `Amplify.configure`.\n *\n * @returns An {@link ResourcesConfig} object.\n */\n getConfig() {\n return Amplify.getConfig();\n },\n};\n\nexport { DefaultAmplify };\n//# sourceMappingURL=initSingleton.mjs.map\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n \"area\": true,\n \"base\": true,\n \"br\": true,\n \"col\": true,\n \"embed\": true,\n \"hr\": true,\n \"img\": true,\n \"input\": true,\n \"link\": true,\n \"meta\": true,\n \"param\": true,\n \"source\": true,\n \"track\": true,\n \"wbr\": true\n};\n","import e from\"void-elements\";var t=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function n(n){var r={type:\"tag\",name:\"\",voidElement:!1,attrs:{},children:[]},i=n.match(/<\\/?([^\\s]+?)[/\\s>]/);if(i&&(r.name=i[1],(e[i[1]]||\"/\"===n.charAt(n.length-2))&&(r.voidElement=!0),r.name.startsWith(\"!--\"))){var s=n.indexOf(\"--\\x3e\");return{type:\"comment\",comment:-1!==s?n.slice(4,s):\"\"}}for(var a=new RegExp(t),c=null;null!==(c=a.exec(n));)if(c[0].trim())if(c[1]){var o=c[1].trim(),l=[o,\"\"];o.indexOf(\"=\")>-1&&(l=o.split(\"=\")),r.attrs[l[0]]=l[1],a.lastIndex--}else c[2]&&(r.attrs[c[2]]=c[3].trim().substring(1,c[3].length-1));return r}var r=/<[a-zA-Z0-9\\-\\!\\/](?:\"[^\"]*\"|'[^']*'|[^'\">])*>/g,i=/^\\s*$/,s=Object.create(null);function a(e,t){switch(t.type){case\"text\":return e+t.content;case\"tag\":return e+=\"<\"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'=\"'+e[n]+'\"');return t.length?\" \"+t.join(\" \"):\"\"}(t.attrs):\"\")+(t.voidElement?\"/>\":\">\"),t.voidElement?e:e+t.children.reduce(a,\"\")+\"\";case\"comment\":return e+\"\\x3c!--\"+t.comment+\"--\\x3e\"}}var c={parse:function(e,t){t||(t={}),t.components||(t.components=s);var a,c=[],o=[],l=-1,m=!1;if(0!==e.indexOf(\"<\")){var u=e.indexOf(\"<\");c.push({type:\"text\",content:-1===u?e:e.substring(0,u)})}return e.replace(r,function(r,s){if(m){if(r!==\"\")return;m=!1}var u,f=\"/\"!==r.charAt(1),h=r.startsWith(\"\\x3c!--\"),p=s+r.length,d=e.charAt(p);if(h){var v=n(r);return l<0?(c.push(v),c):((u=o[l]).children.push(v),c)}if(f&&(l++,\"tag\"===(a=n(r)).type&&t.components[a.name]&&(a.type=\"component\",m=!0),a.voidElement||m||!d||\"<\"===d||a.children.push({type:\"text\",content:e.slice(p,e.indexOf(\"<\",p))}),0===l&&c.push(a),(u=o[l-1])&&u.children.push(a),o[l]=a),(!f||a.voidElement)&&(l>-1&&(a.voidElement||a.name===r.slice(2,-1))&&(l--,a=-1===l?c:o[l]),!m&&\"<\"!==d&&d)){u=-1===l?c:o[l].children;var x=e.indexOf(\"<\",p),g=e.slice(p,-1===x?void 0:x);i.test(g)&&(g=\" \"),(x>-1&&l+u.length>=0||\" \"!==g)&&u.push({type:\"text\",content:g})}}),c},stringify:function(e){return e.reduce(function(e,t){return e+a(\"\",t)},\"\")}};export default c;\n//# sourceMappingURL=html-parse-stringify.module.js.map\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n?.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { Fragment, isValidElement, cloneElement, createElement, Children } from 'react';\nimport HTML from 'html-parse-stringify';\nimport { isObject, isString, warn, warnOnce } from './utils.js';\nimport { getDefaults } from './defaults.js';\nimport { getI18n } from './i18nInstance.js';\nconst hasChildren = (node, checkLength) => {\n if (!node) return false;\n const base = node.props?.children ?? node.children;\n if (checkLength) return base.length > 0;\n return !!base;\n};\nconst getChildren = node => {\n if (!node) return [];\n const children = node.props?.children ?? node.children;\n return node.props?.i18nIsDynamicList ? getAsArray(children) : children;\n};\nconst hasValidReactChildren = children => Array.isArray(children) && children.every(isValidElement);\nconst getAsArray = data => Array.isArray(data) ? data : [data];\nconst mergeProps = (source, target) => {\n const newTarget = {\n ...target\n };\n newTarget.props = Object.assign(source.props, target.props);\n return newTarget;\n};\nexport const nodesToString = (children, i18nOptions, i18n, i18nKey) => {\n if (!children) return '';\n let stringNode = '';\n const childrenArray = getAsArray(children);\n const keepArray = i18nOptions?.transSupportBasicHtmlNodes ? i18nOptions.transKeepBasicHtmlNodesFor ?? [] : [];\n childrenArray.forEach((child, childIndex) => {\n if (isString(child)) {\n stringNode += `${child}`;\n return;\n }\n if (isValidElement(child)) {\n const {\n props,\n type\n } = child;\n const childPropsCount = Object.keys(props).length;\n const shouldKeepChild = keepArray.indexOf(type) > -1;\n const childChildren = props.children;\n if (!childChildren && shouldKeepChild && !childPropsCount) {\n stringNode += `<${type}/>`;\n return;\n }\n if (!childChildren && (!shouldKeepChild || childPropsCount) || props.i18nIsDynamicList) {\n stringNode += `<${childIndex}>`;\n return;\n }\n if (shouldKeepChild && childPropsCount === 1 && isString(childChildren)) {\n stringNode += `<${type}>${childChildren}`;\n return;\n }\n const content = nodesToString(childChildren, i18nOptions, i18n, i18nKey);\n stringNode += `<${childIndex}>${content}`;\n return;\n }\n if (child === null) {\n warn(i18n, 'TRANS_NULL_VALUE', `Passed in a null value as child`, {\n i18nKey\n });\n return;\n }\n if (isObject(child)) {\n const {\n format,\n ...clone\n } = child;\n const keys = Object.keys(clone);\n if (keys.length === 1) {\n const value = format ? `${keys[0]}, ${format}` : keys[0];\n stringNode += `{{${value}}}`;\n return;\n }\n warn(i18n, 'TRANS_INVALID_OBJ', `Invalid child - Object should only have keys {{ value, format }} (format is optional).`, {\n i18nKey,\n child\n });\n return;\n }\n warn(i18n, 'TRANS_INVALID_VAR', `Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`, {\n i18nKey,\n child\n });\n });\n return stringNode;\n};\nconst renderNodes = (children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) => {\n if (targetString === '') return [];\n const keepArray = i18nOptions.transKeepBasicHtmlNodesFor || [];\n const emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.map(keep => `<${keep}`).join('|')).test(targetString);\n if (!children && !emptyChildrenButNeedsHandling && !shouldUnescape) return [targetString];\n const data = {};\n const getData = childs => {\n const childrenArray = getAsArray(childs);\n childrenArray.forEach(child => {\n if (isString(child)) return;\n if (hasChildren(child)) getData(getChildren(child));else if (isObject(child) && !isValidElement(child)) Object.assign(data, child);\n });\n };\n getData(children);\n const ast = HTML.parse(`<0>${targetString}`);\n const opts = {\n ...data,\n ...combinedTOpts\n };\n const renderInner = (child, node, rootReactNode) => {\n const childs = getChildren(child);\n const mappedChildren = mapAST(childs, node.children, rootReactNode);\n return hasValidReactChildren(childs) && mappedChildren.length === 0 || child.props?.i18nIsDynamicList ? childs : mappedChildren;\n };\n const pushTranslatedJSX = (child, inner, mem, i, isVoid) => {\n if (child.dummy) {\n child.children = inner;\n mem.push(cloneElement(child, {\n key: i\n }, isVoid ? undefined : inner));\n } else {\n mem.push(...Children.map([child], c => {\n const props = {\n ...c.props\n };\n delete props.i18nIsDynamicList;\n return createElement(c.type, {\n ...props,\n key: i,\n ref: c.ref\n }, isVoid ? null : inner);\n }));\n }\n };\n const mapAST = (reactNode, astNode, rootReactNode) => {\n const reactNodes = getAsArray(reactNode);\n const astNodes = getAsArray(astNode);\n return astNodes.reduce((mem, node, i) => {\n const translationContent = node.children?.[0]?.content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language);\n if (node.type === 'tag') {\n let tmp = reactNodes[parseInt(node.name, 10)];\n if (rootReactNode.length === 1 && !tmp) tmp = rootReactNode[0][node.name];\n if (!tmp) tmp = {};\n const child = Object.keys(node.attrs).length !== 0 ? mergeProps({\n props: node.attrs\n }, tmp) : tmp;\n const isElement = isValidElement(child);\n const isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement;\n const isEmptyTransWithHTML = emptyChildrenButNeedsHandling && isObject(child) && child.dummy && !isElement;\n const isKnownComponent = isObject(children) && Object.hasOwnProperty.call(children, node.name);\n if (isString(child)) {\n const value = i18n.services.interpolator.interpolate(child, opts, i18n.language);\n mem.push(value);\n } else if (hasChildren(child) || isValidTranslationWithChildren) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (isEmptyTransWithHTML) {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i);\n } else if (Number.isNaN(parseFloat(node.name))) {\n if (isKnownComponent) {\n const inner = renderInner(child, node, rootReactNode);\n pushTranslatedJSX(child, inner, mem, i, node.voidElement);\n } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) {\n if (node.voidElement) {\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }));\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(createElement(node.name, {\n key: `${node.name}-${i}`\n }, inner));\n }\n } else if (node.voidElement) {\n mem.push(`<${node.name} />`);\n } else {\n const inner = mapAST(reactNodes, node.children, rootReactNode);\n mem.push(`<${node.name}>${inner}`);\n }\n } else if (isObject(child) && !isElement) {\n const content = node.children[0] ? translationContent : null;\n if (content) mem.push(content);\n } else {\n pushTranslatedJSX(child, translationContent, mem, i, node.children.length !== 1 || !translationContent);\n }\n } else if (node.type === 'text') {\n const wrapTextNodes = i18nOptions.transWrapTextNodes;\n const content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language);\n if (wrapTextNodes) {\n mem.push(createElement(wrapTextNodes, {\n key: `${node.name}-${i}`\n }, content));\n } else {\n mem.push(content);\n }\n }\n return mem;\n }, []);\n };\n const result = mapAST([{\n dummy: true,\n children: children || []\n }], ast, getAsArray(children || []));\n return getChildren(result[0]);\n};\nconst fixComponentProps = (component, index, translation) => {\n const componentKey = component.key || index;\n const comp = cloneElement(component, {\n key: componentKey\n });\n if (!comp.props || !comp.props.children || translation.indexOf(`${index}/>`) < 0 && translation.indexOf(`${index} />`) < 0) {\n return comp;\n }\n function Componentized() {\n return createElement(Fragment, null, comp);\n }\n return createElement(Componentized, {\n key: componentKey\n });\n};\nconst generateArrayComponents = (components, translation) => components.map((c, index) => fixComponentProps(c, index, translation));\nconst generateObjectComponents = (components, translation) => {\n const componentMap = {};\n Object.keys(components).forEach(c => {\n Object.assign(componentMap, {\n [c]: fixComponentProps(components[c], c, translation)\n });\n });\n return componentMap;\n};\nconst generateComponents = (components, translation, i18n, i18nKey) => {\n if (!components) return null;\n if (Array.isArray(components)) {\n return generateArrayComponents(components, translation);\n }\n if (isObject(components)) {\n return generateObjectComponents(components, translation);\n }\n warnOnce(i18n, 'TRANS_INVALID_COMPONENTS', ` \"components\" prop expects an object or array`, {\n i18nKey\n });\n return null;\n};\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const i18n = i18nFromProps || getI18n();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', `Trans: You need to pass in an i18next instance using i18nextReactModule`, {\n i18nKey\n });\n return children;\n }\n const t = tFromProps || i18n.t.bind(i18n) || (k => k);\n const reactI18nextOptions = {\n ...getDefaults(),\n ...i18n.options?.react\n };\n let namespaces = ns || t.ns || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n const nodeAsString = nodesToString(children, reactI18nextOptions, i18n, i18nKey);\n const defaultValue = defaults || nodeAsString || reactI18nextOptions.transEmptyNodeValue || i18nKey;\n const {\n hashTransKey\n } = reactI18nextOptions;\n const key = i18nKey || (hashTransKey ? hashTransKey(nodeAsString || defaultValue) : nodeAsString || defaultValue);\n if (i18n.options?.interpolation?.defaultVariables) {\n values = values && Object.keys(values).length > 0 ? {\n ...values,\n ...i18n.options.interpolation.defaultVariables\n } : {\n ...i18n.options.interpolation.defaultVariables\n };\n }\n const interpolationOverride = values || count !== undefined && !i18n.options?.interpolation?.alwaysFormat || !children ? tOptions.interpolation : {\n interpolation: {\n ...tOptions.interpolation,\n prefix: '#$?',\n suffix: '?$#'\n }\n };\n const combinedTOpts = {\n ...tOptions,\n context: context || tOptions.context,\n count,\n ...values,\n ...interpolationOverride,\n defaultValue,\n ns: namespaces\n };\n const translation = key ? t(key, combinedTOpts) : defaultValue;\n const generatedComponents = generateComponents(components, translation, i18n, i18nKey);\n const content = renderNodes(generatedComponents || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape);\n const useAsParent = parent ?? reactI18nextOptions.defaultTransParent;\n return useAsParent ? createElement(useAsParent, additionalProps, content) : content;\n}","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useContext } from 'react';\nimport { nodesToString, Trans as TransWithoutContext } from './TransWithoutContext.js';\nimport { getI18n, I18nContext } from './context.js';\nexport { nodesToString };\nexport function Trans({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions = {},\n values,\n defaults,\n components,\n ns,\n i18n: i18nFromProps,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n}) {\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n const t = tFromProps || i18n?.t.bind(i18n);\n return TransWithoutContext({\n children,\n count,\n parent,\n i18nKey,\n context,\n tOptions,\n values,\n defaults,\n components,\n ns: ns || t?.ns || defaultNSFromContext || i18n?.options?.defaultNS,\n i18n,\n t: tFromProps,\n shouldUnescape,\n ...additionalProps\n });\n}","import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n const notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n const retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react?.wait) warnOnce(i18n, 'DEPRECATED_OPTION', 'useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n const i18nOptions = {\n ...getDefaults(),\n ...i18n.options.react,\n ...props\n };\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n let namespaces = ns || defaultNSFromContext || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n i18n.reportNamespaces.addUsedNamespaces?.(namespaces);\n const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const getT = () => memoGetT;\n const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const [t, setT] = useState(getT);\n let joinedNS = namespaces.join();\n if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n const previousJoinedNS = usePrevious(joinedNS);\n const isMounted = useRef(true);\n useEffect(() => {\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n } else {\n loadNamespaces(i18n, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n }\n }\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getNewT);\n }\n const boundReset = () => {\n if (isMounted.current) setT(getNewT);\n };\n if (bindI18n) i18n?.on(bindI18n, boundReset);\n if (bindI18nStore) i18n?.store.on(bindI18nStore, boundReset);\n return () => {\n isMounted.current = false;\n if (i18n) bindI18n?.split(' ').forEach(e => i18n.off(e, boundReset));\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n };\n }, [i18n, joinedNS]);\n useEffect(() => {\n if (isMounted.current && ready) {\n setT(getT);\n }\n }, [i18n, keyPrefix, ready]);\n const ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(resolve => {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => resolve());\n } else {\n loadNamespaces(i18n, namespaces, () => resolve());\n }\n });\n};","import { createElement, useMemo } from 'react';\nimport { I18nContext } from './context.js';\nexport function I18nextProvider({\n i18n,\n defaultNS,\n children\n}) {\n const value = useMemo(() => ({\n i18n,\n defaultNS\n }), [i18n, defaultNS]);\n return createElement(I18nContext.Provider, {\n value\n }, children);\n}","/**\n * @remix-run/router v1.23.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Action[\"Pop\"] = \"POP\";\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Action[\"Push\"] = \"PUSH\";\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n let {\n initialEntries = [\"/\"],\n initialIndex,\n v5Compat = false\n } = options;\n let entries; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n let action = Action.Pop;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n return location;\n }\n function createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 1\n });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 0\n });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: nextLocation,\n delta\n });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createBrowserLocation(window, globalHistory) {\n let {\n pathname,\n search,\n hash\n } = window.location;\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createBrowserHref(window, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createHashLocation(window, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window.location.hash.substr(1));\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createHashHref(window, to) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n }\n return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = _extends({\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\"\n }, typeof to === \"string\" ? parsePath(to) : to, {\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n });\n return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = _ref;\n if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n window = document.defaultView,\n v5Compat = false\n } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener = null;\n let index = getIndex();\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), \"\");\n }\n function getIndex() {\n let state = globalHistory.state || {\n idx: null\n };\n return state.idx;\n }\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: history.location,\n delta\n });\n }\n }\n function push(to, state) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 1\n });\n }\n }\n function replace(to, state) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 0\n });\n }\n }\n function createURL(to) {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n return new URL(href, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n ResultType[\"data\"] = \"data\";\n ResultType[\"deferred\"] = \"deferred\";\n ResultType[\"redirect\"] = \"redirect\";\n ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n if (manifest === void 0) {\n manifest = {};\n }\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\". Route \" + \"id's must be globally unique within Data Router usages\");\n if (isIndexRoute(route)) {\n let indexRoute = _extends({}, route, mapRouteProperties(route), {\n id\n });\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n id,\n children: undefined\n });\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n }\n return pathOrLayoutRoute;\n }\n });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(branches[i], decoded, allowPartial);\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let {\n route,\n pathname,\n params\n } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n var _route$path;\n // coarse-grain check for optional params\n if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n // for absolute paths, ensure `/` instead of empty segment\n return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ?\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1] :\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n if (allowPartial === void 0) {\n allowPartial = false;\n }\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n }, remainingPathname);\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n if (params === void 0) {\n params = {};\n }\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n path = path.replace(/\\*$/, \"/*\");\n }\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n // Apply the splat\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n return stringify(param);\n }\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter(segment => !!segment);\n return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce((memo, _ref, index) => {\n let {\n paramName,\n isOptional\n } = _ref;\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n }, {});\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n if (end === void 0) {\n end = true;\n }\n warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n params.push({\n paramName,\n isOptional: isOptional != null\n });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n if (path.endsWith(\"*\")) {\n params.push({\n paramName: \"*\"\n });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else ;\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n return value;\n }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"]. Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nfunction getPathContributingMatches(matches) {\n return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n let pathMatches = getPathContributingMatches(matches);\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n }\n return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n if (isPathRelative === void 0) {\n isPathRelative = false;\n }\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = _extends({}, toArg);\n invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nconst json = function json(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(data), _extends({}, responseInit, {\n headers\n }));\n};\nclass DataWithResponseInit {\n constructor(data, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data;\n this.init = init || null;\n }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n return new DataWithResponseInit(data, typeof init === \"number\" ? {\n status: init\n } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n constructor(data, responseInit) {\n this.pendingKeysSet = new Set();\n this.subscribers = new Set();\n this.deferredKeys = [];\n invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject;\n this.abortPromise = new Promise((_, r) => reject = r);\n this.controller = new AbortController();\n let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n this.data = Object.entries(data).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return Object.assign(acc, {\n [key]: this.trackPromise(key, value)\n });\n }, {});\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n this.init = responseInit;\n }\n trackPromise(key, value) {\n if (!(value instanceof Promise)) {\n return value;\n }\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n return promise;\n }\n onSettle(promise, key, error, data) {\n if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n return Promise.reject(error);\n }\n this.pendingKeysSet.delete(key);\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n Object.defineProperty(promise, \"_error\", {\n get: () => undefinedError\n });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n this.emit(false, key);\n return Promise.reject(error);\n }\n Object.defineProperty(promise, \"_data\", {\n get: () => data\n });\n this.emit(false, key);\n return data;\n }\n emit(aborted, settledKey) {\n this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n async resolveData(signal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise(resolve => {\n this.subscribe(aborted => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n get unwrappedData() {\n invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n return Object.entries(this.data).reduce((acc, _ref3) => {\n let [key, value] = _ref3;\n return Object.assign(acc, {\n [key]: unwrapTrackedPromise(value)\n });\n }, {});\n }\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\nfunction isTrackedPromise(value) {\n return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nconst defer = function defer(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n if (init === void 0) {\n init = 302;\n }\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = {\n status: responseInit\n };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, _extends({}, responseInit, {\n headers\n }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n constructor(status, statusText, data, internal) {\n if (internal === void 0) {\n internal = false;\n }\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_FETCHER = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n let mapRouteProperties;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Routes keyed by ID\n let manifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n // Config driven behavior flags\n let future = _extends({\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false\n }, init.future);\n // Cleanup function for history\n let unlistenHistory = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialMatchesIsFOW = false;\n let initialErrors = null;\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let {\n matches,\n route\n } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = {\n [route.id]: error\n };\n }\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n let initialized;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some(m => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some(m => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: new Map(),\n blockers: new Map()\n };\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction = Action.Pop;\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n // AbortController for the active navigation\n let pendingNavigationController;\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions = new Map();\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener = null;\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes = [];\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads = new Set();\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate = undefined;\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(_ref => {\n let {\n action: historyAction,\n location,\n delta\n } = _ref;\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs. This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise(resolve => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n });\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(Action.Pop, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n // Subscribe to state updates for the router\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n // Update our state and notify the calling context of the change\n function updateState(newState, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state = _extends({}, state, newState);\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers = [];\n let deletedFetchersKeys = [];\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n // Remove any lingering deleted fetchers that have already been removed\n // from state.fetchers\n deletedFetchers.forEach(key => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n deletedFetchersKeys.push(key);\n }\n });\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach(subscriber => subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true\n }));\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach(key => state.fetchers.delete(key));\n deletedFetchersKeys.forEach(key => deleteFetcher(key));\n } else {\n // We already called deleteFetcher() on these, can remove them from this\n // Set now that we've handed the keys off to the data layer\n deletedFetchersKeys.forEach(key => deletedFetchers.delete(key));\n }\n }\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(location, newState, _temp) {\n var _location$state, _location$state2;\n let {\n flushSync\n } = _temp === void 0 ? {} : _temp;\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === Action.Replace) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === Action.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(_extends({}, newState, {\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n preventScrollReset,\n blockers\n }), {\n viewTransitionOpts,\n flushSync: flushSync === true\n });\n // Reset stateful navigation vars\n pendingAction = Action.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n let historyAction = Action.Push;\n if (userReplace === true) {\n historyAction = Action.Replace;\n } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = Action.Replace;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n let flushSync = (opts && opts.flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync\n });\n }\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({\n revalidation: \"loading\"\n });\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return;\n }\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true\n });\n }\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(historyAction, location, opts) {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = opts != null && opts.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ?\n // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial hydration will always\n // be \"same hash\". For example, on /page#hash and submit a
\n // which will default to a navigation to /page\n if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, {\n matches\n }, {\n flushSync\n });\n return;\n }\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n }, {\n flushSync\n });\n return;\n }\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n let pendingActionResult;\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [findNearestBoundary(matches).route.id, {\n type: ResultType.error,\n error: opts.pendingError\n }];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n // Call action if we received an action submission\n let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n replace: opts.replace,\n flushSync\n });\n if (actionResult.shortCircuited) {\n return;\n }\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n // Create a GET request for the loaders\n request = createClientSideRequest(init.history, request.url, request.signal);\n }\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors\n } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n if (shortCircuited) {\n return;\n }\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n completeNavigation(location, _extends({\n matches: updatedMatches || matches\n }, getActionDataForCommit(pendingActionResult), {\n loaderData,\n errors\n }));\n }\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n if (opts === void 0) {\n opts = {};\n }\n interruptActiveLoads();\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({\n navigation\n }, {\n flushSync: opts.flushSync === true\n });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [boundaryId, {\n type: ResultType.error,\n error: discoverResult.error\n }]\n };\n } else if (!discoverResult.matches) {\n let {\n notFoundMatches,\n error,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n pendingActionResult: [route.id, {\n type: ResultType.error,\n error\n }]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n // Call our action and get the result\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n }\n if (isRedirectResult(result)) {\n let replace;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename);\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace\n });\n return {\n shortCircuited: true\n };\n }\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = Action.Push;\n }\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(_extends({\n navigation: loadingNavigation\n }, actionData !== undefined ? {\n actionData\n } : {}), {\n flushSync\n });\n }\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error\n }\n };\n } else if (!discoverResult.matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n pendingNavigationLoadId = ++incrementingLoadId;\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, _extends({\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null\n }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {}), {\n flushSync\n });\n return {\n shortCircuited: true\n };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, {\n flushSync\n });\n }\n revalidatingFetchers.forEach(rf => {\n abortFetcher(rf.key);\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe(aborted => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = _extends({}, state.errors, errors);\n }\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return _extends({\n matches,\n loaderData,\n errors\n }, shouldUpdateFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {});\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n revalidatingFetchers.forEach(rf => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(key, routeId, href, opts) {\n if (isServer) {\n throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n }\n abortFetcher(key);\n let flushSync = (opts && opts.flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: normalizedPath\n }), {\n flushSync\n });\n return;\n }\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n if (error) {\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n }\n let match = getTargetMatch(matches, path);\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n return;\n }\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, {\n routeId,\n path\n });\n handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n }\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n function detectAndHandle405Error(m) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId\n });\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return true;\n }\n return false;\n }\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(requestMatches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n let actionResult = actionResults[match.route.id];\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset\n });\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({\n fetchers: new Map(state.fetchers)\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n preventScrollReset\n });\n }\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n preventScrollReset\n });\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n abortStaleFetchLoads(loadId);\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers)\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n let result = results[match.route.id];\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n }\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset\n });\n return;\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n let {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace\n } = _temp2 === void 0 ? {} : _temp2;\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(location, new URL(request.url), basename);\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser) {\n let isDocumentReload = false;\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let {\n formMethod,\n formAction,\n formEncType\n } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: _extends({}, activeSubmission, {\n formAction: location\n }),\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n });\n }\n }\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n let results;\n let dataResults = {};\n try {\n results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach(m => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e\n };\n });\n return dataResults;\n }\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n }\n }\n return dataResults;\n }\n async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n let currentMatches = state.matches;\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return {\n [f.key]: result\n };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n }\n });\n }\n }));\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n function updateFetcherState(key, fetcher, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state.fetchers.set(key, fetcher);\n updateState({\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function setFetcherError(key, routeId, error, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function getFetcher(key) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function deleteFetcher(key) {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n // If we opted into the flag we can clear this now since we're calling\n // deleteFetcher() at the end of updateState() and we've already handed the\n // deleted fetcher keys off to the data layer.\n // If not, we're eagerly calling deleteFetcher() and we need to keep this\n // Set populated until the next updateState call, and we'll clear\n // `deletedFetchers` then\n if (future.v7_fetcherPersist) {\n deletedFetchers.delete(key);\n }\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n function deleteFetcherAndUpdateState(key) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n if (!future.v7_fetcherPersist) {\n deleteFetcher(key);\n }\n } else {\n activeFetchers.set(key, count);\n }\n updateState({\n fetchers: new Map(state.fetchers)\n });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n function markFetchersDone(keys) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone() {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n function abortStaleFetchLoads(landedId) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({\n blockers\n });\n }\n function shouldBlockNavigation(_ref2) {\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = _ref2;\n if (blockerFunctions.size === 0) {\n return;\n }\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({\n currentLocation,\n nextLocation,\n historyAction\n })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, {\n pathname\n });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let {\n matches,\n route\n } = getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n return {\n notFoundMatches: matches,\n route,\n error\n };\n }\n function cancelActiveDeferreds(predicate) {\n let cancelledRouteIds = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({\n restoreScrollPosition: y\n });\n }\n }\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: fogMatches || []\n };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: partialMatches\n };\n }\n }\n }\n return {\n active: false,\n matches: null\n };\n }\n async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n if (!patchRoutesOnNavigationImpl) {\n return {\n type: \"success\",\n matches\n };\n }\n let partialMatches = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n signal,\n path: pathname,\n matches: partialMatches,\n fetcherKey,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);\n }\n });\n } catch (e) {\n return {\n type: \"error\",\n error: e,\n partialMatches\n };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n if (signal.aborted) {\n return {\n type: \"aborted\"\n };\n }\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return {\n type: \"success\",\n matches: newMatches\n };\n }\n let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n // Avoid loops if the second pass results in the same partial matches\n if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n return {\n type: \"success\",\n matches: null\n };\n }\n partialMatches = newPartialMatches;\n }\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n }\n function patchRoutes(routeId, children) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: to => init.history.createHref(to),\n encodeLocation: to => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes\n };\n return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties;\n if (opts != null && opts.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts != null && opts.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future = _extends({\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false\n }, opts ? opts.future : null);\n let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(request, _temp3) {\n let {\n requestContext,\n skipLoaderErrorBubbling,\n dataStrategy\n } = _temp3 === void 0 ? {} : _temp3;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, {\n method\n });\n let {\n matches: methodNotAllowedMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);\n if (isResponse(result)) {\n return result;\n }\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return _extends({\n location,\n basename\n }, result);\n }\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(request, _temp4) {\n let {\n routeId,\n requestContext,\n dataStrategy\n } = _temp4 === void 0 ? {} : _temp4;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, {\n method\n });\n } else if (!matches) {\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);\n if (isResponse(result)) {\n return result;\n }\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n var _result$activeDeferre;\n let data = Object.values(result.loaderData)[0];\n if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n return undefined;\n }\n async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n return result;\n }\n let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);\n return isResponse(result) ? result : _extends({}, result, {\n actionData: null,\n actionHeaders: {}\n });\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n } else {\n let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, {\n type: \"defer-action\"\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n }\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: {\n [actionMatch.route.id]: result.data\n },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n // action status codes take precedence over loader status codes\n return _extends({}, context, {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: _extends({}, result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {})\n });\n }\n let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);\n return _extends({}, context, {\n actionData: {\n [actionMatch.route.id]: result.data\n }\n }, result.statusCode ? {\n statusCode: result.statusCode\n } : {}, {\n actionHeaders: result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {}\n });\n }\n async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch == null ? void 0 : routeMatch.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n [m.route.id]: null\n }), {}),\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null\n };\n }\n let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n matches.forEach(match => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n return _extends({}, context, {\n matches,\n activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n });\n }\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n let dataResults = {};\n await Promise.all(matches.map(async match => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n }));\n return dataResults;\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n let newContext = _extends({}, context, {\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error\n }\n });\n return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n // Resolve the relative path\n let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? \"?\" + qs : \"\";\n }\n }\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return {\n path\n };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, {\n method: opts.formMethod\n })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, {\n type: \"invalid-body\"\n })\n });\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n let [name, value] = _ref3;\n return \"\" + acc + name + \"=\" + value + \"\\n\";\n }, \"\") : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined\n };\n if (isMutationMethod(submission.formMethod)) {\n return {\n path,\n submission\n };\n }\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = \"?\" + searchParams;\n return {\n path: createPath(parsedPath),\n submission\n };\n}\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {\n if (includeBoundary === void 0) {\n includeBoundary = false;\n }\n let index = matches.findIndex(m => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);\n }\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let {\n route\n } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (route.loader == null) {\n return false;\n }\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n // Always call the loader on new route instances and pending defer cancellations\n if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n return true;\n }\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n return shouldRevalidateLoader(match, _extends({\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false :\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n }));\n });\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial hydration (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null\n });\n return;\n }\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n }));\n }\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController()\n });\n }\n });\n return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n var _childrenToPatch;\n let childrenToPatch;\n if (routeId) {\n let route = manifest[routeId];\n invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));\n let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || \"_\", \"patch\", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || \"0\")], manifest);\n childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n // Most optimal check is by id\n if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n return true;\n }\n // Second is by pathing differences\n if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n return false;\n }\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n return true;\n }\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children.every((aChild, i) => {\n var _existingRoute$childr;\n return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));\n });\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n if (!route.lazy) {\n return;\n }\n let lazyRoute = await route.lazy();\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n }\n }\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n lazy: undefined\n }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref4) {\n let {\n matches\n } = _ref4;\n let matchesToLoad = matches.filter(m => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n return results.reduce((acc, result, i) => Object.assign(acc, {\n [matchesToLoad[i].route.id]: result\n }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve = async handlerOverride => {\n if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n shouldLoad = true;\n }\n return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n type: ResultType.data,\n result: undefined\n });\n };\n return _extends({}, match, {\n shouldLoad,\n resolve\n });\n });\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext\n });\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n let result;\n let onReject;\n let runHandler = handler => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = ctx => {\n if (typeof handler !== \"function\") {\n return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n }\n return handler({\n request,\n params: match.params,\n context: staticContext\n }, ...(ctx !== undefined ? [ctx] : []));\n };\n let handlerPromise = (async () => {\n try {\n let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n return {\n type: \"data\",\n result: val\n };\n } catch (e) {\n return {\n type: \"error\",\n result: e\n };\n }\n })();\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = match.route[type];\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch(e => {\n handlerError = e;\n }), loadRoutePromise]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return {\n type: ResultType.data,\n result: undefined\n };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return {\n type: ResultType.error,\n result: e\n };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n let {\n result,\n type\n } = dataStrategyResult;\n if (isResponse(result)) {\n let data;\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return {\n type: ResultType.error,\n error: e\n };\n }\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n var _result$init3, _result$init4;\n if (result.data instanceof Error) {\n var _result$init, _result$init2;\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n headers: (_result$init2 = result.init) != null && _result$init2.headers ? new Headers(result.init.headers) : undefined\n };\n }\n // Convert thrown data() to ErrorResponse instances\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(((_result$init3 = result.init) == null ? void 0 : _result$init3.status) || 500, undefined, result.data),\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n headers: (_result$init4 = result.init) != null && _result$init4.headers ? new Headers(result.init.headers) : undefined\n };\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined\n };\n }\n if (isDeferredData(result)) {\n var _result$init5, _result$init6;\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n headers: ((_result$init6 = result.init) == null ? void 0 : _result$init6.headers) && new Headers(result.init.headers)\n };\n }\n if (isDataWithResponseInit(result)) {\n var _result$init7, _result$init8;\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: (_result$init7 = result.init) == null ? void 0 : _result$init7.status,\n headers: (_result$init8 = result.init) != null && _result$init8.headers ? new Headers(result.init.headers) : undefined\n };\n }\n return {\n type: ResultType.data,\n data: result\n };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n let location = response.headers.get(\"Location\");\n invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = {\n signal\n };\n if (submission && isMutationMethod(submission.formMethod)) {\n let {\n formMethod,\n formEncType\n } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({\n \"Content-Type\": formEncType\n });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n // Fill in loaderData/errors from our loaders\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n // Process loader results into state.loaderData/state.errors\n matches.forEach(match => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = {\n [pendingActionResult[0]]: pendingError\n };\n loaderData[pendingActionResult[0]] = undefined;\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n let {\n loaderData,\n errors\n } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n );\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach(rf => {\n let {\n key,\n match,\n controller\n } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = _extends({}, errors, {\n [boundaryMatch.route.id]: result.error\n });\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n return {\n loaderData,\n errors\n };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = _extends({}, newLoaderData);\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n id: \"__shim-error-route__\"\n };\n return {\n matches: [{\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }],\n route\n };\n}\nfunction getInternalRouterError(status, _temp5) {\n let {\n pathname,\n routeId,\n method,\n type,\n message\n } = _temp5 === void 0 ? {} : _temp5;\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (method) {\n errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n }\n }\n return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return {\n key,\n result\n };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath(_extends({}, parsedPath, {\n hash: \"\"\n }));\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\nfunction isDataStrategyResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n let deferred = value;\n return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n if (!isResponse(result)) {\n return false;\n }\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then(result => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let {\n key,\n routeId,\n controller\n } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n await resolveDeferredData(result, controller.signal, true).then(result => {\n if (result) {\n results[key] = result;\n }\n });\n }\n }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n if (unwrap === void 0) {\n unwrap = false;\n }\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e\n };\n }\n }\n return {\n type: ResultType.data,\n data: result.deferredData.data\n };\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let {\n formMethod,\n formAction,\n formEncType,\n text,\n formData,\n json\n } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined\n };\n }\n}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined\n };\n return fetcher;\n}\nfunction getDoneFetcher(data) {\n let fetcher = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n } catch (error) {\n warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n }\n }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, data, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.30.0\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nfunction useHref(to, _temp) {\n let {\n relative\n } = _temp === void 0 ? {} : _temp;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useHref() may be used only in the context of a component.\") : UNSAFE_invariant(false) : void 0;\n let {\n basename,\n navigator\n } = React.useContext(NavigationContext);\n let {\n hash,\n pathname,\n search\n } = useResolvedPath(to, {\n relative\n });\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator.createHref({\n pathname: joinedPathname,\n search,\n hash\n });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nfunction useLocation() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useLocation() may be used only in the context of a component.\") : UNSAFE_invariant(false) : void 0;\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nfunction useMatch(pattern) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useMatch() may be used only in the context of a component.\") : UNSAFE_invariant(false) : void 0;\n let {\n pathname\n } = useLocation();\n return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nfunction useNavigate() {\n let {\n isDataRoute\n } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useNavigate() may be used only in the context of a component.\") : UNSAFE_invariant(false) : void 0;\n let dataRouterContext = React.useContext(DataRouterContext);\n let {\n basename,\n future,\n navigator\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nfunction useOutlet(context) {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n value: context\n }, outlet);\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nfunction useParams() {\n let {\n matches\n } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n let {\n relative\n } = _temp2 === void 0 ? {} : _temp2;\n let {\n future\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useRoutes() may be used only in the context of a component.\") : UNSAFE_invariant(false) : void 0;\n let {\n navigator,\n static: isStatic\n } = React.useContext(NavigationContext);\n let {\n matches: parentMatches\n } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (process.env.NODE_ENV !== \"production\") {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under ) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent to .\"));\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n var _parsedLocationArg$pa;\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = !isStatic && dataRouterState && dataRouterState.matches && dataRouterState.matches.length > 0 ? dataRouterState.matches : matchRoutes(routes, {\n pathname: remainingPathname\n });\n if (process.env.NODE_ENV !== \"production\") {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n }\n let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n })), parentMatches, dataRouterState, future);\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n value: {\n location: _extends({\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\"\n }, location),\n navigationType: Action.Pop\n }\n }, renderedMatches);\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = {\n padding: \"0.5rem\",\n backgroundColor: lightgrey\n };\n let codeStyles = {\n padding: \"2px 4px\",\n backgroundColor: lightgrey\n };\n let devInfo = null;\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"errorElement\"), \" prop on your route.\"));\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n style: {\n fontStyle: \"italic\"\n }\n }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n style: preStyles\n }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return {\n error: error\n };\n }\n static getDerivedStateFromProps(props, state) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\"React Router caught the following error during render\", error, errorInfo);\n }\n render() {\n return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: this.props.routeContext\n }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n value: this.state.error,\n children: this.props.component\n })) : this.props.children;\n }\n}\nfunction RenderedRoute(_ref) {\n let {\n routeContext,\n match,\n children\n } = _ref;\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: routeContext\n }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n var _dataRouterState;\n if (parentMatches === void 0) {\n parentMatches = [];\n }\n if (dataRouterState === void 0) {\n dataRouterState = null;\n }\n if (future === void 0) {\n future = null;\n }\n if (matches == null) {\n var _future;\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches;\n } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let {\n loaderData,\n errors\n } = dataRouterState;\n let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = /*#__PURE__*/React.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /*#__PURE__*/React.createElement(RenderedRoute, {\n match: match,\n routeContext: {\n outlet,\n matches,\n isDataRoute: dataRouterState != null\n },\n children: children\n });\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error: error,\n children: getChildren(),\n routeContext: {\n outlet: null,\n matches,\n isDataRoute: true\n }\n }) : getChildren();\n }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n return hookName + \" must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React.useContext(DataRouterContext);\n !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React.useContext(DataRouterStateContext);\n !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React.useContext(RouteContext);\n !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(() => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation\n }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n let {\n matches,\n loaderData\n } = useDataRouterState(DataRouterStateHook.UseMatches);\n return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n if (state.errors && state.errors[routeId] != null) {\n console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n var _state$errors;\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nfunction useAsyncValue() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nfunction useAsyncError() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n let {\n router,\n basename\n } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(arg => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = arg;\n return shouldBlock({\n currentLocation: _extends({}, currentLocation, {\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n }),\n nextLocation: _extends({}, nextLocation, {\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n }),\n historyAction\n });\n }, [basename, shouldBlock]);\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, _extends({\n fromRouteId: id\n }, options));\n }\n }, [router, id]);\n return navigate;\n}\nconst alreadyWarned$1 = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned$1[key]) {\n alreadyWarned$1[key] = true;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n }\n}\n\nconst alreadyWarned = {};\nfunction warnOnce(key, message) {\n if (process.env.NODE_ENV !== \"production\" && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\nconst logDeprecation = (flag, msg, link) => warnOnce(flag, \"\\u26A0\\uFE0F React Router Future Flag Warning: \" + msg + \". \" + (\"You can use the `\" + flag + \"` future flag to opt-in early. \") + (\"For more information, see \" + link + \".\"));\nfunction logV6DeprecationWarnings(renderFuture, routerFuture) {\n if ((renderFuture == null ? void 0 : renderFuture.v7_startTransition) === undefined) {\n logDeprecation(\"v7_startTransition\", \"React Router will begin wrapping state updates in `React.startTransition` in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\");\n }\n if ((renderFuture == null ? void 0 : renderFuture.v7_relativeSplatPath) === undefined && (!routerFuture || !routerFuture.v7_relativeSplatPath)) {\n logDeprecation(\"v7_relativeSplatPath\", \"Relative route resolution within Splat routes is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\");\n }\n if (routerFuture) {\n if (routerFuture.v7_fetcherPersist === undefined) {\n logDeprecation(\"v7_fetcherPersist\", \"The persistence behavior of fetchers is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\");\n }\n if (routerFuture.v7_normalizeFormMethod === undefined) {\n logDeprecation(\"v7_normalizeFormMethod\", \"Casing of `formMethod` fields is being normalized to uppercase in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\");\n }\n if (routerFuture.v7_partialHydration === undefined) {\n logDeprecation(\"v7_partialHydration\", \"`RouterProvider` hydration behavior is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\");\n }\n if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n logDeprecation(\"v7_skipActionErrorRevalidation\", \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\");\n }\n }\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n let {\n fallbackElement,\n router,\n future\n } = _ref;\n let [state, setStateImpl] = React.useState(router.state);\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n }, [setStateImpl, v7_startTransition]);\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React.useEffect(() => {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let navigator = React.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: n => router.navigate(n),\n push: (to, state, opts) => router.navigate(to, {\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n }),\n replace: (to, state, opts) => router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React.useMemo(() => ({\n router,\n navigator,\n static: false,\n basename\n }), [router, navigator, basename]);\n React.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a \n The answer depends on whether the code is rendered on the client or server side.\n \n Client side\n - To prevent XSS inside of the tag, it will still be interpreted as CSS text by the browser.\n - Therefore, there is not an XSS vulnerability on the client side.\n \n Server side\n - When React code is rendered on the server side (e.g., NextJS), the code is sent to the browser as HTML text.\n - Therefore, it *IS* possible to insert a closing tag and escape the CSS context, which opens an XSS vulnerability.\n \n Q: How are we mitigating the potential attack vector?\n A: To fix this potential attack vector on the server side, we need to filter out any closing tags,\n as this the only way to escape from the context of the browser interpreting the text as CSS.\n We also need to catch cases where there is any kind of whitespace character , such as tabs, carriage returns, etc:\n \n Therefore, by only rendering CSS text which does not include a closing '' tag,\n we ensure that the browser will correctly interpret all the text as CSS.\n */\n if (cssText === undefined || /<\\/style/i.test(cssText)) {\n return null;\n }\n return (React.createElement(\"style\", { ...rest, \n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML: { __html: cssText } }));\n};\nStyle.displayName = 'Style';\n\nexport { Style };\n","import * as React from 'react';\nimport { Style } from './Style.mjs';\n\nconst ThemeStyle = ({ theme, ...rest }) => {\n if (!theme)\n return null;\n const { name, cssText } = theme;\n return React.createElement(Style, { ...rest, cssText: cssText, id: `amplify-theme-${name}` });\n};\nThemeStyle.displayName = 'ThemeStyle';\n\nexport { ThemeStyle };\n","import * as React from 'react';\nimport { DirectionProvider } from '@radix-ui/react-direction';\nimport { createTheme } from '@aws-amplify/ui';\nimport { ThemeContext } from './ThemeContext.mjs';\nimport { ThemeStyle } from './ThemeStyle.mjs';\n\n/**\n * [📖 Docs](https://ui.docs.amplify.aws/react/theming)\n */\nfunction ThemeProvider({ children, colorMode, direction = 'ltr', nonce, theme, }) {\n const value = React.useMemo(() => ({ theme: createTheme(theme), colorMode }), [theme, colorMode]);\n return (React.createElement(ThemeContext.Provider, { value: value },\n React.createElement(DirectionProvider, { dir: direction },\n React.createElement(\"div\", { \"data-amplify-theme\": value.theme.name, \"data-amplify-color-mode\": colorMode, dir: direction }, children),\n theme ? React.createElement(ThemeStyle, { theme: value.theme, nonce: nonce }) : null)));\n}\n\nexport { ThemeProvider };\n","// This file replaces `index.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nimport { urlAlphabet } from './url-alphabet/index.js'\n\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\n\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n // First, a bitmask is necessary to generate the ID. The bitmask makes bytes\n // values closer to the alphabet size. The bitmask calculates the closest\n // `2^31 - 1` number, which exceeds the alphabet size.\n // For example, the bitmask for the alphabet size 30 is 31 (00011111).\n // `Math.clz32` is not used, because it is not available in browsers.\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n // Though, the bitmask solution is not perfect since the bytes exceeding\n // the alphabet size are refused. Therefore, to reliably generate the ID,\n // the random bytes redundancy has to be satisfied.\n\n // Note: every hardware random generator call is performance expensive,\n // because the system call for entropy collection takes a lot of time.\n // So, to avoid additional system calls, extra bytes are requested in advance.\n\n // Next, a step determines how many random bytes to generate.\n // The number of random bytes gets decided upon the ID size, mask,\n // alphabet size, and magic number 1.6 (using 1.6 peaks at performance\n // according to benchmarks).\n\n // `-~f => Math.ceil(f)` if f is a float\n // `-~i => i + 1` if i is an integer\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let j = step | 0\n while (j--) {\n // Adding `|| ''` refuses a random byte that exceeds the alphabet size.\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\n\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\n\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n // It is incorrect to use bytes exceeding the alphabet size.\n // The following mask reduces the random byte in the 0-255 value\n // range to the 0-63 value range. Therefore, adding hacks, such\n // as empty string fallback or magic numbers, is unneccessary because\n // the bitmask trims bytes down to the alphabet size.\n byte &= 63\n if (byte < 36) {\n // `0-9a-z`\n id += byte.toString(36)\n } else if (byte < 62) {\n // `A-Z`\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\n\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","/**\n * The illumination states\n */\nvar IlluminationState;\n(function (IlluminationState) {\n IlluminationState[\"DARK\"] = \"dark\";\n IlluminationState[\"BRIGHT\"] = \"bright\";\n IlluminationState[\"NORMAL\"] = \"normal\";\n})(IlluminationState || (IlluminationState = {}));\n/**\n * The detected face states with respect to the liveness oval\n */\nvar FaceMatchState;\n(function (FaceMatchState) {\n FaceMatchState[\"MATCHED\"] = \"MATCHED\";\n FaceMatchState[\"TOO_FAR\"] = \"TOO FAR\";\n FaceMatchState[\"CANT_IDENTIFY\"] = \"CANNOT IDENTIFY\";\n FaceMatchState[\"FACE_IDENTIFIED\"] = \"ONE FACE IDENTIFIED\";\n FaceMatchState[\"TOO_MANY\"] = \"TOO MANY FACES\";\n FaceMatchState[\"OFF_CENTER\"] = \"OFF CENTER\";\n})(FaceMatchState || (FaceMatchState = {}));\n\nexport { FaceMatchState, IlluminationState };\n","/**\n * The liveness error states\n */\nconst LivenessErrorState = {\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n TIMEOUT: 'TIMEOUT',\n RUNTIME_ERROR: 'RUNTIME_ERROR',\n FRESHNESS_TIMEOUT: 'FRESHNESS_TIMEOUT',\n SERVER_ERROR: 'SERVER_ERROR',\n CAMERA_FRAMERATE_ERROR: 'CAMERA_FRAMERATE_ERROR',\n CAMERA_ACCESS_ERROR: 'CAMERA_ACCESS_ERROR',\n FACE_DISTANCE_ERROR: 'FACE_DISTANCE_ERROR',\n MOBILE_LANDSCAPE_ERROR: 'MOBILE_LANDSCAPE_ERROR',\n MULTIPLE_FACES_ERROR: 'MULTIPLE_FACES_ERROR',\n};\n\nexport { LivenessErrorState };\n","// Face distance is calculated as pupilDistance / ovalWidth.\n// The further away you are from the camera the distance between your pupils will decrease, thus lowering the threshold values.\n// These FACE_DISTANCE_THRESHOLD values are determined by the science team and should only be changed with their approval.\n// We want to ensure at the start of a check that the user's pupilDistance/ovalWidth is below FACE_DISTANCE_THRESHOLD to ensure that they are starting\n// a certain distance away from the camera.\nconst FACE_DISTANCE_THRESHOLD = 0.32;\nconst REDUCED_THRESHOLD = 0.4;\nconst REDUCED_THRESHOLD_MOBILE = 0.37;\n// Constants from science team to determine ocular distance (space between eyes)\nconst PUPIL_DISTANCE_WEIGHT = 2.0;\nconst FACE_HEIGHT_WEIGHT = 1.8;\n// Constants from science team to find face match percentage\nconst FACE_MATCH_RANGE_MIN = 0;\nconst FACE_MATCH_RANGE_MAX = 1;\nconst FACE_MATCH_WEIGHT_MIN = 0.25;\nconst FACE_MATCH_WEIGHT_MAX = 0.75;\nconst WS_CLOSURE_CODE = {\n SUCCESS_CODE: 1000,\n DEFAULT_ERROR_CODE: 4000,\n FACE_FIT_TIMEOUT: 4001,\n USER_CANCEL: 4003,\n RUNTIME_ERROR: 4005,\n USER_ERROR_DURING_CONNECTION: 4007,\n};\n\nexport { FACE_DISTANCE_THRESHOLD, FACE_HEIGHT_WEIGHT, FACE_MATCH_RANGE_MAX, FACE_MATCH_RANGE_MIN, FACE_MATCH_WEIGHT_MAX, FACE_MATCH_WEIGHT_MIN, PUPIL_DISTANCE_WEIGHT, REDUCED_THRESHOLD, REDUCED_THRESHOLD_MOBILE, WS_CLOSURE_CODE };\n","import { IlluminationState, FaceMatchState } from '../types/liveness.mjs';\nimport { LivenessErrorState } from '../types/error.mjs';\nimport { PUPIL_DISTANCE_WEIGHT, FACE_HEIGHT_WEIGHT, FACE_DISTANCE_THRESHOLD, REDUCED_THRESHOLD_MOBILE, REDUCED_THRESHOLD } from './constants.mjs';\n\n/**\n * Returns the random number between min and max\n * seeded with the provided random seed.\n */\nfunction getScaledValueFromRandomSeed(randomSeed, min, max) {\n return randomSeed * (max - min) + min;\n}\n/**\n * Returns the bounding box details from an oval\n */\nfunction getOvalBoundingBox(ovalDetails) {\n const minOvalX = ovalDetails.flippedCenterX - ovalDetails.width / 2;\n const maxOvalX = ovalDetails.flippedCenterX + ovalDetails.width / 2;\n const minOvalY = ovalDetails.centerY - ovalDetails.height / 2;\n const maxOvalY = ovalDetails.centerY + ovalDetails.height / 2;\n const ovalBoundingBox = {\n left: minOvalX,\n top: minOvalY,\n right: maxOvalX,\n bottom: maxOvalY,\n };\n return { ovalBoundingBox, minOvalX, maxOvalX, minOvalY, maxOvalY };\n}\n/**\n * Returns the ratio of intersection and union of two bounding boxes.\n */\nfunction getIntersectionOverUnion(box1, box2) {\n const xA = Math.max(box1.left, box2.left);\n const yA = Math.max(box1.top, box2.top);\n const xB = Math.min(box1.right, box2.right);\n const yB = Math.min(box1.bottom, box2.bottom);\n const intersectionArea = Math.abs(Math.max(0, xB - xA) * Math.max(0, yB - yA));\n if (intersectionArea === 0) {\n return 0;\n }\n const boxAArea = Math.abs((box1.right - box1.left) * (box1.bottom - box1.top));\n const boxBArea = Math.abs((box2.right - box2.left) * (box2.bottom - box2.top));\n return intersectionArea / (boxAArea + boxBArea - intersectionArea);\n}\n/**\n * Returns the details of a randomly generated liveness oval\n * from SDK\n */\nfunction getOvalDetailsFromSessionInformation({ sessionInformation, videoWidth, }) {\n const ovalParameters = sessionInformation?.Challenge?.FaceMovementAndLightChallenge\n ?.OvalParameters;\n if (!ovalParameters ||\n !ovalParameters.CenterX ||\n !ovalParameters.CenterY ||\n !ovalParameters.Width ||\n !ovalParameters.Height) {\n throw new Error('Oval parameters not returned from session information.');\n }\n // We need to include a flippedCenterX for visualizing the oval on a flipped camera view\n // The camera view we show the customer is flipped to making moving left and right more obvious\n // The video stream sent to the liveness service is not flipped\n return {\n flippedCenterX: videoWidth - ovalParameters.CenterX,\n centerX: ovalParameters.CenterX,\n centerY: ovalParameters.CenterY,\n width: ovalParameters.Width,\n height: ovalParameters.Height,\n };\n}\n/**\n * Returns the details of a statically generated liveness oval based on the video dimensions\n */\nfunction getStaticLivenessOvalDetails({ width, height, widthSeed = 1.0, centerXSeed = 0.5, centerYSeed = 0.5, ratioMultiplier = 0.8, }) {\n const videoHeight = height;\n let videoWidth = width;\n const ovalRatio = widthSeed * ratioMultiplier;\n const minOvalCenterX = Math.floor((7 * width) / 16);\n const maxOvalCenterX = Math.floor((9 * width) / 16);\n const minOvalCenterY = Math.floor((7 * height) / 16);\n const maxOvalCenterY = Math.floor((9 * height) / 16);\n const centerX = getScaledValueFromRandomSeed(centerXSeed, minOvalCenterX, maxOvalCenterX);\n const centerY = getScaledValueFromRandomSeed(centerYSeed, minOvalCenterY, maxOvalCenterY);\n if (width >= height) {\n videoWidth = (3 / 4) * videoHeight;\n }\n const ovalWidth = ovalRatio * videoWidth;\n const ovalHeight = 1.618 * ovalWidth;\n return {\n flippedCenterX: Math.floor(videoWidth - centerX),\n centerX: Math.floor(centerX),\n centerY: Math.floor(centerY),\n width: Math.floor(ovalWidth),\n height: Math.floor(ovalHeight),\n };\n}\n/**\n * Draws the provided liveness oval on the canvas.\n */\nfunction drawLivenessOvalInCanvas({ canvas, oval, scaleFactor, videoEl, isStartScreen, }) {\n const { flippedCenterX, centerY, width, height } = oval;\n const { width: canvasWidth, height: canvasHeight } = canvas.getBoundingClientRect();\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.restore();\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n // fill the canvas with a transparent rectangle\n ctx.fillStyle = isStartScreen\n ? getComputedStyle(canvas).getPropertyValue('--amplify-colors-background-primary')\n : '#fff';\n ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n // On mobile our canvas is the width/height of the full screen.\n // We need to calculate horizontal and vertical translation to reposition\n // our canvas drawing so the oval is still placed relative to the dimensions\n // of the video element.\n const baseDims = { width: videoEl.videoWidth, height: videoEl.videoHeight };\n const translate = {\n x: (canvasWidth - baseDims.width * scaleFactor) / 2,\n y: (canvasHeight - baseDims.height * scaleFactor) / 2,\n };\n // Set the transform to scale\n ctx.setTransform(scaleFactor, 0, 0, scaleFactor, translate.x, translate.y);\n // draw the oval path\n ctx.beginPath();\n ctx.ellipse(flippedCenterX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI);\n // add stroke to the oval path\n ctx.strokeStyle = getComputedStyle(canvas).getPropertyValue('--amplify-colors-border-secondary');\n ctx.lineWidth = 3;\n ctx.stroke();\n ctx.save();\n ctx.clip();\n // Restore default canvas transform matrix\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n // clear the oval content from the rectangle\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n }\n else {\n throw new Error('Cannot find Canvas.');\n }\n}\nfunction drawStaticOval(canvasEl, videoEl, videoMediaStream) {\n const { width, height } = videoMediaStream.getTracks()[0].getSettings();\n // Get width/height of video element so we can compute scaleFactor\n // and set canvas width/height.\n const { width: videoScaledWidth, height: videoScaledHeight } = videoEl.getBoundingClientRect();\n canvasEl.width = Math.ceil(videoScaledWidth);\n canvasEl.height = Math.ceil(videoScaledHeight);\n const ovalDetails = getStaticLivenessOvalDetails({\n width: width,\n height: height,\n ratioMultiplier: 0.5,\n });\n ovalDetails.flippedCenterX = width - ovalDetails.centerX;\n // Compute scaleFactor which is how much our video element is scaled\n // vs the intrinsic video resolution\n const scaleFactor = videoScaledWidth / videoEl.videoWidth;\n // Draw oval in canvas using ovalDetails and scaleFactor\n drawLivenessOvalInCanvas({\n canvas: canvasEl,\n oval: ovalDetails,\n scaleFactor,\n videoEl: videoEl,\n isStartScreen: true,\n });\n}\nfunction clearOvalCanvas({ canvas, }) {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.restore();\n ctx.clearRect(0, 0, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n }\n else {\n throw new Error('Cannot find Canvas.');\n }\n}\nfunction getPupilDistanceAndFaceHeight(face) {\n const { leftEye, rightEye, mouth } = face;\n const eyeCenter = [];\n eyeCenter[0] = (leftEye[0] + rightEye[0]) / 2;\n eyeCenter[1] = (leftEye[1] + rightEye[1]) / 2;\n const pupilDistance = Math.sqrt((leftEye[0] - rightEye[0]) ** 2 + (leftEye[1] - rightEye[1]) ** 2);\n const faceHeight = Math.sqrt((eyeCenter[0] - mouth[0]) ** 2 + (eyeCenter[1] - mouth[1]) ** 2);\n return { pupilDistance, faceHeight };\n}\nfunction generateBboxFromLandmarks(face, oval, frameHeight) {\n const { leftEye, rightEye, nose, leftEar, rightEar } = face;\n const { height: ovalHeight, centerY } = oval;\n const ovalTop = centerY - ovalHeight / 2;\n const eyeCenter = [];\n eyeCenter[0] = (leftEye[0] + rightEye[0]) / 2;\n eyeCenter[1] = (leftEye[1] + rightEye[1]) / 2;\n const { pupilDistance: pd, faceHeight: fh } = getPupilDistanceAndFaceHeight(face);\n const ocularWidth = (PUPIL_DISTANCE_WEIGHT * pd + FACE_HEIGHT_WEIGHT * fh) / 2;\n let centerFaceX, centerFaceY;\n if (eyeCenter[1] <= (ovalTop + ovalHeight) / 2) {\n centerFaceX = (eyeCenter[0] + nose[0]) / 2;\n centerFaceY = (eyeCenter[1] + nose[1]) / 2;\n }\n else {\n // when face tilts down\n centerFaceX = eyeCenter[0];\n centerFaceY = eyeCenter[1];\n }\n const faceWidth = ocularWidth;\n const faceHeight = 1.68 * faceWidth;\n const top = Math.max(centerFaceY - faceHeight / 2, 0);\n const bottom = Math.min(centerFaceY + faceHeight / 2, frameHeight);\n const left = Math.min(centerFaceX - ocularWidth / 2, rightEar[0]);\n const right = Math.max(centerFaceX + ocularWidth / 2, leftEar[0]);\n return { bottom, left, right, top };\n}\n/**\n * Returns the illumination state in the provided video frame.\n */\nfunction estimateIllumination(videoEl) {\n const canvasEl = document.createElement('canvas');\n canvasEl.width = videoEl.videoWidth;\n canvasEl.height = videoEl.videoHeight;\n const ctx = canvasEl.getContext('2d');\n if (ctx) {\n ctx.drawImage(videoEl, 0, 0, canvasEl.width, canvasEl.height);\n const frame = ctx.getImageData(0, 0, canvasEl.width, canvasEl.height).data;\n // histogram\n const MAX_SCALE = 8;\n const hist = new Array(MAX_SCALE).fill(0);\n for (let i = 0; i < frame.length; i++) {\n const luma = Math.round(frame[i++] * 0.2126 + frame[i++] * 0.7152 + frame[i++] * 0.0722);\n hist[luma % 32]++;\n }\n let ind = -1, maxCount = 0;\n for (let i = 0; i < MAX_SCALE; i++) {\n if (hist[i] > maxCount) {\n maxCount = hist[i];\n ind = i;\n }\n }\n canvasEl.remove();\n if (ind === 0)\n return IlluminationState.DARK;\n if (ind === MAX_SCALE)\n return IlluminationState.BRIGHT;\n return IlluminationState.NORMAL;\n }\n else {\n throw new Error('Cannot find Video Element.');\n }\n}\n/**\n * Checks if the provided media device is a virtual camera.\n * @param device\n */\nfunction isCameraDeviceVirtual(device) {\n return device.label.toLowerCase().includes('virtual');\n}\nconst INITIAL_ALPHA = 0.9;\nconst SECONDARY_ALPHA = 0.75;\nfunction fillFractionalContext({ ctx, prevColor, nextColor, fraction, }) {\n const canvasWidth = ctx.canvas.width;\n const canvasHeight = ctx.canvas.height;\n ctx.fillStyle = nextColor;\n ctx.fillRect(0, 0, canvasWidth, canvasHeight * fraction);\n if (fraction !== 1) {\n ctx.fillStyle = prevColor;\n ctx.fillRect(0, canvasHeight * fraction, canvasWidth, canvasHeight * (1 - fraction));\n }\n}\nfunction fillOverlayCanvasFractional({ overlayCanvas, prevColor, nextColor, videoEl, ovalDetails, heightFraction, scaleFactor, }) {\n const { x: videoX, y: videoY } = videoEl.getBoundingClientRect();\n const { flippedCenterX, centerY, width, height } = ovalDetails;\n const updatedCenterX = flippedCenterX * scaleFactor + videoX;\n const updatedCenterY = centerY * scaleFactor + videoY;\n const canvasWidth = overlayCanvas.width;\n const canvasHeight = overlayCanvas.height;\n const ctx = overlayCanvas.getContext('2d');\n if (ctx) {\n // Because the canvas is set to to 100% we need to manually set the height for the canvas to use pixel values\n ctx.canvas.width = window.innerWidth;\n ctx.canvas.height = window.innerHeight;\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n // fill the complete canvas\n fillFractionalContext({\n ctx,\n prevColor,\n nextColor,\n fraction: heightFraction,\n });\n // save the current state\n ctx.save();\n // draw the rectangle path and fill it\n ctx.beginPath();\n ctx.rect(0, 0, canvasWidth, canvasHeight);\n ctx.clip();\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx.globalAlpha = INITIAL_ALPHA;\n fillFractionalContext({\n ctx,\n prevColor,\n nextColor,\n fraction: heightFraction,\n });\n // draw the oval path and fill it\n ctx.beginPath();\n ctx.ellipse(updatedCenterX, updatedCenterY, (width * scaleFactor) / 2, (height * scaleFactor) / 2, 0, 0, 2 * Math.PI);\n // add stroke to the oval path\n ctx.strokeStyle = 'white';\n ctx.lineWidth = 8;\n ctx.stroke();\n ctx.clip();\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx.globalAlpha = SECONDARY_ALPHA;\n fillFractionalContext({\n ctx,\n prevColor,\n nextColor,\n fraction: heightFraction,\n });\n // restore the state\n ctx.restore();\n }\n else {\n throw new Error('Cannot find Overlay Canvas.');\n }\n}\nconst isClientFreshnessColorSequence = (obj) => !!obj;\nfunction getColorsSequencesFromSessionInformation(sessionInformation) {\n const colorSequenceFromSessionInfo = sessionInformation.Challenge.FaceMovementAndLightChallenge\n .ColorSequences ?? [];\n const colorSequences = colorSequenceFromSessionInfo.map(({ FreshnessColor, DownscrollDuration: downscrollDuration, FlatDisplayDuration: flatDisplayDuration, }) => {\n const colorArray = FreshnessColor.RGB;\n const color = `rgb(${colorArray[0]},${colorArray[1]},${colorArray[2]})`;\n return typeof color !== 'undefined' &&\n typeof downscrollDuration !== 'undefined' &&\n typeof flatDisplayDuration !== 'undefined'\n ? {\n color,\n downscrollDuration,\n flatDisplayDuration,\n }\n : undefined;\n });\n return colorSequences.filter(isClientFreshnessColorSequence);\n}\nfunction getRGBArrayFromColorString(colorStr) {\n return colorStr\n .slice(colorStr.indexOf('(') + 1, colorStr.indexOf(')'))\n .split(',')\n .map((str) => parseInt(str));\n}\nasync function getFaceMatchState(faceDetector, videoEl) {\n const detectedFaces = await faceDetector.detectFaces(videoEl);\n let faceMatchState;\n switch (detectedFaces.length) {\n case 0: {\n //no face detected;\n faceMatchState = FaceMatchState.CANT_IDENTIFY;\n break;\n }\n case 1: {\n //exactly one face detected, match face with oval;\n faceMatchState = FaceMatchState.FACE_IDENTIFIED;\n break;\n }\n default: {\n //more than one face detected ;\n faceMatchState = FaceMatchState.TOO_MANY;\n break;\n }\n }\n return faceMatchState;\n}\nasync function isFaceDistanceBelowThreshold({ faceDetector, videoEl, ovalDetails, reduceThreshold = false, isMobile = false, }) {\n const detectedFaces = await faceDetector.detectFaces(videoEl);\n let detectedFace;\n let isDistanceBelowThreshold = false;\n let error;\n switch (detectedFaces.length) {\n case 0: {\n //no face detected;\n error = LivenessErrorState.FACE_DISTANCE_ERROR;\n break;\n }\n case 1: {\n //exactly one face detected, match face with oval;\n detectedFace = detectedFaces[0];\n const { width } = ovalDetails;\n const { pupilDistance, faceHeight } = getPupilDistanceAndFaceHeight(detectedFace);\n const calibratedPupilDistance = (PUPIL_DISTANCE_WEIGHT * pupilDistance +\n FACE_HEIGHT_WEIGHT * faceHeight) /\n 2 /\n PUPIL_DISTANCE_WEIGHT;\n if (width) {\n isDistanceBelowThreshold =\n calibratedPupilDistance / width <\n (!reduceThreshold\n ? FACE_DISTANCE_THRESHOLD\n : isMobile\n ? REDUCED_THRESHOLD_MOBILE\n : REDUCED_THRESHOLD);\n if (!isDistanceBelowThreshold) {\n error = LivenessErrorState.FACE_DISTANCE_ERROR;\n }\n }\n break;\n }\n default: {\n //more than one face detected\n error = LivenessErrorState.MULTIPLE_FACES_ERROR;\n break;\n }\n }\n return { isDistanceBelowThreshold, error };\n}\nfunction getBoundingBox({ deviceHeight, deviceWidth, height, width, top, left, }) {\n return {\n Height: height / deviceHeight,\n Width: width / deviceWidth,\n Top: top / deviceHeight,\n Left: left / deviceWidth,\n };\n}\n\nexport { clearOvalCanvas, drawLivenessOvalInCanvas, drawStaticOval, estimateIllumination, fillOverlayCanvasFractional, generateBboxFromLandmarks, getBoundingBox, getColorsSequencesFromSessionInformation, getFaceMatchState, getIntersectionOverUnion, getOvalBoundingBox, getOvalDetailsFromSessionInformation, getRGBArrayFromColorString, getStaticLivenessOvalDetails, isCameraDeviceVirtual, isClientFreshnessColorSequence, isFaceDistanceBelowThreshold };\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const EPSILON_FLOAT32 = 1e-7;\nexport const EPSILON_FLOAT16 = 1e-4;\n/** Convenient class for storing tensor-related data. */\nexport class DataStorage {\n constructor(backend, dataMover) {\n this.backend = backend;\n this.dataMover = dataMover;\n this.data = new WeakMap();\n this.dataIdsCount = 0;\n }\n get(dataId) {\n if (!this.data.has(dataId)) {\n this.dataMover.moveData(this.backend, dataId);\n }\n return this.data.get(dataId);\n }\n set(dataId, value) {\n this.dataIdsCount++;\n this.data.set(dataId, value);\n }\n has(dataId) {\n return this.data.has(dataId);\n }\n delete(dataId) {\n this.dataIdsCount--;\n return this.data.delete(dataId);\n }\n numDataIds() {\n return this.dataIdsCount;\n }\n}\n/**\n * The interface that defines the kernels that should be implemented when\n * adding a new backend. New backends don't need to implement every one of the\n * methods, this can be done gradually (throw an error for unimplemented\n * methods).\n */\nexport class KernelBackend {\n refCount(dataId) {\n return notYetImplemented('refCount');\n }\n incRef(dataId) {\n return notYetImplemented('incRef');\n }\n timerAvailable() {\n return true;\n }\n time(f) {\n return notYetImplemented('time');\n }\n read(dataId) {\n return notYetImplemented('read');\n }\n readSync(dataId) {\n return notYetImplemented('readSync');\n }\n readToGPU(dataId, options) {\n return notYetImplemented('readToGPU');\n }\n numDataIds() {\n return notYetImplemented('numDataIds');\n }\n disposeData(dataId, force) {\n return notYetImplemented('disposeData');\n }\n write(values, shape, dtype) {\n return notYetImplemented('write');\n }\n move(dataId, values, shape, dtype, refCount) {\n return notYetImplemented('move');\n }\n createTensorFromGPUData(values, shape, dtype) {\n return notYetImplemented('createTensorFromGPUData');\n }\n memory() {\n return notYetImplemented('memory');\n }\n /** Returns the highest precision for floats in bits (e.g. 16 or 32) */\n floatPrecision() {\n return notYetImplemented('floatPrecision');\n }\n /** Returns the smallest representable number. */\n epsilon() {\n return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n }\n dispose() {\n return notYetImplemented('dispose');\n }\n}\nfunction notYetImplemented(kernelName) {\n throw new Error(`'${kernelName}' not yet implemented or not found in the registry. ` +\n `This kernel may not be supported by the tfjs backend you have chosen`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvYmFja2VuZHMvYmFja2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFNSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUF1QnBDLHdEQUF3RDtBQUN4RCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFvQixPQUFzQixFQUFVLFNBQW9CO1FBQXBELFlBQU8sR0FBUCxPQUFPLENBQWU7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBSGhFLFNBQUksR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRWtELENBQUM7SUFFNUUsR0FBRyxDQUFDLE1BQWM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLEtBQVE7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBaUJEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsUUFBUSxDQUFDLE1BQWM7UUFDckIsT0FBTyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQWM7UUFDbkIsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFhO1FBQ2hCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFjO1FBQ2pCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELFFBQVEsQ0FBQyxNQUFjO1FBQ3JCLE9BQU8saUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFjLEVBQUUsT0FBMEI7UUFDbEQsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFjLEVBQUUsS0FBZTtRQUN6QyxPQUFPLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxLQUFLLENBQUMsTUFBcUIsRUFBRSxLQUFlLEVBQUUsS0FBZTtRQUMzRCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxJQUFJLENBQ0EsTUFBYyxFQUFFLE1BQXFCLEVBQUUsS0FBZSxFQUFFLEtBQWUsRUFDdkUsUUFBZ0I7UUFDbEIsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCLENBQ25CLE1BQTRCLEVBQUUsS0FBZSxFQUFFLEtBQWU7UUFDaEUsT0FBTyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsdUVBQXVFO0lBQ3ZFLGNBQWM7UUFDWixPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGtEQUFrRDtJQUNsRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxVQUFrQjtJQUMzQyxNQUFNLElBQUksS0FBSyxDQUNYLElBQUksVUFBVSxzREFBc0Q7UUFDcEUsc0VBQXNFLENBQUMsQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JhY2tlbmQsIERhdGFUb0dQVU9wdGlvbnMsIEdQVURhdGEsIFRlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YUlkfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0JhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBXZWJHTERhdGEsIFdlYkdQVURhdGF9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IEVQU0lMT05fRkxPQVQzMiA9IDFlLTc7XG5leHBvcnQgY29uc3QgRVBTSUxPTl9GTE9BVDE2ID0gMWUtNDtcblxuLy8gUmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIGFsbCBiYWNrZW5kcy5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZFRpbWluZ0luZm8ge1xuICBrZXJuZWxNczogbnVtYmVyfHtlcnJvcjogc3RyaW5nfTtcbiAgZ2V0RXh0cmFQcm9maWxlSW5mbz8oKTogc3RyaW5nOyAgLy8gYSBmaWVsZCBmb3IgYWRkaXRpb25hbCB0aW1pbmcgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBwYWNraW5nIC8gdW5wYWNraW5nIGZvciBXZWJHTCBiYWNrZW5kXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yU3RvcmFnZSB7XG4gIHJlYWQoZGF0YUlkOiBEYXRhSWQpOiBQcm9taXNlPEJhY2tlbmRWYWx1ZXM+O1xuICByZWFkU3luYyhkYXRhSWQ6IERhdGFJZCk6IEJhY2tlbmRWYWx1ZXM7XG4gIGRpc3Bvc2VEYXRhKGRhdGFJZDogRGF0YUlkLCBmb3JjZT86IGJvb2xlYW4pOiBib29sZWFuO1xuICB3cml0ZSh2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKTogRGF0YUlkO1xuICBtb3ZlKFxuICAgICAgZGF0YUlkOiBEYXRhSWQsIHZhbHVlczogQmFja2VuZFZhbHVlcywgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRGF0YVR5cGUsXG4gICAgICByZWZDb3VudDogbnVtYmVyKTogdm9pZDtcbiAgbWVtb3J5KCk6IHt1bnJlbGlhYmxlOiBib29sZWFuO307ICAvLyBCYWNrZW5kLXNwZWNpZmljIGluZm9ybWF0aW9uLlxuICAvKiogUmV0dXJucyBudW1iZXIgb2YgZGF0YSBpZHMgY3VycmVudGx5IGluIHRoZSBzdG9yYWdlLiAqL1xuICBudW1EYXRhSWRzKCk6IG51bWJlcjtcbiAgcmVmQ291bnQoZGF0YUlkOiBEYXRhSWQpOiBudW1iZXI7XG59XG5cbi8qKiBDb252ZW5pZW50IGNsYXNzIGZvciBzdG9yaW5nIHRlbnNvci1yZWxhdGVkIGRhdGEuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JhZ2U8VD4ge1xuICBwcml2YXRlIGRhdGEgPSBuZXcgV2Vha01hcDxEYXRhSWQsIFQ+KCk7XG4gIHByaXZhdGUgZGF0YUlkc0NvdW50ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhY2tlbmQ6IEtlcm5lbEJhY2tlbmQsIHByaXZhdGUgZGF0YU1vdmVyOiBEYXRhTW92ZXIpIHt9XG5cbiAgZ2V0KGRhdGFJZDogRGF0YUlkKSB7XG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzKGRhdGFJZCkpIHtcbiAgICAgIHRoaXMuZGF0YU1vdmVyLm1vdmVEYXRhKHRoaXMuYmFja2VuZCwgZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoZGF0YUlkKTtcbiAgfVxuXG4gIHNldChkYXRhSWQ6IERhdGFJZCwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFJZHNDb3VudCsrO1xuICAgIHRoaXMuZGF0YS5zZXQoZGF0YUlkLCB2YWx1ZSk7XG4gIH1cblxuICBoYXMoZGF0YUlkOiBEYXRhSWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmhhcyhkYXRhSWQpO1xuICB9XG5cbiAgZGVsZXRlKGRhdGFJZDogRGF0YUlkKTogYm9vbGVhbiB7XG4gICAgdGhpcy5kYXRhSWRzQ291bnQtLTtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmRlbGV0ZShkYXRhSWQpO1xuICB9XG5cbiAgbnVtRGF0YUlkcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFJZHNDb3VudDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFNb3ZlciB7XG4gIC8qKlxuICAgKiBUbyBiZSBjYWxsZWQgYnkgYmFja2VuZHMgd2hlbmV2ZXIgdGhleSBzZWUgYSBkYXRhSWQgdGhhdCB0aGV5IGRvbid0IG93bi5cbiAgICogVXBvbiBjYWxsaW5nIHRoaXMgbWV0aG9kLCB0aGUgbW92ZXIgd2lsbCBmZXRjaCB0aGUgdGVuc29yIGZyb20gYW5vdGhlclxuICAgKiBiYWNrZW5kIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBjdXJyZW50IGFjdGl2ZSBiYWNrZW5kLlxuICAgKi9cbiAgbW92ZURhdGEoYmFja2VuZDogS2VybmVsQmFja2VuZCwgZGF0YUlkOiBEYXRhSWQpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tlbmRUaW1lciB7XG4gIC8vIGNoZWNrIGlmIGJhY2tlbmQgdGltZXIgaXMgYXZhaWxhYmxlXG4gIHRpbWVyQXZhaWxhYmxlKCk6IGJvb2xlYW47XG4gIHRpbWUoZjogKCkgPT4gdm9pZCk6IFByb21pc2U8QmFja2VuZFRpbWluZ0luZm8+O1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgdGhhdCBkZWZpbmVzIHRoZSBrZXJuZWxzIHRoYXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIHdoZW5cbiAqIGFkZGluZyBhIG5ldyBiYWNrZW5kLiBOZXcgYmFja2VuZHMgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQgZXZlcnkgb25lIG9mIHRoZVxuICogbWV0aG9kcywgdGhpcyBjYW4gYmUgZG9uZSBncmFkdWFsbHkgKHRocm93IGFuIGVycm9yIGZvciB1bmltcGxlbWVudGVkXG4gKiBtZXRob2RzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEtlcm5lbEJhY2tlbmQgaW1wbGVtZW50cyBUZW5zb3JTdG9yYWdlLCBCYWNrZW5kLCBCYWNrZW5kVGltZXIge1xuICByZWZDb3VudChkYXRhSWQ6IERhdGFJZCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdyZWZDb3VudCcpO1xuICB9XG4gIGluY1JlZihkYXRhSWQ6IERhdGFJZCk6IHZvaWQge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnaW5jUmVmJyk7XG4gIH1cbiAgdGltZXJBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdGltZShmOiAoKSA9PiB2b2lkKTogUHJvbWlzZTxCYWNrZW5kVGltaW5nSW5mbz4ge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgndGltZScpO1xuICB9XG4gIHJlYWQoZGF0YUlkOiBvYmplY3QpOiBQcm9taXNlPEJhY2tlbmRWYWx1ZXM+IHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ3JlYWQnKTtcbiAgfVxuICByZWFkU3luYyhkYXRhSWQ6IG9iamVjdCk6IEJhY2tlbmRWYWx1ZXMge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgncmVhZFN5bmMnKTtcbiAgfVxuICByZWFkVG9HUFUoZGF0YUlkOiBvYmplY3QsIG9wdGlvbnM/OiBEYXRhVG9HUFVPcHRpb25zKTogR1BVRGF0YSB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdyZWFkVG9HUFUnKTtcbiAgfVxuICBudW1EYXRhSWRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdudW1EYXRhSWRzJyk7XG4gIH1cbiAgZGlzcG9zZURhdGEoZGF0YUlkOiBvYmplY3QsIGZvcmNlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnZGlzcG9zZURhdGEnKTtcbiAgfVxuICB3cml0ZSh2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKTogRGF0YUlkIHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ3dyaXRlJyk7XG4gIH1cbiAgbW92ZShcbiAgICAgIGRhdGFJZDogRGF0YUlkLCB2YWx1ZXM6IEJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgICAgcmVmQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHJldHVybiBub3RZZXRJbXBsZW1lbnRlZCgnbW92ZScpO1xuICB9XG5cbiAgY3JlYXRlVGVuc29yRnJvbUdQVURhdGEoXG4gICAgICB2YWx1ZXM6IFdlYkdMRGF0YXxXZWJHUFVEYXRhLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSk6IFRlbnNvciB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdjcmVhdGVUZW5zb3JGcm9tR1BVRGF0YScpO1xuICB9XG5cbiAgbWVtb3J5KCk6IHt1bnJlbGlhYmxlOiBib29sZWFuOyByZWFzb25zPzogc3RyaW5nW119IHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ21lbW9yeScpO1xuICB9XG4gIC8qKiBSZXR1cm5zIHRoZSBoaWdoZXN0IHByZWNpc2lvbiBmb3IgZmxvYXRzIGluIGJpdHMgKGUuZy4gMTYgb3IgMzIpICovXG4gIGZsb2F0UHJlY2lzaW9uKCk6IDE2fDMyIHtcbiAgICByZXR1cm4gbm90WWV0SW1wbGVtZW50ZWQoJ2Zsb2F0UHJlY2lzaW9uJyk7XG4gIH1cbiAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyLiAgKi9cbiAgZXBzaWxvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZsb2F0UHJlY2lzaW9uKCkgPT09IDMyID8gRVBTSUxPTl9GTE9BVDMyIDogRVBTSUxPTl9GTE9BVDE2O1xuICB9XG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgcmV0dXJuIG5vdFlldEltcGxlbWVudGVkKCdkaXNwb3NlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm90WWV0SW1wbGVtZW50ZWQoa2VybmVsTmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJyR7a2VybmVsTmFtZX0nIG5vdCB5ZXQgaW1wbGVtZW50ZWQgb3Igbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeS4gYCArXG4gICAgICBgVGhpcyBrZXJuZWwgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHRmanMgYmFja2VuZCB5b3UgaGF2ZSBjaG9zZW5gKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Shuffles the array in-place using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1, 2, 3, 4, 5];\n * tf.util.shuffle(a);\n * console.log(a);\n * ```\n *\n * @param array The array to shuffle in-place.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\n// tslint:disable-next-line:no-any\nexport function shuffle(array) {\n let counter = array.length;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n swap(array, counter, index);\n }\n}\n/**\n * Shuffles two arrays in-place the same way using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1,2,3,4,5];\n * const b = [11,22,33,44,55];\n * tf.util.shuffleCombo(a, b);\n * console.log(a, b);\n * ```\n *\n * @param array The first array to shuffle in-place.\n * @param array2 The second array to shuffle in-place with the same permutation\n * as the first array.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function shuffleCombo(\n// tslint:disable-next-line:no-any\narray, \n// tslint:disable-next-line:no-any\narray2) {\n if (array.length !== array2.length) {\n throw new Error(`Array sizes must match to be shuffled together ` +\n `First array length was ${array.length}` +\n `Second array length was ${array2.length}`);\n }\n let counter = array.length;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element of each array with it\n swap(array, counter, index);\n swap(array2, counter, index);\n }\n}\n/** Clamps a value to a specified range. */\nexport function clamp(min, x, max) {\n return Math.max(min, Math.min(x, max));\n}\nexport function nearestLargerEven(val) {\n return val % 2 === 0 ? val : val + 1;\n}\nexport function swap(object, left, right) {\n const temp = object[left];\n object[left] = object[right];\n object[right] = temp;\n}\nexport function sum(arr) {\n let sum = 0;\n for (let i = 0; i < arr.length; i++) {\n sum += arr[i];\n }\n return sum;\n}\n/**\n * Returns a sample from a uniform [a, b) distribution.\n *\n * @param a The minimum support (inclusive).\n * @param b The maximum support (exclusive).\n * @return A pseudorandom number on the half-open interval [a,b).\n */\nexport function randUniform(a, b) {\n const r = Math.random();\n return (b * r) + (1 - r) * a;\n}\n/** Returns the squared Euclidean distance between two vectors. */\nexport function distSquared(a, b) {\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = Number(a[i]) - Number(b[i]);\n result += diff * diff;\n }\n return result;\n}\n/**\n * Asserts that the expression is true. Otherwise throws an error with the\n * provided message.\n *\n * ```js\n * const x = 2;\n * tf.util.assert(x === 2, 'x is not 2');\n * ```\n *\n * @param expr The expression to assert (as a boolean).\n * @param msg A function that returns the message to report when throwing an\n * error. We use a function for performance reasons.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function assert(expr, msg) {\n if (!expr) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\nexport function assertShapesMatch(shapeA, shapeB, errorMessagePrefix = '') {\n assert(arraysEqual(shapeA, shapeB), () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n}\nexport function assertNonNull(a) {\n assert(a != null, () => `The input to the tensor constructor must be a non-null value.`);\n}\n/**\n * Returns the size (number of elements) of the tensor given its shape.\n *\n * ```js\n * const shape = [3, 4, 2];\n * const size = tf.util.sizeFromShape(shape);\n * console.log(size);\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function sizeFromShape(shape) {\n if (shape.length === 0) {\n // Scalar.\n return 1;\n }\n let size = shape[0];\n for (let i = 1; i < shape.length; i++) {\n size *= shape[i];\n }\n return size;\n}\nexport function isScalarShape(shape) {\n return shape.length === 0;\n}\nexport function arraysEqualWithNull(n1, n2) {\n if (n1 === n2) {\n return true;\n }\n if (n1 == null || n2 == null) {\n return false;\n }\n if (n1.length !== n2.length) {\n return false;\n }\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== null && n2[i] !== null && n1[i] !== n2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function arraysEqual(n1, n2) {\n if (n1 === n2) {\n return true;\n }\n if (n1 == null || n2 == null) {\n return false;\n }\n if (n1.length !== n2.length) {\n return false;\n }\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== n2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function isInt(a) {\n return a % 1 === 0;\n}\nexport function tanh(x) {\n // tslint:disable-next-line:no-any\n if (Math.tanh != null) {\n // tslint:disable-next-line:no-any\n return Math.tanh(x);\n }\n if (x === Infinity) {\n return 1;\n }\n else if (x === -Infinity) {\n return -1;\n }\n else {\n const e2x = Math.exp(2 * x);\n return (e2x - 1) / (e2x + 1);\n }\n}\nexport function sizeToSquarishShape(size) {\n const width = Math.ceil(Math.sqrt(size));\n return [width, Math.ceil(size / width)];\n}\n/**\n * Creates a new array with randomized indices to a given quantity.\n *\n * ```js\n * const randomTen = tf.util.createShuffledIndices(10);\n * console.log(randomTen);\n * ```\n *\n * @param number Quantity of how many shuffled indices to create.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function createShuffledIndices(n) {\n const shuffledIndices = new Uint32Array(n);\n for (let i = 0; i < n; ++i) {\n shuffledIndices[i] = i;\n }\n shuffle(shuffledIndices);\n return shuffledIndices;\n}\nexport function rightPad(a, size) {\n if (size <= a.length) {\n return a;\n }\n return a + ' '.repeat(size - a.length);\n}\nexport function repeatedTry(checkFn, delayFn = (counter) => 0, maxCounter, scheduleFn) {\n return new Promise((resolve, reject) => {\n let tryCount = 0;\n const tryFn = () => {\n if (checkFn()) {\n resolve();\n return;\n }\n tryCount++;\n const nextBackoff = delayFn(tryCount);\n if (maxCounter != null && tryCount >= maxCounter) {\n reject();\n return;\n }\n if (scheduleFn != null) {\n scheduleFn(tryFn, nextBackoff);\n }\n else {\n // google3 does not allow assigning another variable to setTimeout.\n // Don't refactor this so scheduleFn has a default value of setTimeout.\n setTimeout(tryFn, nextBackoff);\n }\n };\n tryFn();\n });\n}\n/**\n * Given the full size of the array and a shape that may contain -1 as the\n * implicit dimension, returns the inferred shape where -1 is replaced.\n * E.g. For shape=[2, -1, 3] and size=24, it will return [2, 4, 3].\n *\n * @param shape The shape, which may contain -1 in some dimension.\n * @param size The full size (number of elements) of the array.\n * @return The inferred shape where -1 is replaced with the inferred size.\n */\nexport function inferFromImplicitShape(shape, size) {\n let shapeProd = 1;\n let implicitIdx = -1;\n for (let i = 0; i < shape.length; ++i) {\n if (shape[i] >= 0) {\n shapeProd *= shape[i];\n }\n else if (shape[i] === -1) {\n if (implicitIdx !== -1) {\n throw Error(`Shapes can only have 1 implicit size. ` +\n `Found -1 at dim ${implicitIdx} and dim ${i}`);\n }\n implicitIdx = i;\n }\n else if (shape[i] < 0) {\n throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`);\n }\n }\n if (implicitIdx === -1) {\n if (size > 0 && size !== shapeProd) {\n throw Error(`Size(${size}) must match the product of shape ${shape}`);\n }\n return shape;\n }\n if (shapeProd === 0) {\n throw Error(`Cannot infer the missing size in [${shape}] when ` +\n `there are 0 elements`);\n }\n if (size % shapeProd !== 0) {\n throw Error(`The implicit shape can't be a fractional number. ` +\n `Got ${size} / ${shapeProd}`);\n }\n const newShape = shape.slice();\n newShape[implicitIdx] = size / shapeProd;\n return newShape;\n}\nexport function parseAxisParam(axis, shape) {\n const rank = shape.length;\n // Normalize input\n axis = axis == null ? shape.map((s, i) => i) : [].concat(axis);\n // Check for valid range\n assert(axis.every(ax => ax >= -rank && ax < rank), () => `All values in axis param must be in range [-${rank}, ${rank}) but ` +\n `got axis ${axis}`);\n // Check for only integers\n assert(axis.every(ax => isInt(ax)), () => `All values in axis param must be integers but ` +\n `got axis ${axis}`);\n // Handle negative axis.\n return axis.map(a => a < 0 ? rank + a : a);\n}\n/** Reduces the shape by removing all dimensions of shape 1. */\nexport function squeezeShape(shape, axis) {\n const newShape = [];\n const keptDims = [];\n const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0;\n const axes = (axis == null || isEmptyArray) ?\n null :\n parseAxisParam(axis, shape).sort();\n let j = 0;\n for (let i = 0; i < shape.length; ++i) {\n if (axes != null) {\n if (axes[j] === i && shape[i] !== 1) {\n throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`);\n }\n if ((axes[j] == null || axes[j] > i) && shape[i] === 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n if (axes[j] <= i) {\n j++;\n }\n }\n if (shape[i] !== 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n }\n return { newShape, keptDims };\n}\nexport function getTypedArrayFromDType(dtype, size) {\n return getArrayFromDType(dtype, size);\n}\nexport function getArrayFromDType(dtype, size) {\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else if (dtype === 'string') {\n values = new Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n return values;\n}\nexport function checkConversionForErrors(vals, dtype) {\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`);\n }\n }\n}\n/** Returns true if the dtype is valid. */\nexport function isValidDtype(dtype) {\n return dtype === 'bool' || dtype === 'complex64' || dtype === 'float32' ||\n dtype === 'int32' || dtype === 'string';\n}\n/**\n * Returns true if the new type can't encode the old type without loss of\n * precision.\n */\nexport function hasEncodingLoss(oldType, newType) {\n if (newType === 'complex64') {\n return false;\n }\n if (newType === 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'int32' && oldType !== 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'bool' && oldType === 'bool') {\n return false;\n }\n return true;\n}\nexport function bytesPerElement(dtype) {\n if (dtype === 'float32' || dtype === 'int32') {\n return 4;\n }\n else if (dtype === 'complex64') {\n return 8;\n }\n else if (dtype === 'bool') {\n return 1;\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\n/**\n * Returns the approximate number of bytes allocated in the string array - 2\n * bytes per character. Computing the exact bytes for a native string in JS\n * is not possible since it depends on the encoding of the html page that\n * serves the website.\n */\nexport function bytesFromStringArray(arr) {\n if (arr == null) {\n return 0;\n }\n let bytes = 0;\n arr.forEach(x => bytes += x.length);\n return bytes;\n}\n/** Returns true if the value is a string. */\nexport function isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\nexport function isBoolean(value) {\n return typeof value === 'boolean';\n}\nexport function isNumber(value) {\n return typeof value === 'number';\n}\nexport function inferDtype(values) {\n if (Array.isArray(values)) {\n return inferDtype(values[0]);\n }\n if (values instanceof Float32Array) {\n return 'float32';\n }\n else if (values instanceof Int32Array || values instanceof Uint8Array ||\n values instanceof Uint8ClampedArray) {\n return 'int32';\n }\n else if (isNumber(values)) {\n return 'float32';\n }\n else if (isString(values)) {\n return 'string';\n }\n else if (isBoolean(values)) {\n return 'bool';\n }\n return 'float32';\n}\nexport function isFunction(f) {\n return !!(f && f.constructor && f.call && f.apply);\n}\nexport function nearestDivisor(size, start) {\n for (let i = start; i < size; ++i) {\n if (size % i === 0) {\n return i;\n }\n }\n return size;\n}\nexport function computeStrides(shape) {\n const rank = shape.length;\n if (rank < 2) {\n return [];\n }\n // Last dimension has implicit stride of 1, thus having D-1 (instead of D)\n // strides.\n const strides = new Array(rank - 1);\n strides[rank - 2] = shape[rank - 1];\n for (let i = rank - 3; i >= 0; --i) {\n strides[i] = strides[i + 1] * shape[i + 1];\n }\n return strides;\n}\nfunction createNestedArray(offset, shape, a, isComplex = false) {\n const ret = new Array();\n if (shape.length === 1) {\n const d = shape[0] * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = a[offset + i];\n }\n }\n else {\n const d = shape[0];\n const rest = shape.slice(1);\n const len = rest.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = createNestedArray(offset + i * len, rest, a, isComplex);\n }\n }\n return ret;\n}\n// Provide a nested array of TypedArray in given shape.\nexport function toNestedArray(shape, a, isComplex = false) {\n if (shape.length === 0) {\n // Scalar type should return a single number.\n return a[0];\n }\n const size = shape.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n if (size === 0) {\n // A tensor with shape zero should be turned into empty list.\n return [];\n }\n if (size !== a.length) {\n throw new Error(`[${shape}] does not match the input size ${a.length}${isComplex ? ' for a complex tensor' : ''}.`);\n }\n return createNestedArray(0, shape, a, isComplex);\n}\nexport function convertBackendValuesAndArrayBuffer(data, dtype) {\n // If is type Uint8Array[], return it directly.\n if (Array.isArray(data)) {\n return data;\n }\n if (dtype === 'float32') {\n return data instanceof Float32Array ? data : new Float32Array(data);\n }\n else if (dtype === 'int32') {\n return data instanceof Int32Array ? data : new Int32Array(data);\n }\n else if (dtype === 'bool' || dtype === 'string') {\n return Uint8Array.from(new Int32Array(data));\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\nexport function makeOnesTypedArray(size, dtype) {\n const array = makeZerosTypedArray(size, dtype);\n for (let i = 0; i < array.length; i++) {\n array[i] = 1;\n }\n return array;\n}\nexport function makeZerosTypedArray(size, dtype) {\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(size);\n }\n else if (dtype === 'int32') {\n return new Int32Array(size);\n }\n else if (dtype === 'bool') {\n return new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Make nested `TypedArray` filled with zeros.\n * @param shape The shape information for the nested array.\n * @param dtype dtype of the array element.\n */\nexport function makeZerosNestedTypedArray(shape, dtype) {\n const size = shape.reduce((prev, curr) => prev * curr, 1);\n if (dtype == null || dtype === 'float32') {\n return toNestedArray(shape, new Float32Array(size));\n }\n else if (dtype === 'int32') {\n return toNestedArray(shape, new Int32Array(size));\n }\n else if (dtype === 'bool') {\n return toNestedArray(shape, new Uint8Array(size));\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\nexport function assertNonNegativeIntegerDimensions(shape) {\n shape.forEach(dimSize => {\n assert(Number.isInteger(dimSize) && dimSize >= 0, () => `Tensor must have a shape comprised of positive integers but got ` +\n `shape [${shape}].`);\n });\n}\n/**\n * Computes flat index for a given location (multidimentionsal index) in a\n * Tensor/multidimensional array.\n *\n * @param locs Location in the tensor.\n * @param rank Rank of the tensor.\n * @param strides Tensor strides.\n */\nexport function locToIndex(locs, rank, strides) {\n if (rank === 0) {\n return 0;\n }\n else if (rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += strides[i] * locs[i];\n }\n return index;\n}\n/**\n * Computes the location (multidimensional index) in a\n * tensor/multidimentional array for a given flat index.\n *\n * @param index Index in flat array.\n * @param rank Rank of tensor.\n * @param strides Strides of tensor.\n */\nexport function indexToLoc(index, rank, strides) {\n if (rank === 0) {\n return [];\n }\n else if (rank === 1) {\n return [index];\n }\n const locs = new Array(rank);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / strides[i]);\n index -= locs[i] * strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n}\n/**\n * This method asserts whether an object is a Promise instance.\n * @param object\n */\n// tslint:disable-next-line: no-any\nexport function isPromise(object) {\n // We chose to not use 'obj instanceOf Promise' for two reasons:\n // 1. It only reliably works for es6 Promise, not other Promise\n // implementations.\n // 2. It doesn't work with framework that uses zone.js. zone.js monkey\n // patch the async calls, so it is possible the obj (patched) is\n // comparing to a pre-patched Promise.\n return object && object.then && typeof object.then === 'function';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbF9iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy91dGlsX2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FDWTtJQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLHdDQUF3QztJQUN4QyxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDbEIsc0JBQXNCO1FBQ3RCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsd0JBQXdCO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO1FBQ1Ysb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxZQUFZO0FBQ3hCLGtDQUFrQztBQUNsQyxLQUFnRDtBQUNoRCxrQ0FBa0M7QUFDbEMsTUFBaUQ7SUFDbkQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxpREFBaUQ7WUFDakQsMEJBQTBCLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDeEMsMkJBQTJCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCx3Q0FBd0M7SUFDeEMsT0FBTyxPQUFPLEdBQUcsQ0FBQyxF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QUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDeEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQVc7SUFDbkMsaUVBQWlFO0lBQ2pFLGdFQUFnRTtJQUNoRSxvQkFBb0I7SUFDcEIsdUVBQXVFO0lBQ3ZFLGlFQUFpRTtJQUNqRSx1Q0FBdUM7SUFDdkMsT0FBTyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmFja2VuZFZhbHVlcywgRGF0YVR5cGUsIERhdGFUeXBlTWFwLCBGbGF0VmVjdG9yLCBOdW1lcmljRGF0YVR5cGUsIFRlbnNvckxpa2UsIFR5cGVkQXJyYXksIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2h1ZmZsZXMgdGhlIGFycmF5IGluLXBsYWNlIHVzaW5nIEZpc2hlci1ZYXRlcyBhbGdvcml0aG0uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSBbMSwgMiwgMywgNCwgNV07XG4gKiB0Zi51dGlsLnNodWZmbGUoYSk7XG4gKiBjb25zb2xlLmxvZyhhKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZSBpbi1wbGFjZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxcbiAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSk6IHZvaWQge1xuICBsZXQgY291bnRlciA9IGFycmF5Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgLy8gV2hpbGUgdGhlcmUgYXJlIGVsZW1lbnRzIGluIHRoZSBhcnJheVxuICB3aGlsZSAoY291bnRlciA+IDApIHtcbiAgICAvLyBQaWNrIGEgcmFuZG9tIGluZGV4XG4gICAgaW5kZXggPSAoTWF0aC5yYW5kb20oKSAqIGNvdW50ZXIpIHwgMDtcbiAgICAvLyBEZWNyZWFzZSBjb3VudGVyIGJ5IDFcbiAgICBjb3VudGVyLS07XG4gICAgLy8gQW5kIHN3YXAgdGhlIGxhc3QgZWxlbWVudCB3aXRoIGl0XG4gICAgc3dhcChhcnJheSwgY291bnRlciwgaW5kZXgpO1xuICB9XG59XG5cbi8qKlxuICogU2h1ZmZsZXMgdHdvIGFycmF5cyBpbi1wbGFjZSB0aGUgc2FtZSB3YXkgdXNpbmcgRmlzaGVyLVlhdGVzIGFsZ29yaXRobS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IFsxLDIsMyw0LDVdO1xuICogY29uc3QgYiA9IFsxMSwyMiwzMyw0NCw1NV07XG4gKiB0Zi51dGlsLnNodWZmbGVDb21ibyhhLCBiKTtcbiAqIGNvbnNvbGUubG9nKGEsIGIpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGFycmF5IFRoZSBmaXJzdCBhcnJheSB0byBzaHVmZmxlIGluLXBsYWNlLlxuICogQHBhcmFtIGFycmF5MiBUaGUgc2Vjb25kIGFycmF5IHRvIHNodWZmbGUgaW4tcGxhY2Ugd2l0aCB0aGUgc2FtZSBwZXJtdXRhdGlvblxuICogICAgIGFzIHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUNvbWJvKFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICBhcnJheTogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxGbG9hdDMyQXJyYXksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGFycmF5MjogYW55W118VWludDMyQXJyYXl8SW50MzJBcnJheXxGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgaWYgKGFycmF5Lmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFycmF5IHNpemVzIG11c3QgbWF0Y2ggdG8gYmUgc2h1ZmZsZWQgdG9nZXRoZXIgYCArXG4gICAgICAgIGBGaXJzdCBhcnJheSBsZW5ndGggd2FzICR7YXJyYXkubGVuZ3RofWAgK1xuICAgICAgICBgU2Vjb25kIGFycmF5IGxlbmd0aCB3YXMgJHthcnJheTIubGVuZ3RofWApO1xuICB9XG4gIGxldCBjb3VudGVyID0gYXJyYXkubGVuZ3RoO1xuICBsZXQgaW5kZXggPSAwO1xuICAvLyBXaGlsZSB0aGVyZSBhcmUgZWxlbWVudHMgaW4gdGhlIGFycmF5XG4gIHdoaWxlIChjb3VudGVyID4gMCkge1xuICAgIC8vIFBpY2sgYSByYW5kb20gaW5kZXhcbiAgICBpbmRleCA9IChNYXRoLnJhbmRvbSgpICogY291bnRlcikgfCAwO1xuICAgIC8vIERlY3JlYXNlIGNvdW50ZXIgYnkgMVxuICAgIGNvdW50ZXItLTtcbiAgICAvLyBBbmQgc3dhcCB0aGUgbGFzdCBlbGVtZW50IG9mIGVhY2ggYXJyYXkgd2l0aCBpdFxuICAgIHN3YXAoYXJyYXksIGNvdW50ZXIsIGluZGV4KTtcbiAgICBzd2FwKGFycmF5MiwgY291bnRlciwgaW5kZXgpO1xuICB9XG59XG5cbi8qKiBDbGFtcHMgYSB2YWx1ZSB0byBhIHNwZWNpZmllZCByYW5nZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChtaW46IG51bWJlciwgeDogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHgsIG1heCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVhcmVzdExhcmdlckV2ZW4odmFsOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdmFsICUgMiA9PT0gMCA/IHZhbCA6IHZhbCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzd2FwPFQ+KFxuICAgIG9iamVjdDoge1tpbmRleDogbnVtYmVyXTogVH0sIGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlcikge1xuICBjb25zdCB0ZW1wID0gb2JqZWN0W2xlZnRdO1xuICBvYmplY3RbbGVmdF0gPSBvYmplY3RbcmlnaHRdO1xuICBvYmplY3RbcmlnaHRdID0gdGVtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bShhcnI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgc3VtICs9IGFycltpXTtcbiAgfVxuICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzYW1wbGUgZnJvbSBhIHVuaWZvcm0gW2EsIGIpIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYSBUaGUgbWluaW11bSBzdXBwb3J0IChpbmNsdXNpdmUpLlxuICogQHBhcmFtIGIgVGhlIG1heGltdW0gc3VwcG9ydCAoZXhjbHVzaXZlKS5cbiAqIEByZXR1cm4gQSBwc2V1ZG9yYW5kb20gbnVtYmVyIG9uIHRoZSBoYWxmLW9wZW4gaW50ZXJ2YWwgW2EsYikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kVW5pZm9ybShhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICBjb25zdCByID0gTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIChiICogcikgKyAoMSAtIHIpICogYTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHNxdWFyZWQgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzdFNxdWFyZWQoYTogRmxhdFZlY3RvciwgYjogRmxhdFZlY3Rvcik6IG51bWJlciB7XG4gIGxldCByZXN1bHQgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkaWZmID0gTnVtYmVyKGFbaV0pIC0gTnVtYmVyKGJbaV0pO1xuICAgIHJlc3VsdCArPSBkaWZmICogZGlmZjtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLiBPdGhlcndpc2UgdGhyb3dzIGFuIGVycm9yIHdpdGggdGhlXG4gKiBwcm92aWRlZCBtZXNzYWdlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gMjtcbiAqIHRmLnV0aWwuYXNzZXJ0KHggPT09IDIsICd4IGlzIG5vdCAyJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZXhwciBUaGUgZXhwcmVzc2lvbiB0byBhc3NlcnQgKGFzIGEgYm9vbGVhbikuXG4gKiBAcGFyYW0gbXNnIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIHJlcG9ydCB3aGVuIHRocm93aW5nIGFuXG4gKiAgICAgZXJyb3IuIFdlIHVzZSBhIGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoZXhwcjogYm9vbGVhbiwgbXNnOiAoKSA9PiBzdHJpbmcpIHtcbiAgaWYgKCFleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnID8gbXNnIDogbXNnKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICBzaGFwZUE6IG51bWJlcltdLCBzaGFwZUI6IG51bWJlcltdLCBlcnJvck1lc3NhZ2VQcmVmaXggPSAnJyk6IHZvaWQge1xuICBhc3NlcnQoXG4gICAgICBhcnJheXNFcXVhbChzaGFwZUEsIHNoYXBlQiksXG4gICAgICAoKSA9PiBlcnJvck1lc3NhZ2VQcmVmaXggKyBgIFNoYXBlcyAke3NoYXBlQX0gYW5kICR7c2hhcGVCfSBtdXN0IG1hdGNoYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb25OdWxsKGE6IFRlbnNvckxpa2UpOiB2b2lkIHtcbiAgYXNzZXJ0KFxuICAgICAgYSAhPSBudWxsLFxuICAgICAgKCkgPT4gYFRoZSBpbnB1dCB0byB0aGUgdGVuc29yIGNvbnN0cnVjdG9yIG11c3QgYmUgYSBub24tbnVsbCB2YWx1ZS5gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzaXplIChudW1iZXIgb2YgZWxlbWVudHMpIG9mIHRoZSB0ZW5zb3IgZ2l2ZW4gaXRzIHNoYXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBzaGFwZSA9IFszLCA0LCAyXTtcbiAqIGNvbnN0IHNpemUgPSB0Zi51dGlsLnNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICogY29uc29sZS5sb2coc2l6ZSk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCcsIG5hbWVzcGFjZTogJ3V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZUZyb21TaGFwZShzaGFwZTogbnVtYmVyW10pOiBudW1iZXIge1xuICBpZiAoc2hhcGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gU2NhbGFyLlxuICAgIHJldHVybiAxO1xuICB9XG4gIGxldCBzaXplID0gc2hhcGVbMF07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICBzaXplICo9IHNoYXBlW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY2FsYXJTaGFwZShzaGFwZTogbnVtYmVyW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIHNoYXBlLmxlbmd0aCA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5c0VxdWFsV2l0aE51bGwobjE6IG51bWJlcltdLCBuMjogbnVtYmVyW10pIHtcbiAgaWYgKG4xID09PSBuMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG4xID09IG51bGwgfHwgbjIgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuMS5sZW5ndGggIT09IG4yLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobjFbaV0gIT09IG51bGwgJiYgbjJbaV0gIT09IG51bGwgJiYgbjFbaV0gIT09IG4yW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzRXF1YWwobjE6IEZsYXRWZWN0b3IsIG4yOiBGbGF0VmVjdG9yKSB7XG4gIGlmIChuMSA9PT0gbjIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAobjEgPT0gbnVsbCB8fCBuMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG4xLmxlbmd0aCAhPT0gbjIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobjFbaV0gIT09IG4yW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnQoYTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhICUgMSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmgoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBpZiAoKE1hdGggYXMgYW55KS50YW5oICE9IG51bGwpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgcmV0dXJuIChNYXRoIGFzIGFueSkudGFuaCh4KTtcbiAgfVxuICBpZiAoeCA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmICh4ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZTJ4ID0gTWF0aC5leHAoMiAqIHgpO1xuICAgIHJldHVybiAoZTJ4IC0gMSkgLyAoZTJ4ICsgMSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpemVUb1NxdWFyaXNoU2hhcGUoc2l6ZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IHdpZHRoID0gTWF0aC5jZWlsKE1hdGguc3FydChzaXplKSk7XG4gIHJldHVybiBbd2lkdGgsIE1hdGguY2VpbChzaXplIC8gd2lkdGgpXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggcmFuZG9taXplZCBpbmRpY2VzIHRvIGEgZ2l2ZW4gcXVhbnRpdHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJhbmRvbVRlbiA9IHRmLnV0aWwuY3JlYXRlU2h1ZmZsZWRJbmRpY2VzKDEwKTtcbiAqIGNvbnNvbGUubG9nKHJhbmRvbVRlbik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbnVtYmVyIFF1YW50aXR5IG9mIGhvdyBtYW55IHNodWZmbGVkIGluZGljZXMgdG8gY3JlYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaHVmZmxlZEluZGljZXMobjogbnVtYmVyKTogVWludDMyQXJyYXkge1xuICBjb25zdCBzaHVmZmxlZEluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgc2h1ZmZsZWRJbmRpY2VzW2ldID0gaTtcbiAgfVxuICBzaHVmZmxlKHNodWZmbGVkSW5kaWNlcyk7XG4gIHJldHVybiBzaHVmZmxlZEluZGljZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFBhZChhOiBzdHJpbmcsIHNpemU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChzaXplIDw9IGEubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cbiAgcmV0dXJuIGEgKyAnICcucmVwZWF0KHNpemUgLSBhLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZFRyeShcbiAgICBjaGVja0ZuOiAoKSA9PiBib29sZWFuLCBkZWxheUZuID0gKGNvdW50ZXI6IG51bWJlcikgPT4gMCxcbiAgICBtYXhDb3VudGVyPzogbnVtYmVyLFxuICAgIHNjaGVkdWxlRm4/OiAoZnVuY3Rpb25SZWY6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKSA9PlxuICAgICAgICB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IHRyeUNvdW50ID0gMDtcblxuICAgIGNvbnN0IHRyeUZuID0gKCkgPT4ge1xuICAgICAgaWYgKGNoZWNrRm4oKSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5Q291bnQrKztcblxuICAgICAgY29uc3QgbmV4dEJhY2tvZmYgPSBkZWxheUZuKHRyeUNvdW50KTtcblxuICAgICAgaWYgKG1heENvdW50ZXIgIT0gbnVsbCAmJiB0cnlDb3VudCA+PSBtYXhDb3VudGVyKSB7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlZHVsZUZuICE9IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVGbih0cnlGbiwgbmV4dEJhY2tvZmYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ29vZ2xlMyBkb2VzIG5vdCBhbGxvdyBhc3NpZ25pbmcgYW5vdGhlciB2YXJpYWJsZSB0byBzZXRUaW1lb3V0LlxuICAgICAgICAvLyBEb24ndCByZWZhY3RvciB0aGlzIHNvIHNjaGVkdWxlRm4gaGFzIGEgZGVmYXVsdCB2YWx1ZSBvZiBzZXRUaW1lb3V0LlxuICAgICAgICBzZXRUaW1lb3V0KHRyeUZuLCBuZXh0QmFja29mZik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRyeUZuKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBmdWxsIHNpemUgb2YgdGhlIGFycmF5IGFuZCBhIHNoYXBlIHRoYXQgbWF5IGNvbnRhaW4gLTEgYXMgdGhlXG4gKiBpbXBsaWNpdCBkaW1lbnNpb24sIHJldHVybnMgdGhlIGluZmVycmVkIHNoYXBlIHdoZXJlIC0xIGlzIHJlcGxhY2VkLlxuICogRS5nLiBGb3Igc2hhcGU9WzIsIC0xLCAzXSBhbmQgc2l6ZT0yNCwgaXQgd2lsbCByZXR1cm4gWzIsIDQsIDNdLlxuICpcbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUsIHdoaWNoIG1heSBjb250YWluIC0xIGluIHNvbWUgZGltZW5zaW9uLlxuICogQHBhcmFtIHNpemUgVGhlIGZ1bGwgc2l6ZSAobnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgYXJyYXkuXG4gKiBAcmV0dXJuIFRoZSBpbmZlcnJlZCBzaGFwZSB3aGVyZSAtMSBpcyByZXBsYWNlZCB3aXRoIHRoZSBpbmZlcnJlZCBzaXplLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJGcm9tSW1wbGljaXRTaGFwZShcbiAgICBzaGFwZTogbnVtYmVyW10sIHNpemU6IG51bWJlcik6IG51bWJlcltdIHtcbiAgbGV0IHNoYXBlUHJvZCA9IDE7XG4gIGxldCBpbXBsaWNpdElkeCA9IC0xO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoc2hhcGVbaV0gPj0gMCkge1xuICAgICAgc2hhcGVQcm9kICo9IHNoYXBlW2ldO1xuICAgIH0gZWxzZSBpZiAoc2hhcGVbaV0gPT09IC0xKSB7XG4gICAgICBpZiAoaW1wbGljaXRJZHggIT09IC0xKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgYFNoYXBlcyBjYW4gb25seSBoYXZlIDEgaW1wbGljaXQgc2l6ZS4gYCArXG4gICAgICAgICAgICBgRm91bmQgLTEgYXQgZGltICR7aW1wbGljaXRJZHh9IGFuZCBkaW0gJHtpfWApO1xuICAgICAgfVxuICAgICAgaW1wbGljaXRJZHggPSBpO1xuICAgIH0gZWxzZSBpZiAoc2hhcGVbaV0gPCAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2hhcGVzIGNhbiBub3QgYmUgPCAwLiBGb3VuZCAke3NoYXBlW2ldfSBhdCBkaW0gJHtpfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbXBsaWNpdElkeCA9PT0gLTEpIHtcbiAgICBpZiAoc2l6ZSA+IDAgJiYgc2l6ZSAhPT0gc2hhcGVQcm9kKSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2l6ZSgke3NpemV9KSBtdXN0IG1hdGNoIHRoZSBwcm9kdWN0IG9mIHNoYXBlICR7c2hhcGV9YCk7XG4gICAgfVxuICAgIHJldHVybiBzaGFwZTtcbiAgfVxuXG4gIGlmIChzaGFwZVByb2QgPT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBpbmZlciB0aGUgbWlzc2luZyBzaXplIGluIFske3NoYXBlfV0gd2hlbiBgICtcbiAgICAgICAgYHRoZXJlIGFyZSAwIGVsZW1lbnRzYCk7XG4gIH1cbiAgaWYgKHNpemUgJSBzaGFwZVByb2QgIT09IDApIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFRoZSBpbXBsaWNpdCBzaGFwZSBjYW4ndCBiZSBhIGZyYWN0aW9uYWwgbnVtYmVyLiBgICtcbiAgICAgICAgYEdvdCAke3NpemV9IC8gJHtzaGFwZVByb2R9YCk7XG4gIH1cblxuICBjb25zdCBuZXdTaGFwZSA9IHNoYXBlLnNsaWNlKCk7XG4gIG5ld1NoYXBlW2ltcGxpY2l0SWR4XSA9IHNpemUgLyBzaGFwZVByb2Q7XG4gIHJldHVybiBuZXdTaGFwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXhpc1BhcmFtKFxuICAgIGF4aXM6IG51bWJlcnxudW1iZXJbXSwgc2hhcGU6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCByYW5rID0gc2hhcGUubGVuZ3RoO1xuXG4gIC8vIE5vcm1hbGl6ZSBpbnB1dFxuICBheGlzID0gYXhpcyA9PSBudWxsID8gc2hhcGUubWFwKChzLCBpKSA9PiBpKSA6IFtdLmNvbmNhdChheGlzKTtcblxuICAvLyBDaGVjayBmb3IgdmFsaWQgcmFuZ2VcbiAgYXNzZXJ0KFxuICAgICAgYXhpcy5ldmVyeShheCA9PiBheCA+PSAtcmFuayAmJiBheCA8IHJhbmspLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgQWxsIHZhbHVlcyBpbiBheGlzIHBhcmFtIG11c3QgYmUgaW4gcmFuZ2UgWy0ke3Jhbmt9LCAke3Jhbmt9KSBidXQgYCArXG4gICAgICAgICAgYGdvdCBheGlzICR7YXhpc31gKTtcblxuICAvLyBDaGVjayBmb3Igb25seSBpbnRlZ2Vyc1xuICBhc3NlcnQoXG4gICAgICBheGlzLmV2ZXJ5KGF4ID0+IGlzSW50KGF4KSksXG4gICAgICAoKSA9PiBgQWxsIHZhbHVlcyBpbiBheGlzIHBhcmFtIG11c3QgYmUgaW50ZWdlcnMgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgYXhpcyAke2F4aXN9YCk7XG5cbiAgLy8gSGFuZGxlIG5lZ2F0aXZlIGF4aXMuXG4gIHJldHVybiBheGlzLm1hcChhID0+IGEgPCAwID8gcmFuayArIGEgOiBhKTtcbn1cblxuLyoqIFJlZHVjZXMgdGhlIHNoYXBlIGJ5IHJlbW92aW5nIGFsbCBkaW1lbnNpb25zIG9mIHNoYXBlIDEuICovXG5leHBvcnQgZnVuY3Rpb24gc3F1ZWV6ZVNoYXBlKHNoYXBlOiBudW1iZXJbXSwgYXhpcz86IG51bWJlcltdKTpcbiAgICB7bmV3U2hhcGU6IG51bWJlcltdLCBrZXB0RGltczogbnVtYmVyW119IHtcbiAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGtlcHREaW1zOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBpc0VtcHR5QXJyYXkgPSBheGlzICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheShheGlzKSAmJiBheGlzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgYXhlcyA9IChheGlzID09IG51bGwgfHwgaXNFbXB0eUFycmF5KSA/XG4gICAgICBudWxsIDpcbiAgICAgIHBhcnNlQXhpc1BhcmFtKGF4aXMsIHNoYXBlKS5zb3J0KCk7XG4gIGxldCBqID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChheGVzICE9IG51bGwpIHtcbiAgICAgIGlmIChheGVzW2pdID09PSBpICYmIHNoYXBlW2ldICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW4ndCBzcXVlZXplIGF4aXMgJHtpfSBzaW5jZSBpdHMgZGltICcke3NoYXBlW2ldfScgaXMgbm90IDFgKTtcbiAgICAgIH1cbiAgICAgIGlmICgoYXhlc1tqXSA9PSBudWxsIHx8IGF4ZXNbal0gPiBpKSAmJiBzaGFwZVtpXSA9PT0gMSkge1xuICAgICAgICBuZXdTaGFwZS5wdXNoKHNoYXBlW2ldKTtcbiAgICAgICAga2VwdERpbXMucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGlmIChheGVzW2pdIDw9IGkpIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hhcGVbaV0gIT09IDEpIHtcbiAgICAgIG5ld1NoYXBlLnB1c2goc2hhcGVbaV0pO1xuICAgICAga2VwdERpbXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtuZXdTaGFwZSwga2VwdERpbXN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZWRBcnJheUZyb21EVHlwZTxEIGV4dGVuZHMgTnVtZXJpY0RhdGFUeXBlPihcbiAgICBkdHlwZTogRCwgc2l6ZTogbnVtYmVyKTogRGF0YVR5cGVNYXBbRF0ge1xuICByZXR1cm4gZ2V0QXJyYXlGcm9tRFR5cGU8RD4oZHR5cGUsIHNpemUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJyYXlGcm9tRFR5cGU8RCBleHRlbmRzIERhdGFUeXBlPihcbiAgICBkdHlwZTogRCwgc2l6ZTogbnVtYmVyKTogRGF0YVR5cGVNYXBbRF0ge1xuICBsZXQgdmFsdWVzID0gbnVsbDtcbiAgaWYgKGR0eXBlID09IG51bGwgfHwgZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICB2YWx1ZXMgPSBuZXcgSW50MzJBcnJheShzaXplKTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgdmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWVzID0gbmV3IEFycmF5PHN0cmluZz4oc2l6ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIHJldHVybiB2YWx1ZXMgYXMgRGF0YVR5cGVNYXBbRF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbnZlcnNpb25Gb3JFcnJvcnM8RCBleHRlbmRzIERhdGFUeXBlPihcbiAgICB2YWxzOiBEYXRhVHlwZU1hcFtEXXxudW1iZXJbXSwgZHR5cGU6IEQpOiB2b2lkIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbnVtID0gdmFsc1tpXSBhcyBudW1iZXI7XG4gICAgaWYgKGlzTmFOKG51bSkgfHwgIWlzRmluaXRlKG51bSkpIHtcbiAgICAgIHRocm93IEVycm9yKGBBIHRlbnNvciBvZiB0eXBlICR7ZHR5cGV9IGJlaW5nIHVwbG9hZGVkIGNvbnRhaW5zICR7bnVtfS5gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZHR5cGUgaXMgdmFsaWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZER0eXBlKGR0eXBlOiBEYXRhVHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZHR5cGUgPT09ICdib29sJyB8fCBkdHlwZSA9PT0gJ2NvbXBsZXg2NCcgfHwgZHR5cGUgPT09ICdmbG9hdDMyJyB8fFxuICAgICAgZHR5cGUgPT09ICdpbnQzMicgfHwgZHR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmV3IHR5cGUgY2FuJ3QgZW5jb2RlIHRoZSBvbGQgdHlwZSB3aXRob3V0IGxvc3Mgb2ZcbiAqIHByZWNpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VuY29kaW5nTG9zcyhvbGRUeXBlOiBEYXRhVHlwZSwgbmV3VHlwZTogRGF0YVR5cGUpOiBib29sZWFuIHtcbiAgaWYgKG5ld1R5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChuZXdUeXBlID09PSAnZmxvYXQzMicgJiYgb2xkVHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG5ld1R5cGUgPT09ICdpbnQzMicgJiYgb2xkVHlwZSAhPT0gJ2Zsb2F0MzInICYmIG9sZFR5cGUgIT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChuZXdUeXBlID09PSAnYm9vbCcgJiYgb2xkVHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNQZXJFbGVtZW50KGR0eXBlOiBEYXRhVHlwZSk6IG51bWJlciB7XG4gIGlmIChkdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgcmV0dXJuIDQ7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIDg7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkdHlwZSAke2R0eXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBpbiB0aGUgc3RyaW5nIGFycmF5IC0gMlxuICogYnl0ZXMgcGVyIGNoYXJhY3Rlci4gQ29tcHV0aW5nIHRoZSBleGFjdCBieXRlcyBmb3IgYSBuYXRpdmUgc3RyaW5nIGluIEpTXG4gKiBpcyBub3QgcG9zc2libGUgc2luY2UgaXQgZGVwZW5kcyBvbiB0aGUgZW5jb2Rpbmcgb2YgdGhlIGh0bWwgcGFnZSB0aGF0XG4gKiBzZXJ2ZXMgdGhlIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlc0Zyb21TdHJpbmdBcnJheShhcnI6IFVpbnQ4QXJyYXlbXSk6IG51bWJlciB7XG4gIGlmIChhcnIgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCBieXRlcyA9IDA7XG4gIGFyci5mb3JFYWNoKHggPT4gYnl0ZXMgKz0geC5sZW5ndGgpO1xuICByZXR1cm4gYnl0ZXM7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiB7fSk6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcih2YWx1ZToge30pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlckR0eXBlKHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSk6IERhdGFUeXBlIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIHJldHVybiBpbmZlckR0eXBlKHZhbHVlc1swXSk7XG4gIH1cbiAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiAnZmxvYXQzMic7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB2YWx1ZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8IHZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHxcbiAgICAgIHZhbHVlcyBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgcmV0dXJuICdpbnQzMic7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIodmFsdWVzKSkge1xuICAgIHJldHVybiAnZmxvYXQzMic7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWVzKSkge1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW4odmFsdWVzKSkge1xuICAgIHJldHVybiAnYm9vbCc7XG4gIH1cbiAgcmV0dXJuICdmbG9hdDMyJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24oZjogRnVuY3Rpb24pIHtcbiAgcmV0dXJuICEhKGYgJiYgZi5jb25zdHJ1Y3RvciAmJiBmLmNhbGwgJiYgZi5hcHBseSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWFyZXN0RGl2aXNvcihzaXplOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzaXplOyArK2kpIHtcbiAgICBpZiAoc2l6ZSAlIGkgPT09IDApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdHJpZGVzKHNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgaWYgKHJhbmsgPCAyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gTGFzdCBkaW1lbnNpb24gaGFzIGltcGxpY2l0IHN0cmlkZSBvZiAxLCB0aHVzIGhhdmluZyBELTEgKGluc3RlYWQgb2YgRClcbiAgLy8gc3RyaWRlcy5cbiAgY29uc3Qgc3RyaWRlcyA9IG5ldyBBcnJheShyYW5rIC0gMSk7XG4gIHN0cmlkZXNbcmFuayAtIDJdID0gc2hhcGVbcmFuayAtIDFdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgc3RyaWRlc1tpXSA9IHN0cmlkZXNbaSArIDFdICogc2hhcGVbaSArIDFdO1xuICB9XG4gIHJldHVybiBzdHJpZGVzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXN0ZWRBcnJheShcbiAgICBvZmZzZXQ6IG51bWJlciwgc2hhcGU6IG51bWJlcltdLCBhOiBUeXBlZEFycmF5LCBpc0NvbXBsZXggPSBmYWxzZSkge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXkoKTtcbiAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGQgPSBzaGFwZVswXSAqIChpc0NvbXBsZXggPyAyIDogMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IGFbb2Zmc2V0ICsgaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGQgPSBzaGFwZVswXTtcbiAgICBjb25zdCByZXN0ID0gc2hhcGUuc2xpY2UoMSk7XG4gICAgY29uc3QgbGVuID0gcmVzdC5yZWR1Y2UoKGFjYywgYykgPT4gYWNjICogYykgKiAoaXNDb21wbGV4ID8gMiA6IDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBjcmVhdGVOZXN0ZWRBcnJheShvZmZzZXQgKyBpICogbGVuLCByZXN0LCBhLCBpc0NvbXBsZXgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vLyBQcm92aWRlIGEgbmVzdGVkIGFycmF5IG9mIFR5cGVkQXJyYXkgaW4gZ2l2ZW4gc2hhcGUuXG5leHBvcnQgZnVuY3Rpb24gdG9OZXN0ZWRBcnJheShcbiAgICBzaGFwZTogbnVtYmVyW10sIGE6IFR5cGVkQXJyYXksIGlzQ29tcGxleCA9IGZhbHNlKSB7XG4gIGlmIChzaGFwZS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBTY2FsYXIgdHlwZSBzaG91bGQgcmV0dXJuIGEgc2luZ2xlIG51bWJlci5cbiAgICByZXR1cm4gYVswXTtcbiAgfVxuICBjb25zdCBzaXplID0gc2hhcGUucmVkdWNlKChhY2MsIGMpID0+IGFjYyAqIGMpICogKGlzQ29tcGxleCA/IDIgOiAxKTtcbiAgaWYgKHNpemUgPT09IDApIHtcbiAgICAvLyBBIHRlbnNvciB3aXRoIHNoYXBlIHplcm8gc2hvdWxkIGJlIHR1cm5lZCBpbnRvIGVtcHR5IGxpc3QuXG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChzaXplICE9PSBhLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7c2hhcGV9XSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5wdXQgc2l6ZSAke2EubGVuZ3RofSR7XG4gICAgICAgIGlzQ29tcGxleCA/ICcgZm9yIGEgY29tcGxleCB0ZW5zb3InIDogJyd9LmApO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZU5lc3RlZEFycmF5KDAsIHNoYXBlLCBhLCBpc0NvbXBsZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEJhY2tlbmRWYWx1ZXNBbmRBcnJheUJ1ZmZlcihcbiAgICBkYXRhOiBCYWNrZW5kVmFsdWVzfEFycmF5QnVmZmVyLCBkdHlwZTogRGF0YVR5cGUpIHtcbiAgLy8gSWYgaXMgdHlwZSBVaW50OEFycmF5W10sIHJldHVybiBpdCBkaXJlY3RseS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBpZiAoZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgIHJldHVybiBkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ID8gZGF0YSA6IG5ldyBGbG9hdDMyQXJyYXkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkgPyBkYXRhIDogbmV3IEludDMyQXJyYXkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJyB8fCBkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKG5ldyBJbnQzMkFycmF5KGRhdGEpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZU9uZXNUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2l6ZTogbnVtYmVyLCBkdHlwZTogRCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgY29uc3QgYXJyYXkgPSBtYWtlWmVyb3NUeXBlZEFycmF5KHNpemUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGFycmF5W2ldID0gMTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlWmVyb3NUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2l6ZTogbnVtYmVyLCBkdHlwZTogRCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgaWYgKGR0eXBlID09IG51bGwgfHwgZHR5cGUgPT09ICdmbG9hdDMyJyB8fCBkdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShzaXplKSBhcyBEYXRhVHlwZU1hcFtEXTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2ludDMyJykge1xuICAgIHJldHVybiBuZXcgSW50MzJBcnJheShzaXplKSBhcyBEYXRhVHlwZU1hcFtEXTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpemUpIGFzIERhdGFUeXBlTWFwW0RdO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgbmVzdGVkIGBUeXBlZEFycmF5YCBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgaW5mb3JtYXRpb24gZm9yIHRoZSBuZXN0ZWQgYXJyYXkuXG4gKiBAcGFyYW0gZHR5cGUgZHR5cGUgb2YgdGhlIGFycmF5IGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlWmVyb3NOZXN0ZWRUeXBlZEFycmF5PEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRCkge1xuICBjb25zdCBzaXplID0gc2hhcGUucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICogY3VyciwgMSk7XG4gIGlmIChkdHlwZSA9PSBudWxsIHx8IGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IEZsb2F0MzJBcnJheShzaXplKSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IEludDMyQXJyYXkoc2l6ZSkpO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheShzaGFwZSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZTogbnVtYmVyW10pIHtcbiAgc2hhcGUuZm9yRWFjaChkaW1TaXplID0+IHtcbiAgICBhc3NlcnQoXG4gICAgICAgIE51bWJlci5pc0ludGVnZXIoZGltU2l6ZSkgJiYgZGltU2l6ZSA+PSAwLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgYFRlbnNvciBtdXN0IGhhdmUgYSBzaGFwZSBjb21wcmlzZWQgb2YgcG9zaXRpdmUgaW50ZWdlcnMgYnV0IGdvdCBgICtcbiAgICAgICAgICAgIGBzaGFwZSBbJHtzaGFwZX1dLmApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBmbGF0IGluZGV4IGZvciBhIGdpdmVuIGxvY2F0aW9uIChtdWx0aWRpbWVudGlvbnNhbCBpbmRleCkgaW4gYVxuICogVGVuc29yL211bHRpZGltZW5zaW9uYWwgYXJyYXkuXG4gKlxuICogQHBhcmFtIGxvY3MgTG9jYXRpb24gaW4gdGhlIHRlbnNvci5cbiAqIEBwYXJhbSByYW5rIFJhbmsgb2YgdGhlIHRlbnNvci5cbiAqIEBwYXJhbSBzdHJpZGVzIFRlbnNvciBzdHJpZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9jVG9JbmRleChcbiAgICBsb2NzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyLCBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmIChyYW5rID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAocmFuayA9PT0gMSkge1xuICAgIHJldHVybiBsb2NzWzBdO1xuICB9XG4gIGxldCBpbmRleCA9IGxvY3NbbG9jcy5sZW5ndGggLSAxXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGluZGV4ICs9IHN0cmlkZXNbaV0gKiBsb2NzW2ldO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9jYXRpb24gKG11bHRpZGltZW5zaW9uYWwgaW5kZXgpIGluIGFcbiAqIHRlbnNvci9tdWx0aWRpbWVudGlvbmFsIGFycmF5IGZvciBhIGdpdmVuIGZsYXQgaW5kZXguXG4gKlxuICogQHBhcmFtIGluZGV4IEluZGV4IGluIGZsYXQgYXJyYXkuXG4gKiBAcGFyYW0gcmFuayBSYW5rIG9mIHRlbnNvci5cbiAqIEBwYXJhbSBzdHJpZGVzIFN0cmlkZXMgb2YgdGVuc29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhUb0xvYyhcbiAgICBpbmRleDogbnVtYmVyLCByYW5rOiBudW1iZXIsIHN0cmlkZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBpZiAocmFuayA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfSBlbHNlIGlmIChyYW5rID09PSAxKSB7XG4gICAgcmV0dXJuIFtpbmRleF07XG4gIH1cbiAgY29uc3QgbG9jczogbnVtYmVyW10gPSBuZXcgQXJyYXkocmFuayk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICBsb2NzW2ldID0gTWF0aC5mbG9vcihpbmRleCAvIHN0cmlkZXNbaV0pO1xuICAgIGluZGV4IC09IGxvY3NbaV0gKiBzdHJpZGVzW2ldO1xuICB9XG4gIGxvY3NbbG9jcy5sZW5ndGggLSAxXSA9IGluZGV4O1xuICByZXR1cm4gbG9jcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBhc3NlcnRzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgUHJvbWlzZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSBvYmplY3RcbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb21pc2Uob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgUHJvbWlzZTx1bmtub3duPiB7XG4gIC8vICBXZSBjaG9zZSB0byBub3QgdXNlICdvYmogaW5zdGFuY2VPZiBQcm9taXNlJyBmb3IgdHdvIHJlYXNvbnM6XG4gIC8vICAxLiBJdCBvbmx5IHJlbGlhYmx5IHdvcmtzIGZvciBlczYgUHJvbWlzZSwgbm90IG90aGVyIFByb21pc2VcbiAgLy8gIGltcGxlbWVudGF0aW9ucy5cbiAgLy8gIDIuIEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZyYW1ld29yayB0aGF0IHVzZXMgem9uZS5qcy4gem9uZS5qcyBtb25rZXlcbiAgLy8gIHBhdGNoIHRoZSBhc3luYyBjYWxscywgc28gaXQgaXMgcG9zc2libGUgdGhlIG9iaiAocGF0Y2hlZCkgaXNcbiAgLy8gIGNvbXBhcmluZyB0byBhIHByZS1wYXRjaGVkIFByb21pc2UuXG4gIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LnRoZW4gJiYgdHlwZW9mIG9iamVjdC50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { isPromise } from './util_base';\n// Expects flags from URL in the format ?tfjsflags=FLAG1:1,FLAG2:true.\nconst TENSORFLOWJS_FLAGS_PREFIX = 'tfjsflags';\n/**\n * The environment contains evaluated flags as well as the registered platform.\n * This is always used as a global singleton and can be retrieved with\n * `tf.env()`.\n *\n * @doc {heading: 'Environment'}\n */\nexport class Environment {\n // tslint:disable-next-line: no-any\n constructor(global) {\n this.global = global;\n this.flags = {};\n this.flagRegistry = {};\n this.urlFlags = {};\n // Jasmine spies on this in 'environment_test.ts'\n this.getQueryParams = getQueryParams;\n this.populateURLFlags();\n }\n setPlatform(platformName, platform) {\n if (this.platform != null) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(`Platform ${this.platformName} has already been set. ` +\n `Overwriting the platform with ${platformName}.`);\n }\n }\n this.platformName = platformName;\n this.platform = platform;\n }\n registerFlag(flagName, evaluationFn, setHook) {\n this.flagRegistry[flagName] = { evaluationFn, setHook };\n // Override the flag value from the URL. This has to happen here because\n // the environment is initialized before flags get registered.\n if (this.urlFlags[flagName] != null) {\n const flagValue = this.urlFlags[flagName];\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(`Setting feature override from URL ${flagName}: ${flagValue}.`);\n }\n this.set(flagName, flagValue);\n }\n }\n async getAsync(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n this.flags[flagName] = await this.evaluateFlag(flagName);\n return this.flags[flagName];\n }\n get(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n const flagValue = this.evaluateFlag(flagName);\n if (isPromise(flagValue)) {\n throw new Error(`Flag ${flagName} cannot be synchronously evaluated. ` +\n `Please use getAsync() instead.`);\n }\n this.flags[flagName] = flagValue;\n return this.flags[flagName];\n }\n getNumber(flagName) {\n return this.get(flagName);\n }\n getBool(flagName) {\n return this.get(flagName);\n }\n getString(flagName) {\n return this.get(flagName);\n }\n getFlags() {\n return this.flags;\n }\n // For backwards compatibility.\n get features() {\n return this.flags;\n }\n set(flagName, value) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot set flag ${flagName} as it has not been registered.`);\n }\n this.flags[flagName] = value;\n if (this.flagRegistry[flagName].setHook != null) {\n this.flagRegistry[flagName].setHook(value);\n }\n }\n evaluateFlag(flagName) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot evaluate flag '${flagName}': no evaluation function found.`);\n }\n return this.flagRegistry[flagName].evaluationFn();\n }\n setFlags(flags) {\n this.flags = Object.assign({}, flags);\n }\n reset() {\n this.flags = {};\n this.urlFlags = {};\n this.populateURLFlags();\n }\n populateURLFlags() {\n if (typeof this.global === 'undefined' ||\n typeof this.global.location === 'undefined' ||\n typeof this.global.location.search === 'undefined') {\n return;\n }\n const urlParams = this.getQueryParams(this.global.location.search);\n if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) {\n const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(',');\n keyValues.forEach(keyValue => {\n const [key, value] = keyValue.split(':');\n this.urlFlags[key] = parseValue(key, value);\n });\n }\n }\n}\nexport function getQueryParams(queryString) {\n const params = {};\n queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => {\n decodeParam(params, t[0], t[1]);\n return t.join('=');\n });\n return params;\n}\nfunction decodeParam(params, name, value) {\n params[decodeURIComponent(name)] = decodeURIComponent(value || '');\n}\nfunction parseValue(flagName, value) {\n const lowerCaseValue = value.toLowerCase();\n if (lowerCaseValue === 'true' || lowerCaseValue === 'false') {\n return lowerCaseValue === 'true';\n }\n else if (`${+lowerCaseValue}` === lowerCaseValue) {\n return +lowerCaseValue;\n }\n else {\n return value;\n }\n}\n/**\n * Returns the current environment (a global singleton).\n *\n * The environment object contains the evaluated feature values as well as the\n * active platform.\n *\n * @doc {heading: 'Environment'}\n */\nexport function env() {\n return ENV;\n}\nexport let ENV = null;\nexport function setEnvironmentGlobal(environment) {\n ENV = environment;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsc0VBQXNFO0FBQ3RFLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDO0FBWTlDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBWXRCLG1DQUFtQztJQUNuQyxZQUFtQixNQUFXO1FBQVgsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQVp0QixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQTRDLEVBQUUsQ0FBQztRQUUzRCxhQUFRLEdBQVUsRUFBRSxDQUFDO1FBSzdCLGlEQUFpRDtRQUNqRCxtQkFBYyxHQUFHLGNBQWMsQ0FBQztRQUk5QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLFlBQW9CLEVBQUUsUUFBa0I7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQ1IsWUFBWSxJQUFJLENBQUMsWUFBWSx5QkFBeUI7b0JBQ3RELGlDQUFpQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxDQUNSLFFBQWdCLEVBQUUsWUFBOEIsRUFDaEQsT0FB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O0FBQ0gsTUFBTSxVQUFVLEdBQUc7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFnQixJQUFJLENBQUM7QUFDbkMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQXdCO0lBQzNELEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybXMvcGxhdGZvcm0nO1xuaW1wb3J0IHtpc1Byb21pc2V9IGZyb20gJy4vdXRpbF9iYXNlJztcblxuLy8gRXhwZWN0cyBmbGFncyBmcm9tIFVSTCBpbiB0aGUgZm9ybWF0ID90ZmpzZmxhZ3M9RkxBRzE6MSxGTEFHMjp0cnVlLlxuY29uc3QgVEVOU09SRkxPV0pTX0ZMQUdTX1BSRUZJWCA9ICd0ZmpzZmxhZ3MnO1xuXG50eXBlIEZsYWdWYWx1ZSA9IG51bWJlcnxib29sZWFufHN0cmluZztcbnR5cGUgRmxhZ0V2YWx1YXRpb25GbiA9ICgoKSA9PiBGbGFnVmFsdWUpfCgoKSA9PiBQcm9taXNlPEZsYWdWYWx1ZT4pO1xuZXhwb3J0IHR5cGUgRmxhZ3MgPSB7XG4gIFtmZWF0dXJlTmFtZTogc3RyaW5nXTogRmxhZ1ZhbHVlXG59O1xuZXhwb3J0IHR5cGUgRmxhZ1JlZ2lzdHJ5RW50cnkgPSB7XG4gIGV2YWx1YXRpb25GbjogRmxhZ0V2YWx1YXRpb25GbjtcbiAgc2V0SG9vaz86ICh2YWx1ZTogRmxhZ1ZhbHVlKSA9PiB2b2lkO1xufTtcblxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgY29udGFpbnMgZXZhbHVhdGVkIGZsYWdzIGFzIHdlbGwgYXMgdGhlIHJlZ2lzdGVyZWQgcGxhdGZvcm0uXG4gKiBUaGlzIGlzIGFsd2F5cyB1c2VkIGFzIGEgZ2xvYmFsIHNpbmdsZXRvbiBhbmQgY2FuIGJlIHJldHJpZXZlZCB3aXRoXG4gKiBgdGYuZW52KClgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdFbnZpcm9ubWVudCd9XG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHByaXZhdGUgZmxhZ3M6IEZsYWdzID0ge307XG4gIHByaXZhdGUgZmxhZ1JlZ2lzdHJ5OiB7W2ZsYWdOYW1lOiBzdHJpbmddOiBGbGFnUmVnaXN0cnlFbnRyeX0gPSB7fTtcblxuICBwcml2YXRlIHVybEZsYWdzOiBGbGFncyA9IHt9O1xuXG4gIHBsYXRmb3JtTmFtZTogc3RyaW5nO1xuICBwbGF0Zm9ybTogUGxhdGZvcm07XG5cbiAgLy8gSmFzbWluZSBzcGllcyBvbiB0aGlzIGluICdlbnZpcm9ubWVudF90ZXN0LnRzJ1xuICBnZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBnbG9iYWw6IGFueSkge1xuICAgIHRoaXMucG9wdWxhdGVVUkxGbGFncygpO1xuICB9XG5cbiAgc2V0UGxhdGZvcm0ocGxhdGZvcm1OYW1lOiBzdHJpbmcsIHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtICE9IG51bGwpIHtcbiAgICAgIGlmICghKGVudigpLmdldEJvb2woJ0lTX1RFU1QnKSB8fCBlbnYoKS5nZXRCb29sKCdQUk9EJykpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBQbGF0Zm9ybSAke3RoaXMucGxhdGZvcm1OYW1lfSBoYXMgYWxyZWFkeSBiZWVuIHNldC4gYCArXG4gICAgICAgICAgICBgT3ZlcndyaXRpbmcgdGhlIHBsYXRmb3JtIHdpdGggJHtwbGF0Zm9ybU5hbWV9LmApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IHBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gIH1cblxuICByZWdpc3RlckZsYWcoXG4gICAgICBmbGFnTmFtZTogc3RyaW5nLCBldmFsdWF0aW9uRm46IEZsYWdFdmFsdWF0aW9uRm4sXG4gICAgICBzZXRIb29rPzogKHZhbHVlOiBGbGFnVmFsdWUpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZsYWdSZWdpc3RyeVtmbGFnTmFtZV0gPSB7ZXZhbHVhdGlvbkZuLCBzZXRIb29rfTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBmbGFnIHZhbHVlIGZyb20gdGhlIFVSTC4gVGhpcyBoYXMgdG8gaGFwcGVuIGhlcmUgYmVjYXVzZVxuICAgIC8vIHRoZSBlbnZpcm9ubWVudCBpcyBpbml0aWFsaXplZCBiZWZvcmUgZmxhZ3MgZ2V0IHJlZ2lzdGVyZWQuXG4gICAgaWYgKHRoaXMudXJsRmxhZ3NbZmxhZ05hbWVdICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGZsYWdWYWx1ZSA9IHRoaXMudXJsRmxhZ3NbZmxhZ05hbWVdO1xuICAgICAgaWYgKCEoZW52KCkuZ2V0Qm9vbCgnSVNfVEVTVCcpIHx8IGVudigpLmdldEJvb2woJ1BST0QnKSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFNldHRpbmcgZmVhdHVyZSBvdmVycmlkZSBmcm9tIFVSTCAke2ZsYWdOYW1lfTogJHtmbGFnVmFsdWV9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXQoZmxhZ05hbWUsIGZsYWdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXN5bmMoZmxhZ05hbWU6IHN0cmluZyk6IFByb21pc2U8RmxhZ1ZhbHVlPiB7XG4gICAgaWYgKGZsYWdOYW1lIGluIHRoaXMuZmxhZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzW2ZsYWdOYW1lXTtcbiAgICB9XG5cbiAgICB0aGlzLmZsYWdzW2ZsYWdOYW1lXSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVGbGFnKGZsYWdOYW1lKTtcbiAgICByZXR1cm4gdGhpcy5mbGFnc1tmbGFnTmFtZV07XG4gIH1cblxuICBnZXQoZmxhZ05hbWU6IHN0cmluZyk6IEZsYWdWYWx1ZSB7XG4gICAgaWYgKGZsYWdOYW1lIGluIHRoaXMuZmxhZ3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmZsYWdzW2ZsYWdOYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFnVmFsdWUgPSB0aGlzLmV2YWx1YXRlRmxhZyhmbGFnTmFtZSk7XG4gICAgaWYgKGlzUHJvbWlzZShmbGFnVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZsYWcgJHtmbGFnTmFtZX0gY2Fubm90IGJlIHN5bmNocm9ub3VzbHkgZXZhbHVhdGVkLiBgICtcbiAgICAgICAgICBgUGxlYXNlIHVzZSBnZXRBc3luYygpIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgdGhpcy5mbGFnc1tmbGFnTmFtZV0gPSBmbGFnVmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuZmxhZ3NbZmxhZ05hbWVdO1xuICB9XG5cbiAgZ2V0TnVtYmVyKGZsYWdOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldChmbGFnTmFtZSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgZ2V0Qm9vbChmbGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGZsYWdOYW1lKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U3RyaW5nKGZsYWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldChmbGFnTmFtZSkgYXMgc3RyaW5nO1xuICB9XG5cbiAgZ2V0RmxhZ3MoKTogRmxhZ3Mge1xuICAgIHJldHVybiB0aGlzLmZsYWdzO1xuICB9XG4gIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgZ2V0IGZlYXR1cmVzKCk6IEZsYWdzIHtcbiAgICByZXR1cm4gdGhpcy5mbGFncztcbiAgfVxuXG4gIHNldChmbGFnTmFtZTogc3RyaW5nLCB2YWx1ZTogRmxhZ1ZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmxhZ1JlZ2lzdHJ5W2ZsYWdOYW1lXSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBzZXQgZmxhZyAke2ZsYWdOYW1lfSBhcyBpdCBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZC5gKTtcbiAgICB9XG4gICAgdGhpcy5mbGFnc1tmbGFnTmFtZV0gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdLnNldEhvb2sgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdLnNldEhvb2sodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVGbGFnKGZsYWdOYW1lOiBzdHJpbmcpOiBGbGFnVmFsdWV8UHJvbWlzZTxGbGFnVmFsdWU+IHtcbiAgICBpZiAodGhpcy5mbGFnUmVnaXN0cnlbZmxhZ05hbWVdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGV2YWx1YXRlIGZsYWcgJyR7ZmxhZ05hbWV9Jzogbm8gZXZhbHVhdGlvbiBmdW5jdGlvbiBmb3VuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmxhZ1JlZ2lzdHJ5W2ZsYWdOYW1lXS5ldmFsdWF0aW9uRm4oKTtcbiAgfVxuXG4gIHNldEZsYWdzKGZsYWdzOiBGbGFncykge1xuICAgIHRoaXMuZmxhZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBmbGFncyk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmZsYWdzID0ge307XG4gICAgdGhpcy51cmxGbGFncyA9IHt9O1xuICAgIHRoaXMucG9wdWxhdGVVUkxGbGFncygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVVSTEZsYWdzKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWwgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgIHR5cGVvZiB0aGlzLmdsb2JhbC5sb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdHlwZW9mIHRoaXMuZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxQYXJhbXMgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHRoaXMuZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgaWYgKFRFTlNPUkZMT1dKU19GTEFHU19QUkVGSVggaW4gdXJsUGFyYW1zKSB7XG4gICAgICBjb25zdCBrZXlWYWx1ZXMgPSB1cmxQYXJhbXNbVEVOU09SRkxPV0pTX0ZMQUdTX1BSRUZJWF0uc3BsaXQoJywnKTtcbiAgICAgIGtleVZhbHVlcy5mb3JFYWNoKGtleVZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0ga2V5VmFsdWUuc3BsaXQoJzonKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgICAgICB0aGlzLnVybEZsYWdzW2tleV0gPSBwYXJzZVZhbHVlKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhxdWVyeVN0cmluZzogc3RyaW5nKToge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgcXVlcnlTdHJpbmcucmVwbGFjZSgvWz8mXShbXj0/Jl0rKSg/Oj0oW14mXSopKT8vZywgKHMsIC4uLnQpID0+IHtcbiAgICBkZWNvZGVQYXJhbShwYXJhbXMsIHRbMF0sIHRbMV0pO1xuICAgIHJldHVybiB0LmpvaW4oJz0nKTtcbiAgfSk7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVBhcmFtKFxuICAgIHBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG5hbWU6IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChuYW1lKV0gPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKGZsYWdOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBGbGFnVmFsdWUge1xuICBjb25zdCBsb3dlckNhc2VWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsb3dlckNhc2VWYWx1ZSA9PT0gJ3RydWUnIHx8IGxvd2VyQ2FzZVZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZVZhbHVlID09PSAndHJ1ZSc7XG4gIH0gZWxzZSBpZiAoYCR7KyBsb3dlckNhc2VWYWx1ZX1gID09PSBsb3dlckNhc2VWYWx1ZSkge1xuICAgIHJldHVybiArbG93ZXJDYXNlVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCAoYSBnbG9iYWwgc2luZ2xldG9uKS5cbiAqXG4gKiBUaGUgZW52aXJvbm1lbnQgb2JqZWN0IGNvbnRhaW5zIHRoZSBldmFsdWF0ZWQgZmVhdHVyZSB2YWx1ZXMgYXMgd2VsbCBhcyB0aGVcbiAqIGFjdGl2ZSBwbGF0Zm9ybS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52KCkge1xuICByZXR1cm4gRU5WO1xufVxuXG5leHBvcnQgbGV0IEVOVjogRW52aXJvbm1lbnQgPSBudWxsO1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVudmlyb25tZW50R2xvYmFsKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCkge1xuICBFTlYgPSBlbnZpcm9ubWVudDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Note that the identifier globalNameSpace is scoped to this module, but will\n// always resolve to the same global object regardless of how the module is\n// resolved.\n// tslint:disable-next-line:no-any\nlet globalNameSpace;\n// tslint:disable-next-line:no-any\nexport function getGlobalNamespace() {\n if (globalNameSpace == null) {\n // tslint:disable-next-line:no-any\n let ns;\n if (typeof (window) !== 'undefined') {\n ns = window;\n }\n else if (typeof (global) !== 'undefined') {\n ns = global;\n }\n else if (typeof (process) !== 'undefined') {\n ns = process;\n }\n else if (typeof (self) !== 'undefined') {\n ns = self;\n }\n else {\n throw new Error('Could not find a global object');\n }\n globalNameSpace = ns;\n }\n return globalNameSpace;\n}\n// tslint:disable-next-line:no-any\nfunction getGlobalMap() {\n const ns = getGlobalNamespace();\n if (ns._tfGlobals == null) {\n ns._tfGlobals = new Map();\n }\n return ns._tfGlobals;\n}\n/**\n * Returns a globally accessible 'singleton' object.\n *\n * @param key the name of the object\n * @param init a function to initialize to initialize this object\n * the first time it is fetched.\n */\nexport function getGlobal(key, init) {\n const globalMap = getGlobalMap();\n if (globalMap.has(key)) {\n return globalMap.get(key);\n }\n else {\n const singleton = init();\n globalMap.set(key, singleton);\n return globalMap.get(key);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2dsb2JhbF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDhFQUE4RTtBQUM5RSwyRUFBMkU7QUFDM0UsWUFBWTtBQUNaLGtDQUFrQztBQUNsQyxJQUFJLGVBQStDLENBQUM7QUFDcEQsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1FBQzNCLGtDQUFrQztRQUNsQyxJQUFJLEVBQU8sQ0FBQztRQUNaLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUNuQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1NBQ2I7YUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLEVBQUU7WUFDMUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztTQUNiO2FBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO1lBQzNDLEVBQUUsR0FBRyxPQUFPLENBQUM7U0FDZDthQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUN4QyxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQ1g7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtRQUNELGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDdEI7SUFDRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLFNBQVMsWUFBWTtJQUNuQixNQUFNLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hDLElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDekIsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLEdBQVcsRUFBRSxJQUFhO0lBQ3JELE1BQU0sU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQ2pDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0I7U0FBTTtRQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMzQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8vIE5vdGUgdGhhdCB0aGUgaWRlbnRpZmllciBnbG9iYWxOYW1lU3BhY2UgaXMgc2NvcGVkIHRvIHRoaXMgbW9kdWxlLCBidXQgd2lsbFxuLy8gYWx3YXlzIHJlc29sdmUgdG8gdGhlIHNhbWUgZ2xvYmFsIG9iamVjdCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgbW9kdWxlIGlzXG4vLyByZXNvbHZlZC5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmxldCBnbG9iYWxOYW1lU3BhY2U6IHtfdGZHbG9iYWxzOiBNYXA8c3RyaW5nLCBhbnk+fTtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxOYW1lc3BhY2UoKToge190Zkdsb2JhbHM6IE1hcDxzdHJpbmcsIGFueT59IHtcbiAgaWYgKGdsb2JhbE5hbWVTcGFjZSA9PSBudWxsKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIGxldCBuczogYW55O1xuICAgIGlmICh0eXBlb2YgKHdpbmRvdykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBucyA9IHdpbmRvdztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiAoZ2xvYmFsKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zID0gZ2xvYmFsO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIChwcm9jZXNzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG5zID0gcHJvY2VzcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiAoc2VsZikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBucyA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYSBnbG9iYWwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGdsb2JhbE5hbWVTcGFjZSA9IG5zO1xuICB9XG4gIHJldHVybiBnbG9iYWxOYW1lU3BhY2U7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmZ1bmN0aW9uIGdldEdsb2JhbE1hcCgpOiBNYXA8c3RyaW5nLCBhbnk+IHtcbiAgY29uc3QgbnMgPSBnZXRHbG9iYWxOYW1lc3BhY2UoKTtcbiAgaWYgKG5zLl90Zkdsb2JhbHMgPT0gbnVsbCkge1xuICAgIG5zLl90Zkdsb2JhbHMgPSBuZXcgTWFwKCk7XG4gIH1cbiAgcmV0dXJuIG5zLl90Zkdsb2JhbHM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgJ3NpbmdsZXRvbicgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBrZXkgdGhlIG5hbWUgb2YgdGhlIG9iamVjdFxuICogQHBhcmFtIGluaXQgYSBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRvIGluaXRpYWxpemUgdGhpcyBvYmplY3RcbiAqICAgICAgICAgICAgIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGZldGNoZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWw8VD4oa2V5OiBzdHJpbmcsIGluaXQ6ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZ2xvYmFsTWFwID0gZ2V0R2xvYmFsTWFwKCk7XG4gIGlmIChnbG9iYWxNYXAuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gZ2xvYmFsTWFwLmdldChrZXkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNpbmdsZXRvbiA9IGluaXQoKTtcbiAgICBnbG9iYWxNYXAuc2V0KGtleSwgc2luZ2xldG9uKTtcbiAgICByZXR1cm4gZ2xvYmFsTWFwLmdldChrZXkpO1xuICB9XG59XG4iXX0=","export const Abs = 'Abs';\nexport const Acos = 'Acos';\nexport const Acosh = 'Acosh';\nexport const Add = 'Add';\nexport const AddN = 'AddN';\nexport const All = 'All';\nexport const Any = 'Any';\nexport const ArgMax = 'ArgMax';\nexport const ArgMin = 'ArgMin';\nexport const Asin = 'Asin';\nexport const Asinh = 'Asinh';\nexport const Atan = 'Atan';\nexport const Atanh = 'Atanh';\nexport const Atan2 = 'Atan2';\nexport const AvgPool = 'AvgPool';\nexport const AvgPoolGrad = 'AvgPoolGrad';\nexport const AvgPool3D = 'AvgPool3D';\nexport const AvgPool3DGrad = 'AvgPool3DGrad';\nexport const BatchMatMul = 'BatchMatMul';\nexport const BatchToSpaceND = 'BatchToSpaceND';\nexport const Bincount = 'Bincount';\nexport const BitwiseAnd = 'BitwiseAnd';\nexport const BroadcastTo = 'BroadcastTo';\nexport const BroadcastArgs = 'BroadcastArgs';\nexport const Cast = 'Cast';\nexport const Ceil = 'Ceil';\nexport const ClipByValue = 'ClipByValue';\nexport const Complex = 'Complex';\nexport const ComplexAbs = 'ComplexAbs';\nexport const Concat = 'Concat';\nexport const Conv2D = 'Conv2D';\nexport const Conv2DBackpropFilter = 'Conv2DBackpropFilter';\nexport const Conv2DBackpropInput = 'Conv2DBackpropInput';\nexport const Conv3D = 'Conv3D';\nexport const Conv3DBackpropFilterV2 = 'Conv3DBackpropFilterV2';\nexport const Conv3DBackpropInputV2 = 'Conv3DBackpropInputV2';\nexport const Cos = 'Cos';\nexport const Cosh = 'Cosh';\nexport const Cumprod = 'Cumprod';\nexport const Cumsum = 'Cumsum';\nexport const CropAndResize = 'CropAndResize';\nexport const DenseBincount = 'DenseBincount';\nexport const DepthToSpace = 'DepthToSpace';\nexport const DepthwiseConv2dNative = 'DepthwiseConv2dNative';\nexport const DepthwiseConv2dNativeBackpropFilter = 'DepthwiseConv2dNativeBackpropFilter';\nexport const DepthwiseConv2dNativeBackpropInput = 'DepthwiseConv2dNativeBackpropInput';\nexport const Diag = 'Diag';\nexport const Dilation2D = 'Dilation2D';\nexport const Dilation2DBackpropInput = 'Dilation2DBackpropInput';\nexport const Dilation2DBackpropFilter = 'Dilation2DBackpropFilter';\nexport const Draw = 'Draw';\nexport const RealDiv = 'RealDiv';\nexport const Einsum = 'Einsum';\nexport const Elu = 'Elu';\nexport const EluGrad = 'EluGrad';\nexport const Erf = 'Erf';\nexport const Equal = 'Equal';\nexport const Exp = 'Exp';\nexport const ExpandDims = 'ExpandDims';\nexport const Expm1 = 'Expm1';\nexport const FFT = 'FFT';\nexport const Fill = 'Fill';\nexport const FlipLeftRight = 'FlipLeftRight';\nexport const Floor = 'Floor';\nexport const FloorDiv = 'FloorDiv';\nexport const FusedBatchNorm = 'FusedBatchNorm';\nexport const GatherV2 = 'GatherV2';\nexport const GatherNd = 'GatherNd';\nexport const Greater = 'Greater';\nexport const GreaterEqual = 'GreaterEqual';\nexport const Identity = 'Identity';\nexport const IFFT = 'IFFT';\nexport const Imag = 'Imag';\nexport const IsFinite = 'IsFinite';\nexport const IsInf = 'IsInf';\nexport const IsNan = 'IsNan';\nexport const LeakyRelu = 'LeakyRelu';\nexport const Less = 'Less';\nexport const LessEqual = 'LessEqual';\nexport const LinSpace = 'LinSpace';\nexport const Log = 'Log';\nexport const Log1p = 'Log1p';\nexport const LogicalAnd = 'LogicalAnd';\nexport const LogicalNot = 'LogicalNot';\nexport const LogicalOr = 'LogicalOr';\nexport const LogicalXor = 'LogicalXor';\nexport const LogSoftmax = 'LogSoftmax';\nexport const LowerBound = 'LowerBound';\nexport const LRN = 'LRN';\nexport const LRNGrad = 'LRNGrad';\nexport const MatrixBandPart = 'MatrixBandPart';\nexport const Max = 'Max';\nexport const Maximum = 'Maximum';\nexport const MaxPool = 'MaxPool';\nexport const MaxPoolGrad = 'MaxPoolGrad';\nexport const MaxPool3D = 'MaxPool3D';\nexport const MaxPool3DGrad = 'MaxPool3DGrad';\nexport const MaxPoolWithArgmax = 'MaxPoolWithArgmax';\nexport const Mean = 'Mean';\nexport const Min = 'Min';\nexport const Minimum = 'Minimum';\nexport const MirrorPad = 'MirrorPad';\nexport const Mod = 'Mod';\nexport const Multinomial = 'Multinomial';\nexport const Multiply = 'Multiply';\nexport const Neg = 'Neg';\nexport const NotEqual = 'NotEqual';\nexport const NonMaxSuppressionV3 = 'NonMaxSuppressionV3';\nexport const NonMaxSuppressionV4 = 'NonMaxSuppressionV4';\nexport const NonMaxSuppressionV5 = 'NonMaxSuppressionV5';\nexport const OnesLike = 'OnesLike';\nexport const OneHot = 'OneHot';\nexport const Pack = 'Pack';\nexport const PadV2 = 'PadV2';\nexport const Pool = 'Pool';\nexport const Pow = 'Pow';\nexport const Prelu = 'Prelu';\nexport const Prod = 'Prod';\nexport const RaggedGather = 'RaggedGather';\nexport const RaggedRange = 'RaggedRange';\nexport const RaggedTensorToTensor = 'RaggedTensorToTensor';\nexport const Range = 'Range';\nexport const Real = 'Real';\nexport const Reciprocal = 'Reciprocal';\nexport const Relu = 'Relu';\nexport const Reshape = 'Reshape';\nexport const ResizeNearestNeighbor = 'ResizeNearestNeighbor';\nexport const ResizeNearestNeighborGrad = 'ResizeNearestNeighborGrad';\nexport const ResizeBilinear = 'ResizeBilinear';\nexport const ResizeBilinearGrad = 'ResizeBilinearGrad';\nexport const Relu6 = 'Relu6';\nexport const Reverse = 'Reverse';\nexport const Round = 'Round';\nexport const Rsqrt = 'Rsqrt';\nexport const ScatterNd = 'ScatterNd';\nexport const TensorScatterUpdate = 'TensorScatterUpdate';\nexport const SearchSorted = 'SearchSorted';\nexport const Select = 'Select';\nexport const Selu = 'Selu';\nexport const Slice = 'Slice';\nexport const Sin = 'Sin';\nexport const Sinh = 'Sinh';\nexport const Sign = 'Sign';\nexport const Sigmoid = 'Sigmoid';\nexport const Softplus = 'Softplus';\nexport const Sqrt = 'Sqrt';\nexport const Sum = 'Sum';\nexport const SpaceToBatchND = 'SpaceToBatchND';\nexport const SplitV = 'SplitV';\nexport const Softmax = 'Softmax';\nexport const SparseFillEmptyRows = 'SparseFillEmptyRows';\nexport const SparseReshape = 'SparseReshape';\nexport const SparseSegmentMean = 'SparseSegmentMean';\nexport const SparseSegmentSum = 'SparseSegmentSum';\nexport const SparseToDense = 'SparseToDense';\nexport const SquaredDifference = 'SquaredDifference';\nexport const Square = 'Square';\nexport const StaticRegexReplace = 'StaticRegexReplace';\nexport const StridedSlice = 'StridedSlice';\nexport const StringNGrams = 'StringNGrams';\nexport const StringSplit = 'StringSplit';\nexport const StringToHashBucketFast = 'StringToHashBucketFast';\nexport const Sub = 'Sub';\nexport const Tan = 'Tan';\nexport const Tanh = 'Tanh';\nexport const Tile = 'Tile';\nexport const TopK = 'TopK';\nexport const Transform = 'Transform';\nexport const Transpose = 'Transpose';\nexport const Unique = 'Unique';\nexport const Unpack = 'Unpack';\nexport const UnsortedSegmentSum = 'UnsortedSegmentSum';\nexport const UpperBound = 'UpperBound';\nexport const ZerosLike = 'ZerosLike';\n/**\n * TensorFlow.js-only kernels\n */\nexport const Step = 'Step';\nexport const FromPixels = 'FromPixels';\nexport const RotateWithOffset = 'RotateWithOffset';\nexport const _FusedMatMul = '_FusedMatMul';\nexport const FusedConv2D = 'FusedConv2D';\nexport const FusedDepthwiseConv2D = 'FusedDepthwiseConv2D';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX25hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9rZXJuZWxfbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFHekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUczQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBRzdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFHekIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUczQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBT3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFPekIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQU0vQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBTS9CLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFHM0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBRzNCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFHN0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUc3QixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBU2pDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUM7QUFRekMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQVVyQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBUzdDLE1BQU0sQ0FBQyxNQUFNLFdBQVcs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QUFHLFFBQVEsQ0FBQztBQVEvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBTS9CLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDO0FBT3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFJdkMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUdyQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFNM0IsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQVN2QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQVFuRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBZ0IzQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBaUJ6QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8vIEFsbG93IFVwcGVyQ2FtZWxDYXNlIHZhcmlhYmxlIG5hbWVzXG4vLyB0c2xpbnQ6ZGlzYWJsZTogdmFyaWFibGUtbmFtZVxuLy8gVW5mb3J0dW5hdGVseSBqdXN0IGVuYWJsaW5nIFBhc2NhbENhc2UgcGVyIGZpbGUgKHRzbGludDplbmFibGU6XG4vLyBhbGxvdy1wYXNjYWwtY2FzZSkgZG9lc24ndCB3b3JrLlxuaW1wb3J0IHtOYW1lZFRlbnNvckluZm9NYXB9IGZyb20gJy4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7RXhwbGljaXRQYWRkaW5nfSBmcm9tICcuL29wcy9jb252X3V0aWwnO1xuaW1wb3J0IHtBY3RpdmF0aW9ufSBmcm9tICcuL29wcy9mdXNlZF90eXBlcyc7XG5pbXBvcnQge1RlbnNvckluZm99IGZyb20gJy4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtEYXRhVHlwZSwgRHJhd09wdGlvbnMsIFBpeGVsRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBBYnMgPSAnQWJzJztcbmV4cG9ydCB0eXBlIEFic0lucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQWNvcyA9ICdBY29zJztcbmV4cG9ydCB0eXBlIEFjb3NJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEFjb3NoID0gJ0Fjb3NoJztcbmV4cG9ydCB0eXBlIEFjb3NoSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBZGQgPSAnQWRkJztcbmV4cG9ydCB0eXBlIEFkZElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEFkZE4gPSAnQWRkTic7XG5leHBvcnQgdHlwZSBBZGROSW5wdXRzID0gVGVuc29ySW5mb1tdO1xuXG5leHBvcnQgY29uc3QgQWxsID0gJ0FsbCc7XG5leHBvcnQgdHlwZSBBbGxJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQWxsQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQW55ID0gJ0FueSc7XG5leHBvcnQgdHlwZSBBbnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQW55QXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXJnTWF4ID0gJ0FyZ01heCc7XG5leHBvcnQgdHlwZSBBcmdNYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXJnTWF4QXR0cnMge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBBcmdNaW4gPSAnQXJnTWluJztcbmV4cG9ydCB0eXBlIEFyZ01pbklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBBcmdNaW5BdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFzaW4gPSAnQXNpbic7XG5leHBvcnQgdHlwZSBBc2luSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBc2luaCA9ICdBc2luaCc7XG5leHBvcnQgdHlwZSBBc2luaElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQXRhbiA9ICdBdGFuJztcbmV4cG9ydCB0eXBlIEF0YW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEF0YW5oID0gJ0F0YW5oJztcbmV4cG9ydCB0eXBlIEF0YW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBBdGFuMiA9ICdBdGFuMic7XG5leHBvcnQgdHlwZSBBdGFuMklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEF2Z1Bvb2wgPSAnQXZnUG9vbCc7XG5leHBvcnQgdHlwZSBBdmdQb29sSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIEF2Z1Bvb2xBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbEdyYWQgPSAnQXZnUG9vbEdyYWQnO1xuZXhwb3J0IHR5cGUgQXZnUG9vbEdyYWRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbEdyYWRBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbDNEID0gJ0F2Z1Bvb2wzRCc7XG5leHBvcnQgdHlwZSBBdmdQb29sM0RJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbDNEQXR0cnMge1xuICBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbiAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnO1xufVxuXG5leHBvcnQgY29uc3QgQXZnUG9vbDNER3JhZCA9ICdBdmdQb29sM0RHcmFkJztcbmV4cG9ydCB0eXBlIEF2Z1Bvb2wzREdyYWRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXZnUG9vbDNER3JhZEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXI7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBCYXRjaE1hdE11bCA9ICdCYXRjaE1hdE11bCc7XG5leHBvcnQgdHlwZSBCYXRjaE1hdE11bElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnYSd8J2InPjtcbmV4cG9ydCBpbnRlcmZhY2UgQmF0Y2hNYXRNdWxBdHRycyB7XG4gIHRyYW5zcG9zZUE6IGJvb2xlYW47XG4gIHRyYW5zcG9zZUI6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBCYXRjaFRvU3BhY2VORCA9ICdCYXRjaFRvU3BhY2VORCc7XG5leHBvcnQgdHlwZSBCYXRjaFRvU3BhY2VORElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBCYXRjaFRvU3BhY2VOREF0dHJzIHtcbiAgYmxvY2tTaGFwZTogbnVtYmVyW107XG4gIGNyb3BzOiBudW1iZXJbXVtdO1xufVxuXG5leHBvcnQgdHlwZSBCaW5hcnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2EnfCdiJz47XG5cbmV4cG9ydCBjb25zdCBCaW5jb3VudCA9ICdCaW5jb3VudCc7XG5leHBvcnQgdHlwZSBCaW5jb3VudElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J3dlaWdodHMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQmluY291bnRBdHRycyB7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEJpdHdpc2VBbmQgPSAnQml0d2lzZUFuZCc7XG5leHBvcnQgdHlwZSBCaXR3aXNlQW5kSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQnJvYWRjYXN0VG8gPSAnQnJvYWRjYXN0VG8nO1xuZXhwb3J0IHR5cGUgQnJvYWRjYXN0VG9JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQnJvYWRDYXN0VG9BdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbiAgaW5wdXRTaGFwZTogbnVtYmVyW107ICAvLyBmb3IgZ3JhZGllbnRcbn1cblxuZXhwb3J0IGNvbnN0IEJyb2FkY2FzdEFyZ3MgPSAnQnJvYWRjYXN0QXJncyc7XG5leHBvcnQgdHlwZSBCcm9hZGNhc3RBcmdzSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzMCd8J3MxJz47XG5cbmV4cG9ydCBjb25zdCBDYXN0ID0gJ0Nhc3QnO1xuZXhwb3J0IHR5cGUgQ2FzdElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBDYXN0QXR0cnMge1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBDZWlsID0gJ0NlaWwnO1xuZXhwb3J0IHR5cGUgQ2VpbElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQ2xpcEJ5VmFsdWUgPSAnQ2xpcEJ5VmFsdWUnO1xuZXhwb3J0IHR5cGUgQ2xpcEJ5VmFsdWVJbnB1dHMgPSBVbmFyeUlucHV0cztcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcEJ5VmFsdWVBdHRycyB7XG4gIGNsaXBWYWx1ZU1pbjogbnVtYmVyO1xuICBjbGlwVmFsdWVNYXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENvbXBsZXggPSAnQ29tcGxleCc7XG5leHBvcnQgdHlwZSBDb21wbGV4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdyZWFsJ3wnaW1hZyc+O1xuXG5leHBvcnQgY29uc3QgQ29tcGxleEFicyA9ICdDb21wbGV4QWJzJztcbmV4cG9ydCB0eXBlIENvbXBsZXhBYnNJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IENvbmNhdCA9ICdDb25jYXQnO1xuZXhwb3J0IHR5cGUgQ29uY2F0SW5wdXRzID0gVGVuc29ySW5mb1tdO1xuZXhwb3J0IGludGVyZmFjZSBDb25jYXRBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyRCA9ICdDb252MkQnO1xuZXhwb3J0IHR5cGUgQ29udjJESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIENvbnYyREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyREJhY2twcm9wRmlsdGVyID0gJ0NvbnYyREJhY2twcm9wRmlsdGVyJztcbmV4cG9ydCB0eXBlIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZHknPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ29udjJEQmFja3Byb3BGaWx0ZXJBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG4gIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYyREJhY2twcm9wSW5wdXQgPSAnQ29udjJEQmFja3Byb3BJbnB1dCc7XG5leHBvcnQgdHlwZSBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2ZpbHRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBDb252MkRCYWNrcHJvcElucHV0QXR0cnMge1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBpbnB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbnYzRCA9ICdDb252M0QnO1xuZXhwb3J0IHR5cGUgQ29udjNESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIENvbnYzREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJztcbiAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnO1xuICBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBDb252M0RCYWNrcHJvcEZpbHRlclYyID0gJ0NvbnYzREJhY2twcm9wRmlsdGVyVjInO1xuZXhwb3J0IHR5cGUgQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2R5Jz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udjNEQmFja3Byb3BGaWx0ZXJWMkF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJztcbiAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBDb252M0RCYWNrcHJvcElucHV0VjIgPSAnQ29udjNEQmFja3Byb3BJbnB1dFYyJztcbmV4cG9ydCB0eXBlIENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2ZpbHRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSc7XG4gIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBDb3MgPSAnQ29zJztcbmV4cG9ydCB0eXBlIENvc0lucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgQ29zaCA9ICdDb3NoJztcbmV4cG9ydCB0eXBlIENvc2hJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEN1bXByb2QgPSAnQ3VtcHJvZCc7XG5leHBvcnQgdHlwZSBDdW1wcm9kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIEN1bXByb2RBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbiAgZXhjbHVzaXZlOiBib29sZWFuO1xuICByZXZlcnNlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ3Vtc3VtID0gJ0N1bXN1bSc7XG5leHBvcnQgdHlwZSBDdW1zdW1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ3Vtc3VtQXR0cnMge1xuICBheGlzOiBudW1iZXI7XG4gIGV4Y2x1c2l2ZTogYm9vbGVhbjtcbiAgcmV2ZXJzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENyb3BBbmRSZXNpemUgPSAnQ3JvcEFuZFJlc2l6ZSc7XG5leHBvcnQgdHlwZSBDcm9wQW5kUmVzaXplSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2ltYWdlJ3wnYm94ZXMnfCdib3hJbmQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgQ3JvcEFuZFJlc2l6ZUF0dHJzIHtcbiAgY3JvcFNpemU6IFtudW1iZXIsIG51bWJlcl07XG4gIG1ldGhvZDogJ2JpbGluZWFyJ3wnbmVhcmVzdCc7XG4gIGV4dHJhcG9sYXRpb25WYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRGVuc2VCaW5jb3VudCA9ICdEZW5zZUJpbmNvdW50JztcbmV4cG9ydCB0eXBlIERlbnNlQmluY291bnRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCd3ZWlnaHRzJz47XG5leHBvcnQgaW50ZXJmYWNlIERlbnNlQmluY291bnRBdHRycyB7XG4gIHNpemU6IG51bWJlcjtcbiAgYmluYXJ5T3V0cHV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERlcHRoVG9TcGFjZSA9ICdEZXB0aFRvU3BhY2UnO1xuZXhwb3J0IHR5cGUgRGVwdGhUb1NwYWNlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRoVG9TcGFjZUF0dHJzIHtcbiAgYmxvY2tTaXplOiBudW1iZXI7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG59XG5cbmV4cG9ydCBjb25zdCBEZXB0aHdpc2VDb252MmROYXRpdmUgPSAnRGVwdGh3aXNlQ29udjJkTmF0aXZlJztcbmV4cG9ydCB0eXBlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUlucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbn1cblxuZXhwb3J0IGNvbnN0IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyID1cbiAgICAnRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXInO1xuZXhwb3J0IHR5cGUgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2R5Jz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMge1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0ID1cbiAgICAnRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCc7XG5leHBvcnQgdHlwZSBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2R5J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBkaWxhdGlvbnM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG4gIGlucHV0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgY29uc3QgRGlhZyA9ICdEaWFnJztcbmV4cG9ydCB0eXBlIERpYWdJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IERpbGF0aW9uMkQgPSAnRGlsYXRpb24yRCc7XG5leHBvcnQgdHlwZSBEaWxhdGlvbjJESW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnZmlsdGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIERpbGF0aW9uMkRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcjtcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERpbGF0aW9uMkRCYWNrcHJvcElucHV0ID0gJ0RpbGF0aW9uMkRCYWNrcHJvcElucHV0JztcbmV4cG9ydCB0eXBlIERpbGF0aW9uMkRCYWNrcHJvcElucHV0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdmaWx0ZXInfCdkeSc+O1xuXG5leHBvcnQgY29uc3QgRGlsYXRpb24yREJhY2twcm9wRmlsdGVyID0gJ0RpbGF0aW9uMkRCYWNrcHJvcEZpbHRlcic7XG5leHBvcnQgdHlwZSBEaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXJJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2ZpbHRlcid8J2R5Jz47XG5cbmV4cG9ydCBjb25zdCBEcmF3ID0gJ0RyYXcnO1xuZXhwb3J0IHR5cGUgRHJhd0lucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2UnPjtcbmV4cG9ydCBpbnRlcmZhY2UgRHJhd0F0dHJzIHtcbiAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgb3B0aW9ucz86IERyYXdPcHRpb25zO1xufVxuXG5leHBvcnQgY29uc3QgUmVhbERpdiA9ICdSZWFsRGl2JztcbmV4cG9ydCB0eXBlIFJlYWxEaXZJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFaW5zdW0gPSAnRWluc3VtJztcbmV4cG9ydCB0eXBlIEVpbnN1bUlucHV0cyA9IFRlbnNvckluZm9bXTtcbmV4cG9ydCBpbnRlcmZhY2UgRWluc3VtQXR0cnMge1xuICBlcXVhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgRWx1ID0gJ0VsdSc7XG5leHBvcnQgdHlwZSBFbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IEVsdUdyYWQgPSAnRWx1R3JhZCc7XG5leHBvcnQgdHlwZSBFbHVHcmFkSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J3knPjtcblxuZXhwb3J0IGNvbnN0IEVyZiA9ICdFcmYnO1xuZXhwb3J0IHR5cGUgRXJmSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFcXVhbCA9ICdFcXVhbCc7XG5leHBvcnQgdHlwZSBFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEV4cCA9ICdFeHAnO1xuZXhwb3J0IHR5cGUgRXhwSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBFeHBhbmREaW1zID0gJ0V4cGFuZERpbXMnO1xuZXhwb3J0IHR5cGUgRXhwYW5kRGltc0lucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnPjtcbmV4cG9ydCBpbnRlcmZhY2UgRXhwYW5kRGltc0F0dHJzIHtcbiAgZGltOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBFeHBtMSA9ICdFeHBtMSc7XG5leHBvcnQgdHlwZSBFeHBtMUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgRkZUID0gJ0ZGVCc7XG5leHBvcnQgdHlwZSBGRlRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBGaWxsID0gJ0ZpbGwnO1xuZXhwb3J0IGludGVyZmFjZSBGaWxsQXR0cnMge1xuICBzaGFwZTogbnVtYmVyW107XG4gIHZhbHVlOiBudW1iZXJ8c3RyaW5nO1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBGbGlwTGVmdFJpZ2h0ID0gJ0ZsaXBMZWZ0UmlnaHQnO1xuZXhwb3J0IHR5cGUgRmxpcExlZnRSaWdodElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2UnPjtcblxuZXhwb3J0IGNvbnN0IEZsb29yID0gJ0Zsb29yJztcbmV4cG9ydCB0eXBlIEZsb29ySW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBGbG9vckRpdiA9ICdGbG9vckRpdic7XG5leHBvcnQgdHlwZSBGbG9vckRpdklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IEZ1c2VkQmF0Y2hOb3JtID0gJ0Z1c2VkQmF0Y2hOb3JtJztcbmV4cG9ydCB0eXBlIEZ1c2VkQmF0Y2hOb3JtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdzY2FsZSd8J29mZnNldCd8J21lYW4nfCd2YXJpYW5jZSc+O1xuZXhwb3J0IGludGVyZmFjZSBGdXNlZEJhdGNoTm9ybUF0dHJzIHtcbiAgdmFyaWFuY2VFcHNpbG9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBHYXRoZXJWMiA9ICdHYXRoZXJWMic7XG5leHBvcnQgdHlwZSBHYXRoZXJWMklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCd8J2luZGljZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgR2F0aGVyVjJBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbiAgYmF0Y2hEaW1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBHYXRoZXJOZCA9ICdHYXRoZXJOZCc7XG5leHBvcnQgdHlwZSBHYXRoZXJOZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAncGFyYW1zJ3wnaW5kaWNlcyc+O1xuXG5leHBvcnQgY29uc3QgR3JlYXRlciA9ICdHcmVhdGVyJztcbmV4cG9ydCB0eXBlIEdyZWF0ZXJJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBHcmVhdGVyRXF1YWwgPSAnR3JlYXRlckVxdWFsJztcbmV4cG9ydCB0eXBlIEdyZWF0ZXJFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IElkZW50aXR5ID0gJ0lkZW50aXR5JztcbmV4cG9ydCB0eXBlIElkZW50aXR5SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBJRkZUID0gJ0lGRlQnO1xuZXhwb3J0IHR5cGUgSUZGVElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnPjtcblxuZXhwb3J0IGNvbnN0IEltYWcgPSAnSW1hZyc7XG5leHBvcnQgdHlwZSBJbWFnSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbnB1dCc+O1xuXG5leHBvcnQgY29uc3QgSXNGaW5pdGUgPSAnSXNGaW5pdGUnO1xuZXhwb3J0IHR5cGUgSXNGaW5pdGVJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IElzSW5mID0gJ0lzSW5mJztcbmV4cG9ydCB0eXBlIElzSW5mSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBJc05hbiA9ICdJc05hbic7XG5leHBvcnQgdHlwZSBJc05hbklucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTGVha3lSZWx1ID0gJ0xlYWt5UmVsdSc7XG5leHBvcnQgdHlwZSBMZWFreVJlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTGVha3lSZWx1QXR0cnMge1xuICBhbHBoYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgTGVzcyA9ICdMZXNzJztcbmV4cG9ydCB0eXBlIExlc3NJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBMZXNzRXF1YWwgPSAnTGVzc0VxdWFsJztcbmV4cG9ydCB0eXBlIExlc3NFcXVhbElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExpblNwYWNlID0gJ0xpblNwYWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgTGluU3BhY2VBdHRycyB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIHN0b3A6IG51bWJlcjtcbiAgbnVtOiBudW1iZXI7XG59XG5leHBvcnQgY29uc3QgTG9nID0gJ0xvZyc7XG5leHBvcnQgdHlwZSBMb2dJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZzFwID0gJ0xvZzFwJztcbmV4cG9ydCB0eXBlIExvZzFwSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBMb2dpY2FsQW5kID0gJ0xvZ2ljYWxBbmQnO1xuZXhwb3J0IHR5cGUgTG9naWNhbEFuZElucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZ2ljYWxOb3QgPSAnTG9naWNhbE5vdCc7XG5leHBvcnQgdHlwZSBMb2dpY2FsTm90SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBMb2dpY2FsT3IgPSAnTG9naWNhbE9yJztcbmV4cG9ydCB0eXBlIExvZ2ljYWxPcklucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IExvZ2ljYWxYb3IgPSAnTG9naWNhbFhvcic7XG5leHBvcnQgdHlwZSBMb2dpY2FsWG9ySW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTG9nU29mdG1heCA9ICdMb2dTb2Z0bWF4JztcbmV4cG9ydCB0eXBlIExvZ1NvZnRtYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2xvZ2l0cyc+O1xuZXhwb3J0IGludGVyZmFjZSBMb2dTb2Z0bWF4QXR0cnMge1xuICBheGlzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBMb3dlckJvdW5kID0gJ0xvd2VyQm91bmQnO1xuZXhwb3J0IHR5cGUgTG93ZXJCb3VuZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzb3J0ZWRTZXF1ZW5jZSd8J3ZhbHVlcyc+O1xuXG5leHBvcnQgY29uc3QgTFJOID0gJ0xSTic7XG5leHBvcnQgdHlwZSBMUk5JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTFJOQXR0cnMge1xuICBkZXB0aFJhZGl1czogbnVtYmVyO1xuICBiaWFzOiBudW1iZXI7XG4gIGFscGhhOiBudW1iZXI7XG4gIGJldGE6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IExSTkdyYWQgPSAnTFJOR3JhZCc7XG5leHBvcnQgdHlwZSBMUk5HcmFkSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wneSd8J2R5Jz47XG5leHBvcnQgaW50ZXJmYWNlIExSTkdyYWRBdHRycyB7XG4gIGRlcHRoUmFkaXVzOiBudW1iZXI7XG4gIGJpYXM6IG51bWJlcjtcbiAgYWxwaGE6IG51bWJlcjtcbiAgYmV0YTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgTWF0cml4QmFuZFBhcnQgPSAnTWF0cml4QmFuZFBhcnQnO1xuZXhwb3J0IHR5cGUgTWF0cml4QmFuZFBhcnRJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXQnfCdudW1Mb3dlcid8J251bVVwcGVyJz47XG5leHBvcnQgaW50ZXJmYWNlIE1hdHJpeEJhbmRQYXJ0QXR0cnMge31cblxuZXhwb3J0IGNvbnN0IE1heCA9ICdNYXgnO1xuZXhwb3J0IHR5cGUgTWF4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIE1heEF0dHJzIHtcbiAgcmVkdWN0aW9uSW5kaWNlczogbnVtYmVyfG51bWJlcltdO1xuICBrZWVwRGltczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1heGltdW0gPSAnTWF4aW11bSc7XG5leHBvcnQgdHlwZSBNYXhpbXVtSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTWF4UG9vbCA9ICdNYXhQb29sJztcbmV4cG9ydCB0eXBlIE1heFBvb2xJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWF4UG9vbEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sR3JhZCA9ICdNYXhQb29sR3JhZCc7XG5leHBvcnQgdHlwZSBNYXhQb29sR3JhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnZHknfCdpbnB1dCd8J291dHB1dCc+O1xuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sR3JhZEF0dHJzIHtcbiAgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sM0QgPSAnTWF4UG9vbDNEJztcbmV4cG9ydCB0eXBlIE1heFBvb2wzRElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNYXhQb29sM0RBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyO1xuICBkYXRhRm9ybWF0OiAnTkRIV0MnfCdOQ0RIVyc7XG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCc7XG59XG5cbmV4cG9ydCBjb25zdCBNYXhQb29sM0RHcmFkID0gJ01heFBvb2wzREdyYWQnO1xuZXhwb3J0IHR5cGUgTWF4UG9vbDNER3JhZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkeSd8J2lucHV0J3wnb3V0cHV0Jz47XG5leHBvcnQgaW50ZXJmYWNlIE1heFBvb2wzREdyYWRBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyO1xuICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xufVxuXG5leHBvcnQgY29uc3QgTWF4UG9vbFdpdGhBcmdtYXggPSAnTWF4UG9vbFdpdGhBcmdtYXgnO1xuZXhwb3J0IHR5cGUgTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWF4UG9vbFdpdGhBcmdtYXhBdHRycyB7XG4gIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXI7XG4gIGluY2x1ZGVCYXRjaEluSW5kZXg6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBNZWFuID0gJ01lYW4nO1xuZXhwb3J0IHR5cGUgTWVhbklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNZWFuQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgTWluID0gJ01pbic7XG5leHBvcnQgdHlwZSBNaW5JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTWluQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgTWluaW11bSA9ICdNaW5pbXVtJztcbmV4cG9ydCB0eXBlIE1pbmltdW1JbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBNaXJyb3JQYWQgPSAnTWlycm9yUGFkJztcbmV4cG9ydCB0eXBlIE1pcnJvclBhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBNaXJyb3JQYWRBdHRycyB7XG4gIHBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgbW9kZTogJ3JlZmxlY3QnfCdzeW1tZXRyaWMnO1xufVxuXG5leHBvcnQgY29uc3QgTW9kID0gJ01vZCc7XG5leHBvcnQgdHlwZSBNb2RJbnB1dHMgPSBCaW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBNdWx0aW5vbWlhbCA9ICdNdWx0aW5vbWlhbCc7XG5leHBvcnQgdHlwZSBNdWx0aW5vbWlhbElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnbG9naXRzJz47XG5leHBvcnQgaW50ZXJmYWNlIE11bHRpbm9taWFsQXR0cnMge1xuICBudW1TYW1wbGVzOiBudW1iZXI7XG4gIHNlZWQ6IG51bWJlcjtcbiAgbm9ybWFsaXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE11bHRpcGx5ID0gJ011bHRpcGx5JztcbmV4cG9ydCB0eXBlIE11bHRpcGx5SW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTmVnID0gJ05lZyc7XG5leHBvcnQgdHlwZSBOZWdJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IE5vdEVxdWFsID0gJ05vdEVxdWFsJztcbmV4cG9ydCB0eXBlIE5vdEVxdWFsSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgTm9uTWF4U3VwcHJlc3Npb25WMyA9ICdOb25NYXhTdXBwcmVzc2lvblYzJztcbmV4cG9ydCB0eXBlIE5vbk1heFN1cHByZXNzaW9uVjNJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnYm94ZXMnfCdzY29yZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgTm9uTWF4U3VwcHJlc3Npb25WM0F0dHJzIHtcbiAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyO1xuICBpb3VUaHJlc2hvbGQ6IG51bWJlcjtcbiAgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE5vbk1heFN1cHByZXNzaW9uVjQgPSAnTm9uTWF4U3VwcHJlc3Npb25WNCc7XG5leHBvcnQgdHlwZSBOb25NYXhTdXBwcmVzc2lvblY0SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2JveGVzJ3wnc2NvcmVzJz47XG5leHBvcnQgaW50ZXJmYWNlIE5vbk1heFN1cHByZXNzaW9uVjRBdHRycyB7XG4gIG1heE91dHB1dFNpemU6IG51bWJlcjtcbiAgaW91VGhyZXNob2xkOiBudW1iZXI7XG4gIHNjb3JlVGhyZXNob2xkOiBudW1iZXI7XG4gIHBhZFRvTWF4T3V0cHV0U2l6ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE5vbk1heFN1cHByZXNzaW9uVjUgPSAnTm9uTWF4U3VwcHJlc3Npb25WNSc7XG5leHBvcnQgdHlwZSBOb25NYXhTdXBwcmVzc2lvblY1SW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2JveGVzJ3wnc2NvcmVzJz47XG5leHBvcnQgaW50ZXJmYWNlIE5vbk1heFN1cHByZXNzaW9uVjVBdHRycyB7XG4gIG1heE91dHB1dFNpemU6IG51bWJlcjtcbiAgaW91VGhyZXNob2xkOiBudW1iZXI7XG4gIHNjb3JlVGhyZXNob2xkOiBudW1iZXI7XG4gIHNvZnRObXNTaWdtYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgT25lc0xpa2UgPSAnT25lc0xpa2UnO1xuZXhwb3J0IHR5cGUgT25lc0xpa2VJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IE9uZUhvdCA9ICdPbmVIb3QnO1xuZXhwb3J0IHR5cGUgT25lSG90SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJz47XG5leHBvcnQgaW50ZXJmYWNlIE9uZUhvdEF0dHJzIHtcbiAgZGVwdGg6IG51bWJlcjtcbiAgb25WYWx1ZTogbnVtYmVyO1xuICBvZmZWYWx1ZTogbnVtYmVyO1xuICBkdHlwZTogRGF0YVR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBQYWNrID0gJ1BhY2snO1xuZXhwb3J0IHR5cGUgUGFja0lucHV0cyA9IFRlbnNvckluZm9bXTtcbmV4cG9ydCBpbnRlcmZhY2UgUGFja0F0dHJzIHtcbiAgYXhpczogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUGFkVjIgPSAnUGFkVjInO1xuZXhwb3J0IHR5cGUgUGFkVjJJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUGFkVjJBdHRycyB7XG4gIHBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgY29uc3RhbnRWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgUG9vbCA9ICdQb29sJztcbmV4cG9ydCB0eXBlIFBvb2xJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBQb3cgPSAnUG93JztcbmV4cG9ydCB0eXBlIFBvd0lucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFByZWx1ID0gJ1ByZWx1JztcbmV4cG9ydCB0eXBlIFByZWx1SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4J3wnYWxwaGEnPjtcblxuZXhwb3J0IGNvbnN0IFByb2QgPSAnUHJvZCc7XG5leHBvcnQgdHlwZSBQcm9kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFByb2RBdHRycyB7XG4gIGF4aXM6IG51bWJlcnxudW1iZXJbXTtcbiAga2VlcERpbXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBSYWdnZWRHYXRoZXIgPSAnUmFnZ2VkR2F0aGVyJztcbmV4cG9ydCB0eXBlIFJhZ2dlZEdhdGhlcklucHV0cyA9IHtcbiAgcGFyYW1zTmVzdGVkU3BsaXRzOiBUZW5zb3JJbmZvW11cbn0mUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdwYXJhbXNEZW5zZVZhbHVlcyd8J2luZGljZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUmFnZ2VkR2F0aGVyQXR0cnMge1xuICBvdXRwdXRSYWdnZWRSYW5rOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBSYWdnZWRSYW5nZSA9ICdSYWdnZWRSYW5nZSc7XG5leHBvcnQgdHlwZSBSYWdnZWRSYW5nZUlucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdzdGFydHMnfCdsaW1pdHMnfCdkZWx0YXMnPjtcblxuZXhwb3J0IGNvbnN0IFJhZ2dlZFRlbnNvclRvVGVuc29yID0gJ1JhZ2dlZFRlbnNvclRvVGVuc29yJztcbmV4cG9ydCB0eXBlIFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3NoYXBlJ3wndmFsdWVzJ3wnZGVmYXVsdFZhbHVlJz4mXG4gICAge3Jvd1BhcnRpdGlvblRlbnNvcnM6IFRlbnNvckluZm9bXX07XG5leHBvcnQgaW50ZXJmYWNlIFJhZ2dlZFRlbnNvclRvVGVuc29yQXR0cnMge1xuICByb3dQYXJ0aXRpb25UeXBlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBSYW5nZSA9ICdSYW5nZSc7XG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQXR0cnMge1xuICBzdGFydDogbnVtYmVyO1xuICBzdG9wOiBudW1iZXI7XG4gIHN0ZXA6IG51bWJlcjtcbiAgZHR5cGU6ICdmbG9hdDMyJ3wnaW50MzInO1xufVxuXG5leHBvcnQgY29uc3QgUmVhbCA9ICdSZWFsJztcbmV4cG9ydCB0eXBlIFJlYWxJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5cbmV4cG9ydCBjb25zdCBSZWNpcHJvY2FsID0gJ1JlY2lwcm9jYWwnO1xuZXhwb3J0IHR5cGUgUmVjaXByb2NhbElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgUmVsdSA9ICdSZWx1JztcbmV4cG9ydCB0eXBlIFJlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFJlc2hhcGUgPSAnUmVzaGFwZSc7XG5leHBvcnQgdHlwZSBSZXNoYXBlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFJlc2hhcGVBdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlc2l6ZU5lYXJlc3ROZWlnaGJvciA9ICdSZXNpemVOZWFyZXN0TmVpZ2hib3InO1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9ySW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnMge1xuICBhbGlnbkNvcm5lcnM6IGJvb2xlYW47XG4gIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW47XG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkID0gJ1Jlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQnO1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZElucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZXMnfCdkeSc+O1xuZXhwb3J0IHR5cGUgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZEF0dHJzID0gUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnM7XG5cbmV4cG9ydCBjb25zdCBSZXNpemVCaWxpbmVhciA9ICdSZXNpemVCaWxpbmVhcic7XG5leHBvcnQgdHlwZSBSZXNpemVCaWxpbmVhcklucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2VzJz47XG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZUJpbGluZWFyQXR0cnMge1xuICBhbGlnbkNvcm5lcnM6IGJvb2xlYW47XG4gIGhhbGZQaXhlbENlbnRlcnM6IGJvb2xlYW47XG4gIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBjb25zdCBSZXNpemVCaWxpbmVhckdyYWQgPSAnUmVzaXplQmlsaW5lYXJHcmFkJztcbmV4cG9ydCB0eXBlIFJlc2l6ZUJpbGluZWFyR3JhZElucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW1hZ2VzJ3wnZHknPjtcbmV4cG9ydCB0eXBlIFJlc2l6ZUJpbGluZWFyR3JhZEF0dHJzID0gUmVzaXplQmlsaW5lYXJBdHRycztcblxuZXhwb3J0IGNvbnN0IFJlbHU2ID0gJ1JlbHU2JztcbmV4cG9ydCB0eXBlIFJlbHU2SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBSZXZlcnNlID0gJ1JldmVyc2UnO1xuZXhwb3J0IHR5cGUgUmV2ZXJzZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlQXR0cnMge1xuICBkaW1zOiBudW1iZXJ8bnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBSb3VuZCA9ICdSb3VuZCc7XG5leHBvcnQgdHlwZSBSb3VuZElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgUnNxcnQgPSAnUnNxcnQnO1xuZXhwb3J0IHR5cGUgUnNxcnRJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNjYXR0ZXJOZCA9ICdTY2F0dGVyTmQnO1xuZXhwb3J0IHR5cGUgU2NhdHRlck5kSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJ3wndXBkYXRlcyc+O1xuZXhwb3J0IGludGVyZmFjZSBTY2F0dGVyTmRBdHRycyB7XG4gIHNoYXBlOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRlbnNvclNjYXR0ZXJVcGRhdGUgPSAnVGVuc29yU2NhdHRlclVwZGF0ZSc7XG5leHBvcnQgdHlwZSBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3RlbnNvcid8J2luZGljZXMnfCd1cGRhdGVzJz47XG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRycyB7fVxuXG5leHBvcnQgY29uc3QgU2VhcmNoU29ydGVkID0gJ1NlYXJjaFNvcnRlZCc7XG5leHBvcnQgdHlwZSBTZWFyY2hTb3J0ZWRJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnc29ydGVkU2VxdWVuY2UnfCd2YWx1ZXMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoU29ydGVkQXR0cnMge1xuICBzaWRlOiAnbGVmdCd8J3JpZ2h0Jztcbn1cblxuZXhwb3J0IGNvbnN0IFNlbGVjdCA9ICdTZWxlY3QnO1xuZXhwb3J0IHR5cGUgU2VsZWN0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdjb25kaXRpb24nfCd0J3wnZSc+O1xuXG5leHBvcnQgY29uc3QgU2VsdSA9ICdTZWx1JztcbmV4cG9ydCB0eXBlIFNlbHVJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFNsaWNlID0gJ1NsaWNlJztcbmV4cG9ydCB0eXBlIFNsaWNlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQXR0cnMge1xuICBiZWdpbjogbnVtYmVyfG51bWJlcltdO1xuICBzaXplOiBudW1iZXJ8bnVtYmVyW107XG59XG5leHBvcnQgY29uc3QgU2luID0gJ1Npbic7XG5leHBvcnQgdHlwZSBTaW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNpbmggPSAnU2luaCc7XG5leHBvcnQgdHlwZSBTaW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBTaWduID0gJ1NpZ24nO1xuZXhwb3J0IHR5cGUgU2lnbklucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgU2lnbW9pZCA9ICdTaWdtb2lkJztcbmV4cG9ydCB0eXBlIFNpZ21vaWRJbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNvZnRwbHVzID0gJ1NvZnRwbHVzJztcbmV4cG9ydCB0eXBlIFNvZnRwbHVzSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBTcXJ0ID0gJ1NxcnQnO1xuZXhwb3J0IHR5cGUgU3FydElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgU3VtID0gJ1N1bSc7XG5leHBvcnQgdHlwZSBTdW1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3VtQXR0cnMge1xuICBheGlzOiBudW1iZXJ8bnVtYmVyW107XG4gIGtlZXBEaW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3BhY2VUb0JhdGNoTkQgPSAnU3BhY2VUb0JhdGNoTkQnO1xuZXhwb3J0IHR5cGUgU3BhY2VUb0JhdGNoTkRJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3BhY2VUb0JhdGNoTkRBdHRycyB7XG4gIGJsb2NrU2hhcGU6IG51bWJlcltdO1xuICBwYWRkaW5nczogbnVtYmVyW11bXTtcbn1cblxuZXhwb3J0IGNvbnN0IFNwbGl0ViA9ICdTcGxpdFYnO1xuZXhwb3J0IHR5cGUgU3BsaXRWSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFNwbGl0VkF0dHJzIHtcbiAgbnVtT3JTaXplU3BsaXRzOiBudW1iZXJbXXxudW1iZXI7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFNvZnRtYXggPSAnU29mdG1heCc7XG5leHBvcnQgdHlwZSBTb2Z0bWF4SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdsb2dpdHMnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU29mdG1heEF0dHJzIHtcbiAgZGltOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBTcGFyc2VGaWxsRW1wdHlSb3dzID0gJ1NwYXJzZUZpbGxFbXB0eVJvd3MnO1xuZXhwb3J0IHR5cGUgU3BhcnNlRmlsbEVtcHR5Um93c0lucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbmRpY2VzJ3wndmFsdWVzJ3wnZGVuc2VTaGFwZSd8J2RlZmF1bHRWYWx1ZSc+O1xuXG5leHBvcnQgY29uc3QgU3BhcnNlUmVzaGFwZSA9ICdTcGFyc2VSZXNoYXBlJztcbmV4cG9ydCB0eXBlIFNwYXJzZVJlc2hhcGVJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnaW5wdXRJbmRpY2VzJ3wnaW5wdXRTaGFwZSd8J25ld1NoYXBlJz47XG5cbmV4cG9ydCBjb25zdCBTcGFyc2VTZWdtZW50TWVhbiA9ICdTcGFyc2VTZWdtZW50TWVhbic7XG5leHBvcnQgdHlwZSBTcGFyc2VTZWdtZW50TWVhbklucHV0cyA9XG4gICAgUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkYXRhJ3wnaW5kaWNlcyd8J3NlZ21lbnRJZHMnPjtcblxuZXhwb3J0IGNvbnN0IFNwYXJzZVNlZ21lbnRTdW0gPSAnU3BhcnNlU2VnbWVudFN1bSc7XG5leHBvcnQgdHlwZSBTcGFyc2VTZWdtZW50U3VtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2RhdGEnfCdpbmRpY2VzJ3wnc2VnbWVudElkcyc+O1xuXG5leHBvcnQgY29uc3QgU3BhcnNlVG9EZW5zZSA9ICdTcGFyc2VUb0RlbnNlJztcbmV4cG9ydCB0eXBlIFNwYXJzZVRvRGVuc2VJbnB1dHMgPVxuICAgIFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAnc3BhcnNlSW5kaWNlcyd8J3NwYXJzZVZhbHVlcyd8J2RlZmF1bHRWYWx1ZSc+O1xuZXhwb3J0IGludGVyZmFjZSBTcGFyc2VUb0RlbnNlQXR0cnMge1xuICBvdXRwdXRTaGFwZTogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBTcXVhcmVkRGlmZmVyZW5jZSA9ICdTcXVhcmVkRGlmZmVyZW5jZSc7XG5leHBvcnQgdHlwZSBTcXVhcmVkRGlmZmVyZW5jZUlucHV0cyA9IEJpbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFNxdWFyZSA9ICdTcXVhcmUnO1xuZXhwb3J0IHR5cGUgU3F1YXJlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5cbmV4cG9ydCBjb25zdCBTdGF0aWNSZWdleFJlcGxhY2UgPSAnU3RhdGljUmVnZXhSZXBsYWNlJztcbmV4cG9ydCB0eXBlIFN0YXRpY1JlZ2V4UmVwbGFjZUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNSZWdleFJlcGxhY2VBdHRycyB7XG4gIHBhdHRlcm46IHN0cmluZztcbiAgcmV3cml0ZTogc3RyaW5nO1xuICByZXBsYWNlR2xvYmFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3RyaWRlZFNsaWNlID0gJ1N0cmlkZWRTbGljZSc7XG5leHBvcnQgdHlwZSBTdHJpZGVkU2xpY2VJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcbmV4cG9ydCBpbnRlcmZhY2UgU3RyaWRlZFNsaWNlQXR0cnMge1xuICBiZWdpbjogbnVtYmVyW107XG4gIGVuZDogbnVtYmVyW107XG4gIHN0cmlkZXM6IG51bWJlcltdO1xuICBiZWdpbk1hc2s6IG51bWJlcjtcbiAgZW5kTWFzazogbnVtYmVyO1xuICBlbGxpcHNpc01hc2s6IG51bWJlcjtcbiAgbmV3QXhpc01hc2s6IG51bWJlcjtcbiAgc2hyaW5rQXhpc01hc2s6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFN0cmluZ05HcmFtcyA9ICdTdHJpbmdOR3JhbXMnO1xuZXhwb3J0IHR5cGUgU3RyaW5nTkdyYW1zSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdkYXRhJ3wnZGF0YVNwbGl0cyc+O1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdOR3JhbXNBdHRycyB7XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICBuR3JhbVdpZHRoczogbnVtYmVyW107XG4gIGxlZnRQYWQ6IHN0cmluZztcbiAgcmlnaHRQYWQ6IHN0cmluZztcbiAgcGFkV2lkdGg6IG51bWJlcjtcbiAgcHJlc2VydmVTaG9ydFNlcXVlbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFN0cmluZ1NwbGl0ID0gJ1N0cmluZ1NwbGl0JztcbmV4cG9ydCB0eXBlIFN0cmluZ1NwbGl0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbnB1dCd8J2RlbGltaXRlcic+O1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdTcGxpdEF0dHJzIHtcbiAgc2tpcEVtcHR5OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgU3RyaW5nVG9IYXNoQnVja2V0RmFzdCA9ICdTdHJpbmdUb0hhc2hCdWNrZXRGYXN0JztcbmV4cG9ydCB0eXBlIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2lucHV0Jz47XG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RBdHRycyB7XG4gIG51bUJ1Y2tldHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFN1YiA9ICdTdWInO1xuZXhwb3J0IHR5cGUgU3ViSW5wdXRzID0gQmluYXJ5SW5wdXRzO1xuXG5leHBvcnQgY29uc3QgVGFuID0gJ1Rhbic7XG5leHBvcnQgdHlwZSBUYW5JbnB1dHMgPSBVbmFyeUlucHV0cztcblxuZXhwb3J0IGNvbnN0IFRhbmggPSAnVGFuaCc7XG5leHBvcnQgdHlwZSBUYW5oSW5wdXRzID0gVW5hcnlJbnB1dHM7XG5cbmV4cG9ydCBjb25zdCBUaWxlID0gJ1RpbGUnO1xuZXhwb3J0IHR5cGUgVGlsZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBUaWxlQXR0cnMge1xuICByZXBzOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvcEsgPSAnVG9wSyc7XG5leHBvcnQgdHlwZSBUb3BLSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFRvcEtBdHRycyB7XG4gIGs6IG51bWJlcjtcbiAgc29ydGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtID0gJ1RyYW5zZm9ybSc7XG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1JbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ2ltYWdlJ3wndHJhbnNmb3Jtcyc+O1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1BdHRycyB7XG4gIGludGVycG9sYXRpb246ICduZWFyZXN0J3wnYmlsaW5lYXInO1xuICBmaWxsTW9kZTogJ2NvbnN0YW50J3wncmVmbGVjdCd8J3dyYXAnfCduZWFyZXN0JztcbiAgZmlsbFZhbHVlOiBudW1iZXI7XG4gIG91dHB1dFNoYXBlPzogW251bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IFRyYW5zcG9zZSA9ICdUcmFuc3Bvc2UnO1xuZXhwb3J0IHR5cGUgVHJhbnNwb3NlSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd4Jz47XG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9zZUF0dHJzIHtcbiAgcGVybTogbnVtYmVyW107XG59XG5cbmV4cG9ydCBjb25zdCBVbmlxdWUgPSAnVW5pcXVlJztcbmV4cG9ydCB0eXBlIFVuaXF1ZUlucHV0cyA9IFBpY2s8TmFtZWRUZW5zb3JJbmZvTWFwLCAneCc+O1xuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVW5hcnlJbnB1dHMgPSBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnPjtcblxuZXhwb3J0IGNvbnN0IFVucGFjayA9ICdVbnBhY2snO1xuZXhwb3J0IHR5cGUgVW5wYWNrSW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICd2YWx1ZSc+O1xuZXhwb3J0IGludGVyZmFjZSBVbnBhY2tBdHRycyB7XG4gIGF4aXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFVuc29ydGVkU2VnbWVudFN1bSA9ICdVbnNvcnRlZFNlZ21lbnRTdW0nO1xuZXhwb3J0IHR5cGUgVW5zb3J0ZWRTZWdtZW50U3VtSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3gnfCdzZWdtZW50SWRzJz47XG5leHBvcnQgaW50ZXJmYWNlIFVuc29ydGVkU2VnbWVudFN1bUF0dHJzIHtcbiAgbnVtU2VnbWVudHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFVwcGVyQm91bmQgPSAnVXBwZXJCb3VuZCc7XG5leHBvcnQgdHlwZSBVcHBlckJvdW5kSW5wdXRzID1cbiAgICBQaWNrPE5hbWVkVGVuc29ySW5mb01hcCwgJ3NvcnRlZFNlcXVlbmNlJ3wndmFsdWVzJz47XG5cbmV4cG9ydCBjb25zdCBaZXJvc0xpa2UgPSAnWmVyb3NMaWtlJztcbmV4cG9ydCB0eXBlIFplcm9zTGlrZUlucHV0cyA9IFVuYXJ5SW5wdXRzO1xuXG4vKipcbiAqIFRlbnNvckZsb3cuanMtb25seSBrZXJuZWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTdGVwID0gJ1N0ZXAnO1xuZXhwb3J0IHR5cGUgU3RlcElucHV0cyA9IFVuYXJ5SW5wdXRzO1xuZXhwb3J0IGludGVyZmFjZSBTdGVwQXR0cnMge1xuICBhbHBoYTogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRnJvbVBpeGVscyA9ICdGcm9tUGl4ZWxzJztcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVBpeGVsc0lucHV0cyB7XG4gIHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgICAgSFRNTFZpZGVvRWxlbWVudHxJbWFnZUJpdG1hcDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVBpeGVsc0F0dHJzIHtcbiAgbnVtQ2hhbm5lbHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFJvdGF0ZVdpdGhPZmZzZXQgPSAnUm90YXRlV2l0aE9mZnNldCc7XG5leHBvcnQgdHlwZSBSb3RhdGVXaXRoT2Zmc2V0SW5wdXRzID0gUGljazxOYW1lZFRlbnNvckluZm9NYXAsICdpbWFnZSc+O1xuZXhwb3J0IGludGVyZmFjZSBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMge1xuICByYWRpYW5zOiBudW1iZXI7XG4gIGZpbGxWYWx1ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgY2VudGVyOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXTtcbn1cblxuZXhwb3J0IGNvbnN0IF9GdXNlZE1hdE11bCA9ICdfRnVzZWRNYXRNdWwnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjbGFzcy1uYW1lXG5leHBvcnQgaW50ZXJmYWNlIF9GdXNlZE1hdE11bElucHV0cyBleHRlbmRzIE5hbWVkVGVuc29ySW5mb01hcCB7XG4gIGE6IFRlbnNvckluZm87XG4gIGI6IFRlbnNvckluZm87XG4gIGJpYXM/OiBUZW5zb3JJbmZvO1xuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzPzogVGVuc29ySW5mbztcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY2xhc3MtbmFtZVxuZXhwb3J0IGludGVyZmFjZSBfRnVzZWRNYXRNdWxBdHRycyB7XG4gIHRyYW5zcG9zZUE6IGJvb2xlYW47XG4gIHRyYW5zcG9zZUI6IGJvb2xlYW47XG4gIGFjdGl2YXRpb246IEFjdGl2YXRpb247XG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgRnVzZWRDb252MkQgPSAnRnVzZWRDb252MkQnO1xuZXhwb3J0IGludGVyZmFjZSBGdXNlZENvbnYyRElucHV0cyBleHRlbmRzIE5hbWVkVGVuc29ySW5mb01hcCB7XG4gIHg6IFRlbnNvckluZm87XG4gIGZpbHRlcjogVGVuc29ySW5mbztcbiAgYmlhcz86IFRlbnNvckluZm87XG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3JJbmZvO1xufVxuZXhwb3J0IGludGVyZmFjZSBGdXNlZENvbnYyREF0dHJzIHtcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZztcbiAgZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJztcbiAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcjtcbiAgZGltUm91bmRpbmdNb2RlOiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnO1xuICBhY3RpdmF0aW9uOiBBY3RpdmF0aW9uO1xuICBsZWFreXJlbHVBbHBoYT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEZ1c2VkRGVwdGh3aXNlQ29udjJEID0gJ0Z1c2VkRGVwdGh3aXNlQ29udjJEJztcbmV4cG9ydCBpbnRlcmZhY2UgRnVzZWREZXB0aHdpc2VDb252MkRJbnB1dHMgZXh0ZW5kcyBOYW1lZFRlbnNvckluZm9NYXAge1xuICB4OiBUZW5zb3JJbmZvO1xuICBmaWx0ZXI6IFRlbnNvckluZm87XG4gIGJpYXM/OiBUZW5zb3JJbmZvO1xuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzPzogVGVuc29ySW5mbztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRnVzZWREZXB0aHdpc2VDb252MkRBdHRycyB7XG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyO1xuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmc7XG4gIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVyc7XG4gIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXI7XG4gIGRpbVJvdW5kaW5nTW9kZTogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJztcbiAgYWN0aXZhdGlvbjogQWN0aXZhdGlvbjtcbiAgbGVha3lyZWx1QWxwaGE/OiBudW1iZXI7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nexport function warn(...msg) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.warn(...msg);\n }\n}\nexport function log(...msg) {\n if (!(env().getBool('IS_TEST') || env().getBool('PROD'))) {\n console.log(...msg);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9sb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVsQyxNQUFNLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBYztJQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7UUFDeEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFjO0lBQ25DLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtRQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDckI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuKC4uLm1zZzogQXJyYXk8e30+KTogdm9pZCB7XG4gIGlmICghKGVudigpLmdldEJvb2woJ0lTX1RFU1QnKSB8fCBlbnYoKS5nZXRCb29sKCdQUk9EJykpKSB7XG4gICAgY29uc29sZS53YXJuKC4uLm1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZyguLi5tc2c6IEFycmF5PHt9Pik6IHZvaWQge1xuICBpZiAoIShlbnYoKS5nZXRCb29sKCdJU19URVNUJykgfHwgZW52KCkuZ2V0Qm9vbCgnUFJPRCcpKSkge1xuICAgIGNvbnNvbGUubG9nKC4uLm1zZyk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport { getGlobal } from './global_util';\nimport * as log from './log';\nconst kernelRegistry = getGlobal('kernelRegistry', () => new Map());\nconst gradRegistry = getGlobal('gradRegistry', () => new Map());\n/**\n * Returns the kernel function (code) associated with the provided names.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n */\nexport function getKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n return kernelRegistry.get(key);\n}\n/**\n * Returns the registered gradient info associated with the provided kernel.\n * @param kernelName The official TF kernel name.\n */\nexport function getGradient(kernelName) {\n return gradRegistry.get(kernelName);\n}\nexport function getKernelsForBackend(backendName) {\n const it = kernelRegistry.entries();\n const result = [];\n while (true) {\n const { done, value } = it.next();\n if (done) {\n break;\n }\n const [key, config] = value;\n const [backend,] = key.split('_');\n if (backend === backendName) {\n result.push(config);\n }\n }\n return result;\n}\n/**\n * Registers the function (forward pass) for the kernel in a global registry.\n *\n * @param config A config object with the following properties:\n * - `kernelName` The official name of the kernel.\n * - `backendName` The official name of the backend.\n * - `kernelFunc` The function to run during the forward pass of the kernel.\n * - `setupFunc` Optional. Gets called once, after the backend initializes.\n * - `disposeFunc` Optional. Gets called once, right before the backend is\n * disposed.\n */\nexport function registerKernel(config) {\n const { kernelName, backendName } = config;\n const key = makeKey(kernelName, backendName);\n if (kernelRegistry.has(key)) {\n log.warn(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is already registered`);\n }\n kernelRegistry.set(key, config);\n}\n/**\n * Registers a gradient function for a given kernel in the global registry,\n * to be used during the back-propagation of that kernel.\n *\n * @param config An object with the following properties:\n * - `kernelName` The name of the kernel that the gradient function is for.\n * - `gradFunc` The function to run during back-propagation.\n */\nexport function registerGradient(config) {\n const { kernelName } = config;\n if (gradRegistry.has(kernelName)) {\n // TODO (yassogba) after 3.0 assess whether we need to keep this gated\n // to debug mode.\n if (env().getBool('DEBUG')) {\n log.warn(`Overriding the gradient for '${kernelName}'`);\n }\n }\n gradRegistry.set(kernelName, config);\n}\n/**\n * Removes the kernel function from the registry.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n *\n */\nexport function unregisterKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n if (!kernelRegistry.has(key)) {\n throw new Error(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is not registered`);\n }\n kernelRegistry.delete(key);\n}\n/** Removes the registered gradient from the global registry. */\nexport function unregisterGradient(kernelName) {\n if (!gradRegistry.has(kernelName)) {\n throw new Error(`The gradient '${kernelName}' for backend is not registered`);\n }\n gradRegistry.delete(kernelName);\n}\n/**\n * Finds kernels that have already been registered to a backend and re-registers\n * them for a new backend. Useful for registering custom backends.\n * @param registeredBackendName Already registered backend.\n * @param newBackendName New backend.\n */\nexport function copyRegisteredKernels(registeredBackendName, newBackendName) {\n const kernels = getKernelsForBackend(registeredBackendName);\n kernels.forEach(kernelConfig => {\n const newKernelConfig = Object.assign({}, kernelConfig, { backendName: newBackendName });\n registerKernel(newKernelConfig);\n });\n}\nfunction makeKey(kernelName, backendName) {\n return `${backendName}_${kernelName}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX3JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9rZXJuZWxfcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBTTdCLE1BQU0sY0FBYyxHQUNsQixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQ3hCLENBQUMsQ0FBQztBQUNyQixNQUFNLFlBQVksR0FDaEIsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBc0IsQ0FBQyxDQUFDO0FBcURqRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3JCLFVBQWtCLEVBQUUsV0FBbUI7SUFDekMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3QyxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBa0I7SUFDNUMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsV0FBbUI7SUFDdEQsTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFFbEMsT0FBTyxJQUFJLEVBQUU7UUFDWCxNQUFNLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQyxHQUFHLEVBQUUs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QUFPLENBQUMsVUFBa0IsRUFDbEIsV0FBbUI7SUFDbEMsT0FBTyxHQUFHLFdBQVcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gJy4vZ2xvYmFsX3V0aWwnO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gJy4vbG9nJztcbmltcG9ydCB7TmFtZWRHcmFkaWVudE1hcH0gZnJvbSAnLi90YXBlJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckluZm99IGZyb20gJy4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtSZWN1cnNpdmVBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IGtlcm5lbFJlZ2lzdHJ5ID1cbiAgZ2V0R2xvYmFsKCdrZXJuZWxSZWdpc3RyeScsICgpID0+IG5ldyBNYXA8YCR7c3RyaW5nfV8ke3N0cmluZ31gLFxuICAgIEtlcm5lbENvbmZpZz4oKSk7XG5jb25zdCBncmFkUmVnaXN0cnkgPVxuICBnZXRHbG9iYWwoJ2dyYWRSZWdpc3RyeScsICgpID0+IG5ldyBNYXA8c3RyaW5nLCBHcmFkQ29uZmlnPigpKTtcblxudHlwZSBBdHRyaWJ1dGVWYWx1ZSA9XG4gIG51bWJlciB8IG51bWJlcltdIHwgYm9vbGVhbiB8IGJvb2xlYW5bXSB8IHN0cmluZyB8IHN0cmluZ1tdIHwgTmFtZWRBdHRyTWFwO1xuXG4vKiogVGhlc2UgYXJlIGV4dHJhIG5vbi10ZW5zb3IvcHJpbWl0aXZlIHBhcmFtcyBwYXNzZWQgdG8ga2VybmVsIGZ1bmN0aW9ucy4gKi9cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZSA9IEF0dHJpYnV0ZVZhbHVlIHwgUmVjdXJzaXZlQXJyYXk8QXR0cmlidXRlVmFsdWU+O1xuXG4vKiogU3BlY2lmaWVzIHRoZSBjb2RlIHRvIHJ1biB3aGVuIGV4ZWN1dGluZyBhIGtlcm5lbC4gKi9cbmV4cG9ydCB0eXBlIEtlcm5lbEZ1bmMgPSAocGFyYW1zOiB7XG4gIGlucHV0czogTmFtZWRUZW5zb3JJbmZvTWFwLFxuICBiYWNrZW5kOiB7fSxcbiAgYXR0cnM/OiBOYW1lZEF0dHJNYXAsXG59KSA9PiBUZW5zb3JJbmZvIHwgVGVuc29ySW5mb1tdO1xuXG4vKiogVGhlIGZ1bmN0aW9uIHRvIHJ1biB3aGVuIGNvbXB1dGluZyBhIGdyYWRpZW50IGR1cmluZyBiYWNrcHJvcC4gKi9cbmV4cG9ydCB0eXBlIEdyYWRGdW5jID1cbiAgKGR5OiBUZW5zb3IgfCBUZW5zb3JbXSwgc2F2ZWQ6IFRlbnNvcltdLCBhdHRyczogTmFtZWRBdHRyTWFwKSA9PlxuICAgIE5hbWVkR3JhZGllbnRNYXA7XG5cbi8qKiBGdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGFmdGVyIHRoZSBiYWNrZW5kIGluaXRpYWxpemVzLiAqL1xuZXhwb3J0IHR5cGUgS2VybmVsU2V0dXBGdW5jID0gKGJhY2tlbmQ6IHt9KSA9PiB2b2lkO1xuLyoqIEZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgcmlnaHQgYmVmb3JlIHRoZSBiYWNrZW5kIGlzIGRpc3Bvc2VkLiAqL1xuZXhwb3J0IHR5cGUgS2VybmVsRGlzcG9zZUZ1bmMgPSBLZXJuZWxTZXR1cEZ1bmM7XG5cbi8qKiBDb25maWcgb2JqZWN0IGZvciByZWdpc3RlcmluZyBhIGtlcm5lbCBpbiB0aGUgZ2xvYmFsIHJlZ2lzdHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXJuZWxDb25maWcge1xuICBrZXJuZWxOYW1lOiBzdHJpbmc7XG4gIGJhY2tlbmROYW1lOiBzdHJpbmc7XG4gIGtlcm5lbEZ1bmM6IEtlcm5lbEZ1bmM7XG4gIHNldHVwRnVuYz86IEtlcm5lbFNldHVwRnVuYztcbiAgZGlzcG9zZUZ1bmM/OiBLZXJuZWxEaXNwb3NlRnVuYztcbn1cblxuLyoqIENvbmZpZyBvYmplY3QgZm9yIHJlZ2lzdGVyaW5nIGEgZ3JhZGllbnQgaW4gdGhlIGdsb2JhbCByZWdpc3RyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhZENvbmZpZyB7XG4gIGtlcm5lbE5hbWU6IHN0cmluZztcbiAgaW5wdXRzVG9TYXZlPzogc3RyaW5nW107XG4gIC8vIFdoZW4gc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBhbGwgaW5wdXRzIHdpbGwgYmUgc2F2ZWQuIE9ubHkgdXNlIHRoaXMgZmxhZ1xuICAvLyBpZiBpbnB1dHMgaXMgYW4gYXJyYXkgb2YgVGVuc29ycy5cbiAgc2F2ZUFsbElucHV0cz86IGJvb2xlYW47XG4gIG91dHB1dHNUb1NhdmU/OiBib29sZWFuW107XG4gIGdyYWRGdW5jOiBHcmFkRnVuYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYW1lZFRlbnNvckluZm9NYXAge1xuICBbbmFtZTogc3RyaW5nXTogVGVuc29ySW5mb3x1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZWRBdHRyTWFwIHtcbiAgW25hbWU6IHN0cmluZ106IEF0dHJpYnV0ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBrZXJuZWwgZnVuY3Rpb24gKGNvZGUpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZXMuXG4gKlxuICogQHBhcmFtIGtlcm5lbE5hbWUgVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhlIGtlcm5lbC5cbiAqIEBwYXJhbSBiYWNrZW5kTmFtZSBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGUgYmFja2VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtlcm5lbChcbiAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGJhY2tlbmROYW1lOiBzdHJpbmcpOiBLZXJuZWxDb25maWcge1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KGtlcm5lbE5hbWUsIGJhY2tlbmROYW1lKTtcbiAgcmV0dXJuIGtlcm5lbFJlZ2lzdHJ5LmdldChrZXkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgZ3JhZGllbnQgaW5mbyBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVkIGtlcm5lbC5cbiAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBvZmZpY2lhbCBURiBrZXJuZWwgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYWRpZW50KGtlcm5lbE5hbWU6IHN0cmluZyk6IEdyYWRDb25maWcge1xuICByZXR1cm4gZ3JhZFJlZ2lzdHJ5LmdldChrZXJuZWxOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtlcm5lbHNGb3JCYWNrZW5kKGJhY2tlbmROYW1lOiBzdHJpbmcpOiBLZXJuZWxDb25maWdbXSB7XG4gIGNvbnN0IGl0ID0ga2VybmVsUmVnaXN0cnkuZW50cmllcygpO1xuICBjb25zdCByZXN1bHQ6IEtlcm5lbENvbmZpZ1tdID0gW107XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gaXQubmV4dCgpO1xuICAgIGlmIChkb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgW2tleSwgY29uZmlnXSA9IHZhbHVlO1xuICAgIGNvbnN0IFtiYWNrZW5kLCBdID0ga2V5LnNwbGl0KCdfJyk7XG4gICAgaWYgKGJhY2tlbmQgPT09IGJhY2tlbmROYW1lKSB7XG4gICAgICByZXN1bHQucHVzaChjb25maWcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZnVuY3Rpb24gKGZvcndhcmQgcGFzcykgZm9yIHRoZSBrZXJuZWwgaW4gYSBnbG9iYWwgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIGNvbmZpZyBBIGNvbmZpZyBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIGBrZXJuZWxOYW1lYCBUaGUgb2ZmaWNpYWwgbmFtZSBvZiB0aGUga2VybmVsLlxuICogLSBgYmFja2VuZE5hbWVgIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBiYWNrZW5kLlxuICogLSBga2VybmVsRnVuY2AgVGhlIGZ1bmN0aW9uIHRvIHJ1biBkdXJpbmcgdGhlIGZvcndhcmQgcGFzcyBvZiB0aGUga2VybmVsLlxuICogLSBgc2V0dXBGdW5jYCBPcHRpb25hbC4gR2V0cyBjYWxsZWQgb25jZSwgYWZ0ZXIgdGhlIGJhY2tlbmQgaW5pdGlhbGl6ZXMuXG4gKiAtIGBkaXNwb3NlRnVuY2AgT3B0aW9uYWwuIEdldHMgY2FsbGVkIG9uY2UsIHJpZ2h0IGJlZm9yZSB0aGUgYmFja2VuZCBpc1xuICogZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcktlcm5lbChjb25maWc6IEtlcm5lbENvbmZpZykge1xuICBjb25zdCB7a2VybmVsTmFtZSwgYmFja2VuZE5hbWV9ID0gY29uZmlnO1xuICBjb25zdCBrZXkgPSBtYWtlS2V5KGtlcm5lbE5hbWUsIGJhY2tlbmROYW1lKTtcbiAgaWYgKGtlcm5lbFJlZ2lzdHJ5LmhhcyhrZXkpKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICAgIGBUaGUga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBgICtcbiAgICAgICAgYCcke2JhY2tlbmROYW1lfScgaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7XG4gIH1cbiAga2VybmVsUmVnaXN0cnkuc2V0KGtleSwgY29uZmlnKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBncmFkaWVudCBmdW5jdGlvbiBmb3IgYSBnaXZlbiBrZXJuZWwgaW4gdGhlIGdsb2JhbCByZWdpc3RyeSxcbiAqIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBiYWNrLXByb3BhZ2F0aW9uIG9mIHRoYXQga2VybmVsLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBga2VybmVsTmFtZWAgVGhlIG5hbWUgb2YgdGhlIGtlcm5lbCB0aGF0IHRoZSBncmFkaWVudCBmdW5jdGlvbiBpcyBmb3IuXG4gKiAtIGBncmFkRnVuY2AgVGhlIGZ1bmN0aW9uIHRvIHJ1biBkdXJpbmcgYmFjay1wcm9wYWdhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR3JhZGllbnQoY29uZmlnOiBHcmFkQ29uZmlnKSB7XG4gIGNvbnN0IHtrZXJuZWxOYW1lfSA9IGNvbmZpZztcblxuICBpZiAoZ3JhZFJlZ2lzdHJ5LmhhcyhrZXJuZWxOYW1lKSkge1xuICAgIC8vIFRPRE8gKHlhc3NvZ2JhKSBhZnRlciAzLjAgYXNzZXNzIHdoZXRoZXIgd2UgbmVlZCB0byBrZWVwIHRoaXMgZ2F0ZWRcbiAgICAvLyB0byBkZWJ1ZyBtb2RlLlxuICAgIGlmIChlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgICBsb2cud2FybihgT3ZlcnJpZGluZyB0aGUgZ3JhZGllbnQgZm9yICcke2tlcm5lbE5hbWV9J2ApO1xuICAgIH1cbiAgfVxuICBncmFkUmVnaXN0cnkuc2V0KGtlcm5lbE5hbWUsIGNvbmZpZyk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUga2VybmVsIGZ1bmN0aW9uIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBrZXJuZWwuXG4gKiBAcGFyYW0gYmFja2VuZE5hbWUgVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhlIGJhY2tlbmQuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3Rlcktlcm5lbChcbiAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGJhY2tlbmROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gbWFrZUtleShrZXJuZWxOYW1lLCBiYWNrZW5kTmFtZSk7XG4gIGlmICgha2VybmVsUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBgICtcbiAgICAgICAgYCcke2JhY2tlbmROYW1lfScgaXMgbm90IHJlZ2lzdGVyZWRgKTtcbiAgfVxuICBrZXJuZWxSZWdpc3RyeS5kZWxldGUoa2V5KTtcbn1cblxuLyoqIFJlbW92ZXMgdGhlIHJlZ2lzdGVyZWQgZ3JhZGllbnQgZnJvbSB0aGUgZ2xvYmFsIHJlZ2lzdHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJHcmFkaWVudChrZXJuZWxOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFncmFkUmVnaXN0cnkuaGFzKGtlcm5lbE5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGdyYWRpZW50ICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCBpcyBub3QgcmVnaXN0ZXJlZGApO1xuICB9XG4gIGdyYWRSZWdpc3RyeS5kZWxldGUoa2VybmVsTmFtZSk7XG59XG5cbi8qKlxuICogRmluZHMga2VybmVscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgdG8gYSBiYWNrZW5kIGFuZCByZS1yZWdpc3RlcnNcbiAqIHRoZW0gZm9yIGEgbmV3IGJhY2tlbmQuIFVzZWZ1bCBmb3IgcmVnaXN0ZXJpbmcgY3VzdG9tIGJhY2tlbmRzLlxuICogQHBhcmFtIHJlZ2lzdGVyZWRCYWNrZW5kTmFtZSBBbHJlYWR5IHJlZ2lzdGVyZWQgYmFja2VuZC5cbiAqIEBwYXJhbSBuZXdCYWNrZW5kTmFtZSBOZXcgYmFja2VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlSZWdpc3RlcmVkS2VybmVscyhcbiAgICByZWdpc3RlcmVkQmFja2VuZE5hbWU6IHN0cmluZywgbmV3QmFja2VuZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBrZXJuZWxzID0gZ2V0S2VybmVsc0ZvckJhY2tlbmQocmVnaXN0ZXJlZEJhY2tlbmROYW1lKTtcbiAga2VybmVscy5mb3JFYWNoKGtlcm5lbENvbmZpZyA9PiB7XG4gICAgY29uc3QgbmV3S2VybmVsQ29uZmlnID1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwga2VybmVsQ29uZmlnLCB7YmFja2VuZE5hbWU6IG5ld0JhY2tlbmROYW1lfSk7XG4gICAgcmVnaXN0ZXJLZXJuZWwobmV3S2VybmVsQ29uZmlnKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VLZXkoa2VybmVsTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICBiYWNrZW5kTmFtZTogc3RyaW5nKTogYCR7c3RyaW5nfV8ke3N0cmluZ31gIHtcbiAgcmV0dXJuIGAke2JhY2tlbmROYW1lfV8ke2tlcm5lbE5hbWV9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport function isTypedArrayBrowser(a) {\n return a instanceof Float32Array || a instanceof Int32Array ||\n a instanceof Uint8Array || a instanceof Uint8ClampedArray;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfdHlwZWRfYXJyYXlfYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL2lzX3R5cGVkX2FycmF5X2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLENBQVU7SUFFNUMsT0FBTyxDQUFDLFlBQVksWUFBWSxJQUFJLENBQUMsWUFBWSxVQUFVO1FBQ3pELENBQUMsWUFBWSxVQUFVLElBQUksQ0FBQyxZQUFZLGlCQUFpQixDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkQXJyYXlCcm93c2VyKGE6IHVua25vd24pOiBhIGlzIFVpbnQ4QXJyYXlcbiAgfCBGbG9hdDMyQXJyYXkgfCBJbnQzMkFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkge1xuICByZXR1cm4gYSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fCBhIGluc3RhbmNlb2YgSW50MzJBcnJheSB8fFxuICAgIGEgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheTtcbn1cbiJdfQ==","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Workaround for allowing cjs module to be included in bundle created by\n// rollup.\nimport * as LongExports from 'long';\n// tslint:disable-next-line\nconst Long = \n// tslint:disable-next-line\nLongExports.default || LongExports;\nexport function hexToLong(hex) {\n return Long.fromString(hex, true, 16);\n}\n// Some primes between 2^63 and 2^64 for various uses.\n// Hex 0xc3a5c85c97cb3127\nconst k0 = hexToLong('c3a5c85c97cb3127');\n// Hex 0xb492b66fbe98f273\nconst k1 = hexToLong('b492b66fbe98f273');\n// Hex 0x9ae16a3b2f90404f\nconst k2 = hexToLong('9ae16a3b2f90404f');\nfunction shiftMix(val) {\n return val.xor(val.shru(47));\n}\nfunction fetch(s, offset, numBytes) {\n const bytes = s.slice(offset, offset + numBytes);\n return Long.fromBytes(Array.from(bytes), true, true);\n}\nfunction fetch64(s, offset) {\n return fetch(s, offset, 8);\n}\nfunction fetch32(s, offset) {\n return fetch(s, offset, 4);\n}\nfunction rotate64(val, shift) {\n // Avoid shifting by 64: doing so yields an undefined result.\n return shift === 0 ? val : val.shru(shift).or(val.shl(64 - shift));\n}\nfunction hashLen16(u, v, mul = hexToLong('9ddfea08eb382d69')) {\n // Murmur-inspired hashing.\n let a = u.xor(v).mul(mul);\n a = a.xor(a.shru(47));\n let b = v.xor(a).mul(mul);\n b = b.xor(b.shru(47));\n b = b.mul(mul);\n return b;\n}\n// Return a 16-byte hash for 48 bytes. Quick and dirty.\n// Callers do best to use \"random-looking\" values for a and b.\nfunction weakHashLen32WithSeeds(w, x, y, z, a, b) {\n a = a.add(w);\n b = rotate64(b.add(a).add(z), 21);\n const c = a;\n a = a.add(x);\n a = a.add(y);\n b = b.add(rotate64(a, 44));\n return [a.add(z), b.add(c)];\n}\nfunction weakHashLen32WithSeedsStr(s, offset, a, b) {\n return weakHashLen32WithSeeds(fetch64(s, offset), fetch64(s, offset + 8), fetch64(s, offset + 16), fetch64(s, offset + 24), a, b);\n}\nfunction hashLen0to16(s, len = s.length) {\n if (len >= 8) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).add(k2);\n const b = fetch64(s, len - 8);\n const c = rotate64(b, 37).mul(mul).add(a);\n const d = rotate64(a, 25).add(b).mul(mul);\n return hashLen16(c, d, mul);\n }\n if (len >= 4) {\n const mul = k2.add(len * 2);\n const a = fetch32(s, 0);\n return hashLen16(a.shl(3).add(len), fetch32(s, len - 4), mul);\n }\n if (len > 0) {\n const a = s[0];\n const b = s[len >> 1];\n const c = s[len - 1];\n const y = a + (b << 8);\n const z = len + (c << 2);\n return shiftMix(k2.mul(y).xor(k0.mul(z))).mul(k2);\n }\n return k2;\n}\nfunction hashLen17to32(s, len = s.length) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).mul(k1);\n const b = fetch64(s, 8);\n const c = fetch64(s, len - 8).mul(mul);\n const d = fetch64(s, len - 16).mul(k2);\n return hashLen16(rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d), a.add(rotate64(b.add(k2), 18)).add(c), mul);\n}\nfunction hashLen33to64(s, len = s.length) {\n const mul = k2.add(len * 2);\n const a = fetch64(s, 0).mul(k2);\n const b = fetch64(s, 8);\n const c = fetch64(s, len - 8).mul(mul);\n const d = fetch64(s, len - 16).mul(k2);\n const y = rotate64(a.add(b), 43).add(rotate64(c, 30)).add(d);\n const z = hashLen16(y, a.add(rotate64(b.add(k2), 18)).add(c), mul);\n const e = fetch64(s, 16).mul(mul);\n const f = fetch64(s, 24);\n const g = y.add(fetch64(s, len - 32)).mul(mul);\n const h = z.add(fetch64(s, len - 24)).mul(mul);\n return hashLen16(rotate64(e.add(f), 43).add(rotate64(g, 30)).add(h), e.add(rotate64(f.add(a), 18)).add(g), mul);\n}\nexport function fingerPrint64(s, len = s.length) {\n const seed = Long.fromNumber(81, true);\n if (len <= 32) {\n if (len <= 16) {\n return hashLen0to16(s, len);\n }\n else {\n return hashLen17to32(s, len);\n }\n }\n else if (len <= 64) {\n return hashLen33to64(s, len);\n }\n // For strings over 64 bytes we loop. Internal state consists of\n // 56 bytes: v, w, x, y, and z.\n let x = seed;\n let y = seed.mul(k1).add(113);\n let z = shiftMix(y.mul(k2).add(113)).mul(k2);\n let v = [Long.UZERO, Long.UZERO];\n let w = [Long.UZERO, Long.UZERO];\n x = x.mul(k2).add(fetch64(s, 0));\n let offset = 0;\n // Set end so that after the loop we have 1 to 64 bytes left to process.\n const end = ((len - 1) >> 6) * 64;\n const last64 = end + ((len - 1) & 63) - 63;\n do {\n x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(k1);\n y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(k1);\n x = x.xor(w[1]);\n y = y.add(v[0]).add(fetch64(s, offset + 40));\n z = rotate64(z.add(w[0]), 33).mul(k1);\n v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(k1), x.add(w[0]));\n w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16)));\n [z, x] = [x, z];\n offset += 64;\n } while (offset !== end);\n const mul = k1.add(z.and(0xff).shl(1));\n // Point to the last 64 bytes of input.\n offset = last64;\n w[0] = w[0].add((len - 1) & 63);\n v[0] = v[0].add(w[0]);\n w[0] = w[0].add(v[0]);\n x = rotate64(x.add(y).add(v[0]).add(fetch64(s, offset + 8)), 37).mul(mul);\n y = rotate64(y.add(v[1]).add(fetch64(s, offset + 48)), 42).mul(mul);\n x = x.xor(w[1].mul(9));\n y = y.add(v[0].mul(9).add(fetch64(s, offset + 40)));\n z = rotate64(z.add(w[0]), 33).mul(mul);\n v = weakHashLen32WithSeedsStr(s, offset, v[1].mul(mul), x.add(w[0]));\n w = weakHashLen32WithSeedsStr(s, offset + 32, z.add(w[1]), y.add(fetch64(s, offset + 16)));\n [z, x] = [x, z];\n return hashLen16(hashLen16(v[0], w[0], mul).add(shiftMix(y).mul(k0)).add(z), hashLen16(v[1], w[1], mul).add(x), mul);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9oYXNoX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gseUVBQXlFO0FBQ3pFLFVBQVU7QUFDVixPQUFPLEtBQUssV0FBVyxNQUFNLE1BQU0sQ0FBQztBQUNwQywyQkFBMkI7QUFDM0IsTUFBTSxJQUFJO0FBQ04sMkJBQTJCO0FBQzFCLFdBQW1CLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQztBQUVoRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVc7SUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELHNEQUFzRDtBQUN0RCx5QkFBeUI7QUFDekIsTUFBTSxFQUFFLEdBQVMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDL0MseUJBQXlCO0FBQ3pCLE1BQU0sRUFBRSxHQUFTLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQy9DLHlCQUF5QjtBQUN6QixNQUFNLEVBQUUsR0FBUyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUUvQyxTQUFTLFFBQVEsQ0FBQyxHQUFTO0lBQ3pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLENBQWEsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7SUFDNUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJ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QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDbEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsQ0FBYSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFD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QUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTNDLEdBQUc7UUFDRCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxHQUFHLHlCQUF5QixDQUN6QixDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDZCxRQUFRLE1BQU0sS0FBSyxHQUFHLEVBQUU7SUFDekIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLHVDQUF1QztJQUN2QyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBRWhCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsR0FBRyx5QkFBeUIsQ0FDekIsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVoQixPQUFPLFNBQVMsQ0FDWixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDMUQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vLyBXb3JrYXJvdW5kIGZvciBhbGxvd2luZyBjanMgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGluIGJ1bmRsZSBjcmVhdGVkIGJ5XG4vLyByb2xsdXAuXG5pbXBvcnQgKiBhcyBMb25nRXhwb3J0cyBmcm9tICdsb25nJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuY29uc3QgTG9uZzogTG9uZ0V4cG9ydHMuTG9uZ0NvbnN0cnVjdG9yID1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAoTG9uZ0V4cG9ydHMgYXMgYW55KS5kZWZhdWx0IHx8IExvbmdFeHBvcnRzO1xuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9Mb25nKGhleDogc3RyaW5nKTogTG9uZyB7XG4gIHJldHVybiBMb25nLmZyb21TdHJpbmcoaGV4LCB0cnVlLCAxNik7XG59XG5cbi8vIFNvbWUgcHJpbWVzIGJldHdlZW4gMl42MyBhbmQgMl42NCBmb3IgdmFyaW91cyB1c2VzLlxuLy8gSGV4IDB4YzNhNWM4NWM5N2NiMzEyN1xuY29uc3QgazA6IExvbmcgPSBoZXhUb0xvbmcoJ2MzYTVjODVjOTdjYjMxMjcnKTtcbi8vIEhleCAweGI0OTJiNjZmYmU5OGYyNzNcbmNvbnN0IGsxOiBMb25nID0gaGV4VG9Mb25nKCdiNDkyYjY2ZmJlOThmMjczJyk7XG4vLyBIZXggMHg5YWUxNmEzYjJmOTA0MDRmXG5jb25zdCBrMjogTG9uZyA9IGhleFRvTG9uZygnOWFlMTZhM2IyZjkwNDA0ZicpO1xuXG5mdW5jdGlvbiBzaGlmdE1peCh2YWw6IExvbmcpOiBMb25nIHtcbiAgcmV0dXJuIHZhbC54b3IodmFsLnNocnUoNDcpKTtcbn1cblxuZnVuY3Rpb24gZmV0Y2goczogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIG51bUJ5dGVzOiBudW1iZXIpOiBMb25nIHtcbiAgY29uc3QgYnl0ZXMgPSBzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbnVtQnl0ZXMpO1xuICByZXR1cm4gTG9uZy5mcm9tQnl0ZXMoQXJyYXkuZnJvbShieXRlcyksIHRydWUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBmZXRjaDY0KHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogTG9uZyB7XG4gIHJldHVybiBmZXRjaChzLCBvZmZzZXQsIDgpO1xufVxuXG5mdW5jdGlvbiBmZXRjaDMyKHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogTG9uZyB7XG4gIHJldHVybiBmZXRjaChzLCBvZmZzZXQsIDQpO1xufVxuXG5mdW5jdGlvbiByb3RhdGU2NCh2YWw6IExvbmcsIHNoaWZ0OiBudW1iZXIpOiBMb25nIHtcbiAgLy8gQXZvaWQgc2hpZnRpbmcgYnkgNjQ6IGRvaW5nIHNvIHlpZWxkcyBhbiB1bmRlZmluZWQgcmVzdWx0LlxuICByZXR1cm4gc2hpZnQgPT09IDAgPyB2YWwgOiB2YWwuc2hydShzaGlmdCkub3IodmFsLnNobCg2NCAtIHNoaWZ0KSk7XG59XG5cbmZ1bmN0aW9uIGhhc2hMZW4xNih1OiBMb25nLCB2OiBMb25nLCBtdWwgPSBoZXhUb0xvbmcoJzlkZGZlYTA4ZWIzODJkNjknKSkge1xuICAvLyBNdXJtdXItaW5zcGlyZWQgaGFzaGluZy5cbiAgbGV0IGEgPSB1Lnhvcih2KS5tdWwobXVsKTtcbiAgYSA9IGEueG9yKGEuc2hydSg0NykpO1xuICBsZXQgYiA9IHYueG9yKGEpLm11bChtdWwpO1xuICBiID0gYi54b3IoYi5zaHJ1KDQ3KSk7XG4gIGIgPSBiLm11bChtdWwpO1xuICByZXR1cm4gYjtcbn1cblxuLy8gUmV0dXJuIGEgMTYtYnl0ZSBoYXNoIGZvciA0OCBieXRlcy4gIFF1aWNrIGFuZCBkaXJ0eS5cbi8vIENhbGxlcnMgZG8gYmVzdCB0byB1c2UgXCJyYW5kb20tbG9va2luZ1wiIHZhbHVlcyBmb3IgYSBhbmQgYi5cbmZ1bmN0aW9uIHdlYWtIYXNoTGVuMzJXaXRoU2VlZHMoXG4gICAgdzogTG9uZywgeDogTG9uZywgeTogTG9uZywgejogTG9uZywgYTogTG9uZywgYjogTG9uZykge1xuICBhID0gYS5hZGQodyk7XG4gIGIgPSByb3RhdGU2NChiLmFkZChhKS5hZGQoeiksIDIxKTtcbiAgY29uc3QgYyA9IGE7XG4gIGEgPSBhLmFkZCh4KTtcbiAgYSA9IGEuYWRkKHkpO1xuICBiID0gYi5hZGQocm90YXRlNjQoYSwgNDQpKTtcbiAgcmV0dXJuIFthLmFkZCh6KSwgYi5hZGQoYyldO1xufVxuXG5mdW5jdGlvbiB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKFxuICAgIHM6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBhOiBMb25nLCBiOiBMb25nKSB7XG4gIHJldHVybiB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzKFxuICAgICAgZmV0Y2g2NChzLCBvZmZzZXQpLCBmZXRjaDY0KHMsIG9mZnNldCArIDgpLCBmZXRjaDY0KHMsIG9mZnNldCArIDE2KSxcbiAgICAgIGZldGNoNjQocywgb2Zmc2V0ICsgMjQpLCBhLCBiKTtcbn1cblxuZnVuY3Rpb24gaGFzaExlbjB0bzE2KHM6IFVpbnQ4QXJyYXksIGxlbiA9IHMubGVuZ3RoKTogTG9uZyB7XG4gIGlmIChsZW4gPj0gOCkge1xuICAgIGNvbnN0IG11bCA9IGsyLmFkZChsZW4gKiAyKTtcbiAgICBjb25zdCBhID0gZmV0Y2g2NChzLCAwKS5hZGQoazIpO1xuICAgIGNvbnN0IGIgPSBmZXRjaDY0KHMsIGxlbiAtIDgpO1xuICAgIGNvbnN0IGMgPSByb3RhdGU2NChiLCAzNykubXVsKG11bCkuYWRkKGEpO1xuICAgIGNvbnN0IGQgPSByb3RhdGU2NChhLCAyNSkuYWRkKGIpLm11bChtdWwpO1xuICAgIHJldHVybiBoYXNoTGVuMTYoYywgZCwgbXVsKTtcbiAgfVxuICBpZiAobGVuID49IDQpIHtcbiAgICBjb25zdCBtdWwgPSBrMi5hZGQobGVuICogMik7XG4gICAgY29uc3QgYSA9IGZldGNoMzIocywgMCk7XG4gICAgcmV0dXJuIGhhc2hMZW4xNihhLnNobCgzKS5hZGQobGVuKSwgZmV0Y2gzMihzLCBsZW4gLSA0KSwgbXVsKTtcbiAgfVxuICBpZiAobGVuID4gMCkge1xuICAgIGNvbnN0IGEgPSBzWzBdO1xuICAgIGNvbnN0IGIgPSBzW2xlbiA+PiAxXTtcbiAgICBjb25zdCBjID0gc1tsZW4gLSAxXTtcbiAgICBjb25zdCB5ID0gYSArIChiIDw8IDgpO1xuICAgIGNvbnN0IHogPSBsZW4gKyAoYyA8PCAyKTtcbiAgICByZXR1cm4gc2hpZnRNaXgoazIubXVsKHkpLnhvcihrMC5tdWwoeikpKS5tdWwoazIpO1xuICB9XG4gIHJldHVybiBrMjtcbn1cblxuZnVuY3Rpb24gaGFzaExlbjE3dG8zMihzOiBVaW50OEFycmF5LCBsZW4gPSBzLmxlbmd0aCk6IExvbmcge1xuICBjb25zdCBtdWwgPSBrMi5hZGQobGVuICogMik7XG4gIGNvbnN0IGEgPSBmZXRjaDY0KHMsIDApLm11bChrMSk7XG4gIGNvbnN0IGIgPSBmZXRjaDY0KHMsIDgpO1xuICBjb25zdCBjID0gZmV0Y2g2NChzLCBsZW4gLSA4KS5tdWwobXVsKTtcbiAgY29uc3QgZCA9IGZldGNoNjQocywgbGVuIC0gMTYpLm11bChrMik7XG4gIHJldHVybiBoYXNoTGVuMTYoXG4gICAgICByb3RhdGU2NChhLmFkZChiKSwgNDMpLmFkZChyb3RhdGU2NChjLCAzMCkpLmFkZChkKSxcbiAgICAgIGEuYWRkKHJvdGF0ZTY0KGIuYWRkKGsyKSwgMTgpKS5hZGQoYyksIG11bCk7XG59XG5cbmZ1bmN0aW9uIGhhc2hMZW4zM3RvNjQoczogVWludDhBcnJheSwgbGVuID0gcy5sZW5ndGgpOiBMb25nIHtcbiAgY29uc3QgbXVsID0gazIuYWRkKGxlbiAqIDIpO1xuICBjb25zdCBhID0gZmV0Y2g2NChzLCAwKS5tdWwoazIpO1xuICBjb25zdCBiID0gZmV0Y2g2NChzLCA4KTtcbiAgY29uc3QgYyA9IGZldGNoNjQocywgbGVuIC0gOCkubXVsKG11bCk7XG4gIGNvbnN0IGQgPSBmZXRjaDY0KHMsIGxlbiAtIDE2KS5tdWwoazIpO1xuICBjb25zdCB5ID0gcm90YXRlNjQoYS5hZGQoYiksIDQzKS5hZGQocm90YXRlNjQoYywgMzApKS5hZGQoZCk7XG4gIGNvbnN0IHogPSBoYXNoTGVuMTYoeSwgYS5hZGQocm90YXRlNjQoYi5hZGQoazIpLCAxOCkpLmFkZChjKSwgbXVsKTtcbiAgY29uc3QgZSA9IGZldGNoNjQocywgMTYpLm11bChtdWwpO1xuICBjb25zdCBmID0gZmV0Y2g2NChzLCAyNCk7XG4gIGNvbnN0IGcgPSB5LmFkZChmZXRjaDY0KHMsIGxlbiAtIDMyKSkubXVsKG11bCk7XG4gIGNvbnN0IGggPSB6LmFkZChmZXRjaDY0KHMsIGxlbiAtIDI0KSkubXVsKG11bCk7XG4gIHJldHVybiBoYXNoTGVuMTYoXG4gICAgICByb3RhdGU2NChlLmFkZChmKSwgNDMpLmFkZChyb3RhdGU2NChnLCAzMCkpLmFkZChoKSxcbiAgICAgIGUuYWRkKHJvdGF0ZTY0KGYuYWRkKGEpLCAxOCkpLmFkZChnKSwgbXVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmdlclByaW50NjQoczogVWludDhBcnJheSwgbGVuID0gcy5sZW5ndGgpOiBMb25nIHtcbiAgY29uc3Qgc2VlZDogTG9uZyA9IExvbmcuZnJvbU51bWJlcig4MSwgdHJ1ZSk7XG4gIGlmIChsZW4gPD0gMzIpIHtcbiAgICBpZiAobGVuIDw9IDE2KSB7XG4gICAgICByZXR1cm4gaGFzaExlbjB0bzE2KHMsIGxlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBoYXNoTGVuMTd0bzMyKHMsIGxlbik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8PSA2NCkge1xuICAgIHJldHVybiBoYXNoTGVuMzN0bzY0KHMsIGxlbik7XG4gIH1cblxuICAvLyBGb3Igc3RyaW5ncyBvdmVyIDY0IGJ5dGVzIHdlIGxvb3AuICBJbnRlcm5hbCBzdGF0ZSBjb25zaXN0cyBvZlxuICAvLyA1NiBieXRlczogdiwgdywgeCwgeSwgYW5kIHouXG4gIGxldCB4ID0gc2VlZDtcbiAgbGV0IHkgPSBzZWVkLm11bChrMSkuYWRkKDExMyk7XG5cbiAgbGV0IHogPSBzaGlmdE1peCh5Lm11bChrMikuYWRkKDExMykpLm11bChrMik7XG4gIGxldCB2ID0gW0xvbmcuVVpFUk8sIExvbmcuVVpFUk9dO1xuICBsZXQgdyA9IFtMb25nLlVaRVJPLCBMb25nLlVaRVJPXTtcbiAgeCA9IHgubXVsKGsyKS5hZGQoZmV0Y2g2NChzLCAwKSk7XG5cbiAgbGV0IG9mZnNldCA9IDA7XG4gIC8vIFNldCBlbmQgc28gdGhhdCBhZnRlciB0aGUgbG9vcCB3ZSBoYXZlIDEgdG8gNjQgYnl0ZXMgbGVmdCB0byBwcm9jZXNzLlxuICBjb25zdCBlbmQgPSAoKGxlbiAtIDEpID4+IDYpICogNjQ7XG4gIGNvbnN0IGxhc3Q2NCA9IGVuZCArICgobGVuIC0gMSkgJiA2MykgLSA2MztcblxuICBkbyB7XG4gICAgeCA9IHJvdGF0ZTY0KHguYWRkKHkpLmFkZCh2WzBdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA4KSksIDM3KS5tdWwoazEpO1xuICAgIHkgPSByb3RhdGU2NCh5LmFkZCh2WzFdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0OCkpLCA0MikubXVsKGsxKTtcbiAgICB4ID0geC54b3Iod1sxXSk7XG4gICAgeSA9IHkuYWRkKHZbMF0pLmFkZChmZXRjaDY0KHMsIG9mZnNldCArIDQwKSk7XG4gICAgeiA9IHJvdGF0ZTY0KHouYWRkKHdbMF0pLCAzMykubXVsKGsxKTtcbiAgICB2ID0gd2Vha0hhc2hMZW4zMldpdGhTZWVkc1N0cihzLCBvZmZzZXQsIHZbMV0ubXVsKGsxKSwgeC5hZGQod1swXSkpO1xuICAgIHcgPSB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKFxuICAgICAgICBzLCBvZmZzZXQgKyAzMiwgei5hZGQod1sxXSksIHkuYWRkKGZldGNoNjQocywgb2Zmc2V0ICsgMTYpKSk7XG5cbiAgICBbeiwgeF0gPSBbeCwgel07XG4gICAgb2Zmc2V0ICs9IDY0O1xuICB9IHdoaWxlIChvZmZzZXQgIT09IGVuZCk7XG4gIGNvbnN0IG11bCA9IGsxLmFkZCh6LmFuZCgweGZmKS5zaGwoMSkpO1xuICAvLyBQb2ludCB0byB0aGUgbGFzdCA2NCBieXRlcyBvZiBpbnB1dC5cbiAgb2Zmc2V0ID0gbGFzdDY0O1xuXG4gIHdbMF0gPSB3WzBdLmFkZCgobGVuIC0gMSkgJiA2Myk7XG4gIHZbMF0gPSB2WzBdLmFkZCh3WzBdKTtcbiAgd1swXSA9IHdbMF0uYWRkKHZbMF0pO1xuXG4gIHggPSByb3RhdGU2NCh4LmFkZCh5KS5hZGQodlswXSkuYWRkKGZldGNoNjQocywgb2Zmc2V0ICsgOCkpLCAzNykubXVsKG11bCk7XG4gIHkgPSByb3RhdGU2NCh5LmFkZCh2WzFdKS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0OCkpLCA0MikubXVsKG11bCk7XG4gIHggPSB4Lnhvcih3WzFdLm11bCg5KSk7XG4gIHkgPSB5LmFkZCh2WzBdLm11bCg5KS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyA0MCkpKTtcbiAgeiA9IHJvdGF0ZTY0KHouYWRkKHdbMF0pLCAzMykubXVsKG11bCk7XG4gIHYgPSB3ZWFrSGFzaExlbjMyV2l0aFNlZWRzU3RyKHMsIG9mZnNldCwgdlsxXS5tdWwobXVsKSwgeC5hZGQod1swXSkpO1xuICB3ID0gd2Vha0hhc2hMZW4zMldpdGhTZWVkc1N0cihcbiAgICAgIHMsIG9mZnNldCArIDMyLCB6LmFkZCh3WzFdKSwgeS5hZGQoZmV0Y2g2NChzLCBvZmZzZXQgKyAxNikpKTtcblxuICBbeiwgeF0gPSBbeCwgel07XG5cbiAgcmV0dXJuIGhhc2hMZW4xNihcbiAgICAgIGhhc2hMZW4xNih2WzBdLCB3WzBdLCBtdWwpLmFkZChzaGlmdE1peCh5KS5tdWwoazApKS5hZGQoeiksXG4gICAgICBoYXNoTGVuMTYodlsxXSwgd1sxXSwgbXVsKS5hZGQoeCksIG11bCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport { isTypedArrayBrowser } from './platforms/is_typed_array_browser';\nimport * as base from './util_base';\nexport * from './util_base';\nexport * from './hash_util';\n/**\n * Create typed array for scalar value. Used for storing in `DataStorage`.\n */\nexport function createScalarValue(value, dtype) {\n if (dtype === 'string') {\n return encodeString(value);\n }\n return toTypedArray([value], dtype);\n}\nfunction noConversionNeeded(a, dtype) {\n return (a instanceof Float32Array && dtype === 'float32') ||\n (a instanceof Int32Array && dtype === 'int32') ||\n (a instanceof Uint8Array && dtype === 'bool');\n}\nexport function toTypedArray(a, dtype) {\n if (dtype === 'string') {\n throw new Error('Cannot convert a string[] to a TypedArray');\n }\n if (Array.isArray(a)) {\n a = flatten(a);\n }\n if (env().getBool('DEBUG')) {\n base.checkConversionForErrors(a, dtype);\n }\n if (noConversionNeeded(a, dtype)) {\n return a;\n }\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(a);\n }\n else if (dtype === 'int32') {\n return new Int32Array(a);\n }\n else if (dtype === 'bool') {\n const bool = new Uint8Array(a.length);\n for (let i = 0; i < bool.length; ++i) {\n if (Math.round(a[i]) !== 0) {\n bool[i] = 1;\n }\n }\n return bool;\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Returns the current high-resolution time in milliseconds relative to an\n * arbitrary time in the past. It works across different platforms (node.js,\n * browsers).\n *\n * ```js\n * console.log(tf.util.now());\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function now() {\n return env().platform.now();\n}\n/**\n * Returns a platform-specific implementation of\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n *\n * If `fetch` is defined on the global object (`window`, `process`, etc.),\n * `tf.util.fetch` returns that function.\n *\n * If not, `tf.util.fetch` returns a platform-specific solution.\n *\n * ```js\n * const resource = await tf.util.fetch('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs');\n * // handle response\n * ```\n *\n * @doc {heading: 'Util'}\n */\nexport function fetch(path, requestInits) {\n return env().platform.fetch(path, requestInits);\n}\n/**\n * Encodes the provided string into bytes using the provided encoding scheme.\n *\n * @param s The string to encode.\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function encodeString(s, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.encode(s, encoding);\n}\n/**\n * Decodes the provided bytes into a string using the provided encoding scheme.\n * @param bytes The bytes to decode.\n *\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function decodeString(bytes, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.decode(bytes, encoding);\n}\nexport function isTypedArray(a) {\n // TODO(mattsoulanille): Remove this fallback in 5.0.0\n if (env().platform.isTypedArray != null) {\n return env().platform.isTypedArray(a);\n }\n else {\n return isTypedArrayBrowser(a);\n }\n}\n// NOTE: We explicitly type out what T extends instead of any so that\n// util.flatten on a nested array of number doesn't try to infer T as a\n// number[][], causing us to explicitly type util.flatten().\n/**\n * Flattens an arbitrarily nested array.\n *\n * ```js\n * const a = [[1, 2], [3, 4], [5, [6, [7]]]];\n * const flat = tf.util.flatten(a);\n * console.log(flat);\n * ```\n *\n * @param arr The nested array to flatten.\n * @param result The destination array which holds the elements.\n * @param skipTypedArray If true, avoids flattening the typed arrays. Defaults\n * to false.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function flatten(arr, result = [], skipTypedArray = false) {\n if (result == null) {\n result = [];\n }\n if (typeof arr === 'boolean' || typeof arr === 'number' ||\n typeof arr === 'string' || base.isPromise(arr) || arr == null ||\n isTypedArray(arr) && skipTypedArray) {\n result.push(arr);\n }\n else if (Array.isArray(arr) || isTypedArray(arr)) {\n for (let i = 0; i < arr.length; ++i) {\n flatten(arr[i], result, skipTypedArray);\n }\n }\n else {\n let maxIndex = -1;\n for (const key of Object.keys(arr)) {\n // 0 or positive integer.\n if (/^([1-9]+[0-9]*|0)$/.test(key)) {\n maxIndex = Math.max(maxIndex, Number(key));\n }\n }\n for (let i = 0; i <= maxIndex; i++) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n flatten(arr[i], result, skipTypedArray);\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sS0FBSyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixLQUFlLEVBQUUsS0FBZTtJQUNsQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUI7SUFFRCxPQUFPLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQWEsRUFBRSxLQUFlO0lBQ3hELE9BQU8sQ0FBQyxDQUFDLFlBQVksWUFBWSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7UUFDckQsQ0FBQyxDQUFDLFlBQVksVUFBVSxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFlBQVksVUFBVSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFhLEVBQUUsS0FBZTtJQUN6RCxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BCLENBQUMsR0FBRyxPQUFPLENB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TUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZW52fSBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7aXNUeXBlZEFycmF5QnJvd3Nlcn0gZnJvbSAnLi9wbGF0Zm9ybXMvaXNfdHlwZWRfYXJyYXlfYnJvd3Nlcic7XG5pbXBvcnQge0JhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBSZWN1cnNpdmVBcnJheSwgVGVuc29yTGlrZSwgVHlwZWRBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vdXRpbF9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbF9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vaGFzaF91dGlsJztcblxuLyoqXG4gKiBDcmVhdGUgdHlwZWQgYXJyYXkgZm9yIHNjYWxhciB2YWx1ZS4gVXNlZCBmb3Igc3RvcmluZyBpbiBgRGF0YVN0b3JhZ2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2NhbGFyVmFsdWUoXG4gICAgdmFsdWU6IERhdGFUeXBlLCBkdHlwZTogRGF0YVR5cGUpOiBCYWNrZW5kVmFsdWVzIHtcbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlbmNvZGVTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHRvVHlwZWRBcnJheShbdmFsdWVdLCBkdHlwZSk7XG59XG5cbmZ1bmN0aW9uIG5vQ29udmVyc2lvbk5lZWRlZChhOiBUZW5zb3JMaWtlLCBkdHlwZTogRGF0YVR5cGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIChhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5ICYmIGR0eXBlID09PSAnZmxvYXQzMicpIHx8XG4gICAgICAoYSBpbnN0YW5jZW9mIEludDMyQXJyYXkgJiYgZHR5cGUgPT09ICdpbnQzMicpIHx8XG4gICAgICAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgZHR5cGUgPT09ICdib29sJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVkQXJyYXkoYTogVGVuc29yTGlrZSwgZHR5cGU6IERhdGFUeXBlKTogVHlwZWRBcnJheSB7XG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgc3RyaW5nW10gdG8gYSBUeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBhID0gZmxhdHRlbihhKTtcbiAgfVxuXG4gIGlmIChlbnYoKS5nZXRCb29sKCdERUJVRycpKSB7XG4gICAgYmFzZS5jaGVja0NvbnZlcnNpb25Gb3JFcnJvcnMoYSBhcyBudW1iZXJbXSwgZHR5cGUpO1xuICB9XG4gIGlmIChub0NvbnZlcnNpb25OZWVkZWQoYSwgZHR5cGUpKSB7XG4gICAgcmV0dXJuIGEgYXMgVHlwZWRBcnJheTtcbiAgfVxuICBpZiAoZHR5cGUgPT0gbnVsbCB8fCBkdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGEgYXMgbnVtYmVyW10pO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgcmV0dXJuIG5ldyBJbnQzMkFycmF5KGEgYXMgbnVtYmVyW10pO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICBjb25zdCBib29sID0gbmV3IFVpbnQ4QXJyYXkoKGEgYXMgbnVtYmVyW10pLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib29sLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoTWF0aC5yb3VuZCgoYSBhcyBudW1iZXJbXSlbaV0pICE9PSAwKSB7XG4gICAgICAgIGJvb2xbaV0gPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9vbDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGhpZ2gtcmVzb2x1dGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyByZWxhdGl2ZSB0byBhblxuICogYXJiaXRyYXJ5IHRpbWUgaW4gdGhlIHBhc3QuIEl0IHdvcmtzIGFjcm9zcyBkaWZmZXJlbnQgcGxhdGZvcm1zIChub2RlLmpzLFxuICogYnJvd3NlcnMpLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zb2xlLmxvZyh0Zi51dGlsLm5vdygpKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdVdGlsJywgbmFtZXNwYWNlOiAndXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3coKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudigpLnBsYXRmb3JtLm5vdygpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZlxuICogW2BmZXRjaGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkpLlxuICpcbiAqIElmIGBmZXRjaGAgaXMgZGVmaW5lZCBvbiB0aGUgZ2xvYmFsIG9iamVjdCAoYHdpbmRvd2AsIGBwcm9jZXNzYCwgZXRjLiksXG4gKiBgdGYudXRpbC5mZXRjaGAgcmV0dXJucyB0aGF0IGZ1bmN0aW9uLlxuICpcbiAqIElmIG5vdCwgYHRmLnV0aWwuZmV0Y2hgIHJldHVybnMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBzb2x1dGlvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzb3VyY2UgPSBhd2FpdCB0Zi51dGlsLmZldGNoKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0ZW5zb3JmbG93L3RmanMnKTtcbiAqIC8vIGhhbmRsZSByZXNwb25zZVxuICogYGBgXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goXG4gICAgcGF0aDogc3RyaW5nLCByZXF1ZXN0SW5pdHM/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGVudigpLnBsYXRmb3JtLmZldGNoKHBhdGgsIHJlcXVlc3RJbml0cyk7XG59XG5cbi8qKlxuICogRW5jb2RlcyB0aGUgcHJvdmlkZWQgc3RyaW5nIGludG8gYnl0ZXMgdXNpbmcgdGhlIHByb3ZpZGVkIGVuY29kaW5nIHNjaGVtZS5cbiAqXG4gKiBAcGFyYW0gcyBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqIEBwYXJhbSBlbmNvZGluZyBUaGUgZW5jb2Rpbmcgc2NoZW1lLiBEZWZhdWx0cyB0byB1dGYtOC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVXRpbCd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTdHJpbmcoczogc3RyaW5nLCBlbmNvZGluZyA9ICd1dGYtOCcpOiBVaW50OEFycmF5IHtcbiAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndXRmLTgnO1xuICByZXR1cm4gZW52KCkucGxhdGZvcm0uZW5jb2RlKHMsIGVuY29kaW5nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBwcm92aWRlZCBieXRlcyBpbnRvIGEgc3RyaW5nIHVzaW5nIHRoZSBwcm92aWRlZCBlbmNvZGluZyBzY2hlbWUuXG4gKiBAcGFyYW0gYnl0ZXMgVGhlIGJ5dGVzIHRvIGRlY29kZS5cbiAqXG4gKiBAcGFyYW0gZW5jb2RpbmcgVGhlIGVuY29kaW5nIHNjaGVtZS4gRGVmYXVsdHMgdG8gdXRmLTguXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlU3RyaW5nKGJ5dGVzOiBVaW50OEFycmF5LCBlbmNvZGluZyA9ICd1dGYtOCcpOiBzdHJpbmcge1xuICBlbmNvZGluZyA9IGVuY29kaW5nIHx8ICd1dGYtOCc7XG4gIHJldHVybiBlbnYoKS5wbGF0Zm9ybS5kZWNvZGUoYnl0ZXMsIGVuY29kaW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZWRBcnJheShhOiB7fSk6IGEgaXMgRmxvYXQzMkFycmF5fEludDMyQXJyYXl8VWludDhBcnJheXxcbiAgICBVaW50OENsYW1wZWRBcnJheSB7XG4gIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBSZW1vdmUgdGhpcyBmYWxsYmFjayBpbiA1LjAuMFxuICBpZiAoZW52KCkucGxhdGZvcm0uaXNUeXBlZEFycmF5ICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW52KCkucGxhdGZvcm0uaXNUeXBlZEFycmF5KGEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpc1R5cGVkQXJyYXlCcm93c2VyKGEpO1xuICB9XG59XG5cbi8vIE5PVEU6IFdlIGV4cGxpY2l0bHkgdHlwZSBvdXQgd2hhdCBUIGV4dGVuZHMgaW5zdGVhZCBvZiBhbnkgc28gdGhhdFxuLy8gdXRpbC5mbGF0dGVuIG9uIGEgbmVzdGVkIGFycmF5IG9mIG51bWJlciBkb2Vzbid0IHRyeSB0byBpbmZlciBUIGFzIGFcbi8vIG51bWJlcltdW10sIGNhdXNpbmcgdXMgdG8gZXhwbGljaXRseSB0eXBlIHV0aWwuZmxhdHRlbjxudW1iZXI+KCkuXG4vKipcbiAqICBGbGF0dGVucyBhbiBhcmJpdHJhcmlseSBuZXN0ZWQgYXJyYXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSBbWzEsIDJdLCBbMywgNF0sIFs1LCBbNiwgWzddXV1dO1xuICogY29uc3QgZmxhdCA9IHRmLnV0aWwuZmxhdHRlbihhKTtcbiAqIGNvbnNvbGUubG9nKGZsYXQpO1xuICogYGBgXG4gKlxuICogIEBwYXJhbSBhcnIgVGhlIG5lc3RlZCBhcnJheSB0byBmbGF0dGVuLlxuICogIEBwYXJhbSByZXN1bHQgVGhlIGRlc3RpbmF0aW9uIGFycmF5IHdoaWNoIGhvbGRzIHRoZSBlbGVtZW50cy5cbiAqICBAcGFyYW0gc2tpcFR5cGVkQXJyYXkgSWYgdHJ1ZSwgYXZvaWRzIGZsYXR0ZW5pbmcgdGhlIHR5cGVkIGFycmF5cy4gRGVmYXVsdHNcbiAqICAgICAgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1V0aWwnLCBuYW1lc3BhY2U6ICd1dGlsJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uXG5mbGF0dGVuPFQgZXh0ZW5kcyBudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8UHJvbWlzZTxudW1iZXI+fFR5cGVkQXJyYXk+KFxuICAgIGFycjogVHxSZWN1cnNpdmVBcnJheTxUPiwgcmVzdWx0OiBUW10gPSBbXSwgc2tpcFR5cGVkQXJyYXkgPSBmYWxzZSk6IFRbXSB7XG4gIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgIHJlc3VsdCA9IFtdO1xuICB9XG4gIGlmICh0eXBlb2YgYXJyID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGFyciA9PT0gJ251bWJlcicgfHxcbiAgICB0eXBlb2YgYXJyID09PSAnc3RyaW5nJyB8fCBiYXNlLmlzUHJvbWlzZShhcnIpIHx8IGFyciA9PSBudWxsIHx8XG4gICAgICBpc1R5cGVkQXJyYXkoYXJyKSAmJiBza2lwVHlwZWRBcnJheSkge1xuICAgIHJlc3VsdC5wdXNoKGFyciBhcyBUKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFycikgfHwgaXNUeXBlZEFycmF5KGFycikpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgZmxhdHRlbihhcnJbaV0sIHJlc3VsdCwgc2tpcFR5cGVkQXJyYXkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgbWF4SW5kZXggPSAtMTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhcnIpKSB7XG4gICAgICAvLyAwIG9yIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICBpZiAoL14oWzEtOV0rWzAtOV0qfDApJC8udGVzdChrZXkpKSB7XG4gICAgICAgIG1heEluZGV4ID0gTWF0aC5tYXgobWF4SW5kZXgsIE51bWJlcihrZXkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbWF4SW5kZXg7IGkrKykge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgZmxhdHRlbigoYXJyIGFzIFJlY3Vyc2l2ZUFycmF5PFQ+KVtpXSwgcmVzdWx0LCBza2lwVHlwZWRBcnJheSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport * as util from './util';\nexport class Profiler {\n constructor(backendTimer, logger) {\n this.backendTimer = backendTimer;\n this.logger = logger;\n if (logger == null) {\n this.logger = new Logger();\n }\n }\n profileKernel(kernelName, inputs, f) {\n let outputs;\n const holdResultWrapperFn = () => {\n outputs = f();\n };\n let timer;\n const start = util.now();\n if (this.backendTimer.timerAvailable()) {\n timer = this.backendTimer.time(holdResultWrapperFn);\n }\n else {\n holdResultWrapperFn();\n for (const output of outputs) {\n output.dataSync();\n }\n timer = Promise.resolve({ kernelMs: util.now() - start });\n }\n if (env().getBool('CHECK_COMPUTATION_FOR_ERRORS')) {\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n // Dangling promise here because we don't want to propagate up\n // asynchronicity.\n output.data().then(tensorVals => {\n checkComputationForErrors(tensorVals, output.dtype, kernelName);\n });\n }\n }\n const kernelProfile = {\n kernelName,\n outputs,\n inputs,\n timeMs: timer.then(timing => timing.kernelMs),\n extraInfo: timer.then(timing => timing.getExtraProfileInfo != null ?\n timing.getExtraProfileInfo() :\n '')\n };\n return kernelProfile;\n }\n logKernelProfile(kernelProfile) {\n const { kernelName, outputs, timeMs, inputs, extraInfo } = kernelProfile;\n outputs.forEach(result => {\n Promise.all([result.data(), timeMs, extraInfo]).then(valueContainer => {\n this.logger.logKernelProfile(kernelName, result, valueContainer[0], valueContainer[1], inputs, valueContainer[2]);\n });\n });\n }\n}\nexport function checkComputationForErrors(vals, dtype, kernelName) {\n if (dtype !== 'float32') {\n // Only floating point computations will generate NaN values\n return false;\n }\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n // Throwing custom exception so behavior is testable.\n console.warn(`Found ${num} in the result of '${kernelName}'`);\n return true;\n }\n }\n return false;\n}\nexport class Logger {\n logKernelProfile(name, result, vals, timeMs, inputs, extraInfo) {\n const time = typeof timeMs === 'number' ? util.rightPad(`${timeMs}ms`, 9) :\n timeMs['error'];\n const paddedName = util.rightPad(name, 25);\n const rank = result.rank;\n const size = result.size;\n const shape = util.rightPad(result.shape.toString(), 14);\n let inputShapesDescription = '';\n for (const name in inputs) {\n const input = inputs[name];\n if (input != null) {\n // The input might be a non-tensor (e.g HTMLImageElement), in which case\n // we claim the output shape as input shape.\n const inputShape = input.shape || result.shape;\n const inputRank = inputShape.length;\n inputShapesDescription +=\n `${name}: ${inputRank}D ${inputRank > 0 ? inputShape : ''} `;\n }\n }\n console.log(`%c${paddedName}\\t%c${time}\\t%c${rank}D ${shape}\\t%c${size}\\t%c${inputShapesDescription}\\t%c${extraInfo}`, 'font-weight:bold', 'color:red', 'color:blue', 'color: orange', 'color: green', 'color: steelblue');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3Byb2ZpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJbEMsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFVL0IsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFBb0IsWUFBMEIsRUFBVSxNQUFlO1FBQW5ELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUNyRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFrQixFQUFFLE1BQXNCLEVBQUUsQ0FBaUI7UUFFekUsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQy9CLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFDRixJQUFJLEtBQWlDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUN0QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDNUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ25CO1lBQ0QsS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUs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Q0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCYWNrZW5kVGltZXIsIEJhY2tlbmRUaW1pbmdJbmZvfSBmcm9tICcuL2JhY2tlbmRzL2JhY2tlbmQnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7RGF0YVR5cGUsIERhdGFUeXBlTWFwLCBUeXBlZEFycmF5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IHR5cGUgS2VybmVsUHJvZmlsZSA9IHtcbiAga2VybmVsTmFtZTogc3RyaW5nLFxuICBvdXRwdXRzOiBUZW5zb3JbXSxcbiAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCxcbiAgdGltZU1zOiBQcm9taXNlPG51bWJlcnx7ZXJyb3I6IHN0cmluZ30+LFxuICBleHRyYUluZm86IFByb21pc2U8c3RyaW5nPlxufTtcblxuZXhwb3J0IGNsYXNzIFByb2ZpbGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZW5kVGltZXI6IEJhY2tlbmRUaW1lciwgcHJpdmF0ZSBsb2dnZXI/OiBMb2dnZXIpIHtcbiAgICBpZiAobG9nZ2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb2ZpbGVLZXJuZWwoa2VybmVsTmFtZTogc3RyaW5nLCBpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBmOiAoKSA9PiBUZW5zb3JbXSk6XG4gICAgICBLZXJuZWxQcm9maWxlIHtcbiAgICBsZXQgb3V0cHV0czogVGVuc29yW107XG4gICAgY29uc3QgaG9sZFJlc3VsdFdyYXBwZXJGbiA9ICgpID0+IHtcbiAgICAgIG91dHB1dHMgPSBmKCk7XG4gICAgfTtcbiAgICBsZXQgdGltZXI6IFByb21pc2U8QmFja2VuZFRpbWluZ0luZm8+O1xuICAgIGNvbnN0IHN0YXJ0ID0gdXRpbC5ub3coKTtcbiAgICBpZiAodGhpcy5iYWNrZW5kVGltZXIudGltZXJBdmFpbGFibGUoKSkge1xuICAgICAgdGltZXIgPSB0aGlzLmJhY2tlbmRUaW1lci50aW1lKGhvbGRSZXN1bHRXcmFwcGVyRm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBob2xkUmVzdWx0V3JhcHBlckZuKCk7XG4gICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBvdXRwdXRzKSB7XG4gICAgICAgIG91dHB1dC5kYXRhU3luYygpO1xuICAgICAgfVxuICAgICAgdGltZXIgPSBQcm9taXNlLnJlc29sdmUoe2tlcm5lbE1zOiB1dGlsLm5vdygpIC0gc3RhcnR9KTtcbiAgICB9XG4gICAgaWYgKGVudigpLmdldEJvb2woJ0NIRUNLX0NPTVBVVEFUSU9OX0ZPUl9FUlJPUlMnKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIC8vIERhbmdsaW5nIHByb21pc2UgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcHJvcGFnYXRlIHVwXG4gICAgICAgIC8vIGFzeW5jaHJvbmljaXR5LlxuICAgICAgICBvdXRwdXQuZGF0YSgpLnRoZW4odGVuc29yVmFscyA9PiB7XG4gICAgICAgICAgY2hlY2tDb21wdXRhdGlvbkZvckVycm9ycyh0ZW5zb3JWYWxzLCBvdXRwdXQuZHR5cGUsIGtlcm5lbE5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXJuZWxQcm9maWxlID0ge1xuICAgICAga2VybmVsTmFtZSxcbiAgICAgIG91dHB1dHMsXG4gICAgICBpbnB1dHMsXG4gICAgICB0aW1lTXM6IHRpbWVyLnRoZW4odGltaW5nID0+IHRpbWluZy5rZXJuZWxNcyksXG4gICAgICBleHRyYUluZm86IHRpbWVyLnRoZW4oXG4gICAgICAgICAgdGltaW5nID0+IHRpbWluZy5nZXRFeHRyYVByb2ZpbGVJbmZvICE9IG51bGwgP1xuICAgICAgICAgICAgICB0aW1pbmcuZ2V0RXh0cmFQcm9maWxlSW5mbygpIDpcbiAgICAgICAgICAgICAgJycpXG4gICAgfTtcbiAgICByZXR1cm4ga2VybmVsUHJvZmlsZTtcbiAgfVxuXG4gIGxvZ0tlcm5lbFByb2ZpbGUoa2VybmVsUHJvZmlsZTogS2VybmVsUHJvZmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IHtrZXJuZWxOYW1lLCBvdXRwdXRzLCB0aW1lTXMsIGlucHV0cywgZXh0cmFJbmZvfSA9IGtlcm5lbFByb2ZpbGU7XG5cbiAgICBvdXRwdXRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIFByb21pc2UuYWxsKFtyZXN1bHQuZGF0YSgpLCB0aW1lTXMsIGV4dHJhSW5mb10pLnRoZW4odmFsdWVDb250YWluZXIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5sb2dLZXJuZWxQcm9maWxlKFxuICAgICAgICAgICAga2VybmVsTmFtZSwgcmVzdWx0LCB2YWx1ZUNvbnRhaW5lclswXSwgdmFsdWVDb250YWluZXJbMV0sIGlucHV0cyxcbiAgICAgICAgICAgIHZhbHVlQ29udGFpbmVyWzJdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbXB1dGF0aW9uRm9yRXJyb3JzPEQgZXh0ZW5kcyBEYXRhVHlwZT4oXG4gICAgdmFsczogRGF0YVR5cGVNYXBbRF0sIGR0eXBlOiBELCBrZXJuZWxOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICAvLyBPbmx5IGZsb2F0aW5nIHBvaW50IGNvbXB1dGF0aW9ucyB3aWxsIGdlbmVyYXRlIE5hTiB2YWx1ZXNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbnVtID0gdmFsc1tpXSBhcyBudW1iZXI7XG4gICAgaWYgKGlzTmFOKG51bSkgfHwgIWlzRmluaXRlKG51bSkpIHtcbiAgICAgIC8vIFRocm93aW5nIGN1c3RvbSBleGNlcHRpb24gc28gYmVoYXZpb3IgaXMgdGVzdGFibGUuXG4gICAgICBjb25zb2xlLndhcm4oYEZvdW5kICR7bnVtfSBpbiB0aGUgcmVzdWx0IG9mICcke2tlcm5lbE5hbWV9J2ApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ2dlciB7XG4gIGxvZ0tlcm5lbFByb2ZpbGUoXG4gICAgICBuYW1lOiBzdHJpbmcsIHJlc3VsdDogVGVuc29yLCB2YWxzOiBUeXBlZEFycmF5LFxuICAgICAgdGltZU1zOiBudW1iZXJ8e2Vycm9yOiBzdHJpbmd9LCBpbnB1dHM6IE5hbWVkVGVuc29yTWFwLFxuICAgICAgZXh0cmFJbmZvPzogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZSA9IHR5cGVvZiB0aW1lTXMgPT09ICdudW1iZXInID8gdXRpbC5yaWdodFBhZChgJHt0aW1lTXN9bXNgLCA5KSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZU1zWydlcnJvciddO1xuICAgIGNvbnN0IHBhZGRlZE5hbWUgPSB1dGlsLnJpZ2h0UGFkKG5hbWUsIDI1KTtcbiAgICBjb25zdCByYW5rID0gcmVzdWx0LnJhbms7XG4gICAgY29uc3Qgc2l6ZSA9IHJlc3VsdC5zaXplO1xuICAgIGNvbnN0IHNoYXBlID0gdXRpbC5yaWdodFBhZChyZXN1bHQuc2hhcGUudG9TdHJpbmcoKSwgMTQpO1xuICAgIGxldCBpbnB1dFNoYXBlc0Rlc2NyaXB0aW9uID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gaW5wdXRzKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0c1tuYW1lXTtcbiAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSBpbnB1dCBtaWdodCBiZSBhIG5vbi10ZW5zb3IgKGUuZyBIVE1MSW1hZ2VFbGVtZW50KSwgaW4gd2hpY2ggY2FzZVxuICAgICAgICAvLyB3ZSBjbGFpbSB0aGUgb3V0cHV0IHNoYXBlIGFzIGlucHV0IHNoYXBlLlxuICAgICAgICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXQuc2hhcGUgfHwgcmVzdWx0LnNoYXBlO1xuICAgICAgICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgICAgICAgaW5wdXRTaGFwZXNEZXNjcmlwdGlvbiArPVxuICAgICAgICAgICAgYCR7bmFtZX06ICR7aW5wdXRSYW5rfUQgJHtpbnB1dFJhbmsgPiAwID8gaW5wdXRTaGFwZSA6ICcnfSBgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgJWMke3BhZGRlZE5hbWV9XFx0JWMke3RpbWV9XFx0JWMke3Jhbmt9RCAke3NoYXBlfVxcdCVjJHtzaXplfVxcdCVjJHtcbiAgICAgICAgICAgIGlucHV0U2hhcGVzRGVzY3JpcHRpb259XFx0JWMke2V4dHJhSW5mb31gLFxuICAgICAgICAnZm9udC13ZWlnaHQ6Ym9sZCcsICdjb2xvcjpyZWQnLCAnY29sb3I6Ymx1ZScsICdjb2xvcjogb3JhbmdlJyxcbiAgICAgICAgJ2NvbG9yOiBncmVlbicsICdjb2xvcjogc3RlZWxibHVlJyk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from './util';\n/**\n * Computes a list of TapeNodes that connect x to y, filtering everything else\n * out and preserving the order of the original tape elements.\n *\n * @param tape The tape elements to filter.\n * @param xs The input Tensors.\n * @param y The output Tensor.\n */\nexport function getFilteredNodesXToY(tape, xs, y) {\n // Forward pass to compute all the nodes and Tensors that are transitively a\n // function of x.\n const tensorsFromX = {};\n const nodesFromX = {};\n for (let i = 0; i < xs.length; i++) {\n tensorsFromX[xs[i].id] = true;\n }\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n for (const inputName in nodeInputs) {\n const input = nodeInputs[inputName];\n let anyInputFromX = false;\n for (let j = 0; j < xs.length; j++) {\n if (tensorsFromX[input.id]) {\n node.outputs.forEach(output => tensorsFromX[output.id] = true);\n anyInputFromX = true;\n nodesFromX[node.id] = true;\n break;\n }\n }\n if (anyInputFromX) {\n break;\n }\n }\n }\n // Backward pass to find all of the nodes and Tensors that lead to y.\n const tensorsLeadToY = {};\n tensorsLeadToY[y.id] = true;\n const nodesToY = {};\n for (let i = tape.length - 1; i >= 0; i--) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n // If any of the outputs lead to y, mark all of the inputs as leading to y.\n for (let j = 0; j < node.outputs.length; j++) {\n if (tensorsLeadToY[node.outputs[j].id]) {\n for (const inputName in nodeInputs) {\n tensorsLeadToY[nodeInputs[inputName].id] = true;\n nodesToY[node.id] = true;\n }\n break;\n }\n }\n }\n // Return the paths that come from x and lead to y.\n const filteredTape = [];\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n if (nodesFromX[node.id] && nodesToY[node.id]) {\n // Prune the inputs from the node that aren't a function of x.\n const prunedInputs = {};\n for (const inputName in node.inputs) {\n const nodeInput = node.inputs[inputName];\n if (tensorsFromX[nodeInput.id]) {\n prunedInputs[inputName] = nodeInput;\n }\n }\n // Copy the node and overwrite inputsAndArgs to the pruned version.\n const prunedNode = Object.assign({}, node);\n prunedNode.inputs = prunedInputs;\n prunedNode.outputs = node.outputs;\n filteredTape.push(prunedNode);\n }\n }\n return filteredTape;\n}\n/**\n * Backpropagate gradients through the filtered TapeNodes.\n *\n * @param tensorAccumulatedGradientMap A map of Tensor to its gradient. This map\n * is mutated by this method.\n * @param filteredTape The filtered TapeNodes to backprop through.\n */\nexport function backpropagateGradients(tensorAccumulatedGradientMap, filteredTape, tidy, add) {\n // Walk the tape backward and keep a map of Tensor to its gradient.\n for (let i = filteredTape.length - 1; i >= 0; i--) {\n const node = filteredTape[i];\n const dys = [];\n node.outputs.forEach(o => {\n const gradTensor = tensorAccumulatedGradientMap[o.id];\n if (gradTensor != null) {\n dys.push(gradTensor);\n }\n else {\n // This particular output is not in the back-propagation subgraph, so it\n // does not affect the final output, thus we put null for its dy.\n dys.push(null);\n }\n });\n if (node.gradient == null) {\n throw new Error(`Cannot compute gradient: gradient function not found ` +\n `for ${node.kernelName}.`);\n }\n // Backprop dy through this node and accumulate gradients over the inputs.\n const inputGradients = node.gradient(dys);\n for (const inputName in node.inputs) {\n if (!(inputName in inputGradients)) {\n throw new Error(`Cannot backprop through input ${inputName}. ` +\n `Available gradients found: ${Object.keys(inputGradients)}.`);\n }\n // Call the gradient function.\n const dx = tidy(() => inputGradients[inputName]());\n if (dx.dtype !== 'float32') {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `${inputName} must have 'float32' dtype, but has '${dx.dtype}'`);\n }\n const x = node.inputs[inputName];\n if (!util.arraysEqual(dx.shape, x.shape)) {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `'${inputName}' has shape '${dx.shape}', which does not match ` +\n `the shape of the input '${x.shape}'`);\n }\n if (tensorAccumulatedGradientMap[x.id] == null) {\n tensorAccumulatedGradientMap[x.id] = dx;\n }\n else {\n const curGradient = tensorAccumulatedGradientMap[x.id];\n tensorAccumulatedGradientMap[x.id] = add(curGradient, dx);\n curGradient.dispose();\n }\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQWdCL0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsSUFBZ0IsRUFBRSxFQUFZLEVBQUUsQ0FBUztJQUMzQyw0RUFBNEU7SUFDNUUsaUJBQWlCO0lBQ2pCLE1BQU0sWUFBWSxHQUFrQyxFQUFFLENBQUM7SUFDdkQsTUFBTSxVQUFVLEdBQWdDLEVBQUUsQ0FBQztJQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUMvQjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVwQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFB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QUMsQ0FBQztZQUNuRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUNYLDRCQUNJLElBQUksQ0FBQyxVQUFVLDBCQUEwQjtvQkFDN0MsR0FBRyxTQUFTLHdDQUF3QyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUN0RTtZQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ1gsNEJBQ0ksSUFBSSxDQUFDLFVBQVUsMEJBQTBCO29CQUM3QyxJQUFJLFNBQVMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLDBCQUEwQjtvQkFDL0QsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUM5Qyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3pDO2lCQUFNO2dCQUNMLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFELFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN2QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcGVOb2RlIHtcbiAgaWQ6IG51bWJlcjtcbiAga2VybmVsTmFtZTogc3RyaW5nO1xuICBvdXRwdXRzOiBUZW5zb3JbXTtcbiAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcDtcbiAgLy8gT3B0aW9uYWwgcGFyYW1zLCBkZWZpbmVkIG9ubHkgZm9yIG9wcyB3aXRoIGdyYWRpZW50IGltcGwuXG4gIGdyYWRpZW50PzogKGR5czogVGVuc29yW10pID0+IE5hbWVkR3JhZGllbnRNYXA7XG4gIHNhdmVkPzogVGVuc29yW107XG59XG5cbmV4cG9ydCB0eXBlIE5hbWVkR3JhZGllbnRNYXAgPSB7XG4gIFtpbnB1dE5hbWU6IHN0cmluZ106ICgpID0+IFRlbnNvcjtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgYSBsaXN0IG9mIFRhcGVOb2RlcyB0aGF0IGNvbm5lY3QgeCB0byB5LCBmaWx0ZXJpbmcgZXZlcnl0aGluZyBlbHNlXG4gKiBvdXQgYW5kIHByZXNlcnZpbmcgdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCB0YXBlIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB0YXBlIFRoZSB0YXBlIGVsZW1lbnRzIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB4cyBUaGUgaW5wdXQgVGVuc29ycy5cbiAqIEBwYXJhbSB5IFRoZSBvdXRwdXQgVGVuc29yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyZWROb2Rlc1hUb1koXG4gICAgdGFwZTogVGFwZU5vZGVbXSwgeHM6IFRlbnNvcltdLCB5OiBUZW5zb3IpOiBUYXBlTm9kZVtdIHtcbiAgLy8gRm9yd2FyZCBwYXNzIHRvIGNvbXB1dGUgYWxsIHRoZSBub2RlcyBhbmQgVGVuc29ycyB0aGF0IGFyZSB0cmFuc2l0aXZlbHkgYVxuICAvLyBmdW5jdGlvbiBvZiB4LlxuICBjb25zdCB0ZW5zb3JzRnJvbVg6IHtbdGVuc29ySWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG4gIGNvbnN0IG5vZGVzRnJvbVg6IHtbbm9kZUlkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGVuc29yc0Zyb21YW3hzW2ldLmlkXSA9IHRydWU7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcGUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBub2RlID0gdGFwZVtpXTtcbiAgICBjb25zdCBub2RlSW5wdXRzID0gbm9kZS5pbnB1dHM7XG4gICAgZm9yIChjb25zdCBpbnB1dE5hbWUgaW4gbm9kZUlucHV0cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBub2RlSW5wdXRzW2lucHV0TmFtZV07XG5cbiAgICAgIGxldCBhbnlJbnB1dEZyb21YID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHhzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICh0ZW5zb3JzRnJvbVhbaW5wdXQuaWRdKSB7XG4gICAgICAgICAgbm9kZS5vdXRwdXRzLmZvckVhY2gob3V0cHV0ID0+IHRlbnNvcnNGcm9tWFtvdXRwdXQuaWRdID0gdHJ1ZSk7XG4gICAgICAgICAgYW55SW5wdXRGcm9tWCA9IHRydWU7XG4gICAgICAgICAgbm9kZXNGcm9tWFtub2RlLmlkXSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFueUlucHV0RnJvbVgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQmFja3dhcmQgcGFzcyB0byBmaW5kIGFsbCBvZiB0aGUgbm9kZXMgYW5kIFRlbnNvcnMgdGhhdCBsZWFkIHRvIHkuXG4gIGNvbnN0IHRlbnNvcnNMZWFkVG9ZOiB7W3RlbnNvcklkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuICB0ZW5zb3JzTGVhZFRvWVt5LmlkXSA9IHRydWU7XG4gIGNvbnN0IG5vZGVzVG9ZOiB7W25vZGVJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuICBmb3IgKGxldCBpID0gdGFwZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IG5vZGUgPSB0YXBlW2ldO1xuICAgIGNvbnN0IG5vZGVJbnB1dHMgPSBub2RlLmlucHV0cztcblxuICAgIC8vIElmIGFueSBvZiB0aGUgb3V0cHV0cyBsZWFkIHRvIHksIG1hcmsgYWxsIG9mIHRoZSBpbnB1dHMgYXMgbGVhZGluZyB0byB5LlxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZS5vdXRwdXRzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAodGVuc29yc0xlYWRUb1lbbm9kZS5vdXRwdXRzW2pdLmlkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBub2RlSW5wdXRzKSB7XG4gICAgICAgICAgdGVuc29yc0xlYWRUb1lbbm9kZUlucHV0c1tpbnB1dE5hbWVdLmlkXSA9IHRydWU7XG4gICAgICAgICAgbm9kZXNUb1lbbm9kZS5pZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcGF0aHMgdGhhdCBjb21lIGZyb20geCBhbmQgbGVhZCB0byB5LlxuICBjb25zdCBmaWx0ZXJlZFRhcGU6IFRhcGVOb2RlW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRhcGVbaV07XG5cbiAgICBpZiAobm9kZXNGcm9tWFtub2RlLmlkXSAmJiBub2Rlc1RvWVtub2RlLmlkXSkge1xuICAgICAgLy8gUHJ1bmUgdGhlIGlucHV0cyBmcm9tIHRoZSBub2RlIHRoYXQgYXJlbid0IGEgZnVuY3Rpb24gb2YgeC5cbiAgICAgIGNvbnN0IHBydW5lZElucHV0czoge1tpbnB1dE5hbWU6IHN0cmluZ106IFRlbnNvcn0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbnB1dCA9IG5vZGUuaW5wdXRzW2lucHV0TmFtZV07XG4gICAgICAgIGlmICh0ZW5zb3JzRnJvbVhbbm9kZUlucHV0LmlkXSkge1xuICAgICAgICAgIHBydW5lZElucHV0c1tpbnB1dE5hbWVdID0gbm9kZUlucHV0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgdGhlIG5vZGUgYW5kIG92ZXJ3cml0ZSBpbnB1dHNBbmRBcmdzIHRvIHRoZSBwcnVuZWQgdmVyc2lvbi5cbiAgICAgIGNvbnN0IHBydW5lZE5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBub2RlKTtcbiAgICAgIHBydW5lZE5vZGUuaW5wdXRzID0gcHJ1bmVkSW5wdXRzO1xuICAgICAgcHJ1bmVkTm9kZS5vdXRwdXRzID0gbm9kZS5vdXRwdXRzO1xuXG4gICAgICBmaWx0ZXJlZFRhcGUucHVzaChwcnVuZWROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRUYXBlO1xufVxuXG4vKipcbiAqIEJhY2twcm9wYWdhdGUgZ3JhZGllbnRzIHRocm91Z2ggdGhlIGZpbHRlcmVkIFRhcGVOb2Rlcy5cbiAqXG4gKiBAcGFyYW0gdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcCBBIG1hcCBvZiBUZW5zb3IgdG8gaXRzIGdyYWRpZW50LiBUaGlzIG1hcFxuICogaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZC5cbiAqIEBwYXJhbSBmaWx0ZXJlZFRhcGUgVGhlIGZpbHRlcmVkIFRhcGVOb2RlcyB0byBiYWNrcHJvcCB0aHJvdWdoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFja3Byb3BhZ2F0ZUdyYWRpZW50cyhcbiAgICB0ZW5zb3JBY2N1bXVsYXRlZEdyYWRpZW50TWFwOiB7W3RlbnNvcklkOiBudW1iZXJdOiBUZW5zb3J9LFxuICAgIGZpbHRlcmVkVGFwZTogVGFwZU5vZGVbXSwgdGlkeTogKGY6IEZ1bmN0aW9uKSA9PiBUZW5zb3IsXG4gICAgYWRkOiAoYTogVGVuc29yLCBiOiBUZW5zb3IpID0+IFRlbnNvcikge1xuICAvLyBXYWxrIHRoZSB0YXBlIGJhY2t3YXJkIGFuZCBrZWVwIGEgbWFwIG9mIFRlbnNvciB0byBpdHMgZ3JhZGllbnQuXG4gIGZvciAobGV0IGkgPSBmaWx0ZXJlZFRhcGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBub2RlID0gZmlsdGVyZWRUYXBlW2ldO1xuXG4gICAgY29uc3QgZHlzOiBUZW5zb3JbXSA9IFtdO1xuICAgIG5vZGUub3V0cHV0cy5mb3JFYWNoKG8gPT4ge1xuICAgICAgY29uc3QgZ3JhZFRlbnNvciA9IHRlbnNvckFjY3VtdWxhdGVkR3JhZGllbnRNYXBbby5pZF07XG4gICAgICBpZiAoZ3JhZFRlbnNvciAhPSBudWxsKSB7XG4gICAgICAgIGR5cy5wdXNoKGdyYWRUZW5zb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBwYXJ0aWN1bGFyIG91dHB1dCBpcyBub3QgaW4gdGhlIGJhY2stcHJvcGFnYXRpb24gc3ViZ3JhcGgsIHNvIGl0XG4gICAgICAgIC8vIGRvZXMgbm90IGFmZmVjdCB0aGUgZmluYWwgb3V0cHV0LCB0aHVzIHdlIHB1dCBudWxsIGZvciBpdHMgZHkuXG4gICAgICAgIGR5cy5wdXNoKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG5vZGUuZ3JhZGllbnQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY29tcHV0ZSBncmFkaWVudDogZ3JhZGllbnQgZnVuY3Rpb24gbm90IGZvdW5kIGAgK1xuICAgICAgICAgIGBmb3IgJHtub2RlLmtlcm5lbE5hbWV9LmApO1xuICAgIH1cblxuICAgIC8vIEJhY2twcm9wIGR5IHRocm91Z2ggdGhpcyBub2RlIGFuZCBhY2N1bXVsYXRlIGdyYWRpZW50cyBvdmVyIHRoZSBpbnB1dHMuXG4gICAgY29uc3QgaW5wdXRHcmFkaWVudHMgPSBub2RlLmdyYWRpZW50KGR5cyk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xuICAgICAgaWYgKCEoaW5wdXROYW1lIGluIGlucHV0R3JhZGllbnRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IGJhY2twcm9wIHRocm91Z2ggaW5wdXQgJHtpbnB1dE5hbWV9LiBgICtcbiAgICAgICAgICAgIGBBdmFpbGFibGUgZ3JhZGllbnRzIGZvdW5kOiAke09iamVjdC5rZXlzKGlucHV0R3JhZGllbnRzKX0uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgdGhlIGdyYWRpZW50IGZ1bmN0aW9uLlxuICAgICAgY29uc3QgZHggPSB0aWR5KCgpID0+IGlucHV0R3JhZGllbnRzW2lucHV0TmFtZV0oKSk7XG4gICAgICBpZiAoZHguZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXJyb3IgaW4gZ3JhZGllbnQgZm9yIG9wICR7XG4gICAgICAgICAgICAgICAgbm9kZS5rZXJuZWxOYW1lfS4gVGhlIGdyYWRpZW50IG9mIGlucHV0IGAgK1xuICAgICAgICAgICAgYCR7aW5wdXROYW1lfSBtdXN0IGhhdmUgJ2Zsb2F0MzInIGR0eXBlLCBidXQgaGFzICcke2R4LmR0eXBlfSdgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHggPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xuICAgICAgaWYgKCF1dGlsLmFycmF5c0VxdWFsKGR4LnNoYXBlLCB4LnNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRXJyb3IgaW4gZ3JhZGllbnQgZm9yIG9wICR7XG4gICAgICAgICAgICAgICAgbm9kZS5rZXJuZWxOYW1lfS4gVGhlIGdyYWRpZW50IG9mIGlucHV0IGAgK1xuICAgICAgICAgICAgYCcke2lucHV0TmFtZX0nIGhhcyBzaGFwZSAnJHtkeC5zaGFwZX0nLCB3aGljaCBkb2VzIG5vdCBtYXRjaCBgICtcbiAgICAgICAgICAgIGB0aGUgc2hhcGUgb2YgdGhlIGlucHV0ICcke3guc2hhcGV9J2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSA9PSBudWxsKSB7XG4gICAgICAgIHRlbnNvckFjY3VtdWxhdGVkR3JhZGllbnRNYXBbeC5pZF0gPSBkeDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1ckdyYWRpZW50ID0gdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXTtcbiAgICAgICAgdGVuc29yQWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSA9IGFkZChjdXJHcmFkaWVudCwgZHgpO1xuICAgICAgICBjdXJHcmFkaWVudC5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { computeStrides, isString, rightPad, sizeFromShape } from './util';\n// Maximum number of values before we decide to show ellipsis.\nconst FORMAT_LIMIT_NUM_VALS = 20;\n// Number of first and last values to show when displaying a, b,...,y, z.\nconst FORMAT_NUM_FIRST_LAST_VALS = 3;\n// Number of significant digits to show.\nconst FORMAT_NUM_SIG_DIGITS = 7;\nexport function tensorToString(vals, shape, dtype, verbose) {\n const strides = computeStrides(shape);\n const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides);\n const rank = shape.length;\n const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol);\n const lines = ['Tensor'];\n if (verbose) {\n lines.push(` dtype: ${dtype}`);\n lines.push(` rank: ${rank}`);\n lines.push(` shape: [${shape}]`);\n lines.push(` values:`);\n }\n lines.push(valsLines.map(l => ' ' + l).join('\\n'));\n return lines.join('\\n');\n}\nfunction computeMaxSizePerColumn(vals, shape, dtype, strides) {\n const n = sizeFromShape(shape);\n const numCols = strides[strides.length - 1];\n const padPerCol = new Array(numCols).fill(0);\n const rank = shape.length;\n const valuesOrTuples = dtype === 'complex64' ? createComplexTuples(vals) : vals;\n if (rank > 1) {\n for (let row = 0; row < n / numCols; row++) {\n const offset = row * numCols;\n for (let j = 0; j < numCols; j++) {\n padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length);\n }\n }\n }\n return padPerCol;\n}\nfunction valToString(val, pad, dtype) {\n let valStr;\n if (Array.isArray(val)) {\n valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ` +\n `${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`;\n }\n else if (isString(val)) {\n valStr = `'${val}'`;\n }\n else if (dtype === 'bool') {\n valStr = boolNumToString(val);\n }\n else {\n valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString();\n }\n return rightPad(valStr, pad);\n}\nfunction boolNumToString(v) {\n return v === 0 ? 'false' : 'true';\n}\nfunction subTensorToString(vals, shape, dtype, strides, padPerCol, isLast = true) {\n const storagePerElement = dtype === 'complex64' ? 2 : 1;\n const size = shape[0];\n const rank = shape.length;\n if (rank === 0) {\n if (dtype === 'complex64') {\n const complexTuple = createComplexTuples(vals);\n return [valToString(complexTuple[0], 0, dtype)];\n }\n if (dtype === 'bool') {\n return [boolNumToString(vals[0])];\n }\n return [vals[0].toString()];\n }\n if (rank === 1) {\n if (size > FORMAT_LIMIT_NUM_VALS) {\n const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement;\n let firstVals = Array.from(vals.slice(0, firstValsSize));\n let lastVals = Array.from(vals.slice((size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement, size * storagePerElement));\n if (dtype === 'complex64') {\n firstVals = createComplexTuples(firstVals);\n lastVals = createComplexTuples(lastVals);\n }\n return [\n '[' +\n firstVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ', ..., ' +\n lastVals\n .map((x, i) => valToString(x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype))\n .join(', ') +\n ']'\n ];\n }\n const displayVals = dtype === 'complex64' ? createComplexTuples(vals) :\n Array.from(vals);\n return [\n '[' +\n displayVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ']'\n ];\n }\n // The array is rank 2 or more.\n const subshape = shape.slice(1);\n const substrides = strides.slice(1);\n const stride = strides[0] * storagePerElement;\n const lines = [];\n if (size > FORMAT_LIMIT_NUM_VALS) {\n for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, false /* isLast */));\n }\n lines.push('...');\n for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n else {\n for (let i = 0; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n const sep = rank === 2 ? ',' : '';\n lines[0] = '[' + (size > 0 ? lines[0] + sep : '');\n for (let i = 1; i < lines.length - 1; i++) {\n lines[i] = ' ' + lines[i] + sep;\n }\n let newLineSep = ',\\n';\n for (let i = 2; i < rank; i++) {\n newLineSep += '\\n';\n }\n lines[lines.length - 1] =\n ' ' + lines[lines.length - 1] + ']' + (isLast ? '' : newLineSep);\n return lines;\n}\nfunction createComplexTuples(vals) {\n const complexTuples = [];\n for (let i = 0; i < vals.length; i += 2) {\n complexTuples.push([vals[i], vals[i + 1]]);\n }\n return complexTuples;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2Zvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvdGVuc29yX2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXpFLDhEQUE4RDtBQUM5RCxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUNqQyx5RUFBeUU7QUFDekUsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsd0NBQXdDO0FBQ3hDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxjQUFjLENBQzFCLElBQXlCLEVBQUUsS0FBZSxFQUFFLEtBQWUsRUFDM0QsT0FBZ0I7SUFDbEIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekIsSUFBSSxPQUFPLEVBQUU7UUFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQUMsQ0FB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QUFDLENBQUM7UUFDbkIsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQ1U7SUFDckMsTUFBTSxhQUFhLEdBQTRCLEVBQUUsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBcUIsQ0FBQyxDQUFDO0tBQ2hFO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBpc1N0cmluZywgcmlnaHRQYWQsIHNpemVGcm9tU2hhcGV9IGZyb20gJy4vdXRpbCc7XG5cbi8vIE1heGltdW0gbnVtYmVyIG9mIHZhbHVlcyBiZWZvcmUgd2UgZGVjaWRlIHRvIHNob3cgZWxsaXBzaXMuXG5jb25zdCBGT1JNQVRfTElNSVRfTlVNX1ZBTFMgPSAyMDtcbi8vIE51bWJlciBvZiBmaXJzdCBhbmQgbGFzdCB2YWx1ZXMgdG8gc2hvdyB3aGVuIGRpc3BsYXlpbmcgYSwgYiwuLi4seSwgei5cbmNvbnN0IEZPUk1BVF9OVU1fRklSU1RfTEFTVF9WQUxTID0gMztcbi8vIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgdG8gc2hvdy5cbmNvbnN0IEZPUk1BVF9OVU1fU0lHX0RJR0lUUyA9IDc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3JUb1N0cmluZyhcbiAgICB2YWxzOiBUeXBlZEFycmF5fHN0cmluZ1tdLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICB2ZXJib3NlOiBib29sZWFuKSB7XG4gIGNvbnN0IHN0cmlkZXMgPSBjb21wdXRlU3RyaWRlcyhzaGFwZSk7XG4gIGNvbnN0IHBhZFBlckNvbCA9IGNvbXB1dGVNYXhTaXplUGVyQ29sdW1uKHZhbHMsIHNoYXBlLCBkdHlwZSwgc3RyaWRlcyk7XG4gIGNvbnN0IHJhbmsgPSBzaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHZhbHNMaW5lcyA9IHN1YlRlbnNvclRvU3RyaW5nKHZhbHMsIHNoYXBlLCBkdHlwZSwgc3RyaWRlcywgcGFkUGVyQ29sKTtcbiAgY29uc3QgbGluZXMgPSBbJ1RlbnNvciddO1xuICBpZiAodmVyYm9zZSkge1xuICAgIGxpbmVzLnB1c2goYCAgZHR5cGU6ICR7ZHR5cGV9YCk7XG4gICAgbGluZXMucHVzaChgICByYW5rOiAke3Jhbmt9YCk7XG4gICAgbGluZXMucHVzaChgICBzaGFwZTogWyR7c2hhcGV9XWApO1xuICAgIGxpbmVzLnB1c2goYCAgdmFsdWVzOmApO1xuICB9XG4gIGxpbmVzLnB1c2godmFsc0xpbmVzLm1hcChsID0+ICcgICAgJyArIGwpLmpvaW4oJ1xcbicpKTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlTWF4U2l6ZVBlckNvbHVtbihcbiAgICB2YWxzOiBUeXBlZEFycmF5fHN0cmluZ1tdLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbiA9IHNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICBjb25zdCBudW1Db2xzID0gc3RyaWRlc1tzdHJpZGVzLmxlbmd0aCAtIDFdO1xuICBjb25zdCBwYWRQZXJDb2wgPSBuZXcgQXJyYXkobnVtQ29scykuZmlsbCgwKTtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgY29uc3QgdmFsdWVzT3JUdXBsZXMgPVxuICAgICAgZHR5cGUgPT09ICdjb21wbGV4NjQnID8gY3JlYXRlQ29tcGxleFR1cGxlcyh2YWxzKSA6IHZhbHM7XG5cbiAgaWYgKHJhbmsgPiAxKSB7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbiAvIG51bUNvbHM7IHJvdysrKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSByb3cgKiBudW1Db2xzO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2xzOyBqKyspIHtcbiAgICAgICAgcGFkUGVyQ29sW2pdID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBwYWRQZXJDb2xbal0sXG4gICAgICAgICAgICB2YWxUb1N0cmluZyh2YWx1ZXNPclR1cGxlc1tvZmZzZXQgKyBqXSwgMCwgZHR5cGUpLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYWRQZXJDb2w7XG59XG5cbmZ1bmN0aW9uIHZhbFRvU3RyaW5nKFxuICAgIHZhbDogbnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdLCBwYWQ6IG51bWJlciwgZHR5cGU6IERhdGFUeXBlKSB7XG4gIGxldCB2YWxTdHI6IHN0cmluZztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHZhbFN0ciA9IGAke3BhcnNlRmxvYXQodmFsWzBdLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSl9ICsgYCArXG4gICAgICAgIGAke3BhcnNlRmxvYXQodmFsWzFdLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSl9amA7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsKSkge1xuICAgIHZhbFN0ciA9IGAnJHt2YWx9J2A7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHZhbFN0ciA9IGJvb2xOdW1Ub1N0cmluZyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHZhbFN0ciA9IHBhcnNlRmxvYXQodmFsLnRvRml4ZWQoRk9STUFUX05VTV9TSUdfRElHSVRTKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiByaWdodFBhZCh2YWxTdHIsIHBhZCk7XG59XG5cbmZ1bmN0aW9uIGJvb2xOdW1Ub1N0cmluZyh2OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdiA9PT0gMCA/ICdmYWxzZScgOiAndHJ1ZSc7XG59XG5cbmZ1bmN0aW9uIHN1YlRlbnNvclRvU3RyaW5nKFxuICAgIHZhbHM6IFR5cGVkQXJyYXl8c3RyaW5nW10sIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBwYWRQZXJDb2w6IG51bWJlcltdLCBpc0xhc3QgPSB0cnVlKTogc3RyaW5nW10ge1xuICBjb25zdCBzdG9yYWdlUGVyRWxlbWVudCA9IGR0eXBlID09PSAnY29tcGxleDY0JyA/IDIgOiAxO1xuXG4gIGNvbnN0IHNpemUgPSBzaGFwZVswXTtcbiAgY29uc3QgcmFuayA9IHNoYXBlLmxlbmd0aDtcbiAgaWYgKHJhbmsgPT09IDApIHtcbiAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICBjb25zdCBjb21wbGV4VHVwbGUgPSBjcmVhdGVDb21wbGV4VHVwbGVzKHZhbHMpO1xuICAgICAgcmV0dXJuIFt2YWxUb1N0cmluZyhjb21wbGV4VHVwbGVbMF0sIDAsIGR0eXBlKV07XG4gICAgfVxuICAgIGlmIChkdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICByZXR1cm4gW2Jvb2xOdW1Ub1N0cmluZyh2YWxzWzBdIGFzIG51bWJlcildO1xuICAgIH1cbiAgICByZXR1cm4gW3ZhbHNbMF0udG9TdHJpbmcoKV07XG4gIH1cblxuICBpZiAocmFuayA9PT0gMSkge1xuICAgIGlmIChzaXplID4gRk9STUFUX0xJTUlUX05VTV9WQUxTKSB7XG4gICAgICBjb25zdCBmaXJzdFZhbHNTaXplID0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMgKiBzdG9yYWdlUGVyRWxlbWVudDtcblxuICAgICAgbGV0IGZpcnN0VmFscyA9IEFycmF5LmZyb208bnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdPihcbiAgICAgICAgICB2YWxzLnNsaWNlKDAsIGZpcnN0VmFsc1NpemUpKTtcbiAgICAgIGxldCBsYXN0VmFscyA9IEFycmF5LmZyb208bnVtYmVyfHN0cmluZ3xbbnVtYmVyLCBudW1iZXJdPih2YWxzLnNsaWNlKFxuICAgICAgICAgIChzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMpICogc3RvcmFnZVBlckVsZW1lbnQsXG4gICAgICAgICAgc2l6ZSAqIHN0b3JhZ2VQZXJFbGVtZW50KSk7XG4gICAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICAgIGZpcnN0VmFscyA9IGNyZWF0ZUNvbXBsZXhUdXBsZXMoZmlyc3RWYWxzKTtcbiAgICAgICAgbGFzdFZhbHMgPSBjcmVhdGVDb21wbGV4VHVwbGVzKGxhc3RWYWxzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXG4gICAgICAgICdbJyArXG4gICAgICAgIGZpcnN0VmFscy5tYXAoKHgsIGkpID0+IHZhbFRvU3RyaW5nKHgsIHBhZFBlckNvbFtpXSwgZHR5cGUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgICAnLCAuLi4sICcgK1xuICAgICAgICBsYXN0VmFsc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAoeCwgaSkgPT4gdmFsVG9TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIHgsIHBhZFBlckNvbFtzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFMgKyBpXSwgZHR5cGUpKVxuICAgICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgICAnXSdcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IGRpc3BsYXlWYWxzOiBBcnJheTxudW1iZXJ8c3RyaW5nfFtudW1iZXIsIG51bWJlcl0+ID1cbiAgICAgICAgZHR5cGUgPT09ICdjb21wbGV4NjQnID8gY3JlYXRlQ29tcGxleFR1cGxlcyh2YWxzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb208bnVtYmVyfHN0cmluZz4odmFscyk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJ1snICtcbiAgICAgIGRpc3BsYXlWYWxzLm1hcCgoeCwgaSkgPT4gdmFsVG9TdHJpbmcoeCwgcGFkUGVyQ29sW2ldLCBkdHlwZSkpXG4gICAgICAgICAgLmpvaW4oJywgJykgK1xuICAgICAgJ10nXG4gICAgXTtcbiAgfVxuXG4gIC8vIFRoZSBhcnJheSBpcyByYW5rIDIgb3IgbW9yZS5cbiAgY29uc3Qgc3Vic2hhcGUgPSBzaGFwZS5zbGljZSgxKTtcbiAgY29uc3Qgc3Vic3RyaWRlcyA9IHN0cmlkZXMuc2xpY2UoMSk7XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbMF0gKiBzdG9yYWdlUGVyRWxlbWVudDtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChzaXplID4gRk9STUFUX0xJTUlUX05VTV9WQUxTKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBGT1JNQVRfTlVNX0ZJUlNUX0xBU1RfVkFMUzsgaSsrKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGkgKiBzdHJpZGU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHN0cmlkZTtcbiAgICAgIGxpbmVzLnB1c2goLi4uc3ViVGVuc29yVG9TdHJpbmcoXG4gICAgICAgICAgdmFscy5zbGljZShzdGFydCwgZW5kKSwgc3Vic2hhcGUsIGR0eXBlLCBzdWJzdHJpZGVzLCBwYWRQZXJDb2wsXG4gICAgICAgICAgZmFsc2UgLyogaXNMYXN0ICovKSk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJy4uLicpO1xuICAgIGZvciAobGV0IGkgPSBzaXplIC0gRk9STUFUX05VTV9GSVJTVF9MQVNUX1ZBTFM7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIHN0cmlkZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc3RyaWRlO1xuICAgICAgbGluZXMucHVzaCguLi5zdWJUZW5zb3JUb1N0cmluZyhcbiAgICAgICAgICB2YWxzLnNsaWNlKHN0YXJ0LCBlbmQpLCBzdWJzaGFwZSwgZHR5cGUsIHN1YnN0cmlkZXMsIHBhZFBlckNvbCxcbiAgICAgICAgICBpID09PSBzaXplIC0gMSAvKiBpc0xhc3QgKi8pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaSAqIHN0cmlkZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc3RyaWRlO1xuICAgICAgbGluZXMucHVzaCguLi5zdWJUZW5zb3JUb1N0cmluZyhcbiAgICAgICAgICB2YWxzLnNsaWNlKHN0YXJ0LCBlbmQpLCBzdWJzaGFwZSwgZHR5cGUsIHN1YnN0cmlkZXMsIHBhZFBlckNvbCxcbiAgICAgICAgICBpID09PSBzaXplIC0gMSAvKiBpc0xhc3QgKi8pKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2VwID0gcmFuayA9PT0gMiA/ICcsJyA6ICcnO1xuICBsaW5lc1swXSA9ICdbJyArIChzaXplID4gMCA/IGxpbmVzWzBdICsgc2VwIDogJycpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGxpbmVzW2ldID0gJyAnICsgbGluZXNbaV0gKyBzZXA7XG4gIH1cbiAgbGV0IG5ld0xpbmVTZXAgPSAnLFxcbic7XG4gIGZvciAobGV0IGkgPSAyOyBpIDwgcmFuazsgaSsrKSB7XG4gICAgbmV3TGluZVNlcCArPSAnXFxuJztcbiAgfVxuICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9XG4gICAgICAnICcgKyBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSArICddJyArIChpc0xhc3QgPyAnJyA6IG5ld0xpbmVTZXApO1xuICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhUdXBsZXModmFsczogQXJyYXk8e30+fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlZEFycmF5KTogQXJyYXk8W251bWJlciwgbnVtYmVyXT4ge1xuICBjb25zdCBjb21wbGV4VHVwbGVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb21wbGV4VHVwbGVzLnB1c2goW3ZhbHNbaV0sIHZhbHNbaSArIDFdXSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgfVxuICByZXR1cm4gY29tcGxleFR1cGxlcztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// \nimport { getGlobal } from './global_util';\nimport { tensorToString } from './tensor_format';\nimport * as util from './util';\nimport { computeStrides, toNestedArray } from './util';\n/**\n * A mutable object, similar to `tf.Tensor`, that allows users to set values\n * at locations before converting to an immutable `tf.Tensor`.\n *\n * See `tf.buffer` for creating a tensor buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class TensorBuffer {\n constructor(shape, dtype, values) {\n this.dtype = dtype;\n this.shape = shape.slice();\n this.size = util.sizeFromShape(shape);\n if (values != null) {\n const n = values.length;\n util.assert(n === this.size, () => `Length of values '${n}' does not match the size ` +\n `inferred by the shape '${this.size}'.`);\n }\n if (dtype === 'complex64') {\n throw new Error(`complex64 dtype TensorBuffers are not supported. Please create ` +\n `a TensorBuffer for the real and imaginary parts separately and ` +\n `call tf.complex(real, imag).`);\n }\n this.values = values || util.getArrayFromDType(dtype, this.size);\n this.strides = computeStrides(shape);\n }\n /**\n * Sets a value in the buffer at a given location.\n *\n * @param value The value to set.\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n set(value, ...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n util.assert(locs.length === this.rank, () => `The number of provided coordinates (${locs.length}) must ` +\n `match the rank (${this.rank})`);\n const index = this.locToIndex(locs);\n this.values[index] = value;\n }\n /**\n * Returns the value in the buffer at the provided location.\n *\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n get(...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n let i = 0;\n for (const loc of locs) {\n if (loc < 0 || loc >= this.shape[i]) {\n const msg = `Requested out of range element at ${locs}. ` +\n ` Buffer shape=${this.shape}`;\n throw new Error(msg);\n }\n i++;\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return this.values[index];\n }\n locToIndex(locs) {\n if (this.rank === 0) {\n return 0;\n }\n else if (this.rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return index;\n }\n indexToLoc(index) {\n if (this.rank === 0) {\n return [];\n }\n else if (this.rank === 1) {\n return [index];\n }\n const locs = new Array(this.shape.length);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / this.strides[i]);\n index -= locs[i] * this.strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Creates an immutable `tf.Tensor` object from the buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n toTensor() {\n return trackerFn().makeTensor(this.values, this.shape, this.dtype);\n }\n}\n// For tracking tensor creation and disposal.\nlet trackerFn = null;\n// Used by chaining methods to call into ops.\nlet opHandler = null;\n// Used to warn about deprecated methods.\nlet deprecationWarningFn = null;\n// This here so that we can use this method on dev branches and keep the\n// functionality at master.\n// tslint:disable-next-line:no-unused-expression\n[deprecationWarningFn];\n/**\n * An external consumer can register itself as the tensor tracker. This way\n * the Tensor class can notify the tracker for every tensor created and\n * disposed.\n */\nexport function setTensorTracker(fn) {\n trackerFn = fn;\n}\n/**\n * An external consumer can register itself as the op handler. This way the\n * Tensor class can have chaining methods that call into ops via the op\n * handler.\n */\nexport function setOpHandler(handler) {\n opHandler = handler;\n}\n/**\n * Sets the deprecation warning function to be used by this file. This way the\n * Tensor class can be a leaf but still use the environment.\n */\nexport function setDeprecationWarningFn(fn) {\n deprecationWarningFn = fn;\n}\n/**\n * A `tf.Tensor` object represents an immutable, multidimensional array of\n * numbers that has a shape and a data type.\n *\n * For performance reasons, functions that create tensors do not necessarily\n * perform a copy of the data passed to them (e.g. if the data is passed as a\n * `Float32Array`), and changes to the data will change the tensor. This is not\n * a feature and is not supported. To avoid this behavior, use the tensor before\n * changing the input data or create a copy with `copy = tf.add(yourTensor, 0)`.\n *\n * See `tf.tensor` for details on how to create a `tf.Tensor`.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Tensor {\n constructor(shape, dtype, dataId, id) {\n /** Whether this tensor has been globally kept. */\n this.kept = false;\n this.isDisposedInternal = false;\n this.shape = shape.slice();\n this.dtype = dtype || 'float32';\n this.size = util.sizeFromShape(shape);\n this.strides = computeStrides(shape);\n this.dataId = dataId;\n this.id = id;\n this.rankType = (this.rank < 5 ? this.rank.toString() : 'higher');\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Returns a promise of `tf.TensorBuffer` that holds the underlying data.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async buffer() {\n const vals = await this.data();\n return opHandler.buffer(this.shape, this.dtype, vals);\n }\n /**\n * Returns a `tf.TensorBuffer` that holds the underlying data.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n bufferSync() {\n return opHandler.buffer(this.shape, this.dtype, this.dataSync());\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * asynchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async array() {\n const vals = await this.data();\n return toNestedArray(this.shape, vals, this.dtype === 'complex64');\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * synchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n arraySync() {\n return toNestedArray(this.shape, this.dataSync(), this.dtype === 'complex64');\n }\n /**\n * Asynchronously downloads the values from the `tf.Tensor`. Returns a\n * promise of `TypedArray` that resolves when the computation has finished.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async data() {\n this.throwIfDisposed();\n const data = trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n const bytes = await data;\n try {\n return bytes.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /**\n * Copy the tensor's data to a new GPU resource. Comparing to the `dataSync()`\n * and `data()`, this method prevents data from being downloaded to CPU.\n *\n * For WebGL backend, the data will be stored on a densely packed texture.\n * This means that the texture will use the RGBA channels to store value.\n *\n * For WebGPU backend, the data will be stored on a buffer. There is no\n * parameter, so can not use a user-defined size to create the buffer.\n *\n * @param options:\n * For WebGL,\n * - customTexShape: Optional. If set, will use the user defined\n * texture shape to create the texture.\n *\n * @returns For WebGL backend, a GPUData contains the new texture and\n * its information.\n * {\n * tensorRef: The tensor that is associated with this texture,\n * texture: WebGLTexture,\n * texShape: [number, number] // [height, width]\n * }\n *\n * For WebGPU backend, a GPUData contains the new buffer.\n * {\n * tensorRef: The tensor that is associated with this buffer,\n * buffer: GPUBuffer,\n * }\n *\n * Remember to dispose the GPUData after it is used by\n * `res.tensorRef.dispose()`.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dataToGPU(options) {\n this.throwIfDisposed();\n return trackerFn().readToGPU(this.dataId, options);\n }\n /**\n * Synchronously downloads the values from the `tf.Tensor`. This blocks the\n * UI thread until the values are ready, which can cause performance issues.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dataSync() {\n this.throwIfDisposed();\n const data = trackerFn().readSync(this.dataId);\n if (this.dtype === 'string') {\n try {\n return data.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /** Returns the underlying bytes of the tensor's data. */\n async bytes() {\n this.throwIfDisposed();\n const data = await trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n return data;\n }\n else {\n return new Uint8Array(data.buffer);\n }\n }\n /**\n * Disposes `tf.Tensor` from memory.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n if (this.kerasMask) {\n this.kerasMask.dispose();\n }\n trackerFn().disposeTensor(this);\n this.isDisposedInternal = true;\n }\n get isDisposed() {\n return this.isDisposedInternal;\n }\n throwIfDisposed() {\n if (this.isDisposed) {\n throw new Error(`Tensor is disposed.`);\n }\n }\n /**\n * Prints the `tf.Tensor`. See `tf.print` for details.\n *\n * @param verbose Whether to print verbose information about the tensor,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n print(verbose = false) {\n return opHandler.print(this, verbose);\n }\n /**\n * Returns a copy of the tensor. See `tf.clone` for details.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n clone() {\n this.throwIfDisposed();\n return opHandler.clone(this);\n }\n /**\n * Returns a human-readable description of the tensor. Useful for logging.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n toString(verbose = false) {\n const vals = this.dataSync();\n return tensorToString(vals, this.shape, this.dtype, verbose);\n }\n cast(dtype) {\n this.throwIfDisposed();\n return opHandler.cast(this, dtype);\n }\n variable(trainable = true, name, dtype) {\n this.throwIfDisposed();\n return trackerFn().makeVariable(this, trainable, name, dtype);\n }\n}\nObject.defineProperty(Tensor, Symbol.hasInstance, {\n value: (instance) => {\n // Implementation note: we should use properties of the object that will be\n // defined before the constructor body has finished executing (methods).\n // This is because when this code is transpiled by babel, babel will call\n // classCallCheck before the constructor body is run.\n // See https://github.com/tensorflow/tfjs/issues/3384 for backstory.\n return !!instance && instance.data != null && instance.dataSync != null &&\n instance.throwIfDisposed != null;\n }\n});\nexport function getGlobalTensorClass() {\n // Use getGlobal so that we can augment the Tensor class across package\n // boundaries becase the node resolution alg may result in different modules\n // being returned for this file depending on the path they are loaded from.\n return getGlobal('Tensor', () => {\n return Tensor;\n });\n}\n// Global side effect. Cache global reference to Tensor class\ngetGlobalTensorClass();\n/**\n * A mutable `tf.Tensor`, useful for persisting state, e.g. for training.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Variable extends Tensor {\n constructor(initialValue, trainable, name, tensorId) {\n super(initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId);\n this.trainable = trainable;\n this.name = name;\n }\n /**\n * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have\n * the same shape and dtype as the old `tf.Tensor`.\n *\n * @param newValue New tensor to be assigned to this variable.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n assign(newValue) {\n if (newValue.dtype !== this.dtype) {\n throw new Error(`dtype of the new value (${newValue.dtype}) and ` +\n `previous value (${this.dtype}) must match`);\n }\n if (!util.arraysEqual(newValue.shape, this.shape)) {\n throw new Error(`shape of the new value (${newValue.shape}) and ` +\n `previous value (${this.shape}) must match`);\n }\n trackerFn().disposeTensor(this);\n this.dataId = newValue.dataId;\n trackerFn().incRef(this, null /* backend */);\n }\n dispose() {\n trackerFn().disposeVariable(this);\n this.isDisposedInternal = true;\n }\n}\nObject.defineProperty(Variable, Symbol.hasInstance, {\n value: (instance) => {\n return instance instanceof Tensor && instance.assign != null &&\n instance.assign instanceof Function;\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy90ZW5zb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgseUVBQXlFO0FBQ3pFLDRDQUE0QztBQUU1QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEtBQUssSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQVdyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFNdkIsWUFBWSxLQUFrQixFQUFTLEtBQVEsRUFBRSxNQUF1QjtRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFHO1FBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBaUIsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksRUFDZixHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEI7Z0JBQ3BELDBCQUEwQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLGlFQUFpRTtnQkFDakUsaUVBQWlFO2dCQUNqRSw4QkFBOEIsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FB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TyxRQUFRLFlBQVksTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSTtZQUN4RCxRQUFRLENBQUMsTUFBTSxZQUFZLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB3ZWJncHUvdHlwZXMvZGlzdFwiIC8+XG5cbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tICcuL2dsb2JhbF91dGlsJztcbmltcG9ydCB7dGVuc29yVG9TdHJpbmd9IGZyb20gJy4vdGVuc29yX2Zvcm1hdCc7XG5pbXBvcnQge0RhdGFJZCwgVGVuc29ySW5mb30gZnJvbSAnLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0FycmF5TWFwLCBCYWNrZW5kVmFsdWVzLCBEYXRhVHlwZSwgRGF0YVR5cGVNYXAsIERhdGFWYWx1ZXMsIE51bWVyaWNEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXAsIFNpbmdsZVZhbHVlTWFwLCBUeXBlZEFycmF5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCB7Y29tcHV0ZVN0cmlkZXMsIHRvTmVzdGVkQXJyYXl9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVuc29yRGF0YTxEIGV4dGVuZHMgRGF0YVR5cGU+IHtcbiAgZGF0YUlkPzogRGF0YUlkO1xuICB2YWx1ZXM/OiBEYXRhVHlwZU1hcFtEXTtcbn1cblxuLy8gVGhpcyBpbnRlcmZhY2UgbWltaWNzIEtlcm5lbEJhY2tlbmQgKGluIGJhY2tlbmQudHMpLCB3aGljaCB3b3VsZCBjcmVhdGUgYVxuLy8gY2lyY3VsYXIgZGVwZW5kZW5jeSBpZiBpbXBvcnRlZC5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2VuZCB7fVxuXG4vKipcbiAqIEEgbXV0YWJsZSBvYmplY3QsIHNpbWlsYXIgdG8gYHRmLlRlbnNvcmAsIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHNldCB2YWx1ZXNcbiAqIGF0IGxvY2F0aW9ucyBiZWZvcmUgY29udmVydGluZyB0byBhbiBpbW11dGFibGUgYHRmLlRlbnNvcmAuXG4gKlxuICogU2VlIGB0Zi5idWZmZXJgIGZvciBjcmVhdGluZyBhIHRlbnNvciBidWZmZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBUZW5zb3JCdWZmZXI8UiBleHRlbmRzIFJhbmssIEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdmbG9hdDMyJz4ge1xuICBzaXplOiBudW1iZXI7XG4gIHNoYXBlOiBTaGFwZU1hcFtSXTtcbiAgc3RyaWRlczogbnVtYmVyW107XG4gIHZhbHVlczogRGF0YVR5cGVNYXBbRF07XG5cbiAgY29uc3RydWN0b3Ioc2hhcGU6IFNoYXBlTWFwW1JdLCBwdWJsaWMgZHR5cGU6IEQsIHZhbHVlcz86IERhdGFUeXBlTWFwW0RdKSB7XG4gICAgdGhpcy5zaGFwZSA9IHNoYXBlLnNsaWNlKCkgYXMgU2hhcGVNYXBbUl07XG4gICAgdGhpcy5zaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcblxuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBuID09PSB0aGlzLnNpemUsXG4gICAgICAgICAgKCkgPT4gYExlbmd0aCBvZiB2YWx1ZXMgJyR7bn0nIGRvZXMgbm90IG1hdGNoIHRoZSBzaXplIGAgK1xuICAgICAgICAgICAgICBgaW5mZXJyZWQgYnkgdGhlIHNoYXBlICcke3RoaXMuc2l6ZX0nLmApO1xuICAgIH1cbiAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbXBsZXg2NCBkdHlwZSBUZW5zb3JCdWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgY3JlYXRlIGAgK1xuICAgICAgICAgIGBhIFRlbnNvckJ1ZmZlciBmb3IgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBzZXBhcmF0ZWx5IGFuZCBgICtcbiAgICAgICAgICBgY2FsbCB0Zi5jb21wbGV4KHJlYWwsIGltYWcpLmApO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcyB8fCB1dGlsLmdldEFycmF5RnJvbURUeXBlKGR0eXBlLCB0aGlzLnNpemUpO1xuICAgIHRoaXMuc3RyaWRlcyA9IGNvbXB1dGVTdHJpZGVzKHNoYXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdmFsdWUgaW4gdGhlIGJ1ZmZlciBhdCBhIGdpdmVuIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICogQHBhcmFtIGxvY3MgIFRoZSBsb2NhdGlvbiBpbmRpY2VzLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gICAqL1xuICBzZXQodmFsdWU6IFNpbmdsZVZhbHVlTWFwW0RdLCAuLi5sb2NzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGlmIChsb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9jcyA9IFswXTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGxvY3MubGVuZ3RoID09PSB0aGlzLnJhbmssXG4gICAgICAgICgpID0+IGBUaGUgbnVtYmVyIG9mIHByb3ZpZGVkIGNvb3JkaW5hdGVzICgke2xvY3MubGVuZ3RofSkgbXVzdCBgICtcbiAgICAgICAgICAgIGBtYXRjaCB0aGUgcmFuayAoJHt0aGlzLnJhbmt9KWApO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmxvY1RvSW5kZXgobG9jcyk7XG4gICAgdGhpcy52YWx1ZXNbaW5kZXhdID0gdmFsdWUgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBidWZmZXIgYXQgdGhlIHByb3ZpZGVkIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbG9jcyBUaGUgbG9jYXRpb24gaW5kaWNlcy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICAgKi9cbiAgZ2V0KC4uLmxvY3M6IG51bWJlcltdKTogU2luZ2xlVmFsdWVNYXBbRF0ge1xuICAgIGlmIChsb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9jcyA9IFswXTtcbiAgICB9XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgbG9jIG9mIGxvY3MpIHtcbiAgICAgIGlmIChsb2MgPCAwIHx8IGxvYyA+PSB0aGlzLnNoYXBlW2ldKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGBSZXF1ZXN0ZWQgb3V0IG9mIHJhbmdlIGVsZW1lbnQgYXQgJHtsb2NzfS4gYCArXG4gICAgICAgICAgICBgICBCdWZmZXIgc2hhcGU9JHt0aGlzLnNoYXBlfWA7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSBsb2NzW2xvY3MubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgaW5kZXggKz0gdGhpcy5zdHJpZGVzW2ldICogbG9jc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZGV4XSBhcyBTaW5nbGVWYWx1ZU1hcFtEXTtcbiAgfVxuXG4gIGxvY1RvSW5kZXgobG9jczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnJhbmsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yYW5rID09PSAxKSB7XG4gICAgICByZXR1cm4gbG9jc1swXTtcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gbG9jc1tsb2NzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgIGluZGV4ICs9IHRoaXMuc3RyaWRlc1tpXSAqIGxvY3NbaV07XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4VG9Mb2MoaW5kZXg6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBpZiAodGhpcy5yYW5rID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIGlmICh0aGlzLnJhbmsgPT09IDEpIHtcbiAgICAgIHJldHVybiBbaW5kZXhdO1xuICAgIH1cbiAgICBjb25zdCBsb2NzOiBudW1iZXJbXSA9IG5ldyBBcnJheSh0aGlzLnNoYXBlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgbG9jc1tpXSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnN0cmlkZXNbaV0pO1xuICAgICAgaW5kZXggLT0gbG9jc1tpXSAqIHRoaXMuc3RyaWRlc1tpXTtcbiAgICB9XG4gICAgbG9jc1tsb2NzLmxlbmd0aCAtIDFdID0gaW5kZXg7XG4gICAgcmV0dXJuIGxvY3M7XG4gIH1cblxuICBnZXQgcmFuaygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbW11dGFibGUgYHRmLlRlbnNvcmAgb2JqZWN0IGZyb20gdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICAgKi9cbiAgdG9UZW5zb3IoKTogVGVuc29yPFI+IHtcbiAgICByZXR1cm4gdHJhY2tlckZuKCkubWFrZVRlbnNvcih0aGlzLnZhbHVlcywgdGhpcy5zaGFwZSwgdGhpcy5kdHlwZSkgYXNcbiAgICAgICAgVGVuc29yPFI+O1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVRvR1BVV2ViR0xPcHRpb24ge1xuICBjdXN0b21UZXhTaGFwZT86IFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCB0eXBlIERhdGFUb0dQVU9wdGlvbnMgPSBEYXRhVG9HUFVXZWJHTE9wdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBHUFVEYXRhIHtcbiAgdGVuc29yUmVmOiBUZW5zb3I7XG4gIHRleHR1cmU/OiBXZWJHTFRleHR1cmU7XG4gIGJ1ZmZlcj86IEdQVUJ1ZmZlcjtcbiAgdGV4U2hhcGU/OiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvclRyYWNrZXIge1xuICBtYWtlVGVuc29yKFxuICAgICAgdmFsdWVzOiBEYXRhVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICAgIGJhY2tlbmQ/OiBCYWNrZW5kKTogVGVuc29yO1xuICBtYWtlVmFyaWFibGUoXG4gICAgICBpbml0aWFsVmFsdWU6IFRlbnNvciwgdHJhaW5hYmxlPzogYm9vbGVhbiwgbmFtZT86IHN0cmluZyxcbiAgICAgIGR0eXBlPzogRGF0YVR5cGUpOiBWYXJpYWJsZTtcbiAgaW5jUmVmKGE6IFRlbnNvciwgYmFja2VuZDogQmFja2VuZCk6IHZvaWQ7XG4gIGRpc3Bvc2VUZW5zb3IodDogVGVuc29yKTogdm9pZDtcbiAgZGlzcG9zZVZhcmlhYmxlKHY6IFZhcmlhYmxlKTogdm9pZDtcbiAgcmVhZChkYXRhSWQ6IERhdGFJZCk6IFByb21pc2U8QmFja2VuZFZhbHVlcz47XG4gIHJlYWRTeW5jKGRhdGFJZDogRGF0YUlkKTogQmFja2VuZFZhbHVlcztcbiAgcmVhZFRvR1BVKGRhdGFJZDogRGF0YUlkLCBvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGE7XG59XG5cbi8qKlxuICogVGhlIFRlbnNvciBjbGFzcyBjYWxscyBpbnRvIHRoaXMgaGFuZGxlciB0byBkZWxlZ2F0ZSBjaGFpbmluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wSGFuZGxlciB7XG4gIGNhc3Q8VCBleHRlbmRzIFRlbnNvcj4oeDogVCwgZHR5cGU6IERhdGFUeXBlKTogVDtcbiAgYnVmZmVyPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgRGF0YVR5cGU+KFxuICAgICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRCxcbiAgICAgIHZhbHVlcz86IERhdGFUeXBlTWFwW0RdKTogVGVuc29yQnVmZmVyPFIsIEQ+O1xuICBwcmludDxUIGV4dGVuZHMgVGVuc29yPih4OiBULCB2ZXJib3NlOiBib29sZWFuKTogdm9pZDtcbiAgY2xvbmU8VCBleHRlbmRzIFRlbnNvcj4oeDogVCk6IFQ7XG4gIC8vIFRPRE8oeWFzc29nYmEpIGJyaW5nIHJlc2hhcGUgYmFjaz9cbn1cblxuLy8gRm9yIHRyYWNraW5nIHRlbnNvciBjcmVhdGlvbiBhbmQgZGlzcG9zYWwuXG5sZXQgdHJhY2tlckZuOiAoKSA9PiBUZW5zb3JUcmFja2VyID0gbnVsbDtcbi8vIFVzZWQgYnkgY2hhaW5pbmcgbWV0aG9kcyB0byBjYWxsIGludG8gb3BzLlxubGV0IG9wSGFuZGxlcjogT3BIYW5kbGVyID0gbnVsbDtcbi8vIFVzZWQgdG8gd2FybiBhYm91dCBkZXByZWNhdGVkIG1ldGhvZHMuXG5sZXQgZGVwcmVjYXRpb25XYXJuaW5nRm46IChtc2c6IHN0cmluZykgPT4gdm9pZCA9IG51bGw7XG4vLyBUaGlzIGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMgbWV0aG9kIG9uIGRldiBicmFuY2hlcyBhbmQga2VlcCB0aGVcbi8vIGZ1bmN0aW9uYWxpdHkgYXQgbWFzdGVyLlxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVudXNlZC1leHByZXNzaW9uXG5bZGVwcmVjYXRpb25XYXJuaW5nRm5dO1xuXG4vKipcbiAqIEFuIGV4dGVybmFsIGNvbnN1bWVyIGNhbiByZWdpc3RlciBpdHNlbGYgYXMgdGhlIHRlbnNvciB0cmFja2VyLiBUaGlzIHdheVxuICogdGhlIFRlbnNvciBjbGFzcyBjYW4gbm90aWZ5IHRoZSB0cmFja2VyIGZvciBldmVyeSB0ZW5zb3IgY3JlYXRlZCBhbmRcbiAqIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVuc29yVHJhY2tlcihmbjogKCkgPT4gVGVuc29yVHJhY2tlcikge1xuICB0cmFja2VyRm4gPSBmbjtcbn1cblxuLyoqXG4gKiBBbiBleHRlcm5hbCBjb25zdW1lciBjYW4gcmVnaXN0ZXIgaXRzZWxmIGFzIHRoZSBvcCBoYW5kbGVyLiBUaGlzIHdheSB0aGVcbiAqIFRlbnNvciBjbGFzcyBjYW4gaGF2ZSBjaGFpbmluZyBtZXRob2RzIHRoYXQgY2FsbCBpbnRvIG9wcyB2aWEgdGhlIG9wXG4gKiBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0T3BIYW5kbGVyKGhhbmRsZXI6IE9wSGFuZGxlcikge1xuICBvcEhhbmRsZXIgPSBoYW5kbGVyO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgZnVuY3Rpb24gdG8gYmUgdXNlZCBieSB0aGlzIGZpbGUuIFRoaXMgd2F5IHRoZVxuICogVGVuc29yIGNsYXNzIGNhbiBiZSBhIGxlYWYgYnV0IHN0aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZXByZWNhdGlvbldhcm5pbmdGbihmbjogKG1zZzogc3RyaW5nKSA9PiB2b2lkKSB7XG4gIGRlcHJlY2F0aW9uV2FybmluZ0ZuID0gZm47XG59XG5cbi8vIERlY2xhcmUgdGhpcyBuYW1lc3BhY2UgdG8gbWFrZSBUZW5zb3IgY2xhc3MgYXVnbWVudGF0aW9uIHdvcmsgaW4gZ29vZ2xlMy5cbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBUZW5zb3Ige31cbi8qKlxuICogQSBgdGYuVGVuc29yYCBvYmplY3QgcmVwcmVzZW50cyBhbiBpbW11dGFibGUsIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2ZcbiAqIG51bWJlcnMgdGhhdCBoYXMgYSBzaGFwZSBhbmQgYSBkYXRhIHR5cGUuXG4gKlxuICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0ZW5zb3JzIGRvIG5vdCBuZWNlc3NhcmlseVxuICogcGVyZm9ybSBhIGNvcHkgb2YgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZW0gKGUuZy4gaWYgdGhlIGRhdGEgaXMgcGFzc2VkIGFzIGFcbiAqIGBGbG9hdDMyQXJyYXlgKSwgYW5kIGNoYW5nZXMgdG8gdGhlIGRhdGEgd2lsbCBjaGFuZ2UgdGhlIHRlbnNvci4gVGhpcyBpcyBub3RcbiAqIGEgZmVhdHVyZSBhbmQgaXMgbm90IHN1cHBvcnRlZC4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciwgdXNlIHRoZSB0ZW5zb3IgYmVmb3JlXG4gKiBjaGFuZ2luZyB0aGUgaW5wdXQgZGF0YSBvciBjcmVhdGUgYSBjb3B5IHdpdGggYGNvcHkgPSB0Zi5hZGQoeW91clRlbnNvciwgMClgLlxuICpcbiAqIFNlZSBgdGYudGVuc29yYCBmb3IgZGV0YWlscyBvbiBob3cgdG8gY3JlYXRlIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBUZW5zb3I8UiBleHRlbmRzIFJhbmsgPSBSYW5rPiBpbXBsZW1lbnRzIFRlbnNvckluZm8ge1xuICAvKiogVW5pcXVlIGlkIG9mIHRoaXMgdGVuc29yLiAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuICAvKipcbiAgICogSWQgb2YgdGhlIGJ1Y2tldCBob2xkaW5nIHRoZSBkYXRhIGZvciB0aGlzIHRlbnNvci4gTXVsdGlwbGUgYXJyYXlzIGNhblxuICAgKiBwb2ludCB0byB0aGUgc2FtZSBidWNrZXQgKGUuZy4gd2hlbiBjYWxsaW5nIGFycmF5LnJlc2hhcGUoKSkuXG4gICAqL1xuICBkYXRhSWQ6IERhdGFJZDtcbiAgLyoqIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiAqL1xuICByZWFkb25seSBzaGFwZTogU2hhcGVNYXBbUl07XG4gIC8qKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRlbnNvci4gKi9cbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuICAvKiogVGhlIGRhdGEgdHlwZSBmb3IgdGhlIGFycmF5LiAqL1xuICByZWFkb25seSBkdHlwZTogRGF0YVR5cGU7XG4gIC8qKiBUaGUgcmFuayB0eXBlIGZvciB0aGUgYXJyYXkgKHNlZSBgUmFua2AgZW51bSkuICovXG4gIHJlYWRvbmx5IHJhbmtUeXBlOiBSO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgdGVuc29yIGhhcyBiZWVuIGdsb2JhbGx5IGtlcHQuICovXG4gIGtlcHQgPSBmYWxzZTtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2NvcGUgdGhpcyB0ZW5zb3IgaXMgYmVpbmcgdHJhY2tlZCBpbi4gKi9cbiAgc2NvcGVJZDogbnVtYmVyO1xuICAvKiogVGhlIGtlcmFzIG1hc2sgdGhhdCBzb21lIGtlcmFzIGxheWVycyBhdHRhY2ggdG8gdGhlIHRlbnNvciAqL1xuICBrZXJhc01hc2s/OiBUZW5zb3I7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGluIGVhY2ggZGltZW5zaW9uIHdoZW4gaW5kZXhpbmcuIFNlZVxuICAgKiBodHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9udW1weS9yZWZlcmVuY2UvZ2VuZXJhdGVkL1xcXG4gICAqIG51bXB5Lm5kYXJyYXkuc3RyaWRlcy5odG1sXG4gICAqL1xuICByZWFkb25seSBzdHJpZGVzOiBudW1iZXJbXTtcblxuICBjb25zdHJ1Y3RvcihzaGFwZTogU2hhcGVNYXBbUl0sIGR0eXBlOiBEYXRhVHlwZSwgZGF0YUlkOiBEYXRhSWQsIGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLnNoYXBlID0gc2hhcGUuc2xpY2UoKSBhcyBTaGFwZU1hcFtSXTtcbiAgICB0aGlzLmR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInO1xuICAgIHRoaXMuc2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSk7XG4gICAgdGhpcy5zdHJpZGVzID0gY29tcHV0ZVN0cmlkZXMoc2hhcGUpO1xuICAgIHRoaXMuZGF0YUlkID0gZGF0YUlkO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnJhbmtUeXBlID0gKHRoaXMucmFuayA8IDUgPyB0aGlzLnJhbmsudG9TdHJpbmcoKSA6ICdoaWdoZXInKSBhcyBSO1xuICB9XG5cbiAgZ2V0IHJhbmsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zaGFwZS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHByb21pc2Ugb2YgYHRmLlRlbnNvckJ1ZmZlcmAgdGhhdCBob2xkcyB0aGUgdW5kZXJseWluZyBkYXRhLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGFzeW5jIGJ1ZmZlcjxEIGV4dGVuZHMgRGF0YVR5cGUgPSAnZmxvYXQzMic+KCk6IFByb21pc2U8VGVuc29yQnVmZmVyPFIsIEQ+PiB7XG4gICAgY29uc3QgdmFscyA9IGF3YWl0IHRoaXMuZGF0YTxEPigpO1xuICAgIHJldHVybiBvcEhhbmRsZXIuYnVmZmVyKHRoaXMuc2hhcGUsIHRoaXMuZHR5cGUgYXMgRCwgdmFscyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGB0Zi5UZW5zb3JCdWZmZXJgIHRoYXQgaG9sZHMgdGhlIHVuZGVybHlpbmcgZGF0YS5cbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBidWZmZXJTeW5jPEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdmbG9hdDMyJz4oKTogVGVuc29yQnVmZmVyPFIsIEQ+IHtcbiAgICByZXR1cm4gb3BIYW5kbGVyLmJ1ZmZlcih0aGlzLnNoYXBlLCB0aGlzLmR0eXBlIGFzIEQsIHRoaXMuZGF0YVN5bmMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGVuc29yIGRhdGEgYXMgYSBuZXN0ZWQgYXJyYXkuIFRoZSB0cmFuc2ZlciBvZiBkYXRhIGlzIGRvbmVcbiAgICogYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgYXN5bmMgYXJyYXkoKTogUHJvbWlzZTxBcnJheU1hcFtSXT4ge1xuICAgIGNvbnN0IHZhbHMgPSBhd2FpdCB0aGlzLmRhdGEoKTtcbiAgICByZXR1cm4gdG9OZXN0ZWRBcnJheSh0aGlzLnNoYXBlLCB2YWxzLCB0aGlzLmR0eXBlID09PSAnY29tcGxleDY0JykgYXNcbiAgICAgICAgQXJyYXlNYXBbUl07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGVuc29yIGRhdGEgYXMgYSBuZXN0ZWQgYXJyYXkuIFRoZSB0cmFuc2ZlciBvZiBkYXRhIGlzIGRvbmVcbiAgICogc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhcnJheVN5bmMoKTogQXJyYXlNYXBbUl0ge1xuICAgIHJldHVybiB0b05lc3RlZEFycmF5KFxuICAgICAgICAgICAgICAgdGhpcy5zaGFwZSwgdGhpcy5kYXRhU3luYygpLCB0aGlzLmR0eXBlID09PSAnY29tcGxleDY0JykgYXNcbiAgICAgICAgQXJyYXlNYXBbUl07XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgZG93bmxvYWRzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgYHRmLlRlbnNvcmAuIFJldHVybnMgYVxuICAgKiBwcm9taXNlIG9mIGBUeXBlZEFycmF5YCB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXB1dGF0aW9uIGhhcyBmaW5pc2hlZC5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3luYyBkYXRhPEQgZXh0ZW5kcyBEYXRhVHlwZSA9IE51bWVyaWNEYXRhVHlwZT4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT4ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgZGF0YSA9IHRyYWNrZXJGbigpLnJlYWQodGhpcy5kYXRhSWQpO1xuICAgIGlmICh0aGlzLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBkYXRhIGFzIFVpbnQ4QXJyYXlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBieXRlcy5tYXAoYiA9PiB1dGlsLmRlY29kZVN0cmluZyhiKSkgYXMgRGF0YVR5cGVNYXBbRF07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGhlIHN0cmluZyBieXRlcyBpbnRvIHV0Zi04LiAnICtcbiAgICAgICAgICAgICdUbyBnZXQgdGhlIG9yaWdpbmFsIGJ5dGVzLCBjYWxsIHRlbnNvci5ieXRlcygpLicpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YSBhcyBQcm9taXNlPERhdGFUeXBlTWFwW0RdPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSB0ZW5zb3IncyBkYXRhIHRvIGEgbmV3IEdQVSByZXNvdXJjZS4gQ29tcGFyaW5nIHRvIHRoZSBgZGF0YVN5bmMoKWBcbiAgICogYW5kIGBkYXRhKClgLCB0aGlzIG1ldGhvZCBwcmV2ZW50cyBkYXRhIGZyb20gYmVpbmcgZG93bmxvYWRlZCB0byBDUFUuXG4gICAqXG4gICAqIEZvciBXZWJHTCBiYWNrZW5kLCB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBvbiBhIGRlbnNlbHkgcGFja2VkIHRleHR1cmUuXG4gICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGV4dHVyZSB3aWxsIHVzZSB0aGUgUkdCQSBjaGFubmVscyB0byBzdG9yZSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIFdlYkdQVSBiYWNrZW5kLCB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBvbiBhIGJ1ZmZlci4gVGhlcmUgaXMgbm9cbiAgICogcGFyYW1ldGVyLCBzbyBjYW4gbm90IHVzZSBhIHVzZXItZGVmaW5lZCBzaXplIHRvIGNyZWF0ZSB0aGUgYnVmZmVyLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uczpcbiAgICogICAgIEZvciBXZWJHTCxcbiAgICogICAgICAgICAtIGN1c3RvbVRleFNoYXBlOiBPcHRpb25hbC4gSWYgc2V0LCB3aWxsIHVzZSB0aGUgdXNlciBkZWZpbmVkXG4gICAqICAgICB0ZXh0dXJlIHNoYXBlIHRvIGNyZWF0ZSB0aGUgdGV4dHVyZS5cbiAgICpcbiAgICogQHJldHVybnMgRm9yIFdlYkdMIGJhY2tlbmQsIGEgR1BVRGF0YSBjb250YWlucyB0aGUgbmV3IHRleHR1cmUgYW5kXG4gICAqICAgICBpdHMgaW5mb3JtYXRpb24uXG4gICAqICAgICB7XG4gICAqICAgICAgICB0ZW5zb3JSZWY6IFRoZSB0ZW5zb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0ZXh0dXJlLFxuICAgKiAgICAgICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlLFxuICAgKiAgICAgICAgdGV4U2hhcGU6IFtudW1iZXIsIG51bWJlcl0gLy8gW2hlaWdodCwgd2lkdGhdXG4gICAqICAgICB9XG4gICAqXG4gICAqICAgICBGb3IgV2ViR1BVIGJhY2tlbmQsIGEgR1BVRGF0YSBjb250YWlucyB0aGUgbmV3IGJ1ZmZlci5cbiAgICogICAgIHtcbiAgICogICAgICAgIHRlbnNvclJlZjogVGhlIHRlbnNvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlcixcbiAgICogICAgICAgIGJ1ZmZlcjogR1BVQnVmZmVyLFxuICAgKiAgICAgfVxuICAgKlxuICAgKiAgICAgUmVtZW1iZXIgdG8gZGlzcG9zZSB0aGUgR1BVRGF0YSBhZnRlciBpdCBpcyB1c2VkIGJ5XG4gICAqICAgICBgcmVzLnRlbnNvclJlZi5kaXNwb3NlKClgLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGRhdGFUb0dQVShvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGEge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgcmV0dXJuIHRyYWNrZXJGbigpLnJlYWRUb0dQVSh0aGlzLmRhdGFJZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXNseSBkb3dubG9hZHMgdGhlIHZhbHVlcyBmcm9tIHRoZSBgdGYuVGVuc29yYC4gVGhpcyBibG9ja3MgdGhlXG4gICAqIFVJIHRocmVhZCB1bnRpbCB0aGUgdmFsdWVzIGFyZSByZWFkeSwgd2hpY2ggY2FuIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBkYXRhU3luYzxEIGV4dGVuZHMgRGF0YVR5cGUgPSBOdW1lcmljRGF0YVR5cGU+KCk6IERhdGFUeXBlTWFwW0RdIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIGNvbnN0IGRhdGEgPSB0cmFja2VyRm4oKS5yZWFkU3luYyh0aGlzLmRhdGFJZCk7XG4gICAgaWYgKHRoaXMuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKGRhdGEgYXMgVWludDhBcnJheVtdKS5tYXAoYiA9PiB1dGlsLmRlY29kZVN0cmluZyhiKSkgYXNcbiAgICAgICAgICAgIERhdGFUeXBlTWFwW0RdO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gZGVjb2RlIHRoZSBzdHJpbmcgYnl0ZXMgaW50byB1dGYtOC4gJyArXG4gICAgICAgICAgICAnVG8gZ2V0IHRoZSBvcmlnaW5hbCBieXRlcywgY2FsbCB0ZW5zb3IuYnl0ZXMoKS4nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGEgYXMgRGF0YVR5cGVNYXBbRF07XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgdW5kZXJseWluZyBieXRlcyBvZiB0aGUgdGVuc29yJ3MgZGF0YS4gKi9cbiAgYXN5bmMgYnl0ZXMoKTogUHJvbWlzZTxVaW50OEFycmF5W118VWludDhBcnJheT4ge1xuICAgIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRyYWNrZXJGbigpLnJlYWQodGhpcy5kYXRhSWQpO1xuICAgIGlmICh0aGlzLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGEgYXMgVWludDhBcnJheVtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoKGRhdGEgYXMgVHlwZWRBcnJheSkuYnVmZmVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYHRmLlRlbnNvcmAgZnJvbSBtZW1vcnkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmtlcmFzTWFzaykge1xuICAgICAgdGhpcy5rZXJhc01hc2suZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0cmFja2VyRm4oKS5kaXNwb3NlVGVuc29yKHRoaXMpO1xuICAgIHRoaXMuaXNEaXNwb3NlZEludGVybmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0Rpc3Bvc2VkSW50ZXJuYWwgPSBmYWxzZTtcbiAgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNwb3NlZEludGVybmFsO1xuICB9XG5cbiAgdGhyb3dJZkRpc3Bvc2VkKCkge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGlzIGRpc3Bvc2VkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludHMgdGhlIGB0Zi5UZW5zb3JgLiBTZWUgYHRmLnByaW50YCBmb3IgZGV0YWlscy5cbiAgICpcbiAgICogQHBhcmFtIHZlcmJvc2UgV2hldGhlciB0byBwcmludCB2ZXJib3NlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW5zb3IsXG4gICAqICAgIGluY2x1ZGluZyBkdHlwZSBhbmQgc2l6ZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBwcmludCh2ZXJib3NlID0gZmFsc2UpOiB2b2lkIHtcbiAgICByZXR1cm4gb3BIYW5kbGVyLnByaW50KHRoaXMsIHZlcmJvc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSB0ZW5zb3IuIFNlZSBgdGYuY2xvbmVgIGZvciBkZXRhaWxzLlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAgICovXG4gIGNsb25lPFQgZXh0ZW5kcyBUZW5zb3I+KHRoaXM6IFQpOiBUIHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiBvcEhhbmRsZXIuY2xvbmUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZW5zb3IuIFVzZWZ1bCBmb3IgbG9nZ2luZy5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICB0b1N0cmluZyh2ZXJib3NlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHMgPSB0aGlzLmRhdGFTeW5jKCk7XG4gICAgcmV0dXJuIHRlbnNvclRvU3RyaW5nKHZhbHMsIHRoaXMuc2hhcGUsIHRoaXMuZHR5cGUsIHZlcmJvc2UpO1xuICB9XG5cbiAgY2FzdDxUIGV4dGVuZHMgdGhpcz4oZHR5cGU6IERhdGFUeXBlKTogVCB7XG4gICAgdGhpcy50aHJvd0lmRGlzcG9zZWQoKTtcbiAgICByZXR1cm4gb3BIYW5kbGVyLmNhc3QodGhpcyBhcyBULCBkdHlwZSk7XG4gIH1cbiAgdmFyaWFibGUodHJhaW5hYmxlID0gdHJ1ZSwgbmFtZT86IHN0cmluZywgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlPFI+IHtcbiAgICB0aGlzLnRocm93SWZEaXNwb3NlZCgpO1xuICAgIHJldHVybiB0cmFja2VyRm4oKS5tYWtlVmFyaWFibGUodGhpcywgdHJhaW5hYmxlLCBuYW1lLCBkdHlwZSkgYXNcbiAgICAgICAgVmFyaWFibGU8Uj47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRlbnNvciwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gIHZhbHVlOiAoaW5zdGFuY2U6IFRlbnNvcikgPT4ge1xuICAgIC8vIEltcGxlbWVudGF0aW9uIG5vdGU6IHdlIHNob3VsZCB1c2UgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZVxuICAgIC8vIGRlZmluZWQgYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciBib2R5IGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKG1ldGhvZHMpLlxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHRoaXMgY29kZSBpcyB0cmFuc3BpbGVkIGJ5IGJhYmVsLCBiYWJlbCB3aWxsIGNhbGxcbiAgICAvLyBjbGFzc0NhbGxDaGVjayBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIGJvZHkgaXMgcnVuLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy8zMzg0IGZvciBiYWNrc3RvcnkuXG4gICAgcmV0dXJuICEhaW5zdGFuY2UgJiYgaW5zdGFuY2UuZGF0YSAhPSBudWxsICYmIGluc3RhbmNlLmRhdGFTeW5jICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UudGhyb3dJZkRpc3Bvc2VkICE9IG51bGw7XG4gIH1cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsVGVuc29yQ2xhc3MoKSB7XG4gIC8vIFVzZSBnZXRHbG9iYWwgc28gdGhhdCB3ZSBjYW4gYXVnbWVudCB0aGUgVGVuc29yIGNsYXNzIGFjcm9zcyBwYWNrYWdlXG4gIC8vIGJvdW5kYXJpZXMgYmVjYXNlIHRoZSBub2RlIHJlc29sdXRpb24gYWxnIG1heSByZXN1bHQgaW4gZGlmZmVyZW50IG1vZHVsZXNcbiAgLy8gYmVpbmcgcmV0dXJuZWQgZm9yIHRoaXMgZmlsZSBkZXBlbmRpbmcgb24gdGhlIHBhdGggdGhleSBhcmUgbG9hZGVkIGZyb20uXG4gIHJldHVybiBnZXRHbG9iYWwoJ1RlbnNvcicsICgpID0+IHtcbiAgICByZXR1cm4gVGVuc29yO1xuICB9KTtcbn1cblxuLy8gR2xvYmFsIHNpZGUgZWZmZWN0LiBDYWNoZSBnbG9iYWwgcmVmZXJlbmNlIHRvIFRlbnNvciBjbGFzc1xuZ2V0R2xvYmFsVGVuc29yQ2xhc3MoKTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1lcmljVGVuc29yPFIgZXh0ZW5kcyBSYW5rID0gUmFuaz4gZXh0ZW5kcyBUZW5zb3I8Uj4ge1xuICBkdHlwZTogTnVtZXJpY0RhdGFUeXBlO1xuICBkYXRhU3luYzxEIGV4dGVuZHMgRGF0YVR5cGUgPSBOdW1lcmljRGF0YVR5cGU+KCk6IERhdGFUeXBlTWFwW0RdO1xuICBkYXRhPEQgZXh0ZW5kcyBEYXRhVHlwZSA9IE51bWVyaWNEYXRhVHlwZT4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT47XG4gIGRhdGFUb0dQVShvcHRpb25zPzogRGF0YVRvR1BVT3B0aW9ucyk6IEdQVURhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nVGVuc29yPFIgZXh0ZW5kcyBSYW5rID0gUmFuaz4gZXh0ZW5kcyBUZW5zb3I8Uj4ge1xuICBkdHlwZTogJ3N0cmluZyc7XG4gIGRhdGFTeW5jPEQgZXh0ZW5kcyBEYXRhVHlwZSA9ICdzdHJpbmcnPigpOiBEYXRhVHlwZU1hcFtEXTtcbiAgZGF0YTxEIGV4dGVuZHMgRGF0YVR5cGUgPSAnc3RyaW5nJz4oKTogUHJvbWlzZTxEYXRhVHlwZU1hcFtEXT47XG59XG5cbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFNjYWxhciA9IFRlbnNvcjxSYW5rLlIwPjtcbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFRlbnNvcjFEID0gVGVuc29yPFJhbmsuUjE+O1xuLyoqIEBkb2NsaW5rIFRlbnNvciAqL1xuZXhwb3J0IHR5cGUgVGVuc29yMkQgPSBUZW5zb3I8UmFuay5SMj47XG4vKiogQGRvY2xpbmsgVGVuc29yICovXG5leHBvcnQgdHlwZSBUZW5zb3IzRCA9IFRlbnNvcjxSYW5rLlIzPjtcbi8qKiBAZG9jbGluayBUZW5zb3IgKi9cbmV4cG9ydCB0eXBlIFRlbnNvcjREID0gVGVuc29yPFJhbmsuUjQ+O1xuLyoqIEBkb2NsaW5rIFRlbnNvciAqL1xuZXhwb3J0IHR5cGUgVGVuc29yNUQgPSBUZW5zb3I8UmFuay5SNT47XG4vKiogQGRvY2xpbmsgVGVuc29yICovXG5leHBvcnQgdHlwZSBUZW5zb3I2RCA9IFRlbnNvcjxSYW5rLlI2PjtcblxuLyoqXG4gKiBBIG11dGFibGUgYHRmLlRlbnNvcmAsIHVzZWZ1bCBmb3IgcGVyc2lzdGluZyBzdGF0ZSwgZS5nLiBmb3IgdHJhaW5pbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gKi9cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZTxSIGV4dGVuZHMgUmFuayA9IFJhbms+IGV4dGVuZHMgVGVuc29yPFI+IHtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgaW5pdGlhbFZhbHVlOiBUZW5zb3I8Uj4sIHB1YmxpYyB0cmFpbmFibGU6IGJvb2xlYW4sIG5hbWU6IHN0cmluZyxcbiAgICAgIHRlbnNvcklkOiBudW1iZXIpIHtcbiAgICBzdXBlcihcbiAgICAgICAgaW5pdGlhbFZhbHVlLnNoYXBlLCBpbml0aWFsVmFsdWUuZHR5cGUsIGluaXRpYWxWYWx1ZS5kYXRhSWQsIHRlbnNvcklkKTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIG5ldyBgdGYuVGVuc29yYCB0byB0aGlzIHZhcmlhYmxlLiBUaGUgbmV3IGB0Zi5UZW5zb3JgIG11c3QgaGF2ZVxuICAgKiB0aGUgc2FtZSBzaGFwZSBhbmQgZHR5cGUgYXMgdGhlIG9sZCBgdGYuVGVuc29yYC5cbiAgICpcbiAgICogQHBhcmFtIG5ld1ZhbHVlIE5ldyB0ZW5zb3IgdG8gYmUgYXNzaWduZWQgdG8gdGhpcyB2YXJpYWJsZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBhc3NpZ24obmV3VmFsdWU6IFRlbnNvcjxSPik6IHZvaWQge1xuICAgIGlmIChuZXdWYWx1ZS5kdHlwZSAhPT0gdGhpcy5kdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkdHlwZSBvZiB0aGUgbmV3IHZhbHVlICgke25ld1ZhbHVlLmR0eXBlfSkgYW5kIGAgK1xuICAgICAgICAgIGBwcmV2aW91cyB2YWx1ZSAoJHt0aGlzLmR0eXBlfSkgbXVzdCBtYXRjaGApO1xuICAgIH1cbiAgICBpZiAoIXV0aWwuYXJyYXlzRXF1YWwobmV3VmFsdWUuc2hhcGUsIHRoaXMuc2hhcGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHNoYXBlIG9mIHRoZSBuZXcgdmFsdWUgKCR7bmV3VmFsdWUuc2hhcGV9KSBhbmQgYCArXG4gICAgICAgICAgYHByZXZpb3VzIHZhbHVlICgke3RoaXMuc2hhcGV9KSBtdXN0IG1hdGNoYCk7XG4gICAgfVxuICAgIHRyYWNrZXJGbigpLmRpc3Bvc2VUZW5zb3IodGhpcyk7XG4gICAgdGhpcy5kYXRhSWQgPSBuZXdWYWx1ZS5kYXRhSWQ7XG4gICAgdHJhY2tlckZuKCkuaW5jUmVmKHRoaXMsIG51bGwgLyogYmFja2VuZCAqLyk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRyYWNrZXJGbigpLmRpc3Bvc2VWYXJpYWJsZSh0aGlzKTtcbiAgICB0aGlzLmlzRGlzcG9zZWRJbnRlcm5hbCA9IHRydWU7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZhcmlhYmxlLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgdmFsdWU6IChpbnN0YW5jZTogVmFyaWFibGUpID0+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UgaW5zdGFuY2VvZiBUZW5zb3IgJiYgaW5zdGFuY2UuYXNzaWduICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuYXNzaWduIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH1cbn0pO1xuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var Rank;\n(function (Rank) {\n Rank[\"R0\"] = \"R0\";\n Rank[\"R1\"] = \"R1\";\n Rank[\"R2\"] = \"R2\";\n Rank[\"R3\"] = \"R3\";\n Rank[\"R4\"] = \"R4\";\n Rank[\"R5\"] = \"R5\";\n Rank[\"R6\"] = \"R6\";\n})(Rank || (Rank = {}));\n// Looks for upcasting types. Used, for example, in operations with mixed dtype\n// inputs.\nvar UpcastInt32AndMap;\n(function (UpcastInt32AndMap) {\n UpcastInt32AndMap[\"float32\"] = \"float32\";\n UpcastInt32AndMap[\"int32\"] = \"int32\";\n UpcastInt32AndMap[\"bool\"] = \"int32\";\n UpcastInt32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastInt32AndMap || (UpcastInt32AndMap = {}));\nvar UpcastBoolAndMap;\n(function (UpcastBoolAndMap) {\n UpcastBoolAndMap[\"float32\"] = \"float32\";\n UpcastBoolAndMap[\"int32\"] = \"int32\";\n UpcastBoolAndMap[\"bool\"] = \"bool\";\n UpcastBoolAndMap[\"complex64\"] = \"complex64\";\n})(UpcastBoolAndMap || (UpcastBoolAndMap = {}));\nvar UpcastFloat32AndMap;\n(function (UpcastFloat32AndMap) {\n UpcastFloat32AndMap[\"float32\"] = \"float32\";\n UpcastFloat32AndMap[\"int32\"] = \"float32\";\n UpcastFloat32AndMap[\"bool\"] = \"float32\";\n UpcastFloat32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastFloat32AndMap || (UpcastFloat32AndMap = {}));\nvar UpcastComplex64AndMap;\n(function (UpcastComplex64AndMap) {\n UpcastComplex64AndMap[\"float32\"] = \"complex64\";\n UpcastComplex64AndMap[\"int32\"] = \"complex64\";\n UpcastComplex64AndMap[\"bool\"] = \"complex64\";\n UpcastComplex64AndMap[\"complex64\"] = \"complex64\";\n})(UpcastComplex64AndMap || (UpcastComplex64AndMap = {}));\nconst upcastTypeMap = {\n 'float32': UpcastFloat32AndMap,\n 'int32': UpcastInt32AndMap,\n 'bool': UpcastBoolAndMap,\n 'complex64': UpcastComplex64AndMap\n};\nexport function upcastType(typeA, typeB) {\n if (typeA === 'string' || typeB === 'string') {\n if (typeA === 'string' && typeB === 'string') {\n return 'string';\n }\n throw new Error(`Can not upcast ${typeA} with ${typeB}`);\n }\n return upcastTypeMap[typeA][typeB];\n}\n/** Returns the output type after summation. */\nexport function sumOutType(type) {\n return upcastType(type, 'int32');\n}\nexport function isWebGLData(values) {\n return values != null && typeof values === 'object' && 'texture' in values &&\n values.texture instanceof WebGLTexture;\n}\nexport function isWebGPUData(values) {\n return typeof GPUBuffer !== 'undefined' && values != null &&\n typeof values === 'object' && 'buffer' in values &&\n values.buffer instanceof GPUBuffer;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQXNESCxNQUFNLENBQU4sSUFBWSxJQVFYO0FBUkQsV0FBWSxJQUFJO0lBQ2QsaUJBQVMsQ0FBQTtJQUNULGlCQUFTLENBQUE7SUFDVCxpQkFBUyxDQUFBO0lBQ1QsaUJBQVMsQ0FBQTtJQUNULGlCQUFTLENBQUE7SUFDVCxpQkFBUyxDQUFBO0lBQ1QsaUJBQVMsQ0FBQTtBQUNYLENBQUMsRUFSVyxJQUFJLEtBQUosSUFBSSxRQVFmO0FBV0QsK0VBQStFO0FBQy9FLFVBQVU7QUFDVixJQUFLLGlCQUtKO0FBTEQsV0FBSyxpQkFBaUI7SUFDcEIsd0NBQXFCLENBQUE7SUFDckIsb0NBQWlCLENBQUE7SUFDakIsbUNBQWdCLENBQUE7SUFDaEIsNENBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxJLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLckI7QUFFRCxJQUFLLGdCQUtKO0FBTEQsV0FBSyxnQkFBZ0I7SUFDbkIsdUNBQXFCLENBQUE7SUFDckIsbUNBQWlCLENBQUE7SUFDakIsaUNBQWUsQ0FBQTtJQUNmLDJDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBS3BCO0FBRUQsSUFBSyxtQkFLSjtBQUxELFdBQUssbUJBQW1CO0lBQ3RCLDBDQUFxQixDQUFBO0lBQ3JCLHdDQUFtQixDQUFBO0lBQ25CLHVDQUFrQixDQUFBO0lBQ2xCLDhDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBS3ZCO0FBRUQsSUFBSyxxQkFLSjtBQUxELFdBQUsscUJBQXFCO0lBQ3hCLDhDQUF1QixDQUFBO0lBQ3ZCLDRDQUFxQixDQUFBO0lBQ3JCLDJDQUFvQixDQUFBO0lBQ3BCLGdEQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMSSxxQkFBcUIsS0FBckIscUJBQXFCLFFBS3pCO0FBRUQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsV0FBVyxFQUFFLHFCQUFxQjtDQUNuQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFlLEVBQUUsS0FBZTtJQUN6RCxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM1QyxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELCtDQUErQztBQUMvQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFrRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlO0lBQ3pDLE9BQU8sTUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLE1BQU07UUFDdEUsTUFBTSxDQUFDLE9BQU8sWUFBWSxZQUFZLENBQUM7QUFDN0MsQ0FBQztBQUNELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxNQUFNLElBQUksSUFBSTtRQUNyRCxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU07UUFDaEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxTQUFTLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqIEBkb2NhbGlhcyBudW1iZXJbXSAqL1xuZXhwb3J0IGludGVyZmFjZSBTaGFwZU1hcCB7XG4gIFIwOiBudW1iZXJbXTtcbiAgUjE6IFtudW1iZXJdO1xuICBSMjogW251bWJlciwgbnVtYmVyXTtcbiAgUjM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgUjQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBSNTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgUjY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuLyoqIEBkb2NhbGlhcyBudW1iZXJbXSAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnJheU1hcCB7XG4gIFIwOiBudW1iZXI7XG4gIFIxOiBudW1iZXJbXTtcbiAgUjI6IG51bWJlcltdW107XG4gIFIzOiBudW1iZXJbXVtdW107XG4gIFI0OiBudW1iZXJbXVtdW11bXTtcbiAgUjU6IG51bWJlcltdW11bXVtdW107XG4gIFI2OiBudW1iZXJbXVtdW11bXVtdW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVR5cGVNYXAge1xuICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG4gIGludDMyOiBJbnQzMkFycmF5O1xuICBib29sOiBVaW50OEFycmF5O1xuICBjb21wbGV4NjQ6IEZsb2F0MzJBcnJheTtcbiAgc3RyaW5nOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVWYWx1ZU1hcCB7XG4gIGJvb2w6IGJvb2xlYW47XG4gIGludDMyOiBudW1iZXI7XG4gIGZsb2F0MzI6IG51bWJlcjtcbiAgY29tcGxleDY0OiBudW1iZXI7XG4gIHN0cmluZzogc3RyaW5nO1xufVxuXG4vKiogQGRvY2FsaWFzICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnY29tcGxleDY0J3wnc3RyaW5nJyAqL1xuZXhwb3J0IHR5cGUgRGF0YVR5cGUgPSBrZXlvZiBEYXRhVHlwZU1hcDtcbmV4cG9ydCB0eXBlIE51bWVyaWNEYXRhVHlwZSA9ICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnY29tcGxleDY0JztcblxuZXhwb3J0IHR5cGUgRGF0YVR5cGVGb3I8VCBleHRlbmRzIG51bWJlcnxzdHJpbmd8Ym9vbGVhbj4gPVxuICAgIFQgZXh0ZW5kcyBudW1iZXJ8Ym9vbGVhbiA/IE51bWVyaWNEYXRhVHlwZSA6IFQgZXh0ZW5kcyBzdHJpbmcgPyAnc3RyaW5nJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldmVyO1xuXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID0gRmxvYXQzMkFycmF5fEludDMyQXJyYXl8VWludDhBcnJheTtcbi8qKiBUZW5zb3IgZGF0YSB1c2VkIGluIHRlbnNvciBjcmVhdGlvbiBhbmQgdXNlci1mYWNpbmcgQVBJLiAqL1xuZXhwb3J0IHR5cGUgRGF0YVZhbHVlcyA9IERhdGFUeXBlTWFwW0RhdGFUeXBlXTtcbi8qKiBUaGUgdW5kZXJseWluZyB0ZW5zb3IgZGF0YSB0aGF0IGdldHMgc3RvcmVkIGluIGEgYmFja2VuZC4gKi9cbmV4cG9ydCB0eXBlIEJhY2tlbmRWYWx1ZXMgPSBGbG9hdDMyQXJyYXl8SW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4QXJyYXlbXTtcblxuZXhwb3J0IGVudW0gUmFuayB7XG4gIFIwID0gJ1IwJyxcbiAgUjEgPSAnUjEnLFxuICBSMiA9ICdSMicsXG4gIFIzID0gJ1IzJyxcbiAgUjQgPSAnUjQnLFxuICBSNSA9ICdSNScsXG4gIFI2ID0gJ1I2J1xufVxuXG5leHBvcnQgdHlwZSBGbGF0VmVjdG9yID0gYm9vbGVhbltdfG51bWJlcltdfFR5cGVkQXJyYXk7XG5leHBvcnQgdHlwZSBSZWd1bGFyQXJyYXk8VD4gPVxuICAgIFRbXXxUW11bXXxUW11bXVtdfFRbXVtdW11bXXxUW11bXVtdW11bXXxUW11bXVtdW11bXVtdO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5leHBvcnQgaW50ZXJmYWNlIFJlY3Vyc2l2ZUFycmF5PFQgZXh0ZW5kcyBhbnk+IHtcbiAgW2luZGV4OiBudW1iZXJdOiBUfFJlY3Vyc2l2ZUFycmF5PFQ+O1xufVxuXG4vLyBMb29rcyBmb3IgdXBjYXN0aW5nIHR5cGVzLiBVc2VkLCBmb3IgZXhhbXBsZSwgaW4gb3BlcmF0aW9ucyB3aXRoIG1peGVkIGR0eXBlXG4vLyBpbnB1dHMuXG5lbnVtIFVwY2FzdEludDMyQW5kTWFwIHtcbiAgJ2Zsb2F0MzInID0gJ2Zsb2F0MzInLFxuICAnaW50MzInID0gJ2ludDMyJyxcbiAgJ2Jvb2wnID0gJ2ludDMyJyxcbiAgJ2NvbXBsZXg2NCcgPSAnY29tcGxleDY0J1xufVxuXG5lbnVtIFVwY2FzdEJvb2xBbmRNYXAge1xuICAnZmxvYXQzMicgPSAnZmxvYXQzMicsXG4gICdpbnQzMicgPSAnaW50MzInLFxuICAnYm9vbCcgPSAnYm9vbCcsXG4gICdjb21wbGV4NjQnID0gJ2NvbXBsZXg2NCdcbn1cblxuZW51bSBVcGNhc3RGbG9hdDMyQW5kTWFwIHtcbiAgJ2Zsb2F0MzInID0gJ2Zsb2F0MzInLFxuICAnaW50MzInID0gJ2Zsb2F0MzInLFxuICAnYm9vbCcgPSAnZmxvYXQzMicsXG4gICdjb21wbGV4NjQnID0gJ2NvbXBsZXg2NCdcbn1cblxuZW51bSBVcGNhc3RDb21wbGV4NjRBbmRNYXAge1xuICAnZmxvYXQzMicgPSAnY29tcGxleDY0JyxcbiAgJ2ludDMyJyA9ICdjb21wbGV4NjQnLFxuICAnYm9vbCcgPSAnY29tcGxleDY0JyxcbiAgJ2NvbXBsZXg2NCcgPSAnY29tcGxleDY0J1xufVxuXG5jb25zdCB1cGNhc3RUeXBlTWFwID0ge1xuICAnZmxvYXQzMic6IFVwY2FzdEZsb2F0MzJBbmRNYXAsXG4gICdpbnQzMic6IFVwY2FzdEludDMyQW5kTWFwLFxuICAnYm9vbCc6IFVwY2FzdEJvb2xBbmRNYXAsXG4gICdjb21wbGV4NjQnOiBVcGNhc3RDb21wbGV4NjRBbmRNYXBcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGNhc3RUeXBlKHR5cGVBOiBEYXRhVHlwZSwgdHlwZUI6IERhdGFUeXBlKTogRGF0YVR5cGUge1xuICBpZiAodHlwZUEgPT09ICdzdHJpbmcnIHx8IHR5cGVCID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlQSA9PT0gJ3N0cmluZycgJiYgdHlwZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCB1cGNhc3QgJHt0eXBlQX0gd2l0aCAke3R5cGVCfWApO1xuICB9XG4gIHJldHVybiB1cGNhc3RUeXBlTWFwW3R5cGVBXVt0eXBlQl07XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBvdXRwdXQgdHlwZSBhZnRlciBzdW1tYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gc3VtT3V0VHlwZSh0eXBlOiBEYXRhVHlwZSk6IERhdGFUeXBlIHtcbiAgcmV0dXJuIHVwY2FzdFR5cGUodHlwZSwgJ2ludDMyJyk7XG59XG5cbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZSA9XG4gICAgVHlwZWRBcnJheXxudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8UmVjdXJzaXZlQXJyYXk8bnVtYmVyfG51bWJlcltdfFR5cGVkQXJyYXk+fFxuICAgIFJlY3Vyc2l2ZUFycmF5PGJvb2xlYW4+fFJlY3Vyc2l2ZUFycmF5PHN0cmluZz58VWludDhBcnJheVtdO1xuZXhwb3J0IHR5cGUgU2NhbGFyTGlrZSA9IG51bWJlcnxib29sZWFufHN0cmluZ3xVaW50OEFycmF5O1xuLyoqIEBkb2NhbGlhcyBUeXBlZEFycmF5fEFycmF5ICovXG5leHBvcnQgdHlwZSBUZW5zb3JMaWtlMUQgPSBUeXBlZEFycmF5fG51bWJlcltdfGJvb2xlYW5bXXxzdHJpbmdbXXxVaW50OEFycmF5W107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2UyRCA9IFR5cGVkQXJyYXl8bnVtYmVyW118bnVtYmVyW11bXXxib29sZWFuW118Ym9vbGVhbltdW118XG4gICAgc3RyaW5nW118c3RyaW5nW11bXXxVaW50OEFycmF5W118VWludDhBcnJheVtdW107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2UzRCA9IFR5cGVkQXJyYXl8bnVtYmVyW118bnVtYmVyW11bXVtdfGJvb2xlYW5bXXxcbiAgICBib29sZWFuW11bXVtdfHN0cmluZ1tdfHN0cmluZ1tdW11bXXxVaW50OEFycmF5W118VWludDhBcnJheVtdW11bXTtcbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZTREID0gVHlwZWRBcnJheXxudW1iZXJbXXxudW1iZXJbXVtdW11bXXxib29sZWFuW118XG4gICAgYm9vbGVhbltdW11bXVtdfHN0cmluZ1tdfHN0cmluZ1tdW11bXVtdfFVpbnQ4QXJyYXlbXXxVaW50OEFycmF5W11bXVtdW107XG4vKiogQGRvY2FsaWFzIFR5cGVkQXJyYXl8QXJyYXkgKi9cbmV4cG9ydCB0eXBlIFRlbnNvckxpa2U1RCA9XG4gICAgVHlwZWRBcnJheXxudW1iZXJbXXxudW1iZXJbXVtdW11bXVtdfGJvb2xlYW5bXXxib29sZWFuW11bXVtdW11bXXxzdHJpbmdbXXxcbiAgICBzdHJpbmdbXVtdW11bXVtdfFVpbnQ4QXJyYXlbXXxVaW50OEFycmF5W11bXVtdW11bXTtcbi8qKiBAZG9jYWxpYXMgVHlwZWRBcnJheXxBcnJheSAqL1xuZXhwb3J0IHR5cGUgVGVuc29yTGlrZTZEID1cbiAgICBUeXBlZEFycmF5fG51bWJlcltdfG51bWJlcltdW11bXVtdW11bXXxib29sZWFuW118Ym9vbGVhbltdW11bXVtdW11bXXxcbiAgICBzdHJpbmdbXXxzdHJpbmdbXVtdW11bXVtdW118VWludDhBcnJheVtdfFVpbnQ4QXJyYXlbXVtdW11bXVtdO1xuXG4vKiogVHlwZSBmb3IgcmVwcmVzZW50aW5nIGltYWdlIGRhdGEgaW4gVWludDhBcnJheSB0eXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXhlbERhdGEge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciByZXByZXNlbnRpbmcgYWxsIHBlcm11dGF0aW9ucyBhbmQgY29tYmluYXRpb25zIG9mICdSR0JBJyBjaGFubmVscy5cbiAqL1xuZXhwb3J0IHR5cGUgV2ViR0xDaGFubmVscyA9ICdBJ3wnQid8J0cnfCdSJ3wnQUInfCdBRyd8J0FSJ3wnQkEnfCdCRyd8J0JSJ3wnR0EnfFxuICAgICdHQid8J0dSJ3wnUkEnfCdSQid8J1JHJ3wnQUJHJ3wnQUJSJ3wnQUdCJ3wnQUdSJ3wnQVJCJ3wnQVJHJ3wnQkFHJ3wnQkFSJ3xcbiAgICAnQkdBJ3wnQkdSJ3wnQlJBJ3wnQlJHJ3wnR0FCJ3wnR0FSJ3wnR0JBJ3wnR0JSJ3wnR1JBJ3wnR1JCJ3wnUkFCJ3wnUkFHJ3xcbiAgICAnUkJBJ3wnUkJHJ3wnUkdBJ3wnUkdCJ3wnQUJHUid8J0FCUkcnfCdBR0JSJ3wnQUdSQid8J0FSQkcnfCdBUkdCJ3wnQkFHUid8XG4gICAgJ0JBUkcnfCdCR0FSJ3wnQkdSQSd8J0JSQUcnfCdCUkdBJ3wnR0FCUid8J0dBUkInfCdHQkFSJ3wnR0JSQSd8J0dSQUInfFxuICAgICdHUkJBJ3wnUkFCRyd8J1JBR0InfCdSQkFHJ3wnUkJHQSd8J1JHQUInfCdSR0JBJztcblxuLyoqIFR5cGUgZm9yIHJlcHJlc2VudGluZyBhIHRleHR1cmUgZGF0YSB0byBjcmVhdGUgYSB0ZW5zb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkdMRGF0YSB7XG4gIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGNoYW5uZWxzOiBXZWJHTENoYW5uZWxzO1xufVxuXG4vKipcbiAqIFR5cGUgZm9yIHJlcHJlc2VudGluZyBhIGJ1ZmZlciBkYXRhIHRvIGNyZWF0ZSBhIHRlbnNvci4gQnVmZmVyIHVzYWdlIHNob3VsZFxuICogYXQgbGVhc3Qgc3VwcG9ydCBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkMuIFdoZW5cbiAqIHplcm9Db3B5IGlzIGZhbHNlIG9yIHVuZGVmaW5lZCAoZGVmYXVsdCksIHRoaXMgR1BVQnVmZmVyIHdpbGwgYmUgY29waWVkIHRvXG4gKiB0aGUgdGVuc29yJ3MgcmVzb3VyY2UgYnVmZmVyLiBXaGVuIHplcm9Db3B5IGlzIHRydWUsIHRlbnNvciB3aWxsIHVzZSB0aGlzXG4gKiBHUFVCdWZmZXIgYXMgdGVuc29yJ3MgcmVzb3VyY2UgYnVmZmVyLCB1c2VyIHNob3VsZCBub3QgZGVzdHJveSB0aGlzIEdQVUJ1ZmZlclxuICogdW50aWwgYWxsIGFjY2VzcyBpcyBkb25lLiBJZiBub3Qgc3BlY2lmaWVkIGF0IGNyZWF0aW5nIGEgdGVuc29yLCB0ZW5zb3IgdHlwZVxuICogaXMgZmxvYXQzMi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJHUFVEYXRhIHtcbiAgYnVmZmVyOiBHUFVCdWZmZXI7XG4gIHplcm9Db3B5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xEYXRhKHZhbHVlczogdW5rbm93bik6IHZhbHVlcyBpcyBXZWJHTERhdGEge1xuICByZXR1cm4gdmFsdWVzICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlcyA9PT0gJ29iamVjdCcgJiYgJ3RleHR1cmUnIGluIHZhbHVlcyAmJlxuICAgICAgdmFsdWVzLnRleHR1cmUgaW5zdGFuY2VvZiBXZWJHTFRleHR1cmU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNXZWJHUFVEYXRhKHZhbHVlczogdW5rbm93bik6IHZhbHVlcyBpcyBXZWJHUFVEYXRhIHtcbiAgcmV0dXJuIHR5cGVvZiBHUFVCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlcyAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVzID09PSAnb2JqZWN0JyAmJiAnYnVmZmVyJyBpbiB2YWx1ZXMgJiZcbiAgICAgIHZhbHVlcy5idWZmZXIgaW5zdGFuY2VvZiBHUFVCdWZmZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLiBBIG51bWJlciBpbiByYW5nZSBbMC0xXS4gSWYgdGhlIGltYWdlIGlzIGEgMkQgdGVuc29yIG9yIGEgM0RcbiAgICogdGVuc29yIHdpdGggMSBvciAzIGNoYW5uZWxzLCB0aGUgYWxwaGEgY2hhbm5lbHMgd291bGQgc2V0IGFzIGl0cyB2YWx1ZTtcbiAgICogb3RoZXJ3aXNlLCBpdCB3b3VsZCBub3QgbWFrZSBlZmZlY3RzLlxuICAgKi9cbiAgYWxwaGE/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwuICBJZiB0aGUgY2FudmFzIGhhcyBjcmVhdGVkIGEgY29udGV4dCwgaXQgd291bGQgbm90IG1ha2UgZWZmZWN0cy5cbiAgICogSWYgaXQgaXMgbm90IHNldCwgaXQgd291bGQgYmUgdmFyaWFibGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgYmFja2VuZC5cbiAgICovXG4gIGNvbnRleHRUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwuIEEgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBjb25maWd1cmF0aW9uLiBJZiB0aGUgY2FudmFzIGhhcyBjcmVhdGVkXG4gICAqIGEgY29udGV4dCwgaXQgd291bGQgbm90IG1ha2UgZWZmZWN0cy5cbiAgICovXG4gIGNvbnRleHRBdHRyaWJ1dGVzPzogV2ViR0xDb250ZXh0QXR0cmlidXRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmF3T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbC4gQW4gb2JqZWN0IG9mIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSB2YWx1ZXMgb2YgaW1hZ2UgdGVuc29yLlxuICAgKi9cbiAgaW1hZ2VPcHRpb25zPzogSW1hZ2VPcHRpb25zO1xuICAvKipcbiAgICogT3B0aW9uYWwuIEFuIG9iamVjdCB0byBjb25maWd1cmUgdGhlIGNvbnRleHQgb2YgdGhlIGNhbnZhcyB0byBkcmF3IHRvLlxuICAgKi9cbiAgY29udGV4dE9wdGlvbnM/OiBDb250ZXh0T3B0aW9ucztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tensor } from './tensor';\nimport { upcastType } from './types';\nimport { assert } from './util';\nexport function makeTypesMatch(a, b) {\n if (a.dtype === b.dtype) {\n return [a, b];\n }\n const dtype = upcastType(a.dtype, b.dtype);\n return [a.cast(dtype), b.cast(dtype)];\n}\nexport function assertTypesMatch(a, b) {\n assert(a.dtype === b.dtype, () => `The dtypes of the first(${a.dtype}) and` +\n ` second(${b.dtype}) input must match`);\n}\nexport function isTensorInList(tensor, tensorList) {\n return tensorList.some(x => x.id === tensor.id);\n}\n/**\n * Extracts any `Tensor`s found within the provided object.\n *\n * @param container an object that may be a `Tensor` or may directly contain\n * `Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. In general it\n * is safe to pass any object here, except that `Promise`s are not\n * supported.\n * @returns An array of `Tensors` found within the passed object. If the\n * argument is simply a `Tensor', a list containing that `Tensor` is\n * returned. If the object is not a `Tensor` or does not\n * contain `Tensors`, an empty list is returned.\n */\nexport function getTensorsInContainer(result) {\n const list = [];\n const seen = new Set();\n walkTensorContainer(result, list, seen);\n return list;\n}\nfunction walkTensorContainer(container, list, seen) {\n if (container == null) {\n return;\n }\n if (container instanceof Tensor) {\n list.push(container);\n return;\n }\n if (!isIterable(container)) {\n return;\n }\n // Iteration over keys works also for arrays.\n const iterable = container;\n for (const k in iterable) {\n const val = iterable[k];\n if (!seen.has(val)) {\n seen.add(val);\n walkTensorContainer(val, list, seen);\n }\n }\n}\n// tslint:disable-next-line:no-any\nfunction isIterable(obj) {\n return Array.isArray(obj) || typeof obj === 'object';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL3RlbnNvcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxjQUFjLENBQW1CLENBQUksRUFBRSxDQUFJO0lBQ3pELElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDZjtJQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNuRCxNQUFNLENBQ0YsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxFQUNuQixHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEtBQUssT0FBTztRQUMzQyxXQUFXLENBQUMsQ0FBQyxLQUFLLG9CQUFvQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBYyxFQUFFLFVBQW9CO0lBQ2pFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUF1QjtJQUMzRCxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7SUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQztJQUNoQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQ3hCLFNBQTBCLEVBQUUsSUFBYyxFQUFFLElBQWtCO0lBQ2hFLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixPQUFPO0tBQ1I7SUFDRCxJQUFJLFNBQVMsWUFBWSxNQUFNLEVBQUU7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixPQUFPO0tBQ1I7SUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLE9BQU87S0FDUjtJQUNELDZDQUE2QztJQUM3QyxNQUFNLFFBQVEsR0FBRyxTQUFpQyxDQUFDO0lBQ25ELEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0QztLQUNGO0FBQ0gsQ0FBQztBQUVELGtDQUFrQztBQUNsQyxTQUFTLFVBQVUsQ0FBQyxHQUFRO0lBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yQ29udGFpbmVyLCBUZW5zb3JDb250YWluZXJBcnJheX0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHt1cGNhc3RUeXBlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFrZVR5cGVzTWF0Y2g8VCBleHRlbmRzIFRlbnNvcj4oYTogVCwgYjogVCk6IFtULCBUXSB7XG4gIGlmIChhLmR0eXBlID09PSBiLmR0eXBlKSB7XG4gICAgcmV0dXJuIFthLCBiXTtcbiAgfVxuICBjb25zdCBkdHlwZSA9IHVwY2FzdFR5cGUoYS5kdHlwZSwgYi5kdHlwZSk7XG4gIHJldHVybiBbYS5jYXN0KGR0eXBlKSwgYi5jYXN0KGR0eXBlKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUeXBlc01hdGNoKGE6IFRlbnNvciwgYjogVGVuc29yKTogdm9pZCB7XG4gIGFzc2VydChcbiAgICAgIGEuZHR5cGUgPT09IGIuZHR5cGUsXG4gICAgICAoKSA9PiBgVGhlIGR0eXBlcyBvZiB0aGUgZmlyc3QoJHthLmR0eXBlfSkgYW5kYCArXG4gICAgICAgICAgYCBzZWNvbmQoJHtiLmR0eXBlfSkgaW5wdXQgbXVzdCBtYXRjaGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW5zb3JJbkxpc3QodGVuc29yOiBUZW5zb3IsIHRlbnNvckxpc3Q6IFRlbnNvcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiB0ZW5zb3JMaXN0LnNvbWUoeCA9PiB4LmlkID09PSB0ZW5zb3IuaWQpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGFueSBgVGVuc29yYHMgZm91bmQgd2l0aGluIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciBhbiBvYmplY3QgdGhhdCBtYXkgYmUgYSBgVGVuc29yYCBvciBtYXkgZGlyZWN0bHkgY29udGFpblxuICogICBgVGVuc29yYHMsIHN1Y2ggYXMgYSBgVGVuc29yW11gIG9yIGB7a2V5OiBUZW5zb3IsIC4uLn1gLiBJbiBnZW5lcmFsIGl0XG4gKiAgIGlzIHNhZmUgdG8gcGFzcyBhbnkgb2JqZWN0IGhlcmUsIGV4Y2VwdCB0aGF0IGBQcm9taXNlYHMgYXJlIG5vdFxuICogICBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgVGVuc29yc2AgZm91bmQgd2l0aGluIHRoZSBwYXNzZWQgb2JqZWN0LiBJZiB0aGVcbiAqICAgYXJndW1lbnQgaXMgc2ltcGx5IGEgYFRlbnNvcicsIGEgbGlzdCBjb250YWluaW5nIHRoYXQgYFRlbnNvcmAgaXNcbiAqICAgcmV0dXJuZWQuIElmIHRoZSBvYmplY3QgaXMgbm90IGEgYFRlbnNvcmAgb3IgZG9lcyBub3RcbiAqICAgY29udGFpbiBgVGVuc29yc2AsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5zb3JzSW5Db250YWluZXIocmVzdWx0OiBUZW5zb3JDb250YWluZXIpOiBUZW5zb3JbXSB7XG4gIGNvbnN0IGxpc3Q6IFRlbnNvcltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHt9fHZvaWQ+KCk7XG4gIHdhbGtUZW5zb3JDb250YWluZXIocmVzdWx0LCBsaXN0LCBzZWVuKTtcbiAgcmV0dXJuIGxpc3Q7XG59XG5cbmZ1bmN0aW9uIHdhbGtUZW5zb3JDb250YWluZXIoXG4gICAgY29udGFpbmVyOiBUZW5zb3JDb250YWluZXIsIGxpc3Q6IFRlbnNvcltdLCBzZWVuOiBTZXQ8e318dm9pZD4pOiB2b2lkIHtcbiAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICBsaXN0LnB1c2goY29udGFpbmVyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpc0l0ZXJhYmxlKGNvbnRhaW5lcikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gSXRlcmF0aW9uIG92ZXIga2V5cyB3b3JrcyBhbHNvIGZvciBhcnJheXMuXG4gIGNvbnN0IGl0ZXJhYmxlID0gY29udGFpbmVyIGFzIFRlbnNvckNvbnRhaW5lckFycmF5O1xuICBmb3IgKGNvbnN0IGsgaW4gaXRlcmFibGUpIHtcbiAgICBjb25zdCB2YWwgPSBpdGVyYWJsZVtrXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbCkpIHtcbiAgICAgIHNlZW4uYWRkKHZhbCk7XG4gICAgICB3YWxrVGVuc29yQ29udGFpbmVyKHZhbCwgbGlzdCwgc2Vlbik7XG4gICAgfVxuICB9XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbmZ1bmN0aW9uIGlzSXRlcmFibGUob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSB8fCB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { KernelBackend } from './backends/backend';\nimport { Environment, setEnvironmentGlobal } from './environment';\nimport { getGlobalNamespace } from './global_util';\nimport { Add, Cast, Identity } from './kernel_names';\nimport { getGradient, getKernel, getKernelsForBackend } from './kernel_registry';\nimport * as log from './log';\nimport { Profiler } from './profiler';\nimport { backpropagateGradients, getFilteredNodesXToY } from './tape';\nimport { setTensorTracker, Tensor, Variable } from './tensor';\nimport { getTensorsInContainer } from './tensor_util';\nimport * as util from './util';\nimport { bytesFromStringArray, makeOnesTypedArray, now, sizeFromShape } from './util';\nfunction isRegisteredKernelInvocation(kernelInvocation) {\n return kernelInvocation.kernelName != null;\n}\nclass EngineState {\n constructor() {\n // Public since optimizers will use it.\n this.registeredVariables = {};\n this.nextTapeNodeId = 0;\n this.numBytes = 0;\n this.numTensors = 0;\n this.numStringTensors = 0;\n this.numDataBuffers = 0;\n // Number of nested tf.grad() statements when computing higher-order\n // gradients. E.g. `1` for first-order gradients and `2` for second-order\n // gradients. Used to track if the tape should be removed after a backprop.\n this.gradientDepth = 0;\n // Number of nested kernel calls. When kernel depth is greater than 1, we turn\n // off the tape.\n this.kernelDepth = 0;\n this.scopeStack = [];\n /**\n * Keeps track of the number of data moves during a kernel execution. We\n * maintain a stack since kernels can call other kernels, recursively.\n */\n this.numDataMovesStack = [];\n this.nextScopeId = 0;\n this.tensorInfo = new WeakMap();\n this.profiling = false;\n this.activeProfile = {\n newBytes: 0,\n newTensors: 0,\n peakBytes: 0,\n kernels: [],\n result: null,\n get kernelNames() {\n return Array.from(new Set(this.kernels.map(k => k.name)));\n }\n };\n }\n dispose() {\n for (const variableName in this.registeredVariables) {\n this.registeredVariables[variableName].dispose();\n }\n }\n}\nclass Engine {\n constructor(ENV) {\n this.ENV = ENV;\n this.registry = {};\n this.registryFactory = {};\n this.pendingBackendInitId = 0;\n this.state = new EngineState();\n }\n async ready() {\n if (this.pendingBackendInit != null) {\n return this.pendingBackendInit.then(() => { });\n }\n if (this.backendInstance != null) {\n return;\n }\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const success = await this.initializeBackend(backendName).success;\n if (success) {\n await this.setBackend(backendName);\n return;\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n get backend() {\n if (this.pendingBackendInit != null) {\n throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make ` +\n `sure to await tf.ready() or await tf.setBackend() before calling ` +\n `other methods`);\n }\n if (this.backendInstance == null) {\n const { name, asyncInit } = this.initializeBackendsAndReturnBest();\n if (asyncInit) {\n throw new Error(`The highest priority backend '${name}' has not yet been ` +\n `initialized. Make sure to await tf.ready() or ` +\n `await tf.setBackend() before calling other methods`);\n }\n this.setBackend(name);\n }\n return this.backendInstance;\n }\n backendNames() {\n return Object.keys(this.registryFactory);\n }\n findBackend(backendName) {\n if (!(backendName in this.registry)) {\n // If the backend hasn't been initialized but we have a registry entry for\n // it, initialize it and return it.\n if (backendName in this.registryFactory) {\n const { asyncInit } = this.initializeBackend(backendName);\n if (asyncInit) {\n // Backend is not ready yet.\n return null;\n }\n }\n else {\n return null;\n }\n }\n return this.registry[backendName];\n }\n findBackendFactory(backendName) {\n if (!(backendName in this.registryFactory)) {\n return null;\n }\n return this.registryFactory[backendName].factory;\n }\n registerBackend(backendName, factory, priority = 1) {\n if (backendName in this.registryFactory) {\n log.warn(`${backendName} backend was already registered. ` +\n `Reusing existing backend factory.`);\n return false;\n }\n this.registryFactory[backendName] = { factory, priority };\n return true;\n }\n async setBackend(backendName) {\n if (this.registryFactory[backendName] == null) {\n throw new Error(`Backend name '${backendName}' not found in registry`);\n }\n this.backendName = backendName;\n if (this.registry[backendName] == null) {\n this.backendInstance = null;\n const { success, asyncInit } = this.initializeBackend(backendName);\n const result = asyncInit ? await success : success;\n if (!result) {\n return false;\n }\n }\n this.backendInstance = this.registry[backendName];\n this.setupRegisteredKernels();\n // Reset the profiler.\n this.profiler = new Profiler(this.backendInstance);\n return true;\n }\n setupRegisteredKernels() {\n const kernels = getKernelsForBackend(this.backendName);\n kernels.forEach(kernel => {\n if (kernel.setupFunc != null) {\n kernel.setupFunc(this.backendInstance);\n }\n });\n }\n disposeRegisteredKernels(backendName) {\n const kernels = getKernelsForBackend(backendName);\n kernels.forEach(kernel => {\n if (kernel.disposeFunc != null) {\n kernel.disposeFunc(this.registry[backendName]);\n }\n });\n }\n /**\n * Initializes a backend by looking up the backend name in the factory\n * registry and calling the factory method. Returns a boolean representing\n * whether the initialization of the backend suceeded. Throws an error if\n * there is no backend in the factory registry.\n */\n initializeBackend(backendName) {\n const registryFactoryEntry = this.registryFactory[backendName];\n if (registryFactoryEntry == null) {\n throw new Error(`Cannot initialize backend ${backendName}, no registration found.`);\n }\n try {\n const backend = registryFactoryEntry.factory();\n /* Test if the factory returns a promise.\n Done in a more liberal way than\n previous 'Promise.resolve(backend)===backend'\n as we needed to account for custom Promise\n implementations (e.g. Angular) */\n if (backend && !(backend instanceof KernelBackend) &&\n typeof backend.then === 'function') {\n const promiseId = ++this.pendingBackendInitId;\n const success = backend\n .then(backendInstance => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.registry[backendName] = backendInstance;\n this.pendingBackendInit = null;\n return true;\n })\n .catch(err => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.pendingBackendInit = null;\n log.warn(`Initialization of backend ${backendName} failed`);\n log.warn(err.stack || err.message);\n return false;\n });\n this.pendingBackendInit = success;\n return { success, asyncInit: true };\n }\n else {\n this.registry[backendName] = backend;\n return { success: true, asyncInit: false };\n }\n }\n catch (err) {\n log.warn(`Initialization of backend ${backendName} failed`);\n log.warn(err.stack || err.message);\n return { success: false, asyncInit: false };\n }\n }\n removeBackend(backendName) {\n if (!(backendName in this.registryFactory)) {\n throw new Error(`${backendName} backend not found in registry`);\n }\n if (this.backendName === backendName && this.pendingBackendInit != null) {\n // There is a pending promise of the backend we want to remove. Make it\n // obsolete.\n this.pendingBackendInitId++;\n }\n if (backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n delete this.registryFactory[backendName];\n // Unset the backend if it is active.\n if (this.backendName === backendName) {\n this.pendingBackendInit = null;\n this.backendName = null;\n this.backendInstance = null;\n }\n }\n getSortedBackends() {\n if (Object.keys(this.registryFactory).length === 0) {\n throw new Error('No backend found in registry.');\n }\n return Object.keys(this.registryFactory).sort((a, b) => {\n // Highest priority comes first.\n return this.registryFactory[b].priority -\n this.registryFactory[a].priority;\n });\n }\n initializeBackendsAndReturnBest() {\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const { success, asyncInit } = this.initializeBackend(backendName);\n if (asyncInit || success) {\n return { name: backendName, asyncInit };\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n moveData(backend, dataId) {\n const info = this.state.tensorInfo.get(dataId);\n const srcBackend = info.backend;\n const values = this.readSync(dataId);\n const refCount = srcBackend.refCount(dataId);\n // Delete the tensor from the old backend and move it to the new\n // backend.\n srcBackend.disposeData(dataId, true);\n info.backend = backend;\n backend.move(dataId, values, info.shape, info.dtype, refCount);\n if (this.shouldCheckForMemLeaks()) {\n // Track the number of moves during a kernel execution to correctly\n // detect memory leaks.\n this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++;\n }\n }\n tidy(nameOrFn, fn) {\n let name = null;\n if (fn == null) {\n // Called with only 1 argument.\n if (typeof nameOrFn !== 'function') {\n throw new Error('Please provide a function to tidy()');\n }\n fn = nameOrFn;\n }\n else {\n // Called with 2 arguments.\n if (typeof nameOrFn !== 'string' && !(nameOrFn instanceof String)) {\n throw new Error('When calling with two arguments, the first argument ' +\n 'to tidy() must be a string');\n }\n if (typeof fn !== 'function') {\n throw new Error('When calling with two arguments, the 2nd argument ' +\n 'to tidy() must be a function');\n }\n name = nameOrFn;\n // TODO(nsthorat,smilkov): Do operation logging and performance\n // profiling.\n }\n let result;\n return this.scopedRun(() => this.startScope(name), () => this.endScope(result), () => {\n result = fn();\n if (result instanceof Promise) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n return result;\n });\n }\n scopedRun(start, end, f) {\n start();\n try {\n const res = f();\n end();\n return res;\n }\n catch (ex) {\n end();\n throw ex;\n }\n }\n nextTensorId() {\n return Engine.nextTensorId++;\n }\n nextVariableId() {\n return Engine.nextVariableId++;\n }\n /**\n * This method is called instead of the public-facing tensor.clone() when\n * saving a tensor for backwards pass. It makes sure to add the clone\n * operation to the tape regardless of being called inside a kernel\n * execution.\n */\n clone(x) {\n const y = ENGINE.runKernel(Identity, { x });\n const inputs = { x };\n const grad = (dy) => ({\n x: () => {\n const dtype = 'float32';\n const gradInputs = { x: dy };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, gradInputs, \n // tslint:disable-next-line: no-unnecessary-type-assertion\n attrs);\n }\n });\n const saved = [];\n this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {});\n return y;\n }\n /**\n * Execute a kernel with the given name and return the output tensor.\n *\n * @param kernelName The name of the kernel to execute.\n * @param inputs A map of input names to tensors.\n * @param attrs A map of attribute names to their values. An attribute is a\n * primitive (non-tensor) input to the kernel.\n * @param inputsToSave A list of tensors, inputs to save for the backprop\n * computation.\n * @param outputsToSave A list of booleans, specifying which output to save\n * for the backprop computation. These are booleans since the output\n * tensors are not visible to the user.\n */\n runKernel(kernelName, inputs, attrs) {\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n const hasKernel = getKernel(kernelName, this.backendName) != null;\n if (!hasKernel) {\n throw new Error(`Kernel '${kernelName}' not registered for backend '${this.backendName}'`);\n }\n return this.runKernelFunc({ kernelName, inputs, attrs });\n }\n shouldCheckForMemLeaks() {\n return this.ENV.getBool('IS_TEST');\n }\n checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos) {\n const numDataIdsAfter = this.backend.numDataIds();\n // Count the number of data ids associated with the result of the kernel.\n let numOutputDataIds = 0;\n outInfos.forEach(info => {\n // Complex numbers allocate 3 data ids, one for 'real', one for\n // 'imaginary', and one for the container that holds the former two.\n numOutputDataIds += (info.dtype === 'complex64' ? 3 : 1);\n });\n // Account for the number of moves during kernel execution. A \"data move\"\n // can happen in the middle of a kernel execution, placing a new (key,value)\n // pair in the data storage. Since data moves have net zero effect (we\n // always remove the data from the old backend), we have to cancel them out\n // when detecting memory leaks.\n const numMoves = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1];\n const dataIdsLeaked = numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves;\n if (dataIdsLeaked > 0) {\n throw new Error(`Backend '${this.backendName}' has an internal memory leak ` +\n `(${dataIdsLeaked} data ids) after running '${kernelName}'`);\n }\n }\n /**\n * Internal helper method to execute a kernel Func\n *\n * Use `runKernel` to execute kernels from outside of engine.\n */\n runKernelFunc(kernelParams) {\n let outputs;\n let saved = [];\n const isTapeOn = this.isTapeOn();\n const startingBytecount = this.state.numBytes;\n const startingNumTensors = this.state.numTensors;\n if (this.shouldCheckForMemLeaks()) {\n this.state.numDataMovesStack.push(0);\n }\n let kernelFunc;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n let out;\n const kernelOrScopeName = isRegisteredKernelInvocation(kernelParams) ?\n kernelParams.kernelName :\n this.state.activeScope != null ? this.state.activeScope.name : '';\n // Create the kernelFunc from either a registered kernel OR passed in\n // forward/backward functions (used by custom grad). In this context a\n // kernelFunc wraps a kernel implementation with some bookkeeping.\n if (isRegisteredKernelInvocation(kernelParams)) {\n const { kernelName, inputs, attrs } = kernelParams;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n const kernel = getKernel(kernelName, this.backendName);\n util.assert(kernel != null, () => `Cannot find registered kernel '${kernelName}' for backend '${this.backendName}'`);\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = kernel.kernelFunc({ inputs, attrs, backend: this.backend });\n const outInfos = Array.isArray(out) ? out : [out];\n if (this.shouldCheckForMemLeaks()) {\n this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos);\n }\n const outTensors = outInfos.map((outInfo) => {\n // todo (yassogba) remove this option (Tensor) when node backend\n // methods have been modularized and they all return tensorInfo.\n // TensorInfos do not have a rank attribute.\n if (outInfo.rank != null) {\n return outInfo;\n }\n return this.makeTensorFromTensorInfo(outInfo);\n });\n // Save any required inputs and outputs.\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since there would be no backprop for these tensors\n // (which would otherwise dispose them).\n if (isTapeOn) {\n const tensorsToSave = this.getTensorsForGradient(kernelName, inputs, outTensors);\n saved = this.saveTensorsForBackwardMode(tensorsToSave);\n }\n return outTensors;\n };\n }\n else {\n const { forwardFunc } = kernelParams;\n // Running a customGrad op.\n const saveFunc = (tensors) => {\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since we would never run backprop, which disposes\n // the kept tensors.\n if (!isTapeOn) {\n return;\n }\n saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n };\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = this.tidy(() => forwardFunc(this.backend, saveFunc));\n const outs = (Array.isArray(out) ? out : [out]);\n if (this.shouldCheckForMemLeaks()) {\n // Scope name is used to print a more helpful error message if needed.\n this.checkKernelForMemLeak(kernelOrScopeName, numDataIdsBefore, outs);\n }\n return outs;\n };\n }\n //\n // Run the kernelFunc. Optionally profiling it.\n //\n const { inputs, attrs } = kernelParams;\n const backwardsFunc = isRegisteredKernelInvocation(kernelParams) ?\n null :\n kernelParams.backwardsFunc;\n let kernelProfile;\n this.scopedRun(\n // Stop recording to a tape when running a kernel.\n () => this.state.kernelDepth++, () => this.state.kernelDepth--, () => {\n if (!this.ENV.getBool('DEBUG') && !this.state.profiling) {\n outputs = kernelFunc();\n }\n else {\n kernelProfile = this.profiler.profileKernel(kernelOrScopeName, inputs, () => kernelFunc());\n if (this.ENV.getBool('DEBUG')) {\n this.profiler.logKernelProfile(kernelProfile);\n }\n outputs = kernelProfile.outputs;\n }\n });\n if (isTapeOn) {\n this.addTapeNode(kernelOrScopeName, inputs, outputs, backwardsFunc, saved, attrs);\n }\n if (this.state.profiling) {\n this.state.activeProfile.kernels.push({\n name: kernelOrScopeName,\n bytesAdded: this.state.numBytes - startingBytecount,\n totalBytesSnapshot: this.state.numBytes,\n tensorsAdded: this.state.numTensors - startingNumTensors,\n totalTensorsSnapshot: this.state.numTensors,\n inputShapes: Object.keys(inputs).map(key => inputs[key] != null ? inputs[key].shape : null),\n outputShapes: outputs.map(item => item.shape),\n kernelTimeMs: kernelProfile.timeMs,\n extraInfo: kernelProfile.extraInfo\n });\n }\n return (Array.isArray(out) ? outputs : outputs[0]);\n }\n /**\n * Saves tensors used in forward mode for use in backward mode.\n *\n * @param tensors the list of tensors to save.\n */\n saveTensorsForBackwardMode(tensors) {\n const saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n return saved;\n }\n /**\n * Returns a list of tensors to save for a given gradient calculation.\n *\n * @param kernelName name of kernel to look up gradient for.\n * @param inputs a map of input tensors.\n * @param outputs an array of output tensors from forward mode of kernel.\n */\n getTensorsForGradient(kernelName, inputs, outputs) {\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n const inputsToSave = gradConfig.inputsToSave || [];\n const outputsToSave = gradConfig.outputsToSave || [];\n // If saveAllInputs is true, all inputs will be saved. Otherwise, inputs\n // specified in inputsToSave will be saved.\n let inputTensorsToSave;\n if (gradConfig.saveAllInputs) {\n util.assert(Array.isArray(inputs), () => 'saveAllInputs is true, expected inputs to be an array.');\n inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]);\n }\n else {\n inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]);\n }\n const outputTensorsToSave = outputs.filter((_, i) => outputsToSave[i]);\n return inputTensorsToSave.concat(outputTensorsToSave);\n }\n // We return an empty list rather than throw an error because the kernel we\n // are looking up may not actually be relevant to backproping through the\n // overall function\n //\n // See 'does not error if irrelevant (pruned) ops are missing grads' test\n // in gradients_test.ts for an example.\n return [];\n }\n /**\n * Internal method used by public APIs for tensor creation. Makes a new\n * tensor with the provided shape, dtype and values. It always\n * creates a new data id and writes the values to the underlying backend.\n */\n makeTensor(values, shape, dtype, backend) {\n if (values == null) {\n throw new Error('Values passed to engine.makeTensor() are null');\n }\n dtype = dtype || 'float32';\n backend = backend || this.backend;\n let backendVals = values;\n if (dtype === 'string' && util.isString(values[0])) {\n backendVals = values.map(d => util.encodeString(d));\n }\n const dataId = backend.write(backendVals, shape, dtype);\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n // Count bytes for string tensors.\n if (dtype === 'string') {\n const info = this.state.tensorInfo.get(dataId);\n const newBytes = bytesFromStringArray(backendVals);\n this.state.numBytes += newBytes - info.bytes;\n info.bytes = newBytes;\n }\n return t;\n }\n /**\n * Internal method used by backends. Makes a new tensor\n * that is a wrapper around an existing data id. It doesn't create\n * a new data id, only increments the ref count used in memory tracking.\n * @deprecated\n */\n makeTensorFromDataId(dataId, shape, dtype, backend) {\n dtype = dtype || 'float32';\n const tensorInfo = { dataId, shape, dtype };\n return this.makeTensorFromTensorInfo(tensorInfo, backend);\n }\n /**\n * Internal method used by backends. Makes a new tensor that is a wrapper\n * around an existing data id in TensorInfo. It doesn't create a new data id,\n * only increments the ref count used in memory tracking.\n */\n makeTensorFromTensorInfo(tensorInfo, backend) {\n const { dataId, shape, dtype } = tensorInfo;\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n return t;\n }\n makeVariable(initialValue, trainable = true, name, dtype) {\n name = name || this.nextVariableId().toString();\n if (dtype != null && dtype !== initialValue.dtype) {\n initialValue = initialValue.cast(dtype);\n }\n const v = new Variable(initialValue, trainable, name, this.nextTensorId());\n if (this.state.registeredVariables[v.name] != null) {\n throw new Error(`Variable with name ${v.name} was already registered`);\n }\n this.state.registeredVariables[v.name] = v;\n this.incRef(v, this.backend);\n return v;\n }\n trackTensor(a, backend) {\n this.state.numTensors++;\n if (a.dtype === 'string') {\n this.state.numStringTensors++;\n }\n // Bytes for complex numbers are counted by their components. Bytes for\n // string tensors are counted when writing values.\n let bytes = 0;\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n bytes = a.size * util.bytesPerElement(a.dtype);\n }\n this.state.numBytes += bytes;\n if (!this.state.tensorInfo.has(a.dataId)) {\n this.state.numDataBuffers++;\n this.state.tensorInfo.set(a.dataId, {\n backend: backend || this.backend,\n dtype: a.dtype,\n shape: a.shape,\n bytes\n });\n }\n if (!(a instanceof Variable)) {\n this.track(a);\n }\n }\n // Track the tensor by dataId and increase the refCount for the dataId in the\n // backend.\n // TODO(pyu10055): This is currently used by makeVariable method, to increase\n // refCount on the backend for the dataId. It can potentially be replaced with\n // Identity op indead of calling backend directly.\n incRef(a, backend) {\n this.trackTensor(a, backend);\n this.backend.incRef(a.dataId);\n }\n removeDataId(dataId, backend) {\n if (this.state.tensorInfo.has(dataId) &&\n this.state.tensorInfo.get(dataId).backend === backend) {\n this.state.tensorInfo.delete(dataId);\n this.state.numDataBuffers--;\n }\n }\n disposeTensor(a) {\n if (!this.state.tensorInfo.has(a.dataId)) {\n return;\n }\n const info = this.state.tensorInfo.get(a.dataId);\n this.state.numTensors--;\n if (a.dtype === 'string') {\n this.state.numStringTensors--;\n this.state.numBytes -= info.bytes;\n }\n // Don't count bytes for complex numbers as they are counted by their\n // components.\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n const bytes = a.size * util.bytesPerElement(a.dtype);\n this.state.numBytes -= bytes;\n }\n // Remove the reference to dataId if backend dispose the data successfully\n if (info.backend.disposeData(a.dataId)) {\n this.removeDataId(a.dataId, info.backend);\n }\n // TODO(nsthorat): Construct an error and save the stack trace for\n // debugging when in debug mode. Creating a stack trace is too expensive\n // to do unconditionally.\n }\n disposeVariables() {\n for (const varName in this.state.registeredVariables) {\n const v = this.state.registeredVariables[varName];\n this.disposeVariable(v);\n }\n }\n disposeVariable(v) {\n this.disposeTensor(v);\n if (this.state.registeredVariables[v.name] != null) {\n delete this.state.registeredVariables[v.name];\n }\n }\n memory() {\n const info = this.backend.memory();\n info.numTensors = this.state.numTensors;\n info.numDataBuffers = this.state.numDataBuffers;\n info.numBytes = this.state.numBytes;\n if (this.state.numStringTensors > 0) {\n info.unreliable = true;\n if (info.reasons == null) {\n info.reasons = [];\n }\n info.reasons.push('Memory usage by string tensors is approximate ' +\n '(2 bytes per character)');\n }\n return info;\n }\n async profile(query) {\n this.state.profiling = true;\n const startBytes = this.state.numBytes;\n const startNumTensors = this.state.numTensors;\n this.state.activeProfile.kernels = [];\n this.state.activeProfile.result = await query();\n this.state.profiling = false;\n this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map(d => d.totalBytesSnapshot));\n this.state.activeProfile.newBytes = this.state.numBytes - startBytes;\n this.state.activeProfile.newTensors =\n this.state.numTensors - startNumTensors;\n for (const kernel of this.state.activeProfile.kernels) {\n kernel.kernelTimeMs = await kernel.kernelTimeMs;\n kernel.extraInfo = await kernel.extraInfo;\n }\n return this.state.activeProfile;\n }\n isTapeOn() {\n return this.state.gradientDepth > 0 && this.state.kernelDepth === 0;\n }\n addTapeNode(kernelName, inputs, outputs, gradientsFunc, saved, attrs) {\n const tapeNode = { id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved };\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n gradientsFunc = gradConfig.gradFunc;\n }\n if (gradientsFunc != null) {\n tapeNode.gradient = (dys) => {\n // TODO(smilkov): To optimize back-prop, pass dys that are not used in\n // the backprop graph to the user as null instead of zeros\n dys = dys.map((dy, i) => {\n if (dy == null) {\n const output = outputs[i];\n const vals = util.makeZerosTypedArray(output.size, output.dtype);\n return this.makeTensor(vals, output.shape, output.dtype);\n }\n return dy;\n });\n // Grad functions of ops with single outputs expect a dy, while ops\n // with multiple outputs expect dys (array of dy).\n return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs);\n };\n }\n this.state.activeTape.push(tapeNode);\n }\n keep(result) {\n result.kept = true;\n return result;\n }\n startTape() {\n if (this.state.gradientDepth === 0) {\n this.state.activeTape = [];\n }\n this.state.gradientDepth++;\n }\n endTape() {\n this.state.gradientDepth--;\n }\n /**\n * Start a scope. Use this with endScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n startScope(name) {\n const scopeInfo = {\n track: [],\n name: 'unnamed scope',\n id: this.state.nextScopeId++\n };\n if (name) {\n scopeInfo.name = name;\n }\n this.state.scopeStack.push(scopeInfo);\n this.state.activeScope = scopeInfo;\n }\n /**\n * End a scope. Use this with startScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n endScope(result) {\n const tensorsToTrackInParent = getTensorsInContainer(result);\n const tensorsToTrackInParentSet = new Set(tensorsToTrackInParent.map(t => t.id));\n // Dispose the arrays tracked in this scope.\n for (let i = 0; i < this.state.activeScope.track.length; i++) {\n const tensor = this.state.activeScope.track[i];\n if (!tensor.kept && !tensorsToTrackInParentSet.has(tensor.id)) {\n tensor.dispose();\n }\n }\n const oldScope = this.state.scopeStack.pop();\n this.state.activeScope = this.state.scopeStack.length === 0 ?\n null :\n this.state.scopeStack[this.state.scopeStack.length - 1];\n // Track the current result in the parent scope.\n tensorsToTrackInParent.forEach(tensor => {\n // Only track the tensor if was allocated in the inner scope and is not\n // globally kept.\n if (!tensor.kept && tensor.scopeId === oldScope.id) {\n this.track(tensor);\n }\n });\n }\n /**\n * Returns gradients of `f` with respect to each of the `xs`. The gradients\n * returned are of the same length as `xs`, but some might be null if `f`\n * was not a function of that `x`. It also takes optional dy to multiply the\n * gradient, which defaults to `1`.\n */\n gradients(f, xs, dy, allowNoGradients = false) {\n util.assert(xs.length > 0, () => 'gradients() received an empty list of xs.');\n if (dy != null && dy.dtype !== 'float32') {\n throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`);\n }\n const y = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy('forward', f));\n util.assert(y instanceof Tensor, () => 'The result y returned by f() must be a tensor.');\n // Filter out the nodes that don't connect x => y.\n const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y);\n if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) {\n throw new Error('Cannot compute gradient of y=f(x) with respect to x. Make sure ' +\n 'that the f you passed encloses all operations that lead from x ' +\n 'to y.');\n }\n return this.tidy('backward', () => {\n const accumulatedGradientMap = {};\n accumulatedGradientMap[y.id] = (dy == null) ? ones(y.shape) : dy;\n // Backprop gradients through the filtered nodes.\n backpropagateGradients(accumulatedGradientMap, filteredTape, \n // Pass the tidy function to avoid circular dep with `tape.ts`.\n f => this.tidy(f), \n // Pass an add function to avoide a circular dep with `tape.ts`.\n add);\n const grads = xs.map(x => accumulatedGradientMap[x.id]);\n if (this.state.gradientDepth === 0) {\n // This means that we are not computing higher-order gradients\n // and can clean up the tape.\n this.state.activeTape.forEach(node => {\n for (const tensor of node.saved) {\n tensor.dispose();\n }\n });\n this.state.activeTape = null;\n }\n return { value: y, grads };\n });\n }\n customGrad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in customGrad(f) must be a function.');\n return (...inputs) => {\n util.assert(inputs.every(t => t instanceof Tensor), () => 'The args passed in customGrad(f)(x1, x2,...) must all be ' +\n 'tensors');\n let res;\n const inputMap = {};\n inputs.forEach((input, i) => {\n inputMap[i] = input;\n });\n const forwardFunc = (_, save) => {\n res = f(...[...inputs, save]);\n util.assert(res.value instanceof Tensor, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.value` is a tensor');\n util.assert(util.isFunction(res.gradFunc), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function.');\n return res.value;\n };\n const backwardsFunc = (dy, saved) => {\n const gradRes = res.gradFunc(dy, saved);\n const grads = Array.isArray(gradRes) ? gradRes : [gradRes];\n util.assert(grads.length === inputs.length, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'the same number of tensors as inputs passed to f(...).');\n util.assert(grads.every(t => t instanceof Tensor), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'a list of only tensors.');\n const gradMap = {};\n grads.forEach((grad, i) => {\n gradMap[i] = () => grad;\n });\n return gradMap;\n };\n return this.runKernelFunc({\n forwardFunc,\n backwardsFunc,\n inputs: inputMap,\n });\n };\n }\n readSync(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.readSync(dataId);\n }\n read(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.read(dataId);\n }\n readToGPU(dataId, options) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.readToGPU(dataId, options);\n }\n async time(query) {\n const start = now();\n const timingInfo = await this.backend.time(query);\n timingInfo.wallMs = now() - start;\n return timingInfo;\n }\n /**\n * Tracks a Tensor in the current scope to be automatically cleaned up\n * when the current scope ends, and returns the value.\n *\n * @param result The Tensor to track in the current scope.\n */\n track(result) {\n if (this.state.activeScope != null) {\n result.scopeId = this.state.activeScope.id;\n this.state.activeScope.track.push(result);\n }\n return result;\n }\n get registeredVariables() {\n return this.state.registeredVariables;\n }\n /**\n * Resets the engine state. Removes all backends but does not remove\n * registered backend factories.\n */\n reset() {\n // Make any pending promise obsolete.\n this.pendingBackendInitId++;\n this.state.dispose();\n this.ENV.reset();\n this.state = new EngineState();\n for (const backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n this.backendName = null;\n this.backendInstance = null;\n this.pendingBackendInit = null;\n }\n}\nEngine.nextTensorId = 0;\nEngine.nextVariableId = 0;\nexport { Engine };\nfunction ones(shape) {\n const values = makeOnesTypedArray(sizeFromShape(shape), 'float32');\n return ENGINE.makeTensor(values, shape, 'float32');\n}\nexport function getOrMakeEngine() {\n const ns = getGlobalNamespace();\n if (ns._tfengine == null) {\n const environment = new Environment(ns);\n ns._tfengine = new Engine(environment);\n }\n setEnvironmentGlobal(ns._tfengine.ENV);\n // Tell the current tensor interface that the global engine is responsible\n // for tracking.\n setTensorTracker(() => ns._tfengine);\n return ns._tfengine;\n}\nexport const ENGINE = getOrMakeEngine();\n/**\n * A implementation of the add op for use within engine and tape.\n *\n * This allows us to avoid a circular dependency between add.ts and engine.\n * It is exported to be available in tape tests.\n */\nexport function add(a, b) {\n // We duplicate Add here to avoid a circular dependency with add.ts.\n const inputs = { a, b };\n return ENGINE.runKernel(Add, inputs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUErQixhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RyxPQUFPLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQWdCLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQVcsTUFBTSxRQUFRLENBQUM7QUFDOUUsT0FBTyxFQUE0QixnQkFBZ0IsRUFBRSxNQUFNLEVBQWlCLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUd0RyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUMsTUFBTSxRQUFRLENBQUM7QUF1RXBGLFNBQVMsNEJBQTRCLENBRWpDLGdCQUNnQztJQUVsQyxPQUFRLGdCQUFrRCxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sV0FBVztJQUFqQjtRQUNFLHVDQUF1QztRQUN2Qyx3QkFBbUIs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SztTQXRVdkIsTUFBTTtBQTRsQ25CLFNBQVMsSUFBSSxDQUFDLEtBQWU7SUFDM0IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLEVBQUUsR0FBRyxrQkFBa0IsRUFBb0MsQ0FBQztJQUNsRSxJQUFJLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDeEM7SUFDRCxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZDLDBFQUEwRTtJQUMxRSxnQkFBZ0I7SUFDaEIsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO0FBRXhDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUN0QyxvRUFBb0U7SUFDcEUsTUFBTSxNQUFNLEdBQUcsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7SUFDdEIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCYWNrZW5kVGltaW5nSW5mbywgRGF0YU1vdmVyLCBLZXJuZWxCYWNrZW5kfSBmcm9tICcuL2JhY2tlbmRzL2JhY2tlbmQnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgc2V0RW52aXJvbm1lbnRHbG9iYWx9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtnZXRHbG9iYWxOYW1lc3BhY2V9IGZyb20gJy4vZ2xvYmFsX3V0aWwnO1xuaW1wb3J0IHtBZGQsIENhc3QsIElkZW50aXR5fSBmcm9tICcuL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQgeyBnZXRHcmFkaWVudCwgZ2V0S2VybmVsLCBnZXRLZXJuZWxzRm9yQmFja2VuZCwgR3JhZEZ1bmMsIE5hbWVkQXR0ck1hcCB9IGZyb20gJy4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuL3RlbnNvcl9pbmZvJztcbmltcG9ydCAqIGFzIGxvZyBmcm9tICcuL2xvZyc7XG5pbXBvcnQge0tlcm5lbFByb2ZpbGUsIFByb2ZpbGVyfSBmcm9tICcuL3Byb2ZpbGVyJztcbmltcG9ydCB7YmFja3Byb3BhZ2F0ZUdyYWRpZW50cywgZ2V0RmlsdGVyZWROb2Rlc1hUb1ksIFRhcGVOb2RlfSBmcm9tICcuL3RhcGUnO1xuaW1wb3J0IHtEYXRhVG9HUFVPcHRpb25zLCBHUFVEYXRhLCBzZXRUZW5zb3JUcmFja2VyLCBUZW5zb3IsIFRlbnNvclRyYWNrZXIsIFZhcmlhYmxlfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge0RhdGFJZH0gZnJvbSAnLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXAsIE5hbWVkVmFyaWFibGVNYXAsIFRlbnNvckNvbnRhaW5lcn0gZnJvbSAnLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtnZXRUZW5zb3JzSW5Db250YWluZXJ9IGZyb20gJy4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtCYWNrZW5kVmFsdWVzLCBEYXRhVHlwZSwgRGF0YVZhbHVlc30gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2J5dGVzRnJvbVN0cmluZ0FycmF5LCBtYWtlT25lc1R5cGVkQXJyYXksIG5vdywgc2l6ZUZyb21TaGFwZX0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgYW4gb3V0cHV0LiBUaGUgc2F2ZSBmdW5jdGlvbiBpcyBmb3Igc2F2aW5nIHRlbnNvcnNcbiAqIGNvbXB1dGVkIGluIHRoZSBmb3J3YXJkIHBhc3MsIHRoYXQgd2UgbmVlZCBpbiB0aGUgYmFja3dhcmQgcGFzcy5cbiAqL1xuZXhwb3J0IHR5cGUgRm9yd2FyZEZ1bmM8VD4gPSAoYmFja2VuZDogS2VybmVsQmFja2VuZCwgc2F2ZT86IEdyYWRTYXZlRnVuYykgPT4gVDtcblxuLyoqXG4gKiBAZG9jYWxpYXMgKGE6IFRlbnNvciwgYjogVGVuc29yLC4uLiwgc2F2ZT86IEZ1bmN0aW9uKSA9PiB7XG4gKiAgIHZhbHVlOiBUZW5zb3IsXG4gKiAgIGdyYWRGdW5jOiAoZHk6IFRlbnNvciwgc2F2ZWQ/OiBOYW1lZFRlbnNvck1hcCkgPT4gVGVuc29yIHwgVGVuc29yW11cbiAqIH1cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tR3JhZGllbnRGdW5jPFQgZXh0ZW5kcyBUZW5zb3I+ID1cbiAgICAoLi4uaW5wdXRzOiBBcnJheTxUZW5zb3J8R3JhZFNhdmVGdW5jPikgPT4ge1xuICAgICAgdmFsdWU6IFQ7XG4gICAgICBncmFkRnVuYzogKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IFRlbnNvciB8IFRlbnNvcltdO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIE1lbW9yeUluZm8gPSB7XG4gIG51bVRlbnNvcnM6IG51bWJlcjsgbnVtRGF0YUJ1ZmZlcnM6IG51bWJlcjsgbnVtQnl0ZXM6IG51bWJlcjtcbiAgdW5yZWxpYWJsZT86IGJvb2xlYW47IHJlYXNvbnM6IHN0cmluZ1tdO1xufTtcblxudHlwZSBLZXJuZWxJbmZvID0ge1xuICBuYW1lOiBzdHJpbmc7IGJ5dGVzQWRkZWQ6IG51bWJlcjsgdG90YWxCeXRlc1NuYXBzaG90OiBudW1iZXI7XG4gIHRlbnNvcnNBZGRlZDogbnVtYmVyO1xuICB0b3RhbFRlbnNvcnNTbmFwc2hvdDogbnVtYmVyO1xuICBpbnB1dFNoYXBlczogbnVtYmVyW11bXTtcbiAgb3V0cHV0U2hhcGVzOiBudW1iZXJbXVtdO1xuICBrZXJuZWxUaW1lTXM6IG51bWJlciB8IHtlcnJvcjogc3RyaW5nfSB8IFByb21pc2U8bnVtYmVyfHtlcnJvcjogc3RyaW5nfT47XG4gIGV4dHJhSW5mbzogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZmlsZUluZm8gPSB7XG4gIG5ld0J5dGVzOiBudW1iZXI7IG5ld1RlbnNvcnM6IG51bWJlcjsgcGVha0J5dGVzOiBudW1iZXI7XG4gIGtlcm5lbHM6IEtlcm5lbEluZm9bXTtcbiAgcmVzdWx0OiBUZW5zb3JDb250YWluZXI7XG4gIGtlcm5lbE5hbWVzOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltaW5nSW5mbyBleHRlbmRzIEJhY2tlbmRUaW1pbmdJbmZvIHtcbiAgd2FsbE1zOiBudW1iZXI7XG59XG5cbi8qKiBAZG9jYWxpYXMgRnVuY3Rpb24gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRm48VCBleHRlbmRzIFRlbnNvckNvbnRhaW5lcj4gPSAoKSA9PiBUO1xuXG5pbnRlcmZhY2UgU2NvcGVTdGF0ZSB7XG4gIHRyYWNrOiBUZW5zb3JbXTtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVnaXN0ZXJlZEtlcm5lbEludm9jYXRpb248SSBleHRlbmRzIE5hbWVkVGVuc29yTWFwPiB7XG4gIGtlcm5lbE5hbWU6IHN0cmluZztcbiAgaW5wdXRzOiBJO1xuICBhdHRycz86IE5hbWVkQXR0ck1hcDtcbn1cblxuaW50ZXJmYWNlIEN1c3RvbUdyYWRLZXJuZWxJbnZvY2F0aW9uPFQgZXh0ZW5kcyBUZW5zb3J8VGVuc29yW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgZXh0ZW5kcyBOYW1lZFRlbnNvck1hcD4ge1xuICBmb3J3YXJkRnVuYzogRm9yd2FyZEZ1bmM8VD47XG4gIGJhY2t3YXJkc0Z1bmM6IChkeTogVCwgc2F2ZWQ6IFRlbnNvcltdKSA9PiB7XG4gICAgW1AgaW4ga2V5b2YgSV06ICgpID0+IElbUF1cbiAgfTtcbiAgaW5wdXRzOiBJO1xuICBhdHRycz86IE5hbWVkQXR0ck1hcDtcbn1cblxuZnVuY3Rpb24gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxUIGV4dGVuZHMgVGVuc29yfFRlbnNvcltdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSSBleHRlbmRzIE5hbWVkVGVuc29yTWFwPihcbiAgICBrZXJuZWxJbnZvY2F0aW9uOiBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPnxcbiAgICBDdXN0b21HcmFkS2VybmVsSW52b2NhdGlvbjxULCBJPik6XG4gICAga2VybmVsSW52b2NhdGlvbiBpcyBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPiB7XG4gIHJldHVybiAoa2VybmVsSW52b2NhdGlvbiBhcyBSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbjxJPikua2VybmVsTmFtZSAhPSBudWxsO1xufVxuXG5jbGFzcyBFbmdpbmVTdGF0ZSB7XG4gIC8vIFB1YmxpYyBzaW5jZSBvcHRpbWl6ZXJzIHdpbGwgdXNlIGl0LlxuICByZWdpc3RlcmVkVmFyaWFibGVzOiBOYW1lZFZhcmlhYmxlTWFwID0ge307XG5cbiAgbmV4dFRhcGVOb2RlSWQgPSAwO1xuICBudW1CeXRlcyA9IDA7XG4gIG51bVRlbnNvcnMgPSAwO1xuICBudW1TdHJpbmdUZW5zb3JzID0gMDtcbiAgbnVtRGF0YUJ1ZmZlcnMgPSAwO1xuXG4gIGFjdGl2ZVRhcGU6IFRhcGVOb2RlW107XG4gIC8vIE51bWJlciBvZiBuZXN0ZWQgdGYuZ3JhZCgpIHN0YXRlbWVudHMgd2hlbiBjb21wdXRpbmcgaGlnaGVyLW9yZGVyXG4gIC8vIGdyYWRpZW50cy4gRS5nLiBgMWAgZm9yIGZpcnN0LW9yZGVyIGdyYWRpZW50cyBhbmQgYDJgIGZvciBzZWNvbmQtb3JkZXJcbiAgLy8gZ3JhZGllbnRzLiBVc2VkIHRvIHRyYWNrIGlmIHRoZSB0YXBlIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGEgYmFja3Byb3AuXG4gIGdyYWRpZW50RGVwdGggPSAwO1xuICAvLyBOdW1iZXIgb2YgbmVzdGVkIGtlcm5lbCBjYWxscy4gV2hlbiBrZXJuZWwgZGVwdGggaXMgZ3JlYXRlciB0aGFuIDEsIHdlIHR1cm5cbiAgLy8gb2ZmIHRoZSB0YXBlLlxuICBrZXJuZWxEZXB0aCA9IDA7XG5cbiAgLy8gS2VlcCBUZW5zb3JzIHRoYXQgcGFyYWxsZWwgdGhlIHRhcGVzLlxuICBhY3RpdmVTY29wZTogU2NvcGVTdGF0ZTtcbiAgc2NvcGVTdGFjazogU2NvcGVTdGF0ZVtdID0gW107XG4gIC8qKlxuICAgKiBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGRhdGEgbW92ZXMgZHVyaW5nIGEga2VybmVsIGV4ZWN1dGlvbi4gV2VcbiAgICogbWFpbnRhaW4gYSBzdGFjayBzaW5jZSBrZXJuZWxzIGNhbiBjYWxsIG90aGVyIGtlcm5lbHMsIHJlY3Vyc2l2ZWx5LlxuICAgKi9cbiAgbnVtRGF0YU1vdmVzU3RhY2s6IG51bWJlcltdID0gW107XG4gIG5leHRTY29wZUlkID0gMDtcblxuICB0ZW5zb3JJbmZvID0gbmV3IFdlYWtNYXA8RGF0YUlkLCB7XG4gICAgYmFja2VuZDogS2VybmVsQmFja2VuZCxcbiAgICBieXRlczogbnVtYmVyLFxuICAgIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBzaGFwZTogbnVtYmVyW11cbiAgfT4oKTtcblxuICBwcm9maWxpbmcgPSBmYWxzZTtcbiAgYWN0aXZlUHJvZmlsZTogUHJvZmlsZUluZm8gPSB7XG4gICAgbmV3Qnl0ZXM6IDAsXG4gICAgbmV3VGVuc29yczogMCxcbiAgICBwZWFrQnl0ZXM6IDAsXG4gICAga2VybmVsczogW10sXG4gICAgcmVzdWx0OiBudWxsLFxuICAgIGdldCBrZXJuZWxOYW1lcygpOlxuICAgICAgICBzdHJpbmdbXSB7XG4gICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh0aGlzLmtlcm5lbHMubWFwKGsgPT4gay5uYW1lKSkpO1xuICAgICAgICB9XG4gIH07XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlTmFtZSBpbiB0aGlzLnJlZ2lzdGVyZWRWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJpYWJsZU5hbWVdLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVuZ2luZSBpbXBsZW1lbnRzIFRlbnNvclRyYWNrZXIsIERhdGFNb3ZlciB7XG4gIHN0YXRlOiBFbmdpbmVTdGF0ZTtcbiAgYmFja2VuZE5hbWU6IHN0cmluZztcbiAgcmVnaXN0cnk6IHtbaWQ6IHN0cmluZ106IEtlcm5lbEJhY2tlbmR9ID0ge307XG4gIHJlZ2lzdHJ5RmFjdG9yeToge1xuICAgIFtpZDogc3RyaW5nXToge1xuICAgICAgZmFjdG9yeTogKCkgPT4gS2VybmVsQmFja2VuZCB8IFByb21pc2U8S2VybmVsQmFja2VuZD4sXG4gICAgICBwcmlvcml0eTogbnVtYmVyXG4gICAgfVxuICB9ID0ge307XG5cbiAgcHJpdmF0ZSBwcm9maWxlcjogUHJvZmlsZXI7XG4gIHByaXZhdGUgYmFja2VuZEluc3RhbmNlOiBLZXJuZWxCYWNrZW5kO1xuICBwcml2YXRlIHBlbmRpbmdCYWNrZW5kSW5pdDogUHJvbWlzZTxib29sZWFuPjtcbiAgcHJpdmF0ZSBwZW5kaW5nQmFja2VuZEluaXRJZCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIEVOVjogRW52aXJvbm1lbnQpIHtcbiAgICB0aGlzLnN0YXRlID0gbmV3IEVuZ2luZVN0YXRlKCk7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQmFja2VuZEluaXQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0JhY2tlbmRJbml0LnRoZW4oKCkgPT4ge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYWNrZW5kSW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3J0ZWRCYWNrZW5kcyA9IHRoaXMuZ2V0U29ydGVkQmFja2VuZHMoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkQmFja2VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGJhY2tlbmROYW1lID0gc29ydGVkQmFja2VuZHNbaV07XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSkuc3VjY2VzcztcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgaW5pdGlhbGl6ZSBhbnkgYmFja2VuZHMsIGFsbCBiYWNrZW5kIGluaXRpYWxpemF0aW9ucyBgICtcbiAgICAgICAgYGZhaWxlZC5gKTtcbiAgfVxuXG4gIGdldCBiYWNrZW5kKCk6IEtlcm5lbEJhY2tlbmQge1xuICAgIGlmICh0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEJhY2tlbmQgJyR7dGhpcy5iYWNrZW5kTmFtZX0nIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuIE1ha2UgYCArXG4gICAgICAgICAgYHN1cmUgdG8gYXdhaXQgdGYucmVhZHkoKSBvciBhd2FpdCB0Zi5zZXRCYWNrZW5kKCkgYmVmb3JlIGNhbGxpbmcgYCArXG4gICAgICAgICAgYG90aGVyIG1ldGhvZHNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmFja2VuZEluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHtuYW1lLCBhc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZHNBbmRSZXR1cm5CZXN0KCk7XG4gICAgICBpZiAoYXN5bmNJbml0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgaGlnaGVzdCBwcmlvcml0eSBiYWNrZW5kICcke25hbWV9JyBoYXMgbm90IHlldCBiZWVuIGAgK1xuICAgICAgICAgICAgYGluaXRpYWxpemVkLiBNYWtlIHN1cmUgdG8gYXdhaXQgdGYucmVhZHkoKSBvciBgICtcbiAgICAgICAgICAgIGBhd2FpdCB0Zi5zZXRCYWNrZW5kKCkgYmVmb3JlIGNhbGxpbmcgb3RoZXIgbWV0aG9kc2ApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRCYWNrZW5kKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kSW5zdGFuY2U7XG4gIH1cblxuICBiYWNrZW5kTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZ2lzdHJ5RmFjdG9yeSk7XG4gIH1cblxuICBmaW5kQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTogS2VybmVsQmFja2VuZCB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeSkpIHtcbiAgICAgIC8vIElmIHRoZSBiYWNrZW5kIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIGJ1dCB3ZSBoYXZlIGEgcmVnaXN0cnkgZW50cnkgZm9yXG4gICAgICAvLyBpdCwgaW5pdGlhbGl6ZSBpdCBhbmQgcmV0dXJuIGl0LlxuICAgICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnlGYWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IHthc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICAgIGlmIChhc3luY0luaXQpIHtcbiAgICAgICAgICAvLyBCYWNrZW5kIGlzIG5vdCByZWFkeSB5ZXQuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV07XG4gIH1cblxuICBmaW5kQmFja2VuZEZhY3RvcnkoYmFja2VuZE5hbWU6IHN0cmluZyk6XG4gICAgICAoKSA9PiBLZXJuZWxCYWNrZW5kIHwgUHJvbWlzZTxLZXJuZWxCYWNrZW5kPiB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeUZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnlGYWN0b3J5W2JhY2tlbmROYW1lXS5mYWN0b3J5O1xuICB9XG5cbiAgcmVnaXN0ZXJCYWNrZW5kKFxuICAgICAgYmFja2VuZE5hbWU6IHN0cmluZyxcbiAgICAgIGZhY3Rvcnk6ICgpID0+IEtlcm5lbEJhY2tlbmQgfCBQcm9taXNlPEtlcm5lbEJhY2tlbmQ+LFxuICAgICAgcHJpb3JpdHkgPSAxKTogYm9vbGVhbiB7XG4gICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnlGYWN0b3J5KSB7XG4gICAgICBsb2cud2FybihcbiAgICAgICAgICBgJHtiYWNrZW5kTmFtZX0gYmFja2VuZCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkLiBgICtcbiAgICAgICAgICBgUmV1c2luZyBleGlzdGluZyBiYWNrZW5kIGZhY3RvcnkuYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0cnlGYWN0b3J5W2JhY2tlbmROYW1lXSA9IHtmYWN0b3J5LCBwcmlvcml0eX07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzZXRCYWNrZW5kKGJhY2tlbmROYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQmFja2VuZCBuYW1lICcke2JhY2tlbmROYW1lfScgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG4gICAgfVxuICAgIHRoaXMuYmFja2VuZE5hbWUgPSBiYWNrZW5kTmFtZTtcbiAgICBpZiAodGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0gPT0gbnVsbCkge1xuICAgICAgdGhpcy5iYWNrZW5kSW5zdGFuY2UgPSBudWxsO1xuICAgICAgY29uc3Qge3N1Y2Nlc3MsIGFzeW5jSW5pdH0gPSB0aGlzLmluaXRpYWxpemVCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFzeW5jSW5pdCA/IGF3YWl0IHN1Y2Nlc3MgOiBzdWNjZXNzO1xuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJhY2tlbmRJbnN0YW5jZSA9IHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdO1xuICAgIHRoaXMuc2V0dXBSZWdpc3RlcmVkS2VybmVscygpO1xuICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlci5cbiAgICB0aGlzLnByb2ZpbGVyID0gbmV3IFByb2ZpbGVyKHRoaXMuYmFja2VuZEluc3RhbmNlKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlZ2lzdGVyZWRLZXJuZWxzKCk6IHZvaWQge1xuICAgIGNvbnN0IGtlcm5lbHMgPSBnZXRLZXJuZWxzRm9yQmFja2VuZCh0aGlzLmJhY2tlbmROYW1lKTtcbiAgICBrZXJuZWxzLmZvckVhY2goa2VybmVsID0+IHtcbiAgICAgIGlmIChrZXJuZWwuc2V0dXBGdW5jICE9IG51bGwpIHtcbiAgICAgICAga2VybmVsLnNldHVwRnVuYyh0aGlzLmJhY2tlbmRJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VSZWdpc3RlcmVkS2VybmVscyhiYWNrZW5kTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2VybmVscyA9IGdldEtlcm5lbHNGb3JCYWNrZW5kKGJhY2tlbmROYW1lKTtcbiAgICBrZXJuZWxzLmZvckVhY2goa2VybmVsID0+IHtcbiAgICAgIGlmIChrZXJuZWwuZGlzcG9zZUZ1bmMgIT0gbnVsbCkge1xuICAgICAgICBrZXJuZWwuZGlzcG9zZUZ1bmModGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgYmFja2VuZCBieSBsb29raW5nIHVwIHRoZSBiYWNrZW5kIG5hbWUgaW4gdGhlIGZhY3RvcnlcbiAgICogcmVnaXN0cnkgYW5kIGNhbGxpbmcgdGhlIGZhY3RvcnkgbWV0aG9kLiBSZXR1cm5zIGEgYm9vbGVhbiByZXByZXNlbnRpbmdcbiAgICogd2hldGhlciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJhY2tlbmQgc3VjZWVkZWQuIFRocm93cyBhbiBlcnJvciBpZlxuICAgKiB0aGVyZSBpcyBubyBiYWNrZW5kIGluIHRoZSBmYWN0b3J5IHJlZ2lzdHJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTpcbiAgICAgIHtzdWNjZXNzOiBib29sZWFufFByb21pc2U8Ym9vbGVhbj4sIGFzeW5jSW5pdDogYm9vbGVhbn0ge1xuICAgIGNvbnN0IHJlZ2lzdHJ5RmFjdG9yeUVudHJ5ID0gdGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdO1xuICAgIGlmIChyZWdpc3RyeUZhY3RvcnlFbnRyeSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBpbml0aWFsaXplIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0sIG5vIHJlZ2lzdHJhdGlvbiBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFja2VuZCA9IHJlZ2lzdHJ5RmFjdG9yeUVudHJ5LmZhY3RvcnkoKTtcbiAgICAgIC8qIFRlc3QgaWYgdGhlIGZhY3RvcnkgcmV0dXJucyBhIHByb21pc2UuXG4gICAgICBEb25lIGluIGEgbW9yZSBsaWJlcmFsIHdheSB0aGFuXG4gICAgICBwcmV2aW91cyAnUHJvbWlzZS5yZXNvbHZlKGJhY2tlbmQpPT09YmFja2VuZCdcbiAgICAgIGFzIHdlIG5lZWRlZCB0byBhY2NvdW50IGZvciBjdXN0b20gUHJvbWlzZVxuICAgICAgaW1wbGVtZW50YXRpb25zIChlLmcuIEFuZ3VsYXIpICovXG4gICAgICBpZiAoYmFja2VuZCAmJiAhKGJhY2tlbmQgaW5zdGFuY2VvZiBLZXJuZWxCYWNrZW5kKSAmJlxuICAgICAgICAgIHR5cGVvZiBiYWNrZW5kLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZUlkID0gKyt0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdElkO1xuICAgICAgICBjb25zdCBzdWNjZXNzID1cbiAgICAgICAgICAgIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAudGhlbihiYWNrZW5kSW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT3V0ZGF0ZWQgcHJvbWlzZS4gQW5vdGhlciBiYWNrZW5kIHdhcyBzZXQgaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2VJZCA8IHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV0gPSBiYWNrZW5kSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT3V0ZGF0ZWQgcHJvbWlzZS4gQW5vdGhlciBiYWNrZW5kIHdhcyBzZXQgaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2VJZCA8IHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQmFja2VuZEluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oYEluaXRpYWxpemF0aW9uIG9mIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0gZmFpbGVkYCk7XG4gICAgICAgICAgICAgICAgICBsb2cud2FybihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IHN1Y2Nlc3M7XG4gICAgICAgIHJldHVybiB7c3VjY2VzcywgYXN5bmNJbml0OiB0cnVlfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdID0gYmFja2VuZCBhcyBLZXJuZWxCYWNrZW5kO1xuICAgICAgICByZXR1cm4ge3N1Y2Nlc3M6IHRydWUsIGFzeW5jSW5pdDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEluaXRpYWxpemF0aW9uIG9mIGJhY2tlbmQgJHtiYWNrZW5kTmFtZX0gZmFpbGVkYCk7XG4gICAgICBsb2cud2FybihlcnIuc3RhY2sgfHwgZXJyLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHtzdWNjZXNzOiBmYWxzZSwgYXN5bmNJbml0OiBmYWxzZX07XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQmFja2VuZChiYWNrZW5kTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCEoYmFja2VuZE5hbWUgaW4gdGhpcy5yZWdpc3RyeUZhY3RvcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFja2VuZE5hbWV9IGJhY2tlbmQgbm90IGZvdW5kIGluIHJlZ2lzdHJ5YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09PSBiYWNrZW5kTmFtZSAmJiB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCAhPSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBhIHBlbmRpbmcgcHJvbWlzZSBvZiB0aGUgYmFja2VuZCB3ZSB3YW50IHRvIHJlbW92ZS4gTWFrZSBpdFxuICAgICAgLy8gb2Jzb2xldGUuXG4gICAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdElkKys7XG4gICAgfVxuXG4gICAgaWYgKGJhY2tlbmROYW1lIGluIHRoaXMucmVnaXN0cnkpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVJlZ2lzdGVyZWRLZXJuZWxzKGJhY2tlbmROYW1lKTtcbiAgICAgIHRoaXMucmVnaXN0cnlbYmFja2VuZE5hbWVdLmRpc3Bvc2UoKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnJlZ2lzdHJ5W2JhY2tlbmROYW1lXTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5yZWdpc3RyeUZhY3RvcnlbYmFja2VuZE5hbWVdO1xuXG4gICAgLy8gVW5zZXQgdGhlIGJhY2tlbmQgaWYgaXQgaXMgYWN0aXZlLlxuICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09PSBiYWNrZW5kTmFtZSkge1xuICAgICAgdGhpcy5wZW5kaW5nQmFja2VuZEluaXQgPSBudWxsO1xuICAgICAgdGhpcy5iYWNrZW5kTmFtZSA9IG51bGw7XG4gICAgICB0aGlzLmJhY2tlbmRJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTb3J0ZWRCYWNrZW5kcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVnaXN0cnlGYWN0b3J5KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYmFja2VuZCBmb3VuZCBpbiByZWdpc3RyeS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0cnlGYWN0b3J5KS5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgLy8gSGlnaGVzdCBwcmlvcml0eSBjb21lcyBmaXJzdC5cbiAgICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5RmFjdG9yeVtiXS5wcmlvcml0eSAtXG4gICAgICAgICAgdGhpcy5yZWdpc3RyeUZhY3RvcnlbYV0ucHJpb3JpdHk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVCYWNrZW5kc0FuZFJldHVybkJlc3QoKTpcbiAgICAgIHtuYW1lOiBzdHJpbmcsIGFzeW5jSW5pdDogYm9vbGVhbn0ge1xuICAgIGNvbnN0IHNvcnRlZEJhY2tlbmRzID0gdGhpcy5nZXRTb3J0ZWRCYWNrZW5kcygpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRCYWNrZW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYmFja2VuZE5hbWUgPSBzb3J0ZWRCYWNrZW5kc1tpXTtcbiAgICAgIGNvbnN0IHtzdWNjZXNzLCBhc3luY0luaXR9ID0gdGhpcy5pbml0aWFsaXplQmFja2VuZChiYWNrZW5kTmFtZSk7XG4gICAgICBpZiAoYXN5bmNJbml0IHx8IHN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtuYW1lOiBiYWNrZW5kTmFtZSwgYXN5bmNJbml0fTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGluaXRpYWxpemUgYW55IGJhY2tlbmRzLCBhbGwgYmFja2VuZCBpbml0aWFsaXphdGlvbnMgYCArXG4gICAgICAgIGBmYWlsZWQuYCk7XG4gIH1cblxuICBtb3ZlRGF0YShiYWNrZW5kOiBLZXJuZWxCYWNrZW5kLCBkYXRhSWQ6IERhdGFJZCkge1xuICAgIGNvbnN0IGluZm8gPSB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCk7XG4gICAgY29uc3Qgc3JjQmFja2VuZCA9IGluZm8uYmFja2VuZDtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnJlYWRTeW5jKGRhdGFJZCk7XG4gICAgY29uc3QgcmVmQ291bnQgPSBzcmNCYWNrZW5kLnJlZkNvdW50KGRhdGFJZCk7XG4gICAgLy8gRGVsZXRlIHRoZSB0ZW5zb3IgZnJvbSB0aGUgb2xkIGJhY2tlbmQgYW5kIG1vdmUgaXQgdG8gdGhlIG5ld1xuICAgIC8vIGJhY2tlbmQuXG4gICAgc3JjQmFja2VuZC5kaXNwb3NlRGF0YShkYXRhSWQsIHRydWUpO1xuICAgIGluZm8uYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgYmFja2VuZC5tb3ZlKGRhdGFJZCwgdmFsdWVzLCBpbmZvLnNoYXBlLCBpbmZvLmR0eXBlLCByZWZDb3VudCk7XG4gICAgaWYgKHRoaXMuc2hvdWxkQ2hlY2tGb3JNZW1MZWFrcygpKSB7XG4gICAgICAvLyBUcmFjayB0aGUgbnVtYmVyIG9mIG1vdmVzIGR1cmluZyBhIGtlcm5lbCBleGVjdXRpb24gdG8gY29ycmVjdGx5XG4gICAgICAvLyBkZXRlY3QgbWVtb3J5IGxlYWtzLlxuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFja1t0aGlzLnN0YXRlLm51bURhdGFNb3Zlc1N0YWNrLmxlbmd0aCAtIDFdKys7XG4gICAgfVxuICB9XG5cbiAgdGlkeTxUIGV4dGVuZHMgVGVuc29yQ29udGFpbmVyPihuYW1lT3JGbjogc3RyaW5nfFNjb3BlRm48VD4sIGZuPzogU2NvcGVGbjxUPik6XG4gICAgICBUIHtcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoZm4gPT0gbnVsbCkge1xuICAgICAgLy8gQ2FsbGVkIHdpdGggb25seSAxIGFyZ3VtZW50LlxuICAgICAgaWYgKHR5cGVvZiBuYW1lT3JGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgZnVuY3Rpb24gdG8gdGlkeSgpJyk7XG4gICAgICB9XG4gICAgICBmbiA9IG5hbWVPckZuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYWxsZWQgd2l0aCAyIGFyZ3VtZW50cy5cbiAgICAgIGlmICh0eXBlb2YgbmFtZU9yRm4gIT09ICdzdHJpbmcnICYmICEobmFtZU9yRm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdXaGVuIGNhbGxpbmcgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYXJndW1lbnQgJyArXG4gICAgICAgICAgICAndG8gdGlkeSgpIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1doZW4gY2FsbGluZyB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSAybmQgYXJndW1lbnQgJyArXG4gICAgICAgICAgICAndG8gdGlkeSgpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IG5hbWVPckZuIGFzIHN0cmluZztcbiAgICAgIC8vIFRPRE8obnN0aG9yYXQsc21pbGtvdik6IERvIG9wZXJhdGlvbiBsb2dnaW5nIGFuZCBwZXJmb3JtYW5jZVxuICAgICAgLy8gcHJvZmlsaW5nLlxuICAgIH1cbiAgICBsZXQgcmVzdWx0OiBUO1xuICAgIHJldHVybiB0aGlzLnNjb3BlZFJ1bihcbiAgICAgICAgKCkgPT4gdGhpcy5zdGFydFNjb3BlKG5hbWUpLCAoKSA9PiB0aGlzLmVuZFNjb3BlKHJlc3VsdCksICgpID0+IHtcbiAgICAgICAgICByZXN1bHQgPSBmbigpO1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmV0dXJuIGEgUHJvbWlzZSBpbnNpZGUgb2YgdGlkeS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjb3BlZFJ1bjxUPihzdGFydDogKCkgPT4gdm9pZCwgZW5kOiAoKSA9PiB2b2lkLCBmOiAoKSA9PiBUKTogVCB7XG4gICAgc3RhcnQoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gZigpO1xuICAgICAgZW5kKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBlbmQoKTtcbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5leHRUZW5zb3JJZCA9IDA7XG4gIHByaXZhdGUgbmV4dFRlbnNvcklkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEVuZ2luZS5uZXh0VGVuc29ySWQrKztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5leHRWYXJpYWJsZUlkID0gMDtcbiAgcHJpdmF0ZSBuZXh0VmFyaWFibGVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBFbmdpbmUubmV4dFZhcmlhYmxlSWQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgcHVibGljLWZhY2luZyB0ZW5zb3IuY2xvbmUoKSB3aGVuXG4gICAqIHNhdmluZyBhIHRlbnNvciBmb3IgYmFja3dhcmRzIHBhc3MuIEl0IG1ha2VzIHN1cmUgdG8gYWRkIHRoZSBjbG9uZVxuICAgKiBvcGVyYXRpb24gdG8gdGhlIHRhcGUgcmVnYXJkbGVzcyBvZiBiZWluZyBjYWxsZWQgaW5zaWRlIGEga2VybmVsXG4gICAqIGV4ZWN1dGlvbi5cbiAgICovXG4gIHByaXZhdGUgY2xvbmUoeDogVGVuc29yKTogVGVuc29yIHtcbiAgICBjb25zdCB5OiBUZW5zb3IgPSBFTkdJTkUucnVuS2VybmVsKElkZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3h9IGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xuICAgIGNvbnN0IGlucHV0cyA9IHt4fTtcbiAgICBjb25zdCBncmFkID0gKGR5OiBUZW5zb3IpID0+ICh7XG4gICAgICB4OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGR0eXBlID0gJ2Zsb2F0MzInO1xuICAgICAgICBjb25zdCBncmFkSW5wdXRzID0ge3g6IGR5fTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB7ZHR5cGV9O1xuXG4gICAgICAgIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgIENhc3QsIGdyYWRJbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzYXZlZDogVGVuc29yW10gPSBbXTtcbiAgICB0aGlzLmFkZFRhcGVOb2RlKHRoaXMuc3RhdGUuYWN0aXZlU2NvcGUubmFtZSwgaW5wdXRzLCBbeV0sIGdyYWQsIHNhdmVkLCB7fSk7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGtlcm5lbCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm4gdGhlIG91dHB1dCB0ZW5zb3IuXG4gICAqXG4gICAqIEBwYXJhbSBrZXJuZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSBrZXJuZWwgdG8gZXhlY3V0ZS5cbiAgICogQHBhcmFtIGlucHV0cyBBIG1hcCBvZiBpbnB1dCBuYW1lcyB0byB0ZW5zb3JzLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBtYXAgb2YgYXR0cmlidXRlIG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4gQW4gYXR0cmlidXRlIGlzIGFcbiAgICogICAgIHByaW1pdGl2ZSAobm9uLXRlbnNvcikgaW5wdXQgdG8gdGhlIGtlcm5lbC5cbiAgICogQHBhcmFtIGlucHV0c1RvU2F2ZSBBIGxpc3Qgb2YgdGVuc29ycywgaW5wdXRzIHRvIHNhdmUgZm9yIHRoZSBiYWNrcHJvcFxuICAgKiAgICAgY29tcHV0YXRpb24uXG4gICAqIEBwYXJhbSBvdXRwdXRzVG9TYXZlIEEgbGlzdCBvZiBib29sZWFucywgc3BlY2lmeWluZyB3aGljaCBvdXRwdXQgdG8gc2F2ZVxuICAgKiAgICAgZm9yIHRoZSBiYWNrcHJvcCBjb21wdXRhdGlvbi4gVGhlc2UgYXJlIGJvb2xlYW5zIHNpbmNlIHRoZSBvdXRwdXRcbiAgICogdGVuc29ycyBhcmUgbm90IHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBydW5LZXJuZWw8VCBleHRlbmRzIFRlbnNvcnxUZW5zb3JbXT4oXG4gICAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIGlucHV0czogTmFtZWRUZW5zb3JNYXAsIGF0dHJzPzogTmFtZWRBdHRyTWFwKTogVCB7XG4gICAgaWYgKHRoaXMuYmFja2VuZE5hbWUgPT0gbnVsbCkge1xuICAgICAgLy8gYmFja2VuZCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0IChiYWNrZW5kIGluaXRpYWxpemF0aW9uIGlzIGxhenlcbiAgICAgIC8vIGNhbiBiZSBkZWZlcnJlZCB1bnRpbCBhbiBvcC8ga2VybmVsIGlzIHJ1bikuXG4gICAgICAvLyBUaGUgYmVsb3cgZ2V0dGVyIGhhcyBzaWRlIGVmZmVjdHMgdGhhdCB3aWxsIHRyeSB0byBpbml0aWFsaXplIHRoZVxuICAgICAgLy8gYmFja2VuZCBhbmQgc2V0IHByb3BlcnRpZXMgbGlrZSB0aGlzLmJhY2tlbmROYW1lXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC1leHByZXNzaW9uXG4gICAgICB0aGlzLmJhY2tlbmQ7XG4gICAgfVxuICAgIGNvbnN0IGhhc0tlcm5lbCA9IGdldEtlcm5lbChrZXJuZWxOYW1lLCB0aGlzLmJhY2tlbmROYW1lKSAhPSBudWxsO1xuICAgIGlmICghaGFzS2VybmVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEtlcm5lbCAnJHtrZXJuZWxOYW1lfScgbm90IHJlZ2lzdGVyZWQgZm9yIGJhY2tlbmQgJyR7XG4gICAgICAgICAgdGhpcy5iYWNrZW5kTmFtZX0nYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJ1bktlcm5lbEZ1bmMoe2tlcm5lbE5hbWUsIGlucHV0cywgYXR0cnN9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQ2hlY2tGb3JNZW1MZWFrcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5FTlYuZ2V0Qm9vbCgnSVNfVEVTVCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0tlcm5lbEZvck1lbUxlYWsoXG4gICAgICBrZXJuZWxOYW1lOiBzdHJpbmcsIG51bURhdGFJZHNCZWZvcmU6IG51bWJlcixcbiAgICAgIG91dEluZm9zOiBUZW5zb3JJbmZvW10pOiB2b2lkIHtcbiAgICBjb25zdCBudW1EYXRhSWRzQWZ0ZXIgPSB0aGlzLmJhY2tlbmQubnVtRGF0YUlkcygpO1xuXG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBkYXRhIGlkcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUga2VybmVsLlxuICAgIGxldCBudW1PdXRwdXREYXRhSWRzID0gMDtcbiAgICBvdXRJbmZvcy5mb3JFYWNoKGluZm8gPT4ge1xuICAgICAgLy8gQ29tcGxleCBudW1iZXJzIGFsbG9jYXRlIDMgZGF0YSBpZHMsIG9uZSBmb3IgJ3JlYWwnLCBvbmUgZm9yXG4gICAgICAvLyAnaW1hZ2luYXJ5JywgYW5kIG9uZSBmb3IgdGhlIGNvbnRhaW5lciB0aGF0IGhvbGRzIHRoZSBmb3JtZXIgdHdvLlxuICAgICAgbnVtT3V0cHV0RGF0YUlkcyArPSAoaW5mby5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcgPyAzIDogMSk7XG4gICAgfSk7XG5cbiAgICAvLyBBY2NvdW50IGZvciB0aGUgbnVtYmVyIG9mIG1vdmVzIGR1cmluZyBrZXJuZWwgZXhlY3V0aW9uLiBBIFwiZGF0YSBtb3ZlXCJcbiAgICAvLyBjYW4gaGFwcGVuIGluIHRoZSBtaWRkbGUgb2YgYSBrZXJuZWwgZXhlY3V0aW9uLCBwbGFjaW5nIGEgbmV3IChrZXksdmFsdWUpXG4gICAgLy8gcGFpciBpbiB0aGUgZGF0YSBzdG9yYWdlLiBTaW5jZSBkYXRhIG1vdmVzIGhhdmUgbmV0IHplcm8gZWZmZWN0ICh3ZVxuICAgIC8vIGFsd2F5cyByZW1vdmUgdGhlIGRhdGEgZnJvbSB0aGUgb2xkIGJhY2tlbmQpLCB3ZSBoYXZlIHRvIGNhbmNlbCB0aGVtIG91dFxuICAgIC8vIHdoZW4gZGV0ZWN0aW5nIG1lbW9yeSBsZWFrcy5cbiAgICBjb25zdCBudW1Nb3ZlcyA9XG4gICAgICAgIHRoaXMuc3RhdGUubnVtRGF0YU1vdmVzU3RhY2tbdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBkYXRhSWRzTGVha2VkID1cbiAgICAgICAgbnVtRGF0YUlkc0FmdGVyIC0gbnVtRGF0YUlkc0JlZm9yZSAtIG51bU91dHB1dERhdGFJZHMgLSBudW1Nb3ZlcztcbiAgICBpZiAoZGF0YUlkc0xlYWtlZCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQmFja2VuZCAnJHt0aGlzLmJhY2tlbmROYW1lfScgaGFzIGFuIGludGVybmFsIG1lbW9yeSBsZWFrIGAgK1xuICAgICAgICAgIGAoJHtkYXRhSWRzTGVha2VkfSBkYXRhIGlkcykgYWZ0ZXIgcnVubmluZyAnJHtrZXJuZWxOYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIG1ldGhvZCB0byBleGVjdXRlIGEga2VybmVsIEZ1bmNcbiAgICpcbiAgICogVXNlIGBydW5LZXJuZWxgIHRvIGV4ZWN1dGUga2VybmVscyBmcm9tIG91dHNpZGUgb2YgZW5naW5lLlxuICAgKi9cbiAgcHJpdmF0ZSBydW5LZXJuZWxGdW5jPFQgZXh0ZW5kcyBUZW5zb3J8VGVuc29yW10sIEkgZXh0ZW5kcyBOYW1lZFRlbnNvck1hcD4oXG4gICAgICBrZXJuZWxQYXJhbXM6IFJlZ2lzdGVyZWRLZXJuZWxJbnZvY2F0aW9uPEk+fFxuICAgICAgQ3VzdG9tR3JhZEtlcm5lbEludm9jYXRpb248VCwgST4pOiBUIHtcbiAgICBsZXQgb3V0cHV0czogVGVuc29yW107XG4gICAgbGV0IHNhdmVkOiBUZW5zb3JbXSA9IFtdO1xuICAgIGNvbnN0IGlzVGFwZU9uID0gdGhpcy5pc1RhcGVPbigpO1xuXG4gICAgY29uc3Qgc3RhcnRpbmdCeXRlY291bnQgPSB0aGlzLnN0YXRlLm51bUJ5dGVzO1xuICAgIGNvbnN0IHN0YXJ0aW5nTnVtVGVuc29ycyA9IHRoaXMuc3RhdGUubnVtVGVuc29ycztcblxuICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhTW92ZXNTdGFjay5wdXNoKDApO1xuICAgIH1cblxuICAgIGxldCBrZXJuZWxGdW5jOiAoKSA9PiBUZW5zb3JbXTtcbiAgICBpZiAodGhpcy5iYWNrZW5kTmFtZSA9PSBudWxsKSB7XG4gICAgICAvLyBiYWNrZW5kIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQgKGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gaXMgbGF6eVxuICAgICAgLy8gY2FuIGJlIGRlZmVycmVkIHVudGlsIGFuIG9wLyBrZXJuZWwgaXMgcnVuKS5cbiAgICAgIC8vIFRoZSBiZWxvdyBnZXR0ZXIgaGFzIHNpZGUgZWZmZWN0cyB0aGF0IHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgdGhlXG4gICAgICAvLyBiYWNrZW5kIGFuZCBzZXQgcHJvcGVydGllcyBsaWtlIHRoaXMuYmFja2VuZE5hbWVcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICAgIHRoaXMuYmFja2VuZDtcbiAgICB9XG5cbiAgICBsZXQgb3V0OiBUZW5zb3JJbmZvfFRlbnNvckluZm9bXTtcblxuICAgIGNvbnN0IGtlcm5lbE9yU2NvcGVOYW1lID0gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbihrZXJuZWxQYXJhbXMpID9cbiAgICAgICAga2VybmVsUGFyYW1zLmtlcm5lbE5hbWUgOlxuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlICE9IG51bGwgPyB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlLm5hbWUgOiAnJztcblxuICAgIC8vIENyZWF0ZSB0aGUga2VybmVsRnVuYyBmcm9tIGVpdGhlciBhIHJlZ2lzdGVyZWQga2VybmVsIE9SIHBhc3NlZCBpblxuICAgIC8vIGZvcndhcmQvYmFja3dhcmQgZnVuY3Rpb25zICh1c2VkIGJ5IGN1c3RvbSBncmFkKS4gSW4gdGhpcyBjb250ZXh0IGFcbiAgICAvLyBrZXJuZWxGdW5jIHdyYXBzIGEga2VybmVsIGltcGxlbWVudGF0aW9uIHdpdGggc29tZSBib29ra2VlcGluZy5cblxuICAgIGlmIChpc1JlZ2lzdGVyZWRLZXJuZWxJbnZvY2F0aW9uKGtlcm5lbFBhcmFtcykpIHtcbiAgICAgIGNvbnN0IHtrZXJuZWxOYW1lLCBpbnB1dHMsIGF0dHJzfSA9IGtlcm5lbFBhcmFtcztcbiAgICAgIGlmICh0aGlzLmJhY2tlbmROYW1lID09IG51bGwpIHtcbiAgICAgICAgLy8gYmFja2VuZCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0IChiYWNrZW5kIGluaXRpYWxpemF0aW9uIGlzIGxhenlcbiAgICAgICAgLy8gY2FuIGJlIGRlZmVycmVkIHVudGlsIGFuIG9wLyBrZXJuZWwgaXMgcnVuKS5cbiAgICAgICAgLy8gVGhlIGJlbG93IGdldHRlciBoYXMgc2lkZSBlZmZlY3RzIHRoYXQgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSB0aGVcbiAgICAgICAgLy8gYmFja2VuZCBhbmQgc2V0IHByb3BlcnRpZXMgbGlrZSB0aGlzLmJhY2tlbmROYW1lXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW51c2VkLWV4cHJlc3Npb25cbiAgICAgICAgdGhpcy5iYWNrZW5kO1xuICAgICAgfVxuICAgICAgY29uc3Qga2VybmVsID0gZ2V0S2VybmVsKGtlcm5lbE5hbWUsIHRoaXMuYmFja2VuZE5hbWUpO1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAga2VybmVsICE9IG51bGwsXG4gICAgICAgICAgKCkgPT4gYENhbm5vdCBmaW5kIHJlZ2lzdGVyZWQga2VybmVsICcke2tlcm5lbE5hbWV9JyBmb3IgYmFja2VuZCAnJHtcbiAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kTmFtZX0nYCk7XG5cbiAgICAgIGtlcm5lbEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG51bURhdGFJZHNCZWZvcmUgPSB0aGlzLmJhY2tlbmQubnVtRGF0YUlkcygpO1xuICAgICAgICBvdXQgPSBrZXJuZWwua2VybmVsRnVuYyh7aW5wdXRzLCBhdHRycywgYmFja2VuZDogdGhpcy5iYWNrZW5kfSk7XG4gICAgICAgIGNvbnN0IG91dEluZm9zID0gQXJyYXkuaXNBcnJheShvdXQpID8gb3V0IDogW291dF07XG4gICAgICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tLZXJuZWxGb3JNZW1MZWFrKGtlcm5lbE5hbWUsIG51bURhdGFJZHNCZWZvcmUsIG91dEluZm9zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dFRlbnNvcnMgPSBvdXRJbmZvcy5tYXAoKG91dEluZm86IFRlbnNvckluZm98VGVuc29yKSA9PiB7XG4gICAgICAgICAgLy8gdG9kbyAoeWFzc29nYmEpIHJlbW92ZSB0aGlzIG9wdGlvbiAoVGVuc29yKSB3aGVuIG5vZGUgYmFja2VuZFxuICAgICAgICAgIC8vIG1ldGhvZHMgaGF2ZSBiZWVuIG1vZHVsYXJpemVkIGFuZCB0aGV5IGFsbCByZXR1cm4gdGVuc29ySW5mby5cbiAgICAgICAgICAvLyBUZW5zb3JJbmZvcyBkbyBub3QgaGF2ZSBhIHJhbmsgYXR0cmlidXRlLlxuICAgICAgICAgIGlmICgob3V0SW5mbyBhcyBUZW5zb3IpLnJhbmsgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG91dEluZm8gYXMgVGVuc29yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8ob3V0SW5mbyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNhdmUgYW55IHJlcXVpcmVkIGlucHV0cyBhbmQgb3V0cHV0cy5cblxuICAgICAgICAvLyBEbyBub3Qgc2F2ZSB1bmxlc3Mgd2UgYXJlIHJlY29yZGluZyB0byB0aGUgdGFwZS4gT3RoZXJ3aXNlIGl0IHdvdWxkXG4gICAgICAgIC8vIGNhdXNlIGEgbWVtIGxlYWsgc2luY2UgdGhlcmUgd291bGQgYmUgbm8gYmFja3Byb3AgZm9yIHRoZXNlIHRlbnNvcnNcbiAgICAgICAgLy8gKHdoaWNoIHdvdWxkIG90aGVyd2lzZSBkaXNwb3NlIHRoZW0pLlxuICAgICAgICBpZiAoaXNUYXBlT24pIHtcbiAgICAgICAgICBjb25zdCB0ZW5zb3JzVG9TYXZlID1cbiAgICAgICAgICAgICAgdGhpcy5nZXRUZW5zb3JzRm9yR3JhZGllbnQoa2VybmVsTmFtZSwgaW5wdXRzLCBvdXRUZW5zb3JzKTtcbiAgICAgICAgICBzYXZlZCA9IHRoaXMuc2F2ZVRlbnNvcnNGb3JCYWNrd2FyZE1vZGUodGVuc29yc1RvU2F2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dFRlbnNvcnM7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7Zm9yd2FyZEZ1bmN9ID0ga2VybmVsUGFyYW1zO1xuICAgICAgLy8gUnVubmluZyBhIGN1c3RvbUdyYWQgb3AuXG4gICAgICBjb25zdCBzYXZlRnVuYzogR3JhZFNhdmVGdW5jID0gKHRlbnNvcnMpID0+IHtcbiAgICAgICAgLy8gRG8gbm90IHNhdmUgdW5sZXNzIHdlIGFyZSByZWNvcmRpbmcgdG8gdGhlIHRhcGUuIE90aGVyd2lzZSBpdCB3b3VsZFxuICAgICAgICAvLyBjYXVzZSBhIG1lbSBsZWFrIHNpbmNlIHdlIHdvdWxkIG5ldmVyIHJ1biBiYWNrcHJvcCwgd2hpY2ggZGlzcG9zZXNcbiAgICAgICAgLy8gdGhlIGtlcHQgdGVuc29ycy5cbiAgICAgICAgaWYgKCFpc1RhcGVPbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzYXZlZCA9IHRlbnNvcnMubWFwKHRlbnNvciA9PiB0aGlzLmtlZXAodGhpcy5jbG9uZSh0ZW5zb3IpKSk7XG4gICAgICB9O1xuXG4gICAgICBrZXJuZWxGdW5jID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBudW1EYXRhSWRzQmVmb3JlID0gdGhpcy5iYWNrZW5kLm51bURhdGFJZHMoKTtcbiAgICAgICAgb3V0ID0gdGhpcy50aWR5KCgpID0+IGZvcndhcmRGdW5jKHRoaXMuYmFja2VuZCwgc2F2ZUZ1bmMpKTtcbiAgICAgICAgY29uc3Qgb3V0cyA9IChBcnJheS5pc0FycmF5KG91dCkgPyBvdXQgOiBbb3V0XSkgYXMgVGVuc29yW107XG4gICAgICAgIGlmICh0aGlzLnNob3VsZENoZWNrRm9yTWVtTGVha3MoKSkge1xuICAgICAgICAgIC8vIFNjb3BlIG5hbWUgaXMgdXNlZCB0byBwcmludCBhIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIGlmIG5lZWRlZC5cbiAgICAgICAgICB0aGlzLmNoZWNrS2VybmVsRm9yTWVtTGVhayhrZXJuZWxPclNjb3BlTmFtZSwgbnVtRGF0YUlkc0JlZm9yZSwgb3V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHM7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUnVuIHRoZSBrZXJuZWxGdW5jLiBPcHRpb25hbGx5IHByb2ZpbGluZyBpdC5cbiAgICAvL1xuICAgIGNvbnN0IHtpbnB1dHMsIGF0dHJzfSA9IGtlcm5lbFBhcmFtcztcbiAgICBjb25zdCBiYWNrd2FyZHNGdW5jID0gaXNSZWdpc3RlcmVkS2VybmVsSW52b2NhdGlvbihrZXJuZWxQYXJhbXMpID9cbiAgICAgICAgbnVsbCA6XG4gICAgICAgIGtlcm5lbFBhcmFtcy5iYWNrd2FyZHNGdW5jO1xuXG4gICAgbGV0IGtlcm5lbFByb2ZpbGU6IEtlcm5lbFByb2ZpbGU7XG4gICAgdGhpcy5zY29wZWRSdW4oXG4gICAgICAgIC8vIFN0b3AgcmVjb3JkaW5nIHRvIGEgdGFwZSB3aGVuIHJ1bm5pbmcgYSBrZXJuZWwuXG4gICAgICAgICgpID0+IHRoaXMuc3RhdGUua2VybmVsRGVwdGgrKywgKCkgPT4gdGhpcy5zdGF0ZS5rZXJuZWxEZXB0aC0tLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLkVOVi5nZXRCb29sKCdERUJVRycpICYmICF0aGlzLnN0YXRlLnByb2ZpbGluZykge1xuICAgICAgICAgICAgb3V0cHV0cyA9IGtlcm5lbEZ1bmMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2VybmVsUHJvZmlsZSA9IHRoaXMucHJvZmlsZXIucHJvZmlsZUtlcm5lbChcbiAgICAgICAgICAgICAgICBrZXJuZWxPclNjb3BlTmFtZSwgaW5wdXRzLCAoKSA9PiBrZXJuZWxGdW5jKCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuRU5WLmdldEJvb2woJ0RFQlVHJykpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9maWxlci5sb2dLZXJuZWxQcm9maWxlKGtlcm5lbFByb2ZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0cHV0cyA9IGtlcm5lbFByb2ZpbGUub3V0cHV0cztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgaWYgKGlzVGFwZU9uKSB7XG4gICAgICB0aGlzLmFkZFRhcGVOb2RlKFxuICAgICAgICAgIGtlcm5lbE9yU2NvcGVOYW1lLCBpbnB1dHMsIG91dHB1dHMsIGJhY2t3YXJkc0Z1bmMsIHNhdmVkLCBhdHRycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucHJvZmlsaW5nKSB7XG4gICAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUua2VybmVscy5wdXNoKHtcbiAgICAgICAgbmFtZToga2VybmVsT3JTY29wZU5hbWUsXG4gICAgICAgIGJ5dGVzQWRkZWQ6IHRoaXMuc3RhdGUubnVtQnl0ZXMgLSBzdGFydGluZ0J5dGVjb3VudCxcbiAgICAgICAgdG90YWxCeXRlc1NuYXBzaG90OiB0aGlzLnN0YXRlLm51bUJ5dGVzLFxuICAgICAgICB0ZW5zb3JzQWRkZWQ6IHRoaXMuc3RhdGUubnVtVGVuc29ycyAtIHN0YXJ0aW5nTnVtVGVuc29ycyxcbiAgICAgICAgdG90YWxUZW5zb3JzU25hcHNob3Q6IHRoaXMuc3RhdGUubnVtVGVuc29ycyxcbiAgICAgICAgaW5wdXRTaGFwZXM6IE9iamVjdC5rZXlzKGlucHV0cykubWFwKFxuICAgICAgICAgICAga2V5ID0+IGlucHV0c1trZXldICE9IG51bGwgPyBpbnB1dHNba2V5XS5zaGFwZSA6IG51bGwpLFxuICAgICAgICBvdXRwdXRTaGFwZXM6IG91dHB1dHMubWFwKGl0ZW0gPT4gaXRlbS5zaGFwZSksXG4gICAgICAgIGtlcm5lbFRpbWVNczoga2VybmVsUHJvZmlsZS50aW1lTXMsXG4gICAgICAgIGV4dHJhSW5mbzoga2VybmVsUHJvZmlsZS5leHRyYUluZm9cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkob3V0KSA/IG91dHB1dHMgOiBvdXRwdXRzWzBdKSBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRlbnNvcnMgdXNlZCBpbiBmb3J3YXJkIG1vZGUgZm9yIHVzZSBpbiBiYWNrd2FyZCBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVuc29ycyB0aGUgbGlzdCBvZiB0ZW5zb3JzIHRvIHNhdmUuXG4gICAqL1xuICBwcml2YXRlIHNhdmVUZW5zb3JzRm9yQmFja3dhcmRNb2RlKHRlbnNvcnM6IFRlbnNvcltdKTogVGVuc29yW10ge1xuICAgIGNvbnN0IHNhdmVkID0gdGVuc29ycy5tYXAodGVuc29yID0+IHRoaXMua2VlcCh0aGlzLmNsb25lKHRlbnNvcikpKTtcbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGVuc29ycyB0byBzYXZlIGZvciBhIGdpdmVuIGdyYWRpZW50IGNhbGN1bGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ga2VybmVsTmFtZSBuYW1lIG9mIGtlcm5lbCB0byBsb29rIHVwIGdyYWRpZW50IGZvci5cbiAgICogQHBhcmFtIGlucHV0cyBhIG1hcCBvZiBpbnB1dCB0ZW5zb3JzLlxuICAgKiBAcGFyYW0gb3V0cHV0cyBhbiBhcnJheSBvZiBvdXRwdXQgdGVuc29ycyBmcm9tIGZvcndhcmQgbW9kZSBvZiBrZXJuZWwuXG4gICAqL1xuICBwcml2YXRlIGdldFRlbnNvcnNGb3JHcmFkaWVudChcbiAgICAgIGtlcm5lbE5hbWU6IHN0cmluZywgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCxcbiAgICAgIG91dHB1dHM6IFRlbnNvcltdKTogVGVuc29yW118bnVsbCB7XG4gICAgY29uc3QgZ3JhZENvbmZpZyA9IGdldEdyYWRpZW50KGtlcm5lbE5hbWUpO1xuICAgIGlmIChncmFkQ29uZmlnICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGlucHV0c1RvU2F2ZTogc3RyaW5nW10gPSBncmFkQ29uZmlnLmlucHV0c1RvU2F2ZSB8fCBbXTtcbiAgICAgIGNvbnN0IG91dHB1dHNUb1NhdmU6IGJvb2xlYW5bXSA9IGdyYWRDb25maWcub3V0cHV0c1RvU2F2ZSB8fCBbXTtcblxuICAgICAgLy8gSWYgc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBhbGwgaW5wdXRzIHdpbGwgYmUgc2F2ZWQuIE90aGVyd2lzZSwgaW5wdXRzXG4gICAgICAvLyBzcGVjaWZpZWQgaW4gaW5wdXRzVG9TYXZlIHdpbGwgYmUgc2F2ZWQuXG4gICAgICBsZXQgaW5wdXRUZW5zb3JzVG9TYXZlOiBUZW5zb3JbXTtcbiAgICAgIGlmIChncmFkQ29uZmlnLnNhdmVBbGxJbnB1dHMpIHtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGlucHV0cyksXG4gICAgICAgICAgICAoKSA9PiAnc2F2ZUFsbElucHV0cyBpcyB0cnVlLCBleHBlY3RlZCBpbnB1dHMgdG8gYmUgYW4gYXJyYXkuJyk7XG5cbiAgICAgICAgaW5wdXRUZW5zb3JzVG9TYXZlID0gT2JqZWN0LmtleXMoaW5wdXRzKS5tYXAoKGtleSkgPT4gaW5wdXRzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRUZW5zb3JzVG9TYXZlID0gaW5wdXRzVG9TYXZlLm1hcCgoaW5wdXROYW1lKSA9PiBpbnB1dHNbaW5wdXROYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dFRlbnNvcnNUb1NhdmU6IFRlbnNvcltdID1cbiAgICAgICAgICBvdXRwdXRzLmZpbHRlcigoXywgaSkgPT4gb3V0cHV0c1RvU2F2ZVtpXSk7XG5cbiAgICAgIHJldHVybiBpbnB1dFRlbnNvcnNUb1NhdmUuY29uY2F0KG91dHB1dFRlbnNvcnNUb1NhdmUpO1xuICAgIH1cbiAgICAvLyBXZSByZXR1cm4gYW4gZW1wdHkgbGlzdCByYXRoZXIgdGhhbiB0aHJvdyBhbiBlcnJvciBiZWNhdXNlIHRoZSBrZXJuZWwgd2VcbiAgICAvLyBhcmUgbG9va2luZyB1cCBtYXkgbm90IGFjdHVhbGx5IGJlIHJlbGV2YW50IHRvIGJhY2twcm9waW5nIHRocm91Z2ggdGhlXG4gICAgLy8gb3ZlcmFsbCBmdW5jdGlvblxuICAgIC8vXG4gICAgLy8gU2VlICdkb2VzIG5vdCBlcnJvciBpZiBpcnJlbGV2YW50IChwcnVuZWQpIG9wcyBhcmUgbWlzc2luZyBncmFkcycgdGVzdFxuICAgIC8vIGluIGdyYWRpZW50c190ZXN0LnRzIGZvciBhbiBleGFtcGxlLlxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBwdWJsaWMgQVBJcyBmb3IgdGVuc29yIGNyZWF0aW9uLiBNYWtlcyBhIG5ld1xuICAgKiB0ZW5zb3Igd2l0aCB0aGUgcHJvdmlkZWQgc2hhcGUsIGR0eXBlIGFuZCB2YWx1ZXMuIEl0IGFsd2F5c1xuICAgKiBjcmVhdGVzIGEgbmV3IGRhdGEgaWQgYW5kIHdyaXRlcyB0aGUgdmFsdWVzIHRvIHRoZSB1bmRlcmx5aW5nIGJhY2tlbmQuXG4gICAqL1xuICBtYWtlVGVuc29yKFxuICAgICAgdmFsdWVzOiBEYXRhVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICAgIGJhY2tlbmQ/OiBLZXJuZWxCYWNrZW5kKTogVGVuc29yIHtcbiAgICBpZiAodmFsdWVzID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWVzIHBhc3NlZCB0byBlbmdpbmUubWFrZVRlbnNvcigpIGFyZSBudWxsJyk7XG4gICAgfVxuICAgIGR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInO1xuICAgIGJhY2tlbmQgPSBiYWNrZW5kIHx8IHRoaXMuYmFja2VuZDtcbiAgICBsZXQgYmFja2VuZFZhbHMgPSB2YWx1ZXMgYXMgQmFja2VuZFZhbHVlcztcbiAgICBpZiAoZHR5cGUgPT09ICdzdHJpbmcnICYmIHV0aWwuaXNTdHJpbmcodmFsdWVzWzBdKSkge1xuICAgICAgYmFja2VuZFZhbHMgPSAodmFsdWVzIGFzIHN0cmluZ1tdKS5tYXAoZCA9PiB1dGlsLmVuY29kZVN0cmluZyhkKSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFJZCA9IGJhY2tlbmQud3JpdGUoYmFja2VuZFZhbHMsIHNoYXBlLCBkdHlwZSk7XG4gICAgY29uc3QgdCA9IG5ldyBUZW5zb3Ioc2hhcGUsIGR0eXBlLCBkYXRhSWQsIHRoaXMubmV4dFRlbnNvcklkKCkpO1xuICAgIHRoaXMudHJhY2tUZW5zb3IodCwgYmFja2VuZCk7XG5cbiAgICAvLyBDb3VudCBieXRlcyBmb3Igc3RyaW5nIHRlbnNvcnMuXG4gICAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICAgIGNvbnN0IG5ld0J5dGVzID0gYnl0ZXNGcm9tU3RyaW5nQXJyYXkoYmFja2VuZFZhbHMgYXMgVWludDhBcnJheVtdKTtcbiAgICAgIHRoaXMuc3RhdGUubnVtQnl0ZXMgKz0gbmV3Qnl0ZXMgLSBpbmZvLmJ5dGVzO1xuICAgICAgaW5mby5ieXRlcyA9IG5ld0J5dGVzO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBiYWNrZW5kcy4gTWFrZXMgYSBuZXcgdGVuc29yXG4gICAqIHRoYXQgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBleGlzdGluZyBkYXRhIGlkLiBJdCBkb2Vzbid0IGNyZWF0ZVxuICAgKiBhIG5ldyBkYXRhIGlkLCBvbmx5IGluY3JlbWVudHMgdGhlIHJlZiBjb3VudCB1c2VkIGluIG1lbW9yeSB0cmFja2luZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIG1ha2VUZW5zb3JGcm9tRGF0YUlkKFxuICAgIGRhdGFJZDogRGF0YUlkLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBiYWNrZW5kPzogS2VybmVsQmFja2VuZCk6IFRlbnNvciB7XG4gICAgZHR5cGUgPSBkdHlwZSB8fCAnZmxvYXQzMic7XG4gICAgY29uc3QgdGVuc29ySW5mbzogVGVuc29ySW5mbyA9IHtkYXRhSWQsIHNoYXBlLCBkdHlwZX07XG4gICAgcmV0dXJuIHRoaXMubWFrZVRlbnNvckZyb21UZW5zb3JJbmZvKHRlbnNvckluZm8sIGJhY2tlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGJhY2tlbmRzLiBNYWtlcyBhIG5ldyB0ZW5zb3IgdGhhdCBpcyBhIHdyYXBwZXJcbiAgICogYXJvdW5kIGFuIGV4aXN0aW5nIGRhdGEgaWQgaW4gVGVuc29ySW5mby4gSXQgZG9lc24ndCBjcmVhdGUgYSBuZXcgZGF0YSBpZCxcbiAgICogb25seSBpbmNyZW1lbnRzIHRoZSByZWYgY291bnQgdXNlZCBpbiBtZW1vcnkgdHJhY2tpbmcuXG4gICAqL1xuICBtYWtlVGVuc29yRnJvbVRlbnNvckluZm8odGVuc29ySW5mbzogVGVuc29ySW5mbywgYmFja2VuZD86IEtlcm5lbEJhY2tlbmQpOlxuICAgICAgVGVuc29yIHtcbiAgICBjb25zdCB7ZGF0YUlkLCBzaGFwZSwgZHR5cGV9ID0gdGVuc29ySW5mbztcbiAgICBjb25zdCB0ID0gbmV3IFRlbnNvcihzaGFwZSwgZHR5cGUsIGRhdGFJZCwgdGhpcy5uZXh0VGVuc29ySWQoKSk7XG4gICAgdGhpcy50cmFja1RlbnNvcih0LCBiYWNrZW5kKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIG1ha2VWYXJpYWJsZShcbiAgICAgIGluaXRpYWxWYWx1ZTogVGVuc29yLCB0cmFpbmFibGUgPSB0cnVlLCBuYW1lPzogc3RyaW5nLFxuICAgICAgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlIHtcbiAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5leHRWYXJpYWJsZUlkKCkudG9TdHJpbmcoKTtcbiAgICBpZiAoZHR5cGUgIT0gbnVsbCAmJiBkdHlwZSAhPT0gaW5pdGlhbFZhbHVlLmR0eXBlKSB7XG4gICAgICBpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWUuY2FzdChkdHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBuZXcgVmFyaWFibGUoaW5pdGlhbFZhbHVlLCB0cmFpbmFibGUsIG5hbWUsIHRoaXMubmV4dFRlbnNvcklkKCkpO1xuICAgIGlmICh0aGlzLnN0YXRlLnJlZ2lzdGVyZWRWYXJpYWJsZXNbdi5uYW1lXSAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhcmlhYmxlIHdpdGggbmFtZSAke3YubmFtZX0gd2FzIGFscmVhZHkgcmVnaXN0ZXJlZGApO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLnJlZ2lzdGVyZWRWYXJpYWJsZXNbdi5uYW1lXSA9IHY7XG4gICAgdGhpcy5pbmNSZWYodiwgdGhpcy5iYWNrZW5kKTtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHRyYWNrVGVuc29yKGE6IFRlbnNvciwgYmFja2VuZDogS2VybmVsQmFja2VuZCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUubnVtVGVuc29ycysrO1xuICAgIGlmIChhLmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zdGF0ZS5udW1TdHJpbmdUZW5zb3JzKys7XG4gICAgfVxuICAgIC8vIEJ5dGVzIGZvciBjb21wbGV4IG51bWJlcnMgYXJlIGNvdW50ZWQgYnkgdGhlaXIgY29tcG9uZW50cy4gQnl0ZXMgZm9yXG4gICAgLy8gc3RyaW5nIHRlbnNvcnMgYXJlIGNvdW50ZWQgd2hlbiB3cml0aW5nIHZhbHVlcy5cbiAgICBsZXQgYnl0ZXMgPSAwO1xuICAgIGlmIChhLmR0eXBlICE9PSAnY29tcGxleDY0JyAmJiBhLmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgYnl0ZXMgPSBhLnNpemUgKiB1dGlsLmJ5dGVzUGVyRWxlbWVudChhLmR0eXBlKTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5udW1CeXRlcyArPSBieXRlcztcblxuICAgIGlmICghdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmhhcyhhLmRhdGFJZCkpIHtcbiAgICAgIHRoaXMuc3RhdGUubnVtRGF0YUJ1ZmZlcnMrKztcbiAgICAgIHRoaXMuc3RhdGUudGVuc29ySW5mby5zZXQoYS5kYXRhSWQsIHtcbiAgICAgICAgYmFja2VuZDogYmFja2VuZCB8fCB0aGlzLmJhY2tlbmQsXG4gICAgICAgIGR0eXBlOiBhLmR0eXBlLFxuICAgICAgICBzaGFwZTogYS5zaGFwZSxcbiAgICAgICAgYnl0ZXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghKGEgaW5zdGFuY2VvZiBWYXJpYWJsZSkpIHtcbiAgICAgIHRoaXMudHJhY2soYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVHJhY2sgdGhlIHRlbnNvciBieSBkYXRhSWQgYW5kIGluY3JlYXNlIHRoZSByZWZDb3VudCBmb3IgdGhlIGRhdGFJZCBpbiB0aGVcbiAgLy8gYmFja2VuZC5cbiAgLy8gVE9ETyhweXUxMDA1NSk6IFRoaXMgaXMgY3VycmVudGx5IHVzZWQgYnkgbWFrZVZhcmlhYmxlIG1ldGhvZCwgdG8gaW5jcmVhc2VcbiAgLy8gcmVmQ291bnQgb24gdGhlIGJhY2tlbmQgZm9yIHRoZSBkYXRhSWQuIEl0IGNhbiBwb3RlbnRpYWxseSBiZSByZXBsYWNlZCB3aXRoXG4gIC8vIElkZW50aXR5IG9wIGluZGVhZCBvZiBjYWxsaW5nIGJhY2tlbmQgZGlyZWN0bHkuXG4gIGluY1JlZihhOiBUZW5zb3IsIGJhY2tlbmQ6IEtlcm5lbEJhY2tlbmQpOiB2b2lkIHtcbiAgICB0aGlzLnRyYWNrVGVuc29yKGEsIGJhY2tlbmQpO1xuICAgIHRoaXMuYmFja2VuZC5pbmNSZWYoYS5kYXRhSWQpO1xuICB9XG5cbiAgcmVtb3ZlRGF0YUlkKGRhdGFJZDogRGF0YUlkLCBiYWNrZW5kOiBLZXJuZWxCYWNrZW5kKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUudGVuc29ySW5mby5oYXMoZGF0YUlkKSAmJlxuICAgICAgICB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCkuYmFja2VuZCA9PT0gYmFja2VuZCkge1xuICAgICAgdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmRlbGV0ZShkYXRhSWQpO1xuICAgICAgdGhpcy5zdGF0ZS5udW1EYXRhQnVmZmVycy0tO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlVGVuc29yKGE6IFRlbnNvcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGF0ZS50ZW5zb3JJbmZvLmhhcyhhLmRhdGFJZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoYS5kYXRhSWQpO1xuXG4gICAgdGhpcy5zdGF0ZS5udW1UZW5zb3JzLS07XG4gICAgaWYgKGEuZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXRlLm51bVN0cmluZ1RlbnNvcnMtLTtcbiAgICAgIHRoaXMuc3RhdGUubnVtQnl0ZXMgLT0gaW5mby5ieXRlcztcbiAgICB9XG4gICAgLy8gRG9uJ3QgY291bnQgYnl0ZXMgZm9yIGNvbXBsZXggbnVtYmVycyBhcyB0aGV5IGFyZSBjb3VudGVkIGJ5IHRoZWlyXG4gICAgLy8gY29tcG9uZW50cy5cbiAgICBpZiAoYS5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcgJiYgYS5kdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gYS5zaXplICogdXRpbC5ieXRlc1BlckVsZW1lbnQoYS5kdHlwZSk7XG4gICAgICB0aGlzLnN0YXRlLm51bUJ5dGVzIC09IGJ5dGVzO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIGRhdGFJZCBpZiBiYWNrZW5kIGRpc3Bvc2UgdGhlIGRhdGEgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKGluZm8uYmFja2VuZC5kaXNwb3NlRGF0YShhLmRhdGFJZCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRGF0YUlkKGEuZGF0YUlkLCBpbmZvLmJhY2tlbmQpO1xuICAgIH1cblxuICAgIC8vIFRPRE8obnN0aG9yYXQpOiBDb25zdHJ1Y3QgYW4gZXJyb3IgYW5kIHNhdmUgdGhlIHN0YWNrIHRyYWNlIGZvclxuICAgIC8vIGRlYnVnZ2luZyB3aGVuIGluIGRlYnVnIG1vZGUuIENyZWF0aW5nIGEgc3RhY2sgdHJhY2UgaXMgdG9vIGV4cGVuc2l2ZVxuICAgIC8vIHRvIGRvIHVuY29uZGl0aW9uYWxseS5cbiAgfVxuXG4gIGRpc3Bvc2VWYXJpYWJsZXMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB2YXJOYW1lIGluIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlcykge1xuICAgICAgY29uc3QgdiA9IHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJOYW1lXTtcbiAgICAgIHRoaXMuZGlzcG9zZVZhcmlhYmxlKHYpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3Bvc2VWYXJpYWJsZSh2OiBWYXJpYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZVRlbnNvcih2KTtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZWdpc3RlcmVkVmFyaWFibGVzW3YubmFtZV0gIT0gbnVsbCkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2Lm5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIG1lbW9yeSgpOiBNZW1vcnlJbmZvIHtcbiAgICBjb25zdCBpbmZvID0gdGhpcy5iYWNrZW5kLm1lbW9yeSgpIGFzIE1lbW9yeUluZm87XG4gICAgaW5mby5udW1UZW5zb3JzID0gdGhpcy5zdGF0ZS5udW1UZW5zb3JzO1xuICAgIGluZm8ubnVtRGF0YUJ1ZmZlcnMgPSB0aGlzLnN0YXRlLm51bURhdGFCdWZmZXJzO1xuICAgIGluZm8ubnVtQnl0ZXMgPSB0aGlzLnN0YXRlLm51bUJ5dGVzO1xuICAgIGlmICh0aGlzLnN0YXRlLm51bVN0cmluZ1RlbnNvcnMgPiAwKSB7XG4gICAgICBpbmZvLnVucmVsaWFibGUgPSB0cnVlO1xuICAgICAgaWYgKGluZm8ucmVhc29ucyA9PSBudWxsKSB7XG4gICAgICAgIGluZm8ucmVhc29ucyA9IFtdO1xuICAgICAgfVxuICAgICAgaW5mby5yZWFzb25zLnB1c2goXG4gICAgICAgICAgJ01lbW9yeSB1c2FnZSBieSBzdHJpbmcgdGVuc29ycyBpcyBhcHByb3hpbWF0ZSAnICtcbiAgICAgICAgICAnKDIgYnl0ZXMgcGVyIGNoYXJhY3RlciknKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBhc3luYyBwcm9maWxlKHF1ZXJ5OiAoKSA9PiAoVGVuc29yQ29udGFpbmVyIHwgUHJvbWlzZTxUZW5zb3JDb250YWluZXI+KSk6XG4gICAgICBQcm9taXNlPFByb2ZpbGVJbmZvPiB7XG4gICAgdGhpcy5zdGF0ZS5wcm9maWxpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRCeXRlcyA9IHRoaXMuc3RhdGUubnVtQnl0ZXM7XG4gICAgY29uc3Qgc3RhcnROdW1UZW5zb3JzID0gdGhpcy5zdGF0ZS5udW1UZW5zb3JzO1xuXG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLmtlcm5lbHMgPSBbXTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUucmVzdWx0ID0gYXdhaXQgcXVlcnkoKTtcblxuICAgIHRoaXMuc3RhdGUucHJvZmlsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGUucGVha0J5dGVzID0gTWF0aC5tYXgoXG4gICAgICAgIC4uLnRoaXMuc3RhdGUuYWN0aXZlUHJvZmlsZS5rZXJuZWxzLm1hcChkID0+IGQudG90YWxCeXRlc1NuYXBzaG90KSk7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLm5ld0J5dGVzID0gdGhpcy5zdGF0ZS5udW1CeXRlcyAtIHN0YXJ0Qnl0ZXM7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLm5ld1RlbnNvcnMgPVxuICAgICAgICB0aGlzLnN0YXRlLm51bVRlbnNvcnMgLSBzdGFydE51bVRlbnNvcnM7XG4gICAgZm9yIChjb25zdCBrZXJuZWwgb2YgdGhpcy5zdGF0ZS5hY3RpdmVQcm9maWxlLmtlcm5lbHMpIHtcbiAgICAgIGtlcm5lbC5rZXJuZWxUaW1lTXMgPSBhd2FpdCBrZXJuZWwua2VybmVsVGltZU1zO1xuICAgICAga2VybmVsLmV4dHJhSW5mbyA9IGF3YWl0IGtlcm5lbC5leHRyYUluZm87XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZVByb2ZpbGU7XG4gIH1cblxuICBpc1RhcGVPbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5ncmFkaWVudERlcHRoID4gMCAmJiB0aGlzLnN0YXRlLmtlcm5lbERlcHRoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUYXBlTm9kZShcbiAgICAgIGtlcm5lbE5hbWU6IHN0cmluZywgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0czogVGVuc29yW10sXG4gICAgICBncmFkaWVudHNGdW5jOiBHcmFkRnVuYywgc2F2ZWQ6IFRlbnNvcltdLCBhdHRyczogTmFtZWRBdHRyTWFwKTogdm9pZCB7XG4gICAgY29uc3QgdGFwZU5vZGU6IFRhcGVOb2RlID1cbiAgICAgICAge2lkOiB0aGlzLnN0YXRlLm5leHRUYXBlTm9kZUlkKyssIGtlcm5lbE5hbWUsIGlucHV0cywgb3V0cHV0cywgc2F2ZWR9O1xuXG4gICAgY29uc3QgZ3JhZENvbmZpZyA9IGdldEdyYWRpZW50KGtlcm5lbE5hbWUpO1xuICAgIGlmIChncmFkQ29uZmlnICE9IG51bGwpIHtcbiAgICAgIGdyYWRpZW50c0Z1bmMgPSBncmFkQ29uZmlnLmdyYWRGdW5jO1xuICAgIH1cbiAgICBpZiAoZ3JhZGllbnRzRnVuYyAhPSBudWxsKSB7XG4gICAgICB0YXBlTm9kZS5ncmFkaWVudCA9IChkeXM6IFRlbnNvcltdKSA9PiB7XG4gICAgICAgIC8vIFRPRE8oc21pbGtvdik6IFRvIG9wdGltaXplIGJhY2stcHJvcCwgcGFzcyBkeXMgdGhhdCBhcmUgbm90IHVzZWQgaW5cbiAgICAgICAgLy8gdGhlIGJhY2twcm9wIGdyYXBoIHRvIHRoZSB1c2VyIGFzIG51bGwgaW5zdGVhZCBvZiB6ZXJvc1xuICAgICAgICBkeXMgPSBkeXMubWFwKChkeSwgaSkgPT4ge1xuICAgICAgICAgIGlmIChkeSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdmFscyA9IHV0aWwubWFrZVplcm9zVHlwZWRBcnJheShvdXRwdXQuc2l6ZSwgb3V0cHV0LmR0eXBlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VUZW5zb3IodmFscywgb3V0cHV0LnNoYXBlLCBvdXRwdXQuZHR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZHk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHcmFkIGZ1bmN0aW9ucyBvZiBvcHMgd2l0aCBzaW5nbGUgb3V0cHV0cyBleHBlY3QgYSBkeSwgd2hpbGUgb3BzXG4gICAgICAgIC8vIHdpdGggbXVsdGlwbGUgb3V0cHV0cyBleHBlY3QgZHlzIChhcnJheSBvZiBkeSkuXG4gICAgICAgIHJldHVybiBncmFkaWVudHNGdW5jKGR5cy5sZW5ndGggPiAxID8gZHlzIDogZHlzWzBdLCBzYXZlZCwgYXR0cnMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVUYXBlLnB1c2godGFwZU5vZGUpO1xuICB9XG5cbiAga2VlcDxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgICByZXN1bHQua2VwdCA9IHRydWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRUYXBlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZlVGFwZSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGgrKztcbiAgfVxuXG4gIHByaXZhdGUgZW5kVGFwZSgpIHtcbiAgICB0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGgtLTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIHNjb3BlLiBVc2UgdGhpcyB3aXRoIGVuZFNjb3BlKCkgdG8gYWNoaWV2ZSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5XG4gICAqIGFzIHNjb3BlKCkgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBmdW5jdGlvbiBjbG9zdXJlLlxuICAgKi9cbiAgc3RhcnRTY29wZShuYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NvcGVJbmZvOiBTY29wZVN0YXRlID0ge1xuICAgICAgdHJhY2s6IFtdLFxuICAgICAgbmFtZTogJ3VubmFtZWQgc2NvcGUnLFxuICAgICAgaWQ6IHRoaXMuc3RhdGUubmV4dFNjb3BlSWQrK1xuICAgIH07XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHNjb3BlSW5mby5uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5zY29wZVN0YWNrLnB1c2goc2NvcGVJbmZvKTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlID0gc2NvcGVJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCBhIHNjb3BlLiBVc2UgdGhpcyB3aXRoIHN0YXJ0U2NvcGUoKSB0byBhY2hpZXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHlcbiAgICogYXMgc2NvcGUoKSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGZ1bmN0aW9uIGNsb3N1cmUuXG4gICAqL1xuICBlbmRTY29wZShyZXN1bHQ/OiBUZW5zb3JDb250YWluZXIpIHtcbiAgICBjb25zdCB0ZW5zb3JzVG9UcmFja0luUGFyZW50ID0gZ2V0VGVuc29yc0luQ29udGFpbmVyKHJlc3VsdCk7XG4gICAgY29uc3QgdGVuc29yc1RvVHJhY2tJblBhcmVudFNldCA9XG4gICAgICAgIG5ldyBTZXQodGVuc29yc1RvVHJhY2tJblBhcmVudC5tYXAodCA9PiB0LmlkKSk7XG5cbiAgICAvLyBEaXNwb3NlIHRoZSBhcnJheXMgdHJhY2tlZCBpbiB0aGlzIHNjb3BlLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0ZS5hY3RpdmVTY29wZS50cmFjay5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGVuc29yID0gdGhpcy5zdGF0ZS5hY3RpdmVTY29wZS50cmFja1tpXTtcbiAgICAgIGlmICghdGVuc29yLmtlcHQgJiYgIXRlbnNvcnNUb1RyYWNrSW5QYXJlbnRTZXQuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbGRTY29wZSA9IHRoaXMuc3RhdGUuc2NvcGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlID0gdGhpcy5zdGF0ZS5zY29wZVN0YWNrLmxlbmd0aCA9PT0gMCA/XG4gICAgICAgIG51bGwgOlxuICAgICAgICB0aGlzLnN0YXRlLnNjb3BlU3RhY2tbdGhpcy5zdGF0ZS5zY29wZVN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgLy8gVHJhY2sgdGhlIGN1cnJlbnQgcmVzdWx0IGluIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAgdGVuc29yc1RvVHJhY2tJblBhcmVudC5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICAvLyBPbmx5IHRyYWNrIHRoZSB0ZW5zb3IgaWYgd2FzIGFsbG9jYXRlZCBpbiB0aGUgaW5uZXIgc2NvcGUgYW5kIGlzIG5vdFxuICAgICAgLy8gZ2xvYmFsbHkga2VwdC5cbiAgICAgIGlmICghdGVuc29yLmtlcHQgJiYgdGVuc29yLnNjb3BlSWQgPT09IG9sZFNjb3BlLmlkKSB7XG4gICAgICAgIHRoaXMudHJhY2sodGVuc29yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGdyYWRpZW50cyBvZiBgZmAgd2l0aCByZXNwZWN0IHRvIGVhY2ggb2YgdGhlIGB4c2AuIFRoZSBncmFkaWVudHNcbiAgICogcmV0dXJuZWQgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aCBhcyBgeHNgLCBidXQgc29tZSBtaWdodCBiZSBudWxsIGlmIGBmYFxuICAgKiB3YXMgbm90IGEgZnVuY3Rpb24gb2YgdGhhdCBgeGAuIEl0IGFsc28gdGFrZXMgb3B0aW9uYWwgZHkgdG8gbXVsdGlwbHkgdGhlXG4gICAqIGdyYWRpZW50LCB3aGljaCBkZWZhdWx0cyB0byBgMWAuXG4gICAqL1xuICBncmFkaWVudHM8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgICBmOiAoKSA9PiBULCB4czogVGVuc29yW10sIGR5PzogVCxcbiAgICAgIGFsbG93Tm9HcmFkaWVudHMgPSBmYWxzZSk6IHt2YWx1ZTogVCwgZ3JhZHM6IFRlbnNvcltdfSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHhzLmxlbmd0aCA+IDAsICgpID0+ICdncmFkaWVudHMoKSByZWNlaXZlZCBhbiBlbXB0eSBsaXN0IG9mIHhzLicpO1xuICAgIGlmIChkeSAhPSBudWxsICYmIGR5LmR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZHkgbXVzdCBoYXZlICdmbG9hdDMyJyBkdHlwZSwgYnV0IGhhcyAnJHtkeS5kdHlwZX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeSA9IHRoaXMuc2NvcGVkUnVuKFxuICAgICAgICAoKSA9PiB0aGlzLnN0YXJ0VGFwZSgpLCAoKSA9PiB0aGlzLmVuZFRhcGUoKSxcbiAgICAgICAgKCkgPT4gdGhpcy50aWR5KCdmb3J3YXJkJywgZikpO1xuXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgcmVzdWx0IHkgcmV0dXJuZWQgYnkgZigpIG11c3QgYmUgYSB0ZW5zb3IuJyk7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgbm9kZXMgdGhhdCBkb24ndCBjb25uZWN0IHggPT4geS5cbiAgICBjb25zdCBmaWx0ZXJlZFRhcGUgPSBnZXRGaWx0ZXJlZE5vZGVzWFRvWSh0aGlzLnN0YXRlLmFjdGl2ZVRhcGUsIHhzLCB5KTtcbiAgICBpZiAoIWFsbG93Tm9HcmFkaWVudHMgJiYgZmlsdGVyZWRUYXBlLmxlbmd0aCA9PT0gMCAmJiB4cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb21wdXRlIGdyYWRpZW50IG9mIHk9Zih4KSB3aXRoIHJlc3BlY3QgdG8geC4gTWFrZSBzdXJlICcgK1xuICAgICAgICAgICd0aGF0IHRoZSBmIHlvdSBwYXNzZWQgZW5jbG9zZXMgYWxsIG9wZXJhdGlvbnMgdGhhdCBsZWFkIGZyb20geCAnICtcbiAgICAgICAgICAndG8geS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aWR5KCdiYWNrd2FyZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGFjY3VtdWxhdGVkR3JhZGllbnRNYXA6IHtbdGVuc29ySWQ6IG51bWJlcl06IFRlbnNvcn0gPSB7fTtcbiAgICAgIGFjY3VtdWxhdGVkR3JhZGllbnRNYXBbeS5pZF0gPSAoZHkgPT0gbnVsbCkgPyBvbmVzKHkuc2hhcGUpIDogZHk7XG5cbiAgICAgIC8vIEJhY2twcm9wIGdyYWRpZW50cyB0aHJvdWdoIHRoZSBmaWx0ZXJlZCBub2Rlcy5cbiAgICAgIGJhY2twcm9wYWdhdGVHcmFkaWVudHMoXG4gICAgICAgICAgYWNjdW11bGF0ZWRHcmFkaWVudE1hcCwgZmlsdGVyZWRUYXBlLFxuICAgICAgICAgIC8vIFBhc3MgdGhlIHRpZHkgZnVuY3Rpb24gdG8gYXZvaWQgY2lyY3VsYXIgZGVwIHdpdGggYHRhcGUudHNgLlxuICAgICAgICAgIGYgPT4gdGhpcy50aWR5KGYgYXMgU2NvcGVGbjxUZW5zb3I+KSxcbiAgICAgICAgICAvLyBQYXNzIGFuIGFkZCBmdW5jdGlvbiB0byBhdm9pZGUgYSBjaXJjdWxhciBkZXAgd2l0aCBgdGFwZS50c2AuXG4gICAgICAgICAgYWRkKTtcbiAgICAgIGNvbnN0IGdyYWRzID0geHMubWFwKHggPT4gYWNjdW11bGF0ZWRHcmFkaWVudE1hcFt4LmlkXSk7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmdyYWRpZW50RGVwdGggPT09IDApIHtcbiAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGFyZSBub3QgY29tcHV0aW5nIGhpZ2hlci1vcmRlciBncmFkaWVudHNcbiAgICAgICAgLy8gYW5kIGNhbiBjbGVhbiB1cCB0aGUgdGFwZS5cbiAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVUYXBlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB0ZW5zb3Igb2Ygbm9kZS5zYXZlZCkge1xuICAgICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVRhcGUgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt2YWx1ZTogeSwgZ3JhZHN9O1xuICAgIH0pO1xuICB9XG5cbiAgY3VzdG9tR3JhZDxUIGV4dGVuZHMgVGVuc29yPihmOiBDdXN0b21HcmFkaWVudEZ1bmM8VD4pOlxuICAgICAgKC4uLmFyZ3M6IEFycmF5PFRlbnNvcnxHcmFkU2F2ZUZ1bmM+KSA9PiBUIHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgICAoKSA9PiAnVGhlIGYgcGFzc2VkIGluIGN1c3RvbUdyYWQoZikgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIHJldHVybiAoLi4uaW5wdXRzOiBUZW5zb3JbXSk6IFQgPT4ge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgaW5wdXRzLmV2ZXJ5KHQgPT4gdCBpbnN0YW5jZW9mIFRlbnNvciksXG4gICAgICAgICAgKCkgPT4gJ1RoZSBhcmdzIHBhc3NlZCBpbiBjdXN0b21HcmFkKGYpKHgxLCB4MiwuLi4pIG11c3QgYWxsIGJlICcgK1xuICAgICAgICAgICAgICAndGVuc29ycycpO1xuXG4gICAgICBsZXQgcmVzOiB7XG4gICAgICAgIHZhbHVlOiBULFxuICAgICAgICBncmFkRnVuYzogKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IFRlbnNvciB8IFRlbnNvcltdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0TWFwOiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICAgICAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgICAgIGlucHV0TWFwW2ldID0gaW5wdXQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9yd2FyZEZ1bmM6IEZvcndhcmRGdW5jPFQ+ID0gKF8sIHNhdmUpID0+IHtcbiAgICAgICAgcmVzID0gZiguLi5bLi4uaW5wdXRzLCBzYXZlXSk7XG4gICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgcmVzLnZhbHVlIGluc3RhbmNlb2YgVGVuc29yLFxuICAgICAgICAgICAgKCkgPT4gJ1RoZSBmdW5jdGlvbiBmIHBhc3NlZCBpbiBjdXN0b21HcmFkKGYpIG11c3QgcmV0dXJuIGFuICcgK1xuICAgICAgICAgICAgICAgICdvYmplY3Qgd2hlcmUgYG9iai52YWx1ZWAgaXMgYSB0ZW5zb3InKTtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICB1dGlsLmlzRnVuY3Rpb24ocmVzLmdyYWRGdW5jKSxcbiAgICAgICAgICAgICgpID0+ICdUaGUgZnVuY3Rpb24gZiBwYXNzZWQgaW4gY3VzdG9tR3JhZChmKSBtdXN0IHJldHVybiBhbiAnICtcbiAgICAgICAgICAgICAgICAnb2JqZWN0IHdoZXJlIGBvYmouZ3JhZEZ1bmNgIGlzIGEgZnVuY3Rpb24uJyk7XG4gICAgICAgIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBiYWNrd2FyZHNGdW5jID0gKGR5OiBULCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICAgICAgY29uc3QgZ3JhZFJlcyA9IHJlcy5ncmFkRnVuYyhkeSwgc2F2ZWQpO1xuICAgICAgICBjb25zdCBncmFkczogVGVuc29yW10gPSBBcnJheS5pc0FycmF5KGdyYWRSZXMpID8gZ3JhZFJlcyA6IFtncmFkUmVzXTtcbiAgICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgICBncmFkcy5sZW5ndGggPT09IGlucHV0cy5sZW5ndGgsXG4gICAgICAgICAgICAoKSA9PiAnVGhlIGZ1bmN0aW9uIGYgcGFzc2VkIGluIGN1c3RvbUdyYWQoZikgbXVzdCByZXR1cm4gYW4gJyArXG4gICAgICAgICAgICAgICAgJ29iamVjdCB3aGVyZSBgb2JqLmdyYWRGdW5jYCBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyAnICtcbiAgICAgICAgICAgICAgICAndGhlIHNhbWUgbnVtYmVyIG9mIHRlbnNvcnMgYXMgaW5wdXRzIHBhc3NlZCB0byBmKC4uLikuJyk7XG4gICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgZ3JhZHMuZXZlcnkodCA9PiB0IGluc3RhbmNlb2YgVGVuc29yKSxcbiAgICAgICAgICAgICgpID0+ICdUaGUgZnVuY3Rpb24gZiBwYXNzZWQgaW4gY3VzdG9tR3JhZChmKSBtdXN0IHJldHVybiBhbiAnICtcbiAgICAgICAgICAgICAgICAnb2JqZWN0IHdoZXJlIGBvYmouZ3JhZEZ1bmNgIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zICcgK1xuICAgICAgICAgICAgICAgICdhIGxpc3Qgb2Ygb25seSB0ZW5zb3JzLicpO1xuICAgICAgICBjb25zdCBncmFkTWFwOiB7W2tleTogc3RyaW5nXTogKCkgPT4gVGVuc29yfSA9IHt9O1xuICAgICAgICBncmFkcy5mb3JFYWNoKChncmFkLCBpKSA9PiB7XG4gICAgICAgICAgZ3JhZE1hcFtpXSA9ICgpID0+IGdyYWQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ3JhZE1hcDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLnJ1bktlcm5lbEZ1bmMoe1xuICAgICAgICBmb3J3YXJkRnVuYyxcbiAgICAgICAgYmFja3dhcmRzRnVuYyxcbiAgICAgICAgaW5wdXRzOiBpbnB1dE1hcCxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICByZWFkU3luYyhkYXRhSWQ6IERhdGFJZCk6IEJhY2tlbmRWYWx1ZXMge1xuICAgIC8vIFJvdXRlIHRoZSByZWFkIHRvIHRoZSBjb3JyZWN0IGJhY2tlbmQuXG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICByZXR1cm4gaW5mby5iYWNrZW5kLnJlYWRTeW5jKGRhdGFJZCk7XG4gIH1cbiAgcmVhZChkYXRhSWQ6IERhdGFJZCk6IFByb21pc2U8QmFja2VuZFZhbHVlcz4ge1xuICAgIC8vIFJvdXRlIHRoZSByZWFkIHRvIHRoZSBjb3JyZWN0IGJhY2tlbmQuXG4gICAgY29uc3QgaW5mbyA9IHRoaXMuc3RhdGUudGVuc29ySW5mby5nZXQoZGF0YUlkKTtcbiAgICByZXR1cm4gaW5mby5iYWNrZW5kLnJlYWQoZGF0YUlkKTtcbiAgfVxuXG4gIHJlYWRUb0dQVShkYXRhSWQ6IERhdGFJZCwgb3B0aW9ucz86IERhdGFUb0dQVU9wdGlvbnMpOiBHUFVEYXRhIHtcbiAgICAvLyBSb3V0ZSB0aGUgcmVhZCB0byB0aGUgY29ycmVjdCBiYWNrZW5kLlxuICAgIGNvbnN0IGluZm8gPSB0aGlzLnN0YXRlLnRlbnNvckluZm8uZ2V0KGRhdGFJZCk7XG4gICAgcmV0dXJuIGluZm8uYmFja2VuZC5yZWFkVG9HUFUoZGF0YUlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHRpbWUocXVlcnk6ICgpID0+IHZvaWQpOiBQcm9taXNlPFRpbWluZ0luZm8+IHtcbiAgICBjb25zdCBzdGFydCA9IG5vdygpO1xuICAgIGNvbnN0IHRpbWluZ0luZm8gPSBhd2FpdCB0aGlzLmJhY2tlbmQudGltZShxdWVyeSkgYXMgVGltaW5nSW5mbztcbiAgICB0aW1pbmdJbmZvLndhbGxNcyA9IG5vdygpIC0gc3RhcnQ7XG4gICAgcmV0dXJuIHRpbWluZ0luZm87XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tzIGEgVGVuc29yIGluIHRoZSBjdXJyZW50IHNjb3BlIHRvIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cFxuICAgKiB3aGVuIHRoZSBjdXJyZW50IHNjb3BlIGVuZHMsIGFuZCByZXR1cm5zIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdCBUaGUgVGVuc29yIHRvIHRyYWNrIGluIHRoZSBjdXJyZW50IHNjb3BlLlxuICAgKi9cbiAgcHJpdmF0ZSB0cmFjazxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmVTY29wZSAhPSBudWxsKSB7XG4gICAgICByZXN1bHQuc2NvcGVJZCA9IHRoaXMuc3RhdGUuYWN0aXZlU2NvcGUuaWQ7XG4gICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNjb3BlLnRyYWNrLnB1c2gocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0IHJlZ2lzdGVyZWRWYXJpYWJsZXMoKTogTmFtZWRWYXJpYWJsZU1hcCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucmVnaXN0ZXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVuZ2luZSBzdGF0ZS4gUmVtb3ZlcyBhbGwgYmFja2VuZHMgYnV0IGRvZXMgbm90IHJlbW92ZVxuICAgKiByZWdpc3RlcmVkIGJhY2tlbmQgZmFjdG9yaWVzLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgLy8gTWFrZSBhbnkgcGVuZGluZyBwcm9taXNlIG9ic29sZXRlLlxuICAgIHRoaXMucGVuZGluZ0JhY2tlbmRJbml0SWQrKztcblxuICAgIHRoaXMuc3RhdGUuZGlzcG9zZSgpO1xuICAgIHRoaXMuRU5WLnJlc2V0KCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBFbmdpbmVTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBiYWNrZW5kTmFtZSBpbiB0aGlzLnJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmRpc3Bvc2VSZWdpc3RlcmVkS2VybmVscyhiYWNrZW5kTmFtZSk7XG4gICAgICB0aGlzLnJlZ2lzdHJ5W2JhY2tlbmROYW1lXS5kaXNwb3NlKCk7XG4gICAgICBkZWxldGUgdGhpcy5yZWdpc3RyeVtiYWNrZW5kTmFtZV07XG4gICAgfVxuICAgIHRoaXMuYmFja2VuZE5hbWUgPSBudWxsO1xuICAgIHRoaXMuYmFja2VuZEluc3RhbmNlID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdCYWNrZW5kSW5pdCA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25lcyhzaGFwZTogbnVtYmVyW10pOiBUZW5zb3Ige1xuICBjb25zdCB2YWx1ZXMgPSBtYWtlT25lc1R5cGVkQXJyYXkoc2l6ZUZyb21TaGFwZShzaGFwZSksICdmbG9hdDMyJyk7XG4gIHJldHVybiBFTkdJTkUubWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCAnZmxvYXQzMicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JNYWtlRW5naW5lKCk6IEVuZ2luZSB7XG4gIGNvbnN0IG5zID0gZ2V0R2xvYmFsTmFtZXNwYWNlKCkgYXMgdW5rbm93biBhcyB7X3RmZW5naW5lOiBFbmdpbmV9O1xuICBpZiAobnMuX3RmZW5naW5lID09IG51bGwpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG5ldyBFbnZpcm9ubWVudChucyk7XG4gICAgbnMuX3RmZW5naW5lID0gbmV3IEVuZ2luZShlbnZpcm9ubWVudCk7XG4gIH1cbiAgc2V0RW52aXJvbm1lbnRHbG9iYWwobnMuX3RmZW5naW5lLkVOVik7XG5cbiAgLy8gVGVsbCB0aGUgY3VycmVudCB0ZW5zb3IgaW50ZXJmYWNlIHRoYXQgdGhlIGdsb2JhbCBlbmdpbmUgaXMgcmVzcG9uc2libGVcbiAgLy8gZm9yIHRyYWNraW5nLlxuICBzZXRUZW5zb3JUcmFja2VyKCgpID0+IG5zLl90ZmVuZ2luZSk7XG4gIHJldHVybiBucy5fdGZlbmdpbmU7XG59XG5cbmV4cG9ydCBjb25zdCBFTkdJTkUgPSBnZXRPck1ha2VFbmdpbmUoKTtcblxuLyoqXG4gKiBBIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhZGQgb3AgZm9yIHVzZSB3aXRoaW4gZW5naW5lIGFuZCB0YXBlLlxuICpcbiAqIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGFkZC50cyBhbmQgZW5naW5lLlxuICogSXQgaXMgZXhwb3J0ZWQgdG8gYmUgYXZhaWxhYmxlIGluIHRhcGUgdGVzdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQoYTogVGVuc29yLCBiOiBUZW5zb3IpOiBUZW5zb3Ige1xuICAvLyBXZSBkdXBsaWNhdGUgQWRkIGhlcmUgdG8gYXZvaWQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggYWRkLnRzLlxuICBjb25zdCBpbnB1dHMgPSB7YSwgYn07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuIl19","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line:no-any\nfunction _isNavigatorDefined() {\n return typeof navigator !== 'undefined' && navigator != null;\n}\nlet isMobileMockValue;\nexport function mockIsMobile(value) {\n isMobileMockValue = value;\n}\nexport function isMobile(nav) {\n if (isMobileMockValue !== undefined) {\n return isMobileMockValue;\n }\n if (nav || _isNavigatorDefined()) {\n if (!nav) {\n nav = navigator;\n }\n if (nav.product === 'ReactNative') {\n return true;\n }\n const a = nav.userAgent || nav.vendor ||\n // tslint:disable-next-line:no-any\n (typeof window !== 'undefined' ? window.opera : '');\n // Use `navigator.userAgentData.mobile` as fallback.\n if (!a) {\n // tslint:disable-next-line:no-any\n const navAny = nav;\n return navAny.userAgentData && navAny.userAgentData.mobile;\n }\n // tslint:disable-next-line:max-line-length\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n .test(a) ||\n // tslint:disable-next-line:max-line-length\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n .test(a.substr(0, 4));\n }\n return false;\n}\nexport function isBrowser() {\n return (typeof window !== 'undefined' && window.document != null) ||\n //@ts-ignore\n (typeof WorkerGlobalScope !== 'undefined');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2RldmljZV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGtDQUFrQztBQUNsQyxTQUFTLG1CQUFtQjtJQUMxQixPQUFPLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDO0FBQy9ELENBQUM7QUFFRCxJQUFJLGlCQUFvQyxDQUFDO0FBRXpDLE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBd0I7SUFDbkQsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQWU7SUFDdEMsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7UUFDbkMsT0FBTyxpQkFBaUIsQ0FBQztLQUMxQjtJQUNELElBQUksR0FBRyxJQUFJLG1CQUFtQixFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLEdBQUcsR0FBRyxTQUFTLENBQUM7U0FDakI7UUFDRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssYUFBYSxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNO1lBQ2pDLGtDQUFrQztZQUNsQyxDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDTixrQ0FBa0M7WUFDbEMsTUFBTSxNQUFNLEdBQUcsR0FBVSxDQUFDO1lBQzFCLE9BQU8sTUFBTSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztTQUM1RDtRQUNELDJDQUEyQztRQUMzQyxPQUFPLDBUQUEwVDthQUNyVCxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2YsMkNBQTJDO1lBQzNDLHlrREFBeWtEO2lCQUNwa0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0I7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO1FBQzdELFlBQVk7UUFDWixDQUFDLE9BQU8saUJBQWlCLEtBQUssV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZnVuY3Rpb24gX2lzTmF2aWdhdG9yRGVmaW5lZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvciAhPSBudWxsO1xufVxuXG5sZXQgaXNNb2JpbGVNb2NrVmFsdWU6IGJvb2xlYW58dW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0lzTW9iaWxlKHZhbHVlOiBib29sZWFufHVuZGVmaW5lZCkge1xuICBpc01vYmlsZU1vY2tWYWx1ZSA9IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNb2JpbGUobmF2PzogTmF2aWdhdG9yKTogYm9vbGVhbiB7XG4gIGlmIChpc01vYmlsZU1vY2tWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGlzTW9iaWxlTW9ja1ZhbHVlO1xuICB9XG4gIGlmIChuYXYgfHwgX2lzTmF2aWdhdG9yRGVmaW5lZCgpKSB7XG4gICAgaWYgKCFuYXYpIHtcbiAgICAgIG5hdiA9IG5hdmlnYXRvcjtcbiAgICB9XG4gICAgaWYgKG5hdi5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBhID0gbmF2LnVzZXJBZ2VudCB8fCBuYXYudmVuZG9yIHx8XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gKHdpbmRvdyBhcyBhbnkpLm9wZXJhIDogJycpO1xuICAgIC8vIFVzZSBgbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEubW9iaWxlYCBhcyBmYWxsYmFjay5cbiAgICBpZiAoIWEpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgIGNvbnN0IG5hdkFueSA9IG5hdiBhcyBhbnk7XG4gICAgICByZXR1cm4gbmF2QW55LnVzZXJBZ2VudERhdGEgJiYgbmF2QW55LnVzZXJBZ2VudERhdGEubW9iaWxlO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgcmV0dXJuIC8oYW5kcm9pZHxiYlxcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXFwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcXC98cGx1Y2tlcnxwb2NrZXR8cHNwfHNlcmllcyg0fDYpMHxzeW1iaWFufHRyZW98dXBcXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyBjZXx4ZGF8eGlpbm8vaVxuICAgICAgICAgICAgICAgLnRlc3QoYSkgfHxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAvMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaVxuICAgICAgICAgICAgLnRlc3QoYS5zdWJzdHIoMCwgNCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgIT0gbnVsbCkgfHxcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcpO1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport './engine';\nimport * as device_util from './device_util';\nimport { env } from './environment';\nconst ENV = env();\n/**\n * This file contains environment-related flag registrations.\n */\n/** Whether to enable debug mode. */\nENV.registerFlag('DEBUG', () => false, debugValue => {\n if (debugValue) {\n console.warn('Debugging mode is ON. The output of every math call will ' +\n 'be downloaded to CPU and checked for NaNs. ' +\n 'This significantly impacts performance.');\n }\n});\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_BROWSER', () => device_util.isBrowser());\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_NODE', () => (typeof process !== 'undefined') &&\n (typeof process.versions !== 'undefined') &&\n (typeof process.versions.node !== 'undefined'));\n/** Whether this browser is Chrome. */\nENV.registerFlag('IS_CHROME', () => typeof navigator !== 'undefined' && navigator != null &&\n navigator.userAgent != null && /Chrome/.test(navigator.userAgent) &&\n /Google Inc/.test(navigator.vendor));\n/** Whether this browser is Safari. */\nENV.registerFlag('IS_SAFARI', () => typeof navigator !== 'undefined' && navigator != null &&\n navigator.userAgent != null && /Safari/.test(navigator.userAgent) &&\n /Apple/.test(navigator.vendor));\n/**\n * True when the environment is \"production\" where we disable safety checks\n * to gain performance.\n */\nENV.registerFlag('PROD', () => false);\n/**\n * Whether to do sanity checks when inferring a shape from user-provided\n * values, used when creating a new tensor.\n */\nENV.registerFlag('TENSORLIKE_CHECK_SHAPE_CONSISTENCY', () => ENV.getBool('DEBUG'));\n/** Whether deprecation warnings are enabled. */\nENV.registerFlag('DEPRECATION_WARNINGS_ENABLED', () => true);\n/** True if running unit tests. */\nENV.registerFlag('IS_TEST', () => false);\n/** Whether to check computation result for errors. */\nENV.registerFlag('CHECK_COMPUTATION_FOR_ERRORS', () => ENV.getBool('DEBUG'));\n/** Whether the backend needs to wrap input to imageBitmap. */\nENV.registerFlag('WRAP_TO_IMAGEBITMAP', () => false);\n/** Whether to enable canvas2d willReadFrequently for GPU backends */\nENV.registerFlag('CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU', () => false);\n/** Whether to use setTimeoutCustom */\nENV.registerFlag('USE_SETTIMEOUTCUSTOM', () => false);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2ZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sVUFBVSxDQUFDO0FBRWxCLE9BQU8sS0FBSyxXQUFXLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFFbEI7O0dBRUc7QUFFSCxvQ0FBb0M7QUFDcEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0lBQ2xELElBQUksVUFBVSxFQUFFO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FDUiwyREFBMkQ7WUFDM0QsNkNBQTZDO1lBQzdDLHlDQUF5QyxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILHlFQUF5RTtBQUN6RSxHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUU5RCx5RUFBeUU7QUFDekUsR0FBRyxDQUFDLFlBQVksQ0FDWixTQUFTLEVBQ1QsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUM7SUFDbEMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDO0lBQ3pDLENBQUMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRXhELHNDQUFzQztBQUN0QyxHQUFHLENBQUMsWUFBWSxDQUNaLFdBQVcsRUFDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxJQUFJLElBQUk7SUFDdkQsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2pFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFN0Msc0NBQXNDO0FBQ3RDLEdBQUcsQ0FBQyxZQUFZLENBQ1osV0FBVyxFQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSTtJQUN2RCxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDakUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4Qzs7O0dBR0c7QUFDSCxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0Qzs7O0dBR0c7QUFDSCxHQUFHLENBQUMsWUFBWSxDQUNaLG9DQUFvQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUV0RSxnREFBZ0Q7QUFDaEQsR0FBRyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUU3RCxrQ0FBa0M7QUFDbEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFekMsc0RBQXNEO0FBQ3RELEdBQUcsQ0FBQyxZQUFZLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdFLDhEQUE4RDtBQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXJELHFFQUFxRTtBQUNyRSxHQUFHLENBQUMsWUFBWSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXZFLHNDQUFzQztBQUN0QyxHQUFHLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0ICcuL2VuZ2luZSc7XG5cbmltcG9ydCAqIGFzIGRldmljZV91dGlsIGZyb20gJy4vZGV2aWNlX3V0aWwnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5jb25zdCBFTlYgPSBlbnYoKTtcblxuLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgZW52aXJvbm1lbnQtcmVsYXRlZCBmbGFnIHJlZ2lzdHJhdGlvbnMuXG4gKi9cblxuLyoqIFdoZXRoZXIgdG8gZW5hYmxlIGRlYnVnIG1vZGUuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdERUJVRycsICgpID0+IGZhbHNlLCBkZWJ1Z1ZhbHVlID0+IHtcbiAgaWYgKGRlYnVnVmFsdWUpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdEZWJ1Z2dpbmcgbW9kZSBpcyBPTi4gVGhlIG91dHB1dCBvZiBldmVyeSBtYXRoIGNhbGwgd2lsbCAnICtcbiAgICAgICAgJ2JlIGRvd25sb2FkZWQgdG8gQ1BVIGFuZCBjaGVja2VkIGZvciBOYU5zLiAnICtcbiAgICAgICAgJ1RoaXMgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLicpO1xuICB9XG59KTtcblxuLyoqIFdoZXRoZXIgd2UgYXJlIGluIGEgYnJvd3NlciAoYXMgdmVyc3VzLCBzYXksIG5vZGUuanMpIGVudmlyb25tZW50LiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnSVNfQlJPV1NFUicsICgpID0+IGRldmljZV91dGlsLmlzQnJvd3NlcigpKTtcblxuLyoqIFdoZXRoZXIgd2UgYXJlIGluIGEgYnJvd3NlciAoYXMgdmVyc3VzLCBzYXksIG5vZGUuanMpIGVudmlyb25tZW50LiAqL1xuRU5WLnJlZ2lzdGVyRmxhZyhcbiAgICAnSVNfTk9ERScsXG4gICAgKCkgPT4gKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJykgJiZcbiAgICAgICAgKHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKSk7XG5cbi8qKiBXaGV0aGVyIHRoaXMgYnJvd3NlciBpcyBDaHJvbWUuICovXG5FTlYucmVnaXN0ZXJGbGFnKFxuICAgICdJU19DSFJPTUUnLFxuICAgICgpID0+IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvciAhPSBudWxsICYmXG4gICAgICAgIG5hdmlnYXRvci51c2VyQWdlbnQgIT0gbnVsbCAmJiAvQ2hyb21lLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmXG4gICAgICAgIC9Hb29nbGUgSW5jLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKTtcblxuLyoqIFdoZXRoZXIgdGhpcyBicm93c2VyIGlzIFNhZmFyaS4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ0lTX1NBRkFSSScsXG4gICAgKCkgPT4gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yICE9IG51bGwgJiZcbiAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCAhPSBudWxsICYmIC9TYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiZcbiAgICAgICAgL0FwcGxlLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKTtcbi8qKlxuICogVHJ1ZSB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyBcInByb2R1Y3Rpb25cIiB3aGVyZSB3ZSBkaXNhYmxlIHNhZmV0eSBjaGVja3NcbiAqIHRvIGdhaW4gcGVyZm9ybWFuY2UuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ1BST0QnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKlxuICogV2hldGhlciB0byBkbyBzYW5pdHkgY2hlY2tzIHdoZW4gaW5mZXJyaW5nIGEgc2hhcGUgZnJvbSB1c2VyLXByb3ZpZGVkXG4gKiB2YWx1ZXMsIHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyB0ZW5zb3IuXG4gKi9cbkVOVi5yZWdpc3RlckZsYWcoXG4gICAgJ1RFTlNPUkxJS0VfQ0hFQ0tfU0hBUEVfQ09OU0lTVEVOQ1knLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnREVCVUcnKSk7XG5cbi8qKiBXaGV0aGVyIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGFyZSBlbmFibGVkLiAqL1xuRU5WLnJlZ2lzdGVyRmxhZygnREVQUkVDQVRJT05fV0FSTklOR1NfRU5BQkxFRCcsICgpID0+IHRydWUpO1xuXG4vKiogVHJ1ZSBpZiBydW5uaW5nIHVuaXQgdGVzdHMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdJU19URVNUJywgKCkgPT4gZmFsc2UpO1xuXG4vKiogV2hldGhlciB0byBjaGVjayBjb21wdXRhdGlvbiByZXN1bHQgZm9yIGVycm9ycy4gKi9cbkVOVi5yZWdpc3RlckZsYWcoJ0NIRUNLX0NPTVBVVEFUSU9OX0ZPUl9FUlJPUlMnLCAoKSA9PiBFTlYuZ2V0Qm9vbCgnREVCVUcnKSk7XG5cbi8qKiBXaGV0aGVyIHRoZSBiYWNrZW5kIG5lZWRzIHRvIHdyYXAgaW5wdXQgdG8gaW1hZ2VCaXRtYXAuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdXUkFQX1RPX0lNQUdFQklUTUFQJywgKCkgPT4gZmFsc2UpO1xuXG4vKiogV2hldGhlciB0byBlbmFibGUgY2FudmFzMmQgd2lsbFJlYWRGcmVxdWVudGx5IGZvciBHUFUgYmFja2VuZHMgKi9cbkVOVi5yZWdpc3RlckZsYWcoJ0NBTlZBUzJEX1dJTExfUkVBRF9GUkVRVUVOVExZX0ZPUl9HUFUnLCAoKSA9PiBmYWxzZSk7XG5cbi8qKiBXaGV0aGVyIHRvIHVzZSBzZXRUaW1lb3V0Q3VzdG9tICovXG5FTlYucmVnaXN0ZXJGbGFnKCdVU0VfU0VUVElNRU9VVENVU1RPTScsICgpID0+IGZhbHNlKTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { env } from './environment';\nimport { Tensor } from './tensor';\nimport { isWebGLData, isWebGPUData } from './types';\nimport { assert, flatten, inferDtype, isTypedArray, toTypedArray } from './util';\nimport { bytesPerElement } from './util_base';\nexport function inferShape(val, dtype) {\n let firstElem = val;\n if (isTypedArray(val)) {\n return dtype === 'string' ? [] : [val.length];\n }\n if (isWebGLData(val)) {\n const usedChannels = val.channels || 'RGBA';\n return [val.height, val.width * usedChannels.length];\n }\n else if (isWebGPUData(val)) {\n return [val.buffer.size / (dtype == null ? 4 : bytesPerElement(dtype))];\n }\n if (!Array.isArray(val)) {\n return []; // Scalar.\n }\n const shape = [];\n while (Array.isArray(firstElem) ||\n isTypedArray(firstElem) && dtype !== 'string') {\n shape.push(firstElem.length);\n firstElem = firstElem[0];\n }\n if (Array.isArray(val) &&\n env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')) {\n deepAssertShapeConsistency(val, shape, []);\n }\n return shape;\n}\nfunction deepAssertShapeConsistency(val, shape, indices) {\n indices = indices || [];\n if (!(Array.isArray(val)) && !isTypedArray(val)) {\n assert(shape.length === 0, () => `Element arr[${indices.join('][')}] is a primitive, ` +\n `but should be an array/TypedArray of ${shape[0]} elements`);\n return;\n }\n assert(shape.length > 0, () => `Element arr[${indices.join('][')}] should be a primitive, ` +\n `but is an array of ${val.length} elements`);\n assert(val.length === shape[0], () => `Element arr[${indices.join('][')}] should have ${shape[0]} ` +\n `elements, but has ${val.length} elements`);\n const subShape = shape.slice(1);\n for (let i = 0; i < val.length; ++i) {\n deepAssertShapeConsistency(val[i], subShape, indices.concat(i));\n }\n}\nfunction assertDtype(expectedDtype, actualDType, argName, functionName) {\n if (expectedDtype === 'string_or_numeric') {\n return;\n }\n if (expectedDtype == null) {\n throw new Error(`Expected dtype cannot be null.`);\n }\n if (expectedDtype !== 'numeric' && expectedDtype !== actualDType ||\n expectedDtype === 'numeric' && actualDType === 'string') {\n throw new Error(`Argument '${argName}' passed to '${functionName}' must ` +\n `be ${expectedDtype} tensor, but got ${actualDType} tensor`);\n }\n}\nexport function convertToTensor(x, argName, functionName, parseAsDtype = 'numeric') {\n if (x instanceof Tensor) {\n assertDtype(parseAsDtype, x.dtype, argName, functionName);\n return x;\n }\n let inferredDtype = inferDtype(x);\n // If the user expects a bool/int/float, use that info to update the\n // inferredDtype when it is not a string.\n if (inferredDtype !== 'string' &&\n ['bool', 'int32', 'float32'].indexOf(parseAsDtype) >= 0) {\n inferredDtype = parseAsDtype;\n }\n assertDtype(parseAsDtype, inferredDtype, argName, functionName);\n if ((x == null) ||\n (!isTypedArray(x) && !Array.isArray(x) && typeof x !== 'number' &&\n typeof x !== 'boolean' && typeof x !== 'string')) {\n const type = x == null ? 'null' : x.constructor.name;\n throw new Error(`Argument '${argName}' passed to '${functionName}' must be a ` +\n `Tensor or TensorLike, but got '${type}'`);\n }\n const inferredShape = inferShape(x, inferredDtype);\n if (!isTypedArray(x) && !Array.isArray(x)) {\n x = [x];\n }\n const skipTypedArray = true;\n const values = inferredDtype !== 'string' ?\n toTypedArray(x, inferredDtype) :\n flatten(x, [], skipTypedArray);\n return ENGINE.makeTensor(values, inferredShape, inferredDtype);\n}\nexport function convertToTensorArray(arg, argName, functionName, parseAsDtype = 'numeric') {\n if (!Array.isArray(arg)) {\n throw new Error(`Argument ${argName} passed to ${functionName} must be a ` +\n '`Tensor[]` or `TensorLike[]`');\n }\n const tensors = arg;\n return tensors.map((t, i) => convertToTensor(t, `${argName}[${i}]`, functionName, parseAsDtype));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWxfZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy90ZW5zb3JfdXRpbF9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFXLFdBQVcsRUFBRSxZQUFZLEVBQW9DLE1BQU0sU0FBUyxDQUFDO0FBQy9GLE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FDdEIsR0FBb0MsRUFBRSxLQUFnQjtJQUN4RCxJQUFJLFNBQVMsR0FBZSxHQUFHLENBQUM7SUFFaEMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckIsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9DO0lBRUQsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEIsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEQ7U0FBTSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM1QixPQUFPLENBQUMsR0FBRyxD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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIGlzV2ViR0xEYXRhLCBpc1dlYkdQVURhdGEsIFRlbnNvckxpa2UsIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydCwgZmxhdHRlbiwgaW5mZXJEdHlwZSwgaXNUeXBlZEFycmF5LCB0b1R5cGVkQXJyYXl9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2J5dGVzUGVyRWxlbWVudH0gZnJvbSAnLi91dGlsX2Jhc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJTaGFwZShcbiAgICB2YWw6IFRlbnNvckxpa2V8V2ViR0xEYXRhfFdlYkdQVURhdGEsIGR0eXBlPzogRGF0YVR5cGUpOiBudW1iZXJbXSB7XG4gIGxldCBmaXJzdEVsZW06IHR5cGVvZiB2YWwgPSB2YWw7XG5cbiAgaWYgKGlzVHlwZWRBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuIGR0eXBlID09PSAnc3RyaW5nJyA/IFtdIDogW3ZhbC5sZW5ndGhdO1xuICB9XG5cbiAgaWYgKGlzV2ViR0xEYXRhKHZhbCkpIHtcbiAgICBjb25zdCB1c2VkQ2hhbm5lbHMgPSB2YWwuY2hhbm5lbHMgfHwgJ1JHQkEnO1xuICAgIHJldHVybiBbdmFsLmhlaWdodCwgdmFsLndpZHRoICogdXNlZENoYW5uZWxzLmxlbmd0aF07XG4gIH0gZWxzZSBpZiAoaXNXZWJHUFVEYXRhKHZhbCkpIHtcbiAgICByZXR1cm4gW3ZhbC5idWZmZXIuc2l6ZSAvIChkdHlwZSA9PSBudWxsID8gNCA6IGJ5dGVzUGVyRWxlbWVudChkdHlwZSkpXTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiBbXTsgIC8vIFNjYWxhci5cbiAgfVxuICBjb25zdCBzaGFwZTogbnVtYmVyW10gPSBbXTtcblxuICB3aGlsZSAoQXJyYXkuaXNBcnJheShmaXJzdEVsZW0pIHx8XG4gICAgICAgICBpc1R5cGVkQXJyYXkoZmlyc3RFbGVtKSAmJiBkdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICBzaGFwZS5wdXNoKGZpcnN0RWxlbS5sZW5ndGgpO1xuICAgIGZpcnN0RWxlbSA9IGZpcnN0RWxlbVswXTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpICYmXG4gICAgICBlbnYoKS5nZXRCb29sKCdURU5TT1JMSUtFX0NIRUNLX1NIQVBFX0NPTlNJU1RFTkNZJykpIHtcbiAgICBkZWVwQXNzZXJ0U2hhcGVDb25zaXN0ZW5jeSh2YWwsIHNoYXBlLCBbXSk7XG4gIH1cblxuICByZXR1cm4gc2hhcGU7XG59XG5cbmZ1bmN0aW9uIGRlZXBBc3NlcnRTaGFwZUNvbnNpc3RlbmN5KFxuICAgIHZhbDogVGVuc29yTGlrZSwgc2hhcGU6IG51bWJlcltdLCBpbmRpY2VzOiBudW1iZXJbXSkge1xuICBpbmRpY2VzID0gaW5kaWNlcyB8fCBbXTtcbiAgaWYgKCEoQXJyYXkuaXNBcnJheSh2YWwpKSAmJiAhaXNUeXBlZEFycmF5KHZhbCkpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIHNoYXBlLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgKCkgPT4gYEVsZW1lbnQgYXJyWyR7aW5kaWNlcy5qb2luKCddWycpfV0gaXMgYSBwcmltaXRpdmUsIGAgK1xuICAgICAgICAgICAgYGJ1dCBzaG91bGQgYmUgYW4gYXJyYXkvVHlwZWRBcnJheSBvZiAke3NoYXBlWzBdfSBlbGVtZW50c2ApO1xuICAgIHJldHVybjtcbiAgfVxuICBhc3NlcnQoXG4gICAgICBzaGFwZS5sZW5ndGggPiAwLFxuICAgICAgKCkgPT4gYEVsZW1lbnQgYXJyWyR7aW5kaWNlcy5qb2luKCddWycpfV0gc2hvdWxkIGJlIGEgcHJpbWl0aXZlLCBgICtcbiAgICAgICAgICBgYnV0IGlzIGFuIGFycmF5IG9mICR7dmFsLmxlbmd0aH0gZWxlbWVudHNgKTtcbiAgYXNzZXJ0KFxuICAgICAgdmFsLmxlbmd0aCA9PT0gc2hhcGVbMF0sXG4gICAgICAoKSA9PiBgRWxlbWVudCBhcnJbJHtpbmRpY2VzLmpvaW4oJ11bJyl9XSBzaG91bGQgaGF2ZSAke3NoYXBlWzBdfSBgICtcbiAgICAgICAgICBgZWxlbWVudHMsIGJ1dCBoYXMgJHt2YWwubGVuZ3RofSBlbGVtZW50c2ApO1xuICBjb25zdCBzdWJTaGFwZSA9IHNoYXBlLnNsaWNlKDEpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSkge1xuICAgIGRlZXBBc3NlcnRTaGFwZUNvbnNpc3RlbmN5KHZhbFtpXSwgc3ViU2hhcGUsIGluZGljZXMuY29uY2F0KGkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnREdHlwZShcbiAgICBleHBlY3RlZER0eXBlOiBEYXRhVHlwZXwnbnVtZXJpYyd8J3N0cmluZ19vcl9udW1lcmljJyxcbiAgICBhY3R1YWxEVHlwZTogRGF0YVR5cGUsIGFyZ05hbWU6IHN0cmluZywgZnVuY3Rpb25OYW1lOiBzdHJpbmcpIHtcbiAgaWYgKGV4cGVjdGVkRHR5cGUgPT09ICdzdHJpbmdfb3JfbnVtZXJpYycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGV4cGVjdGVkRHR5cGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZHR5cGUgY2Fubm90IGJlIG51bGwuYCk7XG4gIH1cbiAgaWYgKGV4cGVjdGVkRHR5cGUgIT09ICdudW1lcmljJyAmJiBleHBlY3RlZER0eXBlICE9PSBhY3R1YWxEVHlwZSB8fFxuICAgICAgZXhwZWN0ZWREdHlwZSA9PT0gJ251bWVyaWMnICYmIGFjdHVhbERUeXBlID09PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFyZ3VtZW50ICcke2FyZ05hbWV9JyBwYXNzZWQgdG8gJyR7ZnVuY3Rpb25OYW1lfScgbXVzdCBgICtcbiAgICAgICAgYGJlICR7ZXhwZWN0ZWREdHlwZX0gdGVuc29yLCBidXQgZ290ICR7YWN0dWFsRFR5cGV9IHRlbnNvcmApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9UZW5zb3I8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBhcmdOYW1lOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHBhcnNlQXNEdHlwZTogRGF0YVR5cGV8J251bWVyaWMnfCdzdHJpbmdfb3JfbnVtZXJpYycgPSAnbnVtZXJpYycpOiBUIHtcbiAgaWYgKHggaW5zdGFuY2VvZiBUZW5zb3IpIHtcbiAgICBhc3NlcnREdHlwZShwYXJzZUFzRHR5cGUsIHguZHR5cGUsIGFyZ05hbWUsIGZ1bmN0aW9uTmFtZSk7XG4gICAgcmV0dXJuIHg7XG4gIH1cbiAgbGV0IGluZmVycmVkRHR5cGUgPSBpbmZlckR0eXBlKHgpO1xuICAvLyBJZiB0aGUgdXNlciBleHBlY3RzIGEgYm9vbC9pbnQvZmxvYXQsIHVzZSB0aGF0IGluZm8gdG8gdXBkYXRlIHRoZVxuICAvLyBpbmZlcnJlZER0eXBlIHdoZW4gaXQgaXMgbm90IGEgc3RyaW5nLlxuICBpZiAoaW5mZXJyZWREdHlwZSAhPT0gJ3N0cmluZycgJiZcbiAgICAgIFsnYm9vbCcsICdpbnQzMicsICdmbG9hdDMyJ10uaW5kZXhPZihwYXJzZUFzRHR5cGUpID49IDApIHtcbiAgICBpbmZlcnJlZER0eXBlID0gcGFyc2VBc0R0eXBlIGFzIERhdGFUeXBlO1xuICB9XG4gIGFzc2VydER0eXBlKHBhcnNlQXNEdHlwZSwgaW5mZXJyZWREdHlwZSwgYXJnTmFtZSwgZnVuY3Rpb25OYW1lKTtcblxuICBpZiAoKHggPT0gbnVsbCkgfHxcbiAgICAgICghaXNUeXBlZEFycmF5KHgpICYmICFBcnJheS5pc0FycmF5KHgpICYmIHR5cGVvZiB4ICE9PSAnbnVtYmVyJyAmJlxuICAgICAgIHR5cGVvZiB4ICE9PSAnYm9vbGVhbicgJiYgdHlwZW9mIHggIT09ICdzdHJpbmcnKSkge1xuICAgIGNvbnN0IHR5cGUgPSB4ID09IG51bGwgPyAnbnVsbCcgOiAoeCBhcyB7fSkuY29uc3RydWN0b3IubmFtZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcmd1bWVudCAnJHthcmdOYW1lfScgcGFzc2VkIHRvICcke2Z1bmN0aW9uTmFtZX0nIG11c3QgYmUgYSBgICtcbiAgICAgICAgYFRlbnNvciBvciBUZW5zb3JMaWtlLCBidXQgZ290ICcke3R5cGV9J2ApO1xuICB9XG4gIGNvbnN0IGluZmVycmVkU2hhcGUgPSBpbmZlclNoYXBlKHgsIGluZmVycmVkRHR5cGUpO1xuICBpZiAoIWlzVHlwZWRBcnJheSh4KSAmJiAhQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHggPSBbeF0gYXMgbnVtYmVyW107XG4gIH1cbiAgY29uc3Qgc2tpcFR5cGVkQXJyYXkgPSB0cnVlO1xuICBjb25zdCB2YWx1ZXMgPSBpbmZlcnJlZER0eXBlICE9PSAnc3RyaW5nJyA/XG4gICAgICB0b1R5cGVkQXJyYXkoeCwgaW5mZXJyZWREdHlwZSBhcyBEYXRhVHlwZSkgOlxuICAgICAgZmxhdHRlbih4IGFzIHN0cmluZ1tdLCBbXSwgc2tpcFR5cGVkQXJyYXkpIGFzIHN0cmluZ1tdO1xuICByZXR1cm4gRU5HSU5FLm1ha2VUZW5zb3IodmFsdWVzLCBpbmZlcnJlZFNoYXBlLCBpbmZlcnJlZER0eXBlKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvVGVuc29yQXJyYXk8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYXJnOiBBcnJheTxUfFRlbnNvckxpa2U+LCBhcmdOYW1lOiBzdHJpbmcsIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHBhcnNlQXNEdHlwZTogRGF0YVR5cGV8J251bWVyaWMnfCdzdHJpbmdfb3JfbnVtZXJpYycgPSAnbnVtZXJpYycpOiBUW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFyZ3VtZW50ICR7YXJnTmFtZX0gcGFzc2VkIHRvICR7ZnVuY3Rpb25OYW1lfSBtdXN0IGJlIGEgYCArXG4gICAgICAgICdgVGVuc29yW11gIG9yIGBUZW5zb3JMaWtlW11gJyk7XG4gIH1cbiAgY29uc3QgdGVuc29ycyA9IGFyZyBhcyBUW107XG4gIHJldHVybiB0ZW5zb3JzLm1hcChcbiAgICAgICh0LCBpKSA9PlxuICAgICAgICAgIGNvbnZlcnRUb1RlbnNvcih0LCBgJHthcmdOYW1lfVske2l9XWAsIGZ1bmN0aW9uTmFtZSwgcGFyc2VBc0R0eXBlKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { isPromise } from '../util';\nexport const OP_SCOPE_SUFFIX = '__op';\n/**\n * Used for wrapping functions that perform math operations on\n * Tensors. The function will be wrapped in a named scope that cleans all\n * memory usage after the function is done.\n */\nexport function op(f) {\n const keys = Object.keys(f);\n if (keys.length !== 1) {\n throw new Error(`Please provide an object with a single key ` +\n `(operation name) mapping to a function. Got an object with ` +\n `${keys.length} keys.`);\n }\n let opName = keys[0];\n const fn = f[opName];\n // Strip the underscore from the end of the function name.\n if (opName.endsWith('_')) {\n opName = opName.substring(0, opName.length - 1);\n }\n // add an __op suffix to distinguish ops from kernels in tf.profile\n opName = opName + OP_SCOPE_SUFFIX;\n // tslint:disable-next-line:no-any\n const f2 = (...args) => {\n ENGINE.startScope(opName);\n try {\n const result = fn(...args);\n if (isPromise(result)) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n ENGINE.endScope(result);\n return result;\n }\n catch (ex) {\n ENGINE.endScope(null);\n throw ex;\n }\n };\n Object.defineProperty(f2, 'name', { value: opName, configurable: true });\n // tslint:disable-next-line:no-any\n return f2;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb3BlcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRXRDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsRUFBRSxDQUFxQixDQUFzQjtJQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDWCw2Q0FBNkM7WUFDN0MsNkRBQTZEO1lBQzdELEdBQUcsSUFBSSxDQUFDLE1BQU0sUUFBUSxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJCLDBEQUEwRDtJQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDakQ7SUFFRCxtRUFBbUU7SUFDbkUsTUFBTSxHQUFHLE1BQU0sR0FBRyxlQUFlLENBQUM7SUFFbEMsa0NBQWtDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtRQUM1QixNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7SUFDSCxDQUFDLENBQUM7SUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRXZFLGtDQUFrQztJQUNsQyxPQUFPLEVBQWMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2lzUHJvbWlzZX0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBPUF9TQ09QRV9TVUZGSVggPSAnX19vcCc7XG5cbi8qKlxuICogVXNlZCBmb3Igd3JhcHBpbmcgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBtYXRoIG9wZXJhdGlvbnMgb25cbiAqIFRlbnNvcnMuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIHdyYXBwZWQgaW4gYSBuYW1lZCBzY29wZSB0aGF0IGNsZWFucyBhbGxcbiAqIG1lbW9yeSB1c2FnZSBhZnRlciB0aGUgZnVuY3Rpb24gaXMgZG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wPFQgZXh0ZW5kcyBGdW5jdGlvbj4oZjoge1tuYW1lOiBzdHJpbmddOiBUfSk6IFQge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZik7XG4gIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBsZWFzZSBwcm92aWRlIGFuIG9iamVjdCB3aXRoIGEgc2luZ2xlIGtleSBgICtcbiAgICAgICAgYChvcGVyYXRpb24gbmFtZSkgbWFwcGluZyB0byBhIGZ1bmN0aW9uLiBHb3QgYW4gb2JqZWN0IHdpdGggYCArXG4gICAgICAgIGAke2tleXMubGVuZ3RofSBrZXlzLmApO1xuICB9XG5cbiAgbGV0IG9wTmFtZSA9IGtleXNbMF07XG4gIGNvbnN0IGZuID0gZltvcE5hbWVdO1xuXG4gIC8vIFN0cmlwIHRoZSB1bmRlcnNjb3JlIGZyb20gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gbmFtZS5cbiAgaWYgKG9wTmFtZS5lbmRzV2l0aCgnXycpKSB7XG4gICAgb3BOYW1lID0gb3BOYW1lLnN1YnN0cmluZygwLCBvcE5hbWUubGVuZ3RoIC0gMSk7XG4gIH1cblxuICAvLyBhZGQgYW4gX19vcCBzdWZmaXggdG8gZGlzdGluZ3Vpc2ggb3BzIGZyb20ga2VybmVscyBpbiB0Zi5wcm9maWxlXG4gIG9wTmFtZSA9IG9wTmFtZSArIE9QX1NDT1BFX1NVRkZJWDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIGNvbnN0IGYyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgRU5HSU5FLnN0YXJ0U2NvcGUob3BOYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm4oLi4uYXJncyk7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHJldHVybiBhIFByb21pc2UgaW5zaWRlIG9mIHRpZHkuJyk7XG4gICAgICB9XG4gICAgICBFTkdJTkUuZW5kU2NvcGUocmVzdWx0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIEVOR0lORS5lbmRTY29wZShudWxsKTtcbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYyLCAnbmFtZScsIHt2YWx1ZTogb3BOYW1lLCBjb25maWd1cmFibGU6IHRydWV9KTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHJldHVybiBmMiBhcyBhbnkgYXMgVDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Complex } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Converts two real numbers to a complex number.\n *\n * Given a tensor `real` representing the real part of a complex number, and a\n * tensor `imag` representing the imaginary part of a complex number, this\n * operation returns complex numbers elementwise of the form [r0, i0, r1, i1],\n * where r represents the real part and i represents the imag part.\n *\n * The input tensors real and imag must have the same shape.\n *\n * ```js\n * const real = tf.tensor1d([2.25, 3.25]);\n * const imag = tf.tensor1d([4.75, 5.75]);\n * const complex = tf.complex(real, imag);\n *\n * complex.print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction complex_(real, imag) {\n const $real = convertToTensor(real, 'real', 'complex');\n const $imag = convertToTensor(imag, 'imag', 'complex');\n util.assertShapesMatch($real.shape, $imag.shape, `real and imag shapes, ${$real.shape} and ${$imag.shape}, ` +\n `must match in call to tf.complex().`);\n const inputs = { real: $real, imag: $imag };\n return ENGINE.runKernel(Complex, inputs);\n}\nexport const complex = /* @__PURE__ */ op({ complex_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLElBQWtCLEVBQUUsSUFBa0I7SUFDeEUsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQ3hCLHlCQUF5QixLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxLQUFLLElBQUk7UUFDdkQscUNBQXFDLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBa0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NvbXBsZXgsIENvbXBsZXhJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbnZlcnRzIHR3byByZWFsIG51bWJlcnMgdG8gYSBjb21wbGV4IG51bWJlci5cbiAqXG4gKiBHaXZlbiBhIHRlbnNvciBgcmVhbGAgcmVwcmVzZW50aW5nIHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciwgYW5kIGFcbiAqIHRlbnNvciBgaW1hZ2AgcmVwcmVzZW50aW5nIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLCB0aGlzXG4gKiBvcGVyYXRpb24gcmV0dXJucyBjb21wbGV4IG51bWJlcnMgZWxlbWVudHdpc2Ugb2YgdGhlIGZvcm0gW3IwLCBpMCwgcjEsIGkxXSxcbiAqIHdoZXJlIHIgcmVwcmVzZW50cyB0aGUgcmVhbCBwYXJ0IGFuZCBpIHJlcHJlc2VudHMgdGhlIGltYWcgcGFydC5cbiAqXG4gKiBUaGUgaW5wdXQgdGVuc29ycyByZWFsIGFuZCBpbWFnIG11c3QgaGF2ZSB0aGUgc2FtZSBzaGFwZS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVhbCA9IHRmLnRlbnNvcjFkKFsyLjI1LCAzLjI1XSk7XG4gKiBjb25zdCBpbWFnID0gdGYudGVuc29yMWQoWzQuNzUsIDUuNzVdKTtcbiAqIGNvbnN0IGNvbXBsZXggPSB0Zi5jb21wbGV4KHJlYWwsIGltYWcpO1xuICpcbiAqIGNvbXBsZXgucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gY29tcGxleF88VCBleHRlbmRzIFRlbnNvcj4ocmVhbDogVHxUZW5zb3JMaWtlLCBpbWFnOiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHJlYWwgPSBjb252ZXJ0VG9UZW5zb3IocmVhbCwgJ3JlYWwnLCAnY29tcGxleCcpO1xuICBjb25zdCAkaW1hZyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnLCAnaW1hZycsICdjb21wbGV4Jyk7XG4gIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkcmVhbC5zaGFwZSwgJGltYWcuc2hhcGUsXG4gICAgICBgcmVhbCBhbmQgaW1hZyBzaGFwZXMsICR7JHJlYWwuc2hhcGV9IGFuZCAkeyRpbWFnLnNoYXBlfSwgYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggaW4gY2FsbCB0byB0Zi5jb21wbGV4KCkuYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb21wbGV4SW5wdXRzID0ge3JlYWw6ICRyZWFsLCBpbWFnOiAkaW1hZ307XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKENvbXBsZXgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBsZXggPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbXBsZXhffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { isWebGLData, isWebGPUData } from '../types';\nimport { assert, assertNonNegativeIntegerDimensions, flatten, inferDtype, isTypedArray, sizeFromShape, toTypedArray } from '../util';\n/** This is shared code across all tensor creation methods. */\nexport function makeTensor(values, shape, inferredShape, dtype) {\n if (dtype == null) {\n dtype = inferDtype(values);\n }\n else if (dtype === 'complex64') {\n throw new Error(`Cannot construct a complex64 tensor directly. ` +\n `Please use tf.complex(real, imag).`);\n }\n if (isWebGPUData(values) || isWebGLData(values)) {\n if (dtype !== 'float32' && dtype !== 'int32') {\n throw new Error(`Creating tensor from GPU data only supports ` +\n `'float32'|'int32' dtype, while the dtype is ${dtype}.`);\n }\n return ENGINE.backend.createTensorFromGPUData(values, shape || inferredShape, dtype);\n }\n if (!isTypedArray(values) && !Array.isArray(values) &&\n typeof values !== 'number' && typeof values !== 'boolean' &&\n typeof values !== 'string') {\n throw new Error('values passed to tensor(values) must be a number/boolean/string or ' +\n 'an array of numbers/booleans/strings, or a TypedArray');\n }\n // Verify that the shape matches the inferred shape.\n if (shape != null) {\n assertNonNegativeIntegerDimensions(shape);\n const providedSize = sizeFromShape(shape);\n const inferredSize = sizeFromShape(inferredShape);\n assert(providedSize === inferredSize, () => `Based on the provided shape, [${shape}], the tensor should have ` +\n `${providedSize} values but has ${inferredSize}`);\n for (let i = 0; i < inferredShape.length; ++i) {\n const inferred = inferredShape[i];\n const flatDimsDontMatch = i === inferredShape.length - 1 ?\n inferred !== sizeFromShape(shape.slice(i)) :\n true;\n assert(inferredShape[i] === shape[i] || !flatDimsDontMatch, () => `Error creating a new Tensor. Inferred shape ` +\n `(${inferredShape}) does not match the provided ` +\n `shape (${shape}). `);\n }\n }\n if (!isTypedArray(values) && !Array.isArray(values)) {\n values = [values];\n }\n shape = shape || inferredShape;\n values = dtype !== 'string' ?\n toTypedArray(values, dtype) :\n flatten(values, [], true);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX29wc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yX29wc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQWdELE1BQU0sVUFBVSxDQUFDO0FBRWxHLE9BQU8sRUFBQyxNQUFNLEVBQUUsa0NBQWtDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVuSSw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFVBQVUsQ0FDdEIsTUFBdUMsRUFBRSxLQUFlLEVBQ3hELGFBQXVCLEVBQUUsS0FBZ0I7SUFDM0MsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLEtBQUssR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUI7U0FBTSxJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxnREFBZ0Q7WUFDaEQsb0NBQW9DLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUM1QyxNQUFNLElBQUksS0FBSyxDQUNYLDhDQUE4QztnQkFDOUMsK0NBQStDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQ3pDLE1BQU0sRUFBRSxLQUFLLElBQUksYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVDO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQy9DLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxTQUFTO1FBQ3pELE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLHFFQUFxRTtZQUNyRSx1REFBdUQsQ0FBQyxDQUFDO0tBQzlEO0lBQ0Qsb0RBQW9EO0lBQ3BELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FDRixZQUFZLEtBQUssWUFBWSxFQUM3QixHQUFHLEVBQUUsQ0FDRCxpQ0FBaUMsS0FBSyw0QkFBNEI7WUFDbEUsR0FBRyxZQUFZLG1CQUFtQixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRTFELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxRQUFRLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUM7WUFDVCxNQUFNLENBQ0YsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUNuRCxHQUFHLEVBQUUsQ0FBQyw4Q0FBOEM7Z0JBQ2hELElBQUksYUFBYSxnQ0FBZ0M7Z0JBQ2pELFVBQVUsS0FBSyxLQUFLLENBQUMsQ0FBQztTQUMvQjtLQUNGO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbkQsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFhLENBQUM7S0FDL0I7SUFFRCxLQUFLLEdBQUcsS0FBSyxJQUFJLGFBQWEsQ0FBQztJQUMvQixNQUFNLEdBQUcsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsTUFBa0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFhLENBQUM7SUFDdEQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQW9CLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2lzV2ViR0xEYXRhLCBpc1dlYkdQVURhdGEsIFRlbnNvckxpa2UsIFR5cGVkQXJyYXksIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnQsIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMsIGZsYXR0ZW4sIGluZmVyRHR5cGUsIGlzVHlwZWRBcnJheSwgc2l6ZUZyb21TaGFwZSwgdG9UeXBlZEFycmF5fSBmcm9tICcuLi91dGlsJztcblxuLyoqIFRoaXMgaXMgc2hhcmVkIGNvZGUgYWNyb3NzIGFsbCB0ZW5zb3IgY3JlYXRpb24gbWV0aG9kcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVGVuc29yKFxuICAgIHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSwgc2hhcGU6IG51bWJlcltdLFxuICAgIGluZmVycmVkU2hhcGU6IG51bWJlcltdLCBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yIHtcbiAgaWYgKGR0eXBlID09IG51bGwpIHtcbiAgICBkdHlwZSA9IGluZmVyRHR5cGUodmFsdWVzKTtcbiAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY29uc3RydWN0IGEgY29tcGxleDY0IHRlbnNvciBkaXJlY3RseS4gYCArXG4gICAgICAgIGBQbGVhc2UgdXNlIHRmLmNvbXBsZXgocmVhbCwgaW1hZykuYCk7XG4gIH1cblxuICBpZiAoaXNXZWJHUFVEYXRhKHZhbHVlcykgfHwgaXNXZWJHTERhdGEodmFsdWVzKSkge1xuICAgIGlmIChkdHlwZSAhPT0gJ2Zsb2F0MzInICYmIGR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENyZWF0aW5nIHRlbnNvciBmcm9tIEdQVSBkYXRhIG9ubHkgc3VwcG9ydHMgYCArXG4gICAgICAgICAgYCdmbG9hdDMyJ3wnaW50MzInIGR0eXBlLCB3aGlsZSB0aGUgZHR5cGUgaXMgJHtkdHlwZX0uYCk7XG4gICAgfVxuICAgIHJldHVybiBFTkdJTkUuYmFja2VuZC5jcmVhdGVUZW5zb3JGcm9tR1BVRGF0YShcbiAgICAgICAgdmFsdWVzLCBzaGFwZSB8fCBpbmZlcnJlZFNoYXBlLCBkdHlwZSk7XG4gIH1cblxuICBpZiAoIWlzVHlwZWRBcnJheSh2YWx1ZXMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlcykgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZXMgIT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZXMgIT09ICdib29sZWFuJyAmJlxuICAgICAgdHlwZW9mIHZhbHVlcyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd2YWx1ZXMgcGFzc2VkIHRvIHRlbnNvcih2YWx1ZXMpIG11c3QgYmUgYSBudW1iZXIvYm9vbGVhbi9zdHJpbmcgb3IgJyArXG4gICAgICAgICdhbiBhcnJheSBvZiBudW1iZXJzL2Jvb2xlYW5zL3N0cmluZ3MsIG9yIGEgVHlwZWRBcnJheScpO1xuICB9XG4gIC8vIFZlcmlmeSB0aGF0IHRoZSBzaGFwZSBtYXRjaGVzIHRoZSBpbmZlcnJlZCBzaGFwZS5cbiAgaWYgKHNoYXBlICE9IG51bGwpIHtcbiAgICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcblxuICAgIGNvbnN0IHByb3ZpZGVkU2l6ZSA9IHNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICAgIGNvbnN0IGluZmVycmVkU2l6ZSA9IHNpemVGcm9tU2hhcGUoaW5mZXJyZWRTaGFwZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgICBwcm92aWRlZFNpemUgPT09IGluZmVycmVkU2l6ZSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGBCYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2hhcGUsIFske3NoYXBlfV0sIHRoZSB0ZW5zb3Igc2hvdWxkIGhhdmUgYCArXG4gICAgICAgICAgICBgJHtwcm92aWRlZFNpemV9IHZhbHVlcyBidXQgaGFzICR7aW5mZXJyZWRTaXplfWApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmZlcnJlZFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBpbmZlcnJlZCA9IGluZmVycmVkU2hhcGVbaV07XG4gICAgICBjb25zdCBmbGF0RGltc0RvbnRNYXRjaCA9IGkgPT09IGluZmVycmVkU2hhcGUubGVuZ3RoIC0gMSA/XG4gICAgICAgICAgaW5mZXJyZWQgIT09IHNpemVGcm9tU2hhcGUoc2hhcGUuc2xpY2UoaSkpIDpcbiAgICAgICAgICB0cnVlO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGluZmVycmVkU2hhcGVbaV0gPT09IHNoYXBlW2ldIHx8ICFmbGF0RGltc0RvbnRNYXRjaCxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgY3JlYXRpbmcgYSBuZXcgVGVuc29yLiBJbmZlcnJlZCBzaGFwZSBgICtcbiAgICAgICAgICAgICAgYCgke2luZmVycmVkU2hhcGV9KSBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgYCArXG4gICAgICAgICAgICAgIGBzaGFwZSAoJHtzaGFwZX0pLiBgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVHlwZWRBcnJheSh2YWx1ZXMpICYmICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICB2YWx1ZXMgPSBbdmFsdWVzXSBhcyBudW1iZXJbXTtcbiAgfVxuXG4gIHNoYXBlID0gc2hhcGUgfHwgaW5mZXJyZWRTaGFwZTtcbiAgdmFsdWVzID0gZHR5cGUgIT09ICdzdHJpbmcnID9cbiAgICAgIHRvVHlwZWRBcnJheSh2YWx1ZXMsIGR0eXBlKSA6XG4gICAgICBmbGF0dGVuKHZhbHVlcyBhcyBzdHJpbmdbXSwgW10sIHRydWUpIGFzIHN0cmluZ1tdO1xuICByZXR1cm4gRU5HSU5FLm1ha2VUZW5zb3IodmFsdWVzIGFzIFR5cGVkQXJyYXksIHNoYXBlLCBkdHlwZSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates a `tf.Tensor` with the provided values, shape and dtype.\n *\n * ```js\n * // Pass an array of values to create a vector.\n * tf.tensor([1, 2, 3, 4]).print();\n * ```\n *\n * ```js\n * // Pass a nested array of values to make a matrix or a higher\n * // dimensional tensor.\n * tf.tensor([[1, 2], [3, 4]]).print();\n * ```\n *\n * ```js\n * // Pass a flat array and specify a shape yourself.\n * tf.tensor([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * ```js\n * // Pass a `WebGLData` object and specify a shape yourself.\n *\n * // This makes it possible for TF.js applications to avoid GPU / CPU sync.\n * // For example, if your application includes a preprocessing step on the GPU,\n * // you could upload the GPU output directly to TF.js, rather than first\n * // downloading the values.\n *\n * // Example for WebGL2:\n * if (tf.findBackend('custom-webgl') == null) {\n * const customCanvas = document.createElement('canvas');\n * const customBackend = new tf.MathBackendWebGL(customCanvas);\n * tf.registerBackend('custom-webgl', () => customBackend);\n * }\n * const savedBackend = tf.getBackend();\n * await tf.setBackend('custom-webgl');\n * const gl = tf.backend().gpgpu.gl;\n * const texture = gl.createTexture();\n * const tex2d = gl.TEXTURE_2D;\n * const width = 2;\n * const height = 2;\n *\n * gl.bindTexture(tex2d, texture);\n * gl.texParameteri(tex2d, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n * gl.texParameteri(tex2d, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n * gl.texParameteri(tex2d, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n * gl.texParameteri(tex2d, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n * gl.texImage2D(\n * tex2d, 0, gl.RGBA32F, // internalFormat\n * width, height, 0,\n * gl.RGBA, // textureFormat\n * gl.FLOAT, // textureType\n * new Float32Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])\n * );\n *\n * // Currently, the `texture` has 4 pixels:\n * // Pixel0 is {R:0, G:1, B:2, A:3}\n * // Pixel1 is {R:4, G:5, B:6, A:7}\n * // Pixel2 is {R:8, G:9, B:10, A:11}\n * // Pixel3 is {R:12, G:13, B:14, A:15}\n *\n * const logicalShape = [height * width * 2];\n * const a = tf.tensor({texture, height, width, channels: 'BR'}, logicalShape);\n * a.print();\n * // Tensor value will be [2, 0, 6, 4, 10, 8, 14, 12], since [2, 0] is the\n * // values of 'B' and 'R' channels of Pixel0, [6, 4] is the values of 'B' and\n * 'R'\n * // channels of Pixel1...\n *\n * // For postprocessing on the GPU, it's possible to retrieve the texture\n * // backing any tensor by calling the tensor's `dataToGPU` method like\n * // so:\n *\n * const tex = a.dataToGPU();\n * await tf.setBackend(savedBackend);\n * ```\n *\n * ```js\n * // Pass a `WebGPUData` object and specify a shape yourself.\n *\n * // This makes it possible for TF.js applications to avoid GPU / CPU sync.\n * // For example, if your application includes a preprocessing step on the GPU,\n * // you could upload the GPU output directly to TF.js, rather than first\n * // downloading the values. Unlike WebGL, this optionally supports zero copy\n * // by WebGPUData.zeroCopy. When zeroCopy is false or undefined(default), this\n * // passing GPUBuffer can be destroyed after tensor is created. When zeroCopy\n * // is true, this GPUBuffer is bound directly by the tensor, so do not destroy\n * // this GPUBuffer until all access is done.\n *\n * // Example for WebGPU:\n * function createGPUBufferFromData(device, data, dtype) {\n * const bytesPerElement = 4;\n * const sizeInBytes = data.length * bytesPerElement;\n *\n * const gpuWriteBuffer = device.createBuffer({\n * mappedAtCreation: true,\n * size: sizeInBytes,\n * usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC\n * });\n * const arrayBuffer = gpuWriteBuffer.getMappedRange();\n * if (dtype === 'float32') {\n * new Float32Array(arrayBuffer).set(data);\n * } else if (dtype === 'int32') {\n * new Int32Array(arrayBuffer).set(data);\n * } else {\n * throw new Error(\n * `Creating tensor from GPUBuffer only supports` +\n * `'float32'|'int32' dtype, while the dtype is ${dtype}.`);\n * }\n * gpuWriteBuffer.unmap();\n *\n * const gpuReadBuffer = device.createBuffer({\n * mappedAtCreation: false,\n * size: sizeInBytes,\n * usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE |\n * GPUBufferUsage.COPY_SRC\n * });\n *\n * const copyEncoder = device.createCommandEncoder();\n * copyEncoder.copyBufferToBuffer(\n * gpuWriteBuffer, 0, gpuReadBuffer, 0, sizeInBytes);\n * const copyCommands = copyEncoder.finish();\n * device.queue.submit([copyCommands]);\n * gpuWriteBuffer.destroy();\n * return gpuReadBuffer;\n * }\n *\n * const savedBackend = tf.getBackend();\n * await tf.setBackend('webgpu').catch(\n * () => {throw new Error(\n * 'Failed to use WebGPU backend. Please use Chrome Canary to run.')});\n * const dtype = 'float32';\n * const device = tf.backend().device;\n * const aData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];\n * const bData = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4];\n * const expected = [2, 4, 6, 8, 6, 8, 10, 12, 10, 12, 14, 16, 14, 16, 18, 20];\n * const aBuffer = createGPUBufferFromData(device, aData, dtype);\n * const shape = [aData.length];\n * // To use zeroCopy, use {buffer: aBuffer, zeroCopy: true} instead and destroy\n * // aBuffer untill all access is done.\n * const a = tf.tensor({buffer: aBuffer}, shape, dtype);\n * const b = tf.tensor(bData, shape, dtype);\n * const result = tf.add(a, b);\n * result.print();\n * a.dispose();\n * b.dispose();\n * result.dispose();\n * aBuffer.destroy();\n * await tf.setBackend(savedBackend);\n * ```\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`, or a `WebGLData` object, or a\n * `WebGPUData` object. If the values are strings, they will be encoded as utf-8\n * and kept as `Uint8Array[]`. If the values is a `WebGLData` object, the dtype\n * could only be 'float32' or 'int32' and the object has to have: 1. texture, a\n * `WebGLTexture`, the texture must share the same `WebGLRenderingContext` with\n * TFJS's WebGL backend (you could create a custom WebGL backend from your\n * texture's canvas) and the internal texture format for the input texture must\n * be floating point or normalized integer; 2. height, the height of the\n * texture; 3. width, the width of the texture; 4. channels, a non-empty subset\n * of 'RGBA', indicating the values of which channels will be passed to the\n * tensor, such as 'R' or 'BR' (The order of the channels affect the order of\n * tensor values. ). (If the values passed from texture is less than the tensor\n * size, zeros will be padded at the rear.). If the values is a `WebGPUData`\n * object, the dtype could only be 'float32' or 'int32 and the object has to\n * have: buffer, a `GPUBuffer`. The buffer must: 1. share the same `GPUDevice`\n * with TFJS's WebGPU backend; 2. buffer.usage should at least support\n * GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC; 3. buffer.size should not\n * be smaller than the byte size of tensor shape. WebGPUData optionally supports\n * zero copy by flag zeroCopy. When zeroCopy is false or undefined(default),\n * this passing GPUBuffer can be destroyed after tensor is created. When\n * zeroCopy is true, this GPUBuffer is bound directly by the tensor, so do not\n * destroy this GPUBuffer until all access is done.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor(values, shape, dtype) {\n const inferredShape = inferShape(values, dtype);\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUk5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlMRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ2xCLE1BQXVDLEVBQUUsS0FBbUIsRUFDNUQsS0FBZ0I7SUFDbEIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQWMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXAsIFdlYkdMRGF0YSwgV2ViR1BVRGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge21ha2VUZW5zb3J9IGZyb20gJy4vdGVuc29yX29wc191dGlsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogYGBganNcbiAqIC8vIFBhc3MgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNyZWF0ZSBhIHZlY3Rvci5cbiAqIHRmLnRlbnNvcihbMSwgMiwgMywgNF0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIG5lc3RlZCBhcnJheSBvZiB2YWx1ZXMgdG8gbWFrZSBhIG1hdHJpeCBvciBhIGhpZ2hlclxuICogLy8gZGltZW5zaW9uYWwgdGVuc29yLlxuICogdGYudGVuc29yKFtbMSwgMl0sIFszLCA0XV0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZSB5b3Vyc2VsZi5cbiAqIHRmLnRlbnNvcihbMSwgMiwgMywgNF0sIFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBQYXNzIGEgYFdlYkdMRGF0YWAgb2JqZWN0IGFuZCBzcGVjaWZ5IGEgc2hhcGUgeW91cnNlbGYuXG4gKlxuICogLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgVEYuanMgYXBwbGljYXRpb25zIHRvIGF2b2lkIEdQVSAvIENQVSBzeW5jLlxuICogLy8gRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwbGljYXRpb24gaW5jbHVkZXMgYSBwcmVwcm9jZXNzaW5nIHN0ZXAgb24gdGhlIEdQVSxcbiAqIC8vIHlvdSBjb3VsZCB1cGxvYWQgdGhlIEdQVSBvdXRwdXQgZGlyZWN0bHkgdG8gVEYuanMsIHJhdGhlciB0aGFuIGZpcnN0XG4gKiAvLyBkb3dubG9hZGluZyB0aGUgdmFsdWVzLlxuICpcbiAqIC8vIEV4YW1wbGUgZm9yIFdlYkdMMjpcbiAqIGlmICh0Zi5maW5kQmFja2VuZCgnY3VzdG9tLXdlYmdsJykgPT0gbnVsbCkge1xuICogICBjb25zdCBjdXN0b21DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAqICAgY29uc3QgY3VzdG9tQmFja2VuZCA9IG5ldyB0Zi5NYXRoQmFja2VuZFdlYkdMKGN1c3RvbUNhbnZhcyk7XG4gKiAgIHRmLnJlZ2lzdGVyQmFja2VuZCgnY3VzdG9tLXdlYmdsJywgKCkgPT4gY3VzdG9tQmFja2VuZCk7XG4gKiB9XG4gKiBjb25zdCBzYXZlZEJhY2tlbmQgPSB0Zi5nZXRCYWNrZW5kKCk7XG4gKiBhd2FpdCB0Zi5zZXRCYWNrZW5kKCdjdXN0b20td2ViZ2wnKTtcbiAqIGNvbnN0IGdsID0gdGYuYmFja2VuZCgpLmdwZ3B1LmdsO1xuICogY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAqIGNvbnN0IHRleDJkID0gZ2wuVEVYVFVSRV8yRDtcbiAqIGNvbnN0IHdpZHRoID0gMjtcbiAqIGNvbnN0IGhlaWdodCA9IDI7XG4gKlxuICogZ2wuYmluZFRleHR1cmUodGV4MmQsIHRleHR1cmUpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICogZ2wudGV4UGFyYW1ldGVyaSh0ZXgyZCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTtcbiAqIGdsLnRleFBhcmFtZXRlcmkodGV4MmQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gKiBnbC50ZXhJbWFnZTJEKFxuICogICB0ZXgyZCwgMCwgZ2wuUkdCQTMyRiwgLy8gaW50ZXJuYWxGb3JtYXRcbiAqICAgd2lkdGgsIGhlaWdodCwgMCxcbiAqICAgZ2wuUkdCQSwgLy8gdGV4dHVyZUZvcm1hdFxuICogICBnbC5GTE9BVCwgLy8gdGV4dHVyZVR5cGVcbiAqICAgbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV0pXG4gKiApO1xuICpcbiAqIC8vIEN1cnJlbnRseSwgdGhlIGB0ZXh0dXJlYCBoYXMgNCBwaXhlbHM6XG4gKiAvLyBQaXhlbDAgaXMge1I6MCwgRzoxLCBCOjIsIEE6M31cbiAqIC8vIFBpeGVsMSBpcyB7Ujo0LCBHOjUsIEI6NiwgQTo3fVxuICogLy8gUGl4ZWwyIGlzIHtSOjgsIEc6OSwgQjoxMCwgQToxMX1cbiAqIC8vIFBpeGVsMyBpcyB7UjoxMiwgRzoxMywgQjoxNCwgQToxNX1cbiAqXG4gKiBjb25zdCBsb2dpY2FsU2hhcGUgPSBbaGVpZ2h0ICogd2lkdGggKiAyXTtcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3Ioe3RleHR1cmUsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzOiAnQlInfSwgbG9naWNhbFNoYXBlKTtcbiAqIGEucHJpbnQoKTtcbiAqIC8vIFRlbnNvciB2YWx1ZSB3aWxsIGJlIFsyLCAwLCA2LCA0LCAxMCwgOCwgMTQsIDEyXSwgc2luY2UgWzIsIDBdIGlzIHRoZVxuICogLy8gdmFsdWVzIG9mICdCJyBhbmQgJ1InIGNoYW5uZWxzIG9mIFBpeGVsMCwgWzYsIDRdIGlzIHRoZSB2YWx1ZXMgb2YgJ0InIGFuZFxuICogJ1InXG4gKiAvLyBjaGFubmVscyBvZiBQaXhlbDEuLi5cbiAqXG4gKiAvLyBGb3IgcG9zdHByb2Nlc3Npbmcgb24gdGhlIEdQVSwgaXQncyBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZVxuICogLy8gYmFja2luZyBhbnkgdGVuc29yIGJ5IGNhbGxpbmcgdGhlIHRlbnNvcidzIGBkYXRhVG9HUFVgIG1ldGhvZCBsaWtlXG4gKiAvLyBzbzpcbiAqXG4gKiBjb25zdCB0ZXggPSBhLmRhdGFUb0dQVSgpO1xuICogYXdhaXQgdGYuc2V0QmFja2VuZChzYXZlZEJhY2tlbmQpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIFBhc3MgYSBgV2ViR1BVRGF0YWAgb2JqZWN0IGFuZCBzcGVjaWZ5IGEgc2hhcGUgeW91cnNlbGYuXG4gKlxuICogLy8gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgVEYuanMgYXBwbGljYXRpb25zIHRvIGF2b2lkIEdQVSAvIENQVSBzeW5jLlxuICogLy8gRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwbGljYXRpb24gaW5jbHVkZXMgYSBwcmVwcm9jZXNzaW5nIHN0ZXAgb24gdGhlIEdQVSxcbiAqIC8vIHlvdSBjb3VsZCB1cGxvYWQgdGhlIEdQVSBvdXRwdXQgZGlyZWN0bHkgdG8gVEYuanMsIHJhdGhlciB0aGFuIGZpcnN0XG4gKiAvLyBkb3dubG9hZGluZyB0aGUgdmFsdWVzLiBVbmxpa2UgV2ViR0wsIHRoaXMgb3B0aW9uYWxseSBzdXBwb3J0cyB6ZXJvIGNvcHlcbiAqIC8vIGJ5IFdlYkdQVURhdGEuemVyb0NvcHkuIFdoZW4gemVyb0NvcHkgaXMgZmFsc2Ugb3IgdW5kZWZpbmVkKGRlZmF1bHQpLCB0aGlzXG4gKiAvLyBwYXNzaW5nIEdQVUJ1ZmZlciBjYW4gYmUgZGVzdHJveWVkIGFmdGVyIHRlbnNvciBpcyBjcmVhdGVkLiBXaGVuIHplcm9Db3B5XG4gKiAvLyBpcyB0cnVlLCB0aGlzIEdQVUJ1ZmZlciBpcyBib3VuZCBkaXJlY3RseSBieSB0aGUgdGVuc29yLCBzbyBkbyBub3QgZGVzdHJveVxuICogLy8gdGhpcyBHUFVCdWZmZXIgdW50aWwgYWxsIGFjY2VzcyBpcyBkb25lLlxuICpcbiAqIC8vIEV4YW1wbGUgZm9yIFdlYkdQVTpcbiAqIGZ1bmN0aW9uIGNyZWF0ZUdQVUJ1ZmZlckZyb21EYXRhKGRldmljZSwgZGF0YSwgZHR5cGUpIHtcbiAqICAgY29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gNDtcbiAqICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBkYXRhLmxlbmd0aCAqIGJ5dGVzUGVyRWxlbWVudDtcbiAqXG4gKiAgIGNvbnN0IGdwdVdyaXRlQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gKiAgICAgbWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcbiAqICAgICBzaXplOiBzaXplSW5CeXRlcyxcbiAqICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkNcbiAqICAgfSk7XG4gKiAgIGNvbnN0IGFycmF5QnVmZmVyID0gZ3B1V3JpdGVCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcbiAqICAgaWYgKGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAqICAgICBuZXcgRmxvYXQzMkFycmF5KGFycmF5QnVmZmVyKS5zZXQoZGF0YSk7XG4gKiAgIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAqICAgICBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlcikuc2V0KGRhdGEpO1xuICogICB9IGVsc2Uge1xuICogICAgIHRocm93IG5ldyBFcnJvcihcbiAqICAgICAgICAgYENyZWF0aW5nIHRlbnNvciBmcm9tIEdQVUJ1ZmZlciBvbmx5IHN1cHBvcnRzYCArXG4gKiAgICAgICAgIGAnZmxvYXQzMid8J2ludDMyJyBkdHlwZSwgd2hpbGUgdGhlIGR0eXBlIGlzICR7ZHR5cGV9LmApO1xuICogICB9XG4gKiAgIGdwdVdyaXRlQnVmZmVyLnVubWFwKCk7XG4gKlxuICogICBjb25zdCBncHVSZWFkQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG4gKiAgICAgbWFwcGVkQXRDcmVhdGlvbjogZmFsc2UsXG4gKiAgICAgc2l6ZTogc2l6ZUluQnl0ZXMsXG4gKiAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLkNPUFlfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8XG4gKiAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLkNPUFlfU1JDXG4gKiAgIH0pO1xuICpcbiAqICAgY29uc3QgY29weUVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcbiAqICAgY29weUVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKFxuICogICAgICAgZ3B1V3JpdGVCdWZmZXIsIDAsIGdwdVJlYWRCdWZmZXIsIDAsIHNpemVJbkJ5dGVzKTtcbiAqICAgY29uc3QgY29weUNvbW1hbmRzID0gY29weUVuY29kZXIuZmluaXNoKCk7XG4gKiAgIGRldmljZS5xdWV1ZS5zdWJtaXQoW2NvcHlDb21tYW5kc10pO1xuICogICBncHVXcml0ZUJ1ZmZlci5kZXN0cm95KCk7XG4gKiAgIHJldHVybiBncHVSZWFkQnVmZmVyO1xuICogfVxuICpcbiAqIGNvbnN0IHNhdmVkQmFja2VuZCA9IHRmLmdldEJhY2tlbmQoKTtcbiAqIGF3YWl0IHRmLnNldEJhY2tlbmQoJ3dlYmdwdScpLmNhdGNoKFxuICogICAgICgpID0+IHt0aHJvdyBuZXcgRXJyb3IoXG4gKiAgICAgICAgICdGYWlsZWQgdG8gdXNlIFdlYkdQVSBiYWNrZW5kLiBQbGVhc2UgdXNlIENocm9tZSBDYW5hcnkgdG8gcnVuLicpfSk7XG4gKiBjb25zdCBkdHlwZSA9ICdmbG9hdDMyJztcbiAqIGNvbnN0IGRldmljZSA9IHRmLmJhY2tlbmQoKS5kZXZpY2U7XG4gKiBjb25zdCBhRGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNl07XG4gKiBjb25zdCBiRGF0YSA9IFsxLCAyLCAzLCA0LCAxLCAyLCAzLCA0LCAxLCAyLCAzLCA0LCAxLCAyLCAzLCA0XTtcbiAqIGNvbnN0IGV4cGVjdGVkID0gWzIsIDQsIDYsIDgsIDYsIDgsIDEwLCAxMiwgMTAsIDEyLCAxNCwgMTYsIDE0LCAxNiwgMTgsIDIwXTtcbiAqIGNvbnN0IGFCdWZmZXIgPSBjcmVhdGVHUFVCdWZmZXJGcm9tRGF0YShkZXZpY2UsIGFEYXRhLCBkdHlwZSk7XG4gKiBjb25zdCBzaGFwZSA9IFthRGF0YS5sZW5ndGhdO1xuICogLy8gVG8gdXNlIHplcm9Db3B5LCB1c2Uge2J1ZmZlcjogYUJ1ZmZlciwgemVyb0NvcHk6IHRydWV9IGluc3RlYWQgYW5kIGRlc3Ryb3lcbiAqIC8vIGFCdWZmZXIgdW50aWxsIGFsbCBhY2Nlc3MgaXMgZG9uZS5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3Ioe2J1ZmZlcjogYUJ1ZmZlcn0sIHNoYXBlLCBkdHlwZSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yKGJEYXRhLCBzaGFwZSwgZHR5cGUpO1xuICogY29uc3QgcmVzdWx0ID0gdGYuYWRkKGEsIGIpO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBhLmRpc3Bvc2UoKTtcbiAqIGIuZGlzcG9zZSgpO1xuICogcmVzdWx0LmRpc3Bvc2UoKTtcbiAqIGFCdWZmZXIuZGVzdHJveSgpO1xuICogYXdhaXQgdGYuc2V0QmFja2VuZChzYXZlZEJhY2tlbmQpO1xuICogYGBgXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIG5lc3RlZCBhcnJheSBvZiBudW1iZXJzLFxuICogICAgIG9yIGEgZmxhdCBhcnJheSwgb3IgYSBgVHlwZWRBcnJheWAsIG9yIGEgYFdlYkdMRGF0YWAgb2JqZWN0LCBvciBhXG4gKiBgV2ViR1BVRGF0YWAgb2JqZWN0LiBJZiB0aGUgdmFsdWVzIGFyZSBzdHJpbmdzLCB0aGV5IHdpbGwgYmUgZW5jb2RlZCBhcyB1dGYtOFxuICogYW5kIGtlcHQgYXMgYFVpbnQ4QXJyYXlbXWAuIElmIHRoZSB2YWx1ZXMgaXMgYSBgV2ViR0xEYXRhYCBvYmplY3QsIHRoZSBkdHlwZVxuICogY291bGQgb25seSBiZSAnZmxvYXQzMicgb3IgJ2ludDMyJyBhbmQgdGhlIG9iamVjdCBoYXMgdG8gaGF2ZTogMS4gdGV4dHVyZSwgYVxuICogYFdlYkdMVGV4dHVyZWAsIHRoZSB0ZXh0dXJlIG11c3Qgc2hhcmUgdGhlIHNhbWUgYFdlYkdMUmVuZGVyaW5nQ29udGV4dGAgd2l0aFxuICogVEZKUydzIFdlYkdMIGJhY2tlbmQgKHlvdSBjb3VsZCBjcmVhdGUgYSBjdXN0b20gV2ViR0wgYmFja2VuZCBmcm9tIHlvdXJcbiAqIHRleHR1cmUncyBjYW52YXMpIGFuZCB0aGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXQgZm9yIHRoZSBpbnB1dCB0ZXh0dXJlIG11c3RcbiAqIGJlIGZsb2F0aW5nIHBvaW50IG9yIG5vcm1hbGl6ZWQgaW50ZWdlcjsgMi4gaGVpZ2h0LCB0aGUgaGVpZ2h0IG9mIHRoZVxuICogdGV4dHVyZTsgMy4gd2lkdGgsIHRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZTsgNC4gY2hhbm5lbHMsIGEgbm9uLWVtcHR5IHN1YnNldFxuICogb2YgJ1JHQkEnLCBpbmRpY2F0aW5nIHRoZSB2YWx1ZXMgb2Ygd2hpY2ggY2hhbm5lbHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlXG4gKiB0ZW5zb3IsIHN1Y2ggYXMgJ1InIG9yICdCUicgKFRoZSBvcmRlciBvZiB0aGUgY2hhbm5lbHMgYWZmZWN0IHRoZSBvcmRlciBvZlxuICogdGVuc29yIHZhbHVlcy4gKS4gKElmIHRoZSB2YWx1ZXMgcGFzc2VkIGZyb20gdGV4dHVyZSBpcyBsZXNzIHRoYW4gdGhlIHRlbnNvclxuICogc2l6ZSwgemVyb3Mgd2lsbCBiZSBwYWRkZWQgYXQgdGhlIHJlYXIuKS4gSWYgdGhlIHZhbHVlcyBpcyBhIGBXZWJHUFVEYXRhYFxuICogb2JqZWN0LCB0aGUgZHR5cGUgY291bGQgb25seSBiZSAnZmxvYXQzMicgb3IgJ2ludDMyIGFuZCB0aGUgb2JqZWN0IGhhcyB0b1xuICogaGF2ZTogYnVmZmVyLCBhIGBHUFVCdWZmZXJgLiBUaGUgYnVmZmVyIG11c3Q6IDEuIHNoYXJlIHRoZSBzYW1lIGBHUFVEZXZpY2VgXG4gKiB3aXRoIFRGSlMncyBXZWJHUFUgYmFja2VuZDsgMi4gYnVmZmVyLnVzYWdlIHNob3VsZCBhdCBsZWFzdCBzdXBwb3J0XG4gKiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkM7IDMuIGJ1ZmZlci5zaXplIHNob3VsZCBub3RcbiAqIGJlIHNtYWxsZXIgdGhhbiB0aGUgYnl0ZSBzaXplIG9mIHRlbnNvciBzaGFwZS4gV2ViR1BVRGF0YSBvcHRpb25hbGx5IHN1cHBvcnRzXG4gKiB6ZXJvIGNvcHkgYnkgZmxhZyB6ZXJvQ29weS4gV2hlbiB6ZXJvQ29weSBpcyBmYWxzZSBvciB1bmRlZmluZWQoZGVmYXVsdCksXG4gKiB0aGlzIHBhc3NpbmcgR1BVQnVmZmVyIGNhbiBiZSBkZXN0cm95ZWQgYWZ0ZXIgdGVuc29yIGlzIGNyZWF0ZWQuIFdoZW5cbiAqIHplcm9Db3B5IGlzIHRydWUsIHRoaXMgR1BVQnVmZmVyIGlzIGJvdW5kIGRpcmVjdGx5IGJ5IHRoZSB0ZW5zb3IsIHNvIGRvIG5vdFxuICogZGVzdHJveSB0aGlzIEdQVUJ1ZmZlciB1bnRpbCBhbGwgYWNjZXNzIGlzIGRvbmUuXG4gKiBAcGFyYW0gc2hhcGUgVGhlIHNoYXBlIG9mIHRoZSB0ZW5zb3IuIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsXG4gKiAgIGl0IGlzIGluZmVycmVkIGZyb20gYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3I8UiBleHRlbmRzIFJhbms+KFxuICAgIHZhbHVlczogVGVuc29yTGlrZXxXZWJHTERhdGF8V2ViR1BVRGF0YSwgc2hhcGU/OiBTaGFwZU1hcFtSXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yPFI+IHtcbiAgY29uc3QgaW5mZXJyZWRTaGFwZSA9IGluZmVyU2hhcGUodmFsdWVzLCBkdHlwZSk7XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/* Type definitions for exporting and importing of models. */\n/**\n * A map from Tensor dtype to number of bytes per element of the Tensor.\n */\nexport const DTYPE_VALUE_SIZE_MAP = {\n 'float32': 4,\n 'float16': 2,\n 'int32': 4,\n 'uint16': 2,\n 'uint8': 1,\n 'bool': 1,\n 'complex64': 8\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDZEQUE2RDtBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUE4QjtJQUM3RCxTQUFTLEVBQUUsQ0FBQztJQUNaLFNBQVMsRUFBRSxDQUFDO0lBQ1osT0FBTyxFQUFFLENBQUM7SUFDVixRQUFRLEVBQUUsQ0FBQztJQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxXQUFXLEVBQUUsQ0FBQztDQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGV4cG9ydGluZyBhbmQgaW1wb3J0aW5nIG9mIG1vZGVscy4gKi9cblxuLyoqXG4gKiBBIG1hcCBmcm9tIFRlbnNvciBkdHlwZSB0byBudW1iZXIgb2YgYnl0ZXMgcGVyIGVsZW1lbnQgb2YgdGhlIFRlbnNvci5cbiAqL1xuZXhwb3J0IGNvbnN0IERUWVBFX1ZBTFVFX1NJWkVfTUFQOiB7W2R0eXBlOiBzdHJpbmddOiBudW1iZXJ9ID0ge1xuICAnZmxvYXQzMic6IDQsXG4gICdmbG9hdDE2JzogMixcbiAgJ2ludDMyJzogNCxcbiAgJ3VpbnQxNic6IDIsXG4gICd1aW50OCc6IDEsXG4gICdib29sJzogMSxcbiAgJ2NvbXBsZXg2NCc6IDhcbn07XG5cbi8qKlxuICogQSB3ZWlnaHQgbWFuaWZlc3QuXG4gKlxuICogVGhlIHdlaWdodCBtYW5pZmVzdCBjb25zaXN0cyBvZiBhbiBvcmRlcmVkIGxpc3Qgb2Ygd2VpZ2h0LW1hbmlmZXN0IGdyb3Vwcy5cbiAqIEVhY2ggd2VpZ2h0LW1hbmlmZXN0IGdyb3VwIChcImdyb3VwXCIgZm9yIHNob3J0IGhlcmVhZnRlcikgY29uc2lzdHMgb2YgYVxuICogbnVtYmVyIG9mIHdlaWdodCB2YWx1ZXMgc3RvcmVkIGluIGEgbnVtYmVyIG9mIHBhdGhzLlxuICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBXZWlnaHRNYW5pZmVzdEdyb3VwQ29uZmlnYCBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5leHBvcnQgZGVjbGFyZSB0eXBlIFdlaWdodHNNYW5pZmVzdENvbmZpZyA9IFdlaWdodHNNYW5pZmVzdEdyb3VwQ29uZmlnW107XG5cbi8qKlxuICogQSB3ZWlnaHQtbWFuaWZlc3QgZ3JvdXAuXG4gKlxuICogQ29uc2lzdHMgb2YgYW4gb3JkZXJlZCBsaXN0IG9mIHdlaWdodCB2YWx1ZXMgZW5jb2RlZCBpbiBiaW5hcnkgZm9ybWF0LFxuICogc3RvcmVkIGluIGFuIG9yZGVyZWQgbGlzdCBvZiBwYXRocy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFdlaWdodHNNYW5pZmVzdEdyb3VwQ29uZmlnIHtcbiAgLyoqXG4gICAqIEFuIG9yZGVyZWQgbGlzdCBvZiBwYXRocy5cbiAgICpcbiAgICogUGF0aHMgYXJlIGludGVudGlvbmFsbHkgYWJzdHJhY3QgaW4gb3JkZXIgdG8gYmUgZ2VuZXJhbC4gRm9yIGV4YW1wbGUsIHRoZXlcbiAgICogY2FuIGJlIHJlbGF0aXZlIFVSTCBwYXRocyBvciByZWxhdGl2ZSBwYXRocyBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICBwYXRoczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljYXRpb25zIG9mIHRoZSB3ZWlnaHRzIHN0b3JlZCBpbiB0aGUgcGF0aHMuXG4gICAqL1xuICB3ZWlnaHRzOiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdO1xufVxuXG4vKipcbiAqIEdyb3VwIHRvIHdoaWNoIHRoZSB3ZWlnaHQgYmVsb25ncy5cbiAqXG4gKiAtICdvcHRpbWl6ZXInOiBXZWlnaHQgZnJvbSBhIHN0YXRlZnVsIG9wdGltaXplci5cbiAqL1xuZXhwb3J0IHR5cGUgV2VpZ2h0R3JvdXAgPSAnbW9kZWwnfCdvcHRpbWl6ZXInO1xuXG4vKipcbiAqIEFuIGVudHJ5IGluIHRoZSB3ZWlnaHQgbWFuaWZlc3QuXG4gKlxuICogVGhlIGVudHJ5IGNvbnRhaW5zIHNwZWNpZmljYXRpb24gb2YgYSB3ZWlnaHQuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXZWlnaHRzTWFuaWZlc3RFbnRyeSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSB3ZWlnaHQsIGUuZy4sICdEZW5zZV8xL2JpYXMnXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNoYXBlIG9mIHRoZSB3ZWlnaHQuXG4gICAqL1xuICBzaGFwZTogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIERhdGEgdHlwZSBvZiB0aGUgd2VpZ2h0LlxuICAgKi9cbiAgZHR5cGU6ICdmbG9hdDMyJ3wnaW50MzInfCdib29sJ3wnc3RyaW5nJ3wnY29tcGxleDY0JztcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgd2VpZ2h0LlxuICAgKlxuICAgKiBPcHRpb25hbC5cbiAgICpcbiAgICogVGhlIHZhbHVlICdvcHRpbWl6ZXInIGluZGljYXRlcyB0aGUgd2VpZ2h0IGJlbG9uZ3MgdG8gYW4gb3B0aW1pemVyXG4gICAqIChpLmUuLCB1c2VkIG9ubHkgZHVyaW5nIG1vZGVsIHRyYWluaW5nIGFuZCBub3QgZHVyaW5nIGluZmVyZW5jZSkuXG4gICAqL1xuICBncm91cD86IFdlaWdodEdyb3VwO1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBmb3IgZGVxdWFudGl6YXRpb24gb2YgdGhlIHdlaWdodC5cbiAgICovXG4gIHF1YW50aXphdGlvbj86IHtcbiAgICBzY2FsZT86IG51bWJlciwgIC8vIFRoZSBzY2FsaW5nIGNvbnN0YW50IHRvIG11bHRpcGx5IGJ5LlxuICAgIG1pbj86IG51bWJlciwgICAgLy8gVGhlIChwb3NzaWJseSBudWRnZWQpIG1pbmltdW0gd2VpZ2h0IHRvIGFkZC5cbiAgICAgICBkdHlwZTogJ3VpbnQxNid8J3VpbnQ4J3wnZmxvYXQxNicgIC8vIFRoZSBkdHlwZSBvZiB0aGUgcXVhbnRpemVkIHdlaWdodHMuXG4gIH07XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2F2aW5nIGEgbW9kZWwuXG4gKiBAaW5uYW1lc3BhY2UgaW9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYXZlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2F2ZSBvbmx5IHRoZSB0cmFpbmFibGUgd2VpZ2h0cyBvZiB0aGUgbW9kZWwsIGlnbm9yaW5nIHRoZVxuICAgKiBub24tdHJhaW5hYmxlIG9uZXMuXG4gICAqL1xuICB0cmFpbmFibGVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW1pemVyIHdpbGwgYmUgc2F2ZWQgKGlmIGV4aXN0cykuXG4gICAqXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAqL1xuICBpbmNsdWRlT3B0aW1pemVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzYXZpbmcgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVSZXN1bHQge1xuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGVsIGFydGlmYWN0cyBzYXZlZC5cbiAgICovXG4gIG1vZGVsQXJ0aWZhY3RzSW5mbzogTW9kZWxBcnRpZmFjdHNJbmZvO1xuXG4gIC8qKlxuICAgKiBIVFRQIHJlc3BvbnNlcyBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBoYW5kbGVkIHRoZSBtb2RlbC1zYXZpbmcgcmVxdWVzdCAoaWZcbiAgICogYW55KS4gVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgdG8gc2VydmVyLWJhc2VkIHNhdmluZyByb3V0ZXMuXG4gICAqL1xuICByZXNwb25zZXM/OiBSZXNwb25zZVtdO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlcyBhbmQgcmVsYXRlZCBkYXRhIChpZiBhbnkpLlxuICAgKi9cbiAgZXJyb3JzPzogQXJyYXk8e318c3RyaW5nPjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1vZGVsQXJ0aWZhY3RzSW5mbyB7XG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgZm9yIHdoZW4gdGhlIG1vZGVsIGlzIHNhdmVkLlxuICAgKi9cbiAgZGF0ZVNhdmVkOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUT0RPIChjYWlzLHlhc3NvZ2JhKSBjb25zaWRlciByZW1vdmluZyBHcmFwaERlZiBhcyBHcmFwaERlZnMgbm93XG4gICAqIGNvbWUgaW4gYSBKU09OIGZvcm1hdCBhbmQgbm9uZSBvZiBvdXIgSU9IYW5kbGVycyBzdXBwb3J0IGEgbm9uIGpzb25cbiAgICogZm9ybWF0LiBXZSBjb3VsZCBjb25kZXIgcmVwbGFjaW5nIHRoaXMgd2l0aCAnQmluYXJ5JyBpZiB3ZSB3YW50IHRvXG4gICAqIGFsbG93IGZ1dHVyZSBoYW5kbGVycyB0byBzYXZlIHRvIG5vbiBqc29uIGZvcm1hdHMgKHRob3VnaCB0aGV5IHdpbGxcbiAgICogcHJvYmFibHkgd2FudCBtb3JlIGluZm9ybWF0aW9uIHRoYW4gJ0JpbmFyeScpLlxuICAgKiBUeXBlIG9mIHRoZSBtb2RlbCB0b3BvbG9neVxuICAgKlxuICAgKiBUeXBlIG9mIHRoZSBtb2RlbCB0b3BvbG9neVxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAqICAgLSBKU09OOiBKU09OIGNvbmZpZyAoaHVtYW4tcmVhZGFibGUsIGUuZy4sIEtlcmFzIEpTT04pLlxuICAgKiAgIC0gR3JhcGhEZWY6IFRlbnNvckZsb3dcbiAgICogICAgIFtHcmFwaERlZl0oaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZXh0ZW5kL3Rvb2xfZGV2ZWxvcGVycy8jZ3JhcGhkZWYpXG4gICAqICAgICBwcm90b2NvbCBidWZmZXIgKGJpbmFyeSkuXG4gICAqL1xuICBtb2RlbFRvcG9sb2d5VHlwZTogJ0pTT04nfCdHcmFwaERlZic7XG5cbiAgLyoqXG4gICAqIFNpemUgb2YgbW9kZWwgdG9wb2xvZ3kgKEtlcmFzIEpTT04gb3IgR3JhcGhEZWYpLCBpbiBieXRlcy5cbiAgICovXG4gIG1vZGVsVG9wb2xvZ3lCeXRlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogU2l6ZSBvZiB3ZWlnaHQgc3BlY2lmaWNhdGlvbiBvciBtYW5pZmVzdCwgaW4gYnl0ZXMuXG4gICAqL1xuICB3ZWlnaHRTcGVjc0J5dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHdlaWdodCB2YWx1ZSBkYXRhLCBpbiBieXRlcy5cbiAgICovXG4gIHdlaWdodERhdGFCeXRlcz86IG51bWJlcjtcbn1cblxuLyoqIE1vZGVsIHRyYWluaW5nIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVHJhaW5pbmdDb25maWcge1xuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8vIFNlZVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMtbGF5ZXJzL2Jsb2IvbWFzdGVyL3NyYy9rZXJhc19mb3JtYXQvdHJhaW5pbmdfY29uZmlnLnRzXG4gIC8qKiBPcHRpbWl6ZXIgdXNlZCBmb3IgdGhlIG1vZGVsIHRyYWluaW5nLiAqL1xuICBvcHRpbWl6ZXJfY29uZmlnOiB7fTtcblxuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8qKiBMb3NzIGZ1bmN0aW9uKHMpIGZvciB0aGUgbW9kZWwncyBvdXRwdXQocykuICovXG4gIGxvc3M6IHN0cmluZ3xzdHJpbmdbXXx7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAvLyBUT0RPKGNhaXMpOiBUaWdodGVuIHRoZSB0eXBpbmcgb25jZSBrZXJhcyBzcGVjIGlzIGF2YWlsYWJsZSB0byB0ZmpzLWNvcmUuXG4gIC8qKiBNZXRyaWMgZnVuY3Rpb24ocykgZm9yIHRoZSBtb2RlbCdzIG91dHB1dChzKS4gKi9cbiAgbWV0cmljcz86IHN0cmluZ1tdfHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gIC8vIFRPRE8oY2Fpcyk6IFRpZ2h0ZW4gdGhlIHR5cGluZyBvbmNlIGtlcmFzIHNwZWMgaXMgYXZhaWxhYmxlIHRvIHRmanMtY29yZS5cbiAgd2VpZ2h0ZWRfbWV0cmljcz86IHN0cmluZ1tdO1xuXG4gIC8vIFRPRE8oY2Fpcyk6IFRpZ2h0ZW4gdGhlIHR5cGluZyBvbmNlIGtlcmFzIHNwZWMgaXMgYXZhaWxhYmxlIHRvIHRmanMtY29yZS5cbiAgc2FtcGxlX3dlaWdodF9tb2RlPzogc3RyaW5nO1xuXG4gIGxvc3Nfd2VpZ2h0cz86IG51bWJlcltdfHtba2V5OiBzdHJpbmddOiBudW1iZXJ9O1xufVxuXG5leHBvcnQgdHlwZSBXZWlnaHREYXRhID0gQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlcltdO1xuXG4vKipcbiAqIFRoZSBzZXJpYWxpemVkIGFydGlmYWN0cyBvZiBhIG1vZGVsLCBpbmNsdWRpbmcgdG9wb2xvZ3kgYW5kIHdlaWdodHMuXG4gKlxuICogVGhlIGBtb2RlbFRvcG9sb2d5YCwgYHRyYWluaW5nQ29uZmlnYCwgYHdlaWdodFNwZWNzYCBhbmQgYHdlaWdodERhdGFgIGZpZWxkc1xuICogb2YgdGhpcyBpbnRlcmZhY2UgYXJlIG9wdGlvbmFsLCBpbiBvcmRlciB0byBzdXBwb3J0IHRvcG9sb2d5LSBvciB3ZWlnaHRzLW9ubHlcbiAqIHNhdmluZyBhbmQgbG9hZGluZy5cbiAqXG4gKiBOb3RlIHRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW50ZXJuYWxseSBpbiBJT0hhbmRsZXJzLiAgRm9yIHRoZSBmaWxlIGZvcm1hdFxuICogd3JpdHRlbiB0byBkaXNrIGFzIGBtb2RlbC5qc29uYCwgc2VlIGBNb2RlbEpTT05gLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTW9kZWxBcnRpZmFjdHMge1xuICAvKipcbiAgICogTW9kZWwgdG9wb2xvZ3kuXG4gICAqXG4gICAqIEZvciBLZXJhcy1zdHlsZSBgdGYuTW9kZWxgcywgdGhpcyBpcyBhIEpTT04gb2JqZWN0LlxuICAgKiBGb3IgVGVuc29yRmxvdy1zdHlsZSBtb2RlbHMgKGUuZy4sIGBTYXZlZE1vZGVsYCksIHRoaXMgaXMgdGhlIEpTT05cbiAgICogZW5jb2Rpbmcgb2YgdGhlIGBHcmFwaERlZmAgcHJvdG9jb2wgYnVmZmVyLlxuICAgKi9cbiAgbW9kZWxUb3BvbG9neT86IHt9fEFycmF5QnVmZmVyO1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBtb2RlbCdzIHRyYWluaW5nLlxuICAgKi9cbiAgdHJhaW5pbmdDb25maWc/OiBUcmFpbmluZ0NvbmZpZztcblxuICAvKipcbiAgICogV2VpZ2h0IHNwZWNpZmljYXRpb25zLlxuICAgKlxuICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSB3ZWlnaHRzRGF0YSBiZWxvdy5cbiAgICovXG4gIHdlaWdodFNwZWNzPzogV2VpZ2h0c01hbmlmZXN0RW50cnlbXTtcblxuICAvKipcbiAgICogQmluYXJ5IGJ1ZmZlcihzKSBmb3IgYWxsIHdlaWdodCB2YWx1ZXMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieVxuICAgKiBgd2VpZ2h0U3BlY3NgLiBUaGlzIG1heSBiZSBhIHNpbmdsZSBBcnJheUJ1ZmZlciBvZiBhbGwgdGhlIHdlaWdodHNcbiAgICogY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIG9yIGFuIEFycmF5IG9mIEFycmF5QnVmZmVycyBjb250YWluaW5nIHRoZSB3ZWlnaHRzXG4gICAqICh3ZWlnaHRzIG1heSBiZSBzaGFyZGVkIGFjcm9zcyBtdWx0aXBsZSBBcnJheUJ1ZmZlcnMpLlxuICAgKi9cbiAgd2VpZ2h0RGF0YT86IFdlaWdodERhdGE7XG5cbiAgLyoqXG4gICAqIEhhcmQtY29kZWQgZm9ybWF0IG5hbWUgZm9yIG1vZGVscyBzYXZlZCBmcm9tIFRlbnNvckZsb3cuanMgb3IgY29udmVydGVkXG4gICAqIGJ5IFRlbnNvckZsb3cuanMgQ29udmVydGVyLlxuICAgKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0IGxpYnJhcnkgaXMgcmVzcG9uc2libGUgZm9yIG9yaWdpbmFsbHkgZ2VuZXJhdGluZyB0aGlzIGFydGlmYWN0LlxuICAgKlxuICAgKiBVc2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEUuZy4sICdUZW5zb3JGbG93LmpzIHYxLjAuMCcuXG4gICAqL1xuICBnZW5lcmF0ZWRCeT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBsaWJyYXJ5IG9yIHRvb2wgaXMgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgdGhlIG9yaWdpbmFsIG1vZGVsXG4gICAqIHRvIHRoaXMgZm9ybWF0LCBhcHBsaWNhYmxlIG9ubHkgaWYgdGhlIG1vZGVsIGlzIG91dHB1dCBieSBhIGNvbnZlcnRlci5cbiAgICpcbiAgICogVXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgRS5nLiwgJ1RlbnNvckZsb3cuanMgQ29udmVydGVyIHYxLjAuMCcuXG4gICAqXG4gICAqIEEgdmFsdWUgb2YgYG51bGxgIG1lYW5zIHRoZSBtb2RlbCBhcnRpZmFjdHMgYXJlIGdlbmVyYXRlZCB3aXRob3V0IGFueVxuICAgKiBjb252ZXJzaW9uIHByb2Nlc3MgKGUuZy4sIHNhdmVkIGRpcmVjdGx5IGZyb20gYSBUZW5zb3JGbG93LmpzXG4gICAqIGB0Zi5MYXllcnNNb2RlbGAgaW5zdGFuY2UuKVxuICAgKi9cbiAgY29udmVydGVkQnk/OiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogSW5wdXRzIGFuZCBvdXRwdXRzIHNpZ25hdHVyZSBmb3Igc2F2ZWQgbW9kZWwuXG4gICAqL1xuICBzaWduYXR1cmU/OiB7fTtcblxuICAvKipcbiAgICogVXNlci1kZWZpbmVkIG1ldGFkYXRhIGFib3V0IHRoZSBtb2RlbC5cbiAgICovXG4gIHVzZXJEZWZpbmVkTWV0YWRhdGE/OiB7W2tleTogc3RyaW5nXToge319O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplciBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgbW9kZWxJbml0aWFsaXplcj86IHt9O1xuXG4gIC8qKlxuICAgKiBJbnB1dHMgYW5kIG91dHB1dHMgc2lnbmF0dXJlIGZvciBtb2RlbCBpbml0aWFsaXplci5cbiAgICovXG4gIGluaXRpYWxpemVyU2lnbmF0dXJlPzoge307XG59XG5cbi8qKlxuICogVGhlIG9uLWRpc2sgZm9ybWF0IG9mIHRoZSBgbW9kZWwuanNvbmAgZmlsZS5cbiAqXG4gKiBURi5qcyAxLjAgYWx3YXlzIHBvcHVsYXRlcyB0aGUgb3B0aW9uYWwgZmllbGRzIHdoZW4gd3JpdGluZyBtb2RlbC5qc29uLlxuICogUHJpb3IgdmVyc2lvbnMgZGlkIG5vdCBwcm92aWRlIHRob3NlIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1vZGVsSlNPTiB7XG4gIC8qKlxuICAgKiBNb2RlbCB0b3BvbG9neS5cbiAgICpcbiAgICogRm9yIEtlcmFzLXN0eWxlIGB0Zi5Nb2RlbGBzLCB0aGlzIGlzIGEgSlNPTiBvYmplY3QuXG4gICAqIEZvciBUZW5zb3JGbG93LXN0eWxlIG1vZGVscyAoZS5nLiwgYFNhdmVkTW9kZWxgKSwgdGhpcyBpcyB0aGUgSlNPTlxuICAgKiBlbmNvZGluZyBvZiB0aGUgYEdyYXBoRGVmYCBwcm90b2NvbCBidWZmZXIuXG4gICAqL1xuICBtb2RlbFRvcG9sb2d5OiB7fTtcblxuICAvKiogTW9kZWwgdHJhaW5pbmcgY29uZmlndXJhdGlvbi4gKi9cbiAgdHJhaW5pbmdDb25maWc/OiBUcmFpbmluZ0NvbmZpZztcblxuICAvKipcbiAgICogV2VpZ2h0cyBtYW5pZmVzdC5cbiAgICpcbiAgICogVGhlIHdlaWdodHMgbWFuaWZlc3QgY29uc2lzdHMgb2YgYW4gb3JkZXJlZCBsaXN0IG9mIHdlaWdodC1tYW5pZmVzdFxuICAgKiBncm91cHMuIEVhY2ggd2VpZ2h0LW1hbmlmZXN0IGdyb3VwIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHdlaWdodCB2YWx1ZXNcbiAgICogc3RvcmVkIGluIGEgbnVtYmVyIG9mIHBhdGhzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2ZcbiAgICogYFdlaWdodHNNYW5pZmVzdENvbmZpZ2AgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHdlaWdodHNNYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBIYXJkLWNvZGVkIGZvcm1hdCBuYW1lIGZvciBtb2RlbHMgc2F2ZWQgZnJvbSBUZW5zb3JGbG93LmpzIG9yIGNvbnZlcnRlZFxuICAgKiBieSBUZW5zb3JGbG93LmpzIENvbnZlcnRlci5cbiAgICovXG4gIGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hhdCBsaWJyYXJ5IGlzIHJlc3BvbnNpYmxlIGZvciBvcmlnaW5hbGx5IGdlbmVyYXRpbmcgdGhpcyBhcnRpZmFjdC5cbiAgICpcbiAgICogVXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBFLmcuLCAnVGVuc29yRmxvdy5qcyB2MS4wLjAnLlxuICAgKi9cbiAgZ2VuZXJhdGVkQnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgbGlicmFyeSBvciB0b29sIGlzIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIHRoZSBvcmlnaW5hbCBtb2RlbFxuICAgKiB0byB0aGlzIGZvcm1hdCwgYXBwbGljYWJsZSBvbmx5IGlmIHRoZSBtb2RlbCBpcyBvdXRwdXQgYnkgYSBjb252ZXJ0ZXIuXG4gICAqXG4gICAqIFVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIEUuZy4sICdUZW5zb3JGbG93LmpzIENvbnZlcnRlciB2MS4wLjAnLlxuICAgKlxuICAgKiBBIHZhbHVlIG9mIGBudWxsYCBtZWFucyB0aGUgbW9kZWwgYXJ0aWZhY3RzIGFyZSBnZW5lcmF0ZWQgd2l0aG91dCBhbnlcbiAgICogY29udmVyc2lvbiBwcm9jZXNzIChlLmcuLCBzYXZlZCBkaXJlY3RseSBmcm9tIGEgVGVuc29yRmxvdy5qc1xuICAgKiBgdGYuTGF5ZXJzTW9kZWxgIGluc3RhbmNlLilcbiAgICovXG4gIGNvbnZlcnRlZEJ5Pzogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIElucHV0cyBhbmQgb3V0cHV0cyBzaWduYXR1cmUgZm9yIHNhdmVkIG1vZGVsLlxuICAgKi9cbiAgc2lnbmF0dXJlPzoge307XG5cbiAgLyoqXG4gICAqIFVzZXItZGVmaW5lZCBtZXRhZGF0YSBhYm91dCB0aGUgbW9kZWwuXG4gICAqL1xuICB1c2VyRGVmaW5lZE1ldGFkYXRhPzoge1trZXk6IHN0cmluZ106IHt9fTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXIgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIG1vZGVsSW5pdGlhbGl6ZXI/OiB7fTtcblxuICAvKipcbiAgICogSW5wdXRzIGFuZCBvdXRwdXRzIHNpZ25hdHVyZSBmb3IgbW9kZWwgaW5pdGlhbGl6ZXIuXG4gICAqL1xuICBpbml0aWFsaXplclNpZ25hdHVyZT86IHt9O1xufVxuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgaGFuZGxlcnMgb2YgbG9hZGluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBMb2FkSGFuZGxlciA9ICgpID0+IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+O1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgaGFuZGxlcnMgb2Ygc2F2aW5nIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIFNhdmVIYW5kbGVyID0gKG1vZGVsQXJ0aWZhY3Q6IE1vZGVsQXJ0aWZhY3RzKSA9PlxuICAgIFByb21pc2U8U2F2ZVJlc3VsdD47XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhIG1vZGVsIGltcG9ydC9leHBvcnQgaGFuZGxlci5cbiAqXG4gKiBUaGUgYHNhdmVgIGFuZCBgbG9hZGAgaGFuZGxlcnMgYXJlIGJvdGggb3B0aW9uYWwsIGluIG9yZGVyIHRvIGFsbG93IGhhbmRsZXJzXG4gKiB0aGF0IHN1cHBvcnQgb25seSBzYXZpbmcgb3IgbG9hZGluZy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmludGVyZmFjZS1uYW1lXG5leHBvcnQgaW50ZXJmYWNlIElPSGFuZGxlciB7XG4gIHNhdmU/OiBTYXZlSGFuZGxlcjtcbiAgbG9hZD86IExvYWRIYW5kbGVyO1xufVxuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgaGFuZGxlcnMgb2Ygc3luY2hyb25vdXMgbG9hZGluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBMb2FkSGFuZGxlclN5bmMgPSAoKSA9PiBNb2RlbEFydGlmYWN0cztcblxuLyoqXG4gKiBUeXBlIGRlZmluaXRpb24gZm9yIGhhbmRsZXJzIG9mIHN5bmNocm9ub3VzIHNhdmluZyBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBTYXZlSGFuZGxlclN5bmMgPSAobW9kZWxBcnRpZmFjdDogTW9kZWxBcnRpZmFjdHMpID0+IFNhdmVSZXN1bHQ7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhIHN5bmNocm9ub3VzIG1vZGVsIGltcG9ydC9leHBvcnQgaGFuZGxlci5cbiAqXG4gKiBUaGUgYHNhdmVgIGFuZCBgbG9hZGAgaGFuZGxlcnMgYXJlIGJvdGggb3B0aW9uYWwsIGluIG9yZGVyIHRvIGFsbG93IGhhbmRsZXJzXG4gKiB0aGF0IHN1cHBvcnQgb25seSBzYXZpbmcgb3IgbG9hZGluZy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmludGVyZmFjZS1uYW1lXG5leHBvcnQgdHlwZSBJT0hhbmRsZXJTeW5jID0ge1xuICBzYXZlPzogU2F2ZUhhbmRsZXJTeW5jO1xuICBsb2FkPzogTG9hZEhhbmRsZXJTeW5jO1xufTtcblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgZm9yIHRoZSBtYW5hZ2VyIG9mIGEgbW9kZWwgc3RvcmUuXG4gKlxuICogQSBtb2RlbCBzdG9yZSBpcyBkZWZpbmVkIGFzIGEgc3RvcmFnZSBtZWRpdW0gb24gd2hpY2ggbXVsdGlwbGUgbW9kZWxzIGNhblxuICogYmUgc3RvcmVkLiBFYWNoIHN0b3JlZCBtb2RlbCBoYXMgYSB1bmlxdWUgYHBhdGhgIGFzIGl0cyBpZGVudGlmaWVyLlxuICogQSBgTW9kZWxTdG9yZU1hbmFnZXJgIGZvciB0aGUgc3RvcmUgYWxsb3dzIGFjdGlvbnMgaW5jbHVkaW5nXG4gKlxuICogLSBMaXN0aW5nIHRoZSBtb2RlbHMgc3RvcmVkIGluIHRoZSBzdG9yZS5cbiAqIC0gRGVsZXRpbmcgYSBtb2RlbCBmcm9tIHRoZSBzdG9yZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFN0b3JlTWFuYWdlciB7XG4gIC8qKlxuICAgKiBMaXN0IGFsbCBtb2RlbHMgaW4gdGhlIG1vZGVsIHN0b3JlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGRpY3Rpb25hcnkgbWFwcGluZyBwYXRocyBvZiBleGlzdGluZyBtb2RlbHMgdG8gdGhlaXJcbiAgICogICBtb2RlbCBhcnRpZmFjdHMgaW5mby4gTW9kZWwgYXJ0aWZhY3RzIGluZm8gaW5jbHVkZSB0eXBlIG9mIHRoZSBtb2RlbCdzXG4gICAqICAgdG9wb2xvZ3ksIGJ5dGUgc2l6ZXMgb2YgdGhlIHRvcG9sb2d5LCB3ZWlnaHRzLCBldGMuXG4gICAqL1xuICBsaXN0TW9kZWxzKCk6IFByb21pc2U8e1twYXRoOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PjtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgbW9kZWwgc3BlY2lmaWVkIGJ5IGBwYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhcbiAgICogQHJldHVybnMgTW9kZWxBcnRpZmFjdHNJbmZvIG9mIHRoZSBkZWxldGVkIG1vZGVsIChpZiBhbmQgb25seSBpZiBkZWxldGlvblxuICAgKiAgIGlzIHN1Y2Nlc3NmdWwpLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGRlbGV0aW9uIGZhaWxzLCBlLmcuLCBpZiBubyBtb2RlbCBleGlzdHMgYXQgYHBhdGhgLlxuICAgKi9cbiAgcmVtb3ZlTW9kZWwocGF0aDogc3RyaW5nKTogUHJvbWlzZTxNb2RlbEFydGlmYWN0c0luZm8+O1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciB0aGUgcHJvZ3Jlc3Mgb2YgYSBsb25nLXJ1bm5pbmcgYWN0aW9uIHN1Y2ggYXMgYW4gSFRUUFxuICogcmVxdWVzdCBmb3IgYSBsYXJnZSBiaW5hcnkgb2JqZWN0LlxuICpcbiAqIGBmcmFjdGlvbmAgc2hvdWxkIGJlIGEgbnVtYmVyIGluIHRoZSBbMCwgMV0gaW50ZXJ2YWwsIGluZGljYXRpbmcgaG93XG4gKiBtdWNoIG9mIHRoZSBhY3Rpb24gaGFzIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgT25Qcm9ncmVzc0NhbGxiYWNrID0gKGZyYWN0aW9uOiBudW1iZXIpID0+IHZvaWQ7XG5cbi8qKiBAaW5uYW1lc3BhY2UgaW8gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZE9wdGlvbnMge1xuICAvKipcbiAgICogUmVxdWVzdEluaXQgKG9wdGlvbnMpIGZvciBIVFRQIHJlcXVlc3RzLlxuICAgKlxuICAgKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHN1cHBvcnRlZCBmaWVsZHMsIHNlZVxuICAgKiBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdF0oXG4gICAqICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0KVxuICAgKi9cbiAgcmVxdWVzdEluaXQ/OiBSZXF1ZXN0SW5pdDtcblxuICAvKipcbiAgICogUHJvZ3Jlc3MgY2FsbGJhY2suXG4gICAqL1xuICBvblByb2dyZXNzPzogT25Qcm9ncmVzc0NhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGB3aW5kb3cuZmV0Y2hgIGZ1bmN0aW9uLlxuICAgKi9cbiAgZmV0Y2hGdW5jPzogRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFN0cmljdCBsb2FkaW5nIG1vZGVsOiB3aGV0aGVyIGV4dHJhbmVvdXMgd2VpZ2h0cyBvciBtaXNzaW5nXG4gICAqIHdlaWdodHMgc2hvdWxkIHRyaWdnZXIgYW4gYEVycm9yYC5cbiAgICpcbiAgICogSWYgYHRydWVgLCByZXF1aXJlIHRoYXQgdGhlIHByb3ZpZGVkIHdlaWdodHMgZXhhY3RseSBtYXRjaCB0aG9zZVxuICAgKiByZXF1aXJlZCBieSB0aGUgbGF5ZXJzLiBgZmFsc2VgIG1lYW5zIHRoYXQgYm90aCBleHRyYSB3ZWlnaHRzXG4gICAqIGFuZCBtaXNzaW5nIHdlaWdodHMgd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLlxuICAgKlxuICAgKiBEZWZhdWx0OiBgdHJ1ZWAuXG4gICAqL1xuICBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRoIHByZWZpeCBmb3Igd2VpZ2h0IGZpbGVzLCBieSBkZWZhdWx0IHRoaXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZVxuICAgKiBwYXRoIG9mIHRoZSBtb2RlbCBKU09OIGZpbGUuXG4gICAqXG4gICAqIEZvciBpbnN0YW5jZSwgaWYgdGhlIHBhdGggdG8gdGhlIG1vZGVsIEpTT04gZmlsZSBpc1xuICAgKiBgaHR0cDovL2xvY2FsaG9zdC9mb28vbW9kZWwuanNvbmAsIHRoZW4gdGhlIGRlZmF1bHQgcGF0aCBwcmVmaXggd2lsbCBiZVxuICAgKiBgaHR0cDovL2xvY2FsaG9zdC9mb28vYC4gSWYgYSB3ZWlnaHQgZmlsZSBoYXMgdGhlIHBhdGggdmFsdWVcbiAgICogYGdyb3VwMS1zaGFyZDFvZjJgIGluIHRoZSB3ZWlnaHQgbWFuaWZlc3QsIHRoZW4gdGhlIHdlaWdodCBmaWxlIHdpbGwgYmVcbiAgICogbG9hZGVkIGZyb20gYGh0dHA6Ly9sb2NhbGhvc3QvZm9vL2dyb3VwMS1zaGFyZDFvZjJgIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsXG4gICAqIGlmIHlvdSBwcm92aWRlIGEgYHdlaWdodFBhdGhQcmVmaXhgIHZhbHVlIG9mXG4gICAqIGBodHRwOi8vbG9jYWxob3N0L2Zvby9hbHQtd2VpZ2h0c2AsIHRoZW4gdGhlIHdlaWdodCBmaWxlIHdpbGwgYmUgbG9hZGVkXG4gICAqIGZyb20gdGhlIHBhdGggYGh0dHA6Ly9sb2NhbGhvc3QvZm9vL2FsdC13ZWlnaHRzL2dyb3VwMS1zaGFyZDFvZjJgIGluc3RlYWQuXG4gICAqL1xuICB3ZWlnaHRQYXRoUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb2R1bGUgb3IgbW9kZWwgaXMgdG8gYmUgbG9hZGVkIGZyb20gVEYgSHViLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIGFsbG93cyBwYXNzaW5nIGEgVEYtSHViIG1vZHVsZSBVUkwsIG9taXR0aW5nIHRoZVxuICAgKiBzdGFuZGFyZCBtb2RlbCBmaWxlIG5hbWUgYW5kIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBEZWZhdWx0OiBgZmFsc2VgLlxuICAgKi9cbiAgZnJvbVRGSHViPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gYXN5bmMgZnVuY3Rpb24gdG8gY29udmVydCB3ZWlnaHQgZmlsZSBuYW1lIHRvIFVSTC4gVGhlIHdlaWdodCBmaWxlXG4gICAqIG5hbWVzIGFyZSBzdG9yZWQgaW4gbW9kZWwuanNvbidzIHdlaWdodHNNYW5pZmVzdC5wYXRocyBmaWVsZC4gQnkgZGVmYXVsdCB3ZVxuICAgKiBjb25zaWRlciB3ZWlnaHQgZmlsZXMgYXJlIGNvbG9jYXRlZCB3aXRoIHRoZSBtb2RlbC5qc29uIGZpbGUuIEZvciBleGFtcGxlOlxuICAgKiAgICAgbW9kZWwuanNvbiBVUkw6IGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbW9kZWxzLzEvbW9kZWwuanNvblxuICAgKiAgICAgZ3JvdXAxLXNoYXJkMW9mMS5iaW4gdXJsOlxuICAgKiAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tb2RlbHMvMS9ncm91cDEtc2hhcmQxb2YxLmJpblxuICAgKlxuICAgKiBXaXRoIHRoaXMgZnVuYyB5b3UgY2FuIGNvbnZlcnQgdGhlIHdlaWdodCBmaWxlIG5hbWUgdG8gYW55IFVSTC5cbiAgICovXG4gIHdlaWdodFVybENvbnZlcnRlcj86ICh3ZWlnaHRGaWxlTmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBvcHRpb25zIGZvciBQbGF0Zm9ybS5mZXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3REZXRhaWxzIHtcbiAgLyoqXG4gICAqIElzIHRoaXMgcmVxdWVzdCBmb3IgYSBiaW5hcnkgZmlsZSAoYXMgb3Bwb3NlZCB0byBhIGpzb24gZmlsZSlcbiAgICovXG4gIGlzQmluYXJ5PzogYm9vbGVhbjtcbn1cbiJdfQ==","import * as util from '../util';\n/**\n * Wraps a list of ArrayBuffers into a `slice()`-able object without allocating\n * a large ArrayBuffer.\n *\n * Allocating large ArrayBuffers (~2GB) can be unstable on Chrome. TFJS loads\n * its weights as a list of (usually) 4MB ArrayBuffers and then slices the\n * weight tensors out of them. For small models, it's safe to concatenate all\n * the weight buffers into a single ArrayBuffer and then slice the weight\n * tensors out of it, but for large models, a different approach is needed.\n */\nexport class CompositeArrayBuffer {\n /**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers An array of ArrayBuffers to concatenate, or a single\n * ArrayBuffer.\n * @returns Result of concatenating `buffers` in order.\n */\n static join(buffers) {\n return new CompositeArrayBuffer(buffers).slice();\n }\n constructor(buffers) {\n this.shards = [];\n this.previousShardIndex = 0;\n if (buffers == null) {\n return;\n }\n // Normalize the `buffers` input to be `ArrayBuffer[]`.\n if (!(buffers instanceof Array)) {\n buffers = [buffers];\n }\n buffers = buffers.map((bufferOrTypedArray) => {\n if (util.isTypedArray(bufferOrTypedArray)) {\n return bufferOrTypedArray.buffer;\n }\n return bufferOrTypedArray;\n });\n // Skip setting up shards if there are no buffers.\n if (buffers.length === 0) {\n return;\n }\n this.bufferUniformSize = buffers[0].byteLength;\n let start = 0;\n for (let i = 0; i < buffers.length; i++) {\n const buffer = buffers[i];\n // Check that all buffers except the last one have the same length.\n if (i !== buffers.length - 1 &&\n buffer.byteLength !== this.bufferUniformSize) {\n // Unset the buffer uniform size, since the buffer sizes are not\n // uniform.\n this.bufferUniformSize = undefined;\n }\n // Create the shards, including their start and end points.\n const end = start + buffer.byteLength;\n this.shards.push({ buffer, start, end });\n start = end;\n }\n // Set the byteLenghth\n if (this.shards.length === 0) {\n this.byteLength = 0;\n }\n this.byteLength = this.shards[this.shards.length - 1].end;\n }\n slice(start = 0, end = this.byteLength) {\n // If there are no shards, then the CompositeArrayBuffer was initialized\n // with no data.\n if (this.shards.length === 0) {\n return new ArrayBuffer(0);\n }\n // NaN is treated as zero for slicing. This matches ArrayBuffer's behavior.\n start = isNaN(Number(start)) ? 0 : start;\n end = isNaN(Number(end)) ? 0 : end;\n // Fix the bounds to within the array.\n start = Math.max(0, start);\n end = Math.min(this.byteLength, end);\n if (end <= start) {\n return new ArrayBuffer(0);\n }\n const startShardIndex = this.findShardForByte(start);\n if (startShardIndex === -1) {\n // This should not happen since the start and end indices are always\n // within 0 and the composite array's length.\n throw new Error(`Could not find start shard for byte ${start}`);\n }\n const size = end - start;\n const outputBuffer = new ArrayBuffer(size);\n const outputArray = new Uint8Array(outputBuffer);\n let sliced = 0;\n for (let i = startShardIndex; i < this.shards.length; i++) {\n const shard = this.shards[i];\n const globalStart = start + sliced;\n const localStart = globalStart - shard.start;\n const outputStart = sliced;\n const globalEnd = Math.min(end, shard.end);\n const localEnd = globalEnd - shard.start;\n const outputSlice = new Uint8Array(shard.buffer, localStart, localEnd - localStart);\n outputArray.set(outputSlice, outputStart);\n sliced += outputSlice.length;\n if (end < shard.end) {\n break;\n }\n }\n return outputBuffer;\n }\n /**\n * Get the index of the shard that contains the byte at `byteIndex`.\n */\n findShardForByte(byteIndex) {\n if (this.shards.length === 0 || byteIndex < 0 ||\n byteIndex >= this.byteLength) {\n return -1;\n }\n // If the buffers have a uniform size, compute the shard directly.\n if (this.bufferUniformSize != null) {\n this.previousShardIndex = Math.floor(byteIndex / this.bufferUniformSize);\n return this.previousShardIndex;\n }\n // If the buffers don't have a uniform size, we need to search for the\n // shard. That means we need a function to check where the byteIndex lies\n // relative to a given shard.\n function check(shard) {\n if (byteIndex < shard.start) {\n return -1;\n }\n if (byteIndex >= shard.end) {\n return 1;\n }\n return 0;\n }\n // For efficiency, try the previous shard first.\n if (check(this.shards[this.previousShardIndex]) === 0) {\n return this.previousShardIndex;\n }\n // Otherwise, use a generic search function.\n // This should almost never end up being used in practice since the weight\n // entries should always be in order.\n const index = search(this.shards, check);\n if (index === -1) {\n return -1;\n }\n this.previousShardIndex = index;\n return this.previousShardIndex;\n }\n}\n/**\n * Search for an element of a sorted array.\n *\n * @param sortedArray The sorted array to search\n * @param compare A function to compare the current value against the searched\n * value. Return 0 on a match, negative if the searched value is less than\n * the value passed to the function, and positive if the searched value is\n * greater than the value passed to the function.\n * @returns The index of the element, or -1 if it's not in the array.\n */\nexport function search(sortedArray, compare) {\n // Binary search\n let min = 0;\n let max = sortedArray.length;\n while (min <= max) {\n const middle = Math.floor((max - min) / 2) + min;\n const side = compare(sortedArray[middle]);\n if (side === 0) {\n return middle;\n }\n else if (side < 0) {\n max = middle;\n }\n else {\n min = middle + 1;\n }\n }\n return -1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlX2FycmF5X2J1ZmZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vY29tcG9zaXRlX2FycmF5X2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFRaEM7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQU0vQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQXFDO1FBQy9DLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxPQUNFO1FBakJOLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQzNCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQWlCN0IsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckI7UUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO2FBQ2xDO1lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILGtEQUFrRDtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQy9DLElB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QU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLEdBQUcsR0FBRyxNQUFNLENBQUM7U0FDZDthQUFNO1lBQ0wsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbEI7S0FDRjtJQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIEJ1ZmZlclNoYXJkID0ge1xuICBzdGFydDogbnVtYmVyLFxuICBlbmQ6IG51bWJlcixcbiAgYnVmZmVyOiBBcnJheUJ1ZmZlcixcbn07XG5cbi8qKlxuICogV3JhcHMgYSBsaXN0IG9mIEFycmF5QnVmZmVycyBpbnRvIGEgYHNsaWNlKClgLWFibGUgb2JqZWN0IHdpdGhvdXQgYWxsb2NhdGluZ1xuICogYSBsYXJnZSBBcnJheUJ1ZmZlci5cbiAqXG4gKiBBbGxvY2F0aW5nIGxhcmdlIEFycmF5QnVmZmVycyAofjJHQikgY2FuIGJlIHVuc3RhYmxlIG9uIENocm9tZS4gVEZKUyBsb2Fkc1xuICogaXRzIHdlaWdodHMgYXMgYSBsaXN0IG9mICh1c3VhbGx5KSA0TUIgQXJyYXlCdWZmZXJzIGFuZCB0aGVuIHNsaWNlcyB0aGVcbiAqIHdlaWdodCB0ZW5zb3JzIG91dCBvZiB0aGVtLiBGb3Igc21hbGwgbW9kZWxzLCBpdCdzIHNhZmUgdG8gY29uY2F0ZW5hdGUgYWxsXG4gKiB0aGUgd2VpZ2h0IGJ1ZmZlcnMgaW50byBhIHNpbmdsZSBBcnJheUJ1ZmZlciBhbmQgdGhlbiBzbGljZSB0aGUgd2VpZ2h0XG4gKiB0ZW5zb3JzIG91dCBvZiBpdCwgYnV0IGZvciBsYXJnZSBtb2RlbHMsIGEgZGlmZmVyZW50IGFwcHJvYWNoIGlzIG5lZWRlZC5cbiAqL1xuXG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlQXJyYXlCdWZmZXIge1xuICBwcml2YXRlIHNoYXJkczogQnVmZmVyU2hhcmRbXSA9IFtdO1xuICBwcml2YXRlIHByZXZpb3VzU2hhcmRJbmRleCA9IDA7XG4gIHByaXZhdGUgYnVmZmVyVW5pZm9ybVNpemU/OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBieXRlTGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbmNhdGVuYXRlIGEgbnVtYmVyIG9mIEFycmF5QnVmZmVycyBpbnRvIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGJ1ZmZlcnMgQW4gYXJyYXkgb2YgQXJyYXlCdWZmZXJzIHRvIGNvbmNhdGVuYXRlLCBvciBhIHNpbmdsZVxuICAgKiAgICAgQXJyYXlCdWZmZXIuXG4gICAqIEByZXR1cm5zIFJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIGBidWZmZXJzYCBpbiBvcmRlci5cbiAgICovXG4gIHN0YXRpYyBqb2luKGJ1ZmZlcnM/OiBBcnJheUJ1ZmZlcltdIHwgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUFycmF5QnVmZmVyKGJ1ZmZlcnMpLnNsaWNlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihidWZmZXJzPzogQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlcltdIHwgVHlwZWRBcnJheSB8XG4gICAgVHlwZWRBcnJheVtdKSB7XG4gICAgaWYgKGJ1ZmZlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgdGhlIGBidWZmZXJzYCBpbnB1dCB0byBiZSBgQXJyYXlCdWZmZXJbXWAuXG4gICAgaWYgKCEoYnVmZmVycyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgYnVmZmVycyA9IFtidWZmZXJzXTtcbiAgICB9XG4gICAgYnVmZmVycyA9IGJ1ZmZlcnMubWFwKChidWZmZXJPclR5cGVkQXJyYXkpID0+IHtcbiAgICAgIGlmICh1dGlsLmlzVHlwZWRBcnJheShidWZmZXJPclR5cGVkQXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBidWZmZXJPclR5cGVkQXJyYXkuYnVmZmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1ZmZlck9yVHlwZWRBcnJheTtcbiAgICB9KTtcblxuICAgIC8vIFNraXAgc2V0dGluZyB1cCBzaGFyZHMgaWYgdGhlcmUgYXJlIG5vIGJ1ZmZlcnMuXG4gICAgaWYgKGJ1ZmZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSA9IGJ1ZmZlcnNbMF0uYnl0ZUxlbmd0aDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xuICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgYnVmZmVycyBleGNlcHQgdGhlIGxhc3Qgb25lIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuICAgICAgaWYgKGkgIT09IGJ1ZmZlcnMubGVuZ3RoIC0gMSAmJlxuICAgICAgICBidWZmZXIuYnl0ZUxlbmd0aCAhPT0gdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSkge1xuICAgICAgICAvLyBVbnNldCB0aGUgYnVmZmVyIHVuaWZvcm0gc2l6ZSwgc2luY2UgdGhlIGJ1ZmZlciBzaXplcyBhcmUgbm90XG4gICAgICAgIC8vIHVuaWZvcm0uXG4gICAgICAgIHRoaXMuYnVmZmVyVW5pZm9ybVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgc2hhcmRzLCBpbmNsdWRpbmcgdGhlaXIgc3RhcnQgYW5kIGVuZCBwb2ludHMuXG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgdGhpcy5zaGFyZHMucHVzaCh7IGJ1ZmZlciwgc3RhcnQsIGVuZCB9KTtcbiAgICAgIHN0YXJ0ID0gZW5kO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgYnl0ZUxlbmdodGhcbiAgICBpZiAodGhpcy5zaGFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmJ5dGVMZW5ndGggPSAwO1xuICAgIH1cbiAgICB0aGlzLmJ5dGVMZW5ndGggPSB0aGlzLnNoYXJkc1t0aGlzLnNoYXJkcy5sZW5ndGggLSAxXS5lbmQ7XG4gIH1cblxuICBzbGljZShzdGFydCA9IDAsIGVuZCA9IHRoaXMuYnl0ZUxlbmd0aCk6IEFycmF5QnVmZmVyIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc2hhcmRzLCB0aGVuIHRoZSBDb21wb3NpdGVBcnJheUJ1ZmZlciB3YXMgaW5pdGlhbGl6ZWRcbiAgICAvLyB3aXRoIG5vIGRhdGEuXG4gICAgaWYgKHRoaXMuc2hhcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG5cbiAgICAvLyBOYU4gaXMgdHJlYXRlZCBhcyB6ZXJvIGZvciBzbGljaW5nLiBUaGlzIG1hdGNoZXMgQXJyYXlCdWZmZXIncyBiZWhhdmlvci5cbiAgICBzdGFydCA9IGlzTmFOKE51bWJlcihzdGFydCkpID8gMCA6IHN0YXJ0O1xuICAgIGVuZCA9IGlzTmFOKE51bWJlcihlbmQpKSA/IDAgOiBlbmQ7XG5cbiAgICAvLyBGaXggdGhlIGJvdW5kcyB0byB3aXRoaW4gdGhlIGFycmF5LlxuICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgc3RhcnQpO1xuICAgIGVuZCA9IE1hdGgubWluKHRoaXMuYnl0ZUxlbmd0aCwgZW5kKTtcbiAgICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0U2hhcmRJbmRleCA9IHRoaXMuZmluZFNoYXJkRm9yQnl0ZShzdGFydCk7XG4gICAgaWYgKHN0YXJ0U2hhcmRJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gc2luY2UgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBhcmUgYWx3YXlzXG4gICAgICAvLyB3aXRoaW4gMCBhbmQgdGhlIGNvbXBvc2l0ZSBhcnJheSdzIGxlbmd0aC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3RhcnQgc2hhcmQgZm9yIGJ5dGUgJHtzdGFydH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaXplID0gZW5kIC0gc3RhcnQ7XG4gICAgY29uc3Qgb3V0cHV0QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNpemUpO1xuICAgIGNvbnN0IG91dHB1dEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0QnVmZmVyKTtcbiAgICBsZXQgc2xpY2VkID0gMDtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRTaGFyZEluZGV4OyBpIDwgdGhpcy5zaGFyZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHNbaV07XG5cbiAgICAgIGNvbnN0IGdsb2JhbFN0YXJ0ID0gc3RhcnQgKyBzbGljZWQ7XG4gICAgICBjb25zdCBsb2NhbFN0YXJ0ID0gZ2xvYmFsU3RhcnQgLSBzaGFyZC5zdGFydDtcbiAgICAgIGNvbnN0IG91dHB1dFN0YXJ0ID0gc2xpY2VkO1xuXG4gICAgICBjb25zdCBnbG9iYWxFbmQgPSBNYXRoLm1pbihlbmQsIHNoYXJkLmVuZCk7XG4gICAgICBjb25zdCBsb2NhbEVuZCA9IGdsb2JhbEVuZCAtIHNoYXJkLnN0YXJ0O1xuXG4gICAgICBjb25zdCBvdXRwdXRTbGljZSA9IG5ldyBVaW50OEFycmF5KHNoYXJkLmJ1ZmZlciwgbG9jYWxTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxFbmQgLSBsb2NhbFN0YXJ0KTtcbiAgICAgIG91dHB1dEFycmF5LnNldChvdXRwdXRTbGljZSwgb3V0cHV0U3RhcnQpO1xuICAgICAgc2xpY2VkICs9IG91dHB1dFNsaWNlLmxlbmd0aDtcblxuICAgICAgaWYgKGVuZCA8IHNoYXJkLmVuZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dEJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBzaGFyZCB0aGF0IGNvbnRhaW5zIHRoZSBieXRlIGF0IGBieXRlSW5kZXhgLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kU2hhcmRGb3JCeXRlKGJ5dGVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaGFyZHMubGVuZ3RoID09PSAwIHx8IGJ5dGVJbmRleCA8IDAgfHxcbiAgICAgIGJ5dGVJbmRleCA+PSB0aGlzLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgYnVmZmVycyBoYXZlIGEgdW5pZm9ybSBzaXplLCBjb21wdXRlIHRoZSBzaGFyZCBkaXJlY3RseS5cbiAgICBpZiAodGhpcy5idWZmZXJVbmlmb3JtU2l6ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2hhcmRJbmRleCA9IE1hdGguZmxvb3IoYnl0ZUluZGV4IC8gdGhpcy5idWZmZXJVbmlmb3JtU2l6ZSk7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2aW91c1NoYXJkSW5kZXg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGJ1ZmZlcnMgZG9uJ3QgaGF2ZSBhIHVuaWZvcm0gc2l6ZSwgd2UgbmVlZCB0byBzZWFyY2ggZm9yIHRoZVxuICAgIC8vIHNoYXJkLiBUaGF0IG1lYW5zIHdlIG5lZWQgYSBmdW5jdGlvbiB0byBjaGVjayB3aGVyZSB0aGUgYnl0ZUluZGV4IGxpZXNcbiAgICAvLyByZWxhdGl2ZSB0byBhIGdpdmVuIHNoYXJkLlxuICAgIGZ1bmN0aW9uIGNoZWNrKHNoYXJkOiBCdWZmZXJTaGFyZCkge1xuICAgICAgaWYgKGJ5dGVJbmRleCA8IHNoYXJkLnN0YXJ0KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChieXRlSW5kZXggPj0gc2hhcmQuZW5kKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gRm9yIGVmZmljaWVuY3ksIHRyeSB0aGUgcHJldmlvdXMgc2hhcmQgZmlyc3QuXG4gICAgaWYgKGNoZWNrKHRoaXMuc2hhcmRzW3RoaXMucHJldmlvdXNTaGFyZEluZGV4XSkgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2hhcmRJbmRleDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIHVzZSBhIGdlbmVyaWMgc2VhcmNoIGZ1bmN0aW9uLlxuICAgIC8vIFRoaXMgc2hvdWxkIGFsbW9zdCBuZXZlciBlbmQgdXAgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSBzaW5jZSB0aGUgd2VpZ2h0XG4gICAgLy8gZW50cmllcyBzaG91bGQgYWx3YXlzIGJlIGluIG9yZGVyLlxuICAgIGNvbnN0IGluZGV4ID0gc2VhcmNoKHRoaXMuc2hhcmRzLCBjaGVjayk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTaGFyZEluZGV4ID0gaW5kZXg7XG4gICAgcmV0dXJuIHRoaXMucHJldmlvdXNTaGFyZEluZGV4O1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoIGZvciBhbiBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5LlxuICpcbiAqIEBwYXJhbSBzb3J0ZWRBcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIHNlYXJjaFxuICogQHBhcmFtIGNvbXBhcmUgQSBmdW5jdGlvbiB0byBjb21wYXJlIHRoZSBjdXJyZW50IHZhbHVlIGFnYWluc3QgdGhlIHNlYXJjaGVkXG4gKiAgICAgdmFsdWUuIFJldHVybiAwIG9uIGEgbWF0Y2gsIG5lZ2F0aXZlIGlmIHRoZSBzZWFyY2hlZCB2YWx1ZSBpcyBsZXNzIHRoYW5cbiAqICAgICB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHBvc2l0aXZlIGlmIHRoZSBzZWFyY2hlZCB2YWx1ZSBpc1xuICogICAgIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCwgb3IgLTEgaWYgaXQncyBub3QgaW4gdGhlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoPFQ+KHNvcnRlZEFycmF5OiBUW10sIGNvbXBhcmU6ICh0OiBUKSA9PiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBCaW5hcnkgc2VhcmNoXG4gIGxldCBtaW4gPSAwO1xuICBsZXQgbWF4ID0gc29ydGVkQXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChtaW4gPD0gbWF4KSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobWF4IC0gbWluKSAvIDIpICsgbWluO1xuICAgIGNvbnN0IHNpZGUgPSBjb21wYXJlKHNvcnRlZEFycmF5W21pZGRsZV0pO1xuXG4gICAgaWYgKHNpZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChzaWRlIDwgMCkge1xuICAgICAgbWF4ID0gbWlkZGxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW4gPSBtaWRkbGUgKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { complex } from '../ops/complex';\nimport { tensor } from '../ops/tensor';\nimport { sizeFromShape } from '../util';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\n/** Number of bytes reserved for the length of the string. (32bit integer). */\nconst NUM_BYTES_STRING_LENGTH = 4;\n/**\n * Encode a map from names to weight values as an ArrayBuffer, along with an\n * `Array` of `WeightsManifestEntry` as specification of the encoded weights.\n *\n * This function does not perform sharding.\n *\n * This function is the reverse of `decodeWeights`.\n *\n * @param tensors A map (\"dict\") from names to tensors.\n * @param group Group to which the weights belong (optional).\n * @returns A `Promise` of\n * - A flat `ArrayBuffer` with all the binary values of the `Tensor`s\n * concatenated.\n * - An `Array` of `WeightManifestEntry`s, carrying information including\n * tensor names, `dtype`s and shapes.\n * @throws Error: on unsupported tensor `dtype`.\n */\nexport async function encodeWeights(tensors, group) {\n // TODO(adarob, cais): Support quantization.\n const specs = [];\n const dataPromises = [];\n const names = Array.isArray(tensors) ?\n tensors.map(tensor => tensor.name) :\n Object.keys(tensors);\n for (let i = 0; i < names.length; ++i) {\n const name = names[i];\n const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name];\n if (t.dtype !== 'float32' && t.dtype !== 'int32' && t.dtype !== 'bool' &&\n t.dtype !== 'string' && t.dtype !== 'complex64') {\n throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`);\n }\n const spec = { name, shape: t.shape, dtype: t.dtype };\n if (t.dtype === 'string') {\n const utf8bytes = new Promise(async (resolve) => {\n const vals = await t.bytes();\n const totalNumBytes = vals.reduce((p, c) => p + c.length, 0) +\n NUM_BYTES_STRING_LENGTH * vals.length;\n const bytes = new Uint8Array(totalNumBytes);\n let offset = 0;\n for (let i = 0; i < vals.length; i++) {\n const val = vals[i];\n const bytesOfLength = new Uint8Array(new Uint32Array([val.length]).buffer);\n bytes.set(bytesOfLength, offset);\n offset += NUM_BYTES_STRING_LENGTH;\n bytes.set(val, offset);\n offset += val.length;\n }\n resolve(bytes);\n });\n dataPromises.push(utf8bytes);\n }\n else {\n dataPromises.push(t.data());\n }\n if (group != null) {\n spec.group = group;\n }\n specs.push(spec);\n }\n const tensorValues = await Promise.all(dataPromises);\n return { data: concatenateTypedArrays(tensorValues), specs };\n}\n/**\n * Decode flat ArrayBuffer as weights.\n *\n * This function does not handle sharding.\n *\n * This function is the reverse of `encodeWeights`.\n *\n * @param weightData A flat ArrayBuffer or an array of ArrayBuffers carrying the\n * binary values of the tensors concatenated in the order specified in\n * `specs`.\n * @param specs Specifications of the names, dtypes and shapes of the tensors\n * whose value are encoded by `buffer`.\n * @return A map from tensor name to tensor value, with the names corresponding\n * to names in `specs`.\n * @throws Error, if any of the tensors has unsupported dtype.\n */\nexport function decodeWeights(weightData, specs) {\n // TODO(adarob, cais): Support quantization.\n const compositeBuffer = new CompositeArrayBuffer(weightData);\n const out = {};\n let float16Decode;\n let offset = 0;\n for (const spec of specs) {\n const name = spec.name;\n const dtype = spec.dtype;\n const shape = spec.shape;\n const size = sizeFromShape(shape);\n let values;\n if ('quantization' in spec) {\n const quantization = spec.quantization;\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n if (!('min' in quantization && 'scale' in quantization)) {\n throw new Error(`Weight ${spec.name} with quantization ${quantization.dtype} ` +\n `doesn't have corresponding metadata min and scale.`);\n }\n }\n else if (quantization.dtype === 'float16') {\n if (dtype !== 'float32') {\n throw new Error(`Weight ${spec.name} is quantized with ${quantization.dtype} ` +\n `which only supports weights of type float32 not ${dtype}.`);\n }\n }\n else {\n throw new Error(`Weight ${spec.name} has unknown ` +\n `quantization dtype ${quantization.dtype}. ` +\n `Supported quantization dtypes are: ` +\n `'uint8', 'uint16', and 'float16'.`);\n }\n const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n const byteBuffer = compositeBuffer.slice(offset, offset + size * quantizationSizeFactor);\n const quantizedArray = (quantization.dtype === 'uint8') ?\n new Uint8Array(byteBuffer) :\n new Uint16Array(byteBuffer);\n if (dtype === 'float32') {\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n values = new Float32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = v * quantization.scale + quantization.min;\n }\n }\n else if (quantization.dtype === 'float16') {\n if (float16Decode === undefined) {\n float16Decode = getFloat16Decoder();\n }\n values = float16Decode(quantizedArray);\n }\n else {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type float32.`);\n }\n }\n else if (dtype === 'int32') {\n if (quantization.dtype !== 'uint8' && quantization.dtype !== 'uint16') {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type int32.`);\n }\n values = new Int32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = Math.round(v * quantization.scale + quantization.min);\n }\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * quantizationSizeFactor;\n }\n else if (dtype === 'string') {\n const size = sizeFromShape(spec.shape);\n values = [];\n for (let i = 0; i < size; i++) {\n const byteLength = new Uint32Array(compositeBuffer.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0];\n offset += NUM_BYTES_STRING_LENGTH;\n const bytes = new Uint8Array(compositeBuffer.slice(offset, offset + byteLength));\n values.push(bytes);\n offset += byteLength;\n }\n }\n else {\n const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype];\n const byteBuffer = compositeBuffer.slice(offset, offset + size * dtypeFactor);\n if (dtype === 'float32') {\n values = new Float32Array(byteBuffer);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(byteBuffer);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(byteBuffer);\n }\n else if (dtype === 'complex64') {\n values = new Float32Array(byteBuffer);\n const real = new Float32Array(values.length / 2);\n const image = new Float32Array(values.length / 2);\n for (let i = 0; i < real.length; i++) {\n real[i] = values[i * 2];\n image[i] = values[i * 2 + 1];\n }\n const realTensor = tensor(real, shape, 'float32');\n const imageTensor = tensor(image, shape, 'float32');\n out[name] = complex(realTensor, imageTensor);\n realTensor.dispose();\n imageTensor.dispose();\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * dtypeFactor;\n }\n if (dtype !== 'complex64') {\n out[name] = tensor(values, shape, dtype);\n }\n }\n return out;\n}\n/**\n * Concatenate TypedArrays into an ArrayBuffer.\n */\nexport function concatenateTypedArrays(xs) {\n // TODO(adarob, cais): Support quantization.\n if (xs === null) {\n throw new Error(`Invalid input value: ${JSON.stringify(xs)}`);\n }\n let totalByteLength = 0;\n // `normalizedXs` is here for this reason: a `TypedArray`'s `buffer'\n // can have a different byte length from that of the `TypedArray` itself,\n // for example, when the `TypedArray` is created from an offset in an\n // `ArrayBuffer`. `normliazedXs` holds `TypedArray`s whose `buffer`s match\n // the `TypedArray` in byte length. If an element of `xs` does not show\n // this property, a new `TypedArray` that satisfy this property will be\n // constructed and pushed into `normalizedXs`.\n const normalizedXs = [];\n xs.forEach((x) => {\n totalByteLength += x.byteLength;\n // tslint:disable:no-any\n normalizedXs.push(x.byteLength === x.buffer.byteLength ? x :\n new x.constructor(x));\n if (!(x instanceof Float32Array || x instanceof Int32Array ||\n x instanceof Uint8Array)) {\n throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`);\n }\n // tslint:enable:no-any\n });\n const y = new Uint8Array(totalByteLength);\n let offset = 0;\n normalizedXs.forEach((x) => {\n y.set(new Uint8Array(x.buffer), offset);\n offset += x.byteLength;\n });\n return y.buffer;\n}\n// Use Buffer on Node.js instead of Blob/atob/btoa\nconst useNodeBuffer = typeof Buffer !== 'undefined' &&\n (typeof Blob === 'undefined' || typeof atob === 'undefined' ||\n typeof btoa === 'undefined');\n/**\n * Calculate the byte length of a JavaScript string.\n *\n * Note that a JavaScript string can contain wide characters, therefore the\n * length of the string is not necessarily equal to the byte length.\n *\n * @param str Input string.\n * @returns Byte length.\n */\nexport function stringByteLength(str) {\n if (useNodeBuffer) {\n return Buffer.byteLength(str, 'utf8');\n }\n return new Blob([str]).size;\n}\n/**\n * Encode an ArrayBuffer as a base64 encoded string.\n *\n * @param buffer `ArrayBuffer` to be converted.\n * @returns A string that base64-encodes `buffer`.\n */\nexport function arrayBufferToBase64String(buffer) {\n if (useNodeBuffer) {\n return Buffer.from(buffer).toString('base64');\n }\n const buf = new Uint8Array(buffer);\n let s = '';\n for (let i = 0, l = buf.length; i < l; i++) {\n s += String.fromCharCode(buf[i]);\n }\n return btoa(s);\n}\n/**\n * Decode a base64 string as an ArrayBuffer.\n *\n * @param str Base64 string.\n * @returns Decoded `ArrayBuffer`.\n */\nexport function base64StringToArrayBuffer(str) {\n if (useNodeBuffer) {\n const buf = Buffer.from(str, 'base64');\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const s = atob(str);\n const buffer = new Uint8Array(s.length);\n for (let i = 0; i < s.length; ++i) {\n buffer.set([s.charCodeAt(i)], i);\n }\n return buffer.buffer;\n}\n/**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers An array of ArrayBuffers to concatenate, or a single\n * ArrayBuffer.\n * @returns Result of concatenating `buffers` in order.\n *\n * @deprecated Use tf.io.CompositeArrayBuffer.join() instead.\n */\nexport function concatenateArrayBuffers(buffers) {\n return CompositeArrayBuffer.join(buffers);\n}\n/**\n * Get the basename of a path.\n *\n * Behaves in a way analogous to Linux's basename command.\n *\n * @param path\n */\nexport function basename(path) {\n const SEPARATOR = '/';\n path = path.trim();\n while (path.endsWith(SEPARATOR)) {\n path = path.slice(0, path.length - 1);\n }\n const items = path.split(SEPARATOR);\n return items[items.length - 1];\n}\n/**\n * Create `ModelJSON` from `ModelArtifacts`.\n *\n * @param artifacts Model artifacts, describing the model and its weights.\n * @param manifest Weight manifest, describing where the weights of the\n * `ModelArtifacts` are stored, and some metadata about them.\n * @returns Object representing the `model.json` file describing the model\n * artifacts and weights\n */\nexport function getModelJSONForModelArtifacts(artifacts, manifest) {\n const result = {\n modelTopology: artifacts.modelTopology,\n format: artifacts.format,\n generatedBy: artifacts.generatedBy,\n convertedBy: artifacts.convertedBy,\n weightsManifest: manifest\n };\n if (artifacts.signature != null) {\n result.signature = artifacts.signature;\n }\n if (artifacts.userDefinedMetadata != null) {\n result.userDefinedMetadata = artifacts.userDefinedMetadata;\n }\n if (artifacts.modelInitializer != null) {\n result.modelInitializer = artifacts.modelInitializer;\n }\n if (artifacts.initializerSignature != null) {\n result.initializerSignature = artifacts.initializerSignature;\n }\n if (artifacts.trainingConfig != null) {\n result.trainingConfig = artifacts.trainingConfig;\n }\n return result;\n}\n/**\n * Create `ModelArtifacts` from a JSON file and weights.\n *\n * @param modelJSON Object containing the parsed JSON of `model.json`\n * @param weightSpecs The list of WeightsManifestEntry for the model. Must be\n * passed if the modelJSON has a weightsManifest.\n * @param weightData An ArrayBuffer or array of ArrayBuffers of weight data for\n * the model corresponding to the weights in weightSpecs. Must be passed if\n * the modelJSON has a weightsManifest.\n * @returns A Promise of the `ModelArtifacts`, as described by the JSON file.\n */\nexport function getModelArtifactsForJSONSync(modelJSON, weightSpecs, weightData) {\n const modelArtifacts = {\n modelTopology: modelJSON.modelTopology,\n format: modelJSON.format,\n generatedBy: modelJSON.generatedBy,\n convertedBy: modelJSON.convertedBy\n };\n if (modelJSON.trainingConfig != null) {\n modelArtifacts.trainingConfig = modelJSON.trainingConfig;\n }\n if (modelJSON.weightsManifest != null) {\n if (!weightSpecs) {\n throw new Error('modelJSON has weightsManifest but weightSpecs is null');\n }\n if (!weightData) {\n throw new Error('modelJSON has weightsManifest but weightData is null');\n }\n modelArtifacts.weightSpecs = weightSpecs;\n modelArtifacts.weightData = weightData;\n }\n if (modelJSON.signature != null) {\n modelArtifacts.signature = modelJSON.signature;\n }\n if (modelJSON.userDefinedMetadata != null) {\n modelArtifacts.userDefinedMetadata = modelJSON.userDefinedMetadata;\n }\n if (modelJSON.modelInitializer != null) {\n modelArtifacts.modelInitializer = modelJSON.modelInitializer;\n }\n if (modelJSON.initializerSignature != null) {\n modelArtifacts.initializerSignature = modelJSON.initializerSignature;\n }\n return modelArtifacts;\n}\n/**\n * Create `ModelArtifacts` from a JSON file.\n *\n * @param modelJSON Object containing the parsed JSON of `model.json`\n * @param loadWeights Function that takes the JSON file's weights manifest,\n * reads weights from the listed path(s), and returns a Promise of the\n * weight manifest entries along with the weights data.\n * @returns A Promise of the `ModelArtifacts`, as described by the JSON file.\n */\nexport async function getModelArtifactsForJSON(modelJSON, loadWeights) {\n let weightSpecs;\n let weightData;\n if (modelJSON.weightsManifest != null) {\n [weightSpecs, weightData] = await loadWeights(modelJSON.weightsManifest);\n }\n return getModelArtifactsForJSONSync(modelJSON, weightSpecs, weightData);\n}\n/**\n * Populate ModelArtifactsInfo fields for a model with JSON topology.\n * @param modelArtifacts\n * @returns A ModelArtifactsInfo object.\n */\nexport function getModelArtifactsInfoForJSON(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('Expected JSON model topology, received ArrayBuffer.');\n }\n return {\n dateSaved: new Date(),\n modelTopologyType: 'JSON',\n modelTopologyBytes: modelArtifacts.modelTopology == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.modelTopology)),\n weightSpecsBytes: modelArtifacts.weightSpecs == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)),\n weightDataBytes: modelArtifacts.weightData == null ?\n 0 :\n new CompositeArrayBuffer(modelArtifacts.weightData).byteLength,\n };\n}\n/**\n * Concatenate the weights stored in a WeightsManifestConfig into a list of\n * WeightsManifestEntry\n *\n * @param weightsManifest The WeightsManifestConfig to extract weights from.\n * @returns A list of WeightsManifestEntry of the weights in the weightsManifest\n */\nexport function getWeightSpecs(weightsManifest) {\n const weightSpecs = [];\n for (const entry of weightsManifest) {\n weightSpecs.push(...entry.weights);\n }\n return weightSpecs;\n}\n/**\n * Computes mantisa table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 2048 mantissa lookup values.\n */\nfunction computeFloat16MantisaTable() {\n const convertMantissa = (i) => {\n let m = i << 13;\n let e = 0;\n while ((m & 0x00800000) === 0) {\n e -= 0x00800000;\n m <<= 1;\n }\n m &= ~0x00800000;\n e += 0x38800000;\n return m | e;\n };\n const mantisaTable = new Uint32Array(2048);\n mantisaTable[0] = 0;\n for (let i = 1; i < 1024; i++) {\n mantisaTable[i] = convertMantissa(i);\n }\n for (let i = 1024; i < 2048; i++) {\n mantisaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n return mantisaTable;\n}\n/**\n * Computes exponent table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 64 exponent lookup values.\n */\nfunction computeFloat16ExponentTable() {\n const exponentTable = new Uint32Array(64);\n exponentTable[0] = 0;\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 31; i++) {\n exponentTable[i] = i << 23;\n }\n for (let i = 33; i < 63; i++) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n return exponentTable;\n}\n/**\n * Computes offset table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 6d offset values.\n */\nfunction computeFloat16OffsetTable() {\n const offsetTable = new Uint32Array(64);\n for (let i = 0; i < 64; i++) {\n offsetTable[i] = 1024;\n }\n offsetTable[0] = offsetTable[32] = 0;\n return offsetTable;\n}\n/**\n * Retrieve a Float16 decoder which will decode a ByteArray of Float16 values\n * to a Float32Array.\n *\n * @returns Function (buffer: Uint16Array) => Float32Array which decodes\n * the Uint16Array of Float16 bytes to a Float32Array.\n */\nexport function getFloat16Decoder() {\n // Algorithm is based off of\n // http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n // Cache lookup tables\n const mantisaTable = computeFloat16MantisaTable();\n const exponentTable = computeFloat16ExponentTable();\n const offsetTable = computeFloat16OffsetTable();\n return (quantizedArray) => {\n const buffer = new ArrayBuffer(4 * quantizedArray.length);\n const bufferUint32View = new Uint32Array(buffer);\n for (let index = 0; index < quantizedArray.length; index++) {\n const float16Bits = quantizedArray[index];\n const float32Bits = mantisaTable[offsetTable[float16Bits >> 10] + (float16Bits & 0x3ff)] +\n exponentTable[float16Bits >> 10];\n bufferUint32View[index] = float32Bits;\n }\n return new Float32Array(buffer);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9fdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL2lvX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3JDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFzSCxNQUFNLFNBQVMsQ0FBQztBQUNsSyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCw4RUFBOEU7QUFDOUUsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDL0IsT0FBcUMsRUFBRSxLQUFtQjtJQUU1RCw0Q0FBNEM7SUFDNUMsTUFBTSxLQUFLLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLFlBQVksR0FBK0IsRUFBRSxDQUFDO0lBRXBELE1BQU0sS0FBSyxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLEdBQUcs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ZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL29wcy9jb21wbGV4JztcbmltcG9ydCB7dGVuc29yfSBmcm9tICcuLi9vcHMvdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3IsIE5hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge3NpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge0RUWVBFX1ZBTFVFX1NJWkVfTUFQLCBNb2RlbEFydGlmYWN0cywgTW9kZWxBcnRpZmFjdHNJbmZvLCBNb2RlbEpTT04sIFdlaWdodERhdGEsIFdlaWdodEdyb3VwLCBXZWlnaHRzTWFuaWZlc3RDb25maWcsIFdlaWdodHNNYW5pZmVzdEVudHJ5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5cbi8qKiBOdW1iZXIgb2YgYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4gKDMyYml0IGludGVnZXIpLiAqL1xuY29uc3QgTlVNX0JZVEVTX1NUUklOR19MRU5HVEggPSA0O1xuXG4vKipcbiAqIEVuY29kZSBhIG1hcCBmcm9tIG5hbWVzIHRvIHdlaWdodCB2YWx1ZXMgYXMgYW4gQXJyYXlCdWZmZXIsIGFsb25nIHdpdGggYW5cbiAqIGBBcnJheWAgb2YgYFdlaWdodHNNYW5pZmVzdEVudHJ5YCBhcyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBlbmNvZGVkIHdlaWdodHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIHNoYXJkaW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgYGRlY29kZVdlaWdodHNgLlxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbWFwIChcImRpY3RcIikgZnJvbSBuYW1lcyB0byB0ZW5zb3JzLlxuICogQHBhcmFtIGdyb3VwIEdyb3VwIHRvIHdoaWNoIHRoZSB3ZWlnaHRzIGJlbG9uZyAob3B0aW9uYWwpLlxuICogQHJldHVybnMgQSBgUHJvbWlzZWAgb2ZcbiAqICAgLSBBIGZsYXQgYEFycmF5QnVmZmVyYCB3aXRoIGFsbCB0aGUgYmluYXJ5IHZhbHVlcyBvZiB0aGUgYFRlbnNvcmBzXG4gKiAgICAgY29uY2F0ZW5hdGVkLlxuICogICAtIEFuIGBBcnJheWAgb2YgYFdlaWdodE1hbmlmZXN0RW50cnlgcywgY2FycnlpbmcgaW5mb3JtYXRpb24gaW5jbHVkaW5nXG4gKiAgICAgdGVuc29yIG5hbWVzLCBgZHR5cGVgcyBhbmQgc2hhcGVzLlxuICogQHRocm93cyBFcnJvcjogb24gdW5zdXBwb3J0ZWQgdGVuc29yIGBkdHlwZWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNvZGVXZWlnaHRzKFxuICAgIHRlbnNvcnM6IE5hbWVkVGVuc29yTWFwfE5hbWVkVGVuc29yW10sIGdyb3VwPzogV2VpZ2h0R3JvdXApOlxuICAgIFByb21pc2U8e2RhdGE6IEFycmF5QnVmZmVyLCBzcGVjczogV2VpZ2h0c01hbmlmZXN0RW50cnlbXX0+IHtcbiAgLy8gVE9ETyhhZGFyb2IsIGNhaXMpOiBTdXBwb3J0IHF1YW50aXphdGlvbi5cbiAgY29uc3Qgc3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgY29uc3QgZGF0YVByb21pc2VzOiBBcnJheTxQcm9taXNlPFR5cGVkQXJyYXk+PiA9IFtdO1xuXG4gIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodGVuc29ycykgP1xuICAgICAgdGVuc29ycy5tYXAodGVuc29yID0+IHRlbnNvci5uYW1lKSA6XG4gICAgICBPYmplY3Qua2V5cyh0ZW5zb3JzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVzW2ldO1xuICAgIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRlbnNvcnMpID8gdGVuc29yc1tpXS50ZW5zb3IgOiB0ZW5zb3JzW25hbWVdO1xuICAgIGlmICh0LmR0eXBlICE9PSAnZmxvYXQzMicgJiYgdC5kdHlwZSAhPT0gJ2ludDMyJyAmJiB0LmR0eXBlICE9PSAnYm9vbCcgJiZcbiAgICAgICAgdC5kdHlwZSAhPT0gJ3N0cmluZycgJiYgdC5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZHR5cGUgaW4gd2VpZ2h0ICcke25hbWV9JzogJHt0LmR0eXBlfWApO1xuICAgIH1cbiAgICBjb25zdCBzcGVjOiBXZWlnaHRzTWFuaWZlc3RFbnRyeSA9IHtuYW1lLCBzaGFwZTogdC5zaGFwZSwgZHR5cGU6IHQuZHR5cGV9O1xuICAgIGlmICh0LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdXRmOGJ5dGVzID0gbmV3IFByb21pc2U8VHlwZWRBcnJheT4oYXN5bmMgcmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHMgPSBhd2FpdCB0LmJ5dGVzKCkgYXMgVWludDhBcnJheVtdO1xuICAgICAgICBjb25zdCB0b3RhbE51bUJ5dGVzID0gdmFscy5yZWR1Y2UoKHAsIGMpID0+IHAgKyBjLmxlbmd0aCwgMCkgK1xuICAgICAgICAgICAgTlVNX0JZVEVTX1NUUklOR19MRU5HVEggKiB2YWxzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0b3RhbE51bUJ5dGVzKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHZhbHNbaV07XG4gICAgICAgICAgY29uc3QgYnl0ZXNPZkxlbmd0aCA9XG4gICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheShbdmFsLmxlbmd0aF0pLmJ1ZmZlcik7XG4gICAgICAgICAgYnl0ZXMuc2V0KGJ5dGVzT2ZMZW5ndGgsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIO1xuICAgICAgICAgIGJ5dGVzLnNldCh2YWwsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IHZhbC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShieXRlcyk7XG4gICAgICB9KTtcbiAgICAgIGRhdGFQcm9taXNlcy5wdXNoKHV0ZjhieXRlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFQcm9taXNlcy5wdXNoKHQuZGF0YSgpKTtcbiAgICB9XG4gICAgaWYgKGdyb3VwICE9IG51bGwpIHtcbiAgICAgIHNwZWMuZ3JvdXAgPSBncm91cDtcbiAgICB9XG4gICAgc3BlY3MucHVzaChzcGVjKTtcbiAgfVxuXG4gIGNvbnN0IHRlbnNvclZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGRhdGFQcm9taXNlcyk7XG4gIHJldHVybiB7ZGF0YTogY29uY2F0ZW5hdGVUeXBlZEFycmF5cyh0ZW5zb3JWYWx1ZXMpLCBzcGVjc307XG59XG5cbi8qKlxuICogRGVjb2RlIGZsYXQgQXJyYXlCdWZmZXIgYXMgd2VpZ2h0cy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzaGFyZGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIGBlbmNvZGVXZWlnaHRzYC5cbiAqXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBIGZsYXQgQXJyYXlCdWZmZXIgb3IgYW4gYXJyYXkgb2YgQXJyYXlCdWZmZXJzIGNhcnJ5aW5nIHRoZVxuICogICBiaW5hcnkgdmFsdWVzIG9mIHRoZSB0ZW5zb3JzIGNvbmNhdGVuYXRlZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluXG4gKiAgIGBzcGVjc2AuXG4gKiBAcGFyYW0gc3BlY3MgU3BlY2lmaWNhdGlvbnMgb2YgdGhlIG5hbWVzLCBkdHlwZXMgYW5kIHNoYXBlcyBvZiB0aGUgdGVuc29yc1xuICogICB3aG9zZSB2YWx1ZSBhcmUgZW5jb2RlZCBieSBgYnVmZmVyYC5cbiAqIEByZXR1cm4gQSBtYXAgZnJvbSB0ZW5zb3IgbmFtZSB0byB0ZW5zb3IgdmFsdWUsIHdpdGggdGhlIG5hbWVzIGNvcnJlc3BvbmRpbmdcbiAqICAgdG8gbmFtZXMgaW4gYHNwZWNzYC5cbiAqIEB0aHJvd3MgRXJyb3IsIGlmIGFueSBvZiB0aGUgdGVuc29ycyBoYXMgdW5zdXBwb3J0ZWQgZHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVXZWlnaHRzKFxuICAgIHdlaWdodERhdGE6IFdlaWdodERhdGEsXG4gICAgc3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10pOiBOYW1lZFRlbnNvck1hcCB7XG4gIC8vIFRPRE8oYWRhcm9iLCBjYWlzKTogU3VwcG9ydCBxdWFudGl6YXRpb24uXG4gIGNvbnN0IGNvbXBvc2l0ZUJ1ZmZlciA9IG5ldyBDb21wb3NpdGVBcnJheUJ1ZmZlcih3ZWlnaHREYXRhKTtcbiAgY29uc3Qgb3V0OiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICBsZXQgZmxvYXQxNkRlY29kZTogKGJ1ZmZlcjogVWludDE2QXJyYXkpID0+IEZsb2F0MzJBcnJheSB8IHVuZGVmaW5lZDtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZvciAoY29uc3Qgc3BlYyBvZiBzcGVjcykge1xuICAgIGNvbnN0IG5hbWUgPSBzcGVjLm5hbWU7XG4gICAgY29uc3QgZHR5cGUgPSBzcGVjLmR0eXBlO1xuICAgIGNvbnN0IHNoYXBlID0gc3BlYy5zaGFwZTtcbiAgICBjb25zdCBzaXplID0gc2l6ZUZyb21TaGFwZShzaGFwZSk7XG4gICAgbGV0IHZhbHVlczogVHlwZWRBcnJheXxzdHJpbmdbXXxVaW50OEFycmF5W107XG5cbiAgICBpZiAoJ3F1YW50aXphdGlvbicgaW4gc3BlYykge1xuICAgICAgY29uc3QgcXVhbnRpemF0aW9uID0gc3BlYy5xdWFudGl6YXRpb247XG4gICAgICBpZiAocXVhbnRpemF0aW9uLmR0eXBlID09PSAndWludDgnIHx8IHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ3VpbnQxNicpIHtcbiAgICAgICAgaWYgKCEoJ21pbicgaW4gcXVhbnRpemF0aW9uICYmICdzY2FsZScgaW4gcXVhbnRpemF0aW9uKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFdlaWdodCAke3NwZWMubmFtZX0gd2l0aCBxdWFudGl6YXRpb24gJHtxdWFudGl6YXRpb24uZHR5cGV9IGAgK1xuICAgICAgICAgICAgICBgZG9lc24ndCBoYXZlIGNvcnJlc3BvbmRpbmcgbWV0YWRhdGEgbWluIGFuZCBzY2FsZS5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb24uZHR5cGUgPT09ICdmbG9hdDE2Jykge1xuICAgICAgICBpZiAoZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFdlaWdodCAke3NwZWMubmFtZX0gaXMgcXVhbnRpemVkIHdpdGggJHtxdWFudGl6YXRpb24uZHR5cGV9IGAgK1xuICAgICAgICAgICAgICBgd2hpY2ggb25seSBzdXBwb3J0cyB3ZWlnaHRzIG9mIHR5cGUgZmxvYXQzMiBub3QgJHtkdHlwZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXZWlnaHQgJHtzcGVjLm5hbWV9IGhhcyB1bmtub3duIGAgK1xuICAgICAgICAgICAgYHF1YW50aXphdGlvbiBkdHlwZSAke3F1YW50aXphdGlvbi5kdHlwZX0uIGAgK1xuICAgICAgICAgICAgYFN1cHBvcnRlZCBxdWFudGl6YXRpb24gZHR5cGVzIGFyZTogYCArXG4gICAgICAgICAgICBgJ3VpbnQ4JywgJ3VpbnQxNicsIGFuZCAnZmxvYXQxNicuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBxdWFudGl6YXRpb25TaXplRmFjdG9yID0gRFRZUEVfVkFMVUVfU0laRV9NQVBbcXVhbnRpemF0aW9uLmR0eXBlXTtcbiAgICAgIGNvbnN0IGJ5dGVCdWZmZXIgPVxuICAgICAgICAgIGNvbXBvc2l0ZUJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUgKiBxdWFudGl6YXRpb25TaXplRmFjdG9yKTtcbiAgICAgIGNvbnN0IHF1YW50aXplZEFycmF5ID0gKHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ3VpbnQ4JykgP1xuICAgICAgICAgIG5ldyBVaW50OEFycmF5KGJ5dGVCdWZmZXIpIDpcbiAgICAgICAgICBuZXcgVWludDE2QXJyYXkoYnl0ZUJ1ZmZlcik7XG4gICAgICBpZiAoZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgICBpZiAocXVhbnRpemF0aW9uLmR0eXBlID09PSAndWludDgnIHx8IHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ3VpbnQxNicpIHtcbiAgICAgICAgICB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHF1YW50aXplZEFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWFudGl6ZWRBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdiA9IHF1YW50aXplZEFycmF5W2ldO1xuICAgICAgICAgICAgdmFsdWVzW2ldID0gdiAqIHF1YW50aXphdGlvbi5zY2FsZSArIHF1YW50aXphdGlvbi5taW47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHF1YW50aXphdGlvbi5kdHlwZSA9PT0gJ2Zsb2F0MTYnKSB7XG4gICAgICAgICAgaWYgKGZsb2F0MTZEZWNvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmxvYXQxNkRlY29kZSA9IGdldEZsb2F0MTZEZWNvZGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlcyA9IGZsb2F0MTZEZWNvZGUocXVhbnRpemVkQXJyYXkgYXMgVWludDE2QXJyYXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHF1YW50aXphdGlvbiB0eXBlICR7cXVhbnRpemF0aW9uLmR0eXBlfSBgICtcbiAgICAgICAgICAgICAgYGZvciB3ZWlnaHQgdHlwZSBmbG9hdDMyLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgICAgIGlmIChxdWFudGl6YXRpb24uZHR5cGUgIT09ICd1aW50OCcgJiYgcXVhbnRpemF0aW9uLmR0eXBlICE9PSAndWludDE2Jykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHF1YW50aXphdGlvbiB0eXBlICR7cXVhbnRpemF0aW9uLmR0eXBlfSBgICtcbiAgICAgICAgICAgICAgYGZvciB3ZWlnaHQgdHlwZSBpbnQzMi5gKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMgPSBuZXcgSW50MzJBcnJheShxdWFudGl6ZWRBcnJheS5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1YW50aXplZEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdiA9IHF1YW50aXplZEFycmF5W2ldO1xuICAgICAgICAgIHZhbHVlc1tpXSA9IE1hdGgucm91bmQodiAqIHF1YW50aXphdGlvbi5zY2FsZSArIHF1YW50aXphdGlvbi5taW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGR0eXBlIGluIHdlaWdodCAnJHtuYW1lfSc6ICR7ZHR5cGV9YCk7XG4gICAgICB9XG4gICAgICBvZmZzZXQgKz0gc2l6ZSAqIHF1YW50aXphdGlvblNpemVGYWN0b3I7XG4gICAgfSBlbHNlIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHNpemUgPSBzaXplRnJvbVNoYXBlKHNwZWMuc2hhcGUpO1xuICAgICAgdmFsdWVzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gbmV3IFVpbnQzMkFycmF5KFxuICAgICAgICAgICAgY29tcG9zaXRlQnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgTlVNX0JZVEVTX1NUUklOR19MRU5HVEgpKVswXTtcbiAgICAgICAgb2Zmc2V0ICs9IE5VTV9CWVRFU19TVFJJTkdfTEVOR1RIO1xuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgIGNvbXBvc2l0ZUJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGJ5dGVMZW5ndGgpKTtcbiAgICAgICAgKHZhbHVlcyBhcyBVaW50OEFycmF5W10pLnB1c2goYnl0ZXMpO1xuICAgICAgICBvZmZzZXQgKz0gYnl0ZUxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHR5cGVGYWN0b3IgPSBEVFlQRV9WQUxVRV9TSVpFX01BUFtkdHlwZV07XG4gICAgICBjb25zdCBieXRlQnVmZmVyID0gY29tcG9zaXRlQnVmZmVyLnNsaWNlKG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsgc2l6ZSAqIGR0eXBlRmFjdG9yKTtcblxuICAgICAgaWYgKGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAgICAgICAgdmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheShieXRlQnVmZmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICAgICAgdmFsdWVzID0gbmV3IEludDMyQXJyYXkoYnl0ZUJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAgICAgdmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgICB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KGJ5dGVCdWZmZXIpO1xuICAgICAgICBjb25zdCByZWFsID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZXMubGVuZ3RoIC8gMik7XG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZXMubGVuZ3RoIC8gMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlYWxbaV0gPSB2YWx1ZXNbaSAqIDJdO1xuICAgICAgICAgIGltYWdlW2ldID0gdmFsdWVzW2kgKiAyICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVhbFRlbnNvciA9IHRlbnNvcihyZWFsLCBzaGFwZSwgJ2Zsb2F0MzInKTtcbiAgICAgICAgY29uc3QgaW1hZ2VUZW5zb3IgPSB0ZW5zb3IoaW1hZ2UsIHNoYXBlLCAnZmxvYXQzMicpO1xuICAgICAgICBvdXRbbmFtZV0gPSBjb21wbGV4KHJlYWxUZW5zb3IsIGltYWdlVGVuc29yKTtcbiAgICAgICAgcmVhbFRlbnNvci5kaXNwb3NlKCk7XG4gICAgICAgIGltYWdlVGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZHR5cGUgaW4gd2VpZ2h0ICcke25hbWV9JzogJHtkdHlwZX1gKTtcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSBzaXplICogZHR5cGVGYWN0b3I7XG4gICAgfVxuICAgIGlmIChkdHlwZSAhPT0gJ2NvbXBsZXg2NCcpIHtcbiAgICAgIG91dFtuYW1lXSA9IHRlbnNvcih2YWx1ZXMsIHNoYXBlLCBkdHlwZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQ29uY2F0ZW5hdGUgVHlwZWRBcnJheXMgaW50byBhbiBBcnJheUJ1ZmZlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdGVuYXRlVHlwZWRBcnJheXMoeHM6IFR5cGVkQXJyYXlbXSk6IEFycmF5QnVmZmVyIHtcbiAgLy8gVE9ETyhhZGFyb2IsIGNhaXMpOiBTdXBwb3J0IHF1YW50aXphdGlvbi5cbiAgaWYgKHhzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGlucHV0IHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHhzKX1gKTtcbiAgfVxuXG4gIGxldCB0b3RhbEJ5dGVMZW5ndGggPSAwO1xuXG4gIC8vIGBub3JtYWxpemVkWHNgIGlzIGhlcmUgZm9yIHRoaXMgcmVhc29uOiBhIGBUeXBlZEFycmF5YCdzIGBidWZmZXInXG4gIC8vIGNhbiBoYXZlIGEgZGlmZmVyZW50IGJ5dGUgbGVuZ3RoIGZyb20gdGhhdCBvZiB0aGUgYFR5cGVkQXJyYXlgIGl0c2VsZixcbiAgLy8gZm9yIGV4YW1wbGUsIHdoZW4gdGhlIGBUeXBlZEFycmF5YCBpcyBjcmVhdGVkIGZyb20gYW4gb2Zmc2V0IGluIGFuXG4gIC8vIGBBcnJheUJ1ZmZlcmAuIGBub3JtbGlhemVkWHNgIGhvbGRzIGBUeXBlZEFycmF5YHMgd2hvc2UgYGJ1ZmZlcmBzIG1hdGNoXG4gIC8vIHRoZSBgVHlwZWRBcnJheWAgaW4gYnl0ZSBsZW5ndGguIElmIGFuIGVsZW1lbnQgb2YgYHhzYCBkb2VzIG5vdCBzaG93XG4gIC8vIHRoaXMgcHJvcGVydHksIGEgbmV3IGBUeXBlZEFycmF5YCB0aGF0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlXG4gIC8vIGNvbnN0cnVjdGVkIGFuZCBwdXNoZWQgaW50byBgbm9ybWFsaXplZFhzYC5cbiAgY29uc3Qgbm9ybWFsaXplZFhzOiBUeXBlZEFycmF5W10gPSBbXTtcbiAgeHMuZm9yRWFjaCgoeDogVHlwZWRBcnJheSkgPT4ge1xuICAgIHRvdGFsQnl0ZUxlbmd0aCArPSB4LmJ5dGVMZW5ndGg7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG4gICAgbm9ybWFsaXplZFhzLnB1c2goXG4gICAgICAgIHguYnl0ZUxlbmd0aCA9PT0geC5idWZmZXIuYnl0ZUxlbmd0aCA/IHggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgKHguY29uc3RydWN0b3IgYXMgYW55KSh4KSk7XG4gICAgaWYgKCEoeCBhcyBhbnkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHwgeCBhcyBhbnkgaW5zdGFuY2VvZiBJbnQzMkFycmF5IHx8XG4gICAgICAgICAgeCBhcyBhbnkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBUeXBlZEFycmF5IHN1YnR5cGU6ICR7eC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZW5hYmxlOm5vLWFueVxuICB9KTtcblxuICBjb25zdCB5ID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIG5vcm1hbGl6ZWRYcy5mb3JFYWNoKCh4OiBUeXBlZEFycmF5KSA9PiB7XG4gICAgeS5zZXQobmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB4LmJ5dGVMZW5ndGg7XG4gIH0pO1xuXG4gIHJldHVybiB5LmJ1ZmZlcjtcbn1cblxuLy8gVXNlIEJ1ZmZlciBvbiBOb2RlLmpzIGluc3RlYWQgb2YgQmxvYi9hdG9iL2J0b2FcbmNvbnN0IHVzZU5vZGVCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICh0eXBlb2YgQmxvYiA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGF0b2IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIHR5cGVvZiBidG9hID09PSAndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBieXRlIGxlbmd0aCBvZiBhIEphdmFTY3JpcHQgc3RyaW5nLlxuICpcbiAqIE5vdGUgdGhhdCBhIEphdmFTY3JpcHQgc3RyaW5nIGNhbiBjb250YWluIHdpZGUgY2hhcmFjdGVycywgdGhlcmVmb3JlIHRoZVxuICogbGVuZ3RoIG9mIHRoZSBzdHJpbmcgaXMgbm90IG5lY2Vzc2FyaWx5IGVxdWFsIHRvIHRoZSBieXRlIGxlbmd0aC5cbiAqXG4gKiBAcGFyYW0gc3RyIElucHV0IHN0cmluZy5cbiAqIEByZXR1cm5zIEJ5dGUgbGVuZ3RoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQnl0ZUxlbmd0aChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICh1c2VOb2RlQnVmZmVyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKHN0ciwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gbmV3IEJsb2IoW3N0cl0pLnNpemU7XG59XG5cbi8qKlxuICogRW5jb2RlIGFuIEFycmF5QnVmZmVyIGFzIGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBidWZmZXIgYEFycmF5QnVmZmVyYCB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBBIHN0cmluZyB0aGF0IGJhc2U2NC1lbmNvZGVzIGBidWZmZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jhc2U2NFN0cmluZyhidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcbiAgaWYgKHVzZU5vZGVCdWZmZXIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oYnVmZmVyKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgbGV0IHMgPSAnJztcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBidWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gIH1cbiAgcmV0dXJuIGJ0b2Eocyk7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgYmFzZTY0IHN0cmluZyBhcyBhbiBBcnJheUJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gc3RyIEJhc2U2NCBzdHJpbmcuXG4gKiBAcmV0dXJucyBEZWNvZGVkIGBBcnJheUJ1ZmZlcmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRTdHJpbmdUb0FycmF5QnVmZmVyKHN0cjogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xuICBpZiAodXNlTm9kZUJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgfVxuICBjb25zdCBzID0gYXRvYihzdHIpO1xuICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgIGJ1ZmZlci5zZXQoW3MuY2hhckNvZGVBdChpKV0sIGkpO1xuICB9XG4gIHJldHVybiBidWZmZXIuYnVmZmVyO1xufVxuXG4vKipcbiAqIENvbmNhdGVuYXRlIGEgbnVtYmVyIG9mIEFycmF5QnVmZmVycyBpbnRvIG9uZS5cbiAqXG4gKiBAcGFyYW0gYnVmZmVycyBBbiBhcnJheSBvZiBBcnJheUJ1ZmZlcnMgdG8gY29uY2F0ZW5hdGUsIG9yIGEgc2luZ2xlXG4gKiAgICAgQXJyYXlCdWZmZXIuXG4gKiBAcmV0dXJucyBSZXN1bHQgb2YgY29uY2F0ZW5hdGluZyBgYnVmZmVyc2AgaW4gb3JkZXIuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRmLmlvLkNvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnMoYnVmZmVyczogQXJyYXlCdWZmZXJbXVxuICAgICAgfCBBcnJheUJ1ZmZlcik6IEFycmF5QnVmZmVyIHtcbiAgcmV0dXJuIENvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oYnVmZmVycyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBiYXNlbmFtZSBvZiBhIHBhdGguXG4gKlxuICogQmVoYXZlcyBpbiBhIHdheSBhbmFsb2dvdXMgdG8gTGludXgncyBiYXNlbmFtZSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBTRVBBUkFUT1IgPSAnLyc7XG4gIHBhdGggPSBwYXRoLnRyaW0oKTtcbiAgd2hpbGUgKHBhdGguZW5kc1dpdGgoU0VQQVJBVE9SKSkge1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBwYXRoLnNwbGl0KFNFUEFSQVRPUik7XG4gIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsSlNPTmAgZnJvbSBgTW9kZWxBcnRpZmFjdHNgLlxuICpcbiAqIEBwYXJhbSBhcnRpZmFjdHMgTW9kZWwgYXJ0aWZhY3RzLCBkZXNjcmliaW5nIHRoZSBtb2RlbCBhbmQgaXRzIHdlaWdodHMuXG4gKiBAcGFyYW0gbWFuaWZlc3QgV2VpZ2h0IG1hbmlmZXN0LCBkZXNjcmliaW5nIHdoZXJlIHRoZSB3ZWlnaHRzIG9mIHRoZVxuICogICAgIGBNb2RlbEFydGlmYWN0c2AgYXJlIHN0b3JlZCwgYW5kIHNvbWUgbWV0YWRhdGEgYWJvdXQgdGhlbS5cbiAqIEByZXR1cm5zIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGBtb2RlbC5qc29uYCBmaWxlIGRlc2NyaWJpbmcgdGhlIG1vZGVsXG4gKiAgICAgYXJ0aWZhY3RzIGFuZCB3ZWlnaHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbEpTT05Gb3JNb2RlbEFydGlmYWN0cyhcbiAgICBhcnRpZmFjdHM6IE1vZGVsQXJ0aWZhY3RzLCBtYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnKTogTW9kZWxKU09OIHtcbiAgY29uc3QgcmVzdWx0OiBNb2RlbEpTT04gPSB7XG4gICAgbW9kZWxUb3BvbG9neTogYXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3ksXG4gICAgZm9ybWF0OiBhcnRpZmFjdHMuZm9ybWF0LFxuICAgIGdlbmVyYXRlZEJ5OiBhcnRpZmFjdHMuZ2VuZXJhdGVkQnksXG4gICAgY29udmVydGVkQnk6IGFydGlmYWN0cy5jb252ZXJ0ZWRCeSxcbiAgICB3ZWlnaHRzTWFuaWZlc3Q6IG1hbmlmZXN0XG4gIH07XG4gIGlmIChhcnRpZmFjdHMuc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICByZXN1bHQuc2lnbmF0dXJlID0gYXJ0aWZhY3RzLnNpZ25hdHVyZTtcbiAgfVxuICBpZiAoYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgIHJlc3VsdC51c2VyRGVmaW5lZE1ldGFkYXRhID0gYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGE7XG4gIH1cbiAgaWYgKGFydGlmYWN0cy5tb2RlbEluaXRpYWxpemVyICE9IG51bGwpIHtcbiAgICByZXN1bHQubW9kZWxJbml0aWFsaXplciA9IGFydGlmYWN0cy5tb2RlbEluaXRpYWxpemVyO1xuICB9XG4gIGlmIChhcnRpZmFjdHMuaW5pdGlhbGl6ZXJTaWduYXR1cmUgIT0gbnVsbCkge1xuICAgIHJlc3VsdC5pbml0aWFsaXplclNpZ25hdHVyZSA9IGFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgfVxuICBpZiAoYXJ0aWZhY3RzLnRyYWluaW5nQ29uZmlnICE9IG51bGwpIHtcbiAgICByZXN1bHQudHJhaW5pbmdDb25maWcgPSBhcnRpZmFjdHMudHJhaW5pbmdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsQXJ0aWZhY3RzYCBmcm9tIGEgSlNPTiBmaWxlIGFuZCB3ZWlnaHRzLlxuICpcbiAqIEBwYXJhbSBtb2RlbEpTT04gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBKU09OIG9mIGBtb2RlbC5qc29uYFxuICogQHBhcmFtIHdlaWdodFNwZWNzIFRoZSBsaXN0IG9mIFdlaWdodHNNYW5pZmVzdEVudHJ5IGZvciB0aGUgbW9kZWwuIE11c3QgYmVcbiAqICAgICBwYXNzZWQgaWYgdGhlIG1vZGVsSlNPTiBoYXMgYSB3ZWlnaHRzTWFuaWZlc3QuXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBbiBBcnJheUJ1ZmZlciBvciBhcnJheSBvZiBBcnJheUJ1ZmZlcnMgb2Ygd2VpZ2h0IGRhdGEgZm9yXG4gKiAgICAgdGhlIG1vZGVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHdlaWdodHMgaW4gd2VpZ2h0U3BlY3MuIE11c3QgYmUgcGFzc2VkIGlmXG4gKiAgICAgdGhlIG1vZGVsSlNPTiBoYXMgYSB3ZWlnaHRzTWFuaWZlc3QuXG4gKiBAcmV0dXJucyBBIFByb21pc2Ugb2YgdGhlIGBNb2RlbEFydGlmYWN0c2AsIGFzIGRlc2NyaWJlZCBieSB0aGUgSlNPTiBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OU3luYyhcbiAgICBtb2RlbEpTT046IE1vZGVsSlNPTiwgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhKTogTW9kZWxBcnRpZmFjdHMge1xuXG4gIGNvbnN0IG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyA9IHtcbiAgICBtb2RlbFRvcG9sb2d5OiBtb2RlbEpTT04ubW9kZWxUb3BvbG9neSxcbiAgICBmb3JtYXQ6IG1vZGVsSlNPTi5mb3JtYXQsXG4gICAgZ2VuZXJhdGVkQnk6IG1vZGVsSlNPTi5nZW5lcmF0ZWRCeSxcbiAgICBjb252ZXJ0ZWRCeTogbW9kZWxKU09OLmNvbnZlcnRlZEJ5XG4gIH07XG5cbiAgaWYgKG1vZGVsSlNPTi50cmFpbmluZ0NvbmZpZyAhPSBudWxsKSB7XG4gICAgbW9kZWxBcnRpZmFjdHMudHJhaW5pbmdDb25maWcgPSBtb2RlbEpTT04udHJhaW5pbmdDb25maWc7XG4gIH1cbiAgaWYgKG1vZGVsSlNPTi53ZWlnaHRzTWFuaWZlc3QgIT0gbnVsbCkge1xuICAgIGlmICghd2VpZ2h0U3BlY3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbW9kZWxKU09OIGhhcyB3ZWlnaHRzTWFuaWZlc3QgYnV0IHdlaWdodFNwZWNzIGlzIG51bGwnKTtcbiAgICB9XG4gICAgaWYgKCF3ZWlnaHREYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21vZGVsSlNPTiBoYXMgd2VpZ2h0c01hbmlmZXN0IGJ1dCB3ZWlnaHREYXRhIGlzIG51bGwnKTtcbiAgICB9XG4gICAgbW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MgPSB3ZWlnaHRTcGVjcztcbiAgICBtb2RlbEFydGlmYWN0cy53ZWlnaHREYXRhID0gd2VpZ2h0RGF0YTtcbiAgfVxuICBpZiAobW9kZWxKU09OLnNpZ25hdHVyZSAhPSBudWxsKSB7XG4gICAgbW9kZWxBcnRpZmFjdHMuc2lnbmF0dXJlID0gbW9kZWxKU09OLnNpZ25hdHVyZTtcbiAgfVxuICBpZiAobW9kZWxKU09OLnVzZXJEZWZpbmVkTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgIG1vZGVsQXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGEgPSBtb2RlbEpTT04udXNlckRlZmluZWRNZXRhZGF0YTtcbiAgfVxuICBpZiAobW9kZWxKU09OLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCkge1xuICAgIG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgPSBtb2RlbEpTT04ubW9kZWxJbml0aWFsaXplcjtcbiAgfVxuICBpZiAobW9kZWxKU09OLmluaXRpYWxpemVyU2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICBtb2RlbEFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZSA9IG1vZGVsSlNPTi5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgfVxuXG4gIHJldHVybiBtb2RlbEFydGlmYWN0cztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYE1vZGVsQXJ0aWZhY3RzYCBmcm9tIGEgSlNPTiBmaWxlLlxuICpcbiAqIEBwYXJhbSBtb2RlbEpTT04gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBKU09OIG9mIGBtb2RlbC5qc29uYFxuICogQHBhcmFtIGxvYWRXZWlnaHRzIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIEpTT04gZmlsZSdzIHdlaWdodHMgbWFuaWZlc3QsXG4gKiAgICAgcmVhZHMgd2VpZ2h0cyBmcm9tIHRoZSBsaXN0ZWQgcGF0aChzKSwgYW5kIHJldHVybnMgYSBQcm9taXNlIG9mIHRoZVxuICogICAgIHdlaWdodCBtYW5pZmVzdCBlbnRyaWVzIGFsb25nIHdpdGggdGhlIHdlaWdodHMgZGF0YS5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBvZiB0aGUgYE1vZGVsQXJ0aWZhY3RzYCwgYXMgZGVzY3JpYmVkIGJ5IHRoZSBKU09OIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04oXG4gICAgbW9kZWxKU09OOiBNb2RlbEpTT04sXG4gICAgbG9hZFdlaWdodHM6ICh3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZykgPT4gUHJvbWlzZTxbXG4gICAgICAvKiB3ZWlnaHRTcGVjcyAqLyBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLCBXZWlnaHREYXRhLFxuICAgIF0+KTogUHJvbWlzZTxNb2RlbEFydGlmYWN0cz4ge1xuICBsZXQgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gfCB1bmRlZmluZWQ7XG4gIGxldCB3ZWlnaHREYXRhOiBXZWlnaHREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChtb2RlbEpTT04ud2VpZ2h0c01hbmlmZXN0ICE9IG51bGwpIHtcbiAgICBbd2VpZ2h0U3BlY3MsIHdlaWdodERhdGFdID0gYXdhaXQgbG9hZFdlaWdodHMobW9kZWxKU09OLndlaWdodHNNYW5pZmVzdCk7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OU3luYyhtb2RlbEpTT04sIHdlaWdodFNwZWNzLCB3ZWlnaHREYXRhKTtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSBNb2RlbEFydGlmYWN0c0luZm8gZmllbGRzIGZvciBhIG1vZGVsIHdpdGggSlNPTiB0b3BvbG9neS5cbiAqIEBwYXJhbSBtb2RlbEFydGlmYWN0c1xuICogQHJldHVybnMgQSBNb2RlbEFydGlmYWN0c0luZm8gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpOlxuICAgIE1vZGVsQXJ0aWZhY3RzSW5mbyB7XG4gIGlmIChtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIEpTT04gbW9kZWwgdG9wb2xvZ3ksIHJlY2VpdmVkIEFycmF5QnVmZmVyLicpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRlU2F2ZWQ6IG5ldyBEYXRlKCksXG4gICAgbW9kZWxUb3BvbG9neVR5cGU6ICdKU09OJyxcbiAgICBtb2RlbFRvcG9sb2d5Qnl0ZXM6IG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgPT0gbnVsbCA/XG4gICAgICAgIDAgOlxuICAgICAgICBzdHJpbmdCeXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kpKSxcbiAgICB3ZWlnaHRTcGVjc0J5dGVzOiBtb2RlbEFydGlmYWN0cy53ZWlnaHRTcGVjcyA9PSBudWxsID9cbiAgICAgICAgMCA6XG4gICAgICAgIHN0cmluZ0J5dGVMZW5ndGgoSlNPTi5zdHJpbmdpZnkobW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MpKSxcbiAgICB3ZWlnaHREYXRhQnl0ZXM6IG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEgPT0gbnVsbCA/XG4gICAgICAgIDAgOlxuICAgICAgICBuZXcgQ29tcG9zaXRlQXJyYXlCdWZmZXIobW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSkuYnl0ZUxlbmd0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25jYXRlbmF0ZSB0aGUgd2VpZ2h0cyBzdG9yZWQgaW4gYSBXZWlnaHRzTWFuaWZlc3RDb25maWcgaW50byBhIGxpc3Qgb2ZcbiAqIFdlaWdodHNNYW5pZmVzdEVudHJ5XG4gKlxuICogQHBhcmFtIHdlaWdodHNNYW5pZmVzdCBUaGUgV2VpZ2h0c01hbmlmZXN0Q29uZmlnIHRvIGV4dHJhY3Qgd2VpZ2h0cyBmcm9tLlxuICogQHJldHVybnMgQSBsaXN0IG9mIFdlaWdodHNNYW5pZmVzdEVudHJ5IG9mIHRoZSB3ZWlnaHRzIGluIHRoZSB3ZWlnaHRzTWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlaWdodFNwZWNzKHdlaWdodHNNYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnKTpcbiAgICBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdIHtcbiAgY29uc3Qgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiB3ZWlnaHRzTWFuaWZlc3QpIHtcbiAgICB3ZWlnaHRTcGVjcy5wdXNoKC4uLmVudHJ5LndlaWdodHMpO1xuICB9XG4gIHJldHVybiB3ZWlnaHRTcGVjcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBtYW50aXNhIHRhYmxlIGZvciBjYXN0aW5nIEZsb2F0MTYgdG8gRmxvYXQzMlxuICogU2VlIGh0dHA6Ly93d3cuZm94LXRvb2xraXQub3JnL2Z0cC9mYXN0aGFsZmZsb2F0Y29udmVyc2lvbi5wZGZcbiAqXG4gKiBAcmV0dXJucyBVaW50MzJBcnJheSwgMjA0OCBtYW50aXNzYSBsb29rdXAgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBjb21wdXRlRmxvYXQxNk1hbnRpc2FUYWJsZSgpOiBVaW50MzJBcnJheSB7XG4gIGNvbnN0IGNvbnZlcnRNYW50aXNzYSA9IChpOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGxldCBtID0gaSA8PCAxMztcbiAgICBsZXQgZSA9IDA7XG5cbiAgICB3aGlsZSAoKG0gJiAweDAwODAwMDAwKSA9PT0gMCkge1xuICAgICAgZSAtPSAweDAwODAwMDAwO1xuICAgICAgbSA8PD0gMTtcbiAgICB9XG4gICAgbSAmPSB+MHgwMDgwMDAwMDtcbiAgICBlICs9IDB4Mzg4MDAwMDA7XG5cbiAgICByZXR1cm4gbSB8IGU7XG4gIH07XG5cbiAgY29uc3QgbWFudGlzYVRhYmxlID0gbmV3IFVpbnQzMkFycmF5KDIwNDgpO1xuXG4gIG1hbnRpc2FUYWJsZVswXSA9IDA7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgMTAyNDsgaSsrKSB7XG4gICAgbWFudGlzYVRhYmxlW2ldID0gY29udmVydE1hbnRpc3NhKGkpO1xuICB9XG4gIGZvciAobGV0IGkgPSAxMDI0OyBpIDwgMjA0ODsgaSsrKSB7XG4gICAgbWFudGlzYVRhYmxlW2ldID0gMHgzODAwMDAwMCArICgoaSAtIDEwMjQpIDw8IDEzKTtcbiAgfVxuXG4gIHJldHVybiBtYW50aXNhVGFibGU7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgZXhwb25lbnQgdGFibGUgZm9yIGNhc3RpbmcgRmxvYXQxNiB0byBGbG9hdDMyXG4gKiBTZWUgaHR0cDovL3d3dy5mb3gtdG9vbGtpdC5vcmcvZnRwL2Zhc3RoYWxmZmxvYXRjb252ZXJzaW9uLnBkZlxuICpcbiAqIEByZXR1cm5zIFVpbnQzMkFycmF5LCA2NCBleHBvbmVudCBsb29rdXAgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBjb21wdXRlRmxvYXQxNkV4cG9uZW50VGFibGUoKTogVWludDMyQXJyYXkge1xuICBjb25zdCBleHBvbmVudFRhYmxlID0gbmV3IFVpbnQzMkFycmF5KDY0KTtcblxuICBleHBvbmVudFRhYmxlWzBdID0gMDtcbiAgZXhwb25lbnRUYWJsZVszMV0gPSAweDQ3ODAwMDAwO1xuICBleHBvbmVudFRhYmxlWzMyXSA9IDB4ODAwMDAwMDA7XG4gIGV4cG9uZW50VGFibGVbNjNdID0gMHhjNzgwMDAwMDtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCAzMTsgaSsrKSB7XG4gICAgZXhwb25lbnRUYWJsZVtpXSA9IGkgPDwgMjM7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDMzOyBpIDwgNjM7IGkrKykge1xuICAgIGV4cG9uZW50VGFibGVbaV0gPSAweDgwMDAwMDAwICsgKChpIC0gMzIpIDw8IDIzKTtcbiAgfVxuXG4gIHJldHVybiBleHBvbmVudFRhYmxlO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIG9mZnNldCB0YWJsZSBmb3IgY2FzdGluZyBGbG9hdDE2IHRvIEZsb2F0MzJcbiAqIFNlZSBodHRwOi8vd3d3LmZveC10b29sa2l0Lm9yZy9mdHAvZmFzdGhhbGZmbG9hdGNvbnZlcnNpb24ucGRmXG4gKlxuICogQHJldHVybnMgVWludDMyQXJyYXksIDZkIG9mZnNldCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVGbG9hdDE2T2Zmc2V0VGFibGUoKTogVWludDMyQXJyYXkge1xuICBjb25zdCBvZmZzZXRUYWJsZSA9IG5ldyBVaW50MzJBcnJheSg2NCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgb2Zmc2V0VGFibGVbaV0gPSAxMDI0O1xuICB9XG4gIG9mZnNldFRhYmxlWzBdID0gb2Zmc2V0VGFibGVbMzJdID0gMDtcblxuICByZXR1cm4gb2Zmc2V0VGFibGU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgYSBGbG9hdDE2IGRlY29kZXIgd2hpY2ggd2lsbCBkZWNvZGUgYSBCeXRlQXJyYXkgb2YgRmxvYXQxNiB2YWx1ZXNcbiAqIHRvIGEgRmxvYXQzMkFycmF5LlxuICpcbiAqIEByZXR1cm5zIEZ1bmN0aW9uIChidWZmZXI6IFVpbnQxNkFycmF5KSA9PiBGbG9hdDMyQXJyYXkgd2hpY2ggZGVjb2Rlc1xuICogICAgICAgICAgdGhlIFVpbnQxNkFycmF5IG9mIEZsb2F0MTYgYnl0ZXMgdG8gYSBGbG9hdDMyQXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG9hdDE2RGVjb2RlcigpOiAoYnVmZmVyOiBVaW50MTZBcnJheSkgPT4gRmxvYXQzMkFycmF5IHtcbiAgLy8gQWxnb3JpdGhtIGlzIGJhc2VkIG9mZiBvZlxuICAvLyBodHRwOi8vd3d3LmZveC10b29sa2l0Lm9yZy9mdHAvZmFzdGhhbGZmbG9hdGNvbnZlcnNpb24ucGRmXG5cbiAgLy8gQ2FjaGUgbG9va3VwIHRhYmxlc1xuICBjb25zdCBtYW50aXNhVGFibGUgPSBjb21wdXRlRmxvYXQxNk1hbnRpc2FUYWJsZSgpO1xuICBjb25zdCBleHBvbmVudFRhYmxlID0gY29tcHV0ZUZsb2F0MTZFeHBvbmVudFRhYmxlKCk7XG4gIGNvbnN0IG9mZnNldFRhYmxlID0gY29tcHV0ZUZsb2F0MTZPZmZzZXRUYWJsZSgpO1xuXG4gIHJldHVybiAocXVhbnRpemVkQXJyYXk6IFVpbnQxNkFycmF5KSA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDQgKiBxdWFudGl6ZWRBcnJheS5sZW5ndGgpO1xuICAgIGNvbnN0IGJ1ZmZlclVpbnQzMlZpZXcgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcXVhbnRpemVkQXJyYXkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmbG9hdDE2Qml0cyA9IHF1YW50aXplZEFycmF5W2luZGV4XTtcbiAgICAgIGNvbnN0IGZsb2F0MzJCaXRzID1cbiAgICAgICAgICBtYW50aXNhVGFibGVbb2Zmc2V0VGFibGVbZmxvYXQxNkJpdHMgPj4gMTBdICsgKGZsb2F0MTZCaXRzICYgMHgzZmYpXSArXG4gICAgICAgICAgZXhwb25lbnRUYWJsZVtmbG9hdDE2Qml0cyA+PiAxMF07XG4gICAgICBidWZmZXJVaW50MzJWaWV3W2luZGV4XSA9IGZsb2F0MzJCaXRzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class IORouterRegistry {\n constructor() {\n this.saveRouters = [];\n this.loadRouters = [];\n }\n static getInstance() {\n if (IORouterRegistry.instance == null) {\n IORouterRegistry.instance = new IORouterRegistry();\n }\n return IORouterRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerSaveRouter(saveRouter) {\n IORouterRegistry.getInstance().saveRouters.push(saveRouter);\n }\n /**\n * Register a load-handler router.\n *\n * @param loadRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `load` method defined or `null`.\n */\n static registerLoadRouter(loadRouter) {\n IORouterRegistry.getInstance().loadRouters.push(loadRouter);\n }\n /**\n * Look up IOHandler for saving, given a URL-like string.\n *\n * @param url\n * @returns If only one match is found, an instance of IOHandler with the\n * `save` method defined. If no match is found, `null`.\n * @throws Error, if more than one match is found.\n */\n static getSaveHandlers(url) {\n return IORouterRegistry.getHandlers(url, 'save');\n }\n /**\n * Look up IOHandler for loading, given a URL-like string.\n *\n * @param url\n * @param loadOptions Optional, custom load options.\n * @returns All valid handlers for `url`, given the currently registered\n * handler routers.\n */\n static getLoadHandlers(url, loadOptions) {\n return IORouterRegistry.getHandlers(url, 'load', loadOptions);\n }\n static getHandlers(url, handlerType, loadOptions) {\n const validHandlers = [];\n const routers = handlerType === 'load' ?\n IORouterRegistry.getInstance().loadRouters :\n IORouterRegistry.getInstance().saveRouters;\n routers.forEach(router => {\n const handler = router(url, loadOptions);\n if (handler !== null) {\n validHandlers.push(handler);\n }\n });\n return validHandlers;\n }\n}\nexport const registerSaveRouter = (loudRouter) => IORouterRegistry.registerSaveRouter(loudRouter);\nexport const registerLoadRouter = (loudRouter) => IORouterRegistry.registerLoadRouter(loudRouter);\nexport const getSaveHandlers = (url) => IORouterRegistry.getSaveHandlers(url);\nexport const getLoadHandlers = (url, loadOptions) => IORouterRegistry.getLoadHandlers(url, loadOptions);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyX3JlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9pby9yb3V0ZXJfcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQjtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDckMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUNwRDtRQUNELE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFvQjtRQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFvQjtRQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFvQjtRQUN6QyxPQUFPLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQW9CLEVBQUUsV0FBeUI7UUFFcEUsT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FDdEIsR0FBb0IsRUFBRSxXQUEwQixFQUNoRCxXQUF5QjtRQUMzQixNQUFNLGFBQWEsR0FBZ0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNwQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFvQixFQUFFLEVBQUUsQ0FDdkQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFvQixFQUFFLEVBQUUsQ0FDdkQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBb0IsRUFBRSxFQUFFLENBQ3BELGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQ3hCLENBQUMsR0FBb0IsRUFBRSxXQUF5QixFQUFFLEVBQUUsQ0FDaEQsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJT0hhbmRsZXIsIExvYWRPcHRpb25zfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10sIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpID0+XG4gICAgSU9IYW5kbGVyO1xuXG5leHBvcnQgY2xhc3MgSU9Sb3V0ZXJSZWdpc3RyeSB7XG4gIC8vIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IElPUm91dGVyUmVnaXN0cnk7XG5cbiAgcHJpdmF0ZSBzYXZlUm91dGVyczogSU9Sb3V0ZXJbXTtcbiAgcHJpdmF0ZSBsb2FkUm91dGVyczogSU9Sb3V0ZXJbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2F2ZVJvdXRlcnMgPSBbXTtcbiAgICB0aGlzLmxvYWRSb3V0ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBJT1JvdXRlclJlZ2lzdHJ5IHtcbiAgICBpZiAoSU9Sb3V0ZXJSZWdpc3RyeS5pbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBJT1JvdXRlclJlZ2lzdHJ5Lmluc3RhbmNlID0gbmV3IElPUm91dGVyUmVnaXN0cnkoKTtcbiAgICB9XG4gICAgcmV0dXJuIElPUm91dGVyUmVnaXN0cnkuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBzYXZlLWhhbmRsZXIgcm91dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gc2F2ZVJvdXRlciBBIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIFVSTC1saWtlIHN0cmluZyBvbnRvIGFuIGluc3RhbmNlXG4gICAqIG9mIGBJT0hhbmRsZXJgIHdpdGggdGhlIGBzYXZlYCBtZXRob2QgZGVmaW5lZCBvciBgbnVsbGAuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJTYXZlUm91dGVyKHNhdmVSb3V0ZXI6IElPUm91dGVyKSB7XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLnNhdmVSb3V0ZXJzLnB1c2goc2F2ZVJvdXRlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBsb2FkLWhhbmRsZXIgcm91dGVyLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFJvdXRlciBBIGZ1bmN0aW9uIHRoYXQgbWFwcyBhIFVSTC1saWtlIHN0cmluZyBvbnRvIGFuIGluc3RhbmNlXG4gICAqIG9mIGBJT0hhbmRsZXJgIHdpdGggdGhlIGBsb2FkYCBtZXRob2QgZGVmaW5lZCBvciBgbnVsbGAuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJMb2FkUm91dGVyKGxvYWRSb3V0ZXI6IElPUm91dGVyKSB7XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmxvYWRSb3V0ZXJzLnB1c2gobG9hZFJvdXRlcik7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCBJT0hhbmRsZXIgZm9yIHNhdmluZywgZ2l2ZW4gYSBVUkwtbGlrZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHJldHVybnMgSWYgb25seSBvbmUgbWF0Y2ggaXMgZm91bmQsIGFuIGluc3RhbmNlIG9mIElPSGFuZGxlciB3aXRoIHRoZVxuICAgKiBgc2F2ZWAgbWV0aG9kIGRlZmluZWQuIElmIG5vIG1hdGNoIGlzIGZvdW5kLCBgbnVsbGAuXG4gICAqIEB0aHJvd3MgRXJyb3IsIGlmIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaXMgZm91bmQuXG4gICAqL1xuICBzdGF0aWMgZ2V0U2F2ZUhhbmRsZXJzKHVybDogc3RyaW5nfHN0cmluZ1tdKTogSU9IYW5kbGVyW10ge1xuICAgIHJldHVybiBJT1JvdXRlclJlZ2lzdHJ5LmdldEhhbmRsZXJzKHVybCwgJ3NhdmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIElPSGFuZGxlciBmb3IgbG9hZGluZywgZ2l2ZW4gYSBVUkwtbGlrZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIGxvYWRPcHRpb25zIE9wdGlvbmFsLCBjdXN0b20gbG9hZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBbGwgdmFsaWQgaGFuZGxlcnMgZm9yIGB1cmxgLCBnaXZlbiB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAgICogICBoYW5kbGVyIHJvdXRlcnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0TG9hZEhhbmRsZXJzKHVybDogc3RyaW5nfHN0cmluZ1tdLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTpcbiAgICAgIElPSGFuZGxlcltdIHtcbiAgICByZXR1cm4gSU9Sb3V0ZXJSZWdpc3RyeS5nZXRIYW5kbGVycyh1cmwsICdsb2FkJywgbG9hZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SGFuZGxlcnMoXG4gICAgICB1cmw6IHN0cmluZ3xzdHJpbmdbXSwgaGFuZGxlclR5cGU6ICdzYXZlJ3wnbG9hZCcsXG4gICAgICBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTogSU9IYW5kbGVyW10ge1xuICAgIGNvbnN0IHZhbGlkSGFuZGxlcnM6IElPSGFuZGxlcltdID0gW107XG4gICAgY29uc3Qgcm91dGVycyA9IGhhbmRsZXJUeXBlID09PSAnbG9hZCcgP1xuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubG9hZFJvdXRlcnMgOlxuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuc2F2ZVJvdXRlcnM7XG4gICAgcm91dGVycy5mb3JFYWNoKHJvdXRlciA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gcm91dGVyKHVybCwgbG9hZE9wdGlvbnMpO1xuICAgICAgaWYgKGhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFsaWRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWxpZEhhbmRsZXJzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlclNhdmVSb3V0ZXIgPSAobG91ZFJvdXRlcjogSU9Sb3V0ZXIpID0+XG4gICAgSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlclNhdmVSb3V0ZXIobG91ZFJvdXRlcik7XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJMb2FkUm91dGVyID0gKGxvdWRSb3V0ZXI6IElPUm91dGVyKSA9PlxuICAgIElPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJMb2FkUm91dGVyKGxvdWRSb3V0ZXIpO1xuZXhwb3J0IGNvbnN0IGdldFNhdmVIYW5kbGVycyA9ICh1cmw6IHN0cmluZ3xzdHJpbmdbXSkgPT5cbiAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldFNhdmVIYW5kbGVycyh1cmwpO1xuZXhwb3J0IGNvbnN0IGdldExvYWRIYW5kbGVycyA9XG4gICAgKHVybDogc3RyaW5nfHN0cmluZ1tdLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKSA9PlxuICAgICAgICBJT1JvdXRlclJlZ2lzdHJ5LmdldExvYWRIYW5kbGVycyh1cmwsIGxvYWRPcHRpb25zKTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nconst DATABASE_NAME = 'tensorflowjs';\nconst DATABASE_VERSION = 1;\n// Model data and ModelArtifactsInfo (metadata) are stored in two separate\n// stores for efficient access of the list of stored models and their metadata.\n// 1. The object store for model data: topology, weights and weight manifests.\nconst MODEL_STORE_NAME = 'models_store';\n// 2. The object store for ModelArtifactsInfo, including meta-information such\n// as the type of topology (JSON vs binary), byte size of the topology, byte\n// size of the weights, etc.\nconst INFO_STORE_NAME = 'model_info_store';\n/**\n * Delete the entire database for tensorflow.js, including the models store.\n */\nexport async function deleteDatabase() {\n const idbFactory = getIndexedDBFactory();\n return new Promise((resolve, reject) => {\n const deleteRequest = idbFactory.deleteDatabase(DATABASE_NAME);\n deleteRequest.onsuccess = () => resolve();\n deleteRequest.onerror = error => reject(error);\n });\n}\nfunction getIndexedDBFactory() {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Add more info about what IOHandler subtypes are available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('Failed to obtain IndexedDB factory because the current environment' +\n 'is not a web browser.');\n }\n // tslint:disable-next-line:no-any\n const theWindow = typeof window === 'undefined' ? self : window;\n const factory = theWindow.indexedDB || theWindow.mozIndexedDB ||\n theWindow.webkitIndexedDB || theWindow.msIndexedDB ||\n theWindow.shimIndexedDB;\n if (factory == null) {\n throw new Error('The current browser does not appear to support IndexedDB.');\n }\n return factory;\n}\nfunction setUpDatabase(openRequest) {\n const db = openRequest.result;\n db.createObjectStore(MODEL_STORE_NAME, { keyPath: 'modelPath' });\n db.createObjectStore(INFO_STORE_NAME, { keyPath: 'modelPath' });\n}\n/**\n * IOHandler subclass: Browser IndexedDB.\n *\n * See the doc string of `browserIndexedDB` for more details.\n */\nclass BrowserIndexedDB {\n constructor(modelPath) {\n this.indexedDB = getIndexedDBFactory();\n if (modelPath == null || !modelPath) {\n throw new Error('For IndexedDB, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n }\n async save(modelArtifacts) {\n // TODO(cais): Support saving GraphDef models.\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n return this.databaseAction(this.modelPath, modelArtifacts);\n }\n async load() {\n return this.databaseAction(this.modelPath);\n }\n /**\n * Perform database action to put model artifacts into or read model artifacts\n * from IndexedDB object store.\n *\n * Whether the action is put or get depends on whether `modelArtifacts` is\n * specified. If it is specified, the action will be put; otherwise the action\n * will be get.\n *\n * @param modelPath A unique string path for the model.\n * @param modelArtifacts If specified, it will be the model artifacts to be\n * stored in IndexedDB.\n * @returns A `Promise` of `SaveResult`, if the action is put, or a `Promise`\n * of `ModelArtifacts`, if the action is get.\n */\n databaseAction(modelPath, modelArtifacts) {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n if (modelArtifacts == null) {\n // Read model out from object store.\n const modelTx = db.transaction(MODEL_STORE_NAME, 'readonly');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const getRequest = modelStore.get(this.modelPath);\n getRequest.onsuccess = () => {\n if (getRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${this.modelPath}' ` +\n `in IndexedDB.`));\n }\n else {\n resolve(getRequest.result.modelArtifacts);\n }\n };\n getRequest.onerror = error => {\n db.close();\n return reject(getRequest.error);\n };\n modelTx.oncomplete = () => db.close();\n }\n else {\n // Put model into object store.\n // Concatenate all the model weights into a single ArrayBuffer. Large\n // models (~1GB) have problems saving if they are not concatenated.\n // TODO(mattSoulanille): Save large models to multiple indexeddb\n // records.\n modelArtifacts.weightData = CompositeArrayBuffer.join(modelArtifacts.weightData);\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n // First, put ModelArtifactsInfo into info store.\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n let infoStore = infoTx.objectStore(INFO_STORE_NAME);\n let putInfoRequest;\n try {\n putInfoRequest =\n infoStore.put({ modelPath: this.modelPath, modelArtifactsInfo });\n }\n catch (error) {\n return reject(error);\n }\n let modelTx;\n putInfoRequest.onsuccess = () => {\n // Second, put model data into model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n let putModelRequest;\n try {\n putModelRequest = modelStore.put({\n modelPath: this.modelPath,\n modelArtifacts,\n modelArtifactsInfo\n });\n }\n catch (error) {\n // Sometimes, the serialized value is too large to store.\n return reject(error);\n }\n putModelRequest.onsuccess = () => resolve({ modelArtifactsInfo });\n putModelRequest.onerror = error => {\n // If the put-model request fails, roll back the info entry as\n // well.\n infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const deleteInfoRequest = infoStore.delete(this.modelPath);\n deleteInfoRequest.onsuccess = () => {\n db.close();\n return reject(putModelRequest.error);\n };\n deleteInfoRequest.onerror = error => {\n db.close();\n return reject(putModelRequest.error);\n };\n };\n };\n putInfoRequest.onerror = error => {\n db.close();\n return reject(putInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n }\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\nBrowserIndexedDB.URL_SCHEME = 'indexeddb://';\nexport { BrowserIndexedDB };\nexport const indexedDBRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) {\n return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(indexedDBRouter);\nIORouterRegistry.registerLoadRouter(indexedDBRouter);\n/**\n * Creates a browser IndexedDB IOHandler for saving and loading models.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save('indexeddb://MyModel'));\n * console.log(saveResult);\n * ```\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `BrowserIndexedDB` (sublcass of `IOHandler`),\n * which can be used with, e.g., `tf.Model.save`.\n */\nexport function browserIndexedDB(modelPath) {\n return new BrowserIndexedDB(modelPath);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserIndexedDB.URL_SCHEME) ?\n key.slice(BrowserIndexedDB.URL_SCHEME.length) :\n key;\n}\nexport class BrowserIndexedDBManager {\n constructor() {\n this.indexedDB = getIndexedDBFactory();\n }\n async listModels() {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const tx = db.transaction(INFO_STORE_NAME, 'readonly');\n const store = tx.objectStore(INFO_STORE_NAME);\n // tslint:disable:max-line-length\n // Need to cast `store` as `any` here because TypeScript's DOM\n // library does not have the `getAll()` method even though the\n // method is supported in the latest version of most mainstream\n // browsers:\n // https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAll\n // tslint:enable:max-line-length\n // tslint:disable-next-line:no-any\n const getAllInfoRequest = store.getAll();\n getAllInfoRequest.onsuccess = () => {\n const out = {};\n for (const item of getAllInfoRequest.result) {\n out[item.modelPath] = item.modelArtifactsInfo;\n }\n resolve(out);\n };\n getAllInfoRequest.onerror = error => {\n db.close();\n return reject(getAllInfoRequest.error);\n };\n tx.oncomplete = () => db.close();\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n const infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const getInfoRequest = infoStore.get(path);\n let modelTx;\n getInfoRequest.onsuccess = () => {\n if (getInfoRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${path}' ` +\n `in IndexedDB.`));\n }\n else {\n // First, delete the entry in the info store.\n const deleteInfoRequest = infoStore.delete(path);\n const deleteModelData = () => {\n // Second, delete the entry in the model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const deleteModelRequest = modelStore.delete(path);\n deleteModelRequest.onsuccess = () => resolve(getInfoRequest.result.modelArtifactsInfo);\n deleteModelRequest.onerror = error => reject(getInfoRequest.error);\n };\n // Proceed with deleting model data regardless of whether deletion\n // of info data succeeds or not.\n deleteInfoRequest.onsuccess = deleteModelData;\n deleteInfoRequest.onerror = error => {\n deleteModelData();\n db.close();\n return reject(getInfoRequest.error);\n };\n }\n };\n getInfoRequest.onerror = error => {\n db.close();\n return reject(getInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZF9kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vaW5kZXhlZF9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBVyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTdELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQztBQUNyQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUUzQiwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUN4Qyw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLCtCQUErQjtBQUMvQixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYztJQUNsQyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBRXpDLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRCxhQUFhLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUI7SUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNoQyx5RUFBeUU7UUFDekUsd0VBQXdFO1FBQ3hFLGtFQUFrRTtRQUNsRSxNQUFNLElBQUksS0FBSyxDQUNYLG9FQUFvRTtZQUNwRSx1QkFBdUIsQ0FBQyxDQUFDO0tBQzlCO0lBQ0Qsa0NBQWtDO0lBQ2xDLE1BQU0sU0FBUyxHQUFRLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsWUFBWTtRQUN6RCxTQUFTLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxXQUFXO1FBQ2xELFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDNUIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsMkRBQTJELENBQUMsQ0FBQztLQUNsRTtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxXQUF1QjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBcUIsQ0FBQztJQUM3QyxFQUFFLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztJQUMvRCxFQUFFLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGdCQUFnQjtJQU0zQixZQUFZLFNBQWlCO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDWCxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBOEI7UUFDdkMsOENBQThDO1FBQzlDLElBQUksY0FBYyxDQUFDLGFBQWEsWUFBWSxXQUFXLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDWCxvRUFBb0U7Z0JBQ3BFLHdCQUF3QixDQUFDLENBQUM7U0FDL0I7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQ2xDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQTRCLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSyxjQUFjLENBQUMsU0FBaUIsRUFBRSxjQUErQjtRQUV2RSxPQUFPLElBQUksT0FBTyxDQUE0QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RSxXQUFXLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUvRCxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFFOUIsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFO29CQUMxQixvQ0FBb0M7b0JBQ3BDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzdELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDekQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ2xELFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO3dCQUMxQixJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFOzRCQUM3QixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQ25CLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxJQUFJO2dDQUNsRCxlQUFlLENBQUMsQ0FBQyxDQUFDO3lCQUN2Qjs2QkFBTTs0QkFDTCxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDM0M7b0JBQ0gsQ0FBQyxDQUFDO29CQUNGLFVBQVUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7d0JBQzNCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDWCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQztvQkFDRixPQUFPLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0wsK0JBQStCO29CQUUvQixxRUFBcUU7b0JBQ3JFLG1FQUFtRTtvQkFDbkUsZ0VBQWdFO29CQUNoRSxXQUFXO29CQUNYLGNBQWMsQ0FBQyxVQUFVLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUNqRCxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQy9CLE1BQU0sa0JBQWtCLEdBQ3BCLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUNqRCxpREFBaUQ7b0JBQ2pELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUM1RCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLGNBQXVDLENBQUM7b0JBQzVDLElBQUk7d0JBQ0YsY0FBYzs0QkFDWixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO3FCQUNsRTtvQkFBQyxPQUFPLEtBQUssRUFBRTt3QkFDZCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdEI7b0JBQ0QsSUFBSSxPQUF1QixDQUFDO29CQUM1QixjQUFjLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTt3QkFDOUIsMkNBQTJDO3dCQUMzQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQzt3QkFDeEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUN6RCxJQUFJLGVBQXdDLENBQUM7d0JBQzdDLElBQUk7NEJBQ0YsZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0NBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQ0FDekIsY0FBYztnQ0FDZCxrQkFBa0I7NkJBQ25CLENBQUMsQ0FBQzt5QkFDSjt3QkFBQyxPQUFPLEtBQUssRUFBRTs0QkFDZCx5REFBeUQ7NEJBQ3pELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUN0Qjt3QkFDRCxlQUFlLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQzt3QkFDaEUsZUFBZSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRTs0QkFDaEMsOERBQThEOzRCQUM5RCxRQUFROzRCQUNSLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUNoRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUMzRCxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO2dDQUNqQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ1gsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN2QyxDQUFDLENBQUM7NEJBQ0YsaUJBQWlCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFO2dDQUNsQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ1gsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUN2QyxDQUFDLENBQUM7d0JBQ0osQ0FBQyxDQUFDO29CQUNKLENBQUMsQ0FBQztvQkFDRixjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFO3dCQUMvQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ1gsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QyxDQUFDLENBQUM7b0JBQ0YsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7d0JBQ3ZCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTs0QkFDbkIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUNaOzZCQUFNOzRCQUNMLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUN2QztvQkFDSCxDQUFDLENBQUM7aUJBQ0g7WUFDSCxDQUFDLENBQUM7WUFDRixXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM0llLDJCQUFVLEdBQUcsY0FBYyxDQUFDO1NBSmpDLGdCQUFnQjtBQWtKN0IsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFhLENBQUMsR0FBb0IsRUFBRSxFQUFFO0lBQ2hFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDaEMsT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0RSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtBQUNILENBQUMsQ0FBQztBQUNGLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JELGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFNBQWlCO0lBQ2hELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ25DLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDO0FBQ1YsQ0FBQztBQUVELE1BQU0sT0FBTyx1QkFBdUI7SUFHbEM7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FDZCxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNsQixNQUFNLFdBQVcsR0FDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxXQUFXLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUvRCxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzlDLGlDQUFpQztnQkFDakMsOERBQThEO2dCQUM5RCw4REFBOEQ7Z0JBQzlELCtEQUErRDtnQkFDL0QsWUFBWTtnQkFDWix5RUFBeUU7Z0JBQ3pFLGdDQUFnQztnQkFDaEMsa0NBQWtDO2dCQUNsQyxNQUFNLGlCQUFpQixHQUFJLEtBQWEsQ0FBQyxNQUFNLEVBQWdCLENBQUM7Z0JBQ2hFLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7b0JBQ2pDLE1BQU0sR0FBRyxHQUF5QyxFQUFFLENBQUM7b0JBQ3JELEtBQUssTUFBTSxJQUFJLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFO3dCQUMzQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztxQkFDL0M7b0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLENBQUMsQ0FBQztnQkFDRixpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUU7b0JBQ2xDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDO2dCQUNGLEVBQUUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQztZQUNGLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM1QixJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDekUsV0FBVyxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFL0QsV0FBVyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQzNCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLE9BQXVCLENBQUM7Z0JBQzVCLGNBQWMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO29CQUM5QixJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUNqQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQ25CLGdDQUFnQyxJQUFJLElBQUk7NEJBQ3hDLGVBQWUsQ0FBQyxDQUFDLENBQUM7cUJBQ3ZCO3lCQUFNO3dCQUNMLDZDQUE2Qzt3QkFDN0MsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNqRCxNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUU7NEJBQzNCLCtDQUErQzs0QkFDL0MsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQ3hELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDekQsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNuRCxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7NEJBQ3RELGtCQUFrQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUNqQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNuQyxDQUFDLENBQUM7d0JBQ0Ysa0VBQWtFO3dCQUNsRSxnQ0FBZ0M7d0JBQ2hDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7d0JBQzlDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRTs0QkFDbEMsZUFBZSxFQUFFLENBQUM7NEJBQ2xCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3RDLENBQUMsQ0FBQztxQkFDSDtnQkFDSCxDQUFDLENBQUM7Z0JBQ0YsY0FBYyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRTtvQkFDL0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsQ0FBQyxDQUFDO2dCQUVGLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO29CQUN2QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7d0JBQ25CLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDWjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztxQkFDdkM7Z0JBQ0gsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDO1lBQ0YsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAnLi4vZmxhZ3MnO1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge2dldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT059IGZyb20gJy4vaW9fdXRpbHMnO1xuaW1wb3J0IHtJT1JvdXRlciwgSU9Sb3V0ZXJSZWdpc3RyeX0gZnJvbSAnLi9yb3V0ZXJfcmVnaXN0cnknO1xuaW1wb3J0IHtJT0hhbmRsZXIsIE1vZGVsQXJ0aWZhY3RzLCBNb2RlbEFydGlmYWN0c0luZm8sIE1vZGVsU3RvcmVNYW5hZ2VyLCBTYXZlUmVzdWx0fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5cbmNvbnN0IERBVEFCQVNFX05BTUUgPSAndGVuc29yZmxvd2pzJztcbmNvbnN0IERBVEFCQVNFX1ZFUlNJT04gPSAxO1xuXG4vLyBNb2RlbCBkYXRhIGFuZCBNb2RlbEFydGlmYWN0c0luZm8gKG1ldGFkYXRhKSBhcmUgc3RvcmVkIGluIHR3byBzZXBhcmF0ZVxuLy8gc3RvcmVzIGZvciBlZmZpY2llbnQgYWNjZXNzIG9mIHRoZSBsaXN0IG9mIHN0b3JlZCBtb2RlbHMgYW5kIHRoZWlyIG1ldGFkYXRhLlxuLy8gMS4gVGhlIG9iamVjdCBzdG9yZSBmb3IgbW9kZWwgZGF0YTogdG9wb2xvZ3ksIHdlaWdodHMgYW5kIHdlaWdodCBtYW5pZmVzdHMuXG5jb25zdCBNT0RFTF9TVE9SRV9OQU1FID0gJ21vZGVsc19zdG9yZSc7XG4vLyAyLiBUaGUgb2JqZWN0IHN0b3JlIGZvciBNb2RlbEFydGlmYWN0c0luZm8sIGluY2x1ZGluZyBtZXRhLWluZm9ybWF0aW9uIHN1Y2hcbi8vICAgIGFzIHRoZSB0eXBlIG9mIHRvcG9sb2d5IChKU09OIHZzIGJpbmFyeSksIGJ5dGUgc2l6ZSBvZiB0aGUgdG9wb2xvZ3ksIGJ5dGVcbi8vICAgIHNpemUgb2YgdGhlIHdlaWdodHMsIGV0Yy5cbmNvbnN0IElORk9fU1RPUkVfTkFNRSA9ICdtb2RlbF9pbmZvX3N0b3JlJztcblxuLyoqXG4gKiBEZWxldGUgdGhlIGVudGlyZSBkYXRhYmFzZSBmb3IgdGVuc29yZmxvdy5qcywgaW5jbHVkaW5nIHRoZSBtb2RlbHMgc3RvcmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVEYXRhYmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaWRiRmFjdG9yeSA9IGdldEluZGV4ZWREQkZhY3RvcnkoKTtcblxuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGRlbGV0ZVJlcXVlc3QgPSBpZGJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlKERBVEFCQVNFX05BTUUpO1xuICAgIGRlbGV0ZVJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIGRlbGV0ZVJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRleGVkREJGYWN0b3J5KCk6IElEQkZhY3Rvcnkge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSkge1xuICAgIC8vIFRPRE8oY2Fpcyk6IEFkZCBtb3JlIGluZm8gYWJvdXQgd2hhdCBJT0hhbmRsZXIgc3VidHlwZXMgYXJlIGF2YWlsYWJsZS5cbiAgICAvLyAgIE1heWJlIHBvaW50IHRvIGEgZG9jIHBhZ2Ugb24gdGhlIHdlYiBhbmQvb3IgYXV0b21hdGljYWxseSBkZXRlcm1pbmVcbiAgICAvLyAgIHRoZSBhdmFpbGFibGUgSU9IYW5kbGVycyBhbmQgcHJpbnQgdGhlbSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGYWlsZWQgdG8gb2J0YWluIEluZGV4ZWREQiBmYWN0b3J5IGJlY2F1c2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQnICtcbiAgICAgICAgJ2lzIG5vdCBhIHdlYiBicm93c2VyLicpO1xuICB9XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgY29uc3QgdGhlV2luZG93OiBhbnkgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB3aW5kb3c7XG4gIGNvbnN0IGZhY3RvcnkgPSB0aGVXaW5kb3cuaW5kZXhlZERCIHx8IHRoZVdpbmRvdy5tb3pJbmRleGVkREIgfHxcbiAgICAgIHRoZVdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgdGhlV2luZG93Lm1zSW5kZXhlZERCIHx8XG4gICAgICB0aGVXaW5kb3cuc2hpbUluZGV4ZWREQjtcbiAgaWYgKGZhY3RvcnkgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBjdXJyZW50IGJyb3dzZXIgZG9lcyBub3QgYXBwZWFyIHRvIHN1cHBvcnQgSW5kZXhlZERCLicpO1xuICB9XG4gIHJldHVybiBmYWN0b3J5O1xufVxuXG5mdW5jdGlvbiBzZXRVcERhdGFiYXNlKG9wZW5SZXF1ZXN0OiBJREJSZXF1ZXN0KSB7XG4gIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0IGFzIElEQkRhdGFiYXNlO1xuICBkYi5jcmVhdGVPYmplY3RTdG9yZShNT0RFTF9TVE9SRV9OQU1FLCB7a2V5UGF0aDogJ21vZGVsUGF0aCd9KTtcbiAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FLCB7a2V5UGF0aDogJ21vZGVsUGF0aCd9KTtcbn1cblxuLyoqXG4gKiBJT0hhbmRsZXIgc3ViY2xhc3M6IEJyb3dzZXIgSW5kZXhlZERCLlxuICpcbiAqIFNlZSB0aGUgZG9jIHN0cmluZyBvZiBgYnJvd3NlckluZGV4ZWREQmAgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJyb3dzZXJJbmRleGVkREIgaW1wbGVtZW50cyBJT0hhbmRsZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5kZXhlZERCOiBJREJGYWN0b3J5O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWxQYXRoOiBzdHJpbmc7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFVSTF9TQ0hFTUUgPSAnaW5kZXhlZGRiOi8vJztcblxuICBjb25zdHJ1Y3Rvcihtb2RlbFBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuaW5kZXhlZERCID0gZ2V0SW5kZXhlZERCRmFjdG9yeSgpO1xuXG4gICAgaWYgKG1vZGVsUGF0aCA9PSBudWxsIHx8ICFtb2RlbFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRm9yIEluZGV4ZWREQiwgbW9kZWxQYXRoIG11c3Qgbm90IGJlIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eS4nKTtcbiAgICB9XG4gICAgdGhpcy5tb2RlbFBhdGggPSBtb2RlbFBhdGg7XG4gIH1cblxuICBhc3luYyBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFByb21pc2U8U2F2ZVJlc3VsdD4ge1xuICAgIC8vIFRPRE8oY2Fpcyk6IFN1cHBvcnQgc2F2aW5nIEdyYXBoRGVmIG1vZGVscy5cbiAgICBpZiAobW9kZWxBcnRpZmFjdHMubW9kZWxUb3BvbG9neSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Jyb3dzZXJMb2NhbFN0b3JhZ2Uuc2F2ZSgpIGRvZXMgbm90IHN1cHBvcnQgc2F2aW5nIG1vZGVsIHRvcG9sb2d5ICcgK1xuICAgICAgICAgICdpbiBiaW5hcnkgZm9ybWF0cyB5ZXQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VBY3Rpb24odGhpcy5tb2RlbFBhdGgsIG1vZGVsQXJ0aWZhY3RzKSBhc1xuICAgICAgICBQcm9taXNlPFNhdmVSZXN1bHQ+O1xuICB9XG5cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VBY3Rpb24odGhpcy5tb2RlbFBhdGgpIGFzIFByb21pc2U8TW9kZWxBcnRpZmFjdHM+O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gZGF0YWJhc2UgYWN0aW9uIHRvIHB1dCBtb2RlbCBhcnRpZmFjdHMgaW50byBvciByZWFkIG1vZGVsIGFydGlmYWN0c1xuICAgKiBmcm9tIEluZGV4ZWREQiBvYmplY3Qgc3RvcmUuXG4gICAqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGlvbiBpcyBwdXQgb3IgZ2V0IGRlcGVuZHMgb24gd2hldGhlciBgbW9kZWxBcnRpZmFjdHNgIGlzXG4gICAqIHNwZWNpZmllZC4gSWYgaXQgaXMgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIHdpbGwgYmUgcHV0OyBvdGhlcndpc2UgdGhlIGFjdGlvblxuICAgKiB3aWxsIGJlIGdldC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGVsUGF0aCBBIHVuaXF1ZSBzdHJpbmcgcGF0aCBmb3IgdGhlIG1vZGVsLlxuICAgKiBAcGFyYW0gbW9kZWxBcnRpZmFjdHMgSWYgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHRoZSBtb2RlbCBhcnRpZmFjdHMgdG8gYmVcbiAgICogICBzdG9yZWQgaW4gSW5kZXhlZERCLlxuICAgKiBAcmV0dXJucyBBIGBQcm9taXNlYCBvZiBgU2F2ZVJlc3VsdGAsIGlmIHRoZSBhY3Rpb24gaXMgcHV0LCBvciBhIGBQcm9taXNlYFxuICAgKiAgIG9mIGBNb2RlbEFydGlmYWN0c2AsIGlmIHRoZSBhY3Rpb24gaXMgZ2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBkYXRhYmFzZUFjdGlvbihtb2RlbFBhdGg6IHN0cmluZywgbW9kZWxBcnRpZmFjdHM/OiBNb2RlbEFydGlmYWN0cyk6XG4gICAgICBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzfFNhdmVSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TW9kZWxBcnRpZmFjdHN8U2F2ZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb3BlblJlcXVlc3QgPSB0aGlzLmluZGV4ZWREQi5vcGVuKERBVEFCQVNFX05BTUUsIERBVEFCQVNFX1ZFUlNJT04pO1xuICAgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4gc2V0VXBEYXRhYmFzZShvcGVuUmVxdWVzdCk7XG5cbiAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGIgPSBvcGVuUmVxdWVzdC5yZXN1bHQ7XG5cbiAgICAgICAgaWYgKG1vZGVsQXJ0aWZhY3RzID09IG51bGwpIHtcbiAgICAgICAgICAvLyBSZWFkIG1vZGVsIG91dCBmcm9tIG9iamVjdCBzdG9yZS5cbiAgICAgICAgICBjb25zdCBtb2RlbFR4ID0gZGIudHJhbnNhY3Rpb24oTU9ERUxfU1RPUkVfTkFNRSwgJ3JlYWRvbmx5Jyk7XG4gICAgICAgICAgY29uc3QgbW9kZWxTdG9yZSA9IG1vZGVsVHgub2JqZWN0U3RvcmUoTU9ERUxfU1RPUkVfTkFNRSk7XG4gICAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IG1vZGVsU3RvcmUuZ2V0KHRoaXMubW9kZWxQYXRoKTtcbiAgICAgICAgICBnZXRSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChnZXRSZXF1ZXN0LnJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgYENhbm5vdCBmaW5kIG1vZGVsIHdpdGggcGF0aCAnJHt0aGlzLm1vZGVsUGF0aH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGluIEluZGV4ZWREQi5gKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0Lm1vZGVsQXJ0aWZhY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGdldFJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQdXQgbW9kZWwgaW50byBvYmplY3Qgc3RvcmUuXG5cbiAgICAgICAgICAvLyBDb25jYXRlbmF0ZSBhbGwgdGhlIG1vZGVsIHdlaWdodHMgaW50byBhIHNpbmdsZSBBcnJheUJ1ZmZlci4gTGFyZ2VcbiAgICAgICAgICAvLyBtb2RlbHMgKH4xR0IpIGhhdmUgcHJvYmxlbXMgc2F2aW5nIGlmIHRoZXkgYXJlIG5vdCBjb25jYXRlbmF0ZWQuXG4gICAgICAgICAgLy8gVE9ETyhtYXR0U291bGFuaWxsZSk6IFNhdmUgbGFyZ2UgbW9kZWxzIHRvIG11bHRpcGxlIGluZGV4ZWRkYlxuICAgICAgICAgIC8vIHJlY29yZHMuXG4gICAgICAgICAgbW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSA9IENvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4oXG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuICAgICAgICAgIGNvbnN0IG1vZGVsQXJ0aWZhY3RzSW5mbzogTW9kZWxBcnRpZmFjdHNJbmZvID1cbiAgICAgICAgICAgICAgZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0cyk7XG4gICAgICAgICAgLy8gRmlyc3QsIHB1dCBNb2RlbEFydGlmYWN0c0luZm8gaW50byBpbmZvIHN0b3JlLlxuICAgICAgICAgIGNvbnN0IGluZm9UeCA9IGRiLnRyYW5zYWN0aW9uKElORk9fU1RPUkVfTkFNRSwgJ3JlYWR3cml0ZScpO1xuICAgICAgICAgIGxldCBpbmZvU3RvcmUgPSBpbmZvVHgub2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FKTtcbiAgICAgICAgICBsZXQgcHV0SW5mb1JlcXVlc3Q6IElEQlJlcXVlc3Q8SURCVmFsaWRLZXk+O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwdXRJbmZvUmVxdWVzdCA9XG4gICAgICAgICAgICAgIGluZm9TdG9yZS5wdXQoe21vZGVsUGF0aDogdGhpcy5tb2RlbFBhdGgsIG1vZGVsQXJ0aWZhY3RzSW5mb30pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IG1vZGVsVHg6IElEQlRyYW5zYWN0aW9uO1xuICAgICAgICAgIHB1dEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNlY29uZCwgcHV0IG1vZGVsIGRhdGEgaW50byBtb2RlbCBzdG9yZS5cbiAgICAgICAgICAgIG1vZGVsVHggPSBkYi50cmFuc2FjdGlvbihNT0RFTF9TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFN0b3JlID0gbW9kZWxUeC5vYmplY3RTdG9yZShNT0RFTF9TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgIGxldCBwdXRNb2RlbFJlcXVlc3Q6IElEQlJlcXVlc3Q8SURCVmFsaWRLZXk+O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0ID0gbW9kZWxTdG9yZS5wdXQoe1xuICAgICAgICAgICAgICAgIG1vZGVsUGF0aDogdGhpcy5tb2RlbFBhdGgsXG4gICAgICAgICAgICAgICAgbW9kZWxBcnRpZmFjdHMsXG4gICAgICAgICAgICAgICAgbW9kZWxBcnRpZmFjdHNJbmZvXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU29tZXRpbWVzLCB0aGUgc2VyaWFsaXplZCB2YWx1ZSBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuXG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUoe21vZGVsQXJ0aWZhY3RzSW5mb30pO1xuICAgICAgICAgICAgcHV0TW9kZWxSZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBwdXQtbW9kZWwgcmVxdWVzdCBmYWlscywgcm9sbCBiYWNrIHRoZSBpbmZvIGVudHJ5IGFzXG4gICAgICAgICAgICAgIC8vIHdlbGwuXG4gICAgICAgICAgICAgIGluZm9TdG9yZSA9IGluZm9UeC5vYmplY3RTdG9yZShJTkZPX1NUT1JFX05BTUUpO1xuICAgICAgICAgICAgICBjb25zdCBkZWxldGVJbmZvUmVxdWVzdCA9IGluZm9TdG9yZS5kZWxldGUodGhpcy5tb2RlbFBhdGgpO1xuICAgICAgICAgICAgICBkZWxldGVJbmZvUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dE1vZGVsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dE1vZGVsUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgICAgcHV0SW5mb1JlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHB1dEluZm9SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGluZm9UeC5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1vZGVsVHggPT0gbnVsbCkge1xuICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChvcGVuUmVxdWVzdC5lcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGluZGV4ZWREQlJvdXRlcjogSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10pID0+IHtcbiAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwuc3RhcnRzV2l0aChCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUpKSB7XG4gICAgICByZXR1cm4gYnJvd3NlckluZGV4ZWREQih1cmwuc2xpY2UoQnJvd3NlckluZGV4ZWREQi5VUkxfU0NIRU1FLmxlbmd0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5JT1JvdXRlclJlZ2lzdHJ5LnJlZ2lzdGVyU2F2ZVJvdXRlcihpbmRleGVkREJSb3V0ZXIpO1xuSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlckxvYWRSb3V0ZXIoaW5kZXhlZERCUm91dGVyKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYnJvd3NlciBJbmRleGVkREIgSU9IYW5kbGVyIGZvciBzYXZpbmcgYW5kIGxvYWRpbmcgbW9kZWxzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZChcbiAqICAgICB0Zi5sYXllcnMuZGVuc2Uoe3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTAwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICpcbiAqIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBtb2RlbC5zYXZlKCdpbmRleGVkZGI6Ly9NeU1vZGVsJykpO1xuICogY29uc29sZS5sb2coc2F2ZVJlc3VsdCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbW9kZWxQYXRoIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbCB0byBiZSBzYXZlZC4gTXVzdCBiZSBhXG4gKiAgIG5vbi1lbXB0eSBzdHJpbmcuXG4gKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBgQnJvd3NlckluZGV4ZWREQmAgKHN1YmxjYXNzIG9mIGBJT0hhbmRsZXJgKSxcbiAqICAgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCwgZS5nLiwgYHRmLk1vZGVsLnNhdmVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlckluZGV4ZWREQihtb2RlbFBhdGg6IHN0cmluZyk6IElPSGFuZGxlciB7XG4gIHJldHVybiBuZXcgQnJvd3NlckluZGV4ZWREQihtb2RlbFBhdGgpO1xufVxuXG5mdW5jdGlvbiBtYXliZVN0cmlwU2NoZW1lKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUpID9cbiAgICAgIGtleS5zbGljZShCcm93c2VySW5kZXhlZERCLlVSTF9TQ0hFTUUubGVuZ3RoKSA6XG4gICAgICBrZXk7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VySW5kZXhlZERCTWFuYWdlciBpbXBsZW1lbnRzIE1vZGVsU3RvcmVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBpbmRleGVkREI6IElEQkZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbmRleGVkREIgPSBnZXRJbmRleGVkREJGYWN0b3J5KCk7XG4gIH1cblxuICBhc3luYyBsaXN0TW9kZWxzKCk6IFByb21pc2U8e1twYXRoOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHtbcGF0aDogc3RyaW5nXTogTW9kZWxBcnRpZmFjdHNJbmZvfT4oXG4gICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVuUmVxdWVzdCA9XG4gICAgICAgICAgICAgIHRoaXMuaW5kZXhlZERCLm9wZW4oREFUQUJBU0VfTkFNRSwgREFUQUJBU0VfVkVSU0lPTik7XG4gICAgICAgICAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4gc2V0VXBEYXRhYmFzZShvcGVuUmVxdWVzdCk7XG5cbiAgICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IG9wZW5SZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oSU5GT19TVE9SRV9OQU1FLCAncmVhZG9ubHknKTtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gdHgub2JqZWN0U3RvcmUoSU5GT19TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgLy8gTmVlZCB0byBjYXN0IGBzdG9yZWAgYXMgYGFueWAgaGVyZSBiZWNhdXNlIFR5cGVTY3JpcHQncyBET01cbiAgICAgICAgICAgIC8vIGxpYnJhcnkgZG9lcyBub3QgaGF2ZSB0aGUgYGdldEFsbCgpYCBtZXRob2QgZXZlbiB0aG91Z2ggdGhlXG4gICAgICAgICAgICAvLyBtZXRob2QgaXMgc3VwcG9ydGVkIGluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBtb3N0IG1haW5zdHJlYW1cbiAgICAgICAgICAgIC8vIGJyb3dzZXJzOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0lEQk9iamVjdFN0b3JlL2dldEFsbFxuICAgICAgICAgICAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgIGNvbnN0IGdldEFsbEluZm9SZXF1ZXN0ID0gKHN0b3JlIGFzIGFueSkuZ2V0QWxsKCkgYXMgSURCUmVxdWVzdDtcbiAgICAgICAgICAgIGdldEFsbEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0OiB7W3BhdGg6IHN0cmluZ106IE1vZGVsQXJ0aWZhY3RzSW5mb30gPSB7fTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdldEFsbEluZm9SZXF1ZXN0LnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIG91dFtpdGVtLm1vZGVsUGF0aF0gPSBpdGVtLm1vZGVsQXJ0aWZhY3RzSW5mbztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKG91dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2V0QWxsSW5mb1JlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChnZXRBbGxJbmZvUmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHgub25jb21wbGV0ZSA9ICgpID0+IGRiLmNsb3NlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcGVuUmVxdWVzdC5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KG9wZW5SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVNb2RlbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICAgIHBhdGggPSBtYXliZVN0cmlwU2NoZW1lKHBhdGgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxNb2RlbEFydGlmYWN0c0luZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9wZW5SZXF1ZXN0ID0gdGhpcy5pbmRleGVkREIub3BlbihEQVRBQkFTRV9OQU1FLCBEQVRBQkFTRV9WRVJTSU9OKTtcbiAgICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHNldFVwRGF0YWJhc2Uob3BlblJlcXVlc3QpO1xuXG4gICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRiID0gb3BlblJlcXVlc3QucmVzdWx0O1xuICAgICAgICBjb25zdCBpbmZvVHggPSBkYi50cmFuc2FjdGlvbihJTkZPX1NUT1JFX05BTUUsICdyZWFkd3JpdGUnKTtcbiAgICAgICAgY29uc3QgaW5mb1N0b3JlID0gaW5mb1R4Lm9iamVjdFN0b3JlKElORk9fU1RPUkVfTkFNRSk7XG5cbiAgICAgICAgY29uc3QgZ2V0SW5mb1JlcXVlc3QgPSBpbmZvU3RvcmUuZ2V0KHBhdGgpO1xuICAgICAgICBsZXQgbW9kZWxUeDogSURCVHJhbnNhY3Rpb247XG4gICAgICAgIGdldEluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZ2V0SW5mb1JlcXVlc3QucmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ2Fubm90IGZpbmQgbW9kZWwgd2l0aCBwYXRoICcke3BhdGh9JyBgICtcbiAgICAgICAgICAgICAgICBgaW4gSW5kZXhlZERCLmApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyc3QsIGRlbGV0ZSB0aGUgZW50cnkgaW4gdGhlIGluZm8gc3RvcmUuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVJbmZvUmVxdWVzdCA9IGluZm9TdG9yZS5kZWxldGUocGF0aCk7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVNb2RlbERhdGEgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlY29uZCwgZGVsZXRlIHRoZSBlbnRyeSBpbiB0aGUgbW9kZWwgc3RvcmUuXG4gICAgICAgICAgICAgIG1vZGVsVHggPSBkYi50cmFuc2FjdGlvbihNT0RFTF9TVE9SRV9OQU1FLCAncmVhZHdyaXRlJyk7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGVsU3RvcmUgPSBtb2RlbFR4Lm9iamVjdFN0b3JlKE1PREVMX1NUT1JFX05BTUUpO1xuICAgICAgICAgICAgICBjb25zdCBkZWxldGVNb2RlbFJlcXVlc3QgPSBtb2RlbFN0b3JlLmRlbGV0ZShwYXRoKTtcbiAgICAgICAgICAgICAgZGVsZXRlTW9kZWxSZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGdldEluZm9SZXF1ZXN0LnJlc3VsdC5tb2RlbEFydGlmYWN0c0luZm8pO1xuICAgICAgICAgICAgICBkZWxldGVNb2RlbFJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+XG4gICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5mb1JlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFByb2NlZWQgd2l0aCBkZWxldGluZyBtb2RlbCBkYXRhIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBkZWxldGlvblxuICAgICAgICAgICAgLy8gb2YgaW5mbyBkYXRhIHN1Y2NlZWRzIG9yIG5vdC5cbiAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZU1vZGVsRGF0YTtcbiAgICAgICAgICAgIGRlbGV0ZUluZm9SZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGRlbGV0ZU1vZGVsRGF0YSgpO1xuICAgICAgICAgICAgICBkYi5jbG9zZSgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGdldEluZm9SZXF1ZXN0LmVycm9yKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBnZXRJbmZvUmVxdWVzdC5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChnZXRJbmZvUmVxdWVzdC5lcnJvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW5mb1R4Lm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKG1vZGVsVHggPT0gbnVsbCkge1xuICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWxUeC5vbmNvbXBsZXRlID0gKCkgPT4gZGIuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgb3BlblJlcXVlc3Qub25lcnJvciA9IGVycm9yID0+IHJlamVjdChvcGVuUmVxdWVzdC5lcnJvcik7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { arrayBufferToBase64String, base64StringToArrayBuffer, getModelArtifactsInfoForJSON } from './io_utils';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { IORouterRegistry } from './router_registry';\nconst PATH_SEPARATOR = '/';\nconst PATH_PREFIX = 'tensorflowjs_models';\nconst INFO_SUFFIX = 'info';\nconst MODEL_TOPOLOGY_SUFFIX = 'model_topology';\nconst WEIGHT_SPECS_SUFFIX = 'weight_specs';\nconst WEIGHT_DATA_SUFFIX = 'weight_data';\nconst MODEL_METADATA_SUFFIX = 'model_metadata';\n/**\n * Purge all tensorflow.js-saved model artifacts from local storage.\n *\n * @returns Paths of the models purged.\n */\nexport function purgeLocalStorageArtifacts() {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n throw new Error('purgeLocalStorageModels() cannot proceed because local storage is ' +\n 'unavailable in the current environment.');\n }\n const LS = window.localStorage;\n const purgedModelPaths = [];\n for (let i = 0; i < LS.length; ++i) {\n const key = LS.key(i);\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n if (key.startsWith(prefix) && key.length > prefix.length) {\n LS.removeItem(key);\n const modelName = getModelPathFromKey(key);\n if (purgedModelPaths.indexOf(modelName) === -1) {\n purgedModelPaths.push(modelName);\n }\n }\n }\n return purgedModelPaths;\n}\nfunction getModelKeys(path) {\n return {\n info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR),\n topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR),\n weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR),\n weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR),\n modelMetadata: [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR)\n };\n}\nfunction removeItems(keys) {\n for (const key of Object.values(keys)) {\n window.localStorage.removeItem(key);\n }\n}\n/**\n * Get model path from a local-storage key.\n *\n * E.g., 'tensorflowjs_models/my/model/1/info' --> 'my/model/1'\n *\n * @param key\n */\nfunction getModelPathFromKey(key) {\n const items = key.split(PATH_SEPARATOR);\n if (items.length < 3) {\n throw new Error(`Invalid key format: ${key}`);\n }\n return items.slice(1, items.length - 1).join(PATH_SEPARATOR);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserLocalStorage.URL_SCHEME) ?\n key.slice(BrowserLocalStorage.URL_SCHEME.length) :\n key;\n}\n/**\n * IOHandler subclass: Browser Local Storage.\n *\n * See the doc string to `browserLocalStorage` for more details.\n */\nclass BrowserLocalStorage {\n constructor(modelPath) {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n // TODO(cais): Add more info about what IOHandler subtypes are\n // available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('The current environment does not support local storage.');\n }\n this.LS = window.localStorage;\n if (modelPath == null || !modelPath) {\n throw new Error('For local storage, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n this.keys = getModelKeys(this.modelPath);\n }\n /**\n * Save model artifacts to browser local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @param modelArtifacts The model artifacts to be stored.\n * @returns An instance of SaveResult.\n */\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const topology = JSON.stringify(modelArtifacts.modelTopology);\n const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs);\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n try {\n this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo));\n this.LS.setItem(this.keys.topology, topology);\n this.LS.setItem(this.keys.weightSpecs, weightSpecs);\n this.LS.setItem(this.keys.weightData, arrayBufferToBase64String(weightBuffer));\n // Note that JSON.stringify doesn't write out keys that have undefined\n // values, so for some keys, we set undefined instead of a null-ish\n // value.\n const metadata = {\n format: modelArtifacts.format,\n generatedBy: modelArtifacts.generatedBy,\n convertedBy: modelArtifacts.convertedBy,\n signature: modelArtifacts.signature != null ?\n modelArtifacts.signature :\n undefined,\n userDefinedMetadata: modelArtifacts.userDefinedMetadata != null ?\n modelArtifacts.userDefinedMetadata :\n undefined,\n modelInitializer: modelArtifacts.modelInitializer != null ?\n modelArtifacts.modelInitializer :\n undefined,\n initializerSignature: modelArtifacts.initializerSignature != null ?\n modelArtifacts.initializerSignature :\n undefined,\n trainingConfig: modelArtifacts.trainingConfig != null ?\n modelArtifacts.trainingConfig :\n undefined\n };\n this.LS.setItem(this.keys.modelMetadata, JSON.stringify(metadata));\n return { modelArtifactsInfo };\n }\n catch (err) {\n // If saving failed, clean up all items saved so far.\n removeItems(this.keys);\n throw new Error(`Failed to save model '${this.modelPath}' to local storage: ` +\n `size quota being exceeded is a possible cause of this failure: ` +\n `modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, ` +\n `weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, ` +\n `weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`);\n }\n }\n }\n /**\n * Load a model from local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @returns The loaded model (if loading succeeds).\n */\n async load() {\n const info = JSON.parse(this.LS.getItem(this.keys.info));\n if (info == null) {\n throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);\n }\n if (info.modelTopologyType !== 'JSON') {\n throw new Error('BrowserLocalStorage does not support loading non-JSON model ' +\n 'topology yet.');\n }\n const out = {};\n // Load topology.\n const topology = JSON.parse(this.LS.getItem(this.keys.topology));\n if (topology == null) {\n throw new Error(`In local storage, the topology of model '${this.modelPath}' ` +\n `is missing.`);\n }\n out.modelTopology = topology;\n // Load weight specs.\n const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs));\n if (weightSpecs == null) {\n throw new Error(`In local storage, the weight specs of model '${this.modelPath}' ` +\n `are missing.`);\n }\n out.weightSpecs = weightSpecs;\n // Load meta-data fields.\n const metadataString = this.LS.getItem(this.keys.modelMetadata);\n if (metadataString != null) {\n const metadata = JSON.parse(metadataString);\n out.format = metadata.format;\n out.generatedBy = metadata.generatedBy;\n out.convertedBy = metadata.convertedBy;\n if (metadata.signature != null) {\n out.signature = metadata.signature;\n }\n if (metadata.userDefinedMetadata != null) {\n out.userDefinedMetadata = metadata.userDefinedMetadata;\n }\n if (metadata.modelInitializer != null) {\n out.modelInitializer = metadata.modelInitializer;\n }\n if (metadata.initializerSignature != null) {\n out.initializerSignature = metadata.initializerSignature;\n }\n if (metadata.trainingConfig != null) {\n out.trainingConfig = metadata.trainingConfig;\n }\n }\n // Load weight data.\n const weightDataBase64 = this.LS.getItem(this.keys.weightData);\n if (weightDataBase64 == null) {\n throw new Error(`In local storage, the binary weight values of model ` +\n `'${this.modelPath}' are missing.`);\n }\n out.weightData = base64StringToArrayBuffer(weightDataBase64);\n return out;\n }\n}\nBrowserLocalStorage.URL_SCHEME = 'localstorage://';\nexport { BrowserLocalStorage };\nexport const localStorageRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) {\n return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(localStorageRouter);\nIORouterRegistry.registerLoadRouter(localStorageRouter);\n/**\n * Factory function for local storage IOHandler.\n *\n * This `IOHandler` supports both `save` and `load`.\n *\n * For each model's saved artifacts, four items are saved to local storage.\n * - `${PATH_SEPARATOR}/${modelPath}/info`: Contains meta-info about the\n * model, such as date saved, type of the topology, size in bytes, etc.\n * - `${PATH_SEPARATOR}/${modelPath}/topology`: Model topology. For Keras-\n * style models, this is a stringized JSON.\n * - `${PATH_SEPARATOR}/${modelPath}/weight_specs`: Weight specs of the\n * model, can be used to decode the saved binary weight values (see\n * item below).\n * - `${PATH_SEPARATOR}/${modelPath}/weight_data`: Concatenated binary\n * weight values, stored as a base64-encoded string.\n *\n * Saving may throw an `Error` if the total size of the artifacts exceed the\n * browser-specific quota.\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `IOHandler`, which can be used with, e.g.,\n * `tf.Model.save`.\n */\nexport function browserLocalStorage(modelPath) {\n return new BrowserLocalStorage(modelPath);\n}\nexport class BrowserLocalStorageManager {\n constructor() {\n assert(env().getBool('IS_BROWSER'), () => 'Current environment is not a web browser');\n assert(typeof window === 'undefined' ||\n typeof window.localStorage !== 'undefined', () => 'Current browser does not appear to support localStorage');\n this.LS = window.localStorage;\n }\n async listModels() {\n const out = {};\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n const suffix = PATH_SEPARATOR + INFO_SUFFIX;\n for (let i = 0; i < this.LS.length; ++i) {\n const key = this.LS.key(i);\n if (key.startsWith(prefix) && key.endsWith(suffix)) {\n const modelPath = getModelPathFromKey(key);\n out[modelPath] = JSON.parse(this.LS.getItem(key));\n }\n }\n return out;\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n const keys = getModelKeys(path);\n if (this.LS.getItem(keys.info) == null) {\n throw new Error(`Cannot find model at path '${path}'`);\n }\n const info = JSON.parse(this.LS.getItem(keys.info));\n removeItems(keys);\n return info;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxfc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vbG9jYWxfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDOUcsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFXLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHN0QsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDO0FBQ3pDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7QUFFL0M7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQzdELE9BQU8sTUFBTSxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FDWCxvRUFBb0U7WUFDcEUseUNBQXlDLENBQUMsQ0FBQztLQUNoRDtJQUNELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDL0IsTUFBTSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBRyxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQzVDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDeEQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDOUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7S0FDRjtJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQTBCRCxTQUFTLFlBQVksQ0FBQyxJQUFZO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0QsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekUsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUUsVUFBVSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDeEUsYUFBYSxFQUNULENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7S0FDcEUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFzQjtJQUN6QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDckMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDckM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxHQUFXO0lBQ3RDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ25DLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEQsR0FBRyxDQUFDO0FBQ1YsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLG1CQUFtQjtJQU85QixZQUFZLFNBQWlCO1FBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztZQUM3RCxPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQzlDLDhEQUE4RDtZQUM5RCxhQUFhO1lBQ2Isd0VBQXdFO1lBQ3hFLGtFQUFrRTtZQUNsRSxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RCxDQUFDLENBQUM7U0FDaEU7UUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFFOUIsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQThCO1FBQ3ZDLElBQUksY0FBYyxDQUFDLGFBQWEsWUFBWSxXQUFXLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDWCxvRUFBb0U7Z0JBQ3BFLHdCQUF3QixDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sa0JBQWtCLEdBQ3BCLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWpELG1FQUFtRTtZQUNuRSxtQ0FBbUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUUxRSxJQUFJO2dCQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUNwQix5QkFBeUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUU3QyxzRUFBc0U7Z0JBQ3RFLG1FQUFtRTtnQkFDbkUsU0FBUztnQkFDVCxNQUFNLFFBQVEsR0FBNEI7b0JBQ3hDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtvQkFDN0IsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO29CQUN2QyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7b0JBQ3ZDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO3dCQUN6QyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzFCLFNBQVM7b0JBQ2IsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDO3dCQUM3RCxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDcEMsU0FBUztvQkFDYixnQkFBZ0IsRUFBRSxjQUFjLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLENBQUM7d0JBQ3ZELGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUNqQyxTQUFTO29CQUNiLG9CQUFvQixFQUFFLGNBQWMsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsQ0FBQzt3QkFDL0QsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7d0JBQ3JDLFNBQVM7b0JBQ2IsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUM7d0JBQ25ELGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDL0IsU0FBUztpQkFDZCxDQUFDO2dCQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFFbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLENBQUM7YUFDN0I7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixxREFBcUQ7Z0JBQ3JELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXZCLE1BQU0sSUFBSSxLQUFLLENBQ1gseUJBQXlCLElBQUksQ0FBQyxTQUFTLHNCQUFzQjtvQkFDN0QsaUVBQWlFO29CQUNqRSxzQkFBc0Isa0JBQWtCLENBQUMsa0JBQWtCLElBQUk7b0JBQy9ELG9CQUFvQixrQkFBa0IsQ0FBQyxnQkFBZ0IsSUFBSTtvQkFDM0QsbUJBQW1CLGtCQUFrQixDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDL0Q7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksR0FDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQXVCLENBQUM7UUFDdEUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ1gsa0RBQWtELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQ1gsOERBQThEO2dCQUM5RCxlQUFlLENBQUMsQ0FBQztTQUN0QjtRQUVELE1BQU0sR0FBRyxHQUFtQixFQUFFLENBQUM7UUFFL0IsaUJBQWlCO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUNYLDRDQUE0QyxJQUFJLENBQUMsU0FBUyxJQUFJO2dCQUM5RCxhQUFhLENBQUMsQ0FBQztTQUNwQjtRQUNELEdBQUcsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1FBRTdCLHFCQUFxQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxnREFBZ0QsSUFBSSxDQUFDLFNBQVMsSUFBSTtnQkFDbEUsY0FBYyxDQUFDLENBQUM7U0FDckI7UUFDRCxHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUU5Qix5QkFBeUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQWtCLENBQUM7WUFDN0QsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUN2QyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDdkMsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtnQkFDOUIsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2FBQ3BDO1lBQ0QsSUFBSSxRQUFRLENBQUMsbUJBQW1CLElBQUksSUFBSSxFQUFFO2dCQUN4QyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFO2dCQUNyQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO2FBQ2xEO1lBQ0QsSUFBSSxRQUFRLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO2dCQUN6QyxHQUFHLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO2FBQzFEO1lBQ0QsSUFBSSxRQUFRLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRTtnQkFDbkMsR0FBRyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2FBQzlDO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksZ0JBQWdCLElBQUksSUFBSSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0RBQXNEO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLGdCQUFnQixDQUFDLENBQUM7U0FDekM7UUFDRCxHQUFHLENBQUMsVUFBVSxHQUFHLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztBQTNLZSw4QkFBVSxHQUFHLGlCQUFpQixDQUFDO1NBTHBDLG1CQUFtQjtBQW1MaEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWEsQ0FBQyxHQUFvQixFQUFFLEVBQUU7SUFDbkUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pFLE9BQU8sbUJBQW1CLENBQ3RCLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtBQUNILENBQUMsQ0FBQztBQUNGLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDeEQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsU0FBaUI7SUFDbkQsT0FBTyxJQUFJLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBR3JDO1FBQ0UsTUFBTSxDQUNGLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFDM0IsR0FBRyxFQUFFLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQ0YsT0FBTyxNQUFNLEtBQUssV0FBVztZQUN6QixPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUM5QyxHQUFHLEVBQUUsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLEdBQUcsR0FBeUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxHQUFHLFdBQVcsQ0FBQztRQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBdUIsQ0FBQzthQUN6RTtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksR0FBRyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBdUIsQ0FBQztRQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAnLi4vZmxhZ3MnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHthcnJheUJ1ZmZlclRvQmFzZTY0U3RyaW5nLCBiYXNlNjRTdHJpbmdUb0FycmF5QnVmZmVyLCBnZXRNb2RlbEFydGlmYWN0c0luZm9Gb3JKU09OfSBmcm9tICcuL2lvX3V0aWxzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5pbXBvcnQge0lPUm91dGVyLCBJT1JvdXRlclJlZ2lzdHJ5fSBmcm9tICcuL3JvdXRlcl9yZWdpc3RyeSc7XG5pbXBvcnQge0lPSGFuZGxlciwgTW9kZWxBcnRpZmFjdHMsIE1vZGVsQXJ0aWZhY3RzSW5mbywgTW9kZWxKU09OLCBNb2RlbFN0b3JlTWFuYWdlciwgU2F2ZVJlc3VsdH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IFBBVEhfU0VQQVJBVE9SID0gJy8nO1xuY29uc3QgUEFUSF9QUkVGSVggPSAndGVuc29yZmxvd2pzX21vZGVscyc7XG5jb25zdCBJTkZPX1NVRkZJWCA9ICdpbmZvJztcbmNvbnN0IE1PREVMX1RPUE9MT0dZX1NVRkZJWCA9ICdtb2RlbF90b3BvbG9neSc7XG5jb25zdCBXRUlHSFRfU1BFQ1NfU1VGRklYID0gJ3dlaWdodF9zcGVjcyc7XG5jb25zdCBXRUlHSFRfREFUQV9TVUZGSVggPSAnd2VpZ2h0X2RhdGEnO1xuY29uc3QgTU9ERUxfTUVUQURBVEFfU1VGRklYID0gJ21vZGVsX21ldGFkYXRhJztcblxuLyoqXG4gKiBQdXJnZSBhbGwgdGVuc29yZmxvdy5qcy1zYXZlZCBtb2RlbCBhcnRpZmFjdHMgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICpcbiAqIEByZXR1cm5zIFBhdGhzIG9mIHRoZSBtb2RlbHMgcHVyZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVyZ2VMb2NhbFN0b3JhZ2VBcnRpZmFjdHMoKTogc3RyaW5nW10ge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAncHVyZ2VMb2NhbFN0b3JhZ2VNb2RlbHMoKSBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIGxvY2FsIHN0b3JhZ2UgaXMgJyArXG4gICAgICAgICd1bmF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4nKTtcbiAgfVxuICBjb25zdCBMUyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIGNvbnN0IHB1cmdlZE1vZGVsUGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTFMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBMUy5rZXkoaSk7XG4gICAgY29uc3QgcHJlZml4ID0gUEFUSF9QUkVGSVggKyBQQVRIX1NFUEFSQVRPUjtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiBrZXkubGVuZ3RoID4gcHJlZml4Lmxlbmd0aCkge1xuICAgICAgTFMucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxQYXRoRnJvbUtleShrZXkpO1xuICAgICAgaWYgKHB1cmdlZE1vZGVsUGF0aHMuaW5kZXhPZihtb2RlbE5hbWUpID09PSAtMSkge1xuICAgICAgICBwdXJnZWRNb2RlbFBhdGhzLnB1c2gobW9kZWxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHB1cmdlZE1vZGVsUGF0aHM7XG59XG5cbnR5cGUgTG9jYWxTdG9yYWdlS2V5cyA9IHtcbiAgLyoqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgYE1vZGVsQXJ0aWZhY3RzSW5mb2AuICovXG4gIGluZm86IHN0cmluZyxcbiAgLyoqXG4gICAqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgdGhlICdtb2RlbFRvcG9sb2d5JyBrZXkgb2ZcbiAgICogYG1vZGVsLmpzb25gXG4gICAqL1xuICB0b3BvbG9neTogc3RyaW5nLFxuICAvKipcbiAgICogS2V5IG9mIHRoZSBsb2NhbFN0b3JhZ2UgZW50cnkgc3RvcmluZyB0aGUgYHdlaWdodHNNYW5pZmVzdC53ZWlnaHRzYCBlbnRyaWVzXG4gICAqIG9mIGBtb2RlbC5qc29uYFxuICAgKi9cbiAgd2VpZ2h0U3BlY3M6IHN0cmluZyxcbiAgLyoqIEtleSBvZiB0aGUgbG9jYWxTdG9yYWdlIGVudHJ5IHN0b3JpbmcgdGhlIHdlaWdodCBkYXRhIGluIEJhc2U2NCAqL1xuICB3ZWlnaHREYXRhOiBzdHJpbmcsXG4gIC8qKlxuICAgKiBLZXkgb2YgdGhlIGxvY2FsU3RvcmFnZSBlbnRyeSBzdG9yaW5nIHRoZSByZW1haW5pbmcgZmllbGRzIG9mIGBtb2RlbC5qc29uYFxuICAgKiBAc2VlIHtAbGluayBNb2RlbE1ldGFkYXRhfVxuICAgKi9cbiAgbW9kZWxNZXRhZGF0YTogc3RyaW5nLFxufTtcblxudHlwZSBNb2RlbE1ldGFkYXRhID0gT21pdDxNb2RlbEpTT04sICdtb2RlbFRvcG9sb2d5J3wnd2VpZ2h0c01hbmlmZXN0Jz47XG5cbmZ1bmN0aW9uIGdldE1vZGVsS2V5cyhwYXRoOiBzdHJpbmcpOiBMb2NhbFN0b3JhZ2VLZXlzIHtcbiAgcmV0dXJuIHtcbiAgICBpbmZvOiBbUEFUSF9QUkVGSVgsIHBhdGgsIElORk9fU1VGRklYXS5qb2luKFBBVEhfU0VQQVJBVE9SKSxcbiAgICB0b3BvbG9neTogW1BBVEhfUFJFRklYLCBwYXRoLCBNT0RFTF9UT1BPTE9HWV9TVUZGSVhdLmpvaW4oUEFUSF9TRVBBUkFUT1IpLFxuICAgIHdlaWdodFNwZWNzOiBbUEFUSF9QUkVGSVgsIHBhdGgsIFdFSUdIVF9TUEVDU19TVUZGSVhdLmpvaW4oUEFUSF9TRVBBUkFUT1IpLFxuICAgIHdlaWdodERhdGE6IFtQQVRIX1BSRUZJWCwgcGF0aCwgV0VJR0hUX0RBVEFfU1VGRklYXS5qb2luKFBBVEhfU0VQQVJBVE9SKSxcbiAgICBtb2RlbE1ldGFkYXRhOlxuICAgICAgICBbUEFUSF9QUkVGSVgsIHBhdGgsIE1PREVMX01FVEFEQVRBX1NVRkZJWF0uam9pbihQQVRIX1NFUEFSQVRPUilcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbXMoa2V5czogTG9jYWxTdG9yYWdlS2V5cyk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QudmFsdWVzKGtleXMpKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgbW9kZWwgcGF0aCBmcm9tIGEgbG9jYWwtc3RvcmFnZSBrZXkuXG4gKlxuICogRS5nLiwgJ3RlbnNvcmZsb3dqc19tb2RlbHMvbXkvbW9kZWwvMS9pbmZvJyAtLT4gJ215L21vZGVsLzEnXG4gKlxuICogQHBhcmFtIGtleVxuICovXG5mdW5jdGlvbiBnZXRNb2RlbFBhdGhGcm9tS2V5KGtleTogc3RyaW5nKSB7XG4gIGNvbnN0IGl0ZW1zID0ga2V5LnNwbGl0KFBBVEhfU0VQQVJBVE9SKTtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQga2V5IGZvcm1hdDogJHtrZXl9YCk7XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLnNsaWNlKDEsIGl0ZW1zLmxlbmd0aCAtIDEpLmpvaW4oUEFUSF9TRVBBUkFUT1IpO1xufVxuXG5mdW5jdGlvbiBtYXliZVN0cmlwU2NoZW1lKGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUpID9cbiAgICAgIGtleS5zbGljZShCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUubGVuZ3RoKSA6XG4gICAgICBrZXk7XG59XG5cbi8qKlxuICogSU9IYW5kbGVyIHN1YmNsYXNzOiBCcm93c2VyIExvY2FsIFN0b3JhZ2UuXG4gKlxuICogU2VlIHRoZSBkb2Mgc3RyaW5nIHRvIGBicm93c2VyTG9jYWxTdG9yYWdlYCBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlckxvY2FsU3RvcmFnZSBpbXBsZW1lbnRzIElPSGFuZGxlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBMUzogU3RvcmFnZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vZGVsUGF0aDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5czogTG9jYWxTdG9yYWdlS2V5cztcblxuICBzdGF0aWMgcmVhZG9ubHkgVVJMX1NDSEVNRSA9ICdsb2NhbHN0b3JhZ2U6Ly8nO1xuXG4gIGNvbnN0cnVjdG9yKG1vZGVsUGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBUT0RPKGNhaXMpOiBBZGQgbW9yZSBpbmZvIGFib3V0IHdoYXQgSU9IYW5kbGVyIHN1YnR5cGVzIGFyZVxuICAgICAgLy8gYXZhaWxhYmxlLlxuICAgICAgLy8gICBNYXliZSBwb2ludCB0byBhIGRvYyBwYWdlIG9uIHRoZSB3ZWIgYW5kL29yIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lXG4gICAgICAvLyAgIHRoZSBhdmFpbGFibGUgSU9IYW5kbGVycyBhbmQgcHJpbnQgdGhlbSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbCBzdG9yYWdlLicpO1xuICAgIH1cbiAgICB0aGlzLkxTID0gd2luZG93LmxvY2FsU3RvcmFnZTtcblxuICAgIGlmIChtb2RlbFBhdGggPT0gbnVsbCB8fCAhbW9kZWxQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZvciBsb2NhbCBzdG9yYWdlLCBtb2RlbFBhdGggbXVzdCBub3QgYmUgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LicpO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsUGF0aCA9IG1vZGVsUGF0aDtcbiAgICB0aGlzLmtleXMgPSBnZXRNb2RlbEtleXModGhpcy5tb2RlbFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgbW9kZWwgYXJ0aWZhY3RzIHRvIGJyb3dzZXIgbG9jYWwgc3RvcmFnZS5cbiAgICpcbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRvIGBicm93c2VyTG9jYWxTdG9yYWdlYCBmb3IgZGV0YWlscyBvbiB0aGUgc2F2ZWRcbiAgICogYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWxBcnRpZmFjdHMgVGhlIG1vZGVsIGFydGlmYWN0cyB0byBiZSBzdG9yZWQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIFNhdmVSZXN1bHQuXG4gICAqL1xuICBhc3luYyBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFByb21pc2U8U2F2ZVJlc3VsdD4ge1xuICAgIGlmIChtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQnJvd3NlckxvY2FsU3RvcmFnZS5zYXZlKCkgZG9lcyBub3Qgc3VwcG9ydCBzYXZpbmcgbW9kZWwgdG9wb2xvZ3kgJyArXG4gICAgICAgICAgJ2luIGJpbmFyeSBmb3JtYXRzIHlldC4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wb2xvZ3kgPSBKU09OLnN0cmluZ2lmeShtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5KTtcbiAgICAgIGNvbnN0IHdlaWdodFNwZWNzID0gSlNPTi5zdHJpbmdpZnkobW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3MpO1xuXG4gICAgICBjb25zdCBtb2RlbEFydGlmYWN0c0luZm86IE1vZGVsQXJ0aWZhY3RzSW5mbyA9XG4gICAgICAgICAgZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTihtb2RlbEFydGlmYWN0cyk7XG5cbiAgICAgIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBTdXBwb3J0IHNhdmluZyBtb2RlbHMgb3ZlciAyR0IgdGhhdCBleGNlZWRcbiAgICAgIC8vIENocm9tZSdzIEFycmF5QnVmZmVyIHNpemUgbGltaXQuXG4gICAgICBjb25zdCB3ZWlnaHRCdWZmZXIgPSBDb21wb3NpdGVBcnJheUJ1ZmZlci5qb2luKG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLkxTLnNldEl0ZW0odGhpcy5rZXlzLmluZm8sIEpTT04uc3RyaW5naWZ5KG1vZGVsQXJ0aWZhY3RzSW5mbykpO1xuICAgICAgICB0aGlzLkxTLnNldEl0ZW0odGhpcy5rZXlzLnRvcG9sb2d5LCB0b3BvbG9neSk7XG4gICAgICAgIHRoaXMuTFMuc2V0SXRlbSh0aGlzLmtleXMud2VpZ2h0U3BlY3MsIHdlaWdodFNwZWNzKTtcbiAgICAgICAgdGhpcy5MUy5zZXRJdGVtKFxuICAgICAgICAgICAgdGhpcy5rZXlzLndlaWdodERhdGEsXG4gICAgICAgICAgICBhcnJheUJ1ZmZlclRvQmFzZTY0U3RyaW5nKHdlaWdodEJ1ZmZlcikpO1xuXG4gICAgICAgIC8vIE5vdGUgdGhhdCBKU09OLnN0cmluZ2lmeSBkb2Vzbid0IHdyaXRlIG91dCBrZXlzIHRoYXQgaGF2ZSB1bmRlZmluZWRcbiAgICAgICAgLy8gdmFsdWVzLCBzbyBmb3Igc29tZSBrZXlzLCB3ZSBzZXQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBudWxsLWlzaFxuICAgICAgICAvLyB2YWx1ZS5cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFJlcXVpcmVkPE1vZGVsTWV0YWRhdGE+ID0ge1xuICAgICAgICAgIGZvcm1hdDogbW9kZWxBcnRpZmFjdHMuZm9ybWF0LFxuICAgICAgICAgIGdlbmVyYXRlZEJ5OiBtb2RlbEFydGlmYWN0cy5nZW5lcmF0ZWRCeSxcbiAgICAgICAgICBjb252ZXJ0ZWRCeTogbW9kZWxBcnRpZmFjdHMuY29udmVydGVkQnksXG4gICAgICAgICAgc2lnbmF0dXJlOiBtb2RlbEFydGlmYWN0cy5zaWduYXR1cmUgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLnNpZ25hdHVyZSA6XG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyRGVmaW5lZE1ldGFkYXRhOiBtb2RlbEFydGlmYWN0cy51c2VyRGVmaW5lZE1ldGFkYXRhICE9IG51bGwgP1xuICAgICAgICAgICAgICBtb2RlbEFydGlmYWN0cy51c2VyRGVmaW5lZE1ldGFkYXRhIDpcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIG1vZGVsSW5pdGlhbGl6ZXI6IG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgOlxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgaW5pdGlhbGl6ZXJTaWduYXR1cmU6IG1vZGVsQXJ0aWZhY3RzLmluaXRpYWxpemVyU2lnbmF0dXJlICE9IG51bGwgP1xuICAgICAgICAgICAgICBtb2RlbEFydGlmYWN0cy5pbml0aWFsaXplclNpZ25hdHVyZSA6XG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cmFpbmluZ0NvbmZpZzogbW9kZWxBcnRpZmFjdHMudHJhaW5pbmdDb25maWcgIT0gbnVsbCA/XG4gICAgICAgICAgICAgIG1vZGVsQXJ0aWZhY3RzLnRyYWluaW5nQ29uZmlnIDpcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuTFMuc2V0SXRlbSh0aGlzLmtleXMubW9kZWxNZXRhZGF0YSwgSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpKTtcblxuICAgICAgICByZXR1cm4ge21vZGVsQXJ0aWZhY3RzSW5mb307XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gSWYgc2F2aW5nIGZhaWxlZCwgY2xlYW4gdXAgYWxsIGl0ZW1zIHNhdmVkIHNvIGZhci5cbiAgICAgICAgcmVtb3ZlSXRlbXModGhpcy5rZXlzKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHNhdmUgbW9kZWwgJyR7dGhpcy5tb2RlbFBhdGh9JyB0byBsb2NhbCBzdG9yYWdlOiBgICtcbiAgICAgICAgICAgIGBzaXplIHF1b3RhIGJlaW5nIGV4Y2VlZGVkIGlzIGEgcG9zc2libGUgY2F1c2Ugb2YgdGhpcyBmYWlsdXJlOiBgICtcbiAgICAgICAgICAgIGBtb2RlbFRvcG9sb2d5Qnl0ZXM9JHttb2RlbEFydGlmYWN0c0luZm8ubW9kZWxUb3BvbG9neUJ5dGVzfSwgYCArXG4gICAgICAgICAgICBgd2VpZ2h0U3BlY3NCeXRlcz0ke21vZGVsQXJ0aWZhY3RzSW5mby53ZWlnaHRTcGVjc0J5dGVzfSwgYCArXG4gICAgICAgICAgICBgd2VpZ2h0RGF0YUJ5dGVzPSR7bW9kZWxBcnRpZmFjdHNJbmZvLndlaWdodERhdGFCeXRlc30uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBtb2RlbCBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqXG4gICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBgYnJvd3NlckxvY2FsU3RvcmFnZWAgZm9yIGRldGFpbHMgb24gdGhlIHNhdmVkXG4gICAqIGFydGlmYWN0cy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxvYWRlZCBtb2RlbCAoaWYgbG9hZGluZyBzdWNjZWVkcykuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICBjb25zdCBpbmZvID1cbiAgICAgICAgSlNPTi5wYXJzZSh0aGlzLkxTLmdldEl0ZW0odGhpcy5rZXlzLmluZm8pKSBhcyBNb2RlbEFydGlmYWN0c0luZm87XG4gICAgaWYgKGluZm8gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbiBsb2NhbCBzdG9yYWdlLCB0aGVyZSBpcyBubyBtb2RlbCB3aXRoIG5hbWUgJyR7dGhpcy5tb2RlbFBhdGh9J2ApO1xuICAgIH1cblxuICAgIGlmIChpbmZvLm1vZGVsVG9wb2xvZ3lUeXBlICE9PSAnSlNPTicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQnJvd3NlckxvY2FsU3RvcmFnZSBkb2VzIG5vdCBzdXBwb3J0IGxvYWRpbmcgbm9uLUpTT04gbW9kZWwgJyArXG4gICAgICAgICAgJ3RvcG9sb2d5IHlldC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXQ6IE1vZGVsQXJ0aWZhY3RzID0ge307XG5cbiAgICAvLyBMb2FkIHRvcG9sb2d5LlxuICAgIGNvbnN0IHRvcG9sb2d5ID0gSlNPTi5wYXJzZSh0aGlzLkxTLmdldEl0ZW0odGhpcy5rZXlzLnRvcG9sb2d5KSk7XG4gICAgaWYgKHRvcG9sb2d5ID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW4gbG9jYWwgc3RvcmFnZSwgdGhlIHRvcG9sb2d5IG9mIG1vZGVsICcke3RoaXMubW9kZWxQYXRofScgYCArXG4gICAgICAgICAgYGlzIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC5tb2RlbFRvcG9sb2d5ID0gdG9wb2xvZ3k7XG5cbiAgICAvLyBMb2FkIHdlaWdodCBzcGVjcy5cbiAgICBjb25zdCB3ZWlnaHRTcGVjcyA9IEpTT04ucGFyc2UodGhpcy5MUy5nZXRJdGVtKHRoaXMua2V5cy53ZWlnaHRTcGVjcykpO1xuICAgIGlmICh3ZWlnaHRTcGVjcyA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluIGxvY2FsIHN0b3JhZ2UsIHRoZSB3ZWlnaHQgc3BlY3Mgb2YgbW9kZWwgJyR7dGhpcy5tb2RlbFBhdGh9JyBgICtcbiAgICAgICAgICBgYXJlIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC53ZWlnaHRTcGVjcyA9IHdlaWdodFNwZWNzO1xuXG4gICAgLy8gTG9hZCBtZXRhLWRhdGEgZmllbGRzLlxuICAgIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gdGhpcy5MUy5nZXRJdGVtKHRoaXMua2V5cy5tb2RlbE1ldGFkYXRhKTtcbiAgICBpZiAobWV0YWRhdGFTdHJpbmcgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBNb2RlbE1ldGFkYXRhO1xuICAgICAgb3V0LmZvcm1hdCA9IG1ldGFkYXRhLmZvcm1hdDtcbiAgICAgIG91dC5nZW5lcmF0ZWRCeSA9IG1ldGFkYXRhLmdlbmVyYXRlZEJ5O1xuICAgICAgb3V0LmNvbnZlcnRlZEJ5ID0gbWV0YWRhdGEuY29udmVydGVkQnk7XG4gICAgICBpZiAobWV0YWRhdGEuc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICAgICAgb3V0LnNpZ25hdHVyZSA9IG1ldGFkYXRhLnNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS51c2VyRGVmaW5lZE1ldGFkYXRhICE9IG51bGwpIHtcbiAgICAgICAgb3V0LnVzZXJEZWZpbmVkTWV0YWRhdGEgPSBtZXRhZGF0YS51c2VyRGVmaW5lZE1ldGFkYXRhO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGFkYXRhLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgICBvdXQubW9kZWxJbml0aWFsaXplciA9IG1ldGFkYXRhLm1vZGVsSW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgICBpZiAobWV0YWRhdGEuaW5pdGlhbGl6ZXJTaWduYXR1cmUgIT0gbnVsbCkge1xuICAgICAgICBvdXQuaW5pdGlhbGl6ZXJTaWduYXR1cmUgPSBtZXRhZGF0YS5pbml0aWFsaXplclNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRhZGF0YS50cmFpbmluZ0NvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgIG91dC50cmFpbmluZ0NvbmZpZyA9IG1ldGFkYXRhLnRyYWluaW5nQ29uZmlnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvYWQgd2VpZ2h0IGRhdGEuXG4gICAgY29uc3Qgd2VpZ2h0RGF0YUJhc2U2NCA9IHRoaXMuTFMuZ2V0SXRlbSh0aGlzLmtleXMud2VpZ2h0RGF0YSk7XG4gICAgaWYgKHdlaWdodERhdGFCYXNlNjQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbiBsb2NhbCBzdG9yYWdlLCB0aGUgYmluYXJ5IHdlaWdodCB2YWx1ZXMgb2YgbW9kZWwgYCArXG4gICAgICAgICAgYCcke3RoaXMubW9kZWxQYXRofScgYXJlIG1pc3NpbmcuYCk7XG4gICAgfVxuICAgIG91dC53ZWlnaHREYXRhID0gYmFzZTY0U3RyaW5nVG9BcnJheUJ1ZmZlcih3ZWlnaHREYXRhQmFzZTY0KTtcblxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvY2FsU3RvcmFnZVJvdXRlcjogSU9Sb3V0ZXIgPSAodXJsOiBzdHJpbmd8c3RyaW5nW10pID0+IHtcbiAgaWYgKCFlbnYoKS5nZXRCb29sKCdJU19CUk9XU0VSJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJsKSAmJiB1cmwuc3RhcnRzV2l0aChCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUpKSB7XG4gICAgICByZXR1cm4gYnJvd3NlckxvY2FsU3RvcmFnZShcbiAgICAgICAgICB1cmwuc2xpY2UoQnJvd3NlckxvY2FsU3RvcmFnZS5VUkxfU0NIRU1FLmxlbmd0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5JT1JvdXRlclJlZ2lzdHJ5LnJlZ2lzdGVyU2F2ZVJvdXRlcihsb2NhbFN0b3JhZ2VSb3V0ZXIpO1xuSU9Sb3V0ZXJSZWdpc3RyeS5yZWdpc3RlckxvYWRSb3V0ZXIobG9jYWxTdG9yYWdlUm91dGVyKTtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBsb2NhbCBzdG9yYWdlIElPSGFuZGxlci5cbiAqXG4gKiBUaGlzIGBJT0hhbmRsZXJgIHN1cHBvcnRzIGJvdGggYHNhdmVgIGFuZCBgbG9hZGAuXG4gKlxuICogRm9yIGVhY2ggbW9kZWwncyBzYXZlZCBhcnRpZmFjdHMsIGZvdXIgaXRlbXMgYXJlIHNhdmVkIHRvIGxvY2FsIHN0b3JhZ2UuXG4gKiAgIC0gYCR7UEFUSF9TRVBBUkFUT1J9LyR7bW9kZWxQYXRofS9pbmZvYDogQ29udGFpbnMgbWV0YS1pbmZvIGFib3V0IHRoZVxuICogICAgIG1vZGVsLCBzdWNoIGFzIGRhdGUgc2F2ZWQsIHR5cGUgb2YgdGhlIHRvcG9sb2d5LCBzaXplIGluIGJ5dGVzLCBldGMuXG4gKiAgIC0gYCR7UEFUSF9TRVBBUkFUT1J9LyR7bW9kZWxQYXRofS90b3BvbG9neWA6IE1vZGVsIHRvcG9sb2d5LiBGb3IgS2VyYXMtXG4gKiAgICAgc3R5bGUgbW9kZWxzLCB0aGlzIGlzIGEgc3RyaW5naXplZCBKU09OLlxuICogICAtIGAke1BBVEhfU0VQQVJBVE9SfS8ke21vZGVsUGF0aH0vd2VpZ2h0X3NwZWNzYDogV2VpZ2h0IHNwZWNzIG9mIHRoZVxuICogICAgIG1vZGVsLCBjYW4gYmUgdXNlZCB0byBkZWNvZGUgdGhlIHNhdmVkIGJpbmFyeSB3ZWlnaHQgdmFsdWVzIChzZWVcbiAqICAgICBpdGVtIGJlbG93KS5cbiAqICAgLSBgJHtQQVRIX1NFUEFSQVRPUn0vJHttb2RlbFBhdGh9L3dlaWdodF9kYXRhYDogQ29uY2F0ZW5hdGVkIGJpbmFyeVxuICogICAgIHdlaWdodCB2YWx1ZXMsIHN0b3JlZCBhcyBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBTYXZpbmcgbWF5IHRocm93IGFuIGBFcnJvcmAgaWYgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGFydGlmYWN0cyBleGNlZWQgdGhlXG4gKiBicm93c2VyLXNwZWNpZmljIHF1b3RhLlxuICpcbiAqIEBwYXJhbSBtb2RlbFBhdGggQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1vZGVsIHRvIGJlIHNhdmVkLiBNdXN0IGJlIGFcbiAqICAgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGBJT0hhbmRsZXJgLCB3aGljaCBjYW4gYmUgdXNlZCB3aXRoLCBlLmcuLFxuICogICBgdGYuTW9kZWwuc2F2ZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyTG9jYWxTdG9yYWdlKG1vZGVsUGF0aDogc3RyaW5nKTogSU9IYW5kbGVyIHtcbiAgcmV0dXJuIG5ldyBCcm93c2VyTG9jYWxTdG9yYWdlKG1vZGVsUGF0aCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VyTG9jYWxTdG9yYWdlTWFuYWdlciBpbXBsZW1lbnRzIE1vZGVsU3RvcmVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBMUzogU3RvcmFnZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIGVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSxcbiAgICAgICAgKCkgPT4gJ0N1cnJlbnQgZW52aXJvbm1lbnQgaXMgbm90IGEgd2ViIGJyb3dzZXInKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93LmxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICgpID0+ICdDdXJyZW50IGJyb3dzZXIgZG9lcyBub3QgYXBwZWFyIHRvIHN1cHBvcnQgbG9jYWxTdG9yYWdlJyk7XG4gICAgdGhpcy5MUyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gIH1cblxuICBhc3luYyBsaXN0TW9kZWxzKCk6IFByb21pc2U8e1twYXRoOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gICAgY29uc3Qgb3V0OiB7W3BhdGg6IHN0cmluZ106IE1vZGVsQXJ0aWZhY3RzSW5mb30gPSB7fTtcbiAgICBjb25zdCBwcmVmaXggPSBQQVRIX1BSRUZJWCArIFBBVEhfU0VQQVJBVE9SO1xuICAgIGNvbnN0IHN1ZmZpeCA9IFBBVEhfU0VQQVJBVE9SICsgSU5GT19TVUZGSVg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkxTLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLkxTLmtleShpKTtcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChwcmVmaXgpICYmIGtleS5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUGF0aCA9IGdldE1vZGVsUGF0aEZyb21LZXkoa2V5KTtcbiAgICAgICAgb3V0W21vZGVsUGF0aF0gPSBKU09OLnBhcnNlKHRoaXMuTFMuZ2V0SXRlbShrZXkpKSBhcyBNb2RlbEFydGlmYWN0c0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBhc3luYyByZW1vdmVNb2RlbChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICAgIHBhdGggPSBtYXliZVN0cmlwU2NoZW1lKHBhdGgpO1xuICAgIGNvbnN0IGtleXMgPSBnZXRNb2RlbEtleXMocGF0aCk7XG4gICAgaWYgKHRoaXMuTFMuZ2V0SXRlbShrZXlzLmluZm8pID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbW9kZWwgYXQgcGF0aCAnJHtwYXRofSdgKTtcbiAgICB9XG4gICAgY29uc3QgaW5mbyA9IEpTT04ucGFyc2UodGhpcy5MUy5nZXRJdGVtKGtleXMuaW5mbykpIGFzIE1vZGVsQXJ0aWZhY3RzSW5mbztcbiAgICByZW1vdmVJdGVtcyhrZXlzKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Classes and functions for model management across multiple storage mediums.\n *\n * Supported client actions:\n * - Listing models on all registered storage mediums.\n * - Remove model by URL from any registered storage mediums, by using URL\n * string.\n * - Moving or copying model from one path to another in the same medium or from\n * one medium to another, by using URL strings.\n */\nimport { assert } from '../util';\nimport { IORouterRegistry } from './router_registry';\nconst URL_SCHEME_SUFFIX = '://';\nexport class ModelStoreManagerRegistry {\n constructor() {\n this.managers = {};\n }\n static getInstance() {\n if (ModelStoreManagerRegistry.instance == null) {\n ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry();\n }\n return ModelStoreManagerRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerManager(scheme, manager) {\n assert(scheme != null, () => 'scheme must not be undefined or null.');\n if (scheme.endsWith(URL_SCHEME_SUFFIX)) {\n scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX));\n }\n assert(scheme.length > 0, () => 'scheme must not be an empty string.');\n const registry = ModelStoreManagerRegistry.getInstance();\n assert(registry.managers[scheme] == null, () => `A model store manager is already registered for scheme '${scheme}'.`);\n registry.managers[scheme] = manager;\n }\n static getManager(scheme) {\n const manager = ModelStoreManagerRegistry.getInstance().managers[scheme];\n if (manager == null) {\n throw new Error(`Cannot find model manager for scheme '${scheme}'`);\n }\n return manager;\n }\n static getSchemes() {\n return Object.keys(ModelStoreManagerRegistry.getInstance().managers);\n }\n}\n/**\n * Helper method for parsing a URL string into a scheme and a path.\n *\n * @param url E.g., 'localstorage://my-model'\n * @returns A dictionary with two fields: scheme and path.\n * Scheme: e.g., 'localstorage' in the example above.\n * Path: e.g., 'my-model' in the example above.\n */\nfunction parseURL(url) {\n if (url.indexOf(URL_SCHEME_SUFFIX) === -1) {\n throw new Error(`The url string provided does not contain a scheme. ` +\n `Supported schemes are: ` +\n `${ModelStoreManagerRegistry.getSchemes().join(',')}`);\n }\n return {\n scheme: url.split(URL_SCHEME_SUFFIX)[0],\n path: url.split(URL_SCHEME_SUFFIX)[1],\n };\n}\nasync function cloneModelInternal(sourceURL, destURL, deleteSource = false) {\n assert(sourceURL !== destURL, () => `Old path and new path are the same: '${sourceURL}'`);\n const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL);\n assert(loadHandlers.length > 0, () => `Copying failed because no load handler is found for source URL ${sourceURL}.`);\n assert(loadHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `load handlers for source URL ${sourceURL}.`);\n const loadHandler = loadHandlers[0];\n const saveHandlers = IORouterRegistry.getSaveHandlers(destURL);\n assert(saveHandlers.length > 0, () => `Copying failed because no save handler is found for destination ` +\n `URL ${destURL}.`);\n assert(saveHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `save handlers for destination URL ${destURL}.`);\n const saveHandler = saveHandlers[0];\n const sourceScheme = parseURL(sourceURL).scheme;\n const sourcePath = parseURL(sourceURL).path;\n const sameMedium = sourceScheme === parseURL(sourceURL).scheme;\n const modelArtifacts = await loadHandler.load();\n // If moving within the same storage medium, remove the old model as soon as\n // the loading is done. Without doing this, it is possible that the combined\n // size of the two models will cause the cloning to fail.\n if (deleteSource && sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n const saveResult = await saveHandler.save(modelArtifacts);\n // If moving between mediums, the deletion is done after the save succeeds.\n // This guards against the case in which saving to the destination medium\n // fails.\n if (deleteSource && !sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n return saveResult.modelArtifactsInfo;\n}\n/**\n * List all models stored in registered storage mediums.\n *\n * For a web browser environment, the registered mediums are Local Storage and\n * IndexedDB.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @returns A `Promise` of a dictionary mapping URLs of existing models to\n * their model artifacts info. URLs include medium-specific schemes, e.g.,\n * 'indexeddb://my/model/1'. Model artifacts info include type of the\n * model's topology, byte sizes of the topology, weights, etc.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function listModels() {\n const schemes = ModelStoreManagerRegistry.getSchemes();\n const out = {};\n for (const scheme of schemes) {\n const schemeOut = await ModelStoreManagerRegistry.getManager(scheme).listModels();\n for (const path in schemeOut) {\n const url = scheme + URL_SCHEME_SUFFIX + path;\n out[url] = schemeOut[path];\n }\n }\n return out;\n}\n/**\n * Remove a model specified by URL from a registered storage medium.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @param url A URL to a stored model, with a scheme prefix, e.g.,\n * 'localstorage://my-model-1', 'indexeddb://my/model/2'.\n * @returns ModelArtifactsInfo of the deleted model (if and only if deletion\n * is successful).\n * @throws Error if deletion fails, e.g., if no model exists at `path`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function removeModel(url) {\n const schemeAndPath = parseURL(url);\n const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme);\n return manager.removeModel(schemeAndPath.path);\n}\n/**\n * Copy a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Copying within a storage medium, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Copying between two storage mediums, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Copy the model, from Local Storage to IndexedDB.\n * await tf.io.copyModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove both models.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of copying.\n * @param destURL Destination URL of copying.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if copying fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function copyModel(sourceURL, destURL) {\n const deleteSource = false;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\n/**\n * Move a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Moving within a storage medium, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Moving between two storage mediums, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Move the model, from Local Storage to IndexedDB.\n * await tf.io.moveModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove the moved model.\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of moving.\n * @param destURL Destination URL of moving.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if moving fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function moveModel(sourceURL, destURL) {\n const deleteSource = true;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\nexport { moveModel, copyModel, removeModel, listModels };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxfbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vbW9kZWxfbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR25ELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRWhDLE1BQU0sT0FBTyx5QkFBeUI7SUFNcEM7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVc7UUFDeEIsSUFBSSx5QkFBeUIsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzlDLHlCQUF5QixDQUFDLFFBQVEsR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7U0FDdEU7UUFDRCxPQUFPLHlCQUF5QixDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQWMsRUFBRSxPQUEwQjtRQUMvRCxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0s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R0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDcEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxLQUFLLFVBQVUsU0FBUyxDQUNwQixTQUFpQixFQUFFLE9BQWU7SUFDcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzNCLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILEtBQUssVUFBVSxTQUFTLENBQ3BCLFNBQWlCLEVBQUUsT0FBZTtJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDMUIsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtb2RlbCBtYW5hZ2VtZW50IGFjcm9zcyBtdWx0aXBsZSBzdG9yYWdlIG1lZGl1bXMuXG4gKlxuICogU3VwcG9ydGVkIGNsaWVudCBhY3Rpb25zOlxuICogLSBMaXN0aW5nIG1vZGVscyBvbiBhbGwgcmVnaXN0ZXJlZCBzdG9yYWdlIG1lZGl1bXMuXG4gKiAtIFJlbW92ZSBtb2RlbCBieSBVUkwgZnJvbSBhbnkgcmVnaXN0ZXJlZCBzdG9yYWdlIG1lZGl1bXMsIGJ5IHVzaW5nIFVSTFxuICogICBzdHJpbmcuXG4gKiAtIE1vdmluZyBvciBjb3B5aW5nIG1vZGVsIGZyb20gb25lIHBhdGggdG8gYW5vdGhlciBpbiB0aGUgc2FtZSBtZWRpdW0gb3IgZnJvbVxuICogICBvbmUgbWVkaXVtIHRvIGFub3RoZXIsIGJ5IHVzaW5nIFVSTCBzdHJpbmdzLlxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtJT1JvdXRlclJlZ2lzdHJ5fSBmcm9tICcuL3JvdXRlcl9yZWdpc3RyeSc7XG5pbXBvcnQge01vZGVsQXJ0aWZhY3RzSW5mbywgTW9kZWxTdG9yZU1hbmFnZXJ9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBVUkxfU0NIRU1FX1NVRkZJWCA9ICc6Ly8nO1xuXG5leHBvcnQgY2xhc3MgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeSB7XG4gIC8vIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnk7XG5cbiAgcHJpdmF0ZSBtYW5hZ2Vyczoge1tzY2hlbWU6IHN0cmluZ106IE1vZGVsU3RvcmVNYW5hZ2VyfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWFuYWdlcnMgPSB7fTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlKCk6IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkge1xuICAgIGlmIChNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5Lmluc3RhbmNlID09IG51bGwpIHtcbiAgICAgIE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuaW5zdGFuY2UgPSBuZXcgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeSgpO1xuICAgIH1cbiAgICByZXR1cm4gTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNhdmUtaGFuZGxlciByb3V0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzYXZlUm91dGVyIEEgZnVuY3Rpb24gdGhhdCBtYXBzIGEgVVJMLWxpa2Ugc3RyaW5nIG9udG8gYW4gaW5zdGFuY2VcbiAgICogb2YgYElPSGFuZGxlcmAgd2l0aCB0aGUgYHNhdmVgIG1ldGhvZCBkZWZpbmVkIG9yIGBudWxsYC5cbiAgICovXG4gIHN0YXRpYyByZWdpc3Rlck1hbmFnZXIoc2NoZW1lOiBzdHJpbmcsIG1hbmFnZXI6IE1vZGVsU3RvcmVNYW5hZ2VyKSB7XG4gICAgYXNzZXJ0KHNjaGVtZSAhPSBudWxsLCAoKSA9PiAnc2NoZW1lIG11c3Qgbm90IGJlIHVuZGVmaW5lZCBvciBudWxsLicpO1xuICAgIGlmIChzY2hlbWUuZW5kc1dpdGgoVVJMX1NDSEVNRV9TVUZGSVgpKSB7XG4gICAgICBzY2hlbWUgPSBzY2hlbWUuc2xpY2UoMCwgc2NoZW1lLmluZGV4T2YoVVJMX1NDSEVNRV9TVUZGSVgpKTtcbiAgICB9XG4gICAgYXNzZXJ0KHNjaGVtZS5sZW5ndGggPiAwLCAoKSA9PiAnc2NoZW1lIG11c3Qgbm90IGJlIGFuIGVtcHR5IHN0cmluZy4nKTtcbiAgICBjb25zdCByZWdpc3RyeSA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHJlZ2lzdHJ5Lm1hbmFnZXJzW3NjaGVtZV0gPT0gbnVsbCxcbiAgICAgICAgKCkgPT4gYEEgbW9kZWwgc3RvcmUgbWFuYWdlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIHNjaGVtZSAnJHtcbiAgICAgICAgICAgIHNjaGVtZX0nLmApO1xuICAgIHJlZ2lzdHJ5Lm1hbmFnZXJzW3NjaGVtZV0gPSBtYW5hZ2VyO1xuICB9XG5cbiAgc3RhdGljIGdldE1hbmFnZXIoc2NoZW1lOiBzdHJpbmcpOiBNb2RlbFN0b3JlTWFuYWdlciB7XG4gICAgY29uc3QgbWFuYWdlciA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5tYW5hZ2Vyc1tzY2hlbWVdO1xuICAgIGlmIChtYW5hZ2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgbW9kZWwgbWFuYWdlciBmb3Igc2NoZW1lICcke3NjaGVtZX0nYCk7XG4gICAgfVxuICAgIHJldHVybiBtYW5hZ2VyO1xuICB9XG5cbiAgc3RhdGljIGdldFNjaGVtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkubWFuYWdlcnMpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCBmb3IgcGFyc2luZyBhIFVSTCBzdHJpbmcgaW50byBhIHNjaGVtZSBhbmQgYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB1cmwgRS5nLiwgJ2xvY2Fsc3RvcmFnZTovL215LW1vZGVsJ1xuICogQHJldHVybnMgQSBkaWN0aW9uYXJ5IHdpdGggdHdvIGZpZWxkczogc2NoZW1lIGFuZCBwYXRoLlxuICogICBTY2hlbWU6IGUuZy4sICdsb2NhbHN0b3JhZ2UnIGluIHRoZSBleGFtcGxlIGFib3ZlLlxuICogICBQYXRoOiBlLmcuLCAnbXktbW9kZWwnIGluIHRoZSBleGFtcGxlIGFib3ZlLlxuICovXG5mdW5jdGlvbiBwYXJzZVVSTCh1cmw6IHN0cmluZyk6IHtzY2hlbWU6IHN0cmluZywgcGF0aDogc3RyaW5nfSB7XG4gIGlmICh1cmwuaW5kZXhPZihVUkxfU0NIRU1FX1NVRkZJWCkgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIHVybCBzdHJpbmcgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiBhIHNjaGVtZS4gYCArXG4gICAgICAgIGBTdXBwb3J0ZWQgc2NoZW1lcyBhcmU6IGAgK1xuICAgICAgICBgJHtNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldFNjaGVtZXMoKS5qb2luKCcsJyl9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IHVybC5zcGxpdChVUkxfU0NIRU1FX1NVRkZJWClbMF0sXG4gICAgcGF0aDogdXJsLnNwbGl0KFVSTF9TQ0hFTUVfU1VGRklYKVsxXSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xvbmVNb2RlbEludGVybmFsKFxuICAgIHNvdXJjZVVSTDogc3RyaW5nLCBkZXN0VVJMOiBzdHJpbmcsXG4gICAgZGVsZXRlU291cmNlID0gZmFsc2UpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICBhc3NlcnQoXG4gICAgICBzb3VyY2VVUkwgIT09IGRlc3RVUkwsXG4gICAgICAoKSA9PiBgT2xkIHBhdGggYW5kIG5ldyBwYXRoIGFyZSB0aGUgc2FtZTogJyR7c291cmNlVVJMfSdgKTtcblxuICBjb25zdCBsb2FkSGFuZGxlcnMgPSBJT1JvdXRlclJlZ2lzdHJ5LmdldExvYWRIYW5kbGVycyhzb3VyY2VVUkwpO1xuICBhc3NlcnQoXG4gICAgICBsb2FkSGFuZGxlcnMubGVuZ3RoID4gMCxcbiAgICAgICgpID0+IGBDb3B5aW5nIGZhaWxlZCBiZWNhdXNlIG5vIGxvYWQgaGFuZGxlciBpcyBmb3VuZCBmb3Igc291cmNlIFVSTCAke1xuICAgICAgICAgIHNvdXJjZVVSTH0uYCk7XG4gIGFzc2VydChcbiAgICAgIGxvYWRIYW5kbGVycy5sZW5ndGggPCAyLFxuICAgICAgKCkgPT4gYENvcHlpbmcgZmFpbGVkIGJlY2F1c2UgbW9yZSB0aGFuIG9uZSAoJHtsb2FkSGFuZGxlcnMubGVuZ3RofSkgYCArXG4gICAgICAgICAgYGxvYWQgaGFuZGxlcnMgZm9yIHNvdXJjZSBVUkwgJHtzb3VyY2VVUkx9LmApO1xuICBjb25zdCBsb2FkSGFuZGxlciA9IGxvYWRIYW5kbGVyc1swXTtcblxuICBjb25zdCBzYXZlSGFuZGxlcnMgPSBJT1JvdXRlclJlZ2lzdHJ5LmdldFNhdmVIYW5kbGVycyhkZXN0VVJMKTtcbiAgYXNzZXJ0KFxuICAgICAgc2F2ZUhhbmRsZXJzLmxlbmd0aCA+IDAsXG4gICAgICAoKSA9PiBgQ29weWluZyBmYWlsZWQgYmVjYXVzZSBubyBzYXZlIGhhbmRsZXIgaXMgZm91bmQgZm9yIGRlc3RpbmF0aW9uIGAgK1xuICAgICAgICAgIGBVUkwgJHtkZXN0VVJMfS5gKTtcbiAgYXNzZXJ0KFxuICAgICAgc2F2ZUhhbmRsZXJzLmxlbmd0aCA8IDIsXG4gICAgICAoKSA9PiBgQ29weWluZyBmYWlsZWQgYmVjYXVzZSBtb3JlIHRoYW4gb25lICgke2xvYWRIYW5kbGVycy5sZW5ndGh9KSBgICtcbiAgICAgICAgICBgc2F2ZSBoYW5kbGVycyBmb3IgZGVzdGluYXRpb24gVVJMICR7ZGVzdFVSTH0uYCk7XG4gIGNvbnN0IHNhdmVIYW5kbGVyID0gc2F2ZUhhbmRsZXJzWzBdO1xuXG4gIGNvbnN0IHNvdXJjZVNjaGVtZSA9IHBhcnNlVVJMKHNvdXJjZVVSTCkuc2NoZW1lO1xuICBjb25zdCBzb3VyY2VQYXRoID0gcGFyc2VVUkwoc291cmNlVVJMKS5wYXRoO1xuICBjb25zdCBzYW1lTWVkaXVtID0gc291cmNlU2NoZW1lID09PSBwYXJzZVVSTChzb3VyY2VVUkwpLnNjaGVtZTtcblxuICBjb25zdCBtb2RlbEFydGlmYWN0cyA9IGF3YWl0IGxvYWRIYW5kbGVyLmxvYWQoKTtcblxuICAvLyBJZiBtb3Zpbmcgd2l0aGluIHRoZSBzYW1lIHN0b3JhZ2UgbWVkaXVtLCByZW1vdmUgdGhlIG9sZCBtb2RlbCBhcyBzb29uIGFzXG4gIC8vIHRoZSBsb2FkaW5nIGlzIGRvbmUuIFdpdGhvdXQgZG9pbmcgdGhpcywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY29tYmluZWRcbiAgLy8gc2l6ZSBvZiB0aGUgdHdvIG1vZGVscyB3aWxsIGNhdXNlIHRoZSBjbG9uaW5nIHRvIGZhaWwuXG4gIGlmIChkZWxldGVTb3VyY2UgJiYgc2FtZU1lZGl1bSkge1xuICAgIGF3YWl0IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzb3VyY2VTY2hlbWUpXG4gICAgICAgIC5yZW1vdmVNb2RlbChzb3VyY2VQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHNhdmVSZXN1bHQgPSBhd2FpdCBzYXZlSGFuZGxlci5zYXZlKG1vZGVsQXJ0aWZhY3RzKTtcblxuICAvLyBJZiBtb3ZpbmcgYmV0d2VlbiBtZWRpdW1zLCB0aGUgZGVsZXRpb24gaXMgZG9uZSBhZnRlciB0aGUgc2F2ZSBzdWNjZWVkcy5cbiAgLy8gVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgY2FzZSBpbiB3aGljaCBzYXZpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIG1lZGl1bVxuICAvLyBmYWlscy5cbiAgaWYgKGRlbGV0ZVNvdXJjZSAmJiAhc2FtZU1lZGl1bSkge1xuICAgIGF3YWl0IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzb3VyY2VTY2hlbWUpXG4gICAgICAgIC5yZW1vdmVNb2RlbChzb3VyY2VQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBzYXZlUmVzdWx0Lm1vZGVsQXJ0aWZhY3RzSW5mbztcbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBtb2RlbHMgc3RvcmVkIGluIHJlZ2lzdGVyZWQgc3RvcmFnZSBtZWRpdW1zLlxuICpcbiAqIEZvciBhIHdlYiBicm93c2VyIGVudmlyb25tZW50LCB0aGUgcmVnaXN0ZXJlZCBtZWRpdW1zIGFyZSBMb2NhbCBTdG9yYWdlIGFuZFxuICogSW5kZXhlZERCLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBGaXJzdCBjcmVhdGUgYW5kIHNhdmUgYSBtb2RlbC5cbiAqIGNvbnN0IG1vZGVsID0gdGYuc2VxdWVudGlhbCgpO1xuICogbW9kZWwuYWRkKHRmLmxheWVycy5kZW5zZShcbiAqICAgICB7dW5pdHM6IDEsIGlucHV0U2hhcGU6IFsxMF0sIGFjdGl2YXRpb246ICdzaWdtb2lkJ30pKTtcbiAqIGF3YWl0IG1vZGVsLnNhdmUoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqXG4gKiAvLyBUaGVuIGxpc3QgZXhpc3RpbmcgbW9kZWxzLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gRGVsZXRlIHRoZSBtb2RlbC5cbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gTGlzdCBtb2RlbHMgYWdhaW4uXG4gKiBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhd2FpdCB0Zi5pby5saXN0TW9kZWxzKCkpKTtcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIG9mIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVSTHMgb2YgZXhpc3RpbmcgbW9kZWxzIHRvXG4gKiB0aGVpciBtb2RlbCBhcnRpZmFjdHMgaW5mby4gVVJMcyBpbmNsdWRlIG1lZGl1bS1zcGVjaWZpYyBzY2hlbWVzLCBlLmcuLFxuICogICAnaW5kZXhlZGRiOi8vbXkvbW9kZWwvMScuIE1vZGVsIGFydGlmYWN0cyBpbmZvIGluY2x1ZGUgdHlwZSBvZiB0aGVcbiAqIG1vZGVsJ3MgdG9wb2xvZ3ksIGJ5dGUgc2l6ZXMgb2YgdGhlIHRvcG9sb2d5LCB3ZWlnaHRzLCBldGMuXG4gKlxuICogQGRvYyB7XG4gKiAgIGhlYWRpbmc6ICdNb2RlbHMnLFxuICogICBzdWJoZWFkaW5nOiAnTWFuYWdlbWVudCcsXG4gKiAgIG5hbWVzcGFjZTogJ2lvJyxcbiAqICAgaWdub3JlQ0k6IHRydWVcbiAqIH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHtbdXJsOiBzdHJpbmddOiBNb2RlbEFydGlmYWN0c0luZm99PiB7XG4gIGNvbnN0IHNjaGVtZXMgPSBNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5LmdldFNjaGVtZXMoKTtcbiAgY29uc3Qgb3V0OiB7W3VybDogc3RyaW5nXTogTW9kZWxBcnRpZmFjdHNJbmZvfSA9IHt9O1xuICBmb3IgKGNvbnN0IHNjaGVtZSBvZiBzY2hlbWVzKSB7XG4gICAgY29uc3Qgc2NoZW1lT3V0ID1cbiAgICAgICAgYXdhaXQgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5nZXRNYW5hZ2VyKHNjaGVtZSkubGlzdE1vZGVscygpO1xuICAgIGZvciAoY29uc3QgcGF0aCBpbiBzY2hlbWVPdXQpIHtcbiAgICAgIGNvbnN0IHVybCA9IHNjaGVtZSArIFVSTF9TQ0hFTUVfU1VGRklYICsgcGF0aDtcbiAgICAgIG91dFt1cmxdID0gc2NoZW1lT3V0W3BhdGhdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlbW92ZSBhIG1vZGVsIHNwZWNpZmllZCBieSBVUkwgZnJvbSBhIHJlZ2lzdGVyZWQgc3RvcmFnZSBtZWRpdW0uXG4gKlxuICogYGBganNcbiAqIC8vIEZpcnN0IGNyZWF0ZSBhbmQgc2F2ZSBhIG1vZGVsLlxuICogY29uc3QgbW9kZWwgPSB0Zi5zZXF1ZW50aWFsKCk7XG4gKiBtb2RlbC5hZGQodGYubGF5ZXJzLmRlbnNlKFxuICogICAgIHt1bml0czogMSwgaW5wdXRTaGFwZTogWzEwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICogYXdhaXQgbW9kZWwuc2F2ZSgnbG9jYWxzdG9yYWdlOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIFRoZW4gbGlzdCBleGlzdGluZyBtb2RlbHMuXG4gKiBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhd2FpdCB0Zi5pby5saXN0TW9kZWxzKCkpKTtcbiAqXG4gKiAvLyBEZWxldGUgdGhlIG1vZGVsLlxuICogYXdhaXQgdGYuaW8ucmVtb3ZlTW9kZWwoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqXG4gKiAvLyBMaXN0IG1vZGVscyBhZ2Fpbi5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHVybCBBIFVSTCB0byBhIHN0b3JlZCBtb2RlbCwgd2l0aCBhIHNjaGVtZSBwcmVmaXgsIGUuZy4sXG4gKiAgICdsb2NhbHN0b3JhZ2U6Ly9teS1tb2RlbC0xJywgJ2luZGV4ZWRkYjovL215L21vZGVsLzInLlxuICogQHJldHVybnMgTW9kZWxBcnRpZmFjdHNJbmZvIG9mIHRoZSBkZWxldGVkIG1vZGVsIChpZiBhbmQgb25seSBpZiBkZWxldGlvblxuICogICBpcyBzdWNjZXNzZnVsKS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgZGVsZXRpb24gZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgcGF0aGAuXG4gKlxuICogQGRvYyB7XG4gKiAgIGhlYWRpbmc6ICdNb2RlbHMnLFxuICogICBzdWJoZWFkaW5nOiAnTWFuYWdlbWVudCcsXG4gKiAgIG5hbWVzcGFjZTogJ2lvJyxcbiAqICAgaWdub3JlQ0k6IHRydWVcbiAqIH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlTW9kZWwodXJsOiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsQXJ0aWZhY3RzSW5mbz4ge1xuICBjb25zdCBzY2hlbWVBbmRQYXRoID0gcGFyc2VVUkwodXJsKTtcbiAgY29uc3QgbWFuYWdlciA9IE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkuZ2V0TWFuYWdlcihzY2hlbWVBbmRQYXRoLnNjaGVtZSk7XG4gIHJldHVybiBtYW5hZ2VyLnJlbW92ZU1vZGVsKHNjaGVtZUFuZFBhdGgucGF0aCk7XG59XG5cbi8qKlxuICogQ29weSBhIG1vZGVsIGZyb20gb25lIFVSTCB0byBhbm90aGVyLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHM6XG4gKlxuICogMS4gQ29weWluZyB3aXRoaW4gYSBzdG9yYWdlIG1lZGl1bSwgZS5nLixcbiAqICAgIGB0Zi5pby5jb3B5TW9kZWwoJ2xvY2Fsc3RvcmFnZTovL21vZGVsLTEnLCAnbG9jYWxzdG9yYWdlOi8vbW9kZWwtMicpYFxuICogMi4gQ29weWluZyBiZXR3ZWVuIHR3byBzdG9yYWdlIG1lZGl1bXMsIGUuZy4sXG4gKiAgICBgdGYuaW8uY29weU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2luZGV4ZWRkYjovL21vZGVsLTEnKWBcbiAqXG4gKiBgYGBqc1xuICogLy8gRmlyc3QgY3JlYXRlIGFuZCBzYXZlIGEgbW9kZWwuXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZCh0Zi5sYXllcnMuZGVuc2UoXG4gKiAgICAge3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTBdLCBhY3RpdmF0aW9uOiAnc2lnbW9pZCd9KSk7XG4gKiBhd2FpdCBtb2RlbC5zYXZlKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gVGhlbiBsaXN0IGV4aXN0aW5nIG1vZGVscy5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICpcbiAqIC8vIENvcHkgdGhlIG1vZGVsLCBmcm9tIExvY2FsIFN0b3JhZ2UgdG8gSW5kZXhlZERCLlxuICogYXdhaXQgdGYuaW8uY29weU1vZGVsKFxuICogICAgICdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyxcbiAqICAgICAnaW5kZXhlZGRiOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIExpc3QgbW9kZWxzIGFnYWluLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gUmVtb3ZlIGJvdGggbW9kZWxzLlxuICogYXdhaXQgdGYuaW8ucmVtb3ZlTW9kZWwoJ2xvY2Fsc3RvcmFnZTovL2RlbW8vbWFuYWdlbWVudC9tb2RlbDEnKTtcbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdpbmRleGVkZGI6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc291cmNlVVJMIFNvdXJjZSBVUkwgb2YgY29weWluZy5cbiAqIEBwYXJhbSBkZXN0VVJMIERlc3RpbmF0aW9uIFVSTCBvZiBjb3B5aW5nLlxuICogQHJldHVybnMgTW9kZWxBcnRpZmFjdHNJbmZvIG9mIHRoZSBjb3BpZWQgbW9kZWwgKGlmIGFuZCBvbmx5IGlmIGNvcHlpbmdcbiAqICAgaXMgc3VjY2Vzc2Z1bCkuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGNvcHlpbmcgZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgc291cmNlVVJMYCwgb3JcbiAqICAgaWYgYG9sZFBhdGhgIGFuZCBgbmV3UGF0aGAgYXJlIGlkZW50aWNhbC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdNYW5hZ2VtZW50JyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5hc3luYyBmdW5jdGlvbiBjb3B5TW9kZWwoXG4gICAgc291cmNlVVJMOiBzdHJpbmcsIGRlc3RVUkw6IHN0cmluZyk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHNJbmZvPiB7XG4gIGNvbnN0IGRlbGV0ZVNvdXJjZSA9IGZhbHNlO1xuICByZXR1cm4gY2xvbmVNb2RlbEludGVybmFsKHNvdXJjZVVSTCwgZGVzdFVSTCwgZGVsZXRlU291cmNlKTtcbn1cblxuLyoqXG4gKiBNb3ZlIGEgbW9kZWwgZnJvbSBvbmUgVVJMIHRvIGFub3RoZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0czpcbiAqXG4gKiAxLiBNb3Zpbmcgd2l0aGluIGEgc3RvcmFnZSBtZWRpdW0sIGUuZy4sXG4gKiAgICBgdGYuaW8ubW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2xvY2Fsc3RvcmFnZTovL21vZGVsLTInKWBcbiAqIDIuIE1vdmluZyBiZXR3ZWVuIHR3byBzdG9yYWdlIG1lZGl1bXMsIGUuZy4sXG4gKiAgICBgdGYuaW8ubW92ZU1vZGVsKCdsb2NhbHN0b3JhZ2U6Ly9tb2RlbC0xJywgJ2luZGV4ZWRkYjovL21vZGVsLTEnKWBcbiAqXG4gKiBgYGBqc1xuICogLy8gRmlyc3QgY3JlYXRlIGFuZCBzYXZlIGEgbW9kZWwuXG4gKiBjb25zdCBtb2RlbCA9IHRmLnNlcXVlbnRpYWwoKTtcbiAqIG1vZGVsLmFkZCh0Zi5sYXllcnMuZGVuc2UoXG4gKiAgICAge3VuaXRzOiAxLCBpbnB1dFNoYXBlOiBbMTBdLCBhY3RpdmF0aW9uOiAnc2lnbW9pZCd9KSk7XG4gKiBhd2FpdCBtb2RlbC5zYXZlKCdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKlxuICogLy8gVGhlbiBsaXN0IGV4aXN0aW5nIG1vZGVscy5cbiAqIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHRmLmlvLmxpc3RNb2RlbHMoKSkpO1xuICpcbiAqIC8vIE1vdmUgdGhlIG1vZGVsLCBmcm9tIExvY2FsIFN0b3JhZ2UgdG8gSW5kZXhlZERCLlxuICogYXdhaXQgdGYuaW8ubW92ZU1vZGVsKFxuICogICAgICdsb2NhbHN0b3JhZ2U6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyxcbiAqICAgICAnaW5kZXhlZGRiOi8vZGVtby9tYW5hZ2VtZW50L21vZGVsMScpO1xuICpcbiAqIC8vIExpc3QgbW9kZWxzIGFnYWluLlxuICogY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgdGYuaW8ubGlzdE1vZGVscygpKSk7XG4gKlxuICogLy8gUmVtb3ZlIHRoZSBtb3ZlZCBtb2RlbC5cbiAqIGF3YWl0IHRmLmlvLnJlbW92ZU1vZGVsKCdpbmRleGVkZGI6Ly9kZW1vL21hbmFnZW1lbnQvbW9kZWwxJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc291cmNlVVJMIFNvdXJjZSBVUkwgb2YgbW92aW5nLlxuICogQHBhcmFtIGRlc3RVUkwgRGVzdGluYXRpb24gVVJMIG9mIG1vdmluZy5cbiAqIEByZXR1cm5zIE1vZGVsQXJ0aWZhY3RzSW5mbyBvZiB0aGUgY29waWVkIG1vZGVsIChpZiBhbmQgb25seSBpZiBjb3B5aW5nXG4gKiAgIGlzIHN1Y2Nlc3NmdWwpLlxuICogQHRocm93cyBFcnJvciBpZiBtb3ZpbmcgZmFpbHMsIGUuZy4sIGlmIG5vIG1vZGVsIGV4aXN0cyBhdCBgc291cmNlVVJMYCwgb3JcbiAqICAgaWYgYG9sZFBhdGhgIGFuZCBgbmV3UGF0aGAgYXJlIGlkZW50aWNhbC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdNYW5hZ2VtZW50JyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5hc3luYyBmdW5jdGlvbiBtb3ZlTW9kZWwoXG4gICAgc291cmNlVVJMOiBzdHJpbmcsIGRlc3RVUkw6IHN0cmluZyk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHNJbmZvPiB7XG4gIGNvbnN0IGRlbGV0ZVNvdXJjZSA9IHRydWU7XG4gIHJldHVybiBjbG9uZU1vZGVsSW50ZXJuYWwoc291cmNlVVJMLCBkZXN0VVJMLCBkZWxldGVTb3VyY2UpO1xufVxuXG5leHBvcnQge21vdmVNb2RlbCwgY29weU1vZGVsLCByZW1vdmVNb2RlbCwgbGlzdE1vZGVsc307XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { BrowserIndexedDB, BrowserIndexedDBManager } from '../io/indexed_db';\nimport { BrowserLocalStorage, BrowserLocalStorageManager } from '../io/local_storage';\nimport { ModelStoreManagerRegistry } from '../io/model_management';\nimport { isTypedArrayBrowser } from './is_typed_array_browser';\nexport class PlatformBrowser {\n constructor() {\n // For setTimeoutCustom\n this.messageName = 'setTimeoutCustom';\n this.functionRefs = [];\n this.handledMessageCount = 0;\n this.hasEventListener = false;\n }\n fetch(path, init) {\n return fetch(path, init);\n }\n now() {\n return performance.now();\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`);\n }\n if (this.textEncoder == null) {\n this.textEncoder = new TextEncoder();\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n return new TextDecoder(encoding).decode(bytes);\n }\n // If the setTimeout nesting level is greater than 5 and timeout is less\n // than 4ms, timeout will be clamped to 4ms, which hurts the perf.\n // Interleaving window.postMessage and setTimeout will trick the browser and\n // avoid the clamp.\n setTimeoutCustom(functionRef, delay) {\n if (typeof window === 'undefined' ||\n !env().getBool('USE_SETTIMEOUTCUSTOM')) {\n setTimeout(functionRef, delay);\n return;\n }\n this.functionRefs.push(functionRef);\n setTimeout(() => {\n window.postMessage({ name: this.messageName, index: this.functionRefs.length - 1 }, '*');\n }, delay);\n if (!this.hasEventListener) {\n this.hasEventListener = true;\n window.addEventListener('message', (event) => {\n if (event.source === window && event.data.name === this.messageName) {\n event.stopPropagation();\n const functionRef = this.functionRefs[event.data.index];\n functionRef();\n this.handledMessageCount++;\n if (this.handledMessageCount === this.functionRefs.length) {\n this.functionRefs = [];\n this.handledMessageCount = 0;\n }\n }\n }, true);\n }\n }\n isTypedArray(a) {\n return isTypedArrayBrowser(a);\n }\n}\nif (env().get('IS_BROWSER')) {\n env().setPlatform('browser', new PlatformBrowser());\n // Register LocalStorage IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager());\n }\n catch (err) {\n }\n // Register IndexedDB IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager());\n }\n catch (err) {\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1fYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL3BsYXRmb3JtX2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR2pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTdELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBS0UsdUJBQXVCO1FBQ04sZ0JBQVcsR0FBRyxrQkFBa0IsQ0FBQztRQUMxQyxpQkFBWSxHQUFlLEVBQUUsQ0FBQztRQUM5Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO0lBOERuQyxDQUFDO0lBNURDLEtBQUssQ0FBQyxJQUFZLEVBQUUsSUFBa0I7UUFDcEMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDbkMsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxrREFBa0QsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUNE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QGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0ICcuLi9mbGFncyc7XG5cbmltcG9ydCB7ZW52fSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQge0Jyb3dzZXJJbmRleGVkREIsIEJyb3dzZXJJbmRleGVkREJNYW5hZ2VyfSBmcm9tICcuLi9pby9pbmRleGVkX2RiJztcbmltcG9ydCB7QnJvd3NlckxvY2FsU3RvcmFnZSwgQnJvd3NlckxvY2FsU3RvcmFnZU1hbmFnZXJ9IGZyb20gJy4uL2lvL2xvY2FsX3N0b3JhZ2UnO1xuaW1wb3J0IHtNb2RlbFN0b3JlTWFuYWdlclJlZ2lzdHJ5fSBmcm9tICcuLi9pby9tb2RlbF9tYW5hZ2VtZW50JztcblxuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybSc7XG5pbXBvcnQge2lzVHlwZWRBcnJheUJyb3dzZXJ9IGZyb20gJy4vaXNfdHlwZWRfYXJyYXlfYnJvd3Nlcic7XG5cbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybUJyb3dzZXIgaW1wbGVtZW50cyBQbGF0Zm9ybSB7XG4gIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgdGhlIGJ1aWx0LWluIGVuY29kZXIgY2FuIGRvIG9ubHkgVVRGLTggZW5jb2RpbmcuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0RW5jb2Rlci9UZXh0RW5jb2RlclxuICBwcml2YXRlIHRleHRFbmNvZGVyOiBUZXh0RW5jb2RlcjtcblxuICAvLyBGb3Igc2V0VGltZW91dEN1c3RvbVxuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VOYW1lID0gJ3NldFRpbWVvdXRDdXN0b20nO1xuICBwcml2YXRlIGZ1bmN0aW9uUmVmczogRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIGhhbmRsZWRNZXNzYWdlQ291bnQgPSAwO1xuICBwcml2YXRlIGhhc0V2ZW50TGlzdGVuZXIgPSBmYWxzZTtcblxuICBmZXRjaChwYXRoOiBzdHJpbmcsIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZmV0Y2gocGF0aCwgaW5pdCk7XG4gIH1cblxuICBub3coKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gIH1cblxuICBlbmNvZGUodGV4dDogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKGVuY29kaW5nICE9PSAndXRmLTgnICYmIGVuY29kaW5nICE9PSAndXRmOCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQnJvd3NlcidzIGVuY29kZXIgb25seSBzdXBwb3J0cyB1dGYtOCwgYnV0IGdvdCAke2VuY29kaW5nfWApO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0RW5jb2RlciA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRleHRFbmNvZGVyLmVuY29kZSh0ZXh0KTtcbiAgfVxuICBkZWNvZGUoYnl0ZXM6IFVpbnQ4QXJyYXksIGVuY29kaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShieXRlcyk7XG4gIH1cblxuICAvLyBJZiB0aGUgc2V0VGltZW91dCBuZXN0aW5nIGxldmVsIGlzIGdyZWF0ZXIgdGhhbiA1IGFuZCB0aW1lb3V0IGlzIGxlc3NcbiAgLy8gdGhhbiA0bXMsIHRpbWVvdXQgd2lsbCBiZSBjbGFtcGVkIHRvIDRtcywgd2hpY2ggaHVydHMgdGhlIHBlcmYuXG4gIC8vIEludGVybGVhdmluZyB3aW5kb3cucG9zdE1lc3NhZ2UgYW5kIHNldFRpbWVvdXQgd2lsbCB0cmljayB0aGUgYnJvd3NlciBhbmRcbiAgLy8gYXZvaWQgdGhlIGNsYW1wLlxuICBzZXRUaW1lb3V0Q3VzdG9tKGZ1bmN0aW9uUmVmOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAhZW52KCkuZ2V0Qm9vbCgnVVNFX1NFVFRJTUVPVVRDVVNUT00nKSkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvblJlZiwgZGVsYXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZnVuY3Rpb25SZWZzLnB1c2goZnVuY3Rpb25SZWYpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKFxuICAgICAgICAgIHtuYW1lOiB0aGlzLm1lc3NhZ2VOYW1lLCBpbmRleDogdGhpcy5mdW5jdGlvblJlZnMubGVuZ3RoIC0gMX0sICcqJyk7XG4gICAgfSwgZGVsYXkpO1xuXG4gICAgaWYgKCF0aGlzLmhhc0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuaGFzRXZlbnRMaXN0ZW5lciA9IHRydWU7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IHdpbmRvdyAmJiBldmVudC5kYXRhLm5hbWUgPT09IHRoaXMubWVzc2FnZU5hbWUpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvblJlZiA9IHRoaXMuZnVuY3Rpb25SZWZzW2V2ZW50LmRhdGEuaW5kZXhdO1xuICAgICAgICAgIGZ1bmN0aW9uUmVmKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVkTWVzc2FnZUNvdW50Kys7XG4gICAgICAgICAgaWYgKHRoaXMuaGFuZGxlZE1lc3NhZ2VDb3VudCA9PT0gdGhpcy5mdW5jdGlvblJlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uUmVmcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVkTWVzc2FnZUNvdW50ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGlzVHlwZWRBcnJheShhOiB1bmtub3duKTogYSBpcyBVaW50OEFycmF5IHwgRmxvYXQzMkFycmF5IHwgSW50MzJBcnJheVxuICAgIHwgVWludDhDbGFtcGVkQXJyYXkge1xuICAgIHJldHVybiBpc1R5cGVkQXJyYXlCcm93c2VyKGEpO1xuICB9XG59XG5cbmlmIChlbnYoKS5nZXQoJ0lTX0JST1dTRVInKSkge1xuICBlbnYoKS5zZXRQbGF0Zm9ybSgnYnJvd3NlcicsIG5ldyBQbGF0Zm9ybUJyb3dzZXIoKSk7XG5cbiAgLy8gUmVnaXN0ZXIgTG9jYWxTdG9yYWdlIElPSGFuZGxlclxuICB0cnkge1xuICAgIE1vZGVsU3RvcmVNYW5hZ2VyUmVnaXN0cnkucmVnaXN0ZXJNYW5hZ2VyKFxuICAgICAgICBCcm93c2VyTG9jYWxTdG9yYWdlLlVSTF9TQ0hFTUUsIG5ldyBCcm93c2VyTG9jYWxTdG9yYWdlTWFuYWdlcigpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cblxuICAvLyBSZWdpc3RlciBJbmRleGVkREIgSU9IYW5kbGVyXG4gIHRyeSB7XG4gICAgTW9kZWxTdG9yZU1hbmFnZXJSZWdpc3RyeS5yZWdpc3Rlck1hbmFnZXIoXG4gICAgICAgIEJyb3dzZXJJbmRleGVkREIuVVJMX1NDSEVNRSwgbmV3IEJyb3dzZXJJbmRleGVkREJNYW5hZ2VyKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\n// We are wrapping this within an object so it can be stubbed by Jasmine.\nexport const getNodeFetch = {\n // tslint:disable-next-line:no-require-imports\n importFetch: () => require('node-fetch')\n};\nlet systemFetch;\n// These getters and setters are for testing so we don't export a mutable\n// variable.\nexport function resetSystemFetch() {\n systemFetch = null;\n}\nexport function setSystemFetch(fetchFn) {\n systemFetch = fetchFn;\n}\nexport function getSystemFetch() {\n return systemFetch;\n}\nexport class PlatformNode {\n constructor() {\n // tslint:disable-next-line:no-require-imports\n this.util = require('util');\n // According to the spec, the built-in encoder can do only UTF-8 encoding.\n // https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/TextEncoder\n this.textEncoder = new this.util.TextEncoder();\n }\n fetch(path, requestInits) {\n if (env().global.fetch != null) {\n return env().global.fetch(path, requestInits);\n }\n if (systemFetch == null) {\n systemFetch = getNodeFetch.importFetch();\n }\n return systemFetch(path, requestInits);\n }\n now() {\n const time = process.hrtime();\n return time[0] * 1000 + time[1] / 1000000;\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Node built-in encoder only supports utf-8, but got ${encoding}`);\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n if (bytes.length === 0) {\n return '';\n }\n return new this.util.TextDecoder(encoding).decode(bytes);\n }\n isTypedArray(a) {\n return this.util.types.isFloat32Array(a)\n || this.util.types.isInt32Array(a)\n || this.util.types.isUint8Array(a)\n || this.util.types.isUint8ClampedArray(a);\n }\n}\nif (env().get('IS_NODE') && !env().get('IS_BROWSER')) {\n env().setPlatform('node', new PlatformNode());\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1fbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvcGxhdGZvcm1zL3BsYXRmb3JtX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR25DLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsOENBQThDO0lBQzlDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0NBQ3pDLENBQUM7QUFHRixJQUFJLFdBQW9CLENBQUM7QUFDekIseUVBQXlFO0FBQ3pFLFlBQVk7QUFDWixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBZ0I7SUFDN0MsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN4QixDQUFDO0FBQ0QsTUFBTSxVQUFVLGNBQWM7SUFDNUIsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sT0FBTyxZQUFZO0lBS3ZCO1FBQ0UsOENBQThDO1FBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsWUFBMEI7UUFDNUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtZQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQy9DO1FBRUQsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEdBQUc7UUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFDbkMsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxzREFBc0QsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFpQixFQUFFLFFBQWdCO1FBQ3hDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELFlBQVksQ0FBQyxDQUFVO1FBRXJCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztlQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2VBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7ZUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBRUQsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7SUFDcEQsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7Q0FDL0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnLi9wbGF0Zm9ybSc7XG5cbi8vIFdlIGFyZSB3cmFwcGluZyB0aGlzIHdpdGhpbiBhbiBvYmplY3Qgc28gaXQgY2FuIGJlIHN0dWJiZWQgYnkgSmFzbWluZS5cbmV4cG9ydCBjb25zdCBnZXROb2RlRmV0Y2ggPSB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1yZXF1aXJlLWltcG9ydHNcbiAgaW1wb3J0RmV0Y2g6ICgpID0+IHJlcXVpcmUoJ25vZGUtZmV0Y2gnKVxufTtcblxudHlwZSBGZXRjaEZuID0gKHVybDogc3RyaW5nLCBpbml0PzogUmVxdWVzdEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+O1xubGV0IHN5c3RlbUZldGNoOiBGZXRjaEZuO1xuLy8gVGhlc2UgZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgZm9yIHRlc3Rpbmcgc28gd2UgZG9uJ3QgZXhwb3J0IGEgbXV0YWJsZVxuLy8gdmFyaWFibGUuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRTeXN0ZW1GZXRjaCgpIHtcbiAgc3lzdGVtRmV0Y2ggPSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldFN5c3RlbUZldGNoKGZldGNoRm46IEZldGNoRm4pIHtcbiAgc3lzdGVtRmV0Y2ggPSBmZXRjaEZuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN5c3RlbUZldGNoKCk6IEZldGNoRm4ge1xuICByZXR1cm4gc3lzdGVtRmV0Y2g7XG59XG5cbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybU5vZGUgaW1wbGVtZW50cyBQbGF0Zm9ybSB7XG4gIHByaXZhdGUgdGV4dEVuY29kZXI6IFRleHRFbmNvZGVyO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHV0aWw6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgdGhpcy51dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuICAgIC8vIEFjY29yZGluZyB0byB0aGUgc3BlYywgdGhlIGJ1aWx0LWluIGVuY29kZXIgY2FuIGRvIG9ubHkgVVRGLTggZW5jb2RpbmcuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHRFbmNvZGVyL1RleHRFbmNvZGVyXG4gICAgdGhpcy50ZXh0RW5jb2RlciA9IG5ldyB0aGlzLnV0aWwuVGV4dEVuY29kZXIoKTtcbiAgfVxuXG4gIGZldGNoKHBhdGg6IHN0cmluZywgcmVxdWVzdEluaXRzPzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKGVudigpLmdsb2JhbC5mZXRjaCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZW52KCkuZ2xvYmFsLmZldGNoKHBhdGgsIHJlcXVlc3RJbml0cyk7XG4gICAgfVxuXG4gICAgaWYgKHN5c3RlbUZldGNoID09IG51bGwpIHtcbiAgICAgIHN5c3RlbUZldGNoID0gZ2V0Tm9kZUZldGNoLmltcG9ydEZldGNoKCk7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW1GZXRjaChwYXRoLCByZXF1ZXN0SW5pdHMpO1xuICB9XG5cbiAgbm93KCk6IG51bWJlciB7XG4gICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgcmV0dXJuIHRpbWVbMF0gKiAxMDAwICsgdGltZVsxXSAvIDEwMDAwMDA7XG4gIH1cblxuICBlbmNvZGUodGV4dDogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKGVuY29kaW5nICE9PSAndXRmLTgnICYmIGVuY29kaW5nICE9PSAndXRmOCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm9kZSBidWlsdC1pbiBlbmNvZGVyIG9ubHkgc3VwcG9ydHMgdXRmLTgsIGJ1dCBnb3QgJHtlbmNvZGluZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGV4dEVuY29kZXIuZW5jb2RlKHRleHQpO1xuICB9XG4gIGRlY29kZShieXRlczogVWludDhBcnJheSwgZW5jb2Rpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMudXRpbC5UZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKGJ5dGVzKTtcbiAgfVxuICBpc1R5cGVkQXJyYXkoYTogdW5rbm93bik6IGEgaXMgRmxvYXQzMkFycmF5IHwgSW50MzJBcnJheSB8IFVpbnQ4QXJyYXlcbiAgICB8IFVpbnQ4Q2xhbXBlZEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy51dGlsLnR5cGVzLmlzRmxvYXQzMkFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNJbnQzMkFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNVaW50OEFycmF5KGEpXG4gICAgICB8fCB0aGlzLnV0aWwudHlwZXMuaXNVaW50OENsYW1wZWRBcnJheShhKTtcbiAgfVxufVxuXG5pZiAoZW52KCkuZ2V0KCdJU19OT0RFJykgJiYgIWVudigpLmdldCgnSVNfQlJPV1NFUicpKSB7XG4gIGVudigpLnNldFBsYXRmb3JtKCdub2RlJywgbmV3IFBsYXRmb3JtTm9kZSgpKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer } from '../tensor';\nimport * as util from '../util';\n/**\n * Creates an empty `tf.TensorBuffer` with the specified `shape` and `dtype`.\n *\n * The values are stored in CPU as `TypedArray`. Fill the buffer using\n * `buffer.set()`, or by modifying directly `buffer.values`.\n *\n * When done, call `buffer.toTensor()` to get an immutable `tf.Tensor` with\n * those values.\n *\n * ```js\n * // Create a buffer and set values at particular indices.\n * const buffer = tf.buffer([2, 2]);\n * buffer.set(3, 0, 0);\n * buffer.set(5, 1, 0);\n *\n * // Convert the buffer back to a tensor.\n * buffer.toTensor().print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The dtype of the buffer. Defaults to 'float32'.\n * @param values The values of the buffer as `TypedArray`. Defaults to\n * zeros.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function buffer(shape, dtype = 'float32', values) {\n dtype = dtype || 'float32';\n util.assertNonNegativeIntegerDimensions(shape);\n return new TensorBuffer(shape, dtype, values);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUNsQixLQUFrQixFQUFFLFFBQVcsU0FBYyxFQUM3QyxNQUF1QjtJQUN6QixLQUFLLEdBQUcsS0FBSyxJQUFJLFNBQWMsQ0FBQztJQUNoQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsT0FBTyxJQUFJLFlBQVksQ0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yQnVmZmVyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgRGF0YVR5cGVNYXAsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW1wdHkgYHRmLlRlbnNvckJ1ZmZlcmAgd2l0aCB0aGUgc3BlY2lmaWVkIGBzaGFwZWAgYW5kIGBkdHlwZWAuXG4gKlxuICogVGhlIHZhbHVlcyBhcmUgc3RvcmVkIGluIENQVSBhcyBgVHlwZWRBcnJheWAuIEZpbGwgdGhlIGJ1ZmZlciB1c2luZ1xuICogYGJ1ZmZlci5zZXQoKWAsIG9yIGJ5IG1vZGlmeWluZyBkaXJlY3RseSBgYnVmZmVyLnZhbHVlc2AuXG4gKlxuICogV2hlbiBkb25lLCBjYWxsIGBidWZmZXIudG9UZW5zb3IoKWAgdG8gZ2V0IGFuIGltbXV0YWJsZSBgdGYuVGVuc29yYCB3aXRoXG4gKiB0aG9zZSB2YWx1ZXMuXG4gKlxuICogYGBganNcbiAqIC8vIENyZWF0ZSBhIGJ1ZmZlciBhbmQgc2V0IHZhbHVlcyBhdCBwYXJ0aWN1bGFyIGluZGljZXMuXG4gKiBjb25zdCBidWZmZXIgPSB0Zi5idWZmZXIoWzIsIDJdKTtcbiAqIGJ1ZmZlci5zZXQoMywgMCwgMCk7XG4gKiBidWZmZXIuc2V0KDUsIDEsIDApO1xuICpcbiAqIC8vIENvbnZlcnQgdGhlIGJ1ZmZlciBiYWNrIHRvIGEgdGVuc29yLlxuICogYnVmZmVyLnRvVGVuc29yKCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZHR5cGUgb2YgdGhlIGJ1ZmZlci4gRGVmYXVsdHMgdG8gJ2Zsb2F0MzInLlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSBidWZmZXIgYXMgYFR5cGVkQXJyYXlgLiBEZWZhdWx0cyB0b1xuICogemVyb3MuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgRGF0YVR5cGUgPSAnZmxvYXQzMic+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgZHR5cGU6IEQgPSAnZmxvYXQzMicgYXMgRCxcbiAgICB2YWx1ZXM/OiBEYXRhVHlwZU1hcFtEXSk6IFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gIGR0eXBlID0gZHR5cGUgfHwgJ2Zsb2F0MzInIGFzIEQ7XG4gIHV0aWwuYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIHJldHVybiBuZXcgVGVuc29yQnVmZmVyPFIsIEQ+KHNoYXBlLCBkdHlwZSwgdmFsdWVzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cast } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Casts a `tf.Tensor` to a new dtype.\n *\n * ```js\n * const x = tf.tensor1d([1.5, 2.5, 3]);\n * tf.cast(x, 'int32').print();\n * ```\n * @param x The input tensor to be casted.\n * @param dtype The dtype to cast the input tensor to.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction cast_(x, dtype) {\n const $x = convertToTensor(x, 'x', 'cast');\n // Sanity checks.\n if (!util.isValidDtype(dtype)) {\n throw new Error(`Failed to cast to unknown dtype ${dtype}`);\n }\n if (dtype === 'string' && $x.dtype !== 'string' ||\n dtype !== 'string' && $x.dtype === 'string') {\n throw new Error('Only strings can be casted to strings');\n }\n const inputs = { x: $x };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, inputs, attrs);\n}\nexport const cast = /* @__PURE__ */ op({ cast_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Nhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxLQUFLLENBQW1CLENBQWUsRUFBRSxLQUFlO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLGlCQUFpQjtJQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUMzQyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUMxRDtJQUVELE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFakMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q2FzdCwgQ2FzdEF0dHJzLCBDYXN0SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDYXN0cyBhIGB0Zi5UZW5zb3JgIHRvIGEgbmV3IGR0eXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEuNSwgMi41LCAzXSk7XG4gKiB0Zi5jYXN0KHgsICdpbnQzMicpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gYmUgY2FzdGVkLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkdHlwZSB0byBjYXN0IHRoZSBpbnB1dCB0ZW5zb3IgdG8uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gY2FzdF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlLCBkdHlwZTogRGF0YVR5cGUpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2FzdCcpO1xuXG4gIC8vIFNhbml0eSBjaGVja3MuXG4gIGlmICghdXRpbC5pc1ZhbGlkRHR5cGUoZHR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY2FzdCB0byB1bmtub3duIGR0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJyAmJiAkeC5kdHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgIGR0eXBlICE9PSAnc3RyaW5nJyAmJiAkeC5kdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3RyaW5ncyBjYW4gYmUgY2FzdGVkIHRvIHN0cmluZ3MnKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQ2FzdElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBDYXN0QXR0cnMgPSB7ZHR5cGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ2FzdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBjYXN0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjYXN0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Identity } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a new tensor with the same values and shape as the specified\n * tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n *\n * x.clone().print();\n * ```\n *\n * @param x The tensor to clone.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction clone_(x) {\n const $x = convertToTensor(x, 'x', 'clone', 'string_or_numeric');\n const inputs = { x: $x };\n // Note this op is called tf.identity in python. Hence the kernel name used\n // here.\n return ENGINE.runKernel(Identity, inputs);\n}\nexport const clone = /* @__PURE__ */ op({ clone_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9jbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsTUFBTSxDQUFtQixDQUFlO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV2QywyRUFBMkU7SUFDM0UsUUFBUTtJQUNSLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJZGVudGl0eSwgSWRlbnRpdHlJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0ZW5zb3Igd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYW5kIHNoYXBlIGFzIHRoZSBzcGVjaWZpZWRcbiAqIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcihbMSwgMl0pO1xuICpcbiAqIHguY2xvbmUoKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byBjbG9uZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNsb25lXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2xvbmUnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgY29uc3QgaW5wdXRzOiBJZGVudGl0eUlucHV0cyA9IHt4OiAkeH07XG5cbiAgLy8gTm90ZSB0aGlzIG9wIGlzIGNhbGxlZCB0Zi5pZGVudGl0eSBpbiBweXRob24uIEhlbmNlIHRoZSBrZXJuZWwgbmFtZSB1c2VkXG4gIC8vIGhlcmUuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElkZW50aXR5LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBjbG9uZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y2xvbmVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Prints information about the `tf.Tensor` including its data.\n *\n * ```js\n * const verbose = true;\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print(verbose);\n * ```\n * @param x The tensor to be printed.\n * @param verbose Whether to print verbose information about the ` Tensor`,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function print(x, verbose = false) {\n console.log(x.toString(verbose));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wcmludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFtQixDQUFJLEVBQUUsT0FBTyxHQUFHLEtBQUs7SUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgdGYuVGVuc29yYCBpbmNsdWRpbmcgaXRzIGRhdGEuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHZlcmJvc2UgPSB0cnVlO1xuICogdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pLnByaW50KHZlcmJvc2UpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgdGVuc29yIHRvIGJlIHByaW50ZWQuXG4gKiBAcGFyYW0gdmVyYm9zZSBXaGV0aGVyIHRvIHByaW50IHZlcmJvc2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGAgVGVuc29yYCxcbiAqIGluY2x1ZGluZyBkdHlwZSBhbmQgc2l6ZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludDxUIGV4dGVuZHMgVGVuc29yPih4OiBULCB2ZXJib3NlID0gZmFsc2UpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coeC50b1N0cmluZyh2ZXJib3NlKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Required side effectful code for tfjs-core\n// Set up Engine and ENV\nimport { getOrMakeEngine } from './engine';\ngetOrMakeEngine();\n// Register backend-agnostic flags.\nimport './flags';\n// Register platforms\nimport './platforms/platform_browser';\nimport './platforms/platform_node';\n// Set up OpHandler\nimport { buffer } from './ops/buffer';\nimport { cast } from './ops/cast';\nimport { clone } from './ops/clone';\nimport { print } from './ops/print';\nimport { setOpHandler } from './tensor';\nconst opHandler = {\n buffer,\n cast,\n clone,\n print\n};\nsetOpHandler(opHandler);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9zaWRlX2VmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2Jhc2Vfc2lkZV9lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDZDQUE2QztBQUU3Qyx3QkFBd0I7QUFDeEIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QyxlQUFlLEVBQUUsQ0FBQztBQUVsQixtQ0FBbUM7QUFDbkMsT0FBTyxTQUFTLENBQUM7QUFDakIscUJBQXFCO0FBQ3JCLE9BQU8sOEJBQThCLENBQUM7QUFDdEMsT0FBTywyQkFBMkIsQ0FBQztBQUVuQyxtQkFBbUI7QUFDbkIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQVksWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE1BQU0sU0FBUyxHQUFjO0lBQzNCLE1BQU07SUFDTixJQUFJO0lBQ0osS0FBSztJQUNMLEtBQUs7Q0FDTixDQUFDO0FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBSZXF1aXJlZCBzaWRlIGVmZmVjdGZ1bCBjb2RlIGZvciB0ZmpzLWNvcmVcblxuLy8gU2V0IHVwIEVuZ2luZSBhbmQgRU5WXG5pbXBvcnQge2dldE9yTWFrZUVuZ2luZX0gZnJvbSAnLi9lbmdpbmUnO1xuZ2V0T3JNYWtlRW5naW5lKCk7XG5cbi8vIFJlZ2lzdGVyIGJhY2tlbmQtYWdub3N0aWMgZmxhZ3MuXG5pbXBvcnQgJy4vZmxhZ3MnO1xuLy8gUmVnaXN0ZXIgcGxhdGZvcm1zXG5pbXBvcnQgJy4vcGxhdGZvcm1zL3BsYXRmb3JtX2Jyb3dzZXInO1xuaW1wb3J0ICcuL3BsYXRmb3Jtcy9wbGF0Zm9ybV9ub2RlJztcblxuLy8gU2V0IHVwIE9wSGFuZGxlclxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vb3BzL2J1ZmZlcic7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vb3BzL2Nhc3QnO1xuaW1wb3J0IHtjbG9uZX0gZnJvbSAnLi9vcHMvY2xvbmUnO1xuaW1wb3J0IHtwcmludH0gZnJvbSAnLi9vcHMvcHJpbnQnO1xuaW1wb3J0IHtPcEhhbmRsZXIsIHNldE9wSGFuZGxlcn0gZnJvbSAnLi90ZW5zb3InO1xuY29uc3Qgb3BIYW5kbGVyOiBPcEhhbmRsZXIgPSB7XG4gIGJ1ZmZlcixcbiAgY2FzdCxcbiAgY2xvbmUsXG4gIHByaW50XG59O1xuc2V0T3BIYW5kbGVyKG9wSGFuZGxlcik7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { env } from './environment';\nimport { setDeprecationWarningFn } from './tensor';\nimport { getTensorsInContainer } from './tensor_util';\n/**\n * Enables production mode which disables correctness checks in favor of\n * performance.\n *\n * @doc {heading: 'Environment'}\n */\nexport function enableProdMode() {\n env().set('PROD', true);\n}\n/**\n * Enables debug mode which will log information about all executed kernels:\n * the elapsed time of the kernel execution, as well as the rank, shape, and\n * size of the output tensor.\n *\n * Debug mode will significantly slow down your application as it will\n * download the result of every operation to the CPU. This should not be used in\n * production. Debug mode does not affect the timing information of the kernel\n * execution as we do not measure download time in the kernel execution time.\n *\n * See also: `tf.profile`, `tf.memory`.\n *\n * @doc {heading: 'Environment'}\n */\nexport function enableDebugMode() {\n env().set('DEBUG', true);\n}\n/** Globally disables deprecation warnings */\nexport function disableDeprecationWarnings() {\n env().set('DEPRECATION_WARNINGS_ENABLED', false);\n console.warn(`TensorFlow.js deprecation warnings have been disabled.`);\n}\n/** Warn users about deprecated functionality. */\nexport function deprecationWarn(msg) {\n if (env().getBool('DEPRECATION_WARNINGS_ENABLED')) {\n console.warn(msg + ' You can disable deprecation warnings with ' +\n 'tf.disableDeprecationWarnings().');\n }\n}\nsetDeprecationWarningFn(deprecationWarn);\n/**\n * Dispose all variables kept in backend engine.\n *\n * @doc {heading: 'Environment'}\n */\nexport function disposeVariables() {\n ENGINE.disposeVariables();\n}\n/**\n * It returns the global engine that keeps track of all tensors and backends.\n *\n * @doc {heading: 'Environment'}\n */\nexport function engine() {\n return ENGINE;\n}\n/**\n * Returns memory info at the current time in the program. The result is an\n * object with the following properties:\n *\n * - `numBytes`: Number of bytes allocated (undisposed) at this time.\n * - `numTensors`: Number of unique tensors allocated.\n * - `numDataBuffers`: Number of unique data buffers allocated\n * (undisposed) at this time, which is ≤ the number of tensors\n * (e.g. `a.reshape(newShape)` makes a new Tensor that shares the same\n * data buffer with `a`).\n * - `unreliable`: True if the memory usage is unreliable. See `reasons` when\n * `unreliable` is true.\n * - `reasons`: `string[]`, reasons why the memory is unreliable, present if\n * `unreliable` is true.\n *\n * WebGL Properties:\n * - `numBytesInGPU`: Number of bytes allocated (undisposed) in the GPU only at\n * this time.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function memory() {\n return ENGINE.memory();\n}\n/**\n * Executes the provided function `f()` and returns a promise that resolves\n * with information about the function's memory use:\n * - `newBytes`: the number of new bytes allocated\n * - `newTensors`: the number of new tensors created\n * - `peakBytes`: the peak number of bytes allocated\n * - `kernels`: an array of objects for each kernel involved that reports\n * their input and output shapes, number of bytes used, and number of new\n * tensors created.\n * - `kernelNames`: an array of unique strings with just the names of the\n * kernels in the `kernels` array.\n *\n * ```js\n * const profile = await tf.profile(() => {\n * const x = tf.tensor1d([1, 2, 3]);\n * let x2 = x.square();\n * x2.dispose();\n * x2 = x.square();\n * x2.dispose();\n * return x;\n * });\n *\n * console.log(`newBytes: ${profile.newBytes}`);\n * console.log(`newTensors: ${profile.newTensors}`);\n * console.log(`byte usage over all kernels: ${profile.kernels.map(k =>\n * k.totalBytesSnapshot)}`);\n * ```\n *\n *\n * @doc {heading: 'Performance', subheading: 'Profile'}\n */\nexport function profile(f) {\n return ENGINE.profile(f);\n}\n/**\n * Executes the provided function `fn` and after it is executed, cleans up all\n * intermediate tensors allocated by `fn` except those returned by `fn`.\n * `fn` must not return a Promise (async functions not allowed). The returned\n * result can be a complex object.\n *\n * Using this method helps avoid memory leaks. In general, wrap calls to\n * operations in `tf.tidy` for automatic memory cleanup.\n *\n * NOTE: Variables do *not* get cleaned up when inside a tidy(). If you want to\n * dispose variables, please use `tf.disposeVariables` or call dispose()\n * directly on variables.\n *\n * ```js\n * // y = 2 ^ 2 + 1\n * const y = tf.tidy(() => {\n * // a, b, and one will be cleaned up when the tidy ends.\n * const one = tf.scalar(1);\n * const a = tf.scalar(2);\n * const b = a.square();\n *\n * console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n * // The value returned inside the tidy function will return\n * // through the tidy, in this case to the variable y.\n * return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * y.print();\n * ```\n *\n * @param nameOrFn The name of the closure, or the function to execute.\n * If a name is provided, the 2nd argument should be the function.\n * If debug mode is on, the timing and the memory usage of the function\n * will be tracked and displayed on the console using the provided name.\n * @param fn The function to execute.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function tidy(nameOrFn, fn) {\n return ENGINE.tidy(nameOrFn, fn);\n}\n/**\n * Disposes any `tf.Tensor`s found within the provided object.\n *\n * @param container an object that may be a `tf.Tensor` or may directly\n * contain `tf.Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. If\n * the object is not a `tf.Tensor` or does not contain `Tensors`, nothing\n * happens. In general it is safe to pass any object here, except that\n * `Promise`s are not supported.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function dispose(container) {\n const tensors = getTensorsInContainer(container);\n tensors.forEach(tensor => tensor.dispose());\n}\n/**\n * Keeps a `tf.Tensor` generated inside a `tf.tidy` from being disposed\n * automatically.\n *\n * ```js\n * let b;\n * const y = tf.tidy(() => {\n * const one = tf.scalar(1);\n * const a = tf.scalar(2);\n *\n * // b will not be cleaned up by the tidy. a and one will be cleaned up\n * // when the tidy ends.\n * b = tf.keep(a.square());\n *\n * console.log('numTensors (in tidy): ' + tf.memory().numTensors);\n *\n * // The value returned inside the tidy function will return\n * // through the tidy, in this case to the variable y.\n * return b.add(one);\n * });\n *\n * console.log('numTensors (outside tidy): ' + tf.memory().numTensors);\n * console.log('y:');\n * y.print();\n * console.log('b:');\n * b.print();\n * ```\n *\n * @param result The tensor to keep from being disposed.\n *\n * @doc {heading: 'Performance', subheading: 'Memory'}\n */\nexport function keep(result) {\n return ENGINE.keep(result);\n}\n/**\n * Executes `f()` and returns a promise that resolves with timing\n * information.\n *\n * The result is an object with the following properties:\n *\n * - `wallMs`: Wall execution time.\n * - `kernelMs`: Kernel execution time, ignoring data transfer. If using the\n * WebGL backend and the query timer extension is not available, this will\n * return an error object.\n * - On `WebGL` The following additional properties exist:\n * - `uploadWaitMs`: CPU blocking time on texture uploads.\n * - `downloadWaitMs`: CPU blocking time on texture downloads (readPixels).\n *\n * ```js\n * const x = tf.randomNormal([20, 20]);\n * const time = await tf.time(() => x.matMul(x));\n *\n * console.log(`kernelMs: ${time.kernelMs}, wallTimeMs: ${time.wallMs}`);\n * ```\n *\n * @param f The function to execute and time.\n *\n * @doc {heading: 'Performance', subheading: 'Timing'}\n */\nexport function time(f) {\n return ENGINE.time(f);\n}\n/**\n * Sets the backend (cpu, webgl, wasm, etc) responsible for creating tensors and\n * executing operations on those tensors. Returns a promise that resolves\n * to a boolean if the backend initialization was successful.\n *\n * Note this disposes the current backend, if any, as well as any tensors\n * associated with it. A new backend is initialized, even if it is of the\n * same type as the previous one.\n *\n * @param backendName The name of the backend. Currently supports\n * `'webgl'|'cpu'` in the browser, `'tensorflow'` under node.js\n * (requires tfjs-node), and `'wasm'` (requires tfjs-backend-wasm).\n *\n * @doc {heading: 'Backends'}\n */\nexport function setBackend(backendName) {\n return ENGINE.setBackend(backendName);\n}\n/**\n * Returns a promise that resolves when the currently selected backend (or the\n * highest priority one) has initialized. Await this promise when you are using\n * a backend that has async initialization.\n *\n * @doc {heading: 'Backends'}\n */\nexport function ready() {\n return ENGINE.ready();\n}\n/**\n * Returns the current backend name (cpu, webgl, etc). The backend is\n * responsible for creating tensors and executing operations on those tensors.\n *\n * @doc {heading: 'Backends'}\n */\nexport function getBackend() {\n return ENGINE.backendName;\n}\n/**\n * Removes a backend and the registered factory.\n *\n * @doc {heading: 'Backends'}\n */\nexport function removeBackend(name) {\n ENGINE.removeBackend(name);\n}\n/**\n * Finds the backend registered under the provided name. Returns null if the\n * name is not in the registry, or the registration hasn't finished yet.\n */\nexport function findBackend(name) {\n return ENGINE.findBackend(name);\n}\n/**\n * Finds the backend factory registered under the provided name. Returns a\n * function that produces a new backend when called. Returns null if the name\n * is not in the registry.\n */\nexport function findBackendFactory(name) {\n return ENGINE.findBackendFactory(name);\n}\n/**\n * Registers a global backend. The registration should happen when importing\n * a module file (e.g. when importing `backend_webgl.ts`), and is used for\n * modular builds (e.g. custom tfjs bundle with only webgl support).\n *\n * @param factory The backend factory function. When called, it should\n * return a backend instance, or a promise of an instance.\n * @param priority The priority of the backend (higher = more important).\n * In case multiple backends are registered, the priority is used to find\n * the best backend. Defaults to 1.\n * @return False if there is already a registered backend under this name, true\n * if not.\n *\n * @doc {heading: 'Backends'}\n */\nexport function registerBackend(name, factory, priority = 1) {\n return ENGINE.registerBackend(name, factory, priority);\n}\n/**\n * Gets the current backend. If no backends have been initialized, this will\n * attempt to initialize the best backend. Will throw an error if the highest\n * priority backend has async initialization, in which case you should call\n * 'await tf.ready()' before running other code.\n *\n * @doc {heading: 'Backends'}\n */\nexport function backend() {\n return ENGINE.backend;\n}\n/**\n * Sets the global platform.\n *\n * @param platformName The name of this platform.\n * @param platform A platform implementation.\n */\nexport function setPlatform(platformName, platform) {\n env().setPlatform(platformName, platform);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvZ2xvYmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsTUFBTSxFQUF1RCxNQUFNLFVBQVUsQ0FBQztBQUN0RixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xDLE9BQU8sRUFBQyx1QkFBdUIsRUFBUyxNQUFNLFVBQVUsQ0FBQztBQUV6RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFcEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGVBQWU7SUFDN0IsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN6QyxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQ1IsR0FBRyxHQUFHLDZDQUE2QztZQUNuRCxrQ0FBa0MsQ0FBQyxDQUFDO0tBQ3pDO0FBQ0gsQ0FBQztBQUNELHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXpDOzs7O0dBSUc7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LEVBQUUsUUFBa0I7SUFDbEUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbEJhY2tlbmR9IGZyb20gJy4vYmFja2VuZHMvYmFja2VuZCc7XG5pbXBvcnQge0VOR0lORSwgRW5naW5lLCBNZW1vcnlJbmZvLCBQcm9maWxlSW5mbywgU2NvcGVGbiwgVGltaW5nSW5mb30gZnJvbSAnLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICcuL3BsYXRmb3Jtcy9wbGF0Zm9ybSc7XG5pbXBvcnQge3NldERlcHJlY2F0aW9uV2FybmluZ0ZuLCBUZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yQ29udGFpbmVyfSBmcm9tICcuL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2dldFRlbnNvcnNJbkNvbnRhaW5lcn0gZnJvbSAnLi90ZW5zb3JfdXRpbCc7XG5cbi8qKlxuICogRW5hYmxlcyBwcm9kdWN0aW9uIG1vZGUgd2hpY2ggZGlzYWJsZXMgY29ycmVjdG5lc3MgY2hlY2tzIGluIGZhdm9yIG9mXG4gKiBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUHJvZE1vZGUoKTogdm9pZCB7XG4gIGVudigpLnNldCgnUFJPRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgZGVidWcgbW9kZSB3aGljaCB3aWxsIGxvZyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgZXhlY3V0ZWQga2VybmVsczpcbiAqIHRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIGtlcm5lbCBleGVjdXRpb24sIGFzIHdlbGwgYXMgdGhlIHJhbmssIHNoYXBlLCBhbmRcbiAqIHNpemUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogRGVidWcgbW9kZSB3aWxsIHNpZ25pZmljYW50bHkgc2xvdyBkb3duIHlvdXIgYXBwbGljYXRpb24gYXMgaXQgd2lsbFxuICogZG93bmxvYWQgdGhlIHJlc3VsdCBvZiBldmVyeSBvcGVyYXRpb24gdG8gdGhlIENQVS4gVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgaW5cbiAqIHByb2R1Y3Rpb24uIERlYnVnIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZSB0aW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIGtlcm5lbFxuICogZXhlY3V0aW9uIGFzIHdlIGRvIG5vdCBtZWFzdXJlIGRvd25sb2FkIHRpbWUgaW4gdGhlIGtlcm5lbCBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBTZWUgYWxzbzogYHRmLnByb2ZpbGVgLCBgdGYubWVtb3J5YC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRGVidWdNb2RlKCk6IHZvaWQge1xuICBlbnYoKS5zZXQoJ0RFQlVHJywgdHJ1ZSk7XG59XG5cbi8qKiBHbG9iYWxseSBkaXNhYmxlcyBkZXByZWNhdGlvbiB3YXJuaW5ncyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzKCk6IHZvaWQge1xuICBlbnYoKS5zZXQoJ0RFUFJFQ0FUSU9OX1dBUk5JTkdTX0VOQUJMRUQnLCBmYWxzZSk7XG4gIGNvbnNvbGUud2FybihgVGVuc29yRmxvdy5qcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBoYXZlIGJlZW4gZGlzYWJsZWQuYCk7XG59XG5cbi8qKiBXYXJuIHVzZXJzIGFib3V0IGRlcHJlY2F0ZWQgZnVuY3Rpb25hbGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGlvbldhcm4obXNnOiBzdHJpbmcpIHtcbiAgaWYgKGVudigpLmdldEJvb2woJ0RFUFJFQ0FUSU9OX1dBUk5JTkdTX0VOQUJMRUQnKSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgbXNnICsgJyBZb3UgY2FuIGRpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCAnICtcbiAgICAgICAgJ3RmLmRpc2FibGVEZXByZWNhdGlvbldhcm5pbmdzKCkuJyk7XG4gIH1cbn1cbnNldERlcHJlY2F0aW9uV2FybmluZ0ZuKGRlcHJlY2F0aW9uV2Fybik7XG5cbi8qKlxuICogRGlzcG9zZSBhbGwgdmFyaWFibGVzIGtlcHQgaW4gYmFja2VuZCBlbmdpbmUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Vudmlyb25tZW50J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VWYXJpYWJsZXMoKTogdm9pZCB7XG4gIEVOR0lORS5kaXNwb3NlVmFyaWFibGVzKCk7XG59XG5cbi8qKlxuICogSXQgcmV0dXJucyB0aGUgZ2xvYmFsIGVuZ2luZSB0aGF0IGtlZXBzIHRyYWNrIG9mIGFsbCB0ZW5zb3JzIGFuZCBiYWNrZW5kcy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnRW52aXJvbm1lbnQnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5naW5lKCk6IEVuZ2luZSB7XG4gIHJldHVybiBFTkdJTkU7XG59XG5cbi8qKlxuICogUmV0dXJucyBtZW1vcnkgaW5mbyBhdCB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBwcm9ncmFtLiBUaGUgcmVzdWx0IGlzIGFuXG4gKiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogLSBgbnVtQnl0ZXNgOiBOdW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkICh1bmRpc3Bvc2VkKSBhdCB0aGlzIHRpbWUuXG4gKiAtIGBudW1UZW5zb3JzYDogTnVtYmVyIG9mIHVuaXF1ZSB0ZW5zb3JzIGFsbG9jYXRlZC5cbiAqIC0gYG51bURhdGFCdWZmZXJzYDogTnVtYmVyIG9mIHVuaXF1ZSBkYXRhIGJ1ZmZlcnMgYWxsb2NhdGVkXG4gKiAgICh1bmRpc3Bvc2VkKSBhdCB0aGlzIHRpbWUsIHdoaWNoIGlzIOKJpCB0aGUgbnVtYmVyIG9mIHRlbnNvcnNcbiAqICAgKGUuZy4gYGEucmVzaGFwZShuZXdTaGFwZSlgIG1ha2VzIGEgbmV3IFRlbnNvciB0aGF0IHNoYXJlcyB0aGUgc2FtZVxuICogICBkYXRhIGJ1ZmZlciB3aXRoIGBhYCkuXG4gKiAtIGB1bnJlbGlhYmxlYDogVHJ1ZSBpZiB0aGUgbWVtb3J5IHVzYWdlIGlzIHVucmVsaWFibGUuIFNlZSBgcmVhc29uc2Agd2hlblxuICogICAgYHVucmVsaWFibGVgIGlzIHRydWUuXG4gKiAtIGByZWFzb25zYDogYHN0cmluZ1tdYCwgcmVhc29ucyB3aHkgdGhlIG1lbW9yeSBpcyB1bnJlbGlhYmxlLCBwcmVzZW50IGlmXG4gKiAgICBgdW5yZWxpYWJsZWAgaXMgdHJ1ZS5cbiAqXG4gKiBXZWJHTCBQcm9wZXJ0aWVzOlxuICogLSBgbnVtQnl0ZXNJbkdQVWA6IE51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgKHVuZGlzcG9zZWQpIGluIHRoZSBHUFUgb25seSBhdFxuICogICAgIHRoaXMgdGltZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnUGVyZm9ybWFuY2UnLCBzdWJoZWFkaW5nOiAnTWVtb3J5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeSgpOiBNZW1vcnlJbmZvIHtcbiAgcmV0dXJuIEVOR0lORS5tZW1vcnkoKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gYGYoKWAgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAqIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uJ3MgbWVtb3J5IHVzZTpcbiAqIC0gYG5ld0J5dGVzYDogdGhlIG51bWJlciBvZiBuZXcgYnl0ZXMgYWxsb2NhdGVkXG4gKiAtIGBuZXdUZW5zb3JzYDogdGhlIG51bWJlciBvZiBuZXcgdGVuc29ycyBjcmVhdGVkXG4gKiAtIGBwZWFrQnl0ZXNgOiB0aGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkXG4gKiAtIGBrZXJuZWxzYDogYW4gYXJyYXkgb2Ygb2JqZWN0cyBmb3IgZWFjaCBrZXJuZWwgaW52b2x2ZWQgdGhhdCByZXBvcnRzXG4gKiB0aGVpciBpbnB1dCBhbmQgb3V0cHV0IHNoYXBlcywgbnVtYmVyIG9mIGJ5dGVzIHVzZWQsIGFuZCBudW1iZXIgb2YgbmV3XG4gKiB0ZW5zb3JzIGNyZWF0ZWQuXG4gKiAtIGBrZXJuZWxOYW1lc2A6IGFuIGFycmF5IG9mIHVuaXF1ZSBzdHJpbmdzIHdpdGgganVzdCB0aGUgbmFtZXMgb2YgdGhlXG4gKiBrZXJuZWxzIGluIHRoZSBga2VybmVsc2AgYXJyYXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0Zi5wcm9maWxlKCgpID0+IHtcbiAqICAgY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiAgIGxldCB4MiA9IHguc3F1YXJlKCk7XG4gKiAgIHgyLmRpc3Bvc2UoKTtcbiAqICAgeDIgPSB4LnNxdWFyZSgpO1xuICogICB4Mi5kaXNwb3NlKCk7XG4gKiAgIHJldHVybiB4O1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2coYG5ld0J5dGVzOiAke3Byb2ZpbGUubmV3Qnl0ZXN9YCk7XG4gKiBjb25zb2xlLmxvZyhgbmV3VGVuc29yczogJHtwcm9maWxlLm5ld1RlbnNvcnN9YCk7XG4gKiBjb25zb2xlLmxvZyhgYnl0ZSB1c2FnZSBvdmVyIGFsbCBrZXJuZWxzOiAke3Byb2ZpbGUua2VybmVscy5tYXAoayA9PlxuICogay50b3RhbEJ5dGVzU25hcHNob3QpfWApO1xuICogYGBgXG4gKlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdQcm9maWxlJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGUoZjogKCkgPT4gKFRlbnNvckNvbnRhaW5lciB8IFByb21pc2U8VGVuc29yQ29udGFpbmVyPikpOlxuICAgIFByb21pc2U8UHJvZmlsZUluZm8+IHtcbiAgcmV0dXJuIEVOR0lORS5wcm9maWxlKGYpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBgZm5gIGFuZCBhZnRlciBpdCBpcyBleGVjdXRlZCwgY2xlYW5zIHVwIGFsbFxuICogaW50ZXJtZWRpYXRlIHRlbnNvcnMgYWxsb2NhdGVkIGJ5IGBmbmAgZXhjZXB0IHRob3NlIHJldHVybmVkIGJ5IGBmbmAuXG4gKiBgZm5gIG11c3Qgbm90IHJldHVybiBhIFByb21pc2UgKGFzeW5jIGZ1bmN0aW9ucyBub3QgYWxsb3dlZCkuIFRoZSByZXR1cm5lZFxuICogcmVzdWx0IGNhbiBiZSBhIGNvbXBsZXggb2JqZWN0LlxuICpcbiAqIFVzaW5nIHRoaXMgbWV0aG9kIGhlbHBzIGF2b2lkIG1lbW9yeSBsZWFrcy4gSW4gZ2VuZXJhbCwgd3JhcCBjYWxscyB0b1xuICogb3BlcmF0aW9ucyBpbiBgdGYudGlkeWAgZm9yIGF1dG9tYXRpYyBtZW1vcnkgY2xlYW51cC5cbiAqXG4gKiBOT1RFOiBWYXJpYWJsZXMgZG8gKm5vdCogZ2V0IGNsZWFuZWQgdXAgd2hlbiBpbnNpZGUgYSB0aWR5KCkuIElmIHlvdSB3YW50IHRvXG4gKiBkaXNwb3NlIHZhcmlhYmxlcywgcGxlYXNlIHVzZSBgdGYuZGlzcG9zZVZhcmlhYmxlc2Agb3IgY2FsbCBkaXNwb3NlKClcbiAqIGRpcmVjdGx5IG9uIHZhcmlhYmxlcy5cbiAqXG4gKiBgYGBqc1xuICogLy8geSA9IDIgXiAyICsgMVxuICogY29uc3QgeSA9IHRmLnRpZHkoKCkgPT4ge1xuICogICAvLyBhLCBiLCBhbmQgb25lIHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIHRoZSB0aWR5IGVuZHMuXG4gKiAgIGNvbnN0IG9uZSA9IHRmLnNjYWxhcigxKTtcbiAqICAgY29uc3QgYSA9IHRmLnNjYWxhcigyKTtcbiAqICAgY29uc3QgYiA9IGEuc3F1YXJlKCk7XG4gKlxuICogICBjb25zb2xlLmxvZygnbnVtVGVuc29ycyAoaW4gdGlkeSk6ICcgKyB0Zi5tZW1vcnkoKS5udW1UZW5zb3JzKTtcbiAqXG4gKiAgIC8vIFRoZSB2YWx1ZSByZXR1cm5lZCBpbnNpZGUgdGhlIHRpZHkgZnVuY3Rpb24gd2lsbCByZXR1cm5cbiAqICAgLy8gdGhyb3VnaCB0aGUgdGlkeSwgaW4gdGhpcyBjYXNlIHRvIHRoZSB2YXJpYWJsZSB5LlxuICogICByZXR1cm4gYi5hZGQob25lKTtcbiAqIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKCdudW1UZW5zb3JzIChvdXRzaWRlIHRpZHkpOiAnICsgdGYubWVtb3J5KCkubnVtVGVuc29ycyk7XG4gKiB5LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbmFtZU9yRm4gVGhlIG5hbWUgb2YgdGhlIGNsb3N1cmUsIG9yIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogICAgIElmIGEgbmFtZSBpcyBwcm92aWRlZCwgdGhlIDJuZCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIGZ1bmN0aW9uLlxuICogICAgIElmIGRlYnVnIG1vZGUgaXMgb24sIHRoZSB0aW1pbmcgYW5kIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGZ1bmN0aW9uXG4gKiAgICAgd2lsbCBiZSB0cmFja2VkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIGNvbnNvbGUgdXNpbmcgdGhlIHByb3ZpZGVkIG5hbWUuXG4gKiBAcGFyYW0gZm4gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1BlcmZvcm1hbmNlJywgc3ViaGVhZGluZzogJ01lbW9yeSd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWR5PFQgZXh0ZW5kcyBUZW5zb3JDb250YWluZXI+KFxuICAgIG5hbWVPckZuOiBzdHJpbmd8U2NvcGVGbjxUPiwgZm4/OiBTY29wZUZuPFQ+KTogVCB7XG4gIHJldHVybiBFTkdJTkUudGlkeShuYW1lT3JGbiwgZm4pO1xufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFueSBgdGYuVGVuc29yYHMgZm91bmQgd2l0aGluIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGNvbnRhaW5lciBhbiBvYmplY3QgdGhhdCBtYXkgYmUgYSBgdGYuVGVuc29yYCBvciBtYXkgZGlyZWN0bHlcbiAqICAgICBjb250YWluIGB0Zi5UZW5zb3Jgcywgc3VjaCBhcyBhIGBUZW5zb3JbXWAgb3IgYHtrZXk6IFRlbnNvciwgLi4ufWAuIElmXG4gKiAgICAgdGhlIG9iamVjdCBpcyBub3QgYSBgdGYuVGVuc29yYCBvciBkb2VzIG5vdCBjb250YWluIGBUZW5zb3JzYCwgbm90aGluZ1xuICogICAgIGhhcHBlbnMuIEluIGdlbmVyYWwgaXQgaXMgc2FmZSB0byBwYXNzIGFueSBvYmplY3QgaGVyZSwgZXhjZXB0IHRoYXRcbiAqICAgICBgUHJvbWlzZWBzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdNZW1vcnknfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZShjb250YWluZXI6IFRlbnNvckNvbnRhaW5lcikge1xuICBjb25zdCB0ZW5zb3JzID0gZ2V0VGVuc29yc0luQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHRlbnNvcnMuZm9yRWFjaCh0ZW5zb3IgPT4gdGVuc29yLmRpc3Bvc2UoKSk7XG59XG5cbi8qKlxuICogS2VlcHMgYSBgdGYuVGVuc29yYCBnZW5lcmF0ZWQgaW5zaWRlIGEgYHRmLnRpZHlgIGZyb20gYmVpbmcgZGlzcG9zZWRcbiAqIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogYGBganNcbiAqIGxldCBiO1xuICogY29uc3QgeSA9IHRmLnRpZHkoKCkgPT4ge1xuICogICBjb25zdCBvbmUgPSB0Zi5zY2FsYXIoMSk7XG4gKiAgIGNvbnN0IGEgPSB0Zi5zY2FsYXIoMik7XG4gKlxuICogICAvLyBiIHdpbGwgbm90IGJlIGNsZWFuZWQgdXAgYnkgdGhlIHRpZHkuIGEgYW5kIG9uZSB3aWxsIGJlIGNsZWFuZWQgdXBcbiAqICAgLy8gd2hlbiB0aGUgdGlkeSBlbmRzLlxuICogICBiID0gdGYua2VlcChhLnNxdWFyZSgpKTtcbiAqXG4gKiAgIGNvbnNvbGUubG9nKCdudW1UZW5zb3JzIChpbiB0aWR5KTogJyArIHRmLm1lbW9yeSgpLm51bVRlbnNvcnMpO1xuICpcbiAqICAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGluc2lkZSB0aGUgdGlkeSBmdW5jdGlvbiB3aWxsIHJldHVyblxuICogICAvLyB0aHJvdWdoIHRoZSB0aWR5LCBpbiB0aGlzIGNhc2UgdG8gdGhlIHZhcmlhYmxlIHkuXG4gKiAgIHJldHVybiBiLmFkZChvbmUpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2coJ251bVRlbnNvcnMgKG91dHNpZGUgdGlkeSk6ICcgKyB0Zi5tZW1vcnkoKS5udW1UZW5zb3JzKTtcbiAqIGNvbnNvbGUubG9nKCd5OicpO1xuICogeS5wcmludCgpO1xuICogY29uc29sZS5sb2coJ2I6Jyk7XG4gKiBiLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcmVzdWx0IFRoZSB0ZW5zb3IgdG8ga2VlcCBmcm9tIGJlaW5nIGRpc3Bvc2VkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdQZXJmb3JtYW5jZScsIHN1YmhlYWRpbmc6ICdNZW1vcnknfVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcDxUIGV4dGVuZHMgVGVuc29yPihyZXN1bHQ6IFQpOiBUIHtcbiAgcmV0dXJuIEVOR0lORS5rZWVwKHJlc3VsdCk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYGYoKWAgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aW1pbmdcbiAqIGluZm9ybWF0aW9uLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqIC0gYHdhbGxNc2A6IFdhbGwgZXhlY3V0aW9uIHRpbWUuXG4gKiAtIGBrZXJuZWxNc2A6IEtlcm5lbCBleGVjdXRpb24gdGltZSwgaWdub3JpbmcgZGF0YSB0cmFuc2Zlci4gSWYgdXNpbmcgdGhlXG4gKiBXZWJHTCBiYWNrZW5kIGFuZCB0aGUgcXVlcnkgdGltZXIgZXh0ZW5zaW9uIGlzIG5vdCBhdmFpbGFibGUsIHRoaXMgd2lsbFxuICogcmV0dXJuIGFuIGVycm9yIG9iamVjdC5cbiAqIC0gT24gYFdlYkdMYCBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBleGlzdDpcbiAqICAgLSBgdXBsb2FkV2FpdE1zYDogQ1BVIGJsb2NraW5nIHRpbWUgb24gdGV4dHVyZSB1cGxvYWRzLlxuICogICAtIGBkb3dubG9hZFdhaXRNc2A6IENQVSBibG9ja2luZyB0aW1lIG9uIHRleHR1cmUgZG93bmxvYWRzIChyZWFkUGl4ZWxzKS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnJhbmRvbU5vcm1hbChbMjAsIDIwXSk7XG4gKiBjb25zdCB0aW1lID0gYXdhaXQgdGYudGltZSgoKSA9PiB4Lm1hdE11bCh4KSk7XG4gKlxuICogY29uc29sZS5sb2coYGtlcm5lbE1zOiAke3RpbWUua2VybmVsTXN9LCB3YWxsVGltZU1zOiAke3RpbWUud2FsbE1zfWApO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYW5kIHRpbWUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1BlcmZvcm1hbmNlJywgc3ViaGVhZGluZzogJ1RpbWluZyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lKGY6ICgpID0+IHZvaWQpOiBQcm9taXNlPFRpbWluZ0luZm8+IHtcbiAgcmV0dXJuIEVOR0lORS50aW1lKGYpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGJhY2tlbmQgKGNwdSwgd2ViZ2wsIHdhc20sIGV0YykgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRlbnNvcnMgYW5kXG4gKiBleGVjdXRpbmcgb3BlcmF0aW9ucyBvbiB0aG9zZSB0ZW5zb3JzLiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gKiB0byBhIGJvb2xlYW4gaWYgdGhlIGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gKlxuICogTm90ZSB0aGlzIGRpc3Bvc2VzIHRoZSBjdXJyZW50IGJhY2tlbmQsIGlmIGFueSwgYXMgd2VsbCBhcyBhbnkgdGVuc29yc1xuICogYXNzb2NpYXRlZCB3aXRoIGl0LiBBIG5ldyBiYWNrZW5kIGlzIGluaXRpYWxpemVkLCBldmVuIGlmIGl0IGlzIG9mIHRoZVxuICogc2FtZSB0eXBlIGFzIHRoZSBwcmV2aW91cyBvbmUuXG4gKlxuICogQHBhcmFtIGJhY2tlbmROYW1lIFRoZSBuYW1lIG9mIHRoZSBiYWNrZW5kLiBDdXJyZW50bHkgc3VwcG9ydHNcbiAqICAgICBgJ3dlYmdsJ3wnY3B1J2AgaW4gdGhlIGJyb3dzZXIsIGAndGVuc29yZmxvdydgIHVuZGVyIG5vZGUuanNcbiAqICAgICAocmVxdWlyZXMgdGZqcy1ub2RlKSwgYW5kIGAnd2FzbSdgIChyZXF1aXJlcyB0ZmpzLWJhY2tlbmQtd2FzbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEJhY2tlbmQoYmFja2VuZE5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gRU5HSU5FLnNldEJhY2tlbmQoYmFja2VuZE5hbWUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhY2tlbmQgKG9yIHRoZVxuICogaGlnaGVzdCBwcmlvcml0eSBvbmUpIGhhcyBpbml0aWFsaXplZC4gQXdhaXQgdGhpcyBwcm9taXNlIHdoZW4geW91IGFyZSB1c2luZ1xuICogYSBiYWNrZW5kIHRoYXQgaGFzIGFzeW5jIGluaXRpYWxpemF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdCYWNrZW5kcyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIEVOR0lORS5yZWFkeSgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgYmFja2VuZCBuYW1lIChjcHUsIHdlYmdsLCBldGMpLiBUaGUgYmFja2VuZCBpc1xuICogcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRlbnNvcnMgYW5kIGV4ZWN1dGluZyBvcGVyYXRpb25zIG9uIHRob3NlIHRlbnNvcnMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhY2tlbmQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIEVOR0lORS5iYWNrZW5kTmFtZTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGEgYmFja2VuZCBhbmQgdGhlIHJlZ2lzdGVyZWQgZmFjdG9yeS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnQmFja2VuZHMnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQmFja2VuZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgRU5HSU5FLnJlbW92ZUJhY2tlbmQobmFtZSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhY2tlbmQgcmVnaXN0ZXJlZCB1bmRlciB0aGUgcHJvdmlkZWQgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZVxuICogbmFtZSBpcyBub3QgaW4gdGhlIHJlZ2lzdHJ5LCBvciB0aGUgcmVnaXN0cmF0aW9uIGhhc24ndCBmaW5pc2hlZCB5ZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmFja2VuZChuYW1lOiBzdHJpbmcpOiBLZXJuZWxCYWNrZW5kIHtcbiAgcmV0dXJuIEVOR0lORS5maW5kQmFja2VuZChuYW1lKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYmFja2VuZCBmYWN0b3J5IHJlZ2lzdGVyZWQgdW5kZXIgdGhlIHByb3ZpZGVkIG5hbWUuIFJldHVybnMgYVxuICogZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhIG5ldyBiYWNrZW5kIHdoZW4gY2FsbGVkLiBSZXR1cm5zIG51bGwgaWYgdGhlIG5hbWVcbiAqIGlzIG5vdCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmFja2VuZEZhY3RvcnkobmFtZTogc3RyaW5nKTogKCkgPT5cbiAgICBLZXJuZWxCYWNrZW5kIHwgUHJvbWlzZTxLZXJuZWxCYWNrZW5kPiB7XG4gIHJldHVybiBFTkdJTkUuZmluZEJhY2tlbmRGYWN0b3J5KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGdsb2JhbCBiYWNrZW5kLiBUaGUgcmVnaXN0cmF0aW9uIHNob3VsZCBoYXBwZW4gd2hlbiBpbXBvcnRpbmdcbiAqIGEgbW9kdWxlIGZpbGUgKGUuZy4gd2hlbiBpbXBvcnRpbmcgYGJhY2tlbmRfd2ViZ2wudHNgKSwgYW5kIGlzIHVzZWQgZm9yXG4gKiBtb2R1bGFyIGJ1aWxkcyAoZS5nLiBjdXN0b20gdGZqcyBidW5kbGUgd2l0aCBvbmx5IHdlYmdsIHN1cHBvcnQpLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IFRoZSBiYWNrZW5kIGZhY3RvcnkgZnVuY3Rpb24uIFdoZW4gY2FsbGVkLCBpdCBzaG91bGRcbiAqIHJldHVybiBhIGJhY2tlbmQgaW5zdGFuY2UsIG9yIGEgcHJvbWlzZSBvZiBhbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwcmlvcml0eSBUaGUgcHJpb3JpdHkgb2YgdGhlIGJhY2tlbmQgKGhpZ2hlciA9IG1vcmUgaW1wb3J0YW50KS5cbiAqICAgICBJbiBjYXNlIG11bHRpcGxlIGJhY2tlbmRzIGFyZSByZWdpc3RlcmVkLCB0aGUgcHJpb3JpdHkgaXMgdXNlZCB0byBmaW5kXG4gKiAgICAgdGhlIGJlc3QgYmFja2VuZC4gRGVmYXVsdHMgdG8gMS5cbiAqIEByZXR1cm4gRmFsc2UgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgYmFja2VuZCB1bmRlciB0aGlzIG5hbWUsIHRydWVcbiAqICAgICBpZiBub3QuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQmFja2VuZChcbiAgICBuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IEtlcm5lbEJhY2tlbmQgfCBQcm9taXNlPEtlcm5lbEJhY2tlbmQ+LFxuICAgIHByaW9yaXR5ID0gMSk6IGJvb2xlYW4ge1xuICByZXR1cm4gRU5HSU5FLnJlZ2lzdGVyQmFja2VuZChuYW1lLCBmYWN0b3J5LCBwcmlvcml0eSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBiYWNrZW5kLiBJZiBubyBiYWNrZW5kcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHRoaXMgd2lsbFxuICogYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBiZXN0IGJhY2tlbmQuIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGhpZ2hlc3RcbiAqIHByaW9yaXR5IGJhY2tlbmQgaGFzIGFzeW5jIGluaXRpYWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2FsbFxuICogJ2F3YWl0IHRmLnJlYWR5KCknIGJlZm9yZSBydW5uaW5nIG90aGVyIGNvZGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0JhY2tlbmRzJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhY2tlbmQoKTogS2VybmVsQmFja2VuZCB7XG4gIHJldHVybiBFTkdJTkUuYmFja2VuZDtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBnbG9iYWwgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGlzIHBsYXRmb3JtLlxuICogQHBhcmFtIHBsYXRmb3JtIEEgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQbGF0Zm9ybShwbGF0Zm9ybU5hbWU6IHN0cmluZywgcGxhdGZvcm06IFBsYXRmb3JtKSB7XG4gIGVudigpLnNldFBsYXRmb3JtKHBsYXRmb3JtTmFtZSwgcGxhdGZvcm0pO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Add } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Adds two `tf.Tensor`s element-wise, A + B. Supports broadcasting.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print(); // or tf.add(a, b)\n * ```\n *\n * ```js\n * // Broadcast add a with b.\n * const a = tf.scalar(5);\n * const b = tf.tensor1d([10, 20, 30, 40]);\n *\n * a.add(b).print(); // or tf.add(a, b)\n * ```\n * @param a The first `tf.Tensor` to add.\n * @param b The second `tf.Tensor` to add. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction add_(a, b) {\n let $a = convertToTensor(a, 'a', 'add');\n let $b = convertToTensor(b, 'b', 'add');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Add, inputs);\n}\nexport const add = /* @__PURE__ */ op({ add_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWRkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FkZCwgQWRkSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEFkZHMgdHdvIGB0Zi5UZW5zb3JgcyBlbGVtZW50LXdpc2UsIEEgKyBCLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMTAsIDIwLCAzMCwgNDBdKTtcbiAqXG4gKiBhLmFkZChiKS5wcmludCgpOyAgLy8gb3IgdGYuYWRkKGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGFkZCBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi5zY2FsYXIoNSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzEwLCAyMCwgMzAsIDQwXSk7XG4gKlxuICogYS5hZGQoYikucHJpbnQoKTsgIC8vIG9yIHRmLmFkZChhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgYHRmLlRlbnNvcmAgdG8gYWRkLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBgdGYuVGVuc29yYCB0byBhZGQuIE11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gYWRkXzxUIGV4dGVuZHMgVGVuc29yPihhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2FkZCcpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnYWRkJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEFkZElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYWRkID0gLyogQF9fUFVSRV9fICovIG9wKHthZGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { FloorDiv } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n * The result is rounded with floor function.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.floorDiv(b).print(); // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.floorDiv(b).print(); // or tf.floorDiv(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction floorDiv_(a, b) {\n let $a = convertToTensor(a, 'a', 'floorDiv');\n let $b = convertToTensor(b, 'b', 'floorDiv');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(FloorDiv, inputs);\n}\nexport const floorDiv = /* @__PURE__ */ op({ floorDiv_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3JEaXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9mbG9vckRpdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRTlDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGbG9vckRpdiwgRmxvb3JEaXZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gYHRmLlRlbnNvcmBzIGVsZW1lbnQtd2lzZSwgQSAvIEIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqIFRoZSByZXN1bHQgaXMgcm91bmRlZCB3aXRoIGZsb29yIGZ1bmN0aW9uLlxuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCA5LCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKlxuICogYS5mbG9vckRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGRpdiBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcigyKTtcbiAqXG4gKiBhLmZsb29yRGl2KGIpLnByaW50KCk7ICAvLyBvciB0Zi5mbG9vckRpdihhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvciBhcyB0aGUgbnVtZXJhdG9yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCB0ZW5zb3IgYXMgdGhlIGRlbm9taW5hdG9yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXNcbiAqIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gZmxvb3JEaXZfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZmxvb3JEaXYnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2Zsb29yRGl2Jyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEZsb29yRGl2SW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRmxvb3JEaXYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZsb29yRGl2ID0gLyogQF9fUFVSRV9fICovIG9wKHtmbG9vckRpdl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RealDiv } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { floorDiv } from './floorDiv';\nimport { op } from './operation';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.div(b).print(); // or tf.div(a, b)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n *\n * a.div(b).print(); // or tf.div(a, b)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction div_(a, b) {\n let $a = convertToTensor(a, 'a', 'div');\n let $b = convertToTensor(b, 'b', 'div');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'int32' && $b.dtype === 'int32') {\n return floorDiv($a, $b);\n }\n const inputs = { a: $a, b: $b };\n const attrs = {};\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(RealDiv, inputs, attrs);\n}\nexport const div = /* @__PURE__ */ op({ div_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZGl2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLElBQUksQ0FBbUIsQ0FBb0IsRUFBRSxDQUFvQjtJQUN4RSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDaEQsT0FBTyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRWpCLDBEQUEwRDtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUNQLE1BQW1DLEVBQUUsS0FBSyxDQUFNLENBQUM7QUFDM0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlYWxEaXYsIFJlYWxEaXZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Zsb29yRGl2fSBmcm9tICcuL2Zsb29yRGl2JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBEaXZpZGVzIHR3byBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBBIC8gQi4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDQsIDksIDE2XSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiBhLmRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gQnJvYWRjYXN0IGRpdiBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcigyKTtcbiAqXG4gKiBhLmRpdihiKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2KGEsIGIpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgdGVuc29yIGFzIHRoZSBudW1lcmF0b3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHRlbnNvciBhcyB0aGUgZGVub21pbmF0b3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhc1xuICogYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0FyaXRobWV0aWMnfVxuICovXG5mdW5jdGlvbiBkaXZfPFQgZXh0ZW5kcyBUZW5zb3I+KGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZGl2Jyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdkaXYnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGlmICgkYS5kdHlwZSA9PT0gJ2ludDMyJyAmJiAkYi5kdHlwZSA9PT0gJ2ludDMyJykge1xuICAgIHJldHVybiBmbG9vckRpdigkYSwgJGIpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBSZWFsRGl2SW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzID0ge307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWFsRGl2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCwgYXR0cnMpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBkaXYgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Rpdl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Multiply } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Multiplies two `tf.Tensor`s element-wise, A * B. Supports broadcasting.\n *\n * We also expose `tf.mulStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.tensor1d([2, 3, 4, 5]);\n *\n * a.mul(b).print(); // or tf.mul(a, b)\n * ```\n *\n * ```js\n * // Broadcast mul a with b.\n * const a = tf.tensor1d([1, 2, 3, 4]);\n * const b = tf.scalar(5);\n *\n * a.mul(b).print(); // or tf.mul(a, b)\n * ```\n * @param a The first tensor to multiply.\n * @param b The second tensor to multiply. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction mul_(a, b) {\n let $a = convertToTensor(a, 'a', 'mul');\n let $b = convertToTensor(b, 'b', 'mul');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Multiply, inputs);\n}\nexport const mul = /* @__PURE__ */ op({ mul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQW1CLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge011bHRpcGx5LCBNdWx0aXBseUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBBICogQi4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIFdlIGFsc28gZXhwb3NlIGB0Zi5tdWxTdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLCAzLCA0LCA1XSk7XG4gKlxuICogYS5tdWwoYikucHJpbnQoKTsgIC8vIG9yIHRmLm11bChhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtdWwgYSB3aXRoIGIuXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IGIgPSB0Zi5zY2FsYXIoNSk7XG4gKlxuICogYS5tdWwoYikucHJpbnQoKTsgIC8vIG9yIHRmLm11bChhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgdGVuc29yIHRvIG11bHRpcGx5LlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCB0ZW5zb3IgdG8gbXVsdGlwbHkuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG11bF88VCBleHRlbmRzIFRlbnNvcj4oYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdtdWwnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ211bCcpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgaW5wdXRzOiBNdWx0aXBseUlucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE11bHRpcGx5LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgbXVsID0gLyogQF9fUFVSRV9fICovIG9wKHttdWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Abs, ComplexAbs } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes absolute value element-wise: `abs(x)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.abs().print(); // or tf.abs(x)\n * ```\n * @param x The input `tf.Tensor`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction abs_(x) {\n const $x = convertToTensor(x, 'x', 'abs');\n if ($x.dtype === 'complex64') {\n const inputs = { x: $x };\n return ENGINE.runKernel(ComplexAbs, inputs);\n }\n else {\n const inputs = { x: $x };\n return ENGINE.runKernel(Abs, inputs);\n }\n}\nexport const abs = /* @__PURE__ */ op({ abs_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBYSxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLElBQUksQ0FBbUIsQ0FBZTtJQUM3QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUxQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQzVCLE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztLQUMxRTtTQUFNO1FBQ0wsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QWJzLCBBYnNJbnB1dHMsIENvbXBsZXhBYnMsIENvbXBsZXhBYnNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgYWJzb2x1dGUgdmFsdWUgZWxlbWVudC13aXNlOiBgYWJzKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHguYWJzKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFicyh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgYHRmLlRlbnNvcmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGFic188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2FicycpO1xuXG4gIGlmICgkeC5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCBpbnB1dHM6IENvbXBsZXhBYnNJbnB1dHMgPSB7eDogJHh9O1xuICAgIHJldHVybiBFTkdJTkUucnVuS2VybmVsKENvbXBsZXhBYnMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpbnB1dHM6IEFic0lucHV0cyA9IHt4OiAkeH07XG4gICAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQWJzLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWJzX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Acos } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes acos of the input `tf.Tensor` element-wise: `acos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.acos().print(); // or tf.acos(x)\n * ```\n * @param x The input tensor.\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction acos_(x) {\n const $x = convertToTensor(x, 'x', 'acos');\n const inputs = { x: $x };\n return ENGINE.runKernel(Acos, inputs);\n}\nexport const acos = /* @__PURE__ */ op({ acos_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Fjb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QWNvcywgQWNvc0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBhY29zIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBhY29zKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguYWNvcygpLnByaW50KCk7ICAvLyBvciB0Zi5hY29zKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gYWNvc188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2Fjb3MnKTtcbiAgY29uc3QgaW5wdXRzOiBBY29zSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBY29zLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgYWNvcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWNvc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Acosh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the inverse hyperbolic cos of the input `tf.Tensor` element-wise:\n * `acosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([10, 1, 3, 5.7]);\n *\n * x.acosh().print(); // or tf.acosh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction acosh_(x) {\n const $x = convertToTensor(x, 'x', 'acosh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Acosh, inputs);\n}\nexport const acosh = /* @__PURE__ */ op({ acosh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hY29zaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0Fjb3NoLCBBY29zaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvcyBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYGFjb3NoKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEwLCAxLCAzLCA1LjddKTtcbiAqXG4gKiB4LmFjb3NoKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFjb3NoKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGFjb3NoXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYWNvc2gnKTtcbiAgY29uc3QgaW5wdXRzOiBBY29zaElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQWNvc2gsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhY29zaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YWNvc2hffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AddN } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Adds a list of `tf.Tensor`s element-wise, each with the same shape and dtype.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n *\n * tf.addN([a, b, c]).print();\n * ```\n * @param tensors A list of tensors with the same shape and dtype.\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction addN_(tensors) {\n util.assert(Array.isArray(tensors), () => 'The argument passed to tf.addN() must be a list of tensors');\n util.assert(tensors.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ` +\n `${tensors.length}`);\n const $tensors = tensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'addN'));\n const firstTensor = $tensors[0];\n $tensors.forEach(t => {\n if (t.dtype !== firstTensor.dtype) {\n throw new Error('All tensors passed to tf.addN() must have the same dtype');\n }\n });\n $tensors.forEach(t => {\n if (!util.arraysEqual(t.shape, firstTensor.shape)) {\n throw new Error('All tensors passed to tf.addN() must have the same shape');\n }\n });\n const inputs = $tensors;\n return ENGINE.runKernel(AddN, inputs);\n}\nexport const addN = /* @__PURE__ */ op({ addN_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkX24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hZGRfbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLEtBQUssQ0FBbUIsT0FBNEI7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUN0QixHQUFHLEVBQUUsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQ25CLEdBQUcsRUFBRSxDQUFDLHNEQUFzRDtRQUN4RCxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLE1BQU0sUUFBUSxHQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVyRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEtBQUssRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUNYLDBEQUEwRCxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDWCwwREFBMEQsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBZSxRQUFRLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBZGROLCBBZGROSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBBZGRzIGEgbGlzdCBvZiBgdGYuVGVuc29yYHMgZWxlbWVudC13aXNlLCBlYWNoIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDJdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMywgNF0pO1xuICogY29uc3QgYyA9IHRmLnRlbnNvcjFkKFs1LCA2XSk7XG4gKlxuICogdGYuYWRkTihbYSwgYiwgY10pLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZiB0ZW5zb3JzIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIGFkZE5fPFQgZXh0ZW5kcyBUZW5zb3I+KHRlbnNvcnM6IEFycmF5PFR8VGVuc29yTGlrZT4pOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBBcnJheS5pc0FycmF5KHRlbnNvcnMpLFxuICAgICAgKCkgPT4gJ1RoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGYuYWRkTigpIG11c3QgYmUgYSBsaXN0IG9mIHRlbnNvcnMnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB0ZW5zb3JzLmxlbmd0aCA+PSAxLFxuICAgICAgKCkgPT4gYE11c3QgcGFzcyBhdCBsZWFzdCBvbmUgdGVuc29yIHRvIHRmLmFkZE4oKSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt0ZW5zb3JzLmxlbmd0aH1gKTtcblxuICBjb25zdCAkdGVuc29ycyA9XG4gICAgICB0ZW5zb3JzLm1hcCgodCwgaSkgPT4gY29udmVydFRvVGVuc29yKHQsIGB0ZW5zb3JzJHtpfWAsICdhZGROJykpO1xuXG4gIGNvbnN0IGZpcnN0VGVuc29yID0gJHRlbnNvcnNbMF07XG4gICR0ZW5zb3JzLmZvckVhY2godCA9PiB7XG4gICAgaWYgKHQuZHR5cGUgIT09IGZpcnN0VGVuc29yLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0FsbCB0ZW5zb3JzIHBhc3NlZCB0byB0Zi5hZGROKCkgbXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlJyk7XG4gICAgfVxuICB9KTtcblxuICAkdGVuc29ycy5mb3JFYWNoKHQgPT4ge1xuICAgIGlmICghdXRpbC5hcnJheXNFcXVhbCh0LnNoYXBlLCBmaXJzdFRlbnNvci5zaGFwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQWxsIHRlbnNvcnMgcGFzc2VkIHRvIHRmLmFkZE4oKSBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGlucHV0czogQWRkTklucHV0cyA9ICR0ZW5zb3JzO1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFkZE4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkZE4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FkZE5ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { All } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the logical and of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.all().print(); // or tf.all(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.all(axis).print(); // or tf.all(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction all_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'all', 'bool');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(All, inputs, attrs);\n}\nexport const all = /* @__PURE__ */ op({ all_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FsbCwgQWxsQXR0cnMsIEFsbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBsb2dpY2FsIGFuZCBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW5cbiAqIGBheGVzYC4gSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoXG4gKiBsZW5ndGggMS4gSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAxLCAxXSwgJ2Jvb2wnKTtcbiAqXG4gKiB4LmFsbCgpLnByaW50KCk7ICAvLyBvciB0Zi5hbGwoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDEsIDAsIDBdLCBbMiwgMl0sICdib29sJyk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFsbChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYWxsKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlIGJvb2wuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYWxsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhbGwnLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGlucHV0czogQWxsSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEFsbEF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFsbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhbGwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FsbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Any } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the logical or of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 1, 1], 'bool');\n *\n * x.any().print(); // or tf.any(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 1, 0, 0], [2, 2], 'bool');\n *\n * const axis = 1;\n * x.any(axis).print(); // or tf.any(x, axis)\n * ```\n *\n * @param x The input tensor. Must be of dtype bool.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction any_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'any', 'bool');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Any, inputs, attrs);\n}\n// tslint:disable-next-line:variable-name\nexport const any = /* @__PURE__ */ op({ any_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYW55LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELHlDQUF5QztBQUN6QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBbnksIEFueUF0dHJzLCBBbnlJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9naWNhbCBvciBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW5cbiAqIGBheGVzYC4gSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoXG4gKiBsZW5ndGggMS4gSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAxLCAxXSwgJ2Jvb2wnKTtcbiAqXG4gKiB4LmFueSgpLnByaW50KCk7ICAvLyBvciB0Zi5hbnkoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDEsIDAsIDBdLCBbMiwgMl0sICdib29sJyk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFueShheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYW55KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlIGJvb2wuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYW55XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhbnknLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGlucHV0czogQW55SW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEFueUF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFueSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5leHBvcnQgY29uc3QgYW55ID0gLyogQF9fUFVSRV9fICovIG9wKHthbnlffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ArgMax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the indices of the maximum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMax().print(); // or tf.argMax(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMax(axis).print(); // or tf.argMax(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction argMax_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'argMax');\n const inputs = { x: $x };\n const attrs = { axis };\n return ENGINE.runKernel(ArgMax, inputs, attrs);\n}\nexport const argMax = /* @__PURE__ */ op({ argMax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnX21heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FyZ19tYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUFtQixDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FyZ01heCwgQXJnTWF4QXR0cnMsIEFyZ01heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGljZXMgb2YgdGhlIG1heGltdW0gdmFsdWVzIGFsb25nIGFuIGBheGlzYC5cbiAqXG4gKiBUaGUgcmVzdWx0IGhhcyB0aGUgc2FtZSBzaGFwZSBhcyBgaW5wdXRgIHdpdGggdGhlIGRpbWVuc2lvbiBhbG9uZyBgYXhpc2BcbiAqIHJlbW92ZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHguYXJnTWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLmFyZ01heCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgNCwgM10sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFyZ01heChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYXJnTWF4KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbiB0byByZWR1Y2UuIERlZmF1bHRzIHRvIDAgKG91dGVyLW1vc3QgZGltZW5zaW9uKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSZWR1Y3Rpb24nfVxuICovXG5mdW5jdGlvbiBhcmdNYXhfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhcmdNYXgnKTtcblxuICBjb25zdCBpbnB1dHM6IEFyZ01heElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBBcmdNYXhBdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFyZ01heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhcmdNYXggPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FyZ01heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ArgMin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the indices of the minimum values along an `axis`.\n *\n * The result has the same shape as `input` with the dimension along `axis`\n * removed.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.argMin().print(); // or tf.argMin(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 4, 3], [2, 2]);\n *\n * const axis = 1;\n * x.argMin(axis).print(); // or tf.argMin(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension to reduce. Defaults to 0 (outer-most dimension).\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction argMin_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'argMin');\n const inputs = { x: $x };\n const attrs = { axis };\n return ENGINE.runKernel(ArgMin, inputs, attrs);\n}\nexport const argMin = /* @__PURE__ */ op({ argMin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnX21pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FyZ19taW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUFtQixDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQy9ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FyZ01pbiwgQXJnTWluQXR0cnMsIEFyZ01pbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluZGljZXMgb2YgdGhlIG1pbmltdW0gdmFsdWVzIGFsb25nIGFuIGBheGlzYC5cbiAqXG4gKiBUaGUgcmVzdWx0IGhhcyB0aGUgc2FtZSBzaGFwZSBhcyBgaW5wdXRgIHdpdGggdGhlIGRpbWVuc2lvbiBhbG9uZyBgYXhpc2BcbiAqIHJlbW92ZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHguYXJnTWluKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFyZ01pbih4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgNCwgM10sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmFyZ01pbihheGlzKS5wcmludCgpOyAgLy8gb3IgdGYuYXJnTWluKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbiB0byByZWR1Y2UuIERlZmF1bHRzIHRvIDAgKG91dGVyLW1vc3QgZGltZW5zaW9uKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSZWR1Y3Rpb24nfVxuICovXG5mdW5jdGlvbiBhcmdNaW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhcmdNaW4nKTtcblxuICBjb25zdCBpbnB1dHM6IEFyZ01pbklucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBBcmdNaW5BdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEFyZ01pbiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBhcmdNaW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2FyZ01pbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Asin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes asin of the input `tf.Tensor` element-wise: `asin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asin().print(); // or tf.asin(x)\n * ```\n * @param x The input tensor.\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction asin_(x) {\n const $x = convertToTensor(x, 'x', 'asin');\n const inputs = { x: $x };\n return ENGINE.runKernel(Asin, inputs);\n}\nexport const asin = /* @__PURE__ */ op({ asin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2FzaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBc2luLCBBc2luSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIGFzaW4gb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGFzaW4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5hc2luKCkucHJpbnQoKTsgIC8vIG9yIHRmLmFzaW4oeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhc2luXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYXNpbicpO1xuICBjb25zdCBpbnB1dHM6IEFzaW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEFzaW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhc2luID0gLyogQF9fUFVSRV9fICovIG9wKHthc2luX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Asinh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes inverse hyperbolic sin of the input `tf.Tensor` element-wise:\n * `asinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.asinh().print(); // or tf.asinh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction asinh_(x) {\n const $x = convertToTensor(x, 'x', 'asinh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Asinh, inputs);\n}\nexport const asinh = /* @__PURE__ */ op({ asinh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hc2luaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0FzaW5oLCBBc2luaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBpbnZlcnNlIGh5cGVyYm9saWMgc2luIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6XG4gKiBgYXNpbmgoeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5hc2luaCgpLnByaW50KCk7ICAvLyBvciB0Zi5hc2luaCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhc2luaF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2FzaW5oJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBBc2luaElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQXNpbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBhc2luaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YXNpbmhffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes atan of the input `tf.Tensor` element-wise: `atan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.atan().print(); // or tf.atan(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atan_(x) {\n const $x = convertToTensor(x, 'x', 'atan');\n const inputs = { x: $x };\n return ENGINE.runKernel(Atan, inputs);\n}\nexport const atan = /* @__PURE__ */ op({ atan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2F0YW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUVuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QXRhbiwgQXRhbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBhdGFuIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBhdGFuKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguYXRhbigpLnByaW50KCk7ICAvLyBvciB0Zi5hdGFuKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGF0YW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdGFuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBBdGFuSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgYXRhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YXRhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atan2 } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes arctangent of `tf.Tensor`s a / b element-wise: `atan2(a, b)`.\n * Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1.0, 1.0, -1.0, .7]);\n * const b = tf.tensor1d([2.0, 13.0, 3.5, .21]);\n *\n * tf.atan2(a, b).print()\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atan2_(a, b) {\n let $a = convertToTensor(a, 'a', 'atan2');\n let $b = convertToTensor(b, 'b', 'atan2');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Atan2, inputs);\n}\nexport const atan2 = /* @__PURE__ */ op({ atan2_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdGFuMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxNQUFNLENBQ1gsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLE1BQU0sTUFBTSxHQUFnQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRTNDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtBdGFuMiwgQXRhbjJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgYXJjdGFuZ2VudCBvZiBgdGYuVGVuc29yYHMgYSAvIGIgZWxlbWVudC13aXNlOiBgYXRhbjIoYSwgYilgLlxuICogU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEuMCwgMS4wLCAtMS4wLCAuN10pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLjAsIDEzLjAsIDMuNSwgLjIxXSk7XG4gKlxuICogdGYuYXRhbjIoYSwgYikucHJpbnQoKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBhdGFuMl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdhdGFuMicpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnYXRhbjInKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGNvbnN0IGlucHV0czogQXRhbjJJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYXRhbjIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2F0YW4yX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Atanh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes inverse hyperbolic tan of the input `tf.Tensor` element-wise:\n * `atanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.atanh().print(); // or tf.atanh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction atanh_(x) {\n const $x = convertToTensor(x, 'x', 'atanh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Atanh, inputs);\n}\nexport const atanh = /* @__PURE__ */ op({ atanh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdGFuaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0F0YW5oLCBBdGFuaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBpbnZlcnNlIGh5cGVyYm9saWMgdGFuIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6XG4gKiBgYXRhbmgoeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgLjEsIC0uMSwgLjddKTtcbiAqXG4gKiB4LmF0YW5oKCkucHJpbnQoKTsgIC8vIG9yIHRmLmF0YW5oKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGF0YW5oXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYXRhbmgnKTtcblxuICBjb25zdCBpbnB1dHM6IEF0YW5oSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChBdGFuaCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGF0YW5oID0gLyogQF9fUFVSRV9fICovIG9wKHthdGFuaF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n *\n * @param inputShape Input tensor shape is of the following dimensions:\n * `[batch, height, width, inChannels]`.\n * @param filterShape The filter shape is of the following dimensions:\n * `[filterHeight, filterWidth, depth]`.\n * @param strides The strides of the sliding window for each dimension of the\n * input tensor: `[strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat The data format of the input and output data.\n * Defaults to 'NHWC'.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`.\n * Defaults to `[1, 1]`. If `dilations` is a single number, then\n * `dilationHeight == dilationWidth`.\n */\nexport function computeDilation2DInfo(inputShape, filterShape, strides, pad, dataFormat = 'NHWC', dilations) {\n // `computerConv2DInfo` require filterShape to be in the dimension of:\n // `[filterHeight, filterWidth, depth, outDepth]`, dilation2d doesn't have\n // outDepth, it should have the same depth as the input.\n // Input shape: [batch, height, width, inChannels]\n const inputChannels = inputShape[3];\n const $filterShape = [...filterShape, inputChannels];\n const $dataFormat = convertConv2DDataFormat(dataFormat);\n return computeConv2DInfo(inputShape, $filterShape, strides, dilations, pad, null /* roundingMode */, null /* depthWise */, $dataFormat);\n}\nexport function computePool2DInfo(inShape, filterSize, strides, dilations, pad, roundingMode, dataFormat = 'channelsLast') {\n const [filterHeight, filterWidth] = parseTupleParam(filterSize);\n let filterShape;\n if (dataFormat === 'channelsLast') {\n filterShape = [filterHeight, filterWidth, inShape[3], inShape[3]];\n }\n else if (dataFormat === 'channelsFirst') {\n filterShape = [filterHeight, filterWidth, inShape[1], inShape[1]];\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n return computeConv2DInfo(inShape, filterShape, strides, dilations, pad, roundingMode, false, dataFormat);\n}\n/**\n * Computes the information for a forward pass of a pooling3D operation.\n */\nexport function computePool3DInfo(inShape, filterSize, strides, dilations, pad, roundingMode, dataFormat = 'NDHWC') {\n const [filterDepth, filterHeight, filterWidth] = parse3TupleParam(filterSize);\n let filterShape;\n let $dataFormat;\n if (dataFormat === 'NDHWC') {\n $dataFormat = 'channelsLast';\n filterShape =\n [filterDepth, filterHeight, filterWidth, inShape[4], inShape[4]];\n }\n else if (dataFormat === 'NCDHW') {\n $dataFormat = 'channelsFirst';\n filterShape =\n [filterDepth, filterHeight, filterWidth, inShape[1], inShape[1]];\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n return computeConv3DInfo(inShape, filterShape, strides, dilations, pad, false, $dataFormat, roundingMode);\n}\n/**\n * Computes the information for a forward pass of a convolution/pooling\n * operation.\n */\nexport function computeConv2DInfo(inShape, filterShape, strides, dilations, pad, roundingMode, depthwise = false, dataFormat = 'channelsLast') {\n let [batchSize, inHeight, inWidth, inChannels] = [-1, -1, -1, -1];\n if (dataFormat === 'channelsLast') {\n [batchSize, inHeight, inWidth, inChannels] = inShape;\n }\n else if (dataFormat === 'channelsFirst') {\n [batchSize, inChannels, inHeight, inWidth] = inShape;\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n const [filterHeight, filterWidth, , filterChannels] = filterShape;\n const [strideHeight, strideWidth] = parseTupleParam(strides);\n const [dilationHeight, dilationWidth] = parseTupleParam(dilations);\n const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight);\n const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth);\n const { padInfo, outHeight, outWidth } = getPadAndOutInfo(pad, inHeight, inWidth, strideHeight, strideWidth, effectiveFilterHeight, effectiveFilterWidth, roundingMode, dataFormat);\n const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n let outShape;\n if (dataFormat === 'channelsFirst') {\n outShape = [batchSize, outChannels, outHeight, outWidth];\n }\n else if (dataFormat === 'channelsLast') {\n outShape = [batchSize, outHeight, outWidth, outChannels];\n }\n return {\n batchSize,\n dataFormat,\n inHeight,\n inWidth,\n inChannels,\n outHeight,\n outWidth,\n outChannels,\n padInfo,\n strideHeight,\n strideWidth,\n filterHeight,\n filterWidth,\n effectiveFilterHeight,\n effectiveFilterWidth,\n dilationHeight,\n dilationWidth,\n inShape,\n outShape,\n filterShape\n };\n}\n/**\n * Computes the information for a forward pass of a 3D convolution/pooling\n * operation.\n */\nexport function computeConv3DInfo(inShape, filterShape, strides, dilations, pad, depthwise = false, dataFormat = 'channelsLast', roundingMode) {\n let [batchSize, inDepth, inHeight, inWidth, inChannels] = [-1, -1, -1, -1, -1];\n if (dataFormat === 'channelsLast') {\n [batchSize, inDepth, inHeight, inWidth, inChannels] = inShape;\n }\n else if (dataFormat === 'channelsFirst') {\n [batchSize, inChannels, inDepth, inHeight, inWidth] = inShape;\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n const [filterDepth, filterHeight, filterWidth, , filterChannels] = filterShape;\n const [strideDepth, strideHeight, strideWidth] = parse3TupleParam(strides);\n const [dilationDepth, dilationHeight, dilationWidth] = parse3TupleParam(dilations);\n const effectiveFilterDepth = getEffectiveFilterSize(filterDepth, dilationDepth);\n const effectiveFilterHeight = getEffectiveFilterSize(filterHeight, dilationHeight);\n const effectiveFilterWidth = getEffectiveFilterSize(filterWidth, dilationWidth);\n const { padInfo, outDepth, outHeight, outWidth } = get3DPadAndOutInfo(pad, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, effectiveFilterDepth, effectiveFilterHeight, effectiveFilterWidth, roundingMode);\n const outChannels = depthwise ? filterChannels * inChannels : filterChannels;\n let outShape;\n if (dataFormat === 'channelsFirst') {\n outShape = [batchSize, outChannels, outDepth, outHeight, outWidth];\n }\n else if (dataFormat === 'channelsLast') {\n outShape = [batchSize, outDepth, outHeight, outWidth, outChannels];\n }\n return {\n batchSize,\n dataFormat,\n inDepth,\n inHeight,\n inWidth,\n inChannels,\n outDepth,\n outHeight,\n outWidth,\n outChannels,\n padInfo,\n strideDepth,\n strideHeight,\n strideWidth,\n filterDepth,\n filterHeight,\n filterWidth,\n effectiveFilterDepth,\n effectiveFilterHeight,\n effectiveFilterWidth,\n dilationDepth,\n dilationHeight,\n dilationWidth,\n inShape,\n outShape,\n filterShape\n };\n}\nfunction computeOutputShape2D(inShape, fieldSize, stride, zeroPad, roundingMode) {\n if (zeroPad == null) {\n zeroPad = computeDefaultPad(inShape, fieldSize, stride);\n }\n const inputRows = inShape[0];\n const inputCols = inShape[1];\n const outputRows = round((inputRows - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n const outputCols = round((inputCols - fieldSize + 2 * zeroPad) / stride + 1, roundingMode);\n return [outputRows, outputCols];\n}\nfunction computeOutputShape4D(inShape, filterShape, outChannels, strides, zeroPad, roundingMode) {\n if (zeroPad == null) {\n zeroPad = computeDefaultPad(inShape, filterShape[0], strides[0]);\n }\n const outShape = [0, 0, 0, outChannels];\n for (let index = 0; index < 3; index++) {\n if (inShape[index] + 2 * zeroPad >= filterShape[index]) {\n outShape[index] = round((inShape[index] - filterShape[index] + 2 * zeroPad) / strides[index] +\n 1, roundingMode);\n }\n }\n return outShape;\n}\nexport function computeDefaultPad(inputShape, fieldSize, stride, dilation = 1) {\n const effectiveFieldSize = getEffectiveFilterSize(fieldSize, dilation);\n return Math.floor((inputShape[0] * (stride - 1) - stride + effectiveFieldSize) / 2);\n}\nfunction parseTupleParam(param) {\n if (typeof param === 'number') {\n return [param, param, param];\n }\n if (param.length === 2) {\n return [param[0], param[1], 1];\n }\n return param;\n}\nfunction parse3TupleParam(param) {\n return typeof param === 'number' ? [param, param, param] : param;\n}\n/* See https://www.tensorflow.org/api_docs/python/tf/nn/atrous_conv2d\n * Atrous convolution is equivalent to standard convolution with upsampled\n * filters with effective_filter_height =\n * filter_height + (filter_height - 1) * (dilation - 1)\n * and effective_filter_width =\n * filter_width + (filter_width - 1) * (dilation - 1),\n * produced by inserting dilation - 1 zeros along consecutive elements across\n * the filters' spatial dimensions.\n * When there is a dilation, this converts a filter dimension to the\n * effective filter dimension, so it can be used in a standard convolution.\n */\nfunction getEffectiveFilterSize(filterSize, dilation) {\n if (dilation <= 1) {\n return filterSize;\n }\n return filterSize + (filterSize - 1) * (dilation - 1);\n}\nfunction getPadAndOutInfo(pad, inHeight, inWidth, strideHeight, strideWidth, filterHeight, filterWidth, roundingMode, dataFormat) {\n let padInfo;\n let outHeight;\n let outWidth;\n if (typeof pad === 'number') {\n const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n padInfo = { top: pad, bottom: pad, left: pad, right: pad, type: padType };\n const outShape = computeOutputShape2D([inHeight, inWidth], filterHeight, strideHeight, pad, roundingMode);\n outHeight = outShape[0];\n outWidth = outShape[1];\n }\n else if (pad === 'same') {\n outHeight = Math.ceil(inHeight / strideHeight);\n outWidth = Math.ceil(inWidth / strideWidth);\n const padAlongHeight = Math.max(0, (outHeight - 1) * strideHeight + filterHeight - inHeight);\n const padAlongWidth = Math.max(0, (outWidth - 1) * strideWidth + filterWidth - inWidth);\n const top = Math.floor(padAlongHeight / 2);\n const bottom = padAlongHeight - top;\n const left = Math.floor(padAlongWidth / 2);\n const right = padAlongWidth - left;\n padInfo = { top, bottom, left, right, type: 'SAME' };\n }\n else if (pad === 'valid') {\n padInfo = { top: 0, bottom: 0, left: 0, right: 0, type: 'VALID' };\n outHeight = Math.ceil((inHeight - filterHeight + 1) / strideHeight);\n outWidth = Math.ceil((inWidth - filterWidth + 1) / strideWidth);\n }\n else if (typeof pad === 'object') {\n const top = dataFormat === 'channelsLast' ? pad[1][0] : pad[2][0];\n const bottom = dataFormat === 'channelsLast' ? pad[1][1] : pad[2][1];\n const left = dataFormat === 'channelsLast' ? pad[2][0] : pad[3][0];\n const right = dataFormat === 'channelsLast' ? pad[2][1] : pad[3][1];\n const padType = (top === 0 && bottom === 0 && left === 0 && right === 0) ?\n 'VALID' :\n 'EXPLICIT';\n padInfo = { top, bottom, left, right, type: padType };\n outHeight = round((inHeight - filterHeight + top + bottom) / strideHeight + 1, roundingMode);\n outWidth = round((inWidth - filterWidth + left + right) / strideWidth + 1, roundingMode);\n }\n else {\n throw Error(`Unknown padding parameter: ${pad}`);\n }\n return { padInfo, outHeight, outWidth };\n}\nfunction get3DPadAndOutInfo(pad, inDepth, inHeight, inWidth, strideDepth, strideHeight, strideWidth, filterDepth, filterHeight, filterWidth, roundingMode) {\n let padInfo;\n let outDepth;\n let outHeight;\n let outWidth;\n if (pad === 'valid') {\n pad = 0;\n }\n if (typeof pad === 'number') {\n const padType = (pad === 0) ? 'VALID' : 'NUMBER';\n padInfo = {\n top: pad,\n bottom: pad,\n left: pad,\n right: pad,\n front: pad,\n back: pad,\n type: padType\n };\n const outShape = computeOutputShape4D([inDepth, inHeight, inWidth, 1], [filterDepth, filterHeight, filterWidth], 1, [strideDepth, strideHeight, strideWidth], pad, roundingMode);\n outDepth = outShape[0];\n outHeight = outShape[1];\n outWidth = outShape[2];\n }\n else if (pad === 'same') {\n outDepth = Math.ceil(inDepth / strideDepth);\n outHeight = Math.ceil(inHeight / strideHeight);\n outWidth = Math.ceil(inWidth / strideWidth);\n const padAlongDepth = (outDepth - 1) * strideDepth + filterDepth - inDepth;\n const padAlongHeight = (outHeight - 1) * strideHeight + filterHeight - inHeight;\n const padAlongWidth = (outWidth - 1) * strideWidth + filterWidth - inWidth;\n const front = Math.floor(padAlongDepth / 2);\n const back = padAlongDepth - front;\n const top = Math.floor(padAlongHeight / 2);\n const bottom = padAlongHeight - top;\n const left = Math.floor(padAlongWidth / 2);\n const right = padAlongWidth - left;\n padInfo = { top, bottom, left, right, front, back, type: 'SAME' };\n }\n else {\n throw Error(`Unknown padding parameter: ${pad}`);\n }\n return { padInfo, outDepth, outHeight, outWidth };\n}\n/**\n * Rounds a value depending on the rounding mode\n * @param value\n * @param roundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction round(value, roundingMode) {\n if (!roundingMode) {\n return Math.trunc(value);\n }\n switch (roundingMode) {\n case 'round':\n // used for Caffe Conv\n return Math.round(value);\n case 'ceil':\n // used for Caffe Pool\n return Math.ceil(value);\n case 'floor':\n return Math.floor(value);\n default:\n throw new Error(`Unknown roundingMode ${roundingMode}`);\n }\n}\nexport function tupleValuesAreOne(param) {\n const [dimA, dimB, dimC] = parseTupleParam(param);\n return dimA === 1 && dimB === 1 && dimC === 1;\n}\nexport function eitherStridesOrDilationsAreOne(strides, dilations) {\n return tupleValuesAreOne(strides) || tupleValuesAreOne(dilations);\n}\nexport function stridesOrDilationsArePositive(values) {\n return parseTupleParam(values).every(value => value > 0);\n}\n/**\n * Convert Conv2D dataFormat from 'NHWC'|'NCHW' to\n * 'channelsLast'|'channelsFirst'\n * @param dataFormat in 'NHWC'|'NCHW' mode\n * @return dataFormat in 'channelsLast'|'channelsFirst' mode\n * @throws unknown dataFormat\n */\nexport function convertConv2DDataFormat(dataFormat) {\n if (dataFormat === 'NHWC') {\n return 'channelsLast';\n }\n else if (dataFormat === 'NCHW') {\n return 'channelsFirst';\n }\n else {\n throw new Error(`Unknown dataFormat ${dataFormat}`);\n }\n}\n/**\n * Check validity of pad when using dimRoundingMode.\n * @param opDesc A string of op description\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid` output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @throws unknown padding parameter\n */\nexport function checkPadOnDimRoundingMode(opDesc, pad, dimRoundingMode) {\n if (dimRoundingMode != null) {\n if (typeof pad === 'string') {\n throw Error(`Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n }\n else if (typeof pad === 'number') {\n util.assert(util.isInt(pad), () => `Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${pad}.`);\n }\n else if (typeof pad === 'object') {\n pad.forEach(p => {\n p.forEach(v => {\n util.assert(util.isInt(v), () => `Error in ${opDesc}: pad must be an integer when using ` +\n `dimRoundingMode ${dimRoundingMode} but got pad ${v}.`);\n });\n });\n }\n else {\n throw Error(`Error in ${opDesc}: Unknown padding parameter: ${pad}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udl91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBMERoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLFVBQTRDLEVBQzVDLFdBQXFDLEVBQUUsT0FBZ0MsRUFDdkUsR0FBMEIsRUFBRSxhQUFxQixNQUFNLEVBQ3ZELFNBQWtDO0lBQ3BDLHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDMUUsd0RBQXdEO0lBQ3hELGtEQUFrRDtJQUNsRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxZQUFZLEdBQ2QsQ0FBQyxHQUFHLFdBQVcsRUFBRSxhQUFhLENBQXFDLENBQUM7SUFDeEUsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEQsT0FBTyxpQkFBaUIsQ0FDcEIsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFDakQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsT0FBeUMsRUFDekMsVUFBbUMsRUFBRSxPQUFnQyxFQUNyRSxTQUFrQyxFQUNsQyxHQUEwQyxFQUMxQyxZQUFxQyxFQUNyQyxhQUE2QyxjQUFjO0lBQzdELE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWhFLElBQUksV0FBNkMsQ0FBQztJQUNsRCxJQUFJLFVBQVUsS0FBSyxjQUFjLEVB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LE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUNoRSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDcEUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0tBQ2pFO1NBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDbEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxJQUFJLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxH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O0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3JDLE1BQWMsRUFBRSxHQUEwQyxFQUMxRCxlQUF3QztJQUMxQyxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7UUFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxLQUFLLENBQ1AsWUFBWSxNQUFNLHNDQUFzQztnQkFDeEQsbUJBQW1CLGVBQWUsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDL0Q7YUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQ2YsR0FBRyxFQUFFLENBQUMsWUFBWSxNQUFNLHNDQUFzQztnQkFDMUQsbUJBQW1CLGVBQWUsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxHQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDWixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMsWUFBWSxNQUFNLHNDQUFzQzt3QkFDMUQsbUJBQW1CLGVBQWUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsWUFBWSxNQUFNLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3RFO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIFBhZFR5cGUgPSAnU0FNRSd8J1ZBTElEJ3wnTlVNQkVSJ3wnRVhQTElDSVQnO1xuXG4vLyBGb3IgTkhXQyBzaG91bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtOlxuLy8gIFtbMCwgMF0sIFtwYWRfdG9wLHBhZF9ib3R0b21dLCBbcGFkX2xlZnQsIHBhZF9yaWdodF0sIFswLCAwXV1cbi8vIEZvciBOQ0hXIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm06XG4vLyAgW1swLCAwXSwgWzAsIDBdLCBbcGFkX3RvcCxwYWRfYm90dG9tXSwgW3BhZF9sZWZ0LCBwYWRfcmlnaHRdXVxuLy8gUmVmZXJlbmNlOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udjJkXG5leHBvcnQgdHlwZSBFeHBsaWNpdFBhZGRpbmcgPVxuICAgIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXTtcblxuZXhwb3J0IHR5cGUgUGFkSW5mbyA9IHtcbiAgdG9wOiBudW1iZXIsXG4gIGxlZnQ6IG51bWJlcixcbiAgcmlnaHQ6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXIsXG4gIHR5cGU6IFBhZFR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIFBhZEluZm8zRCA9IHtcbiAgdG9wOiBudW1iZXIsXG4gIGxlZnQ6IG51bWJlcixcbiAgcmlnaHQ6IG51bWJlcixcbiAgYm90dG9tOiBudW1iZXIsXG4gIGZyb250OiBudW1iZXIsXG4gIGJhY2s6IG51bWJlcixcbiAgdHlwZTogUGFkVHlwZVxufTtcblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9yd2FyZCBwYXNzIG9mIGEgY29udm9sdXRpb24vcG9vbGluZyBvcGVyYXRpb24uXG4gKiBJdCBpbmNsdWRlcyBpbnB1dCBhbmQgb3V0cHV0IHNoYXBlLCBzdHJpZGVzLCBmaWx0ZXIgc2l6ZSBhbmQgcGFkZGluZ1xuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENvbnYyREluZm8gPSB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyLFxuICBpbkhlaWdodDogbnVtYmVyLFxuICBpbldpZHRoOiBudW1iZXIsXG4gIGluQ2hhbm5lbHM6IG51bWJlcixcbiAgb3V0SGVpZ2h0OiBudW1iZXIsXG4gIG91dFdpZHRoOiBudW1iZXIsXG4gIG91dENoYW5uZWxzOiBudW1iZXIsXG4gIGRhdGFGb3JtYXQ6ICdjaGFubmVsc0ZpcnN0J3wnY2hhbm5lbHNMYXN0JyxcbiAgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gIHN0cmlkZVdpZHRoOiBudW1iZXIsXG4gIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsXG4gIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgZmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLFxuICBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICBwYWRJbmZvOiBQYWRJbmZvLFxuICBpblNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgb3V0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBpbnB1dFNoYXBlIElucHV0IHRlbnNvciBzaGFwZSBpcyBvZiB0aGUgZm9sbG93aW5nIGRpbWVuc2lvbnM6XG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLlxuICogQHBhcmFtIGZpbHRlclNoYXBlIFRoZSBmaWx0ZXIgc2hhcGUgaXMgb2YgdGhlIGZvbGxvd2luZyBkaW1lbnNpb25zOlxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgZGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBzbGlkaW5nIHdpbmRvdyBmb3IgZWFjaCBkaW1lbnNpb24gb2YgdGhlXG4gKiAgICAgaW5wdXQgdGVuc29yOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqICAgICBJZiBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLFxuICogICAgIHRoZW4gYHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxKjF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBUaGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS5cbiAqICAgICBEZWZhdWx0cyB0byAnTkhXQycuXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gLlxuICogICAgIERlZmF1bHRzIHRvIGBbMSwgMV1gLiBJZiBgZGlsYXRpb25zYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW5cbiAqICAgICBgZGlsYXRpb25IZWlnaHQgPT0gZGlsYXRpb25XaWR0aGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGlsYXRpb24yREluZm8oXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlczogbnVtYmVyfFtudW1iZXIsIG51bWJlcl0sXG4gICAgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsIGRhdGFGb3JtYXQ6ICdOSFdDJyA9ICdOSFdDJyxcbiAgICBkaWxhdGlvbnM6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdKSB7XG4gIC8vIGBjb21wdXRlckNvbnYyREluZm9gIHJlcXVpcmUgZmlsdGVyU2hhcGUgdG8gYmUgaW4gdGhlIGRpbWVuc2lvbiBvZjpcbiAgLy8gYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBkZXB0aCwgb3V0RGVwdGhdYCwgZGlsYXRpb24yZCBkb2Vzbid0IGhhdmVcbiAgLy8gb3V0RGVwdGgsIGl0IHNob3VsZCBoYXZlIHRoZSBzYW1lIGRlcHRoIGFzIHRoZSBpbnB1dC5cbiAgLy8gSW5wdXQgc2hhcGU6IFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11cbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGlucHV0U2hhcGVbM107XG4gIGNvbnN0ICRmaWx0ZXJTaGFwZSA9XG4gICAgICBbLi4uZmlsdGVyU2hhcGUsIGlucHV0Q2hhbm5lbHNdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBjb25zdCAkZGF0YUZvcm1hdCA9IGNvbnZlcnRDb252MkREYXRhRm9ybWF0KGRhdGFGb3JtYXQpO1xuXG4gIHJldHVybiBjb21wdXRlQ29udjJESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsICRmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsXG4gICAgICBudWxsIC8qIHJvdW5kaW5nTW9kZSAqLywgbnVsbCAvKiBkZXB0aFdpc2UgKi8sICRkYXRhRm9ybWF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQb29sMkRJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLCBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSxcbiAgICBkaWxhdGlvbnM6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdLFxuICAgIHBhZDogJ3NhbWUnfCd2YWxpZCd8bnVtYmVyfEV4cGxpY2l0UGFkZGluZyxcbiAgICByb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnLFxuICAgIGRhdGFGb3JtYXQ6ICdjaGFubmVsc0ZpcnN0J3wnY2hhbm5lbHNMYXN0JyA9ICdjaGFubmVsc0xhc3QnKTogQ29udjJESW5mbyB7XG4gIGNvbnN0IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXSA9IHBhcnNlVHVwbGVQYXJhbShmaWx0ZXJTaXplKTtcblxuICBsZXQgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBmaWx0ZXJTaGFwZSA9IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzNdLCBpblNoYXBlWzNdXTtcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNGaXJzdCcpIHtcbiAgICBmaWx0ZXJTaGFwZSA9IFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzFdLCBpblNoYXBlWzFdXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICBpblNoYXBlLCBmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIHJvdW5kaW5nTW9kZSwgZmFsc2UsXG4gICAgICBkYXRhRm9ybWF0KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgZm9yd2FyZCBwYXNzIG9mIGEgcG9vbGluZzNEIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQb29sM0RJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZmlsdGVyU2l6ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGRpbGF0aW9uczogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyxcbiAgICBkYXRhRm9ybWF0OiAnTkRIV0MnfCdOQ0RIVycgPSAnTkRIV0MnKTogQ29udjNESW5mbyB7XG4gIGNvbnN0IFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF0gPSBwYXJzZTNUdXBsZVBhcmFtKGZpbHRlclNpemUpO1xuXG4gIGxldCBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgbGV0ICRkYXRhRm9ybWF0OiAnY2hhbm5lbHNGaXJzdCd8J2NoYW5uZWxzTGFzdCc7XG4gIGlmIChkYXRhRm9ybWF0ID09PSAnTkRIV0MnKSB7XG4gICAgJGRhdGFGb3JtYXQgPSAnY2hhbm5lbHNMYXN0JztcbiAgICBmaWx0ZXJTaGFwZSA9XG4gICAgICAgIFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5TaGFwZVs0XSwgaW5TaGFwZVs0XV07XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ05DREhXJykge1xuICAgICRkYXRhRm9ybWF0ID0gJ2NoYW5uZWxzRmlyc3QnO1xuICAgIGZpbHRlclNoYXBlID1cbiAgICAgICAgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpblNoYXBlWzFdLCBpblNoYXBlWzFdXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZUNvbnYzREluZm8oXG4gICAgICBpblNoYXBlLCBmaWx0ZXJTaGFwZSwgc3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGZhbHNlLCAkZGF0YUZvcm1hdCxcbiAgICAgIHJvdW5kaW5nTW9kZSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGluZm9ybWF0aW9uIGZvciBhIGZvcndhcmQgcGFzcyBvZiBhIGNvbnZvbHV0aW9uL3Bvb2xpbmdcbiAqIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDb252MkRJbmZvKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSwgZGlsYXRpb25zOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSxcbiAgICBwYWQ6ICdzYW1lJ3wndmFsaWQnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJywgZGVwdGh3aXNlID0gZmFsc2UsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfCdjaGFubmVsc0xhc3QnID0gJ2NoYW5uZWxzTGFzdCcpOiBDb252MkRJbmZvIHtcbiAgbGV0IFtiYXRjaFNpemUsIGluSGVpZ2h0LCBpbldpZHRoLCBpbkNoYW5uZWxzXSA9IFstMSwgLTEsIC0xLCAtMV07XG4gIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIFtiYXRjaFNpemUsIGluSGVpZ2h0LCBpbldpZHRoLCBpbkNoYW5uZWxzXSA9IGluU2hhcGU7XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzRmlyc3QnKSB7XG4gICAgW2JhdGNoU2l6ZSwgaW5DaGFubmVscywgaW5IZWlnaHQsIGluV2lkdGhdID0gaW5TaGFwZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YUZvcm1hdCAke2RhdGFGb3JtYXR9YCk7XG4gIH1cblxuICBjb25zdCBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgLCBmaWx0ZXJDaGFubmVsc10gPSBmaWx0ZXJTaGFwZTtcbiAgY29uc3QgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdID0gcGFyc2VUdXBsZVBhcmFtKHN0cmlkZXMpO1xuICBjb25zdCBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdID0gcGFyc2VUdXBsZVBhcmFtKGRpbGF0aW9ucyk7XG5cbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVySGVpZ2h0LCBkaWxhdGlvbkhlaWdodCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyV2lkdGgsIGRpbGF0aW9uV2lkdGgpO1xuICBjb25zdCB7cGFkSW5mbywgb3V0SGVpZ2h0LCBvdXRXaWR0aH0gPSBnZXRQYWRBbmRPdXRJbmZvKFxuICAgICAgcGFkLCBpbkhlaWdodCwgaW5XaWR0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgZWZmZWN0aXZlRmlsdGVyV2lkdGgsIHJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdCk7XG5cbiAgY29uc3Qgb3V0Q2hhbm5lbHMgPSBkZXB0aHdpc2UgPyBmaWx0ZXJDaGFubmVscyAqIGluQ2hhbm5lbHMgOiBmaWx0ZXJDaGFubmVscztcblxuICBsZXQgb3V0U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzRmlyc3QnKSB7XG4gICAgb3V0U2hhcGUgPSBbYmF0Y2hTaXplLCBvdXRDaGFubmVscywgb3V0SGVpZ2h0LCBvdXRXaWR0aF07XG4gIH0gZWxzZSBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBvdXRTaGFwZSA9IFtiYXRjaFNpemUsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmF0Y2hTaXplLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBpbkNoYW5uZWxzLFxuICAgIG91dEhlaWdodCxcbiAgICBvdXRXaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBwYWRJbmZvLFxuICAgIHN0cmlkZUhlaWdodCxcbiAgICBzdHJpZGVXaWR0aCxcbiAgICBmaWx0ZXJIZWlnaHQsXG4gICAgZmlsdGVyV2lkdGgsXG4gICAgZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgIGVmZmVjdGl2ZUZpbHRlcldpZHRoLFxuICAgIGRpbGF0aW9uSGVpZ2h0LFxuICAgIGRpbGF0aW9uV2lkdGgsXG4gICAgaW5TaGFwZSxcbiAgICBvdXRTaGFwZSxcbiAgICBmaWx0ZXJTaGFwZVxuICB9O1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3J3YXJkIHBhc3Mgb2YgYSAzRCBjb252b2x1dGlvbi9wb29saW5nIG9wZXJhdGlvbi5cbiAqIEl0IGluY2x1ZGVzIGlucHV0IGFuZCBvdXRwdXQgc2hhcGUsIHN0cmlkZXMsIGZpbHRlciBzaXplIGFuZCBwYWRkaW5nXG4gKiBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ29udjNESW5mbyA9IHtcbiAgYmF0Y2hTaXplOiBudW1iZXIsXG4gIGluRGVwdGg6IG51bWJlcixcbiAgaW5IZWlnaHQ6IG51bWJlcixcbiAgaW5XaWR0aDogbnVtYmVyLFxuICBpbkNoYW5uZWxzOiBudW1iZXIsXG4gIG91dERlcHRoOiBudW1iZXIsXG4gIG91dEhlaWdodDogbnVtYmVyLFxuICBvdXRXaWR0aDogbnVtYmVyLFxuICBvdXRDaGFubmVsczogbnVtYmVyLFxuICBkYXRhRm9ybWF0OiAnY2hhbm5lbHNGaXJzdCd8J2NoYW5uZWxzTGFzdCcsXG4gIHN0cmlkZURlcHRoOiBudW1iZXIsXG4gIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICBzdHJpZGVXaWR0aDogbnVtYmVyLFxuICBkaWxhdGlvbkRlcHRoOiBudW1iZXIsXG4gIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsXG4gIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgZmlsdGVyRGVwdGg6IG51bWJlcixcbiAgZmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckRlcHRoOiBudW1iZXIsXG4gIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLFxuICBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICBwYWRJbmZvOiBQYWRJbmZvM0QsXG4gIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gIG91dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxufTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgZm9yd2FyZCBwYXNzIG9mIGEgM0QgY29udm9sdXRpb24vcG9vbGluZ1xuICogb3BlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNvbnYzREluZm8oXG4gICAgaW5TaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBudW1iZXJ8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGRpbGF0aW9uczogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsXG4gICAgZGVwdGh3aXNlID0gZmFsc2UsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfCdjaGFubmVsc0xhc3QnID0gJ2NoYW5uZWxzTGFzdCcsXG4gICAgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IENvbnYzREluZm8ge1xuICBsZXQgW2JhdGNoU2l6ZSwgaW5EZXB0aCwgaW5IZWlnaHQsIGluV2lkdGgsIGluQ2hhbm5lbHNdID1cbiAgICAgIFstMSwgLTEsIC0xLCAtMSwgLTFdO1xuICBpZiAoZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICBbYmF0Y2hTaXplLCBpbkRlcHRoLCBpbkhlaWdodCwgaW5XaWR0aCwgaW5DaGFubmVsc10gPSBpblNoYXBlO1xuICB9IGVsc2UgaWYgKGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0ZpcnN0Jykge1xuICAgIFtiYXRjaFNpemUsIGluQ2hhbm5lbHMsIGluRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoXSA9IGluU2hhcGU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRhdGFGb3JtYXQgJHtkYXRhRm9ybWF0fWApO1xuICB9XG5cbiAgY29uc3QgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCAsIGZpbHRlckNoYW5uZWxzXSA9XG4gICAgICBmaWx0ZXJTaGFwZTtcbiAgY29uc3QgW3N0cmlkZURlcHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXSA9IHBhcnNlM1R1cGxlUGFyYW0oc3RyaWRlcyk7XG4gIGNvbnN0IFtkaWxhdGlvbkRlcHRoLCBkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF0gPVxuICAgICAgcGFyc2UzVHVwbGVQYXJhbShkaWxhdGlvbnMpO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckRlcHRoID1cbiAgICAgIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyRGVwdGgsIGRpbGF0aW9uRGVwdGgpO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPVxuICAgICAgZ2V0RWZmZWN0aXZlRmlsdGVyU2l6ZShmaWx0ZXJIZWlnaHQsIGRpbGF0aW9uSGVpZ2h0KTtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVyV2lkdGggPVxuICAgICAgZ2V0RWZmZWN0aXZlRmlsdGVyU2l6ZShmaWx0ZXJXaWR0aCwgZGlsYXRpb25XaWR0aCk7XG4gIGNvbnN0IHtwYWRJbmZvLCBvdXREZXB0aCwgb3V0SGVpZ2h0LCBvdXRXaWR0aH0gPSBnZXQzRFBhZEFuZE91dEluZm8oXG4gICAgICBwYWQsIGluRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoLCBzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCxcbiAgICAgIGVmZmVjdGl2ZUZpbHRlckRlcHRoLCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQsIGVmZmVjdGl2ZUZpbHRlcldpZHRoLFxuICAgICAgcm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBvdXRDaGFubmVscyA9IGRlcHRod2lzZSA/IGZpbHRlckNoYW5uZWxzICogaW5DaGFubmVscyA6IGZpbHRlckNoYW5uZWxzO1xuXG4gIGxldCBvdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgaWYgKGRhdGFGb3JtYXQgPT09ICdjaGFubmVsc0ZpcnN0Jykge1xuICAgIG91dFNoYXBlID0gW2JhdGNoU2l6ZSwgb3V0Q2hhbm5lbHMsIG91dERlcHRoLCBvdXRIZWlnaHQsIG91dFdpZHRoXTtcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIG91dFNoYXBlID0gW2JhdGNoU2l6ZSwgb3V0RGVwdGgsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dENoYW5uZWxzXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmF0Y2hTaXplLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgaW5EZXB0aCxcbiAgICBpbkhlaWdodCxcbiAgICBpbldpZHRoLFxuICAgIGluQ2hhbm5lbHMsXG4gICAgb3V0RGVwdGgsXG4gICAgb3V0SGVpZ2h0LFxuICAgIG91dFdpZHRoLFxuICAgIG91dENoYW5uZWxzLFxuICAgIHBhZEluZm8sXG4gICAgc3RyaWRlRGVwdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoLFxuICAgIGZpbHRlckRlcHRoLFxuICAgIGZpbHRlckhlaWdodCxcbiAgICBmaWx0ZXJXaWR0aCxcbiAgICBlZmZlY3RpdmVGaWx0ZXJEZXB0aCxcbiAgICBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQsXG4gICAgZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgZGlsYXRpb25EZXB0aCxcbiAgICBkaWxhdGlvbkhlaWdodCxcbiAgICBkaWxhdGlvbldpZHRoLFxuICAgIGluU2hhcGUsXG4gICAgb3V0U2hhcGUsXG4gICAgZmlsdGVyU2hhcGVcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU91dHB1dFNoYXBlMkQoXG4gICAgaW5TaGFwZTogW251bWJlciwgbnVtYmVyXSwgZmllbGRTaXplOiBudW1iZXIsIHN0cmlkZTogbnVtYmVyLFxuICAgIHplcm9QYWQ/OiBudW1iZXIsIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHplcm9QYWQgPT0gbnVsbCkge1xuICAgIHplcm9QYWQgPSBjb21wdXRlRGVmYXVsdFBhZChpblNoYXBlLCBmaWVsZFNpemUsIHN0cmlkZSk7XG4gIH1cbiAgY29uc3QgaW5wdXRSb3dzID0gaW5TaGFwZVswXTtcbiAgY29uc3QgaW5wdXRDb2xzID0gaW5TaGFwZVsxXTtcblxuICBjb25zdCBvdXRwdXRSb3dzID1cbiAgICAgIHJvdW5kKChpbnB1dFJvd3MgLSBmaWVsZFNpemUgKyAyICogemVyb1BhZCkgLyBzdHJpZGUgKyAxLCByb3VuZGluZ01vZGUpO1xuICBjb25zdCBvdXRwdXRDb2xzID1cbiAgICAgIHJvdW5kKChpbnB1dENvbHMgLSBmaWVsZFNpemUgKyAyICogemVyb1BhZCkgLyBzdHJpZGUgKyAxLCByb3VuZGluZ01vZGUpO1xuXG4gIHJldHVybiBbb3V0cHV0Um93cywgb3V0cHV0Q29sc107XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVPdXRwdXRTaGFwZTREKFxuICAgIGluU2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG91dENoYW5uZWxzOiBudW1iZXIsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCB6ZXJvUGFkPzogbnVtYmVyLFxuICAgIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGlmICh6ZXJvUGFkID09IG51bGwpIHtcbiAgICB6ZXJvUGFkID0gY29tcHV0ZURlZmF1bHRQYWQoaW5TaGFwZSwgZmlsdGVyU2hhcGVbMF0sIHN0cmlkZXNbMF0pO1xuICB9XG4gIGNvbnN0IG91dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFswLCAwLCAwLCBvdXRDaGFubmVsc107XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAzOyBpbmRleCsrKSB7XG4gICAgaWYgKGluU2hhcGVbaW5kZXhdICsgMiAqIHplcm9QYWQgPj0gZmlsdGVyU2hhcGVbaW5kZXhdKSB7XG4gICAgICBvdXRTaGFwZVtpbmRleF0gPSByb3VuZChcbiAgICAgICAgICAoaW5TaGFwZVtpbmRleF0gLSBmaWx0ZXJTaGFwZVtpbmRleF0gKyAyICogemVyb1BhZCkgLyBzdHJpZGVzW2luZGV4XSArXG4gICAgICAgICAgICAgIDEsXG4gICAgICAgICAgcm91bmRpbmdNb2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dFNoYXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlZmF1bHRQYWQoXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBmaWVsZFNpemU6IG51bWJlciwgc3RyaWRlOiBudW1iZXIsIGRpbGF0aW9uID0gMSk6IG51bWJlciB7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpZWxkU2l6ZSA9IGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmllbGRTaXplLCBkaWxhdGlvbik7XG4gIHJldHVybiBNYXRoLmZsb29yKFxuICAgICAgKGlucHV0U2hhcGVbMF0gKiAoc3RyaWRlIC0gMSkgLSBzdHJpZGUgKyBlZmZlY3RpdmVGaWVsZFNpemUpIC8gMik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHVwbGVQYXJhbShwYXJhbTogbnVtYmVyfG51bWJlcltdKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3BhcmFtLCBwYXJhbSwgcGFyYW1dO1xuICB9XG4gIGlmIChwYXJhbS5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gW3BhcmFtWzBdLCBwYXJhbVsxXSwgMV07XG4gIH1cbiAgcmV0dXJuIHBhcmFtIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZnVuY3Rpb24gcGFyc2UzVHVwbGVQYXJhbShwYXJhbTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6XG4gICAgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgPyBbcGFyYW0sIHBhcmFtLCBwYXJhbV0gOiBwYXJhbTtcbn1cblxuLyogU2VlIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9hdHJvdXNfY29udjJkXG4gKiBBdHJvdXMgY29udm9sdXRpb24gaXMgZXF1aXZhbGVudCB0byBzdGFuZGFyZCBjb252b2x1dGlvbiB3aXRoIHVwc2FtcGxlZFxuICogZmlsdGVycyB3aXRoIGVmZmVjdGl2ZV9maWx0ZXJfaGVpZ2h0ID1cbiAqIGZpbHRlcl9oZWlnaHQgKyAoZmlsdGVyX2hlaWdodCAtIDEpICogKGRpbGF0aW9uIC0gMSlcbiAqIGFuZCBlZmZlY3RpdmVfZmlsdGVyX3dpZHRoID1cbiAqIGZpbHRlcl93aWR0aCArIChmaWx0ZXJfd2lkdGggLSAxKSAqIChkaWxhdGlvbiAtIDEpLFxuICogcHJvZHVjZWQgYnkgaW5zZXJ0aW5nIGRpbGF0aW9uIC0gMSB6ZXJvcyBhbG9uZyBjb25zZWN1dGl2ZSBlbGVtZW50cyBhY3Jvc3NcbiAqIHRoZSBmaWx0ZXJzJyBzcGF0aWFsIGRpbWVuc2lvbnMuXG4gKiBXaGVuIHRoZXJlIGlzIGEgZGlsYXRpb24sIHRoaXMgY29udmVydHMgYSBmaWx0ZXIgZGltZW5zaW9uIHRvIHRoZVxuICogZWZmZWN0aXZlIGZpbHRlciBkaW1lbnNpb24sIHNvIGl0IGNhbiBiZSB1c2VkIGluIGEgc3RhbmRhcmQgY29udm9sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldEVmZmVjdGl2ZUZpbHRlclNpemUoZmlsdGVyU2l6ZTogbnVtYmVyLCBkaWxhdGlvbjogbnVtYmVyKSB7XG4gIGlmIChkaWxhdGlvbiA8PSAxKSB7XG4gICAgcmV0dXJuIGZpbHRlclNpemU7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyU2l6ZSArIChmaWx0ZXJTaXplIC0gMSkgKiAoZGlsYXRpb24gLSAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFkQW5kT3V0SW5mbyhcbiAgICBwYWQ6ICdzYW1lJ3wndmFsaWQnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsIGluSGVpZ2h0OiBudW1iZXIsXG4gICAgaW5XaWR0aDogbnVtYmVyLCBzdHJpZGVIZWlnaHQ6IG51bWJlciwgc3RyaWRlV2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlcixcbiAgICByb3VuZGluZ01vZGU6ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gICAgZGF0YUZvcm1hdDogJ2NoYW5uZWxzRmlyc3QnfFxuICAgICdjaGFubmVsc0xhc3QnKToge3BhZEluZm86IFBhZEluZm8sIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyfSB7XG4gIGxldCBwYWRJbmZvOiBQYWRJbmZvO1xuICBsZXQgb3V0SGVpZ2h0OiBudW1iZXI7XG4gIGxldCBvdXRXaWR0aDogbnVtYmVyO1xuXG4gIGlmICh0eXBlb2YgcGFkID09PSAnbnVtYmVyJykge1xuICAgIGNvbnN0IHBhZFR5cGUgPSAocGFkID09PSAwKSA/ICdWQUxJRCcgOiAnTlVNQkVSJztcbiAgICBwYWRJbmZvID0ge3RvcDogcGFkLCBib3R0b206IHBhZCwgbGVmdDogcGFkLCByaWdodDogcGFkLCB0eXBlOiBwYWRUeXBlfTtcbiAgICBjb25zdCBvdXRTaGFwZSA9IGNvbXB1dGVPdXRwdXRTaGFwZTJEKFxuICAgICAgICBbaW5IZWlnaHQsIGluV2lkdGhdLCBmaWx0ZXJIZWlnaHQsIHN0cmlkZUhlaWdodCwgcGFkLCByb3VuZGluZ01vZGUpO1xuICAgIG91dEhlaWdodCA9IG91dFNoYXBlWzBdO1xuICAgIG91dFdpZHRoID0gb3V0U2hhcGVbMV07XG4gIH0gZWxzZSBpZiAocGFkID09PSAnc2FtZScpIHtcbiAgICBvdXRIZWlnaHQgPSBNYXRoLmNlaWwoaW5IZWlnaHQgLyBzdHJpZGVIZWlnaHQpO1xuICAgIG91dFdpZHRoID0gTWF0aC5jZWlsKGluV2lkdGggLyBzdHJpZGVXaWR0aCk7XG4gICAgY29uc3QgcGFkQWxvbmdIZWlnaHQgPVxuICAgICAgICBNYXRoLm1heCgwLCAob3V0SGVpZ2h0IC0gMSkgKiBzdHJpZGVIZWlnaHQgKyBmaWx0ZXJIZWlnaHQgLSBpbkhlaWdodCk7XG4gICAgY29uc3QgcGFkQWxvbmdXaWR0aCA9XG4gICAgICAgIE1hdGgubWF4KDAsIChvdXRXaWR0aCAtIDEpICogc3RyaWRlV2lkdGggKyBmaWx0ZXJXaWR0aCAtIGluV2lkdGgpO1xuICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IocGFkQWxvbmdIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBib3R0b20gPSBwYWRBbG9uZ0hlaWdodCAtIHRvcDtcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5mbG9vcihwYWRBbG9uZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgcmlnaHQgPSBwYWRBbG9uZ1dpZHRoIC0gbGVmdDtcbiAgICBwYWRJbmZvID0ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgdHlwZTogJ1NBTUUnfTtcbiAgfSBlbHNlIGlmIChwYWQgPT09ICd2YWxpZCcpIHtcbiAgICBwYWRJbmZvID0ge3RvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgdHlwZTogJ1ZBTElEJ307XG4gICAgb3V0SGVpZ2h0ID0gTWF0aC5jZWlsKChpbkhlaWdodCAtIGZpbHRlckhlaWdodCArIDEpIC8gc3RyaWRlSGVpZ2h0KTtcbiAgICBvdXRXaWR0aCA9IE1hdGguY2VpbCgoaW5XaWR0aCAtIGZpbHRlcldpZHRoICsgMSkgLyBzdHJpZGVXaWR0aCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhZCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0b3AgPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsxXVswXSA6IHBhZFsyXVswXTtcbiAgICBjb25zdCBib3R0b20gPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsxXVsxXSA6IHBhZFsyXVsxXTtcbiAgICBjb25zdCBsZWZ0ID0gZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCcgPyBwYWRbMl1bMF0gOiBwYWRbM11bMF07XG4gICAgY29uc3QgcmlnaHQgPSBkYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JyA/IHBhZFsyXVsxXSA6IHBhZFszXVsxXTtcbiAgICBjb25zdCBwYWRUeXBlID0gKHRvcCA9PT0gMCAmJiBib3R0b20gPT09IDAgJiYgbGVmdCA9PT0gMCAmJiByaWdodCA9PT0gMCkgP1xuICAgICAgICAnVkFMSUQnIDpcbiAgICAgICAgJ0VYUExJQ0lUJztcbiAgICBwYWRJbmZvID0ge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgdHlwZTogcGFkVHlwZX07XG4gICAgb3V0SGVpZ2h0ID0gcm91bmQoXG4gICAgICAgIChpbkhlaWdodCAtIGZpbHRlckhlaWdodCArIHRvcCArIGJvdHRvbSkgLyBzdHJpZGVIZWlnaHQgKyAxLFxuICAgICAgICByb3VuZGluZ01vZGUpO1xuICAgIG91dFdpZHRoID0gcm91bmQoXG4gICAgICAgIChpbldpZHRoIC0gZmlsdGVyV2lkdGggKyBsZWZ0ICsgcmlnaHQpIC8gc3RyaWRlV2lkdGggKyAxLCByb3VuZGluZ01vZGUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKGBVbmtub3duIHBhZGRpbmcgcGFyYW1ldGVyOiAke3BhZH1gKTtcbiAgfVxuICByZXR1cm4ge3BhZEluZm8sIG91dEhlaWdodCwgb3V0V2lkdGh9O1xufVxuXG5mdW5jdGlvbiBnZXQzRFBhZEFuZE91dEluZm8oXG4gICAgcGFkOiAnc2FtZSd8J3ZhbGlkJ3xudW1iZXIsIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlcixcbiAgICBpbldpZHRoOiBudW1iZXIsIHN0cmlkZURlcHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICAgIHN0cmlkZVdpZHRoOiBudW1iZXIsIGZpbHRlckRlcHRoOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLFxuICAgIGZpbHRlcldpZHRoOiBudW1iZXIsIHJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiB7XG4gIHBhZEluZm86IFBhZEluZm8zRCxcbiAgb3V0RGVwdGg6IG51bWJlcixcbiAgb3V0SGVpZ2h0OiBudW1iZXIsXG4gIG91dFdpZHRoOiBudW1iZXJcbn0ge1xuICBsZXQgcGFkSW5mbzogUGFkSW5mbzNEO1xuICBsZXQgb3V0RGVwdGg6IG51bWJlcjtcbiAgbGV0IG91dEhlaWdodDogbnVtYmVyO1xuICBsZXQgb3V0V2lkdGg6IG51bWJlcjtcblxuICBpZiAocGFkID09PSAndmFsaWQnKSB7XG4gICAgcGFkID0gMDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFkID09PSAnbnVtYmVyJykge1xuICAgIGNvbnN0IHBhZFR5cGUgPSAocGFkID09PSAwKSA/ICdWQUxJRCcgOiAnTlVNQkVSJztcbiAgICBwYWRJbmZvID0ge1xuICAgICAgdG9wOiBwYWQsXG4gICAgICBib3R0b206IHBhZCxcbiAgICAgIGxlZnQ6IHBhZCxcbiAgICAgIHJpZ2h0OiBwYWQsXG4gICAgICBmcm9udDogcGFkLFxuICAgICAgYmFjazogcGFkLFxuICAgICAgdHlwZTogcGFkVHlwZVxuICAgIH07XG4gICAgY29uc3Qgb3V0U2hhcGUgPSBjb21wdXRlT3V0cHV0U2hhcGU0RChcbiAgICAgICAgW2luRGVwdGgsIGluSGVpZ2h0LCBpbldpZHRoLCAxXSxcbiAgICAgICAgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXSwgMSxcbiAgICAgICAgW3N0cmlkZURlcHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXSwgcGFkLCByb3VuZGluZ01vZGUpO1xuICAgIG91dERlcHRoID0gb3V0U2hhcGVbMF07XG4gICAgb3V0SGVpZ2h0ID0gb3V0U2hhcGVbMV07XG4gICAgb3V0V2lkdGggPSBvdXRTaGFwZVsyXTtcbiAgfSBlbHNlIGlmIChwYWQgPT09ICdzYW1lJykge1xuICAgIG91dERlcHRoID0gTWF0aC5jZWlsKGluRGVwdGggLyBzdHJpZGVEZXB0aCk7XG4gICAgb3V0SGVpZ2h0ID0gTWF0aC5jZWlsKGluSGVpZ2h0IC8gc3RyaWRlSGVpZ2h0KTtcbiAgICBvdXRXaWR0aCA9IE1hdGguY2VpbChpbldpZHRoIC8gc3RyaWRlV2lkdGgpO1xuICAgIGNvbnN0IHBhZEFsb25nRGVwdGggPSAob3V0RGVwdGggLSAxKSAqIHN0cmlkZURlcHRoICsgZmlsdGVyRGVwdGggLSBpbkRlcHRoO1xuICAgIGNvbnN0IHBhZEFsb25nSGVpZ2h0ID1cbiAgICAgICAgKG91dEhlaWdodCAtIDEpICogc3RyaWRlSGVpZ2h0ICsgZmlsdGVySGVpZ2h0IC0gaW5IZWlnaHQ7XG4gICAgY29uc3QgcGFkQWxvbmdXaWR0aCA9IChvdXRXaWR0aCAtIDEpICogc3RyaWRlV2lkdGggKyBmaWx0ZXJXaWR0aCAtIGluV2lkdGg7XG4gICAgY29uc3QgZnJvbnQgPSBNYXRoLmZsb29yKHBhZEFsb25nRGVwdGggLyAyKTtcbiAgICBjb25zdCBiYWNrID0gcGFkQWxvbmdEZXB0aCAtIGZyb250O1xuICAgIGNvbnN0IHRvcCA9IE1hdGguZmxvb3IocGFkQWxvbmdIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBib3R0b20gPSBwYWRBbG9uZ0hlaWdodCAtIHRvcDtcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5mbG9vcihwYWRBbG9uZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgcmlnaHQgPSBwYWRBbG9uZ1dpZHRoIC0gbGVmdDtcblxuICAgIHBhZEluZm8gPSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LCBmcm9udCwgYmFjaywgdHlwZTogJ1NBTUUnfTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihgVW5rbm93biBwYWRkaW5nIHBhcmFtZXRlcjogJHtwYWR9YCk7XG4gIH1cbiAgcmV0dXJuIHtwYWRJbmZvLCBvdXREZXB0aCwgb3V0SGVpZ2h0LCBvdXRXaWR0aH07XG59XG5cbi8qKlxuICogUm91bmRzIGEgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSByb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gcm91bmQodmFsdWU6IG51bWJlciwgcm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJykge1xuICBpZiAoIXJvdW5kaW5nTW9kZSkge1xuICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlKTtcbiAgfVxuICBzd2l0Y2ggKHJvdW5kaW5nTW9kZSkge1xuICAgIGNhc2UgJ3JvdW5kJzpcbiAgICAgIC8vIHVzZWQgZm9yIENhZmZlIENvbnZcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjYXNlICdjZWlsJzpcbiAgICAgIC8vIHVzZWQgZm9yIENhZmZlIFBvb2xcbiAgICAgIHJldHVybiBNYXRoLmNlaWwodmFsdWUpO1xuICAgIGNhc2UgJ2Zsb29yJzpcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJvdW5kaW5nTW9kZSAke3JvdW5kaW5nTW9kZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVwbGVWYWx1ZXNBcmVPbmUocGFyYW06IG51bWJlcnxudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBbZGltQSwgZGltQiwgZGltQ10gPSBwYXJzZVR1cGxlUGFyYW0ocGFyYW0pO1xuICByZXR1cm4gZGltQSA9PT0gMSAmJiBkaW1CID09PSAxICYmIGRpbUMgPT09IDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlaXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoXG4gICAgc3RyaWRlczogbnVtYmVyfG51bWJlcltdLCBkaWxhdGlvbnM6IG51bWJlcnxudW1iZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHVwbGVWYWx1ZXNBcmVPbmUoc3RyaWRlcykgfHwgdHVwbGVWYWx1ZXNBcmVPbmUoZGlsYXRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlKHZhbHVlczogbnVtYmVyfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJzZVR1cGxlUGFyYW0odmFsdWVzKS5ldmVyeSh2YWx1ZSA9PiB2YWx1ZSA+IDApO1xufVxuXG4vKipcbiAqIENvbnZlcnQgQ29udjJEIGRhdGFGb3JtYXQgZnJvbSAnTkhXQyd8J05DSFcnIHRvXG4gKiAgICAnY2hhbm5lbHNMYXN0J3wnY2hhbm5lbHNGaXJzdCdcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IGluICdOSFdDJ3wnTkNIVycgbW9kZVxuICogQHJldHVybiBkYXRhRm9ybWF0IGluICdjaGFubmVsc0xhc3QnfCdjaGFubmVsc0ZpcnN0JyBtb2RlXG4gKiBAdGhyb3dzIHVua25vd24gZGF0YUZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdDogJ05IV0MnfCdOQ0hXJyk6XG4gICAgJ2NoYW5uZWxzTGFzdCd8J2NoYW5uZWxzRmlyc3QnIHtcbiAgaWYgKGRhdGFGb3JtYXQgPT09ICdOSFdDJykge1xuICAgIHJldHVybiAnY2hhbm5lbHNMYXN0JztcbiAgfSBlbHNlIGlmIChkYXRhRm9ybWF0ID09PSAnTkNIVycpIHtcbiAgICByZXR1cm4gJ2NoYW5uZWxzRmlyc3QnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhRm9ybWF0ICR7ZGF0YUZvcm1hdH1gKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHZhbGlkaXR5IG9mIHBhZCB3aGVuIHVzaW5nIGRpbVJvdW5kaW5nTW9kZS5cbiAqIEBwYXJhbSBvcERlc2MgQSBzdHJpbmcgb2Ygb3AgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgLSBgdmFsaWRgIG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEB0aHJvd3MgdW5rbm93biBwYWRkaW5nIHBhcmFtZXRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZShcbiAgICBvcERlc2M6IHN0cmluZywgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpIHtcbiAgaWYgKGRpbVJvdW5kaW5nTW9kZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBwYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgYGRpbVJvdW5kaW5nTW9kZSAke2RpbVJvdW5kaW5nTW9kZX0gYnV0IGdvdCBwYWQgJHtwYWR9LmApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgIHV0aWwuaXNJbnQocGFkKSxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgICAgIGBkaW1Sb3VuZGluZ01vZGUgJHtkaW1Sb3VuZGluZ01vZGV9IGJ1dCBnb3QgcGFkICR7cGFkfS5gKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAocGFkIGFzIEV4cGxpY2l0UGFkZGluZykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgcC5mb3JFYWNoKHYgPT4ge1xuICAgICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgICB1dGlsLmlzSW50KHYpLFxuICAgICAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gJHtvcERlc2N9OiBwYWQgbXVzdCBiZSBhbiBpbnRlZ2VyIHdoZW4gdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICBgZGltUm91bmRpbmdNb2RlICR7ZGltUm91bmRpbmdNb2RlfSBidXQgZ290IHBhZCAke3Z9LmApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXJyb3IgaW4gJHtvcERlc2N9OiBVbmtub3duIHBhZGRpbmcgcGFyYW1ldGVyOiAke3BhZH1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reshape } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Reshapes a `tf.Tensor` to a given shape.\n *\n * Given an input tensor, returns a new tensor with the same values as the\n * input tensor with shape `shape`.\n *\n * If one component of shape is the special value -1, the size of that\n * dimension is computed so that the total size remains constant. In\n * particular, a shape of [-1] flattens into 1-D. At most one component of\n * shape can be -1.\n *\n * If shape is 1-D or higher, then the operation returns a tensor with shape\n * shape filled with the values of tensor. In this case, the number of\n * elements implied by shape must be the same as the number of elements in\n * tensor.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.reshape([2, 2]).print();\n * ```\n *\n * @param x The input tensor to be reshaped.\n * @param shape An array of integers defining the output tensor shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction reshape_(x, shape) {\n const $x = convertToTensor(x, 'x', 'reshape', 'string_or_numeric');\n const inputs = { x: $x };\n const attrs = { shape };\n return ENGINE.runKernel(Reshape, inputs, attrs);\n}\nexport const reshape = /* @__PURE__ */ op({ reshape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsU0FBUyxRQUFRLENBQ2IsQ0FBb0IsRUFBRSxLQUFrQjtJQUMxQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUVuRSxNQUFNLE1BQU0sR0FBa0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQWlCLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixPQUFPLEVBQUUsTUFBbUMsRUFDNUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSZXNoYXBlLCBSZXNoYXBlQXR0cnMsIFJlc2hhcGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmVzaGFwZXMgYSBgdGYuVGVuc29yYCB0byBhIGdpdmVuIHNoYXBlLlxuICpcbiAqIEdpdmVuIGFuIGlucHV0IHRlbnNvciwgcmV0dXJucyBhIG5ldyB0ZW5zb3Igd2l0aCB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gKiBpbnB1dCB0ZW5zb3Igd2l0aCBzaGFwZSBgc2hhcGVgLlxuICpcbiAqIElmIG9uZSBjb21wb25lbnQgb2Ygc2hhcGUgaXMgdGhlIHNwZWNpYWwgdmFsdWUgLTEsIHRoZSBzaXplIG9mIHRoYXRcbiAqIGRpbWVuc2lvbiBpcyBjb21wdXRlZCBzbyB0aGF0IHRoZSB0b3RhbCBzaXplIHJlbWFpbnMgY29uc3RhbnQuIEluXG4gKiBwYXJ0aWN1bGFyLCBhIHNoYXBlIG9mIFstMV0gZmxhdHRlbnMgaW50byAxLUQuIEF0IG1vc3Qgb25lIGNvbXBvbmVudCBvZlxuICogc2hhcGUgY2FuIGJlIC0xLlxuICpcbiAqIElmIHNoYXBlIGlzIDEtRCBvciBoaWdoZXIsIHRoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIGEgdGVuc29yIHdpdGggc2hhcGVcbiAqIHNoYXBlIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZXMgb2YgdGVuc29yLiBJbiB0aGlzIGNhc2UsIHRoZSBudW1iZXIgb2ZcbiAqIGVsZW1lbnRzIGltcGxpZWQgYnkgc2hhcGUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluXG4gKiB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogeC5yZXNoYXBlKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gYmUgcmVzaGFwZWQuXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gcmVzaGFwZV88UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBzaGFwZTogU2hhcGVNYXBbUl0pOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXNoYXBlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXNoYXBlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFJlc2hhcGVBdHRycyA9IHtzaGFwZX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgUmVzaGFwZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5leHBvcnQgY29uc3QgcmVzaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVzaGFwZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AvgPool } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 2D average pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction avgPool_(x, filterSize, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'avgPool', 'float32');\n const dilations = 1;\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in avgPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${x4D.rank}.`);\n conv_util.checkPadOnDimRoundingMode('avgPool', pad, dimRoundingMode);\n const inputs = { x: x4D };\n const attrs = { filterSize, strides, pad, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(AvgPool, inputs, attrs);\n res = cast(res, $x.dtype);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const avgPool = /* @__PURE__ */ op({ avgPool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZnX3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdmdfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFJckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFlLEVBQUUsVUFBbUMsRUFDcEQsT0FBZ0MsRUFDaEMsR0FBb0QsRUFDcEQsZUFBd0M7SUFDMUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFL0QsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQyxtREFBbUQsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUUsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFpQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDO0lBRXhFLDBEQUEwRDtJQUMxRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFNLENBQUM7SUFFckQsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFCLElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sQ0FBQztLQUN0RTtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0F2Z1Bvb2wsIEF2Z1Bvb2xBdHRycywgQXZnUG9vbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDJEIGF2ZXJhZ2UgcG9vbGluZyBvZiBhbiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXJTaXplIFRoZSBmaWx0ZXIgc2l6ZTogYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXWAuIElmXG4gKiAgICAgYGZpbHRlclNpemVgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgZmlsdGVySGVpZ2h0ID09IGZpbHRlcldpZHRoYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC4gSWZcbiAqICAgICBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobTpcbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYXZnUG9vbF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlclNpemU6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfGNvbnZfdXRpbC5FeHBsaWNpdFBhZGRpbmcsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdmdQb29sJywgJ2Zsb2F0MzInKTtcbiAgY29uc3QgZGlsYXRpb25zID0gMTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBhdmdQb29sOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBhdmdQb29sOiB4IG11c3QgYmUgcmFuayA0IGJ1dCBnb3QgcmFuayAke3g0RC5yYW5rfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2F2Z1Bvb2wnLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0czogQXZnUG9vbElucHV0cyA9IHt4OiB4NER9O1xuICBjb25zdCBhdHRyczogQXZnUG9vbEF0dHJzID0ge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGxldCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgIEF2Z1Bvb2wsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIHJlcyA9IGNhc3QocmVzLCAkeC5kdHlwZSk7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGF2Z1Bvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2F2Z1Bvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { AvgPool3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { checkPadOnDimRoundingMode } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 3D average pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.avgPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n * `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n * `[filterDepth, filterHeight, filterWidth]`.\n * If `filterSize` is a single number,\n * then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n * `[strideDepth, strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction avgPool3d_(x, filterSize, strides, pad, dimRoundingMode, dataFormat = 'NDHWC') {\n const $x = convertToTensor(x, 'x', 'avgPool3d', 'float32');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n util.assert(dataFormat === 'NDHWC', () => `Error in avgPool3d: Only NDHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n util.assert((typeof strides === 'number' && strides > 0) ||\n (Array.isArray(strides) && strides[0] > 0 && strides[1] > 0 &&\n strides[2] > 0), () => `Error in avgPool3d: Stride must be > 0, but got '${strides}'`);\n checkPadOnDimRoundingMode('avgPool3d', pad, dimRoundingMode);\n const inputs = { x: x5D };\n const attrs = { filterSize, strides, pad, dimRoundingMode, dataFormat };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(AvgPool3D, inputs, attrs);\n res = cast(res, x5D.dtype);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const avgPool3d = /* @__PURE__ */ op({ avgPool3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZnX3Bvb2xfM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hdmdfcG9vbF8zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQWtDLE1BQU0saUJBQWlCLENBQUM7QUFJM0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsVUFBMkMsRUFDNUQsT0FBd0MsRUFBRSxHQUEwQixFQUNwRSxlQUF3QyxFQUN4QyxhQUE4QixPQUFPO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUUzRCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTtJQUVELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMscURBQXFELEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxLQUFLLE9BQU8sRUFDdEIsR0FBRyxFQUFFLENBQUMseURBQXlEO1FBQzNELHlCQUF5QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLG9EQUFvRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsTUFBTSxNQUFNLEdBQW9CLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUNVLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxDQUFDO0lBRTdFLDBEQUEwRDtJQUMxRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFNLENBQUM7SUFFckQsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNCLElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUNILEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztLQUNQO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QXZnUG9vbDNELCBBdmdQb29sM0RBdHRycywgQXZnUG9vbDNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtjaGVja1BhZE9uRGltUm91bmRpbmdNb2RlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDNEIGF2ZXJhZ2UgcG9vbGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjVkKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwgWzEsIDIsIDIsIDIsIDFdKTtcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLmF2Z1Bvb2wzZCh4LCAyLCAxLCAndmFsaWQnKTtcbiAqIHJlc3VsdC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA1IG9yIHJhbmsgNCBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuXG4gKiBAcGFyYW0gZmlsdGVyU2l6ZSBUaGUgZmlsdGVyIHNpemU6XG4gKiAgICAgYFtmaWx0ZXJEZXB0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLlxuICogICAgIElmIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsXG4gKiAgICAgdGhlbiBgZmlsdGVyRGVwdGggPT0gZmlsdGVySGVpZ2h0ID09IGZpbHRlcldpZHRoYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOlxuICogICAgIGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqICAgICBJZiBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLFxuICogICAgIHRoZW4gYHN0cmlkZURlcHRoID09IHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxKjF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOREhXQ1wiLCBcIk5DREhXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOREhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkRIV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOREhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBhdmdQb29sM2RfPFQgZXh0ZW5kcyBUZW5zb3I0RHxUZW5zb3I1RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXIsIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gICAgZGF0YUZvcm1hdDogJ05ESFdDJ3wnTkNESFcnID0gJ05ESFdDJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdhdmdQb29sM2QnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NUQgPSAkeCBhcyBUZW5zb3I1RDtcbiAgbGV0IHJlc2hhcGVkVG81RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgeDVEID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl0sICR4LnNoYXBlWzNdXSk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgIHg1RC5yYW5rID09PSA1LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGF2Z1Bvb2wzZDogeCBtdXN0IGJlIHJhbmsgNSBidXQgZ290IHJhbmsgJHt4NUQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZGF0YUZvcm1hdCA9PT0gJ05ESFdDJyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBhdmdQb29sM2Q6IE9ubHkgTkRIV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZCwgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgZGF0YUZvcm1hdCBvZiAke2RhdGFGb3JtYXR9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKHR5cGVvZiBzdHJpZGVzID09PSAnbnVtYmVyJyAmJiBzdHJpZGVzID4gMCkgfHxcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShzdHJpZGVzKSAmJiBzdHJpZGVzWzBdID4gMCAmJiBzdHJpZGVzWzFdID4gMCAmJlxuICAgICAgICAgICBzdHJpZGVzWzJdID4gMCksXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYXZnUG9vbDNkOiBTdHJpZGUgbXVzdCBiZSA+IDAsIGJ1dCBnb3QgJyR7c3RyaWRlc30nYCk7XG4gIGNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2F2Z1Bvb2wzZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBBdmdQb29sM0RJbnB1dHMgPSB7eDogeDVEfTtcbiAgY29uc3QgYXR0cnM6XG4gICAgICBBdmdQb29sM0RBdHRycyA9IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdH07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBsZXQgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICBBdmdQb29sM0QsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIHJlcyA9IGNhc3QocmVzLCB4NUQuZHR5cGUpO1xuXG4gIGlmIChyZXNoYXBlZFRvNUQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShcbiAgICAgICAgICAgICAgIHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM10sIHJlcy5zaGFwZVs0XV0pIGFzXG4gICAgICAgIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbDNkID0gLyogQF9fUFVSRV9fICovIG9wKHthdmdQb29sM2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Concat } from '../kernel_names';\nimport { convertToTensorArray } from '../tensor_util_env';\nimport { assert } from '../util';\nimport { clone } from './clone';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor`s along a given axis.\n *\n * The tensors ranks and types must match, and their sizes must match in all\n * dimensions except `axis`.\n *\n * Also available are stricter rank-specific methods that assert that\n * `tensors` are of the given rank:\n * - `tf.concat1d`\n * - `tf.concat2d`\n * - `tf.concat3d`\n * - `tf.concat4d`\n *\n * Except `tf.concat1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * a.concat(b).print(); // or a.concat(b)\n * ```\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.concat([a, b, c]).print();\n * ```\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [10, 20]]);\n * const b = tf.tensor2d([[3, 4], [30, 40]]);\n * const axis = 1;\n * tf.concat([a, b], axis).print();\n * ```\n * @param tensors A list of tensors to concatenate.\n * @param axis The axis to concatenate along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction concat_(tensors, axis = 0) {\n assert(tensors.length >= 1, () => 'Pass at least one tensor to concat');\n const $tensors = convertToTensorArray(tensors, 'tensors', 'concat', 'string_or_numeric');\n if ($tensors[0].dtype === 'complex64') {\n $tensors.forEach(tensor => {\n if (tensor.dtype !== 'complex64') {\n throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${tensor.dtype}. `);\n }\n });\n }\n if ($tensors.length === 1) {\n return clone($tensors[0]);\n }\n const inputs = $tensors;\n const attr = { axis };\n return ENGINE.runKernel(Concat, inputs, attr);\n}\nexport const concat = /* @__PURE__ */ op({ concat_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsU0FBUyxPQUFPLENBQW1CLE9BQTRCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDdkUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFeEUsTUFBTSxRQUFRLEdBQ1Ysb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUU1RSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQzt1QkFDRCxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzNCO0lBRUQsTUFBTSxNQUFNLEdBQWlCLFFBQVEsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBZ0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxJQUErQixDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb25jYXQsIENvbmNhdEF0dHJzLCBDb25jYXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjbG9uZX0gZnJvbSAnLi9jbG9uZSc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29uY2F0ZW5hdGVzIGEgbGlzdCBvZiBgdGYuVGVuc29yYHMgYWxvbmcgYSBnaXZlbiBheGlzLlxuICpcbiAqIFRoZSB0ZW5zb3JzIHJhbmtzIGFuZCB0eXBlcyBtdXN0IG1hdGNoLCBhbmQgdGhlaXIgc2l6ZXMgbXVzdCBtYXRjaCBpbiBhbGxcbiAqIGRpbWVuc2lvbnMgZXhjZXB0IGBheGlzYC5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHRoYXQgYXNzZXJ0IHRoYXRcbiAqIGB0ZW5zb3JzYCBhcmUgb2YgdGhlIGdpdmVuIHJhbms6XG4gKiAgIC0gYHRmLmNvbmNhdDFkYFxuICogICAtIGB0Zi5jb25jYXQyZGBcbiAqICAgLSBgdGYuY29uY2F0M2RgXG4gKiAgIC0gYHRmLmNvbmNhdDRkYFxuICpcbiAqIEV4Y2VwdCBgdGYuY29uY2F0MWRgICh3aGljaCBkb2VzIG5vdCBoYXZlIGF4aXMgcGFyYW0pLCBhbGwgbWV0aG9kcyBoYXZlXG4gKiBzYW1lIHNpZ25hdHVyZSBhcyB0aGlzIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzMsIDRdKTtcbiAqIGEuY29uY2F0KGIpLnByaW50KCk7ICAvLyBvciBhLmNvbmNhdChiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFszLCA0XSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMWQoWzUsIDZdKTtcbiAqIHRmLmNvbmNhdChbYSwgYiwgY10pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFtbMSwgMl0sIFsxMCwgMjBdXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoW1szLCA0XSwgWzMwLCA0MF1dKTtcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogdGYuY29uY2F0KFthLCBiXSwgYXhpcykucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIHRlbnNvcnMgdG8gY29uY2F0ZW5hdGUuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBjb25jYXRlbmF0ZSBhbG9uZy4gRGVmYXVsdHMgdG8gMCAodGhlIGZpcnN0IGRpbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIGNvbmNhdF88VCBleHRlbmRzIFRlbnNvcj4odGVuc29yczogQXJyYXk8VHxUZW5zb3JMaWtlPiwgYXhpcyA9IDApOiBUIHtcbiAgYXNzZXJ0KHRlbnNvcnMubGVuZ3RoID49IDEsICgpID0+ICdQYXNzIGF0IGxlYXN0IG9uZSB0ZW5zb3IgdG8gY29uY2F0Jyk7XG5cbiAgY29uc3QgJHRlbnNvcnMgPVxuICAgICAgY29udmVydFRvVGVuc29yQXJyYXkodGVuc29ycywgJ3RlbnNvcnMnLCAnY29uY2F0JywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgaWYgKCR0ZW5zb3JzWzBdLmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICR0ZW5zb3JzLmZvckVhY2godGVuc29yID0+IHtcbiAgICAgIGlmICh0ZW5zb3IuZHR5cGUgIT09ICdjb21wbGV4NjQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbmNhdGVuYXRlIGNvbXBsZXg2NCB0ZW5zb3JzIHdpdGggYSB0ZW5zb3JcbiAgICAgICAgICB3aXRoIGR0eXBlICR7dGVuc29yLmR0eXBlfS4gYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoJHRlbnNvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNsb25lKCR0ZW5zb3JzWzBdKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQ29uY2F0SW5wdXRzID0gJHRlbnNvcnM7XG4gIGNvbnN0IGF0dHI6IENvbmNhdEF0dHJzID0ge2F4aXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ29uY2F0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHIgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgY29uY2F0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb25jYXRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BatchMatMul } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the dot product of two matrices, A * B. These must be matrices.\n *\n * ```js\n * const a = tf.tensor2d([1, 2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.matMul(b).print(); // or tf.matMul(a, b)\n * ```\n * @param a First matrix in dot product operation.\n * @param b Second matrix in dot product operation.\n * @param transposeA If true, `a` is transposed before multiplication.\n * @param transposeB If true, `b` is transposed before multiplication.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction matMul_(a, b, transposeA = false, transposeB = false) {\n let $a = convertToTensor(a, 'a', 'matMul');\n let $b = convertToTensor(b, 'b', 'matMul');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n const attrs = { transposeA, transposeB };\n return ENGINE.runKernel(BatchMatMul, inputs, attrs);\n}\nexport const matMul = /* @__PURE__ */ op({ matMul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0X211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21hdF9tdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFzQyxNQUFNLGlCQUFpQixDQUFDO0FBSWpGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLE9BQU8sQ0FDWixDQUFvQixFQUFFLENBQW9CLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFDOUQsVUFBVSxHQUFHLEtBQUs7SUFDcEIsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBc0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBcUIsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFFekQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixXQUFXLEVBQUUsTUFBbUMsRUFDaEQsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmF0Y2hNYXRNdWwsIEJhdGNoTWF0TXVsQXR0cnMsIEJhdGNoTWF0TXVsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcywgQSAqIEIuIFRoZXNlIG11c3QgYmUgbWF0cmljZXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbMSwgMl0sIFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGEubWF0TXVsKGIpLnByaW50KCk7ICAvLyBvciB0Zi5tYXRNdWwoYSwgYilcbiAqIGBgYFxuICogQHBhcmFtIGEgRmlyc3QgbWF0cml4IGluIGRvdCBwcm9kdWN0IG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBiIFNlY29uZCBtYXRyaXggaW4gZG90IHByb2R1Y3Qgb3BlcmF0aW9uLlxuICogQHBhcmFtIHRyYW5zcG9zZUEgSWYgdHJ1ZSwgYGFgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogQHBhcmFtIHRyYW5zcG9zZUIgSWYgdHJ1ZSwgYGJgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gbWF0TXVsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UsIHRyYW5zcG9zZUEgPSBmYWxzZSxcbiAgICB0cmFuc3Bvc2VCID0gZmFsc2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ21hdE11bCcpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWF0TXVsJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBjb25zdCBpbnB1dHM6IEJhdGNoTWF0TXVsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzOiBCYXRjaE1hdE11bEF0dHJzID0ge3RyYW5zcG9zZUEsIHRyYW5zcG9zZUJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQmF0Y2hNYXRNdWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbWF0TXVsID0gLyogQF9fUFVSRV9fICovIG9wKHttYXRNdWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sigmoid } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes sigmoid element-wise, `1 / (1 + exp(-x))`\n *\n * ```js\n * const x = tf.tensor1d([0, -1, 2, -3]);\n *\n * x.sigmoid().print(); // or tf.sigmoid(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sigmoid_(x) {\n const $x = convertToTensor(x, 'x', 'sigmoid', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sigmoid, inputs);\n}\nexport const sigmoid = /* @__PURE__ */ op({ sigmoid_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ21vaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLENBQWU7SUFDakQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXpELE1BQU0sTUFBTSxHQUFrQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV0QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2lnbW9pZCwgU2lnbW9pZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzaWdtb2lkIGVsZW1lbnQtd2lzZSwgYDEgLyAoMSArIGV4cCgteCkpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIC0xLCAyLCAtM10pO1xuICpcbiAqIHguc2lnbW9pZCgpLnByaW50KCk7ICAvLyBvciB0Zi5zaWdtb2lkKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHNpZ21vaWRfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaWdtb2lkJywgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBpbnB1dHM6IFNpZ21vaWRJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpZ21vaWQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaWdtb2lkID0gLyogQF9fUFVSRV9fICovIG9wKHtzaWdtb2lkX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Slice } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Extracts a slice from a `tf.Tensor` starting at coordinates `begin`\n * and is of size `size`.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `x` is of the given rank:\n * - `tf.slice1d`\n * - `tf.slice2d`\n * - `tf.slice3d`\n * - `tf.slice4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.slice([1], [2]).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * x.slice([1, 0], [1, 2]).print();\n * ```\n * @param x The input `tf.Tensor` to slice from.\n * @param begin The coordinates to start the slice from. The length can be\n * less than the rank of x - the rest of the axes will have implicit 0 as\n * start. Can also be a single number, in which case it specifies the\n * first axis.\n * @param size The size of the slice. The length can be less than the rank of\n * x - the rest of the axes will have implicit -1. A value of -1 requests\n * the rest of the dimensions in the axis. Can also be a single number,\n * in which case it specifies the size of the first axis.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction slice_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice', 'string_or_numeric');\n if ($x.rank === 0) {\n throw new Error('Slicing scalar is not possible');\n }\n const inputs = { x: $x };\n const attrs = { begin, size };\n return ENGINE.runKernel(Slice, inputs, attrs);\n}\nexport const slice = /* @__PURE__ */ op({ slice_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFJL0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILFNBQVMsTUFBTSxDQUNYLENBQWUsRUFBRSxLQUFzQixFQUFFLElBQXNCO0lBQ2pFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRWpFLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBRXhDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsS0FBSyxFQUFFLE1BQW1DLEVBQzFDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2xpY2UsIFNsaWNlQXR0cnMsIFNsaWNlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7UmFuaywgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzbGljZSBmcm9tIGEgYHRmLlRlbnNvcmAgc3RhcnRpbmcgYXQgY29vcmRpbmF0ZXMgYGJlZ2luYFxuICogYW5kIGlzIG9mIHNpemUgYHNpemVgLlxuICpcbiAqIEFsc28gYXZhaWxhYmxlIGFyZSBzdHJpY3RlciByYW5rLXNwZWNpZmljIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmVcbiAqIGFzIHRoaXMgbWV0aG9kIHRoYXQgYXNzZXJ0IHRoYXQgYHhgIGlzIG9mIHRoZSBnaXZlbiByYW5rOlxuICogICAtIGB0Zi5zbGljZTFkYFxuICogICAtIGB0Zi5zbGljZTJkYFxuICogICAtIGB0Zi5zbGljZTNkYFxuICogICAtIGB0Zi5zbGljZTRkYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB4LnNsaWNlKFsxXSwgWzJdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogeC5zbGljZShbMSwgMF0sIFsxLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IGB0Zi5UZW5zb3JgIHRvIHNsaWNlIGZyb20uXG4gKiBAcGFyYW0gYmVnaW4gVGhlIGNvb3JkaW5hdGVzIHRvIHN0YXJ0IHRoZSBzbGljZSBmcm9tLiBUaGUgbGVuZ3RoIGNhbiBiZVxuICogICAgIGxlc3MgdGhhbiB0aGUgcmFuayBvZiB4IC0gdGhlIHJlc3Qgb2YgdGhlIGF4ZXMgd2lsbCBoYXZlIGltcGxpY2l0IDAgYXNcbiAqICAgICBzdGFydC4gQ2FuIGFsc28gYmUgYSBzaW5nbGUgbnVtYmVyLCBpbiB3aGljaCBjYXNlIGl0IHNwZWNpZmllcyB0aGVcbiAqICAgICBmaXJzdCBheGlzLlxuICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgdGhlIHNsaWNlLiBUaGUgbGVuZ3RoIGNhbiBiZSBsZXNzIHRoYW4gdGhlIHJhbmsgb2ZcbiAqICAgICB4IC0gdGhlIHJlc3Qgb2YgdGhlIGF4ZXMgd2lsbCBoYXZlIGltcGxpY2l0IC0xLiBBIHZhbHVlIG9mIC0xIHJlcXVlc3RzXG4gKiAgICAgdGhlIHJlc3Qgb2YgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGF4aXMuIENhbiBhbHNvIGJlIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICBpbiB3aGljaCBjYXNlIGl0IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgYXhpcy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gc2xpY2VfPFIgZXh0ZW5kcyBSYW5rLCBUIGV4dGVuZHMgVGVuc29yPFI+PihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXJ8bnVtYmVyW10sIHNpemU/OiBudW1iZXJ8bnVtYmVyW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcblxuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2xpY2luZyBzY2FsYXIgaXMgbm90IHBvc3NpYmxlJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNsaWNlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFNsaWNlQXR0cnMgPSB7YmVnaW4sIHNpemV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU2xpY2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc2xpY2UgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NsaWNlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tanh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic tangent of the input `tf.Tensor` element-wise: `tanh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, 70]);\n *\n * x.tanh().print(); // or tf.tanh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction tanh_(x) {\n const $x = convertToTensor(x, 'x', 'tanh', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Tanh, inputs);\n}\nexport const tanh = /* @__PURE__ */ op({ tanh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RhbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RhbmgsIFRhbmhJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGB0YW5oKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCA3MF0pO1xuICpcbiAqIHgudGFuaCgpLnByaW50KCk7ICAvLyBvciB0Zi50YW5oKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHRhbmhfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0YW5oJywgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBpbnB1dHM6IFRhbmhJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFRhbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCB0YW5oID0gLyogQF9fUFVSRV9fICovIG9wKHt0YW5oX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { add } from './add';\nimport { concat } from './concat';\nimport { matMul } from './mat_mul';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { sigmoid } from './sigmoid';\nimport { slice } from './slice';\nimport { tanh } from './tanh';\n/**\n * Computes the next state and output of a BasicLSTMCell.\n *\n * Returns `[newC, newH]`.\n *\n * Derived from tf.contrib.rnn.BasicLSTMCell.\n *\n * @param forgetBias Forget bias for the cell.\n * @param lstmKernel The weights for the cell.\n * @param lstmBias The bias for the cell.\n * @param data The input to the cell.\n * @param c Previous cell state.\n * @param h Previous cell output.\n *\n * @doc {heading: 'Operations', subheading: 'RNN'}\n */\nfunction basicLSTMCell_(forgetBias, lstmKernel, lstmBias, data, c, h) {\n const $forgetBias = convertToTensor(forgetBias, 'forgetBias', 'basicLSTMCell');\n const $lstmKernel = convertToTensor(lstmKernel, 'lstmKernel', 'basicLSTMCell');\n const $lstmBias = convertToTensor(lstmBias, 'lstmBias', 'basicLSTMCell');\n const $data = convertToTensor(data, 'data', 'basicLSTMCell');\n const $c = convertToTensor(c, 'c', 'basicLSTMCell');\n const $h = convertToTensor(h, 'h', 'basicLSTMCell');\n const combined = concat([$data, $h], 1);\n const weighted = matMul(combined, $lstmKernel);\n const res = add(weighted, $lstmBias);\n // i = input_gate, j = new_input, f = forget_gate, o = output_gate\n const batchSize = res.shape[0];\n const sliceCols = res.shape[1] / 4;\n const sliceSize = [batchSize, sliceCols];\n const i = slice(res, [0, 0], sliceSize);\n const j = slice(res, [0, sliceCols], sliceSize);\n const f = slice(res, [0, sliceCols * 2], sliceSize);\n const o = slice(res, [0, sliceCols * 3], sliceSize);\n const newC = add(mul(sigmoid(i), tanh(j)), mul($c, sigmoid(add($forgetBias, f))));\n const newH = mul(tanh(newC), sigmoid(o));\n return [newC, newH];\n}\nexport const basicLSTMCell = /* @__PURE__ */ op({ basicLSTMCell_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbHN0bV9jZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYmFzaWNfbHN0bV9jZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxjQUFjLENBQ25CLFVBQTZCLEVBQUUsVUFBK0IsRUFDOUQsUUFBNkIsRUFBRSxJQUF5QixFQUN4RCxDQUFzQixFQUFFLENBQXNCO0lBQ2hELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXBELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFL0Msa0VBQWtFO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQXFCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVwRCxNQUFNLElBQUksR0FDTixHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEIsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBYSxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLElBQUksR0FBYSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtTY2FsYXIsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuL2FkZCc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9jb25jYXQnO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vbWF0X211bCc7XG5pbXBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9zbGljZSc7XG5pbXBvcnQge3Rhbmh9IGZyb20gJy4vdGFuaCc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG5leHQgc3RhdGUgYW5kIG91dHB1dCBvZiBhIEJhc2ljTFNUTUNlbGwuXG4gKlxuICogUmV0dXJucyBgW25ld0MsIG5ld0hdYC5cbiAqXG4gKiBEZXJpdmVkIGZyb20gdGYuY29udHJpYi5ybm4uQmFzaWNMU1RNQ2VsbC5cbiAqXG4gKiBAcGFyYW0gZm9yZ2V0QmlhcyBGb3JnZXQgYmlhcyBmb3IgdGhlIGNlbGwuXG4gKiBAcGFyYW0gbHN0bUtlcm5lbCBUaGUgd2VpZ2h0cyBmb3IgdGhlIGNlbGwuXG4gKiBAcGFyYW0gbHN0bUJpYXMgVGhlIGJpYXMgZm9yIHRoZSBjZWxsLlxuICogQHBhcmFtIGRhdGEgVGhlIGlucHV0IHRvIHRoZSBjZWxsLlxuICogQHBhcmFtIGMgUHJldmlvdXMgY2VsbCBzdGF0ZS5cbiAqIEBwYXJhbSBoIFByZXZpb3VzIGNlbGwgb3V0cHV0LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JOTid9XG4gKi9cbmZ1bmN0aW9uIGJhc2ljTFNUTUNlbGxfKFxuICAgIGZvcmdldEJpYXM6IFNjYWxhcnxUZW5zb3JMaWtlLCBsc3RtS2VybmVsOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGxzdG1CaWFzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBkYXRhOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGM6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGg6IFRlbnNvcjJEfFRlbnNvckxpa2UpOiBbVGVuc29yMkQsIFRlbnNvcjJEXSB7XG4gIGNvbnN0ICRmb3JnZXRCaWFzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihmb3JnZXRCaWFzLCAnZm9yZ2V0QmlhcycsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRsc3RtS2VybmVsID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihsc3RtS2VybmVsLCAnbHN0bUtlcm5lbCcsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRsc3RtQmlhcyA9IGNvbnZlcnRUb1RlbnNvcihsc3RtQmlhcywgJ2xzdG1CaWFzJywgJ2Jhc2ljTFNUTUNlbGwnKTtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnYmFzaWNMU1RNQ2VsbCcpO1xuICBjb25zdCAkYyA9IGNvbnZlcnRUb1RlbnNvcihjLCAnYycsICdiYXNpY0xTVE1DZWxsJyk7XG4gIGNvbnN0ICRoID0gY29udmVydFRvVGVuc29yKGgsICdoJywgJ2Jhc2ljTFNUTUNlbGwnKTtcblxuICBjb25zdCBjb21iaW5lZCA9IGNvbmNhdChbJGRhdGEsICRoXSwgMSk7XG4gIGNvbnN0IHdlaWdodGVkID0gbWF0TXVsKGNvbWJpbmVkLCAkbHN0bUtlcm5lbCk7XG4gIGNvbnN0IHJlczogVGVuc29yMkQgPSBhZGQod2VpZ2h0ZWQsICRsc3RtQmlhcyk7XG5cbiAgLy8gaSA9IGlucHV0X2dhdGUsIGogPSBuZXdfaW5wdXQsIGYgPSBmb3JnZXRfZ2F0ZSwgbyA9IG91dHB1dF9nYXRlXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHJlcy5zaGFwZVswXTtcbiAgY29uc3Qgc2xpY2VDb2xzID0gcmVzLnNoYXBlWzFdIC8gNDtcbiAgY29uc3Qgc2xpY2VTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW2JhdGNoU2l6ZSwgc2xpY2VDb2xzXTtcbiAgY29uc3QgaSA9IHNsaWNlKHJlcywgWzAsIDBdLCBzbGljZVNpemUpO1xuICBjb25zdCBqID0gc2xpY2UocmVzLCBbMCwgc2xpY2VDb2xzXSwgc2xpY2VTaXplKTtcbiAgY29uc3QgZiA9IHNsaWNlKHJlcywgWzAsIHNsaWNlQ29scyAqIDJdLCBzbGljZVNpemUpO1xuICBjb25zdCBvID0gc2xpY2UocmVzLCBbMCwgc2xpY2VDb2xzICogM10sIHNsaWNlU2l6ZSk7XG5cbiAgY29uc3QgbmV3QzogVGVuc29yMkQgPVxuICAgICAgYWRkKG11bChzaWdtb2lkKGkpLCB0YW5oKGopKSxcbiAgICAgICAgICBtdWwoJGMsIHNpZ21vaWQoYWRkKCRmb3JnZXRCaWFzLCBmKSkgYXMgVGVuc29yMkQpKTtcbiAgY29uc3QgbmV3SDogVGVuc29yMkQgPSBtdWwodGFuaChuZXdDKSwgc2lnbW9pZChvKSk7XG4gIHJldHVybiBbbmV3QywgbmV3SF07XG59XG5cbmV4cG9ydCBjb25zdCBiYXNpY0xTVE1DZWxsID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXNpY0xTVE1DZWxsX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BatchToSpaceND } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * This operation reshapes the \"batch\" dimension 0 into `M + 1` dimensions of\n * shape `blockShape + [batch]`, interleaves these blocks back into the grid\n * defined by the spatial dimensions `[1, ..., M]`, to obtain a result with\n * the same rank as the input. The spatial dimensions of this intermediate\n * result are then optionally cropped according to `crops` to produce the\n * output. This is the reverse of `tf.spaceToBatchND`. See below for a precise\n * description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [4, 1, 1, 1]);\n * const blockShape = [2, 2];\n * const crops = [[0, 0], [0, 0]];\n *\n * x.batchToSpaceND(blockShape, crops).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param crops A 2-D array. Must have shape `[M, 2]`, all values must be >= 0.\n * `crops[i] = [cropStart, cropEnd]` specifies the amount to crop from input\n * dimension `i + 1`, which corresponds to spatial dimension `i`. It is required\n * that `cropStart[i] + cropEnd[i] <= blockShape[i] * inputShape[i + 1]`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Reshape `x` to `reshaped` of shape: `[blockShape[0], ...,\n * blockShape[M-1], batch / prod(blockShape), x.shape[1], ...,\n * x.shape[N-1]]`\n *\n * 2. Permute dimensions of `reshaped` to produce `permuted` of shape `[batch /\n * prod(blockShape),x.shape[1], blockShape[0], ..., x.shape[M],\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 3. Reshape `permuted` to produce `reshapedPermuted` of shape `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0], ..., x.shape[M] *\n * blockShape[M-1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * 4. Crop the start and end of dimensions `[1, ..., M]` of `reshapedPermuted`\n * according to `crops` to produce the output of shape: `[batch /\n * prod(blockShape),x.shape[1] * blockShape[0] - crops[0,0] - crops[0,1],\n * ..., x.shape[M] * blockShape[M-1] - crops[M-1,0] -\n * crops[M-1,1],x.shape[M+1], ..., x.shape[N-1]]`\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction batchToSpaceND_(x, blockShape, crops) {\n const $x = convertToTensor(x, 'x', 'batchToSpaceND');\n const prod = blockShape.reduce((a, b) => a * b);\n util.assert($x.rank >= 1 + blockShape.length, () => `input rank is ${$x.rank} but should be > than blockShape.length ${blockShape.length}`);\n util.assert(crops.length === blockShape.length, () => `crops.length is ${crops.length} but should be equal to blockShape.length ${blockShape.length}`);\n util.assert($x.shape[0] % prod === 0, () => `input tensor batch is ${$x.shape[0]} but is not divisible by the product of ` +\n `the elements of blockShape ${blockShape.join(' * ')} === ${prod}`);\n const inputs = { x: $x };\n const attrs = { blockShape, crops };\n return ENGINE.runKernel(BatchToSpaceND, inputs, attrs);\n}\nexport const batchToSpaceND = /* @__PURE__ */ op({ batchToSpaceND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdG9fc3BhY2VfbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaF90b19zcGFjZV9uZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxjQUFjLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFJMUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLENBQWUsRUFBRSxVQUFvQixFQUFFLEtBQWlCO0lBQzFELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDckQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVoRCxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQ2hDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSwyQ0FDMUIsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQ2xDLEdBQUcsRUFBRSxDQUFDLG1CQUNGLEtBQUssQ0FBQyxNQUFNLDhDQUNaLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTdCLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUN4QixHQUFHLEVBQUUsQ0FBQyx5QkFDSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7UUFDM0QsOEJBQThCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBeUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQXdCLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBRXZELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsY0FBYyxFQUFFLE1BQW1DLEVBQ25ELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmF0Y2hUb1NwYWNlTkQsIEJhdGNoVG9TcGFjZU5EQXR0cnMsIEJhdGNoVG9TcGFjZU5ESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFRoaXMgb3BlcmF0aW9uIHJlc2hhcGVzIHRoZSBcImJhdGNoXCIgZGltZW5zaW9uIDAgaW50byBgTSArIDFgIGRpbWVuc2lvbnMgb2ZcbiAqIHNoYXBlIGBibG9ja1NoYXBlICsgW2JhdGNoXWAsIGludGVybGVhdmVzIHRoZXNlIGJsb2NrcyBiYWNrIGludG8gdGhlIGdyaWRcbiAqIGRlZmluZWQgYnkgdGhlIHNwYXRpYWwgZGltZW5zaW9ucyBgWzEsIC4uLiwgTV1gLCB0byBvYnRhaW4gYSByZXN1bHQgd2l0aFxuICogdGhlIHNhbWUgcmFuayBhcyB0aGUgaW5wdXQuIFRoZSBzcGF0aWFsIGRpbWVuc2lvbnMgb2YgdGhpcyBpbnRlcm1lZGlhdGVcbiAqIHJlc3VsdCBhcmUgdGhlbiBvcHRpb25hbGx5IGNyb3BwZWQgYWNjb3JkaW5nIHRvIGBjcm9wc2AgdG8gcHJvZHVjZSB0aGVcbiAqIG91dHB1dC4gVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBgdGYuc3BhY2VUb0JhdGNoTkRgLiBTZWUgYmVsb3cgZm9yIGEgcHJlY2lzZVxuICogZGVzY3JpcHRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFs0LCAxLCAxLCAxXSk7XG4gKiBjb25zdCBibG9ja1NoYXBlID0gWzIsIDJdO1xuICogY29uc3QgY3JvcHMgPSBbWzAsIDBdLCBbMCwgMF1dO1xuICpcbiAqIHguYmF0Y2hUb1NwYWNlTkQoYmxvY2tTaGFwZSwgY3JvcHMpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBBIGB0Zi5UZW5zb3JgLiBOLUQgd2l0aCBgeC5zaGFwZWAgPSBgW2JhdGNoXSArIHNwYXRpYWxTaGFwZSArXG4gKiByZW1haW5pbmdTaGFwZWAsIHdoZXJlIHNwYXRpYWxTaGFwZSBoYXMgYE1gIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0gYmxvY2tTaGFwZSBBIDEtRCBhcnJheS4gTXVzdCBoYXZlIHNoYXBlIGBbTV1gLCBhbGwgdmFsdWVzIG11c3RcbiAqIGJlID49IDEuXG4gKiBAcGFyYW0gY3JvcHMgQSAyLUQgYXJyYXkuICBNdXN0IGhhdmUgc2hhcGUgYFtNLCAyXWAsIGFsbCB2YWx1ZXMgbXVzdCBiZSA+PSAwLlxuICogYGNyb3BzW2ldID0gW2Nyb3BTdGFydCwgY3JvcEVuZF1gIHNwZWNpZmllcyB0aGUgYW1vdW50IHRvIGNyb3AgZnJvbSBpbnB1dFxuICogZGltZW5zaW9uIGBpICsgMWAsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHNwYXRpYWwgZGltZW5zaW9uIGBpYC4gSXQgaXMgcmVxdWlyZWRcbiAqIHRoYXQgYGNyb3BTdGFydFtpXSArIGNyb3BFbmRbaV0gPD0gYmxvY2tTaGFwZVtpXSAqIGlucHV0U2hhcGVbaSArIDFdYFxuICpcbiAqIFRoaXMgb3BlcmF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAqXG4gKiAxLiBSZXNoYXBlIGB4YCB0byBgcmVzaGFwZWRgIG9mIHNoYXBlOiBgW2Jsb2NrU2hhcGVbMF0sIC4uLixcbiAqIGJsb2NrU2hhcGVbTS0xXSwgYmF0Y2ggLyBwcm9kKGJsb2NrU2hhcGUpLCB4LnNoYXBlWzFdLCAuLi4sXG4gKiB4LnNoYXBlW04tMV1dYFxuICpcbiAqIDIuIFBlcm11dGUgZGltZW5zaW9ucyBvZiBgcmVzaGFwZWRgIHRvIHByb2R1Y2UgYHBlcm11dGVkYCBvZiBzaGFwZSBgW2JhdGNoIC9cbiAqIHByb2QoYmxvY2tTaGFwZSkseC5zaGFwZVsxXSwgYmxvY2tTaGFwZVswXSwgLi4uLCB4LnNoYXBlW01dLFxuICogYmxvY2tTaGFwZVtNLTFdLHguc2hhcGVbTSsxXSwgLi4uLCB4LnNoYXBlW04tMV1dYFxuICpcbiAqIDMuIFJlc2hhcGUgYHBlcm11dGVkYCB0byBwcm9kdWNlIGByZXNoYXBlZFBlcm11dGVkYCBvZiBzaGFwZSBgW2JhdGNoIC9cbiAqIHByb2QoYmxvY2tTaGFwZSkseC5zaGFwZVsxXSAqIGJsb2NrU2hhcGVbMF0sIC4uLiwgeC5zaGFwZVtNXSAqXG4gKiBibG9ja1NoYXBlW00tMV0seC5zaGFwZVtNKzFdLCAuLi4sIHguc2hhcGVbTi0xXV1gXG4gKlxuICogNC4gQ3JvcCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBkaW1lbnNpb25zIGBbMSwgLi4uLCBNXWAgb2YgYHJlc2hhcGVkUGVybXV0ZWRgXG4gKiBhY2NvcmRpbmcgdG8gYGNyb3BzYCB0byBwcm9kdWNlIHRoZSBvdXRwdXQgb2Ygc2hhcGU6IGBbYmF0Y2ggL1xuICogcHJvZChibG9ja1NoYXBlKSx4LnNoYXBlWzFdICogYmxvY2tTaGFwZVswXSAtIGNyb3BzWzAsMF0gLSBjcm9wc1swLDFdLFxuICogLi4uLCB4LnNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdIC0gY3JvcHNbTS0xLDBdIC1cbiAqIGNyb3BzW00tMSwxXSx4LnNoYXBlW00rMV0sIC4uLiwgeC5zaGFwZVtOLTFdXWBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBiYXRjaFRvU3BhY2VORF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgY3JvcHM6IG51bWJlcltdW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hUb1NwYWNlTkQnKTtcbiAgY29uc3QgcHJvZCA9IGJsb2NrU2hhcGUucmVkdWNlKChhLCBiKSA9PiBhICogYik7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID49IDEgKyBibG9ja1NoYXBlLmxlbmd0aCxcbiAgICAgICgpID0+IGBpbnB1dCByYW5rIGlzICR7JHgucmFua30gYnV0IHNob3VsZCBiZSA+IHRoYW4gYmxvY2tTaGFwZS5sZW5ndGggJHtcbiAgICAgICAgICBibG9ja1NoYXBlLmxlbmd0aH1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGNyb3BzLmxlbmd0aCA9PT0gYmxvY2tTaGFwZS5sZW5ndGgsXG4gICAgICAoKSA9PiBgY3JvcHMubGVuZ3RoIGlzICR7XG4gICAgICAgICAgY3JvcHMubGVuZ3RofSBidXQgc2hvdWxkIGJlIGVxdWFsIHRvIGJsb2NrU2hhcGUubGVuZ3RoICAke1xuICAgICAgICAgIGJsb2NrU2hhcGUubGVuZ3RofWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguc2hhcGVbMF0gJSBwcm9kID09PSAwLFxuICAgICAgKCkgPT4gYGlucHV0IHRlbnNvciBiYXRjaCBpcyAke1xuICAgICAgICAgICAgICAgICR4LnNoYXBlWzBdfSBidXQgaXMgbm90IGRpdmlzaWJsZSBieSB0aGUgcHJvZHVjdCBvZiBgICtcbiAgICAgICAgICBgdGhlIGVsZW1lbnRzIG9mIGJsb2NrU2hhcGUgJHtibG9ja1NoYXBlLmpvaW4oJyAqICcpfSA9PT0gJHtwcm9kfWApO1xuXG4gIGNvbnN0IGlucHV0czogQmF0Y2hUb1NwYWNlTkRJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogQmF0Y2hUb1NwYWNlTkRBdHRycyA9IHtibG9ja1NoYXBlLCBjcm9wc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBCYXRjaFRvU3BhY2VORCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaFRvU3BhY2VORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hUb1NwYWNlTkRffSk7XG4iXX0=","import { reshape } from './reshape';\nexport function xAs4D(x) {\n let x4D;\n if (x.rank === 0 || x.rank === 1) {\n x4D = reshape(x, [1, 1, 1, x.size]);\n }\n else if (x.rank === 2) {\n x4D = reshape(x, [1, 1, x.shape[0], x.shape[1]]);\n }\n else if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n else {\n x4D = x;\n }\n return x4D;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm1fdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsS0FBSyxDQUFpQixDQUFZO0lBQ2hELElBQUksR0FBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDaEMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNyQztTQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDdkIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7U0FBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzRDtTQUFNO1FBQ0wsR0FBRyxHQUFHLENBQWEsQ0FBQztLQUNyQjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yLCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7UmFua30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24geEFzNEQ8UiBleHRlbmRzIFJhbms+KHg6IFRlbnNvcjxSPikge1xuICBsZXQgeDREOiBUZW5zb3I0RDtcbiAgaWYgKHgucmFuayA9PT0gMCB8fCB4LnJhbmsgPT09IDEpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCAxLCAxLCB4LnNpemVdKTtcbiAgfSBlbHNlIGlmICh4LnJhbmsgPT09IDIpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCAxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdXSk7XG4gIH0gZWxzZSBpZiAoeC5yYW5rID09PSAzKSB7XG4gICAgeDREID0gcmVzaGFwZSh4LCBbMSwgeC5zaGFwZVswXSwgeC5zaGFwZVsxXSwgeC5zaGFwZVsyXV0pO1xuICB9IGVsc2Uge1xuICAgIHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIH1cblxuICByZXR1cm4geDREO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { FusedBatchNorm } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { xAs4D } from './batchnorm_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Batch normalization.\n *\n * As described in\n * [http://arxiv.org/abs/1502.03167](http://arxiv.org/abs/1502.03167).\n *\n * Mean, variance, scale, and offset can be of two shapes:\n * - The same shape as the input.\n * - In the common case, the depth dimension is the last dimension of x, so\n * the values would be a `tf.Tensor1D` of shape [depth].\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that parameters passed are of given rank\n * - `tf.batchNorm2d`\n * - `tf.batchNorm3d`\n * - `tf.batchNorm4d`\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction batchNorm_(x, mean, variance, offset, scale, varianceEpsilon) {\n if (varianceEpsilon == null) {\n varianceEpsilon = 0.001;\n }\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($mean.rank === $variance.rank, () => 'Batch normalization gradient requires mean and variance to have ' +\n 'equal ranks.');\n util.assert($offset == null || $mean.rank === $offset.rank, () => 'Batch normalization gradient requires mean and offset to have ' +\n 'equal ranks.');\n util.assert($scale == null || $mean.rank === $scale.rank, () => 'Batch normalization gradient requires mean and scale to have ' +\n 'equal ranks.');\n const x4D = xAs4D($x);\n const inputs = {\n x: x4D,\n scale: $scale,\n offset: $offset,\n mean: $mean,\n variance: $variance\n };\n const attrs = { varianceEpsilon };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(FusedBatchNorm, inputs, attrs);\n return reshape(res, $x.shape);\n}\nexport const batchNorm = /* @__PURE__ */ op({ batchNorm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYmF0Y2hub3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGNBQWMsRUFBNEMsTUFBTSxpQkFBaUIsQ0FBQztBQUkxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQVMsVUFBVSxDQUNmLENBQXVCLEVBQUUsSUFBbUMsRUFDNUQsUUFBdUMsRUFDdkMsTUFBc0MsRUFDdEMsS0FBcUMsRUFDckMsZUFBd0I7SUFDMUIsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1FBQzNCLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDekI7SUFDRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQTBCLENBQUM7SUFDL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMkIsQ0FBQztJQUNoQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQzdCLEdBQUcsRUFBRSxDQUFDLGtFQUFrRTtRQUNwRSxjQUFjLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUM5QyxHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsY0FBYyxDQUFDLENBQUM7SUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksRUFDNUMsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sR0FBRyxHQUFhLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLE1BQU0sR0FBeUI7UUFDbkMsQ0FBQyxFQUFFLEdBQUc7UUFDTixLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxPQUFPO1FBQ2YsSUFBSSxFQUFFLEtBQUs7UUFDWCxRQUFRLEVBQUUsU0FBUztLQUNwQixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQXdCLEVBQUMsZUFBZSxFQUFDLENBQUM7SUFFckQsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osY0FBYyxFQUFFLE1BQW1DLEVBQ25ELEtBQWdDLENBQWMsQ0FBQztJQUUvRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGdXNlZEJhdGNoTm9ybSwgRnVzZWRCYXRjaE5vcm1BdHRycywgRnVzZWRCYXRjaE5vcm1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7eEFzNER9IGZyb20gJy4vYmF0Y2hub3JtX3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24uXG4gKlxuICogQXMgZGVzY3JpYmVkIGluXG4gKiBbaHR0cDovL2FyeGl2Lm9yZy9hYnMvMTUwMi4wMzE2N10oaHR0cDovL2FyeGl2Lm9yZy9hYnMvMTUwMi4wMzE2NykuXG4gKlxuICogTWVhbiwgdmFyaWFuY2UsIHNjYWxlLCBhbmQgb2Zmc2V0IGNhbiBiZSBvZiB0d28gc2hhcGVzOlxuICogICAtIFRoZSBzYW1lIHNoYXBlIGFzIHRoZSBpbnB1dC5cbiAqICAgLSBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBkZXB0aCBkaW1lbnNpb24gaXMgdGhlIGxhc3QgZGltZW5zaW9uIG9mIHgsIHNvXG4gKiAgICAgdGhlIHZhbHVlcyB3b3VsZCBiZSBhIGB0Zi5UZW5zb3IxRGAgb2Ygc2hhcGUgW2RlcHRoXS5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlXG4gKiBhcyB0aGlzIG1ldGhvZCB0aGF0IGFzc2VydCB0aGF0IHBhcmFtZXRlcnMgcGFzc2VkIGFyZSBvZiBnaXZlbiByYW5rXG4gKiAgIC0gYHRmLmJhdGNoTm9ybTJkYFxuICogICAtIGB0Zi5iYXRjaE5vcm0zZGBcbiAqICAgLSBgdGYuYmF0Y2hOb3JtNGRgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqIEBwYXJhbSBtZWFuIEEgbWVhbiBUZW5zb3IuXG4gKiBAcGFyYW0gdmFyaWFuY2UgQSB2YXJpYW5jZSBUZW5zb3IuXG4gKiBAcGFyYW0gb2Zmc2V0IEFuIG9mZnNldCBUZW5zb3IuXG4gKiBAcGFyYW0gc2NhbGUgQSBzY2FsZSBUZW5zb3IuXG4gKiBAcGFyYW0gdmFyaWFuY2VFcHNpbG9uIEEgc21hbGwgZmxvYXQgbnVtYmVyIHRvIGF2b2lkIGRpdmlkaW5nIGJ5IDAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTm9ybWFsaXphdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGJhdGNoTm9ybV88UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcjxSPnxUZW5zb3JMaWtlLCBtZWFuOiBUZW5zb3I8Uj58VGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICB2YXJpYW5jZTogVGVuc29yPFI+fFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yPFI+fFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgc2NhbGU/OiBUZW5zb3I8Uj58VGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICB2YXJpYW5jZUVwc2lsb24/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBpZiAodmFyaWFuY2VFcHNpbG9uID09IG51bGwpIHtcbiAgICB2YXJpYW5jZUVwc2lsb24gPSAwLjAwMTtcbiAgfVxuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiYXRjaE5vcm0nKTtcbiAgY29uc3QgJG1lYW4gPSBjb252ZXJ0VG9UZW5zb3IobWVhbiwgJ21lYW4nLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICR2YXJpYW5jZSA9IGNvbnZlcnRUb1RlbnNvcih2YXJpYW5jZSwgJ3ZhcmlhbmNlJywgJ2JhdGNoTm9ybScpO1xuICBsZXQgJHNjYWxlOiBUZW5zb3I8Uj58VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjxSPnxUZW5zb3IxRDtcbiAgaWYgKG9mZnNldCAhPSBudWxsKSB7XG4gICAgJG9mZnNldCA9IGNvbnZlcnRUb1RlbnNvcihvZmZzZXQsICdvZmZzZXQnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09ICR2YXJpYW5jZS5yYW5rLFxuICAgICAgKCkgPT4gJ0JhdGNoIG5vcm1hbGl6YXRpb24gZ3JhZGllbnQgcmVxdWlyZXMgbWVhbiBhbmQgdmFyaWFuY2UgdG8gaGF2ZSAnICtcbiAgICAgICAgICAnZXF1YWwgcmFua3MuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJG9mZnNldCA9PSBudWxsIHx8ICRtZWFuLnJhbmsgPT09ICRvZmZzZXQucmFuayxcbiAgICAgICgpID0+ICdCYXRjaCBub3JtYWxpemF0aW9uIGdyYWRpZW50IHJlcXVpcmVzIG1lYW4gYW5kIG9mZnNldCB0byBoYXZlICcgK1xuICAgICAgICAgICdlcXVhbCByYW5rcy4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkc2NhbGUgPT0gbnVsbCB8fCAkbWVhbi5yYW5rID09PSAkc2NhbGUucmFuayxcbiAgICAgICgpID0+ICdCYXRjaCBub3JtYWxpemF0aW9uIGdyYWRpZW50IHJlcXVpcmVzIG1lYW4gYW5kIHNjYWxlIHRvIGhhdmUgJyArXG4gICAgICAgICAgJ2VxdWFsIHJhbmtzLicpO1xuXG4gIGNvbnN0IHg0RDogVGVuc29yNEQgPSB4QXM0RCgkeCk7XG5cbiAgY29uc3QgaW5wdXRzOiBGdXNlZEJhdGNoTm9ybUlucHV0cyA9IHtcbiAgICB4OiB4NEQsXG4gICAgc2NhbGU6ICRzY2FsZSxcbiAgICBvZmZzZXQ6ICRvZmZzZXQsXG4gICAgbWVhbjogJG1lYW4sXG4gICAgdmFyaWFuY2U6ICR2YXJpYW5jZVxuICB9O1xuXG4gIGNvbnN0IGF0dHJzOiBGdXNlZEJhdGNoTm9ybUF0dHJzID0ge3ZhcmlhbmNlRXBzaWxvbn07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgRnVzZWRCYXRjaE5vcm0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjxSPjtcblxuICByZXR1cm4gcmVzaGFwZShyZXMsICR4LnNoYXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hOb3JtX30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 2D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm2d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 2 || $mean.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 2 || $variance.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 2 || $scale.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 2 || $offset.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm2d = /* @__PURE__ */ op({ batchNorm2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm0yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciAyRC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtMmRfKFxuICAgIHg6IFRlbnNvcjJEfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjJEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjJEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yMkR8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3IyRHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjJEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yMkR8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjJEfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDIsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IHggbXVzdCBiZSByYW5rIDIgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDIgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm0yRDogbWVhbiBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSAyIHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTJEOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSAyIHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IHNjYWxlIG11c3QgYmUgcmFuayAyIG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDIgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtMkQ6IG9mZnNldCBtdXN0IGJlIHJhbmsgMiBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuXG4gIHJldHVybiBiYXRjaE5vcm0oJHgsICRtZWFuLCAkdmFyaWFuY2UsICRvZmZzZXQsICRzY2FsZSwgdmFyaWFuY2VFcHNpbG9uKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybTJkID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXRjaE5vcm0yZF99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 3D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm3d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 3 || $mean.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 3 || $variance.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 3 || $scale.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 3 || $offset.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm3d = /* @__PURE__ */ op({ batchNorm3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciAzRC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtM2RfKFxuICAgIHg6IFRlbnNvcjNEfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjNEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjNEfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yM0R8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3IzRHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjNEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yM0R8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjNEfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IHggbXVzdCBiZSByYW5rIDMgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDMgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm0zRDogbWVhbiBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSAzIHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTNEOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSAzIHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IHNjYWxlIG11c3QgYmUgcmFuayAzIG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDMgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtM0Q6IG9mZnNldCBtdXN0IGJlIHJhbmsgMyBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuXG4gIHJldHVybiBiYXRjaE5vcm0oJHgsICRtZWFuLCAkdmFyaWFuY2UsICRvZmZzZXQsICRzY2FsZSwgdmFyaWFuY2VFcHNpbG9uKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoTm9ybTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtiYXRjaE5vcm0zZF99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { batchNorm } from './batchnorm';\nimport { op } from './operation';\n/**\n * Batch normalization, strictly for 4D. For the more relaxed version, see\n * `tf.batchNorm`.\n *\n * @param x The input Tensor.\n * @param mean A mean Tensor.\n * @param variance A variance Tensor.\n * @param offset An offset Tensor.\n * @param scale A scale Tensor.\n * @param varianceEpsilon A small float number to avoid dividing by 0.\n */\nfunction batchNorm4d_(x, mean, variance, offset, scale, varianceEpsilon) {\n const $x = convertToTensor(x, 'x', 'batchNorm');\n const $mean = convertToTensor(mean, 'mean', 'batchNorm');\n const $variance = convertToTensor(variance, 'variance', 'batchNorm');\n let $scale;\n if (scale != null) {\n $scale = convertToTensor(scale, 'scale', 'batchNorm');\n }\n let $offset;\n if (offset != null) {\n $offset = convertToTensor(offset, 'offset', 'batchNorm');\n }\n util.assert($x.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ` +\n `${$x.rank}.`);\n util.assert($mean.rank === 4 || $mean.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but ` +\n `got rank ${$mean.rank}.`);\n util.assert($variance.rank === 4 || $variance.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 ` +\n `but got rank ${$variance.rank}.`);\n if ($scale != null) {\n util.assert($scale.rank === 4 || $scale.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 ` +\n `but got rank ${$scale.rank}.`);\n }\n if ($offset != null) {\n util.assert($offset.rank === 4 || $offset.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 ` +\n `but got rank ${$offset.rank}.`);\n }\n return batchNorm($x, $mean, $variance, $offset, $scale, varianceEpsilon);\n}\nexport const batchNorm4d = /* @__PURE__ */ op({ batchNorm4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hub3JtNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iYXRjaG5vcm00ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxZQUFZLENBQ2pCLENBQXNCLEVBQUUsSUFBa0MsRUFDMUQsUUFBc0MsRUFDdEMsTUFBcUMsRUFBRSxLQUFvQyxFQUMzRSxlQUF3QjtJQUMxQixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxJQUFJLE1BQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksT0FBMEIsQ0FBQztJQUMvQixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDbEIsT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM1QyxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7WUFDekQsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLHdEQUF3RDtZQUMxRCxnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2JhdGNoTm9ybX0gZnJvbSAnLi9iYXRjaG5vcm0nO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEJhdGNoIG5vcm1hbGl6YXRpb24sIHN0cmljdGx5IGZvciA0RC4gRm9yIHRoZSBtb3JlIHJlbGF4ZWQgdmVyc2lvbiwgc2VlXG4gKiBgdGYuYmF0Y2hOb3JtYC5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIG1lYW4gQSBtZWFuIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZSBBIHZhcmlhbmNlIFRlbnNvci5cbiAqIEBwYXJhbSBvZmZzZXQgQW4gb2Zmc2V0IFRlbnNvci5cbiAqIEBwYXJhbSBzY2FsZSBBIHNjYWxlIFRlbnNvci5cbiAqIEBwYXJhbSB2YXJpYW5jZUVwc2lsb24gQSBzbWFsbCBmbG9hdCBudW1iZXIgdG8gYXZvaWQgZGl2aWRpbmcgYnkgMC5cbiAqL1xuZnVuY3Rpb24gYmF0Y2hOb3JtNGRfKFxuICAgIHg6IFRlbnNvcjREfFRlbnNvckxpa2UsIG1lYW46IFRlbnNvcjREfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgdmFyaWFuY2U6IFRlbnNvcjREfFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgb2Zmc2V0PzogVGVuc29yNER8VGVuc29yMUR8VGVuc29yTGlrZSwgc2NhbGU/OiBUZW5zb3I0RHxUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIHZhcmlhbmNlRXBzaWxvbj86IG51bWJlcik6IFRlbnNvcjREIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnYmF0Y2hOb3JtJyk7XG4gIGNvbnN0ICRtZWFuID0gY29udmVydFRvVGVuc29yKG1lYW4sICdtZWFuJywgJ2JhdGNoTm9ybScpO1xuICBjb25zdCAkdmFyaWFuY2UgPSBjb252ZXJ0VG9UZW5zb3IodmFyaWFuY2UsICd2YXJpYW5jZScsICdiYXRjaE5vcm0nKTtcbiAgbGV0ICRzY2FsZTogVGVuc29yNER8VGVuc29yMUQ7XG4gIGlmIChzY2FsZSAhPSBudWxsKSB7XG4gICAgJHNjYWxlID0gY29udmVydFRvVGVuc29yKHNjYWxlLCAnc2NhbGUnLCAnYmF0Y2hOb3JtJyk7XG4gIH1cbiAgbGV0ICRvZmZzZXQ6IFRlbnNvcjREfFRlbnNvcjFEO1xuICBpZiAob2Zmc2V0ICE9IG51bGwpIHtcbiAgICAkb2Zmc2V0ID0gY29udmVydFRvVGVuc29yKG9mZnNldCwgJ29mZnNldCcsICdiYXRjaE5vcm0nKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IHggbXVzdCBiZSByYW5rIDQgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRtZWFuLnJhbmsgPT09IDQgfHwgJG1lYW4ucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBiYXRjaE5vcm00RDogbWVhbiBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYnV0IGAgK1xuICAgICAgICAgIGBnb3QgcmFuayAkeyRtZWFuLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR2YXJpYW5jZS5yYW5rID09PSA0IHx8ICR2YXJpYW5jZS5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGJhdGNoTm9ybTREOiB2YXJpYW5jZSBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYCArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyR2YXJpYW5jZS5yYW5rfS5gKTtcbiAgaWYgKCRzY2FsZSAhPSBudWxsKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRzY2FsZS5yYW5rID09PSA0IHx8ICRzY2FsZS5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IHNjYWxlIG11c3QgYmUgcmFuayA0IG9yIHJhbmsgMSBgICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskc2NhbGUucmFua30uYCk7XG4gIH1cbiAgaWYgKCRvZmZzZXQgIT0gbnVsbCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAkb2Zmc2V0LnJhbmsgPT09IDQgfHwgJG9mZnNldC5yYW5rID09PSAxLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gYmF0Y2hOb3JtNEQ6IG9mZnNldCBtdXN0IGJlIHJhbmsgNCBvciByYW5rIDEgYCArXG4gICAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JG9mZnNldC5yYW5rfS5gKTtcbiAgfVxuICByZXR1cm4gYmF0Y2hOb3JtKCR4LCAkbWVhbiwgJHZhcmlhbmNlLCAkb2Zmc2V0LCAkc2NhbGUsIHZhcmlhbmNlRXBzaWxvbik7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm00ZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmF0Y2hOb3JtNGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Bincount } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Outputs a vector with length `size` and the same dtype as `weights`.\n *\n * If `weights` are empty, then index `i` stores the number of times the value\n * `i` is counted in `x`. If `weights` are non-empty, then index `i` stores the\n * sum of the value in `weights` at each index where the corresponding value in\n * `x` is `i`.\n *\n * Values in `x` outside of the range [0, size) are ignored.\n *\n * @param x The input int tensor, rank 1.\n * @param weights The weights tensor, must have the same shape as x, or a\n * length-0 Tensor, in which case it acts as all weights equal to 1.\n * @param size Non-negative integer.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction bincount_(x, weights, size) {\n const $x = convertToTensor(x, 'x', 'bincount');\n const $weights = convertToTensor(weights, 'weights', 'bincount');\n util.assert($x.dtype === 'int32', () => `Error in bincount: input ` +\n `dtype must be int32, but got ${$x.dtype}`);\n util.assert(size >= 0, () => `size must be non-negative, but got ${size}.`);\n util.assert($weights.size === $x.size || $weights.size === 0, () => `Error in bincount: weights must have the same size as input or` +\n `0-length, but got input shape: ${$x.shape}, weights shape: ` +\n `${$weights.shape}.`);\n const inputs = { x: $x, weights: $weights };\n const attrs = { size };\n return ENGINE.runKernel(Bincount, inputs, attrs);\n}\nexport const bincount = /* @__PURE__ */ op({ bincount_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWdDLE1BQU0saUJBQWlCLENBQUM7QUFJeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFTLFNBQVMsQ0FDZCxDQUFlLEVBQUUsT0FBcUIsRUFBRSxJQUFZO0lBQ3RELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQjtRQUM3QixnQ0FBZ0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxNQUFNLENBQ1AsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNoRCxHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsa0NBQWtDLEVBQUUsQ0FBQyxLQUFLLG1CQUFtQjtRQUM3RCxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFrQixFQUFDLElBQUksRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsUUFBUSxFQUFFLE1BQW1DLEVBQzdDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7QmluY291bnQsIEJpbmNvdW50QXR0cnMsIEJpbmNvdW50SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogT3V0cHV0cyBhIHZlY3RvciB3aXRoIGxlbmd0aCBgc2l6ZWAgYW5kIHRoZSBzYW1lIGR0eXBlIGFzIGB3ZWlnaHRzYC5cbiAqXG4gKiBJZiBgd2VpZ2h0c2AgYXJlIGVtcHR5LCB0aGVuIGluZGV4IGBpYCBzdG9yZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgdmFsdWVcbiAqIGBpYCBpcyBjb3VudGVkIGluIGB4YC4gSWYgYHdlaWdodHNgIGFyZSBub24tZW1wdHksIHRoZW4gaW5kZXggYGlgIHN0b3JlcyB0aGVcbiAqIHN1bSBvZiB0aGUgdmFsdWUgaW4gYHdlaWdodHNgIGF0IGVhY2ggaW5kZXggd2hlcmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW5cbiAqIGB4YCBpcyBgaWAuXG4gKlxuICogVmFsdWVzIGluIGB4YCBvdXRzaWRlIG9mIHRoZSByYW5nZSBbMCwgc2l6ZSkgYXJlIGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IGludCB0ZW5zb3IsIHJhbmsgMS5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRoZSB3ZWlnaHRzIHRlbnNvciwgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIHgsIG9yIGFcbiAqICAgICBsZW5ndGgtMCBUZW5zb3IsIGluIHdoaWNoIGNhc2UgaXQgYWN0cyBhcyBhbGwgd2VpZ2h0cyBlcXVhbCB0byAxLlxuICogQHBhcmFtIHNpemUgTm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gYmluY291bnRfPFQgZXh0ZW5kcyBUZW5zb3IxRD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzOiBUfFRlbnNvckxpa2UsIHNpemU6IG51bWJlcik6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiaW5jb3VudCcpO1xuICBjb25zdCAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdiaW5jb3VudCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmluY291bnQ6IGlucHV0IGAgK1xuICAgICAgICAgIGBkdHlwZSBtdXN0IGJlIGludDMyLCBidXQgZ290ICR7JHguZHR5cGV9YCk7XG4gIHV0aWwuYXNzZXJ0KHNpemUgPj0gMCwgKCkgPT4gYHNpemUgbXVzdCBiZSBub24tbmVnYXRpdmUsIGJ1dCBnb3QgJHtzaXplfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkd2VpZ2h0cy5zaXplID09PSAkeC5zaXplIHx8ICR3ZWlnaHRzLnNpemUgPT09IDAsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gYmluY291bnQ6IHdlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgaW5wdXQgb3JgICtcbiAgICAgICAgICBgMC1sZW5ndGgsIGJ1dCBnb3QgaW5wdXQgc2hhcGU6ICR7JHguc2hhcGV9LCB3ZWlnaHRzIHNoYXBlOiBgICtcbiAgICAgICAgICBgJHskd2VpZ2h0cy5zaGFwZX0uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBCaW5jb3VudElucHV0cyA9IHt4OiAkeCwgd2VpZ2h0czogJHdlaWdodHN9O1xuICBjb25zdCBhdHRyczogQmluY291bnRBdHRycyA9IHtzaXplfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEJpbmNvdW50LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJpbmNvdW50ID0gLyogQF9fUFVSRV9fICovIG9wKHtiaW5jb3VudF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BitwiseAnd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { arraysEqual } from '../util_base';\nimport { op } from './operation';\n/**\n * Bitwise `AND` operation for input tensors.\n *\n * Given two input tensors, returns a new tensor\n * with the `AND` calculated values.\n *\n * The method supports int32 values\n *\n *\n * ```js\n * const x = tf.tensor1d([0, 5, 3, 14], 'int32');\n * const y = tf.tensor1d([5, 0, 7, 11], 'int32');\n * tf.bitwiseAnd(x, y).print();\n * ```\n *\n * @param x The input tensor to be calculated.\n * @param y The input tensor to be calculated.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction bitwiseAnd_(x, y) {\n const $x = convertToTensor(x, 'x', 'bitwiseAnd');\n const $y = convertToTensor(y, 'y', 'bitwiseAnd');\n if (!arraysEqual($x.shape, $y.shape)) {\n throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${$x.shape}, y: ${$y.shape}`);\n }\n if ($x.dtype !== 'int32' || $y.dtype !== 'int32') {\n throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${$x.dtype} and type of y: ${$y.dtype}`);\n }\n const inputs = { a: $x, b: $y };\n return ENGINE.runKernel(BitwiseAnd, inputs);\n}\nexport const bitwiseAnd = /* @__PURE__ */ op({ bitwiseAnd_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0d2lzZV9hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9iaXR3aXNlX2FuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsV0FBVyxDQUFpQixDQUFTLEVBQUUsQ0FBUztJQUN2RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQ1osRUFBRSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNqQztJQUNELElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FDWCx3RUFDSSxFQUFFLENBQUMsS0FBSyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDaEQ7SUFFRCxNQUFNLE1BQU0sR0FBcUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNoRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Qml0d2lzZUFuZCwgQml0d2lzZUFuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2FycmF5c0VxdWFsfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQml0d2lzZSBgQU5EYCBvcGVyYXRpb24gZm9yIGlucHV0IHRlbnNvcnMuXG4gKlxuICogR2l2ZW4gdHdvIGlucHV0IHRlbnNvcnMsIHJldHVybnMgYSBuZXcgdGVuc29yXG4gKiB3aXRoIHRoZSBgQU5EYCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqXG4gKiBUaGUgbWV0aG9kIHN1cHBvcnRzIGludDMyIHZhbHVlc1xuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCA1LCAzLCAxNF0sICdpbnQzMicpO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFs1LCAwLCA3LCAxMV0sICdpbnQzMicpO1xuICogdGYuYml0d2lzZUFuZCh4LCB5KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBiZSBjYWxjdWxhdGVkLlxuICogQHBhcmFtIHkgVGhlIGlucHV0IHRlbnNvciB0byBiZSBjYWxjdWxhdGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBiaXR3aXNlQW5kXzxSIGV4dGVuZHMgUmFuaz4oeDogVGVuc29yLCB5OiBUZW5zb3IpOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdiaXR3aXNlQW5kJyk7XG4gIGNvbnN0ICR5ID0gY29udmVydFRvVGVuc29yKHksICd5JywgJ2JpdHdpc2VBbmQnKTtcblxuICBpZiAoIWFycmF5c0VxdWFsKCR4LnNoYXBlLCAkeS5zaGFwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEJpdHdpc2VBbmQ6IFRlbnNvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLiB4OiAke1xuICAgICAgICAkeC5zaGFwZX0sIHk6ICR7JHkuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKCR4LmR0eXBlICE9PSAnaW50MzInIHx8ICR5LmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQml0d2lzZUFuZDogT25seSBzdXBwb3J0cyAnaW50MzInIHZhbHVlcyBpbiB0ZW5zb3IsIGZvdW5kIHR5cGUgb2YgeDogJHtcbiAgICAgICAgICAgICR4LmR0eXBlfSBhbmQgdHlwZSBvZiB5OiAkeyR5LmR0eXBlfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBCaXR3aXNlQW5kSW5wdXRzID0ge2E6ICR4LCBiOiAkeX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEJpdHdpc2VBbmQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBiaXR3aXNlQW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtiaXR3aXNlQW5kX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BroadcastArgs } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Return the shape of s0 op s1 with broadcast.\n *\n * compute r0, the broadcasted shape as a tensor.\n * s0, s1 and r0 are all integer vectors.\n *\n * This function returns the shape of the result of an operation between\n * two tensors of size s0 and s1 performed with broadcast.\n *\n * @param s0 A tensor representing a shape\n * @param s1 A tensor representing a shape\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction broadcastArgs_(s0, s1) {\n const shape1Input = convertToTensor(s0, 's0', 'broadcastArgs', 'int32');\n const shape2Input = convertToTensor(s1, 's1', 'broadcastArgs', 'int32');\n if (shape1Input.rank !== 1) {\n throw new Error('broadcastArgs(): first input must be a vector (rank=1). ' +\n `Has rank ${shape1Input.rank}`);\n }\n if (shape2Input.rank !== 1) {\n throw new Error('broadcastArgs(): second input must be a vector (rank=1). ' +\n `Has rank ${shape2Input.rank}`);\n }\n const inputs = { s0: shape1Input, s1: shape2Input };\n return ENGINE.runKernel(BroadcastArgs, inputs);\n}\nexport const broadcastArgs = /* @__PURE__ */ op({ broadcastArgs_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X2FyZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9icm9hZGNhc3RfYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakM7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsY0FBYyxDQUNyQixFQUF1QixFQUFFLEVBQXVCO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEUsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLDBEQUEwRDtZQUMxRCxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRDtZQUMzRCxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsTUFBTSxNQUFNLEdBQXdCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDekUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHsgTmFtZWRUZW5zb3JNYXAgfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHsgRU5HSU5FIH0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7IEJyb2FkY2FzdEFyZ3MsIEJyb2FkY2FzdEFyZ3NJbnB1dHMgfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHsgVGVuc29yIH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7IGNvbnZlcnRUb1RlbnNvciB9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQgeyBSYW5rLCBUZW5zb3JMaWtlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBvcCB9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXBlIG9mIHMwIG9wIHMxIHdpdGggYnJvYWRjYXN0LlxuICpcbiAqIGNvbXB1dGUgcjAsIHRoZSBicm9hZGNhc3RlZCBzaGFwZSBhcyBhIHRlbnNvci5cbiAqIHMwLCBzMSBhbmQgcjAgYXJlIGFsbCBpbnRlZ2VyIHZlY3RvcnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaGFwZSBvZiB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbiBiZXR3ZWVuXG4gKiB0d28gdGVuc29ycyBvZiBzaXplIHMwIGFuZCBzMSBwZXJmb3JtZWQgd2l0aCBicm9hZGNhc3QuXG4gKlxuICogQHBhcmFtIHMwIEEgdGVuc29yIHJlcHJlc2VudGluZyBhIHNoYXBlXG4gKiBAcGFyYW0gczEgQSB0ZW5zb3IgcmVwcmVzZW50aW5nIGEgc2hhcGVcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBicm9hZGNhc3RBcmdzXzxSIGV4dGVuZHMgUmFuaz4oXG4gIHMwOiBUZW5zb3IgfCBUZW5zb3JMaWtlLCBzMTogVGVuc29yIHwgVGVuc29yTGlrZSk6IFRlbnNvcjxSPiB7XG4gIGNvbnN0IHNoYXBlMUlucHV0ID0gY29udmVydFRvVGVuc29yKHMwLCAnczAnLCAnYnJvYWRjYXN0QXJncycsICdpbnQzMicpO1xuICBjb25zdCBzaGFwZTJJbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihzMSwgJ3MxJywgJ2Jyb2FkY2FzdEFyZ3MnLCAnaW50MzInKTtcblxuICBpZiAoc2hhcGUxSW5wdXQucmFuayAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdicm9hZGNhc3RBcmdzKCk6IGZpcnN0IGlucHV0IG11c3QgYmUgYSB2ZWN0b3IgKHJhbms9MSkuICcgK1xuICAgICAgYEhhcyByYW5rICR7c2hhcGUxSW5wdXQucmFua31gKTtcbiAgfVxuXG4gIGlmIChzaGFwZTJJbnB1dC5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2Jyb2FkY2FzdEFyZ3MoKTogc2Vjb25kIGlucHV0IG11c3QgYmUgYSB2ZWN0b3IgKHJhbms9MSkuICcgK1xuICAgICAgYEhhcyByYW5rICR7c2hhcGUySW5wdXQucmFua31gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogQnJvYWRjYXN0QXJnc0lucHV0cyA9IHsgczA6IHNoYXBlMUlucHV0LCBzMTogc2hhcGUySW5wdXQgfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQnJvYWRjYXN0QXJncywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgYnJvYWRjYXN0QXJncyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7IGJyb2FkY2FzdEFyZ3NfIH0pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tile } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { clone } from './clone';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Broadcast an array to a compatible shape NumPy-style.\n *\n * The tensor's shape is compared to the broadcast shape from end to beginning.\n * Ones are prepended to the tensor's shape until it has the same length as\n * the broadcast shape. If input.shape[i]==shape[i], the (i+1)-th axis is\n * already broadcast-compatible. If input.shape[i]==1 and shape[i]==N, then\n * the input tensor is tiled N times along that axis (using tf.tile).\n *\n * @param input The tensor that is to be broadcasted.\n * @param shape The input is to be broadcast to this shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction broadcastTo_(x, shape) {\n let input = convertToTensor(x, 'broadcastTo', 'x');\n const xShape = input.shape;\n assertNonNegativeIntegerDimensions(shape);\n if (shape.length < input.rank) {\n throw new Error(`broadcastTo(): shape.length=${shape.length} < input.rank=${input.rank}.`);\n }\n if (shape.length > input.rank) {\n const newShape = input.shape.slice();\n while (newShape.length < shape.length) {\n newShape.unshift(1);\n }\n input = reshape(input, newShape);\n }\n const inputShape = input.shape;\n const reps = Array.from(shape);\n for (let i = shape.length - 1; i >= 0; i--) {\n if (inputShape[i] === shape[i]) {\n reps[i] = 1;\n }\n else if (input.shape[i] !== 1) {\n throw new Error(`broadcastTo(): [${xShape}] cannot be broadcast to [${shape}].`);\n }\n }\n const axes = reps.map((n, i) => n > 1 ? i : -1).filter(i => i >= 0);\n if (axes.length === 0) {\n return clone(input);\n }\n // TODO call broadcastTo kernel directly once backends implement broadcstTo\n const inputs = { x: input };\n const attrs = { reps };\n return ENGINE.runKernel(Tile, inputs, attrs);\n}\nexport const broadcastTo = /* @__PURE__ */ op({ broadcastTo_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X3RvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYnJvYWRjYXN0X3RvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBd0IsTUFBTSxpQkFBaUIsQ0FBQztBQUk1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFlBQVksQ0FDakIsQ0FBb0IsRUFBRSxLQUFrQjtJQUMxQyxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRTNCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEtBQUssQ0FBQyxNQUFNLGlCQUN2RCxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztLQUNwQjtJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQjtRQUNELEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMvQixNQUFNLElBQUksR0FBYSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO2FBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUNYLG1CQUFtQixNQUFNLDZCQUE2QixLQUFLLElBQUksQ0FBQyxDQUFDO1NBQ3RFO0tBQ0Y7SUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVwRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBYyxDQUFDO0tBQ2xDO0lBRUQsMkVBQTJFO0lBQzNFLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQ3RDLE1BQU0sS0FBSyxHQUFjLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUaWxlLCBUaWxlQXR0cnMsIFRpbGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge2Nsb25lfSBmcm9tICcuL2Nsb25lJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBCcm9hZGNhc3QgYW4gYXJyYXkgdG8gYSBjb21wYXRpYmxlIHNoYXBlIE51bVB5LXN0eWxlLlxuICpcbiAqIFRoZSB0ZW5zb3IncyBzaGFwZSBpcyBjb21wYXJlZCB0byB0aGUgYnJvYWRjYXN0IHNoYXBlIGZyb20gZW5kIHRvIGJlZ2lubmluZy5cbiAqIE9uZXMgYXJlIHByZXBlbmRlZCB0byB0aGUgdGVuc29yJ3Mgc2hhcGUgdW50aWwgaXQgaGFzIHRoZSBzYW1lIGxlbmd0aCBhc1xuICogdGhlIGJyb2FkY2FzdCBzaGFwZS4gSWYgaW5wdXQuc2hhcGVbaV09PXNoYXBlW2ldLCB0aGUgKGkrMSktdGggYXhpcyBpc1xuICogYWxyZWFkeSBicm9hZGNhc3QtY29tcGF0aWJsZS4gSWYgaW5wdXQuc2hhcGVbaV09PTEgYW5kIHNoYXBlW2ldPT1OLCB0aGVuXG4gKiB0aGUgaW5wdXQgdGVuc29yIGlzIHRpbGVkIE4gdGltZXMgYWxvbmcgdGhhdCBheGlzICh1c2luZyB0Zi50aWxlKS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgVGhlIHRlbnNvciB0aGF0IGlzIHRvIGJlIGJyb2FkY2FzdGVkLlxuICogQHBhcmFtIHNoYXBlIFRoZSBpbnB1dCBpcyB0byBiZSBicm9hZGNhc3QgdG8gdGhpcyBzaGFwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBicm9hZGNhc3RUb188UiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBzaGFwZTogU2hhcGVNYXBbUl0pOiBUZW5zb3I8Uj4ge1xuICBsZXQgaW5wdXQgPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ2Jyb2FkY2FzdFRvJywgJ3gnKTtcbiAgY29uc3QgeFNoYXBlID0gaW5wdXQuc2hhcGU7XG5cbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG5cbiAgaWYgKHNoYXBlLmxlbmd0aCA8IGlucHV0LnJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJyb2FkY2FzdFRvKCk6IHNoYXBlLmxlbmd0aD0ke3NoYXBlLmxlbmd0aH0gPCBpbnB1dC5yYW5rPSR7XG4gICAgICAgIGlucHV0LnJhbmt9LmApO1xuICB9XG5cbiAgaWYgKHNoYXBlLmxlbmd0aCA+IGlucHV0LnJhbmspIHtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGlucHV0LnNoYXBlLnNsaWNlKCk7XG4gICAgd2hpbGUgKG5ld1NoYXBlLmxlbmd0aCA8IHNoYXBlLmxlbmd0aCkge1xuICAgICAgbmV3U2hhcGUudW5zaGlmdCgxKTtcbiAgICB9XG4gICAgaW5wdXQgPSByZXNoYXBlKGlucHV0LCBuZXdTaGFwZSk7XG4gIH1cblxuICBjb25zdCBpbnB1dFNoYXBlID0gaW5wdXQuc2hhcGU7XG4gIGNvbnN0IHJlcHM6IG51bWJlcltdID0gQXJyYXkuZnJvbShzaGFwZSk7XG4gIGZvciAobGV0IGkgPSBzaGFwZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChpbnB1dFNoYXBlW2ldID09PSBzaGFwZVtpXSkge1xuICAgICAgcmVwc1tpXSA9IDE7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5zaGFwZVtpXSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBicm9hZGNhc3RUbygpOiBbJHt4U2hhcGV9XSBjYW5ub3QgYmUgYnJvYWRjYXN0IHRvIFske3NoYXBlfV0uYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGF4ZXMgPSByZXBzLm1hcCgobiwgaSkgPT4gbiA+IDEgPyBpIDogLTEpLmZpbHRlcihpID0+IGkgPj0gMCk7XG5cbiAgaWYgKGF4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNsb25lKGlucHV0KSBhcyBUZW5zb3I8Uj47XG4gIH1cblxuICAvLyBUT0RPIGNhbGwgYnJvYWRjYXN0VG8ga2VybmVsIGRpcmVjdGx5IG9uY2UgYmFja2VuZHMgaW1wbGVtZW50IGJyb2FkY3N0VG9cbiAgY29uc3QgaW5wdXRzOiBUaWxlSW5wdXRzID0ge3g6IGlucHV0fTtcbiAgY29uc3QgYXR0cnM6IFRpbGVBdHRycyA9IHtyZXBzfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBUaWxlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyb2FkY2FzdFRvID0gLyogQF9fUFVSRV9fICovIG9wKHticm9hZGNhc3RUb199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Ceil } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes ceiling of input `tf.Tensor` element-wise: `ceil(x)`\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.ceil().print(); // or tf.ceil(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction ceil_(x) {\n const $x = convertToTensor(x, 'x', 'ceil', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Ceil, inputs);\n}\nexport const ceil = /* @__PURE__ */ op({ ceil_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NlaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NlaWwsIENlaWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgY2VpbGluZyBvZiBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGBjZWlsKHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LmNlaWwoKS5wcmludCgpOyAgLy8gb3IgdGYuY2VpbCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBjZWlsXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY2VpbCcsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDZWlsSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoQ2VpbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGNlaWwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NlaWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Fill } from '../kernel_names';\nimport { inferDtype } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\n/**\n * Creates a `tf.Tensor` filled with a scalar value.\n *\n * ```js\n * tf.fill([2, 2], 4).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param value The scalar value to fill the tensor with.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n * 'float32' if the given param value is a number, otherwise 'string'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction fill(shape, value, dtype) {\n assertNonNegativeIntegerDimensions(shape);\n dtype = dtype || inferDtype(value);\n const attrs = { shape, value, dtype };\n return ENGINE.runKernel(Fill, {}, attrs);\n}\nexport { fill };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ZpbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFZLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsSUFBSSxDQUNULEtBQWtCLEVBQUUsS0FBb0IsRUFBRSxLQUFnQjtJQUM1RCxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxQyxLQUFLLEdBQUcsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBYyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFFL0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxPQUFPLEVBQUMsSUFBSSxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGaWxsLCBGaWxsQXR0cnN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aW5mZXJEdHlwZX0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIGZpbGxlZCB3aXRoIGEgc2NhbGFyIHZhbHVlLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5maWxsKFsyLCAyXSwgNCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgc2NhbGFyIHZhbHVlIHRvIGZpbGwgdGhlIHRlbnNvciB3aXRoLlxuICogQHBhcmFtIGR0eXBlIFRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyB0ZW5zb3IuIERlZmF1bHRzIHRvXG4gKiAgICAgJ2Zsb2F0MzInIGlmIHRoZSBnaXZlbiBwYXJhbSB2YWx1ZSBpcyBhIG51bWJlciwgb3RoZXJ3aXNlICdzdHJpbmcnLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gZmlsbDxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCB2YWx1ZTogbnVtYmVyfHN0cmluZywgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuXG4gIGR0eXBlID0gZHR5cGUgfHwgaW5mZXJEdHlwZSh2YWx1ZSk7XG4gIGNvbnN0IGF0dHJzOiBGaWxsQXR0cnMgPSB7c2hhcGUsIHZhbHVlLCBkdHlwZX07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRmlsbCwge30sIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IHtmaWxsfTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ClipByValue } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { fill } from './fill';\nimport { op } from './operation';\n/**\n * Clips values element-wise. `max(min(x, clipValueMax), clipValueMin)`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.clipByValue(-2, 3).print(); // or tf.clipByValue(x, -2, 3)\n * ```\n * @param x The input tensor.\n * @param clipValueMin Lower bound of range to be clipped to.\n * @param clipValueMax Upper bound of range to be clipped to.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction clipByValue_(x, clipValueMin, clipValueMax) {\n const $x = convertToTensor(x, 'x', 'clipByValue');\n util.assert((clipValueMin <= clipValueMax), () => `Error in clip: min (${clipValueMin}) must be ` +\n `less than or equal to max (${clipValueMax}).`);\n if (clipValueMin === clipValueMax) {\n return fill($x.shape, clipValueMin, $x.dtype);\n }\n const inputs = { x: $x };\n const attrs = { clipValueMin, clipValueMax };\n return ENGINE.runKernel(ClipByValue, inputs, attrs);\n}\nexport const clipByValue = /* @__PURE__ */ op({ clipByValue_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcF9ieV92YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NsaXBfYnlfdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFzQyxNQUFNLGlCQUFpQixDQUFDO0FBSWpGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsWUFBWSxDQUNqQixDQUFlLEVBQUUsWUFBb0IsRUFBRSxZQUFvQjtJQUM3RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsWUFBWSxZQUFZO1FBQ2pELDhCQUE4QixZQUFZLElBQUksQ0FBQyxDQUFDO0lBRXhELElBQUksWUFBWSxLQUFLLFlBQVksRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFNLENBQUM7S0FDcEQ7SUFFRCxNQUFNLE1BQU0sR0FBc0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQXFCLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBRTdELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsV0FBVyxFQUFFLE1BQW1DLEVBQ2hELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0NsaXBCeVZhbHVlLCBDbGlwQnlWYWx1ZUF0dHJzLCBDbGlwQnlWYWx1ZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge2ZpbGx9IGZyb20gJy4vZmlsbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDbGlwcyB2YWx1ZXMgZWxlbWVudC13aXNlLiBgbWF4KG1pbih4LCBjbGlwVmFsdWVNYXgpLCBjbGlwVmFsdWVNaW4pYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHguY2xpcEJ5VmFsdWUoLTIsIDMpLnByaW50KCk7ICAvLyBvciB0Zi5jbGlwQnlWYWx1ZSh4LCAtMiwgMylcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBjbGlwVmFsdWVNaW4gTG93ZXIgYm91bmQgb2YgcmFuZ2UgdG8gYmUgY2xpcHBlZCB0by5cbiAqIEBwYXJhbSBjbGlwVmFsdWVNYXggVXBwZXIgYm91bmQgb2YgcmFuZ2UgdG8gYmUgY2xpcHBlZCB0by5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gY2xpcEJ5VmFsdWVfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgY2xpcFZhbHVlTWluOiBudW1iZXIsIGNsaXBWYWx1ZU1heDogbnVtYmVyKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NsaXBCeVZhbHVlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKGNsaXBWYWx1ZU1pbiA8PSBjbGlwVmFsdWVNYXgpLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNsaXA6IG1pbiAoJHtjbGlwVmFsdWVNaW59KSBtdXN0IGJlIGAgK1xuICAgICAgICAgIGBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4ICgke2NsaXBWYWx1ZU1heH0pLmApO1xuXG4gIGlmIChjbGlwVmFsdWVNaW4gPT09IGNsaXBWYWx1ZU1heCkge1xuICAgIHJldHVybiBmaWxsKCR4LnNoYXBlLCBjbGlwVmFsdWVNaW4sICR4LmR0eXBlKSBhcyBUO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBDbGlwQnlWYWx1ZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBDbGlwQnlWYWx1ZUF0dHJzID0ge2NsaXBWYWx1ZU1pbiwgY2xpcFZhbHVlTWF4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIENsaXBCeVZhbHVlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaXBCeVZhbHVlID0gLyogQF9fUFVSRV9fICovIG9wKHtjbGlwQnlWYWx1ZV99KTtcbiJdfQ==","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of`tf.Tensor1D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(3) = |r1, g1, b1|\n * B: shape(2) = |r2, g2|\n * C = tf.concat1d([A, B]) == |r1, g1, b1, r2, g2|\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @return The concatenated array.\n */\nfunction concat1d_(tensors) {\n return concat(tensors, 0 /* axis */);\n}\nexport const concat1d = /* @__PURE__ */ op({ concat1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsU0FBUyxDQUFDLE9BQW1DO0lBQ3BELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mYHRmLlRlbnNvcjFEYHMgYWxvbmcgYW4gYXhpcy4gU2VlIGBjb25jYXRgIGZvciBkZXRhaWxzLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZjpcbiAqIEE6IHNoYXBlKDMpID0gfHIxLCBnMSwgYjF8XG4gKiBCOiBzaGFwZSgyKSA9IHxyMiwgZzJ8XG4gKiBDID0gdGYuY29uY2F0MWQoW0EsIEJdKSA9PSB8cjEsIGcxLCBiMSwgcjIsIGcyfFxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZmB0Zi5UZW5zb3JgcyB0byBjb25jYXRlbmF0ZS5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0MWRfKHRlbnNvcnM6IEFycmF5PFRlbnNvcjFEfFRlbnNvckxpa2U+KTogVGVuc29yMUQge1xuICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIDAgLyogYXhpcyAqLyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0MWRffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of`tf.Tensor2D`s along an axis. See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n *\n * B: shape(2, 3) = | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * C = tf.concat2d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n * | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * if axis = 1:\n * C = shape(2, 6) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concatenate along.\n * @return The concatenated array.\n */\nfunction concat2d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat2d = /* @__PURE__ */ op({ concat2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsT0FBbUMsRUFBRSxJQUFZO0lBQ25ELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9jb25jYXQnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbmNhdGVuYXRlcyBhIGxpc3Qgb2ZgdGYuVGVuc29yMkRgcyBhbG9uZyBhbiBheGlzLiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmOlxuICogQTogc2hhcGUoMiwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICpcbiAqIEI6IHNoYXBlKDIsIDMpID0gfCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgfCByNCwgZzQsIGI0IHxcbiAqXG4gKiBDID0gdGYuY29uY2F0MmQoW0EsIEJdLCBheGlzKVxuICpcbiAqIGlmIGF4aXMgPSAwOlxuICogQzogc2hhcGUoNCwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICogICAgICAgICAgICAgICAgICB8IHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICB8IHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAxOlxuICogQyA9IHNoYXBlKDIsIDYpID0gfCByMSwgZzEsIGIxLCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgIHwgcjIsIGcyLCBiMiwgcjQsIGc0LCBiNCB8XG4gKlxuICpcbiAqIEBwYXJhbSB0ZW5zb3JzIEEgbGlzdCBvZiBgdGYuVGVuc29yYHMgdG8gY29uY2F0ZW5hdGUuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBjb25jYXRlbmF0ZSBhbG9uZy5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0MmRfKFxuICAgIHRlbnNvcnM6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+LCBheGlzOiBudW1iZXIpOiBUZW5zb3IyRCB7XG4gIHJldHVybiBjb25jYXQodGVuc29ycywgYXhpcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0MmRffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor3D`s along an axis.\n * See `concat` for details.\n *\n * For example, if:\n * A: shape(2, 1, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n *\n * B: shape(2, 1, 3) = | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * C = tf.concat3d([A, B], axis)\n *\n * if axis = 0:\n * C: shape(4, 1, 3) = | r1, g1, b1 |\n * | r2, g2, b2 |\n * | r3, g3, b3 |\n * | r4, g4, b4 |\n *\n * if axis = 1:\n * C: shape(2, 2, 3) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n * if axis = 2:\n * C = shape(2, 1, 6) = | r1, g1, b1, r3, g3, b3 |\n * | r2, g2, b2, r4, g4, b4 |\n *\n * @param tensors A list of`tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat3d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat3d = /* @__PURE__ */ op({ concat3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzNkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsU0FBUyxDQUNkLE9BQW1DLEVBQUUsSUFBWTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0R9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mIGB0Zi5UZW5zb3IzRGBzIGFsb25nIGFuIGF4aXMuXG4gKiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmOlxuICogQTogc2hhcGUoMiwgMSwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICpcbiAqIEI6IHNoYXBlKDIsIDEsIDMpID0gfCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgICAgfCByNCwgZzQsIGI0IHxcbiAqXG4gKiBDID0gdGYuY29uY2F0M2QoW0EsIEJdLCBheGlzKVxuICpcbiAqIGlmIGF4aXMgPSAwOlxuICogQzogc2hhcGUoNCwgMSwgMykgPSB8IHIxLCBnMSwgYjEgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAxOlxuICogQzogc2hhcGUoMiwgMiwgMykgPSB8IHIxLCBnMSwgYjEsIHIzLCBnMywgYjMgfFxuICogICAgICAgICAgICAgICAgICAgICB8IHIyLCBnMiwgYjIsIHI0LCBnNCwgYjQgfFxuICpcbiAqIGlmIGF4aXMgPSAyOlxuICogQyA9IHNoYXBlKDIsIDEsIDYpID0gfCByMSwgZzEsIGIxLCByMywgZzMsIGIzIHxcbiAqICAgICAgICAgICAgICAgICAgICAgIHwgcjIsIGcyLCBiMiwgcjQsIGc0LCBiNCB8XG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mYHRmLlRlbnNvcmBzIHRvIGNvbmNhdGVuYXRlLlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gY29uY2F0ZSBhbG9uZy5cbiAqIEByZXR1cm4gVGhlIGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY29uY2F0M2RfKFxuICAgIHRlbnNvcnM6IEFycmF5PFRlbnNvcjNEfFRlbnNvckxpa2U+LCBheGlzOiBudW1iZXIpOiBUZW5zb3IzRCB7XG4gIHJldHVybiBjb25jYXQodGVuc29ycywgYXhpcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb25jYXQzZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29uY2F0M2RffSk7XG4iXX0=","import { concat } from './concat';\nimport { op } from './operation';\n/**\n * Concatenates a list of `tf.Tensor4D`s along an axis.\n * See `concat` for details.\n *\n * @param tensors A list of `tf.Tensor`s to concatenate.\n * @param axis The axis to concate along.\n * @return The concatenated array.\n */\nfunction concat4d_(tensors, axis) {\n return concat(tensors, axis);\n}\nexport const concat4d = /* @__PURE__ */ op({ concat4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0XzRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29uY2F0XzRkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7R0FPRztBQUNILFNBQVMsU0FBUyxDQUNkLE9BQW1DLEVBQUUsSUFBWTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4vY29uY2F0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb25jYXRlbmF0ZXMgYSBsaXN0IG9mIGB0Zi5UZW5zb3I0RGBzIGFsb25nIGFuIGF4aXMuXG4gKiBTZWUgYGNvbmNhdGAgZm9yIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIGB0Zi5UZW5zb3JgcyB0byBjb25jYXRlbmF0ZS5cbiAqIEBwYXJhbSBheGlzIFRoZSBheGlzIHRvIGNvbmNhdGUgYWxvbmcuXG4gKiBAcmV0dXJuIFRoZSBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdDRkXyhcbiAgICB0ZW5zb3JzOiBBcnJheTxUZW5zb3I0RHxUZW5zb3JMaWtlPiwgYXhpczogbnVtYmVyKTogVGVuc29yNEQge1xuICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29uY2F0NGQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbmNhdDRkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 2D convolution over the input x.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv2d_(x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'conv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('conv2d', pad, dimRoundingMode);\n const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert(inDepth === $filter.shape[2], () => `Error in conv2d: depth of input (${inDepth}) must match ` +\n `input depth for filter ${$filter.shape[2]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n util.assert(conv_util.stridesOrDilationsArePositive(dilations), () => 'Error in conv2D: Dilated rates should be larger than 0.');\n util.assert(conv_util.stridesOrDilationsArePositive(strides), () => 'Error in conv2D: Strides should be larger than 0.');\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv2D, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const conv2d = /* @__PURE__ */ op({ conv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsU0FBUyxPQUFPLENBQ1osQ0FBZSxFQUFFLE1BQTJCLEVBQzVDLE9BQWdDLEVBQ2hDLEdBQW9ELEVBQ3BELGFBQTRCLE1BQU0sRUFDbEMsWUFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzNDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkUsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUV6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQyx1REFBdUQsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDbEIsR0FBRyxFQUFFLENBQUMsdURBQXVEO1FBQ3pELEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUIsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsT0FBTyxlQUFlO1FBQzVELDBCQUEwQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxTQUFTLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxTQUFTLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLEVBQ2hELEdBQUcsRUFBRSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFFL0QsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQ08sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFDLENBQUM7SUFFekUsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQU0sQ0FBQztJQUV2RCxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7S0FDdEU7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjJELCBDb252MkRBdHRycywgQ29udjJESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyBhIDJEIGNvbnZvbHV0aW9uIG92ZXIgdGhlIGlucHV0IHguXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5EZXB0aCwgb3V0RGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRhdGFGb3JtYXQ6IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5IV0NcIiwgXCJOQ0hXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOSFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOSFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gXG4gKiAgICAgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBhY3Jvc3MgdGhlIGhlaWdodCBhbmQgd2lkdGggZGltZW5zaW9uc1xuICogICAgIGluIGF0cm91cyBjb252b2x1dGlvbi4gRGVmYXVsdHMgdG8gYFsxLCAxXWAuIElmIGBkaWxhdGlvbnNgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBjb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb252MmQnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkZmlsdGVyID0gY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdjb252MmQnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuXG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgJHt4NEQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZDogZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2NvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5EZXB0aCA9IGRhdGFGb3JtYXQgPT09ICdOSFdDJyA/IHg0RC5zaGFwZVszXSA6IHg0RC5zaGFwZVsxXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBpbkRlcHRoID09PSAkZmlsdGVyLnNoYXBlWzJdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZDogZGVwdGggb2YgaW5wdXQgKCR7aW5EZXB0aH0pIG11c3QgbWF0Y2ggYCArXG4gICAgICAgICAgYGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBjb252X3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsIGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjJEOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLnN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlKGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjJEOiBEaWxhdGVkIHJhdGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGVzKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjb252MkQ6IFN0cmlkZXMgc2hvdWxkIGJlIGxhcmdlciB0aGFuIDAuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb252MkRJbnB1dHMgPSB7eDogeDRELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIENvbnYyREF0dHJzID0ge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjJkX30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { conv2d } from './conv2d';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 1D convolution over the input x.\n *\n * @param x The input tensor, of rank 3 or rank 2, of shape\n * `[batch, width, inChannels]`. If rank 2, batch of 1 is assumed.\n * @param filter The filter, rank 3, of shape\n * `[filterWidth, inDepth, outDepth]`.\n * @param stride The number of entries by which the filter is moved right at\n * each step.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat An optional string from \"NWC\", \"NCW\". Defaults to \"NWC\",\n * the data is stored in the order of [batch, in_width, in_channels]. Only\n * \"NWC\" is currently supported.\n * @param dilation The dilation rate in which we sample input values in\n * atrous convolution. Defaults to `1`. If it is greater than 1, then\n * stride must be `1`.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv1d_(x, filter, stride, pad, dataFormat = 'NWC', dilation = 1, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv1d');\n const $filter = convertToTensor(filter, 'filter', 'conv1d');\n let x3D = $x;\n let reshapedTo3D = false;\n if ($x.rank === 2) {\n reshapedTo3D = true;\n x3D = reshape($x, [1, $x.shape[0], $x.shape[1]]);\n }\n util.assert(x3D.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${x3D.rank}.`);\n util.assert($filter.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('conv1d', pad, dimRoundingMode);\n util.assert(x3D.shape[2] === $filter.shape[1], () => `Error in conv1d: depth of input (${x3D.shape[2]}) must match ` +\n `input depth for filter ${$filter.shape[1]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(stride, dilation), () => 'Error in conv1D: Either stride or dilation must be 1. ' +\n `Got stride ${stride} and dilation '${dilation}'`);\n util.assert(conv_util.stridesOrDilationsArePositive(dilation), () => 'Error in conv1D: Dilated rates should be larger than 0.');\n util.assert(conv_util.stridesOrDilationsArePositive(stride), () => 'Error in conv1D: Stride should be larger than 0.');\n util.assert(dataFormat === 'NWC', () => `Error in conv1d: got dataFormat of ${dataFormat} but only NWC is currently supported.`);\n const filter4D = reshape($filter, [1, $filter.shape[0], $filter.shape[1], $filter.shape[2]]);\n const input4D = reshape(x3D, [x3D.shape[0], 1, x3D.shape[1], x3D.shape[2]]);\n const strides = [1, stride];\n const dilations = [1, dilation];\n const conv2dDataFormat = 'NHWC';\n const res = conv2d(input4D, filter4D, strides, pad, conv2dDataFormat, dilations, dimRoundingMode);\n if (reshapedTo3D) {\n return reshape(res, [res.shape[2], res.shape[3]]);\n }\n return reshape(res, [res.shape[0], res.shape[2], res.shape[3]]);\n}\nexport const conv1d = /* @__PURE__ */ op({ conv1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxNQUEyQixFQUFFLE1BQWMsRUFDNUQsR0FBb0QsRUFDcEQsYUFBMEIsS0FBSyxFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQzdDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVELElBQUksR0FBRyxHQUFHLEVBQWMsQ0FBQztJQUN6QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBTSxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjJELCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjb252MmR9IGZyb20gJy4vY29udjJkJztcbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAxRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgMyBvciByYW5rIDIsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAyLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlcldpZHRoLCBpbkRlcHRoLCBvdXREZXB0aF1gLlxuICogQHBhcmFtIHN0cmlkZSBUaGUgbnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggdGhlIGZpbHRlciBpcyBtb3ZlZCByaWdodCBhdFxuICogICAgIGVhY2ggc3RlcC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tIFwiTldDXCIsIFwiTkNXXCIuIERlZmF1bHRzIHRvIFwiTldDXCIsXG4gKiAgICAgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZiBbYmF0Y2gsIGluX3dpZHRoLCBpbl9jaGFubmVsc10uIE9ubHlcbiAqICAgICBcIk5XQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZGlsYXRpb24gVGhlIGRpbGF0aW9uIHJhdGUgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBpblxuICogICAgIGF0cm91cyBjb252b2x1dGlvbi4gRGVmYXVsdHMgdG8gYDFgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW4gMSwgdGhlblxuICogICAgIHN0cmlkZSBtdXN0IGJlIGAxYC5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdDb252b2x1dGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNvbnYxZF88VCBleHRlbmRzIFRlbnNvcjJEfFRlbnNvcjNEPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlcjogVGVuc29yM0R8VGVuc29yTGlrZSwgc3RyaWRlOiBudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTldDJ3wnTkNXJyA9ICdOV0MnLCBkaWxhdGlvbiA9IDEsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb252MWQnKTtcbiAgY29uc3QgJGZpbHRlciA9IGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnY29udjFkJyk7XG5cbiAgbGV0IHgzRCA9ICR4IGFzIFRlbnNvcjNEO1xuICBsZXQgcmVzaGFwZWRUbzNEID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAyKSB7XG4gICAgcmVzaGFwZWRUbzNEID0gdHJ1ZTtcbiAgICB4M0QgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdXSk7XG4gIH1cblxuICB1dGlsLmFzc2VydChcbiAgICAgIHgzRC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYxZDogaW5wdXQgbXVzdCBiZSByYW5rIDMsIGJ1dCBnb3QgcmFuayAke3gzRC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZmlsdGVyLnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjFkOiBmaWx0ZXIgbXVzdCBiZSByYW5rIDMsIGJ1dCBnb3QgcmFuayBgICtcbiAgICAgICAgICBgJHskZmlsdGVyLnJhbmt9LmApO1xuICBjb252X3V0aWwuY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZSgnY29udjFkJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHgzRC5zaGFwZVsyXSA9PT0gJGZpbHRlci5zaGFwZVsxXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MWQ6IGRlcHRoIG9mIGlucHV0ICgke3gzRC5zaGFwZVsyXX0pIG11c3QgbWF0Y2ggYCArXG4gICAgICAgICAgYGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzFdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBjb252X3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZSwgZGlsYXRpb24pLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYxRDogRWl0aGVyIHN0cmlkZSBvciBkaWxhdGlvbiBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlICR7c3RyaWRlfSBhbmQgZGlsYXRpb24gJyR7ZGlsYXRpb259J2ApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShkaWxhdGlvbiksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjFEOiBEaWxhdGVkIHJhdGVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5zdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGUpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYxRDogU3RyaWRlIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAwLicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGRhdGFGb3JtYXQgPT09ICdOV0MnLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYxZDogZ290IGRhdGFGb3JtYXQgb2YgJHtcbiAgICAgICAgICBkYXRhRm9ybWF0fSBidXQgb25seSBOV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtcblxuICBjb25zdCBmaWx0ZXI0RCA9IHJlc2hhcGUoXG4gICAgICAkZmlsdGVyLCBbMSwgJGZpbHRlci5zaGFwZVswXSwgJGZpbHRlci5zaGFwZVsxXSwgJGZpbHRlci5zaGFwZVsyXV0pO1xuICBjb25zdCBpbnB1dDREID0gcmVzaGFwZSh4M0QsIFt4M0Quc2hhcGVbMF0sIDEsIHgzRC5zaGFwZVsxXSwgeDNELnNoYXBlWzJdXSk7XG4gIGNvbnN0IHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl0gPSBbMSwgc3RyaWRlXTtcbiAgY29uc3QgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdID0gWzEsIGRpbGF0aW9uXTtcblxuICBjb25zdCBjb252MmREYXRhRm9ybWF0ID0gJ05IV0MnO1xuXG4gIGNvbnN0IHJlcyA9IGNvbnYyZChcbiAgICAgIChpbnB1dDREIGFzIFRlbnNvcjREKSwgKGZpbHRlcjREIGFzIFRlbnNvcjREKSwgc3RyaWRlcywgcGFkLFxuICAgICAgY29udjJkRGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGUpO1xuXG4gIGlmIChyZXNoYXBlZFRvM0QpIHtcbiAgICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMF0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2DBackpropInput } from '../kernel_names';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the input of a 2D convolution.\n *\n * @param xShape The shape of the input: [batch, height, width, inDepth].\n * If length of 3, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 4 or rank 3 of shape\n * `[batch, outHeight, outWidth, outDepth]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction conv2DBackpropInput_(xShape, dy, filter, strides, pad, dataFormat = 'NHWC', dimRoundingMode) {\n util.assert(xShape.length === dy.rank, () => `Length of inShape ` +\n `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n let xShape4D = xShape;\n let dy4D = dy;\n let reshapedTo4D = false;\n if (dy.rank === 3) {\n reshapedTo4D = true;\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n xShape4D = [1, xShape[0], xShape[1], xShape[2]];\n }\n util.assert(xShape4D.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ` +\n `${xShape4D.length}.`);\n util.assert(dy4D.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got ` +\n `rank ${dy4D.rank}`);\n util.assert(filter.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got ` +\n `rank ${filter.rank}`);\n const inDepth = dataFormat === 'NHWC' ? xShape4D[3] : xShape4D[1];\n const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n util.assert(inDepth === filter.shape[2], () => `Error in conv2dDerInput: depth of input (${inDepth}) must ` +\n `match input depth for filter ${filter.shape[2]}.`);\n util.assert(outDepth === filter.shape[3], () => `Error in conv2dDerInput: depth of output (${outDepth}) must ` +\n `match output depth for filter ${filter.shape[3]}.`);\n conv_util.checkPadOnDimRoundingMode('conv2dDerInput', pad, dimRoundingMode);\n const inputs = { dy: dy4D, filter };\n const attrs = { strides, pad, dataFormat, dimRoundingMode, inputShape: xShape4D };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv2DBackpropInput, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const conv2DBackpropInput = /* @__PURE__ */ op({ conv2DBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX2JhY2twcm9wX2lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjJkX2JhY2twcm9wX2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLGlCQUFpQixDQUFDO0FBSXpHLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLG9CQUFvQixDQUN6QixNQUFpRSxFQUFFLEVBQUssRUFDeEUsTUFBZ0IsRUFBRSxPQUFnQyxFQUNsRCxHQUFvRCxFQUNwRCxhQUE0QixNQUFNLEVBQ2xDLGVBQXdDO0lBQzFDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsSUFBSSxFQUN6QixHQUFHLEVBQUUsQ0FBQyxvQkFBb0I7UUFDdEIsSUFBSSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFFckUsSUFBSSxRQUFRLEdBQUcsTUFBMEMsQ0FBQztJQUMxRCxJQUFJLElBQUksR0FBRyxFQUFjLENBQUM7SUFDMUIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLEdBQUcsT0FBTyxDQUFD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Ii8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb252MkRCYWNrcHJvcElucHV0LCBDb252MkRCYWNrcHJvcElucHV0QXR0cnMsIENvbnYyREJhY2twcm9wSW5wdXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCAqIGFzIGNvbnZfdXRpbCBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2YXRpdmUgb2YgdGhlIGlucHV0IG9mIGEgMkQgY29udm9sdXRpb24uXG4gKlxuICogQHBhcmFtIHhTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGlucHV0OiBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluRGVwdGhdLlxuICogSWYgbGVuZ3RoIG9mIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBkeSBUaGUgZGVyaXZhdGl2ZSBvZiB0aGUgb3V0cHV0LCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgIGBbYmF0Y2gsIG91dEhlaWdodCwgb3V0V2lkdGgsIG91dERlcHRoXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5EZXB0aCwgb3V0RGVwdGhdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobSB1c2VkOlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gY29udjJEQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZHk6IFQsXG4gICAgZmlsdGVyOiBUZW5zb3I0RCwgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGUubGVuZ3RoID09PSBkeS5yYW5rLFxuICAgICAgKCkgPT4gYExlbmd0aCBvZiBpblNoYXBlIGAgK1xuICAgICAgICAgIGAoJHt4U2hhcGUubGVuZ3RofSkgYW5kIHJhbmsgb2YgZHkgKCR7ZHkucmFua30pIG11c3QgbWF0Y2hgKTtcblxuICBsZXQgeFNoYXBlNEQgPSB4U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGxldCBkeTREID0gZHkgYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKGR5LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICAgIHhTaGFwZTREID0gWzEsIHhTaGFwZVswXSwgeFNoYXBlWzFdLCB4U2hhcGVbMl1dO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGU0RC5sZW5ndGggPT09IDQsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBjb252MmREZXJJbnB1dDogaW5TaGFwZSBtdXN0IGJlIGxlbmd0aCA0LCBidXQgZ290IGxlbmd0aCBgICtcbiAgICAgICAgICBgJHt4U2hhcGU0RC5sZW5ndGh9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJJbnB1dDogZHkgbXVzdCBiZSByYW5rIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHtkeTRELnJhbmt9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVySW5wdXQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke2ZpbHRlci5yYW5rfWApO1xuICBjb25zdCBpbkRlcHRoID0gZGF0YUZvcm1hdCA9PT0gJ05IV0MnID8geFNoYXBlNERbM10gOiB4U2hhcGU0RFsxXTtcbiAgY29uc3Qgb3V0RGVwdGggPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyBkeTRELnNoYXBlWzNdIDogZHk0RC5zaGFwZVsxXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBpbkRlcHRoID09PSBmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVySW5wdXQ6IGRlcHRoIG9mIGlucHV0ICgke2luRGVwdGh9KSBtdXN0IGAgK1xuICAgICAgICAgIGBtYXRjaCBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7ZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBvdXREZXB0aCA9PT0gZmlsdGVyLnNoYXBlWzNdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZERlcklucHV0OiBkZXB0aCBvZiBvdXRwdXQgKCR7b3V0RGVwdGh9KSBtdXN0IGAgK1xuICAgICAgICAgIGBtYXRjaCBvdXRwdXQgZGVwdGggZm9yIGZpbHRlciAke2ZpbHRlci5zaGFwZVszXX0uYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdjb252MmREZXJJbnB1dCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzID0ge2R5OiBkeTRELCBmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZSwgaW5wdXRTaGFwZTogeFNoYXBlNER9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYyREJhY2twcm9wSW5wdXQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBjb252MkRCYWNrcHJvcElucHV0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252MkRCYWNrcHJvcElucHV0X30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport { conv2DBackpropInput } from './conv2d_backprop_input';\nimport { op } from './operation';\n/**\n * Computes the transposed 2D convolution of an image, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 4 or rank 3, of shape\n * `[batch, height, width, inDepth]`. If rank 3, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, outDepth, inDepth]`.\n * `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 4 or rank 3:\n * `[batch, height, width, outDepth]`. If rank 3, batch of 1 is assumed.\n * @param strides The strides of the original convolution:\n * `[strideHeight, strideWidth]`.\n * @param pad The type of padding algorithm used in the non-transpose version\n * of the op.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv2dTranspose_(x, filter, outputShape, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'conv2dTranspose');\n const $filter = convertToTensor(filter, 'filter', 'conv2dTranspose');\n return conv2DBackpropInput(outputShape, $x, $filter, strides, pad, 'NHWC', dimRoundingMode);\n}\nexport const conv2dTranspose = /* @__PURE__ */ op({ conv2dTranspose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX3RyYW5zcG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYyZF90cmFuc3Bvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsQ0FBZSxFQUFFLE1BQTJCLEVBQzVDLFdBQXNFLEVBQ3RFLE9BQWdDLEVBQ2hDLEdBQTBDLEVBQzFDLGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUVyRSxPQUFPLG1CQUFtQixDQUN0QixXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y29udjJEQmFja3Byb3BJbnB1dH0gZnJvbSAnLi9jb252MmRfYmFja3Byb3BfaW5wdXQnO1xuaW1wb3J0IHtFeHBsaWNpdFBhZGRpbmd9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdHJhbnNwb3NlZCAyRCBjb252b2x1dGlvbiBvZiBhbiBpbWFnZSwgYWxzbyBrbm93biBhcyBhXG4gKiBkZWNvbnZvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbWFnZSwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5EZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgb3V0RGVwdGgsIGluRGVwdGhdYC5cbiAqICAgICBgaW5EZXB0aGAgbXVzdCBtYXRjaCBgaW5EZXB0aGAgaW4gYHhgLlxuICogQHBhcmFtIG91dHB1dFNoYXBlIE91dHB1dCBzaGFwZSwgb2YgcmFuayA0IG9yIHJhbmsgMzpcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBvdXREZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBvcmlnaW5hbCBjb252b2x1dGlvbjpcbiAqICAgICBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC5cbiAqIEBwYXJhbSBwYWQgIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtIHVzZWQgaW4gdGhlIG5vbi10cmFuc3Bvc2UgdmVyc2lvblxuICogICAgb2YgdGhlIG9wLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gY29udjJkVHJhbnNwb3NlXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyOiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIG91dHB1dFNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY29udjJkVHJhbnNwb3NlJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYyZFRyYW5zcG9zZScpO1xuXG4gIHJldHVybiBjb252MkRCYWNrcHJvcElucHV0KFxuICAgICAgb3V0cHV0U2hhcGUsICR4LCAkZmlsdGVyLCBzdHJpZGVzLCBwYWQsICdOSFdDJywgZGltUm91bmRpbmdNb2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyZFRyYW5zcG9zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjJkVHJhbnNwb3NlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { eitherStridesOrDilationsAreOne, stridesOrDilationsArePositive } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes a 3D convolution over the input x.\n *\n * @param x The input tensor, of rank 5 or rank 4, of shape\n * `[batch, depth, height, width, channels]`. If rank 4,\n * batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n * `[filterDepth, filterHeight, filterWidth, inChannels, outChannels]`.\n * inChannels must match between input and filter.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat: An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationDepth, dilationHeight,\n * dilationWidth]` in which we sample input values across the height\n * and width dimensions in atrous convolution. Defaults to `[1, 1, 1]`.\n * If `dilations` is a single number, then\n * `dilationDepth == dilationHeight == dilationWidth`. If it is greater\n * than 1, then all values of `strides` must be 1.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv3d_(x, filter, strides, pad, dataFormat = 'NDHWC', dilations = [1, 1, 1]) {\n const $x = convertToTensor(x, 'x', 'conv3d');\n const $filter = convertToTensor(filter, 'filter', 'conv3d');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${x5D.rank}.`);\n util.assert($filter.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ` +\n `${$filter.rank}.`);\n util.assert(x5D.shape[4] === $filter.shape[3], () => `Error in conv3d: depth of input (${x5D.shape[4]}) must match ` +\n `input depth for filter ${$filter.shape[3]}.`);\n util.assert(eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv3D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n util.assert(dataFormat === 'NDHWC', () => `Error in conv3d: got dataFormat of ${dataFormat} but only NDHWC is currently supported.`);\n util.assert(stridesOrDilationsArePositive(dilations), () => 'Error in conv3D: Dilated rates should be larger than 0.');\n util.assert(stridesOrDilationsArePositive(strides), () => 'Error in conv3D: Strides should be larger than 0.');\n const inputs = { x: x5D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv3D, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const conv3d = /* @__PURE__ */ op({ conv3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLDhCQUE4QixFQUFFLDZCQUE2QixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxNQUEyQixFQUM1QyxPQUF3QyxFQUFFLEdBQW1CLEVBQzdELGFBQThCLE9BQU8sRUFDckMsWUFBNkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU1RCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTtJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsdURBQXVELEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzlFLElBQUksQ0FBQyxNQUFNLENBQ1AsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2xCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RDtRQUN6RCxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZTtRQUNqRSwwQkFBMEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FDUCw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxVQUFVLEtBQUssT0FBTyxFQUN0QixHQUFHLEVBQUUsQ0FBQyxzQ0FDRixVQUFVLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMseURBQXlELENBQUMsQ0FBQztJQUNyRSxJQUFJLENBQUMsTUFBTSxDQUNQLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxFQUN0QyxHQUFHLEVBQUUsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBRXZELE1BQU0sS0FBSyxHQUFnQixFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBRWpFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQ0gsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUFDO0tBQ1A7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjNELCBDb252M0RBdHRycywgQ29udjNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtlaXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUsIHN0cmlkZXNPckRpbGF0aW9uc0FyZVBvc2l0aXZlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAzRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNSBvciByYW5rIDQsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXWAuIElmIHJhbmsgNCxcbiAqIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA1LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVyRGVwdGgsIGZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIG91dENoYW5uZWxzXWAuXG4gKiAgICAgIGluQ2hhbm5lbHMgbXVzdCBtYXRjaCBiZXR3ZWVuIGlucHV0IGFuZCBmaWx0ZXIuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXWAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkRIV0NcIiwgXCJOQ0RIV1wiLiBEZWZhdWx0cyB0b1xuICogICAgIFwiTkRIV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5ESFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBkZXB0aCwgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHNdLiBPbmx5IFwiTkRIV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICogQHBhcmFtIGRpbGF0aW9ucyBUaGUgZGlsYXRpb24gcmF0ZXM6IGBbZGlsYXRpb25EZXB0aCwgZGlsYXRpb25IZWlnaHQsXG4gKiAgICAgZGlsYXRpb25XaWR0aF1gIGluIHdoaWNoIHdlIHNhbXBsZSBpbnB1dCB2YWx1ZXMgYWNyb3NzIHRoZSBoZWlnaHRcbiAqICAgICBhbmQgd2lkdGggZGltZW5zaW9ucyBpbiBhdHJvdXMgY29udm9sdXRpb24uIERlZmF1bHRzIHRvIGBbMSwgMSwgMV1gLlxuICogICAgIElmIGBkaWxhdGlvbnNgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlblxuICogICAgIGBkaWxhdGlvbkRlcHRoID09IGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyXG4gKiAgICAgdGhhbiAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdDb252b2x1dGlvbid9XG4gKi9cbmZ1bmN0aW9uIGNvbnYzZF88VCBleHRlbmRzIFRlbnNvcjREfFRlbnNvcjVEPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGZpbHRlcjogVGVuc29yNUR8VGVuc29yTGlrZSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnLFxuICAgIGRhdGFGb3JtYXQ6ICdOREhXQyd8J05DREhXJyA9ICdOREhXQycsXG4gICAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyID0gWzEsIDEsIDFdKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NvbnYzZCcpO1xuICBjb25zdCAkZmlsdGVyID0gY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdjb252M2QnKTtcblxuICBsZXQgeDVEID0gJHggYXMgVGVuc29yNUQ7XG4gIGxldCByZXNoYXBlZFRvNUQgPSBmYWxzZTtcblxuICBpZiAoJHgucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgeDVEID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl0sICR4LnNoYXBlWzNdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NUQucmFuayA9PT0gNSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2Q6IGlucHV0IG11c3QgYmUgcmFuayA1LCBidXQgZ290IHJhbmsgJHt4NUQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA1LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYzZDogZmlsdGVyIG11c3QgYmUgcmFuayA1LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NUQuc2hhcGVbNF0gPT09ICRmaWx0ZXIuc2hhcGVbM10sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkOiBkZXB0aCBvZiBpbnB1dCAoJHt4NUQuc2hhcGVbNF19KSBtdXN0IG1hdGNoIGAgK1xuICAgICAgICAgIGBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7JGZpbHRlci5zaGFwZVszXX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsIGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gY29udjNEOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZGF0YUZvcm1hdCA9PT0gJ05ESFdDJyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2Q6IGdvdCBkYXRhRm9ybWF0IG9mICR7XG4gICAgICAgICAgZGF0YUZvcm1hdH0gYnV0IG9ubHkgTkRIV0MgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYzRDogRGlsYXRlZCByYXRlcyBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gMC4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzdHJpZGVzT3JEaWxhdGlvbnNBcmVQb3NpdGl2ZShzdHJpZGVzKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjb252M0Q6IFN0cmlkZXMgc2hvdWxkIGJlIGxhcmdlciB0aGFuIDAuJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBDb252M0RJbnB1dHMgPSB7eDogeDVELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuXG4gIGNvbnN0IGF0dHJzOiBDb252M0RBdHRycyA9IHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9uc307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgQ29udjNELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIGlmIChyZXNoYXBlZFRvNUQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShcbiAgICAgICAgICAgICAgIHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM10sIHJlcy5zaGFwZVs0XV0pIGFzXG4gICAgICAgIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjNkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv3DBackpropInputV2 } from '../kernel_names';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the input of a 3D convolution.\n *\n * @param xShape The shape of the input: [batch, depth, height, width,\n * in_channels]. If length of 4, batch of 1 is assumed.\n * @param dy The derivative of the output, of rank 5 or rank 4 of shape\n * `[batch, outDepth, outHeight, outWidth, in_channels]`.\n * If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 5, of shape\n * `[filterDepth, filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideDepth, strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm used:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n */\nfunction conv3DBackpropInput_(xShape, dy, filter, strides, pad) {\n util.assert(xShape.length === dy.rank, () => `Length of inShape ` +\n `(${xShape.length}) and rank of dy (${dy.rank}) must match`);\n let xShape5D = xShape;\n let dy5D = dy;\n let reshapedTo5D = false;\n if (dy.rank === 4) {\n reshapedTo5D = true;\n dy5D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2], dy.shape[3]]);\n xShape5D = [1, xShape[0], xShape[1], xShape[2], xShape[3]];\n }\n const inDepth = xShape5D[4];\n const outDepth = dy5D.shape[4];\n util.assert(xShape5D.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ` +\n `${xShape5D.length}.`);\n util.assert(dy5D.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got ` +\n `rank ${dy5D.rank}`);\n util.assert(filter.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got ` +\n `rank ${filter.rank}`);\n util.assert(inDepth === filter.shape[3], () => `Error in conv3dDerInput: depth of input (${inDepth}) must ` +\n `match input depth for filter ${filter.shape[3]}.`);\n util.assert(outDepth === filter.shape[4], () => `Error in conv3dDerInput: depth of output (${outDepth}) must ` +\n `match output depth for filter ${filter.shape[4]}.`);\n const inputs = { dy: dy5D, filter };\n const attrs = { pad, strides, inputShape: xShape5D };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Conv3DBackpropInputV2, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const conv3DBackpropInput = /* @__PURE__ */ op({ conv3DBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkX2JhY2twcm9wX2lucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29udjNkX2JhY2twcm9wX2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLHFCQUFxQixFQUEwRCxNQUFNLGlCQUFpQixDQUFDO0FBSS9HLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLG9CQUFvQixDQUN6QixNQUU2QyxFQUM3QyxFQUFLLEVBQUUsTUFBZ0IsRUFBRSxPQUF3QyxFQUNqRSxHQUFtQjtJQUNyQixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksRUFDekIsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RCLElBQUksTUFBTSxDQUFDLE1BQU0scUJBQXFCLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0lBRXJFLElBQUksUUFBUSxHQUFHLE1BQWtELENBQUM7SUFDbEUsSUFBSSxJQUFJLEdBQUcsRUFBYyxDQUFDO0lBQzFCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQ0Qsb0VBQW9FO1FBQ3BFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZixHQUFHLEVBQUUsQ0FBQyxzREFBc0Q7UUFDeEQsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNqQixHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMzQixHQUFHLEVBQUUsQ0FBQyw0Q0FBNEMsT0FBTyxTQUFTO1FBQzlELGdDQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQyw2Q0FBNkMsUUFBUSxTQUFTO1FBQ2hFLGlDQUFpQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU3RCxNQUFNLE1BQU0sR0FBZ0MsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRS9ELE1BQU0sS0FBSyxHQUNzQixFQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRXRFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLHFCQUFxQixFQUFFLE1BQW1DLEVBQzFELEtBQWdDLENBQU0sQ0FBQztJQUV2RCxJQUFJLFlBQVksRUFBRTtRQUNoQixPQUFPLE9BQU8sQ0FDSCxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7S0FDUDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxvQkFBb0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjNEQmFja3Byb3BJbnB1dFYyLCBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycywgQ29udjNEQmFja3Byb3BJbnB1dFYySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRlcml2YXRpdmUgb2YgdGhlIGlucHV0IG9mIGEgM0QgY29udm9sdXRpb24uXG4gKlxuICogQHBhcmFtIHhTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGlucHV0OiBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLFxuICogaW5fY2hhbm5lbHNdLiBJZiBsZW5ndGggb2YgNCwgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIGR5IFRoZSBkZXJpdmF0aXZlIG9mIHRoZSBvdXRwdXQsIG9mIHJhbmsgNSBvciByYW5rIDQgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgb3V0RGVwdGgsIG91dEhlaWdodCwgb3V0V2lkdGgsIGluX2NoYW5uZWxzXWAuXG4gKiBJZiByYW5rIDQsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciwgcmFuayA1LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVyRGVwdGgsIGZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlRGVwdGgsIHN0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXWAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtIHVzZWQ6XG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqL1xuZnVuY3Rpb24gY29udjNEQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjREfFRlbnNvcjVEPihcbiAgICB4U2hhcGU6XG4gICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsXG4gICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGR5OiBULCBmaWx0ZXI6IFRlbnNvcjVELCBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZScpOiBUIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGUubGVuZ3RoID09PSBkeS5yYW5rLFxuICAgICAgKCkgPT4gYExlbmd0aCBvZiBpblNoYXBlIGAgK1xuICAgICAgICAgIGAoJHt4U2hhcGUubGVuZ3RofSkgYW5kIHJhbmsgb2YgZHkgKCR7ZHkucmFua30pIG11c3QgbWF0Y2hgKTtcblxuICBsZXQgeFNoYXBlNUQgPSB4U2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgbGV0IGR5NUQgPSBkeSBhcyBUZW5zb3I1RDtcbiAgbGV0IHJlc2hhcGVkVG81RCA9IGZhbHNlO1xuICBpZiAoZHkucmFuayA9PT0gNCkge1xuICAgIHJlc2hhcGVkVG81RCA9IHRydWU7XG4gICAgZHk1RCA9IHJlc2hhcGUoZHksIFsxLCBkeS5zaGFwZVswXSwgZHkuc2hhcGVbMV0sIGR5LnNoYXBlWzJdLCBkeS5zaGFwZVszXV0pO1xuICAgIHhTaGFwZTVEID0gWzEsIHhTaGFwZVswXSwgeFNoYXBlWzFdLCB4U2hhcGVbMl0sIHhTaGFwZVszXV07XG4gIH1cblxuICBjb25zdCBpbkRlcHRoID0geFNoYXBlNURbNF07XG4gIGNvbnN0IG91dERlcHRoID0gZHk1RC5zaGFwZVs0XTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4U2hhcGU1RC5sZW5ndGggPT09IDUsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogaW5TaGFwZSBtdXN0IGJlIGxlbmd0aCA1LCBidXQgZ290IGxlbmd0aCBgICtcbiAgICAgICAgICBgJHt4U2hhcGU1RC5sZW5ndGh9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NUQucmFuayA9PT0gNSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogZHkgbXVzdCBiZSByYW5rIDUsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHtkeTVELnJhbmt9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZmlsdGVyLnJhbmsgPT09IDUsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkRGVySW5wdXQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke2ZpbHRlci5yYW5rfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGluRGVwdGggPT09IGZpbHRlci5zaGFwZVszXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252M2REZXJJbnB1dDogZGVwdGggb2YgaW5wdXQgKCR7aW5EZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIGlucHV0IGRlcHRoIGZvciBmaWx0ZXIgJHtmaWx0ZXIuc2hhcGVbM119LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIG91dERlcHRoID09PSBmaWx0ZXIuc2hhcGVbNF0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjNkRGVySW5wdXQ6IGRlcHRoIG9mIG91dHB1dCAoJHtvdXREZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIG91dHB1dCBkZXB0aCBmb3IgZmlsdGVyICR7ZmlsdGVyLnNoYXBlWzRdfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cyA9IHtkeTogZHk1RCwgZmlsdGVyfTtcblxuICBjb25zdCBhdHRyczpcbiAgICAgIENvbnYzREJhY2twcm9wSW5wdXRWMkF0dHJzID0ge3BhZCwgc3RyaWRlcywgaW5wdXRTaGFwZTogeFNoYXBlNUR9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIENvbnYzREJhY2twcm9wSW5wdXRWMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzVEKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUoXG4gICAgICAgICAgICAgICByZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdLCByZXMuc2hhcGVbNF1dKSBhc1xuICAgICAgICBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBjb252M0RCYWNrcHJvcElucHV0ID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252M0RCYWNrcHJvcElucHV0X30pO1xuIl19","import { convertToTensor } from '../tensor_util_env';\nimport { conv3DBackpropInput } from './conv3d_backprop_input';\nimport { op } from './operation';\n/**\n * Computes the transposed 3D convolution of a volume, also known as a\n * deconvolution.\n *\n * @param x The input image, of rank 5 or rank 4, of shape\n * `[batch, depth, height, width, inDepth]`. If rank 4, batch of 1 is assumed.\n * @param filter The filter, rank 4, of shape\n * `[depth, filterHeight, filterWidth, outDepth, inDepth]`.\n * `inDepth` must match `inDepth` in `x`.\n * @param outputShape Output shape, of rank 5 or rank 4:\n * `[batch, depth, height, width, outDepth]`. If rank 3, batch of 1 is\n * assumed.\n * @param strides The strides of the original convolution:\n * `[strideDepth, strideHeight, strideWidth]`.\n * @param pad The type of padding algorithm used in the non-transpose version\n * of the op.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction conv3dTranspose_(x, filter, outputShape, strides, pad) {\n const $x = convertToTensor(x, 'x', 'conv3dTranspose');\n const $filter = convertToTensor(filter, 'filter', 'conv3dTranspose');\n return conv3DBackpropInput(outputShape, $x, $filter, strides, pad);\n}\nexport const conv3dTranspose = /* @__PURE__ */ op({ conv3dTranspose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjNkX3RyYW5zcG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYzZF90cmFuc3Bvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFTLGdCQUFnQixDQUNyQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsV0FFNkMsRUFDN0MsT0FBd0MsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFckUsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3I0RCwgVGVuc29yNUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2NvbnYzREJhY2twcm9wSW5wdXR9IGZyb20gJy4vY29udjNkX2JhY2twcm9wX2lucHV0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdHJhbnNwb3NlZCAzRCBjb252b2x1dGlvbiBvZiBhIHZvbHVtZSwgYWxzbyBrbm93biBhcyBhXG4gKiBkZWNvbnZvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbWFnZSwgb2YgcmFuayA1IG9yIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGluRGVwdGhdYC4gSWYgcmFuayA0LCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2RlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBvdXREZXB0aCwgaW5EZXB0aF1gLlxuICogICAgIGBpbkRlcHRoYCBtdXN0IG1hdGNoIGBpbkRlcHRoYCBpbiBgeGAuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgT3V0cHV0IHNoYXBlLCBvZiByYW5rIDUgb3IgcmFuayA0OlxuICogICAgIGBbYmF0Y2gsIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBvdXREZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXNcbiAqICAgIGFzc3VtZWQuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgb3JpZ2luYWwgY29udm9sdXRpb246XG4gKiAgICAgYFtzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLlxuICogQHBhcmFtIHBhZCAgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0gdXNlZCBpbiB0aGUgbm9uLXRyYW5zcG9zZSB2ZXJzaW9uXG4gKiAgICBvZiB0aGUgb3AuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBjb252M2RUcmFuc3Bvc2VfPFQgZXh0ZW5kcyBUZW5zb3I0RHxUZW5zb3I1RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjVEfFRlbnNvckxpa2UsXG4gICAgb3V0cHV0U2hhcGU6XG4gICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsXG4gICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxudW1iZXIsIHBhZDogJ3ZhbGlkJ3wnc2FtZScpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnY29udjNkVHJhbnNwb3NlJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYzZFRyYW5zcG9zZScpO1xuXG4gIHJldHVybiBjb252M0RCYWNrcHJvcElucHV0KG91dHB1dFNoYXBlLCAkeCwgJGZpbHRlciwgc3RyaWRlcywgcGFkKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzZFRyYW5zcG9zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29udjNkVHJhbnNwb3NlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cos } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes cos of the input `tf.Tensor` element-wise: `cos(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.cos().print(); // or tf.cos(x)\n * ```\n * @param x The input tensor. Must be float32 type.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction cos_(x) {\n const $x = convertToTensor(x, 'x', 'cos', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Cos, inputs);\n}\nexport const cos = /* @__PURE__ */ op({ cos_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY29zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtDb3MsIENvc0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBjb3Mgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGNvcyh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCBNYXRoLlBJIC8gMiwgTWF0aC5QSSAqIDMgLyA0XSk7XG4gKlxuICogeC5jb3MoKS5wcmludCgpOyAgLy8gb3IgdGYuY29zKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgZmxvYXQzMiB0eXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBjb3NfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb3MnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogQ29zSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChDb3MsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBjb3MgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Nvc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cosh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic cos of the input `tf.Tensor` element-wise: `cosh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.cosh().print(); // or tf.cosh(x)\n * ```\n * @param x The input tensor. Must be float32 type.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction cosh_(x) {\n const $x = convertToTensor(x, 'x', 'cosh', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Cosh, inputs);\n}\nexport const cosh = /* @__PURE__ */ op({ cosh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Nvc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0Nvc2gsIENvc2hJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgaHlwZXJib2xpYyBjb3Mgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYGNvc2goeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5jb3NoKCkucHJpbnQoKTsgIC8vIG9yIHRmLmNvc2goeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci4gTXVzdCBiZSBmbG9hdDMyIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGNvc2hfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdjb3NoJywgJ2Zsb2F0MzInKTtcbiAgY29uc3QgaW5wdXRzOiBDb3NoSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChDb3NoLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgY29zaCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29zaF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cumprod } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the cumulative product of a `tf.Tensor` along `axis`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4]);\n * x.cumprod().print();\n * ```\n * ```js\n * const x = tf.tensor([[1, 2], [3, 4]]);\n * x.cumprod().print();\n * ```\n *\n * @param x The input tensor to cumulatively multiply.\n * @param axis The axis along which to multiply. Optional. Defaults to 0.\n * @param exclusive Whether to perform exclusive cumulative product. Optional.\n * Defaults to false. If set to true then the product of each tensor entry\n * does not include its own value, but only the values previous to it\n * along the specified axis.\n * @param reverse Whether to multiply in the opposite direction. Optional.\n * Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Scan'}\n */\nfunction cumprod_(x, axis = 0, exclusive = false, reverse = false) {\n const $x = convertToTensor(x, 'x', 'cumprod');\n const inputs = { x: $x };\n const attrs = { axis, exclusive, reverse };\n return ENGINE.runKernel(Cumprod, inputs, attrs);\n}\nexport const cumprod = /* @__PURE__ */ op({ cumprod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VtcHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2N1bXByb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBSXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsU0FBUyxRQUFRLENBQ2YsQ0FBc0IsRUFDdEIsSUFBSSxHQUFHLENBQUMsRUFDUixTQUFTLEdBQUcsS0FBSyxFQUNqQixPQUFPLEdBQUcsS0FBSztJQUVmLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxNQUFNLEtBQUssR0FBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXpELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDckIsT0FBTyxFQUNQLE1BQW1DLEVBQ25DLEtBQWdDLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEVOR0lORSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBDdW1wcm9kLCBDdW1wcm9kQXR0cnMsIEN1bXByb2RJbnB1dHMgfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHsgTmFtZWRBdHRyTWFwIH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7IFRlbnNvciB9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgeyBOYW1lZFRlbnNvck1hcCB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgeyBjb252ZXJ0VG9UZW5zb3IgfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHsgVGVuc29yTGlrZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgb3AgfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGN1bXVsYXRpdmUgcHJvZHVjdCBvZiBhIGB0Zi5UZW5zb3JgIGFsb25nIGBheGlzYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcihbMSwgMiwgMywgNF0pO1xuICogeC5jdW1wcm9kKCkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiB4LmN1bXByb2QoKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBjdW11bGF0aXZlbHkgbXVsdGlwbHkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBhbG9uZyB3aGljaCB0byBtdWx0aXBseS4gT3B0aW9uYWwuIERlZmF1bHRzIHRvIDAuXG4gKiBAcGFyYW0gZXhjbHVzaXZlIFdoZXRoZXIgdG8gcGVyZm9ybSBleGNsdXNpdmUgY3VtdWxhdGl2ZSBwcm9kdWN0LiBPcHRpb25hbC5cbiAqICAgICBEZWZhdWx0cyB0byBmYWxzZS4gSWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgcHJvZHVjdCBvZiBlYWNoIHRlbnNvciBlbnRyeVxuICogICAgIGRvZXMgbm90IGluY2x1ZGUgaXRzIG93biB2YWx1ZSwgYnV0IG9ubHkgdGhlIHZhbHVlcyBwcmV2aW91cyB0byBpdFxuICogICAgIGFsb25nIHRoZSBzcGVjaWZpZWQgYXhpcy5cbiAqIEBwYXJhbSByZXZlcnNlIFdoZXRoZXIgdG8gbXVsdGlwbHkgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gT3B0aW9uYWwuXG4gKiAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2Nhbid9XG4gKi9cbmZ1bmN0aW9uIGN1bXByb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICB4OiBUZW5zb3IgfCBUZW5zb3JMaWtlLFxuICBheGlzID0gMCxcbiAgZXhjbHVzaXZlID0gZmFsc2UsXG4gIHJldmVyc2UgPSBmYWxzZVxuKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2N1bXByb2QnKTtcblxuICBjb25zdCBpbnB1dHM6IEN1bXByb2RJbnB1dHMgPSB7IHg6ICR4IH07XG4gIGNvbnN0IGF0dHJzOiBDdW1wcm9kQXR0cnMgPSB7IGF4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZSB9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgIEN1bXByb2QsXG4gICAgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXBcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGN1bXByb2QgPSAvKiBAX19QVVJFX18gKi8gb3AoeyBjdW1wcm9kXyB9KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cumsum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the cumulative sum of a `tf.Tensor` along `axis`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4]);\n * x.cumsum().print();\n * ```\n * ```js\n * const x = tf.tensor([[1, 2], [3, 4]]);\n * x.cumsum().print();\n * ```\n *\n * @param x The input tensor to be summed.\n * @param axis The axis along which to sum. Optional. Defaults to 0.\n * @param exclusive Whether to perform exclusive cumulative sum. Optional.\n * Defaults to false. If set to true then the sum of each tensor entry\n * does not include its own value, but only the values previous to it\n * along the specified axis.\n * @param reverse Whether to sum in the opposite direction. Optional.\n * Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Scan'}\n */\nfunction cumsum_(x, axis = 0, exclusive = false, reverse = false) {\n const $x = convertToTensor(x, 'x', 'cumsum');\n const inputs = { x: $x };\n const attrs = { axis, exclusive, reverse };\n return ENGINE.runKernel(Cumsum, inputs, attrs);\n}\nexport const cumsum = /* @__PURE__ */ op({ cumsum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vtc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvY3Vtc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQW9CLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLO0lBQ3BFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFpQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBZ0IsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDO0lBRXRELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q3Vtc3VtLCBDdW1zdW1BdHRycywgQ3Vtc3VtSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGN1bXVsYXRpdmUgc3VtIG9mIGEgYHRmLlRlbnNvcmAgYWxvbmcgYGF4aXNgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyLCAzLCA0XSk7XG4gKiB4LmN1bXN1bSgpLnByaW50KCk7XG4gKiBgYGBcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFtbMSwgMl0sIFszLCA0XV0pO1xuICogeC5jdW1zdW0oKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBiZSBzdW1tZWQuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBhbG9uZyB3aGljaCB0byBzdW0uIE9wdGlvbmFsLiBEZWZhdWx0cyB0byAwLlxuICogQHBhcmFtIGV4Y2x1c2l2ZSBXaGV0aGVyIHRvIHBlcmZvcm0gZXhjbHVzaXZlIGN1bXVsYXRpdmUgc3VtLiBPcHRpb25hbC5cbiAqICAgICBEZWZhdWx0cyB0byBmYWxzZS4gSWYgc2V0IHRvIHRydWUgdGhlbiB0aGUgc3VtIG9mIGVhY2ggdGVuc29yIGVudHJ5XG4gKiAgICAgZG9lcyBub3QgaW5jbHVkZSBpdHMgb3duIHZhbHVlLCBidXQgb25seSB0aGUgdmFsdWVzIHByZXZpb3VzIHRvIGl0XG4gKiAgICAgYWxvbmcgdGhlIHNwZWNpZmllZCBheGlzLlxuICogQHBhcmFtIHJldmVyc2UgV2hldGhlciB0byBzdW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gT3B0aW9uYWwuXG4gKiAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2Nhbid9XG4gKi9cbmZ1bmN0aW9uIGN1bXN1bV88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwLCBleGNsdXNpdmUgPSBmYWxzZSwgcmV2ZXJzZSA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2N1bXN1bScpO1xuXG4gIGNvbnN0IGlucHV0czogQ3Vtc3VtSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IEN1bXN1bUF0dHJzID0ge2F4aXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZX07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBDdW1zdW0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgY3Vtc3VtID0gLyogQF9fUFVSRV9fICovIG9wKHtjdW1zdW1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DenseBincount } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Outputs a vector with length `size` and the same dtype as `weights`.\n *\n * If `weights` are empty, then index `i` stores the number of times the value\n * `i` is counted in `x`. If `weights` are non-empty, then index `i` stores the\n * sum of the value in `weights` at each index where the corresponding value in\n * `x` is `i`.\n *\n * Values in `x` outside of the range [0, size) are ignored.\n *\n * @param x The input int tensor, rank 1 or rank 2.\n * @param weights The weights tensor, must have the same shape as x, or a\n * length-0 Tensor, in which case it acts as all weights equal to 1.\n * @param size Non-negative integer.\n * @param binaryOutput Optional. Whether the kernel should count the appearance\n * or number of occurrences. Defaults to False.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction denseBincount_(x, weights, size, binaryOutput = false) {\n const $x = convertToTensor(x, 'x', 'denseBincount');\n const $weights = convertToTensor(weights, 'weights', 'denseBincount');\n util.assert($x.dtype === 'int32', () => `Error in denseBincount: input ` +\n `dtype must be int32, but got ${$x.dtype}`);\n util.assert($x.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got ` +\n `rank ${$x.rank}.`);\n util.assert(size >= 0, () => `size must be non-negative, but got ${size}.`);\n util.assert($weights.size === $x.size || $weights.size === 0, () => `Error in denseBincount: weights must have the same shape as x or ` +\n `0-length, but got x shape: ${$x.shape}, weights shape: ` +\n `${$weights.shape}.`);\n const inputs = { x: $x, weights: $weights };\n const attrs = { size, binaryOutput };\n return ENGINE.runKernel(DenseBincount, inputs, attrs);\n}\nexport const denseBincount = /* @__PURE__ */ op({ denseBincount_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2VfYmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZW5zZV9iaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxhQUFhLEVBQTBDLE1BQU0saUJBQWlCLENBQUM7QUFJdkYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsY0FBYyxDQUNuQixDQUFlLEVBQUUsT0FBcUIsRUFBRSxJQUFZLEVBQ3BELFlBQVksR0FBRyxLQUFLO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQ3BCLEdBQUcsRUFBRSxDQUFDLGdDQUFnQztRQUNsQyxnQ0FBZ0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFDWixHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsc0NBQXNDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2hELEdBQUcsRUFBRSxDQUNELG1FQUFtRTtRQUNuRSw4QkFBOEIsRUFBRSxDQUFDLEtBQUssbUJBQW1CO1FBQ3pELEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQXdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQXVCLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDO0lBRXZELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsYUFBYSxFQUFFLE1BQW1DLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVuc2VCaW5jb3VudCwgRGVuc2VCaW5jb3VudEF0dHJzLCBEZW5zZUJpbmNvdW50SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIE91dHB1dHMgYSB2ZWN0b3Igd2l0aCBsZW5ndGggYHNpemVgIGFuZCB0aGUgc2FtZSBkdHlwZSBhcyBgd2VpZ2h0c2AuXG4gKlxuICogSWYgYHdlaWdodHNgIGFyZSBlbXB0eSwgdGhlbiBpbmRleCBgaWAgc3RvcmVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHZhbHVlXG4gKiBgaWAgaXMgY291bnRlZCBpbiBgeGAuIElmIGB3ZWlnaHRzYCBhcmUgbm9uLWVtcHR5LCB0aGVuIGluZGV4IGBpYCBzdG9yZXMgdGhlXG4gKiBzdW0gb2YgdGhlIHZhbHVlIGluIGB3ZWlnaHRzYCBhdCBlYWNoIGluZGV4IHdoZXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluXG4gKiBgeGAgaXMgYGlgLlxuICpcbiAqIFZhbHVlcyBpbiBgeGAgb3V0c2lkZSBvZiB0aGUgcmFuZ2UgWzAsIHNpemUpIGFyZSBpZ25vcmVkLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBpbnQgdGVuc29yLCByYW5rIDEgb3IgcmFuayAyLlxuICogQHBhcmFtIHdlaWdodHMgVGhlIHdlaWdodHMgdGVuc29yLCBtdXN0IGhhdmUgdGhlIHNhbWUgc2hhcGUgYXMgeCwgb3IgYVxuICogICAgIGxlbmd0aC0wIFRlbnNvciwgaW4gd2hpY2ggY2FzZSBpdCBhY3RzIGFzIGFsbCB3ZWlnaHRzIGVxdWFsIHRvIDEuXG4gKiBAcGFyYW0gc2l6ZSBOb24tbmVnYXRpdmUgaW50ZWdlci5cbiAqIEBwYXJhbSBiaW5hcnlPdXRwdXQgT3B0aW9uYWwuIFdoZXRoZXIgdGhlIGtlcm5lbCBzaG91bGQgY291bnQgdGhlIGFwcGVhcmFuY2VcbiAqICAgICBvciBudW1iZXIgb2Ygb2NjdXJyZW5jZXMuIERlZmF1bHRzIHRvIEZhbHNlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGRlbnNlQmluY291bnRfPFQgZXh0ZW5kcyBUZW5zb3IxRHxUZW5zb3IyRD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzOiBUfFRlbnNvckxpa2UsIHNpemU6IG51bWJlcixcbiAgICBiaW5hcnlPdXRwdXQgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZW5zZUJpbmNvdW50Jyk7XG4gIGNvbnN0ICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2RlbnNlQmluY291bnQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LmR0eXBlID09PSAnaW50MzInLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRlbnNlQmluY291bnQ6IGlucHV0IGAgK1xuICAgICAgICAgIGBkdHlwZSBtdXN0IGJlIGludDMyLCBidXQgZ290ICR7JHguZHR5cGV9YCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA8PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRlbnNlQmluY291bnQ6IGlucHV0IG11c3QgYmUgYXQgbW9zdCByYW5rIDIsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoc2l6ZSA+PSAwLCAoKSA9PiBgc2l6ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgYnV0IGdvdCAke3NpemV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR3ZWlnaHRzLnNpemUgPT09ICR4LnNpemUgfHwgJHdlaWdodHMuc2l6ZSA9PT0gMCxcbiAgICAgICgpID0+XG4gICAgICAgICAgYEVycm9yIGluIGRlbnNlQmluY291bnQ6IHdlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFzIHggb3IgYCArXG4gICAgICAgICAgYDAtbGVuZ3RoLCBidXQgZ290IHggc2hhcGU6ICR7JHguc2hhcGV9LCB3ZWlnaHRzIHNoYXBlOiBgICtcbiAgICAgICAgICBgJHskd2VpZ2h0cy5zaGFwZX0uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBEZW5zZUJpbmNvdW50SW5wdXRzID0ge3g6ICR4LCB3ZWlnaHRzOiAkd2VpZ2h0c307XG4gIGNvbnN0IGF0dHJzOiBEZW5zZUJpbmNvdW50QXR0cnMgPSB7c2l6ZSwgYmluYXJ5T3V0cHV0fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIERlbnNlQmluY291bnQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZGVuc2VCaW5jb3VudCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVuc2VCaW5jb3VudF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthToSpace } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Rearranges data from depth into blocks of spatial data. More specifically,\n * this op outputs a copy of the input tensor where values from the `depth`\n * dimension are moved in spatial blocks to the `height` and `width` dimensions.\n * The attr `blockSize` indicates the input block size and how the data is\n * moved.\n *\n * - Chunks of data of size `blockSize * blockSize` from depth are rearranged\n * into non-overlapping blocks of size `blockSize x blockSize`\n *\n * - The width the output tensor is `inputWidth * blockSize`, whereas the\n * height is `inputHeight * blockSize`\n *\n * - The Y, X coordinates within each block of the output image are determined\n * by the high order component of the input channel index\n *\n * - The depth of the input tensor must be divisible by `blockSize *\n * blockSize`\n *\n * The `dataFormat` attr specifies the layout of the input and output tensors\n * with the following options: \"NHWC\": [ `batch, height, width, channels` ]\n * \"NCHW\": [ `batch, channels, height, width` ]\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 1, 1, 4]);\n * const blockSize = 2;\n * const dataFormat = \"NHWC\";\n *\n * tf.depthToSpace(x, blockSize, dataFormat).print();\n * ```\n *\n * @param x The input tensor of rank 4\n * @param blockSIze An `int` that is `>= 2`. The size of the spatial block\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to \"NHWC\"\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction depthToSpace_(x, blockSize, dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'depthToSpace', 'float32');\n const inputHeight = (dataFormat === 'NHWC') ? $x.shape[1] : $x.shape[2];\n const inputWidth = (dataFormat === 'NHWC') ? $x.shape[2] : $x.shape[3];\n const inputDepth = (dataFormat === 'NHWC') ? $x.shape[3] : $x.shape[1];\n util.assert(blockSize > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${blockSize}`);\n util.assert(inputHeight * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying\n ${inputHeight} and ${blockSize} for depthToSpace with input shape\n ${$x.shape}`);\n util.assert(inputWidth * blockSize >= 0, () => `Negative dimension size caused by overflow when multiplying\n ${inputWidth} and ${blockSize} for depthToSpace with input shape\n ${$x.shape}`);\n util.assert((inputDepth % (blockSize * blockSize) === 0), () => `Dimension size must be evenly divisible by ${blockSize * blockSize} but is ${inputDepth} for depthToSpace with input shape ${$x.shape}`);\n const inputs = { x: $x };\n const attrs = { blockSize, dataFormat };\n return ENGINE.runKernel(DepthToSpace, inputs, attrs);\n}\nexport const depthToSpace = /* @__PURE__ */ op({ depthToSpace_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGhfdG9fc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZXB0aF90b19zcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxZQUFZLEVBQXdDLE1BQU0saUJBQWlCLENBQUM7QUFJcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUF3QixFQUFFLFNBQWlCLEVBQzNDLGFBQTRCLE1BQU07SUFDcEMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBYSxDQUFDO0lBRTFFLE1BQU0sV0FBVyxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZFLElBQUksQ0FBQyxNQUFNLENBQ1AsU0FBUyxHQUFHLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxzREFBc0QsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUU3RSxJQUFJLENBQUMsTUFBTSxDQUNQLFdBQVcsR0FBRyxTQUFTLElBQUksQ0FBQyxFQUM1QixHQUFHLEVBQUUsQ0FBQztNQUNOLFdBQVcsUUFBUSxTQUFTO01BQzVCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWhCLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQzNCLEdBQUcsRUFBRSxDQUFDO01BQ04sVUFBVSxRQUFRLFNBQVM7VUFDdkIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLFVBQVUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDNUMsR0FBRyxFQUFFLENBQUMsOENBQ0YsU0FBUyxHQUFHLFNBQVMsV0FDckIsVUFBVSxzQ0FBc0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFcEUsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFzQixFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztJQUV6RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0RlcHRoVG9TcGFjZSwgRGVwdGhUb1NwYWNlQXR0cnMsIERlcHRoVG9TcGFjZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTREfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmVhcnJhbmdlcyBkYXRhIGZyb20gZGVwdGggaW50byBibG9ja3Mgb2Ygc3BhdGlhbCBkYXRhLiBNb3JlIHNwZWNpZmljYWxseSxcbiAqIHRoaXMgb3Agb3V0cHV0cyBhIGNvcHkgb2YgdGhlIGlucHV0IHRlbnNvciB3aGVyZSB2YWx1ZXMgZnJvbSB0aGUgYGRlcHRoYFxuICogZGltZW5zaW9uIGFyZSBtb3ZlZCBpbiBzcGF0aWFsIGJsb2NrcyB0byB0aGUgYGhlaWdodGAgYW5kIGB3aWR0aGAgZGltZW5zaW9ucy5cbiAqIFRoZSBhdHRyIGBibG9ja1NpemVgIGluZGljYXRlcyB0aGUgaW5wdXQgYmxvY2sgc2l6ZSBhbmQgaG93IHRoZSBkYXRhIGlzXG4gKiBtb3ZlZC5cbiAqXG4gKiAgLSBDaHVua3Mgb2YgZGF0YSBvZiBzaXplIGBibG9ja1NpemUgKiBibG9ja1NpemVgIGZyb20gZGVwdGggYXJlIHJlYXJyYW5nZWRcbiAqIGludG8gbm9uLW92ZXJsYXBwaW5nIGJsb2NrcyBvZiBzaXplIGBibG9ja1NpemUgeCBibG9ja1NpemVgXG4gKlxuICogIC0gVGhlIHdpZHRoIHRoZSBvdXRwdXQgdGVuc29yIGlzIGBpbnB1dFdpZHRoICogYmxvY2tTaXplYCwgd2hlcmVhcyB0aGVcbiAqIGhlaWdodCBpcyBgaW5wdXRIZWlnaHQgKiBibG9ja1NpemVgXG4gKlxuICogIC0gVGhlIFksIFggY29vcmRpbmF0ZXMgd2l0aGluIGVhY2ggYmxvY2sgb2YgdGhlIG91dHB1dCBpbWFnZSBhcmUgZGV0ZXJtaW5lZFxuICogYnkgdGhlIGhpZ2ggb3JkZXIgY29tcG9uZW50IG9mIHRoZSBpbnB1dCBjaGFubmVsIGluZGV4XG4gKlxuICogIC0gVGhlIGRlcHRoIG9mIHRoZSBpbnB1dCB0ZW5zb3IgbXVzdCBiZSBkaXZpc2libGUgYnkgYGJsb2NrU2l6ZSAqXG4gKiBibG9ja1NpemVgXG4gKlxuICogVGhlIGBkYXRhRm9ybWF0YCBhdHRyIHNwZWNpZmllcyB0aGUgbGF5b3V0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHRlbnNvcnNcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOiBcIk5IV0NcIjogWyBgYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzYCBdXG4gKiBcIk5DSFdcIjogWyBgYmF0Y2gsIGNoYW5uZWxzLCBoZWlnaHQsIHdpZHRoYCBdXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFsxLCAxLCAxLCA0XSk7XG4gKiBjb25zdCBibG9ja1NpemUgPSAyO1xuICogY29uc3QgZGF0YUZvcm1hdCA9IFwiTkhXQ1wiO1xuICpcbiAqIHRmLmRlcHRoVG9TcGFjZSh4LCBibG9ja1NpemUsIGRhdGFGb3JtYXQpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIG9mIHJhbmsgNFxuICogQHBhcmFtIGJsb2NrU0l6ZSAgQW4gYGludGAgdGhhdCBpcyBgPj0gMmAuIFRoZSBzaXplIG9mIHRoZSBzcGF0aWFsIGJsb2NrXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOSFdDXCIsIFwiTkNIV1wiLiBEZWZhdWx0cyB0byBcIk5IV0NcIlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1RyYW5zZm9ybWF0aW9ucyd9XG4gKi9cbmZ1bmN0aW9uIGRlcHRoVG9TcGFjZV8oXG4gICAgeDogVGVuc29yNER8VGVuc29yTGlrZTRELCBibG9ja1NpemU6IG51bWJlcixcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnKTogVGVuc29yNEQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZXB0aFRvU3BhY2UnLCAnZmxvYXQzMicpIGFzIFRlbnNvcjREO1xuXG4gIGNvbnN0IGlucHV0SGVpZ2h0ID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVsxXSA6ICR4LnNoYXBlWzJdO1xuICBjb25zdCBpbnB1dFdpZHRoID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVsyXSA6ICR4LnNoYXBlWzNdO1xuICBjb25zdCBpbnB1dERlcHRoID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyAkeC5zaGFwZVszXSA6ICR4LnNoYXBlWzFdO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmxvY2tTaXplID4gMSxcbiAgICAgICgpID0+IGBibG9ja1NpemUgc2hvdWxkIGJlID4gMSBmb3IgZGVwdGhUb1NwYWNlLCBidXQgd2FzOiAke2Jsb2NrU2l6ZX1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGlucHV0SGVpZ2h0ICogYmxvY2tTaXplID49IDAsXG4gICAgICAoKSA9PiBgTmVnYXRpdmUgZGltZW5zaW9uIHNpemUgY2F1c2VkIGJ5IG92ZXJmbG93IHdoZW4gbXVsdGlwbHlpbmdcbiAgICAke2lucHV0SGVpZ2h0fSBhbmQgJHtibG9ja1NpemV9ICBmb3IgZGVwdGhUb1NwYWNlIHdpdGggaW5wdXQgc2hhcGVcbiAgICAkeyR4LnNoYXBlfWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5wdXRXaWR0aCAqIGJsb2NrU2l6ZSA+PSAwLFxuICAgICAgKCkgPT4gYE5lZ2F0aXZlIGRpbWVuc2lvbiBzaXplIGNhdXNlZCBieSBvdmVyZmxvdyB3aGVuIG11bHRpcGx5aW5nXG4gICAgJHtpbnB1dFdpZHRofSBhbmQgJHtibG9ja1NpemV9IGZvciBkZXB0aFRvU3BhY2Ugd2l0aCBpbnB1dCBzaGFwZVxuICAgICAgICAkeyR4LnNoYXBlfWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgKGlucHV0RGVwdGggJSAoYmxvY2tTaXplICogYmxvY2tTaXplKSA9PT0gMCksXG4gICAgICAoKSA9PiBgRGltZW5zaW9uIHNpemUgbXVzdCBiZSBldmVubHkgZGl2aXNpYmxlIGJ5ICR7XG4gICAgICAgICAgYmxvY2tTaXplICogYmxvY2tTaXplfSBidXQgaXMgJHtcbiAgICAgICAgICBpbnB1dERlcHRofSBmb3IgZGVwdGhUb1NwYWNlIHdpdGggaW5wdXQgc2hhcGUgJHskeC5zaGFwZX1gKTtcblxuICBjb25zdCBpbnB1dHM6IERlcHRoVG9TcGFjZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBEZXB0aFRvU3BhY2VBdHRycyA9IHtibG9ja1NpemUsIGRhdGFGb3JtYXR9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgRGVwdGhUb1NwYWNlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRoVG9TcGFjZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVwdGhUb1NwYWNlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNative } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Depthwise 2D convolution.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction depthwiseConv2d_(x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'depthwiseConv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n const inChannels = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert(inChannels === $filter.shape[2], () => `Error in depthwiseConv2d: number of input channels ` +\n `(${inChannels}) must match the inChannels dimension in ` +\n `filter ${$filter.shape[2]}.`);\n conv_util.checkPadOnDimRoundingMode('depthwiseConv2d', pad, dimRoundingMode);\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dataFormat, dilations, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(DepthwiseConv2dNative, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const depthwiseConv2d = /* @__PURE__ */ op({ depthwiseConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RlcHRod2lzZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMscUJBQXFCLEVBQTBELE1BQU0saUJBQWlCLENBQUM7QUFJL0csT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxTQUFTLGdCQUFnQixDQUNyQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsT0FBZ0MsRUFDaEMsR0FBb0QsRUFDcEQsYUFBNEIsTUFBTSxFQUNsQyxZQUFxQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM0MsZUFBd0M7SUFDMUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFcEUsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9EO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZCxHQUFHLEVBQUUsQ0FBQywwREFBMEQ7UUFDNUQsUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNsQixHQUFHLEVBQUUsQ0FBQyxnRUFBZ0U7UUFDbEUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixNQUFNLFVBQVUsR0FBRyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQy9CLEdBQUcsRUFBRSxDQUFDLHFEQUFxRDtRQUN2RCxJQUFJLFVBQVUsMkNBQTJDO1FBQ3pELFVBQVUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM3RSxNQUFNLE1BQU0sR0FBZ0MsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUN0RSxNQUFNLEtBQUssR0FDUCxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsQ0FBQztJQUUzRCwwREFBMEQ7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixxQkFBcUIsRUFBRSxNQUFtQyxFQUMxRCxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVwdGh3aXNlQ29udjJkTmF0aXZlLCBEZXB0aHdpc2VDb252MmROYXRpdmVBdHRycywgRGVwdGh3aXNlQ29udjJkTmF0aXZlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBEZXB0aHdpc2UgMkQgY29udm9sdXRpb24uXG4gKlxuICogR2l2ZW4gYSA0RCBgaW5wdXRgIGFycmF5IGFuZCBhIGBmaWx0ZXJgIGFycmF5IG9mIHNoYXBlXG4gKiBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIGNoYW5uZWxNdWx0aXBsaWVyXWAgY29udGFpbmluZ1xuICogYGluQ2hhbm5lbHNgIGNvbnZvbHV0aW9uYWwgZmlsdGVycyBvZiBkZXB0aCAxLCB0aGlzIG9wIGFwcGxpZXMgYVxuICogZGlmZmVyZW50IGZpbHRlciB0byBlYWNoIGlucHV0IGNoYW5uZWwgKGV4cGFuZGluZyBmcm9tIDEgY2hhbm5lbCB0b1xuICogYGNoYW5uZWxNdWx0aXBsaWVyYCBjaGFubmVscyBmb3IgZWFjaCksIHRoZW4gY29uY2F0ZW5hdGVzIHRoZSByZXN1bHRzXG4gKiB0b2dldGhlci4gVGhlIG91dHB1dCBoYXMgYGluQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllcmAgY2hhbm5lbHMuXG4gKlxuICogU2VlXG4gKiBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2RlcHRod2lzZV9jb252MmRdKFxuICogICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9kZXB0aHdpc2VfY29udjJkKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzLCBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzXG4gKiBhc3N1bWVkLlxuICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRlbnNvciwgcmFuayA0LCBvZiBzaGFwZVxuICogICAgIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5DaGFubmVscywgY2hhbm5lbE11bHRpcGxpZXJdYC5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogYFtzdHJpZGVIZWlnaHQsXG4gKiBzdHJpZGVXaWR0aF1gLiBJZiBzdHJpZGVzIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgc3RyaWRlSGVpZ2h0ID09XG4gKiBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRpbGF0aW9ucyBUaGUgZGlsYXRpb24gcmF0ZXM6IGBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdYFxuICogICAgIGluIHdoaWNoIHdlIHNhbXBsZSBpbnB1dCB2YWx1ZXMgYWNyb3NzIHRoZSBoZWlnaHQgYW5kIHdpZHRoIGRpbWVuc2lvbnNcbiAqICAgICBpbiBhdHJvdXMgY29udm9sdXRpb24uIERlZmF1bHRzIHRvIGBbMSwgMV1gLiBJZiBgcmF0ZWAgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBkYXRhRm9ybWF0OiBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOSFdDXCIsIFwiTkNIV1wiLiBEZWZhdWx0cyB0b1xuICogICAgIFwiTkhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkhXQ1wiLCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhlIG9yZGVyIG9mOiBbYmF0Y2gsXG4gKiAgICAgaGVpZ2h0LCB3aWR0aCwgY2hhbm5lbHNdLiBPbmx5IFwiTkhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBkZXB0aHdpc2VDb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8Y29udl91dGlsLkV4cGxpY2l0UGFkZGluZyxcbiAgICBkYXRhRm9ybWF0OiAnTkhXQyd8J05DSFcnID0gJ05IV0MnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdkZXB0aHdpc2VDb252MmQnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkZmlsdGVyID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnZGVwdGh3aXNlQ29udjJkJywgJ2Zsb2F0MzInKTtcblxuICBsZXQgeDREID0gJHggYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKCR4LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIHg0RCA9IHJlc2hhcGUoJHgsIFsxLCAkeC5zaGFwZVswXSwgJHguc2hhcGVbMV0sICR4LnNoYXBlWzJdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IGAgK1xuICAgICAgICAgIGByYW5rICR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRmaWx0ZXIucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyRmaWx0ZXIucmFua30uYCk7XG4gIGNvbnN0IGluQ2hhbm5lbHMgPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyB4NEQuc2hhcGVbM10gOiB4NEQuc2hhcGVbMV07XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5DaGFubmVscyA9PT0gJGZpbHRlci5zaGFwZVsyXSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkZXB0aHdpc2VDb252MmQ6IG51bWJlciBvZiBpbnB1dCBjaGFubmVscyBgICtcbiAgICAgICAgICBgKCR7aW5DaGFubmVsc30pIG11c3QgbWF0Y2ggdGhlIGluQ2hhbm5lbHMgZGltZW5zaW9uIGluIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgY29udl91dGlsLmNoZWNrUGFkT25EaW1Sb3VuZGluZ01vZGUoJ2RlcHRod2lzZUNvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVJbnB1dHMgPSB7eDogeDRELCBmaWx0ZXI6ICRmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQXR0cnMgPVxuICAgICAge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRod2lzZUNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZGVwdGh3aXNlQ29udjJkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Diag } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns a diagonal tensor with given diagonal values.\n *\n * Given a diagonal, this operation returns a tensor with the diagonal and\n * everything else padded with zeros.\n *\n * Assume the input has dimensions `[D1,..., Dk]`, then the output is a tensor\n * of rank 2k with dimensions `[D1,..., Dk, D1,..., Dk]`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * tf.diag(x).print()\n * ```\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [4, 2])\n *\n * tf.diag(x).print()\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction diag_(x) {\n const $x = convertToTensor(x, 'x', 'diag');\n const inputs = { x: $x };\n return ENGINE.runKernel(Diag, inputs);\n}\nexport const diag = /* @__PURE__ */ op({ diag_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RpYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLEtBQUssQ0FBQyxDQUFTO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtEaWFnLCBEaWFnSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGlhZ29uYWwgdGVuc29yIHdpdGggZ2l2ZW4gZGlhZ29uYWwgdmFsdWVzLlxuICpcbiAqIEdpdmVuIGEgZGlhZ29uYWwsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSB0ZW5zb3Igd2l0aCB0aGUgZGlhZ29uYWwgYW5kXG4gKiBldmVyeXRoaW5nIGVsc2UgcGFkZGVkIHdpdGggemVyb3MuXG4gKlxuICogQXNzdW1lIHRoZSBpbnB1dCBoYXMgZGltZW5zaW9ucyBgW0QxLC4uLiwgRGtdYCwgdGhlbiB0aGUgb3V0cHV0IGlzIGEgdGVuc29yXG4gKiBvZiByYW5rIDJrIHdpdGggZGltZW5zaW9ucyBgW0QxLC4uLiwgRGssIEQxLC4uLiwgRGtdYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB0Zi5kaWFnKHgpLnByaW50KClcbiAqIGBgYFxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFs0LCAyXSlcbiAqXG4gKiB0Zi5kaWFnKHgpLnByaW50KClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGRpYWdfKHg6IFRlbnNvcik6IFRlbnNvciB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RpYWcnKTtcblxuICBjb25zdCBpbnB1dHM6IERpYWdJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKERpYWcsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRpYWcgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2RpYWdffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Dilation2D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the grayscale dilation over the input `x`.\n *\n * @param x The input tensor, rank 3 or rank 4 of shape\n * `[batch, height, width, depth]`. If rank 3, batch of 1 is assumed.\n * @param filter The filter tensor, rank 3, of shape\n * `[filterHeight, filterWidth, depth]`.\n * @param strides The strides of the sliding window for each dimension of the\n * input tensor: `[strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat Specify the data format of the input and output data.\n * Defaults to 'NHWC'. Only 'NHWC' is currently supported. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * for atrous morphological dilation. Defaults to `[1, 1]`. If `dilations`\n * is a single number, then `dilationHeight == dilationWidth`. If it is\n * greater than 1, then all values of `strides` must be 1.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction dilation2d_(x, filter, strides, pad, dilations = [1, 1], dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'dilation2d');\n const $filter = convertToTensor(filter, 'filter', 'dilation2d');\n util.assert($x.rank === 3 || $x.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ` +\n `${$x.rank}.`);\n util.assert($filter.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ` +\n `${$filter.rank}.`);\n util.assert(dataFormat === 'NHWC', () => `Error in dilation2d: Only NHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n reshapedTo4D = true;\n }\n util.assert(x4D.shape[3] === $filter.shape[2], () => `Error in dilation2d: input and filter must have the same depth: ${x4D.shape[3]} vs ${$filter.shape[2]}`);\n const inputs = { x: x4D, filter: $filter };\n const attrs = { strides, pad, dilations };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Dilation2D, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const dilation2d = /* @__PURE__ */ op({ dilation2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlsYXRpb24yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2RpbGF0aW9uMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDO0FBSTlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsV0FBVyxDQUNoQixDQUFlLEVBQUUsTUFBMkIsRUFDNUMsT0FBZ0MsRUFBRSxHQUFtQixFQUNyRCxZQUFxQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM0MsYUFBcUIsTUFBTTtJQUM3QixNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoRSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQywrREFBK0Q7UUFDakUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNsQixHQUFHLEVBQUUsQ0FBQywyREFBMkQ7UUFDN0QsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxNQUFNLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLHlEQUF5RDtRQUMzRCx5QkFBeUIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUUvQyxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELFlBQVksR0FBRyxJQUFJLENBQUM7S0FDckI7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDakMsR0FBRyxFQUFFLENBQUMsb0VBQ0YsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBcUIsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUMzRCxNQUFNLEtBQUssR0FBb0IsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxDQUFDO0lBRXpELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLFVBQVUsRUFBRSxNQUFtQyxFQUMvQyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGlsYXRpb24yRCwgRGlsYXRpb24yREF0dHJzLCBEaWxhdGlvbjJESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBncmF5c2NhbGUgZGlsYXRpb24gb3ZlciB0aGUgaW5wdXQgYHhgLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIHJhbmsgMyBvciByYW5rIDQgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBkZXB0aF1gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0ZW5zb3IsIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGRlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgc2xpZGluZyB3aW5kb3cgZm9yIGVhY2ggZGltZW5zaW9uIG9mIHRoZVxuICogICAgIGlucHV0IHRlbnNvcjogYFtzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXWAuXG4gKiAgICAgSWYgYHN0cmlkZXNgIGlzIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMSoxeDEuXG4gKiAgICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGRhdGFGb3JtYXQgU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS5cbiAqICAgICAgRGVmYXVsdHMgdG8gJ05IV0MnLiBPbmx5ICdOSFdDJyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiBXaXRoIHRoZVxuICogICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uXG4gKiBAcGFyYW0gZGlsYXRpb25zIFRoZSBkaWxhdGlvbiByYXRlczogYFtkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aF1gXG4gKiAgICAgaW4gd2hpY2ggd2Ugc2FtcGxlIGlucHV0IHZhbHVlcyBhY3Jvc3MgdGhlIGhlaWdodCBhbmQgd2lkdGggZGltZW5zaW9uc1xuICogICAgIGZvciBhdHJvdXMgbW9ycGhvbG9naWNhbCBkaWxhdGlvbi4gRGVmYXVsdHMgdG8gYFsxLCAxXWAuIElmIGBkaWxhdGlvbnNgXG4gKiAgICAgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXNcbiAqICAgICBncmVhdGVyIHRoYW4gMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQ29udm9sdXRpb24nfVxuICovXG5mdW5jdGlvbiBkaWxhdGlvbjJkXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyOiBUZW5zb3IzRHxUZW5zb3JMaWtlLFxuICAgIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGF0YUZvcm1hdDogJ05IV0MnID0gJ05IV0MnKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RpbGF0aW9uMmQnKTtcbiAgY29uc3QgJGZpbHRlciA9IGNvbnZlcnRUb1RlbnNvcihmaWx0ZXIsICdmaWx0ZXInLCAnZGlsYXRpb24yZCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMyB8fCAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRpbGF0aW9uMmQ6IGlucHV0IG11c3QgYmUgcmFuayAzIG9yIDQsIGJ1dCBnb3QgcmFuayBgICtcbiAgICAgICAgICBgJHskeC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZmlsdGVyLnJhbmsgPT09IDMsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogZmlsdGVyIG11c3QgYmUgcmFuayAzLCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBkYXRhRm9ybWF0ID09PSAnTkhXQycsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogT25seSBOSFdDIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQsIGAgK1xuICAgICAgICAgIGBidXQgZ290IGRhdGFGb3JtYXQgb2YgJHtkYXRhRm9ybWF0fWApO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuXG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQuc2hhcGVbM10gPT09ICRmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZGlsYXRpb24yZDogIGlucHV0IGFuZCBmaWx0ZXIgbXVzdCBoYXZlIHRoZSBzYW1lIGRlcHRoOiAke1xuICAgICAgICAgIHg0RC5zaGFwZVszXX0gdnMgJHskZmlsdGVyLnNoYXBlWzJdfWApO1xuXG4gIGNvbnN0IGlucHV0czogRGlsYXRpb24yRElucHV0cyA9IHt4OiB4NEQsIGZpbHRlcjogJGZpbHRlcn07XG4gIGNvbnN0IGF0dHJzOiBEaWxhdGlvbjJEQXR0cnMgPSB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIERpbGF0aW9uMkQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGRpbGF0aW9uMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2RpbGF0aW9uMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Returns the dimensions in the input shape that are broadcasted to\n * produce the provided output shape.\n *\n * The returned dimensions are 0-indexed and sorted. An example:\n * inShape = [4, 1, 3]\n * outShape = [5, 4, 3, 3]\n * result = [1]. Dimension 1 (2nd dimension of input) gets broadcasted 1 => 3.\n */\nexport function getBroadcastDims(inShape, outShape) {\n const inRank = inShape.length;\n const dims = [];\n for (let i = 0; i < inRank; i++) {\n const dim = inRank - 1 - i;\n const a = inShape[dim] || 1;\n const b = outShape[outShape.length - 1 - i] || 1;\n if (b > 1 && a === 1) {\n dims.unshift(dim);\n }\n }\n return dims;\n}\n/**\n * Returns the axes in the output space that should be reduced to produce\n * the input space.\n */\nexport function getReductionAxes(inShape, outShape) {\n const result = [];\n for (let i = 0; i < outShape.length; i++) {\n const inDim = inShape[inShape.length - i - 1];\n const outAxis = outShape.length - i - 1;\n const outDim = outShape[outAxis];\n if (inDim == null || (inDim === 1 && outDim > 1)) {\n result.unshift(outAxis);\n }\n }\n return result;\n}\nexport function assertAndGetBroadcastShape(shapeA, shapeB) {\n const l = Math.max(shapeA.length, shapeB.length);\n const result = new Array(l);\n for (let i = 0; i < l; i++) {\n let a = shapeA[shapeA.length - i - 1];\n if (a == null) {\n a = 1;\n }\n let b = shapeB[shapeB.length - i - 1];\n if (b == null) {\n b = 1;\n }\n if (a === 1) {\n result[l - i - 1] = b;\n }\n else if (b === 1) {\n result[l - i - 1] = a;\n }\n else if (a !== b) {\n const errMsg = `Operands could not be broadcast together with shapes ` +\n `${shapeA} and ${shapeB}.`;\n throw Error(errMsg);\n }\n else {\n result[l - i - 1] = a;\n }\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9icm9hZGNhc3RfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsT0FBaUIsRUFBRSxRQUFrQjtJQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE9BQWlCLEVBQUUsUUFBa0I7SUFDdkMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3RDLE1BQWdCLEVBQUUsTUFBZ0I7SUFDcEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDYixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNQO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QjthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixNQUFNLE1BQU0sR0FBRyx1REFBdUQ7Z0JBQ2xFLEdBQUcsTUFBTSxRQUFRLE1BQU0sR0FBRyxDQUFDO1lBQy9CLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JCO2FBQU07WUFDTCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGltZW5zaW9ucyBpbiB0aGUgaW5wdXQgc2hhcGUgdGhhdCBhcmUgYnJvYWRjYXN0ZWQgdG9cbiAqIHByb2R1Y2UgdGhlIHByb3ZpZGVkIG91dHB1dCBzaGFwZS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZGltZW5zaW9ucyBhcmUgMC1pbmRleGVkIGFuZCBzb3J0ZWQuIEFuIGV4YW1wbGU6XG4gKiBpblNoYXBlID0gWzQsIDEsIDNdXG4gKiBvdXRTaGFwZSA9IFs1LCA0LCAzLCAzXVxuICogcmVzdWx0ID0gWzFdLiBEaW1lbnNpb24gMSAoMm5kIGRpbWVuc2lvbiBvZiBpbnB1dCkgZ2V0cyBicm9hZGNhc3RlZCAxID0+IDMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm9hZGNhc3REaW1zKFxuICAgIGluU2hhcGU6IG51bWJlcltdLCBvdXRTaGFwZTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGluUmFuayA9IGluU2hhcGUubGVuZ3RoO1xuICBjb25zdCBkaW1zOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluUmFuazsgaSsrKSB7XG4gICAgY29uc3QgZGltID0gaW5SYW5rIC0gMSAtIGk7XG4gICAgY29uc3QgYSA9IGluU2hhcGVbZGltXSB8fCAxO1xuICAgIGNvbnN0IGIgPSBvdXRTaGFwZVtvdXRTaGFwZS5sZW5ndGggLSAxIC0gaV0gfHwgMTtcbiAgICBpZiAoYiA+IDEgJiYgYSA9PT0gMSkge1xuICAgICAgZGltcy51bnNoaWZ0KGRpbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkaW1zO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGF4ZXMgaW4gdGhlIG91dHB1dCBzcGFjZSB0aGF0IHNob3VsZCBiZSByZWR1Y2VkIHRvIHByb2R1Y2VcbiAqIHRoZSBpbnB1dCBzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZHVjdGlvbkF4ZXMoXG4gICAgaW5TaGFwZTogbnVtYmVyW10sIG91dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaW5EaW0gPSBpblNoYXBlW2luU2hhcGUubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGNvbnN0IG91dEF4aXMgPSBvdXRTaGFwZS5sZW5ndGggLSBpIC0gMTtcbiAgICBjb25zdCBvdXREaW0gPSBvdXRTaGFwZVtvdXRBeGlzXTtcbiAgICBpZiAoaW5EaW0gPT0gbnVsbCB8fCAoaW5EaW0gPT09IDEgJiYgb3V0RGltID4gMSkpIHtcbiAgICAgIHJlc3VsdC51bnNoaWZ0KG91dEF4aXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgc2hhcGVBOiBudW1iZXJbXSwgc2hhcGVCOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbCA9IE1hdGgubWF4KHNoYXBlQS5sZW5ndGgsIHNoYXBlQi5sZW5ndGgpO1xuICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgYSA9IHNoYXBlQVtzaGFwZUEubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGlmIChhID09IG51bGwpIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cbiAgICBsZXQgYiA9IHNoYXBlQltzaGFwZUIubGVuZ3RoIC0gaSAtIDFdO1xuICAgIGlmIChiID09IG51bGwpIHtcbiAgICAgIGIgPSAxO1xuICAgIH1cbiAgICBpZiAoYSA9PT0gMSkge1xuICAgICAgcmVzdWx0W2wgLSBpIC0gMV0gPSBiO1xuICAgIH0gZWxzZSBpZiAoYiA9PT0gMSkge1xuICAgICAgcmVzdWx0W2wgLSBpIC0gMV0gPSBhO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gYikge1xuICAgICAgY29uc3QgZXJyTXNnID0gYE9wZXJhbmRzIGNvdWxkIG5vdCBiZSBicm9hZGNhc3QgdG9nZXRoZXIgd2l0aCBzaGFwZXMgYCArXG4gICAgICAgICAgYCR7c2hhcGVBfSBhbmQgJHtzaGFwZUJ9LmA7XG4gICAgICB0aHJvdyBFcnJvcihlcnJNc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbbCAtIGkgLSAxXSA9IGE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Equal } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a == b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.equal(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction equal_(a, b) {\n let $a = convertToTensor(a, 'a', 'equal', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'equal', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Equal, inputs);\n}\nexport const equal = /* @__PURE__ */ op({ equal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9lcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9ELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFcXVhbCwgRXF1YWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA9PSBiKSBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzIsIDIsIDJdKTtcbiAqXG4gKiBhLmVxdWFsKGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGVxdWFsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2VxdWFsJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdlcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IEVxdWFsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXF1YWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGVxdWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtlcXVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Select } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { broadcastTo } from './broadcast_to';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the elements, either `a` or `b` depending on the `condition`.\n *\n * If the condition is true, select from `a`, otherwise select from `b`.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const a = tf.tensor1d([1 , 2, 3]);\n * const b = tf.tensor1d([-1, -2, -3]);\n *\n * a.where(cond, b).print();\n * ```\n *\n * @param condition The input condition. Must be of dtype bool.\n * @param a If `condition` is rank 1, `a` may have a higher rank but\n * its first dimension must match the size of `condition`.\n * @param b A tensor with the same dtype as `a` and with shape that is\n * compatible with `a`.\n * @return A tensor with same dtype as `a` and `b`, and shape that is\n * broadcastable from `a` and `b`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction where_(condition, a, b) {\n const $a = convertToTensor(a, 'a', 'where');\n const $b = convertToTensor(b, 'b', 'where');\n const $condition = convertToTensor(condition, 'condition', 'where', 'bool');\n // TODO: move this logic to forward function when the broadcastTo op is\n // implemented in WASM.\n // Find the broadcastable shape for $condition, $a, and $b.\n const broadcastShape = assertAndGetBroadcastShape(assertAndGetBroadcastShape($condition.shape, $a.shape), $b.shape);\n const $broadcastedCondition = broadcastTo($condition, broadcastShape);\n const $broadcastedA = broadcastTo($a, broadcastShape);\n const $broadcastedB = broadcastTo($b, broadcastShape);\n const inputs = {\n condition: $broadcastedCondition,\n t: $broadcastedA,\n e: $broadcastedB\n };\n return ENGINE.runKernel(Select, inputs);\n}\nexport const where = /* @__PURE__ */ op({ where_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy93aGVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxTQUE0QixFQUFFLENBQWUsRUFBRSxDQUFlO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RSx1RUFBdUU7SUFDdkUsdUJBQXVCO0lBQ3ZCLDJEQUEyRDtJQUMzRCxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FDN0MsMEJBQTBCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWlCO1FBQzNCLFNBQVMsRUFBRSxxQkFBcUI7UUFDaEMsQ0FBQyxFQUFFLGFBQWE7UUFDaEIsQ0FBQyxFQUFFLGFBQWE7S0FDakIsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTZWxlY3QsIFNlbGVjdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YnJvYWRjYXN0VG99IGZyb20gJy4vYnJvYWRjYXN0X3RvJztcbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnRzLCBlaXRoZXIgYGFgIG9yIGBiYCBkZXBlbmRpbmcgb24gdGhlIGBjb25kaXRpb25gLlxuICpcbiAqIElmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgc2VsZWN0IGZyb20gYGFgLCBvdGhlcndpc2Ugc2VsZWN0IGZyb20gYGJgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBjb25kID0gdGYudGVuc29yMWQoW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdib29sJyk7XG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEgLCAyLCAzXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWy0xLCAtMiwgLTNdKTtcbiAqXG4gKiBhLndoZXJlKGNvbmQsIGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY29uZGl0aW9uIFRoZSBpbnB1dCBjb25kaXRpb24uIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqIEBwYXJhbSBhIElmIGBjb25kaXRpb25gIGlzIHJhbmsgMSwgYGFgIG1heSBoYXZlIGEgaGlnaGVyIHJhbmsgYnV0XG4gKiAgICAgaXRzIGZpcnN0IGRpbWVuc2lvbiBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIGBjb25kaXRpb25gLlxuICogQHBhcmFtIGIgQSB0ZW5zb3Igd2l0aCB0aGUgc2FtZSBkdHlwZSBhcyBgYWAgYW5kIHdpdGggc2hhcGUgdGhhdCBpc1xuICogICAgIGNvbXBhdGlibGUgd2l0aCBgYWAuXG4gKiBAcmV0dXJuIEEgdGVuc29yIHdpdGggc2FtZSBkdHlwZSBhcyBgYWAgYW5kIGBiYCwgYW5kIHNoYXBlIHRoYXQgaXNcbiAqICAgICBicm9hZGNhc3RhYmxlIGZyb20gYGFgIGFuZCBgYmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIHdoZXJlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBjb25kaXRpb246IFRlbnNvcnxUZW5zb3JMaWtlLCBhOiBUfFRlbnNvckxpa2UsIGI6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICd3aGVyZScpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICd3aGVyZScpO1xuICBjb25zdCAkY29uZGl0aW9uID0gY29udmVydFRvVGVuc29yKGNvbmRpdGlvbiwgJ2NvbmRpdGlvbicsICd3aGVyZScsICdib29sJyk7XG4gIC8vIFRPRE86IG1vdmUgdGhpcyBsb2dpYyB0byBmb3J3YXJkIGZ1bmN0aW9uIHdoZW4gdGhlIGJyb2FkY2FzdFRvIG9wIGlzXG4gIC8vIGltcGxlbWVudGVkIGluIFdBU00uXG4gIC8vIEZpbmQgdGhlIGJyb2FkY2FzdGFibGUgc2hhcGUgZm9yICRjb25kaXRpb24sICRhLCBhbmQgJGIuXG4gIGNvbnN0IGJyb2FkY2FzdFNoYXBlID0gYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkY29uZGl0aW9uLnNoYXBlLCAkYS5zaGFwZSksICRiLnNoYXBlKTtcbiAgY29uc3QgJGJyb2FkY2FzdGVkQ29uZGl0aW9uID0gYnJvYWRjYXN0VG8oJGNvbmRpdGlvbiwgYnJvYWRjYXN0U2hhcGUpO1xuICBjb25zdCAkYnJvYWRjYXN0ZWRBID0gYnJvYWRjYXN0VG8oJGEsIGJyb2FkY2FzdFNoYXBlKTtcbiAgY29uc3QgJGJyb2FkY2FzdGVkQiA9IGJyb2FkY2FzdFRvKCRiLCBicm9hZGNhc3RTaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTZWxlY3RJbnB1dHMgPSB7XG4gICAgY29uZGl0aW9uOiAkYnJvYWRjYXN0ZWRDb25kaXRpb24sXG4gICAgdDogJGJyb2FkY2FzdGVkQSxcbiAgICBlOiAkYnJvYWRjYXN0ZWRCXG4gIH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNlbGVjdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgd2hlcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3doZXJlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ZerosLike } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with all elements set to 0 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.zerosLike(x).print();\n * ```\n *\n * @param x The tensor of required shape.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction zerosLike_(x) {\n const $x = convertToTensor(x, 'x', 'zerosLike');\n const inputs = { x: $x };\n return ENGINE.runKernel(ZerosLike, inputs);\n}\nexport const zerosLike = /* @__PURE__ */ op({ zerosLike_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3NfbGlrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3plcm9zX2xpa2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsVUFBVSxDQUFtQixDQUFlO0lBQ25ELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7WmVyb3NMaWtlLCBaZXJvc0xpa2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAwIHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlXG4gKiBnaXZlbiB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IoWzEsIDJdKTtcbiAqIHRmLnplcm9zTGlrZSh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciBvZiByZXF1aXJlZCBzaGFwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHplcm9zTGlrZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3plcm9zTGlrZScpO1xuICBjb25zdCBpbnB1dHM6IFplcm9zTGlrZUlucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFplcm9zTGlrZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHplcm9zTGlrZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7emVyb3NMaWtlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { div } from './div';\nimport { equal } from './equal';\nimport { op } from './operation';\nimport { where } from './where';\nimport { zerosLike } from './zeros_like';\n/**\n * Divides two `tf.Tensor`s element-wise, A / B. Supports broadcasting. Return 0\n * if denominator is 0.\n *\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 9, 16]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n * const c = tf.tensor1d([0, 0, 0, 0]);\n *\n * a.divNoNan(b).print(); // or tf.divNoNan(a, b)\n * a.divNoNan(c).print(); // or tf.divNoNan(a, c)\n * ```\n *\n * ```js\n * // Broadcast div a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(2);\n * const c = tf.scalar(0);\n *\n * a.divNoNan(b).print(); // or tf.divNoNan(a, b)\n * a.divNoNan(c).print(); // or tf.divNoNan(a, c)\n * ```\n *\n * @param a The first tensor as the numerator.\n * @param b The second tensor as the denominator. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction divNoNan_(a, b) {\n // TODO: Make this into its own kernel.\n let $a = convertToTensor(a, 'a', 'div');\n let $b = convertToTensor(b, 'b', 'div');\n [$a, $b] = makeTypesMatch($a, $b);\n const divResult = div($a, $b);\n const zeros = zerosLike(divResult);\n const bEqualsZero = equal($b, zeros);\n return where(bEqualsZero, zeros, divResult);\n}\nexport const divNoNan = /* @__PURE__ */ op({ divNoNan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl2X25vX25hbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Rpdl9ub19uYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsU0FBUyxTQUFTLENBQ2QsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1Qyx1Q0FBdUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFNLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Rpdn0gZnJvbSAnLi9kaXYnO1xuaW1wb3J0IHtlcXVhbH0gZnJvbSAnLi9lcXVhbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3doZXJlfSBmcm9tICcuL3doZXJlJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuL3plcm9zX2xpa2UnO1xuXG4vKipcbiAqIERpdmlkZXMgdHdvIGB0Zi5UZW5zb3JgcyBlbGVtZW50LXdpc2UsIEEgLyBCLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuIFJldHVybiAwXG4gKiBpZiBkZW5vbWluYXRvciBpcyAwLlxuICpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCA5LCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMWQoWzAsIDAsIDAsIDBdKTtcbiAqXG4gKiBhLmRpdk5vTmFuKGIpLnByaW50KCk7ICAvLyBvciB0Zi5kaXZOb05hbihhLCBiKVxuICogYS5kaXZOb05hbihjKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2Tm9OYW4oYSwgYylcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBCcm9hZGNhc3QgZGl2IGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDIpO1xuICogY29uc3QgYyA9IHRmLnNjYWxhcigwKTtcbiAqXG4gKiBhLmRpdk5vTmFuKGIpLnByaW50KCk7ICAvLyBvciB0Zi5kaXZOb05hbihhLCBiKVxuICogYS5kaXZOb05hbihjKS5wcmludCgpOyAgLy8gb3IgdGYuZGl2Tm9OYW4oYSwgYylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCB0ZW5zb3IgYXMgdGhlIG51bWVyYXRvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yIGFzIHRoZSBkZW5vbWluYXRvci4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzXG4gKiBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIGRpdk5vTmFuXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgLy8gVE9ETzogTWFrZSB0aGlzIGludG8gaXRzIG93biBrZXJuZWwuXG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdkaXYnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2RpdicpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgZGl2UmVzdWx0ID0gZGl2KCRhLCAkYik7XG4gIGNvbnN0IHplcm9zID0gemVyb3NMaWtlKGRpdlJlc3VsdCk7XG4gIGNvbnN0IGJFcXVhbHNaZXJvID0gZXF1YWwoJGIsIHplcm9zKTtcbiAgcmV0dXJuIHdoZXJlKGJFcXVhbHNaZXJvLCB6ZXJvcywgZGl2UmVzdWx0KSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3QgZGl2Tm9OYW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Rpdk5vTmFuX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { matMul } from './mat_mul';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the dot product of two matrices and/or vectors, `t1` and `t2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor2d([[1, 2], [3, 4]]);\n * const c = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n *\n * a.dot(b).print(); // or tf.dot(a, b)\n * b.dot(a).print();\n * b.dot(c).print();\n * ```\n * @param t1 The first tensor in the dot operation.\n * @param t2 The second tensor in the dot operation.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction dot_(t1, t2) {\n const $t1 = convertToTensor(t1, 't1', 'dot');\n const $t2 = convertToTensor(t2, 't2', 'dot');\n util.assert(($t1.rank === 1 || $t1.rank === 2) && ($t2.rank === 1 || $t2.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ` +\n `${$t1.rank} and ${$t2.rank}.`);\n const t1Inner = ($t1.rank === 1 ? $t1.size : $t1.shape[1]);\n const t2Inner = ($t2.rank === 1 ? $t2.size : $t2.shape[0]);\n util.assert(t1Inner === t2Inner, () => `Error in dot: inner dimensions of inputs must match, but got ` +\n `${t1Inner} and ${t2Inner}.`);\n if ($t1.rank === 1 && $t2.rank === 1) {\n const t12D = reshape($t1, [1, -1]);\n const t22D = reshape($t2, [-1, 1]);\n const t1t2 = matMul(t12D, t22D);\n return reshape(t1t2, []);\n }\n else if ($t1.rank === 1 && $t2.rank === 2) {\n const t12D = reshape($t1, [1, -1]);\n const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]);\n const t1t2 = matMul(t12D, t22D);\n return reshape(t1t2, [t1t2.size]);\n }\n else if ($t1.rank === 2 && $t2.rank === 1) {\n const t22D = reshape($t2, [-1, 1]);\n const t1t2 = matMul($t1, t22D);\n return reshape(t1t2, [t1t2.size]);\n }\n else {\n const t22D = reshape($t2, [$t2.shape[0], $t2.shape[1]]);\n const t1t2 = matMul($t1, t22D);\n return t1t2;\n }\n}\nexport const dot = /* @__PURE__ */ op({ dot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsSUFBSSxDQUFDLEVBQXFCLEVBQUUsRUFBcUI7SUFDeEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0MsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUN4RSxHQUFHLEVBQUUsQ0FBQyw4REFBOEQ7UUFDaEUsR0FBRyxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLEtBQUssT0FBTyxFQUNuQixHQUFHLEVBQUUsQ0FBQywrREFBK0Q7UUFDakUsR0FBRyxPQUFPLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUV0QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzFCO1NBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcix9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4vbWF0X211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcyBhbmQvb3IgdmVjdG9ycywgYHQxYCBhbmQgYHQyYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiBjb25zdCBjID0gdGYudGVuc29yMmQoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSk7XG4gKlxuICogYS5kb3QoYikucHJpbnQoKTsgIC8vIG9yIHRmLmRvdChhLCBiKVxuICogYi5kb3QoYSkucHJpbnQoKTtcbiAqIGIuZG90KGMpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB0MSBUaGUgZmlyc3QgdGVuc29yIGluIHRoZSBkb3Qgb3BlcmF0aW9uLlxuICogQHBhcmFtIHQyIFRoZSBzZWNvbmQgdGVuc29yIGluIHRoZSBkb3Qgb3BlcmF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gZG90Xyh0MTogVGVuc29yfFRlbnNvckxpa2UsIHQyOiBUZW5zb3J8VGVuc29yTGlrZSk6IFRlbnNvciB7XG4gIGNvbnN0ICR0MSA9IGNvbnZlcnRUb1RlbnNvcih0MSwgJ3QxJywgJ2RvdCcpO1xuICBjb25zdCAkdDIgPSBjb252ZXJ0VG9UZW5zb3IodDIsICd0MicsICdkb3QnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICgkdDEucmFuayA9PT0gMSB8fCAkdDEucmFuayA9PT0gMikgJiYgKCR0Mi5yYW5rID09PSAxIHx8ICR0Mi5yYW5rID09PSAyKSxcbiAgICAgICgpID0+IGBFcnJvciBpbiBkb3Q6IGlucHV0cyBtdXN0IGFsbCBiZSByYW5rIDEgb3IgMiwgYnV0IGdvdCByYW5rcyBgICtcbiAgICAgICAgICBgJHskdDEucmFua30gYW5kICR7JHQyLnJhbmt9LmApO1xuXG4gIGNvbnN0IHQxSW5uZXIgPSAoJHQxLnJhbmsgPT09IDEgPyAkdDEuc2l6ZSA6ICR0MS5zaGFwZVsxXSk7XG4gIGNvbnN0IHQySW5uZXIgPSAoJHQyLnJhbmsgPT09IDEgPyAkdDIuc2l6ZSA6ICR0Mi5zaGFwZVswXSk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB0MUlubmVyID09PSB0MklubmVyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGRvdDogaW5uZXIgZGltZW5zaW9ucyBvZiBpbnB1dHMgbXVzdCBtYXRjaCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt0MUlubmVyfSBhbmQgJHt0MklubmVyfS5gKTtcblxuICBpZiAoJHQxLnJhbmsgPT09IDEgJiYgJHQyLnJhbmsgPT09IDEpIHtcbiAgICBjb25zdCB0MTJEID0gcmVzaGFwZSgkdDEsIFsxLCAtMV0pO1xuICAgIGNvbnN0IHQyMkQgPSByZXNoYXBlKCR0MiwgWy0xLCAxXSk7XG4gICAgY29uc3QgdDF0MiA9IG1hdE11bCh0MTJELCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbXSk7XG4gIH0gZWxzZSBpZiAoJHQxLnJhbmsgPT09IDEgJiYgJHQyLnJhbmsgPT09IDIpIHtcbiAgICBjb25zdCB0MTJEID0gcmVzaGFwZSgkdDEsIFsxLCAtMV0pO1xuICAgIGNvbnN0IHQyMkQgPSByZXNoYXBlKCR0MiwgWyR0Mi5zaGFwZVswXSwgJHQyLnNoYXBlWzFdXSk7XG4gICAgY29uc3QgdDF0MiA9IG1hdE11bCh0MTJELCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbdDF0Mi5zaXplXSk7XG4gIH0gZWxzZSBpZiAoJHQxLnJhbmsgPT09IDIgJiYgJHQyLnJhbmsgPT09IDEpIHtcbiAgICBjb25zdCB0MjJEID0gcmVzaGFwZSgkdDIsIFstMSwgMV0pO1xuICAgIGNvbnN0IHQxdDIgPSBtYXRNdWwoJHQxLCB0MjJEKTtcbiAgICByZXR1cm4gcmVzaGFwZSh0MXQyLCBbdDF0Mi5zaXplXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdDIyRCA9IHJlc2hhcGUoJHQyLCBbJHQyLnNoYXBlWzBdLCAkdDIuc2hhcGVbMV1dKTtcbiAgICBjb25zdCB0MXQyID0gbWF0TXVsKCR0MSwgdDIyRCk7XG4gICAgcmV0dXJuIHQxdDI7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRvdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZG90X30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Einsum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Tensor contraction over specified indices and outer product.\n *\n * `einsum` allows defining Tensors by defining their element-wise computation.\n * This computation is based on\n * [Einstein summation](https://en.wikipedia.org/wiki/Einstein_notation).\n *\n * Some special cases include:\n *\n * Matrix multiplication:\n * ```js\n * const x = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n * const y = tf.tensor2d([[0, 1], [2, 3], [4, 5]]);\n * x.print();\n * y.print();\n * tf.einsum('ij,jk->ik', x, y).print();\n * ```\n *\n * Dot product:\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n * const y = tf.tensor1d([0, 1, 2]);\n * x.print();\n * y.print();\n * tf.einsum('i,i->', x, y).print();\n * ```\n *\n * Batch dot product:\n * ```js\n * const x = tf.tensor2d([[1, 2, 3], [4, 5, 6]]);\n * const y = tf.tensor2d([[0, 1, 2], [3, 4, 5]]);\n * x.print();\n * y.print();\n * tf.einsum('bi,bi->b', x, y).print();\n * ```\n *\n * Outer prouduct:\n * ```js\n * const x = tf.tensor1d([1, 3, 5]);\n * const y = tf.tensor1d([2, 4, 6]);\n * x.print();\n * y.print();\n * tf.einsum('i,j->ij', x, y).print();\n * ```\n *\n * Matrix transpose:\n * ```js\n * const x = tf.tensor2d([[1, 2], [3, 4]]);\n * x.print();\n * tf.einsum('ij->ji', x).print();\n * ```\n *\n * Batch matrix transpose:\n * ```js\n * const x = tf.tensor3d([[[1, 2], [3, 4]], [[-1, -2], [-3, -4]]]);\n * x.print();\n * tf.einsum('bij->bji', x).print();\n * ```\n *\n * Limitations:\n *\n * This implementation of einsum has the following limitations:\n *\n * - Does not support >2 input tensors.\n * - Does not support duplicate axes for any given input tensor. E.g., equation\n * 'ii->' is not supported.\n * - The `...` notation is not supported.\n *\n * @param equation a string describing the contraction, in the same format as\n * [numpy.einsum](https://numpy.org/doc/stable/reference/generated/numpy.einsum.html).\n * @param tensors the input(s) to contract (each one a Tensor), whose shapes\n * should be consistent with equation.\n * @returns The output tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Matrices'}\n */\nexport function einsum_(equation, ...tensors) {\n const $tensors = tensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'einsum'));\n const attrs = { equation };\n return ENGINE.runKernel(Einsum, $tensors, attrs);\n}\nexport const einsum = /* @__PURE__ */ op({ einsum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWluc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZWluc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBSXBELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLFFBQWdCLEVBQUUsR0FBRyxPQUFpQjtJQUM1RCxNQUFNLFFBQVEsR0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxLQUFLLEdBQWdCLEVBQUMsUUFBUSxFQUFDLENBQUM7SUFDdEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixNQUFNLEVBQUUsUUFBcUMsRUFDN0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFaW5zdW0sIEVpbnN1bUF0dHJzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFRlbnNvciBjb250cmFjdGlvbiBvdmVyIHNwZWNpZmllZCBpbmRpY2VzIGFuZCBvdXRlciBwcm9kdWN0LlxuICpcbiAqIGBlaW5zdW1gIGFsbG93cyBkZWZpbmluZyBUZW5zb3JzIGJ5IGRlZmluaW5nIHRoZWlyIGVsZW1lbnQtd2lzZSBjb21wdXRhdGlvbi5cbiAqIFRoaXMgY29tcHV0YXRpb24gaXMgYmFzZWQgb25cbiAqIFtFaW5zdGVpbiBzdW1tYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VpbnN0ZWluX25vdGF0aW9uKS5cbiAqXG4gKiBTb21lIHNwZWNpYWwgY2FzZXMgaW5jbHVkZTpcbiAqXG4gKiBNYXRyaXggbXVsdGlwbGljYXRpb246XG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjJkKFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2lqLGprLT5paycsIHgsIHkpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBEb3QgcHJvZHVjdDpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IHkgPSB0Zi50ZW5zb3IxZChbMCwgMSwgMl0pO1xuICogeC5wcmludCgpO1xuICogeS5wcmludCgpO1xuICogdGYuZWluc3VtKCdpLGktPicsIHgsIHkpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBCYXRjaCBkb3QgcHJvZHVjdDpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSk7XG4gKiBjb25zdCB5ID0gdGYudGVuc29yMmQoW1swLCAxLCAyXSwgWzMsIDQsIDVdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2JpLGJpLT5iJywgeCwgeSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIE91dGVyIHByb3VkdWN0OlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMywgNV0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2XSk7XG4gKiB4LnByaW50KCk7XG4gKiB5LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2ksai0+aWonLCB4LCB5KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogTWF0cml4IHRyYW5zcG9zZTpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiB4LnByaW50KCk7XG4gKiB0Zi5laW5zdW0oJ2lqLT5qaScsIHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBCYXRjaCBtYXRyaXggdHJhbnNwb3NlOlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IzZChbW1sxLCAyXSwgWzMsIDRdXSwgW1stMSwgLTJdLCBbLTMsIC00XV1dKTtcbiAqIHgucHJpbnQoKTtcbiAqIHRmLmVpbnN1bSgnYmlqLT5iamknLCB4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogTGltaXRhdGlvbnM6XG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBlaW5zdW0gaGFzIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6XG4gKlxuICogLSBEb2VzIG5vdCBzdXBwb3J0ID4yIGlucHV0IHRlbnNvcnMuXG4gKiAtIERvZXMgbm90IHN1cHBvcnQgZHVwbGljYXRlIGF4ZXMgZm9yIGFueSBnaXZlbiBpbnB1dCB0ZW5zb3IuIEUuZy4sIGVxdWF0aW9uXG4gKiAgICdpaS0+JyBpcyBub3Qgc3VwcG9ydGVkLlxuICogLSBUaGUgYC4uLmAgbm90YXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gZXF1YXRpb24gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29udHJhY3Rpb24sIGluIHRoZSBzYW1lIGZvcm1hdCBhc1xuICogW251bXB5LmVpbnN1bV0oaHR0cHM6Ly9udW1weS5vcmcvZG9jL3N0YWJsZS9yZWZlcmVuY2UvZ2VuZXJhdGVkL251bXB5LmVpbnN1bS5odG1sKS5cbiAqIEBwYXJhbSB0ZW5zb3JzIHRoZSBpbnB1dChzKSB0byBjb250cmFjdCAoZWFjaCBvbmUgYSBUZW5zb3IpLCB3aG9zZSBzaGFwZXNcbiAqICAgICBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGVxdWF0aW9uLlxuICogQHJldHVybnMgVGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnTWF0cmljZXMnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZWluc3VtXyhlcXVhdGlvbjogc3RyaW5nLCAuLi50ZW5zb3JzOiBUZW5zb3JbXSk6IFRlbnNvciB7XG4gIGNvbnN0ICR0ZW5zb3JzID1cbiAgICAgIHRlbnNvcnMubWFwKCh0LCBpKSA9PiBjb252ZXJ0VG9UZW5zb3IodCwgYHRlbnNvcnMke2l9YCwgJ2VpbnN1bScpKTtcbiAgY29uc3QgYXR0cnM6IEVpbnN1bUF0dHJzID0ge2VxdWF0aW9ufTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBFaW5zdW0sICR0ZW5zb3JzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBlaW5zdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2VpbnN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Elu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential linear element-wise: `x > 0 ? x : (e ^ x) - 1`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 1, -3, 2]);\n *\n * x.elu().print(); // or tf.elu(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction elu_(x) {\n const $x = convertToTensor(x, 'x', 'elu', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Elu, inputs);\n}\nexport const elu = /* @__PURE__ */ op({ elu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFbHUsIEVsdUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBleHBvbmVudGlhbCBsaW5lYXIgZWxlbWVudC13aXNlOiBgeCA+IDAgPyB4IDogKGUgXiB4KSAtIDFgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAxLCAtMywgMl0pO1xuICpcbiAqIHguZWx1KCkucHJpbnQoKTsgIC8vIG9yIHRmLmVsdSh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBlbHVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdlbHUnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogRWx1SW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChFbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGVsdSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZWx1X30pO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { arraysEqualWithNull } from '../util_base';\nimport { op } from './operation';\n/**\n * Checks the input tensor mathes the given shape.\n *\n * Given an input tensor, returns a new tensor with the same values as the\n * input tensor with shape `shape`.\n *\n * The method supports the null value in tensor. It will still check the shapes,\n * and null is a placeholder.\n *\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const y = tf.tensor1d([1, null, 3, 4]);\n * const z = tf.tensor2d([1, 2, 3, 4], [2,2]);\n * tf.ensureShape(x, [4]).print();\n * tf.ensureShape(y, [4]).print();\n * tf.ensureShape(z, [null, 2]).print();\n * ```\n *\n * @param x The input tensor to be ensured.\n * @param shape A TensorShape representing the shape of this tensor, an array\n * or null.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction ensureShape_(x, shape) {\n const $x = convertToTensor(x, 'x', 'ensureShape', 'string_or_numeric');\n if (!arraysEqualWithNull($x.shape, shape)) {\n throw new Error(`EnsureShape: Shape of tensor ${$x.shape} is not compatible with expected shape ${shape}`);\n }\n return x;\n}\nexport const ensureShape = /* @__PURE__ */ op({ ensureShape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5zdXJlX3NoYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZW5zdXJlX3NoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFakQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxZQUFZLENBQWlCLENBQVMsRUFBRSxLQUFrQjtJQUNqRSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUNaLEVBQUUsQ0FBQyxLQUFLLDBDQUEwQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthcnJheXNFcXVhbFdpdGhOdWxsfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnB1dCB0ZW5zb3IgbWF0aGVzIHRoZSBnaXZlbiBzaGFwZS5cbiAqXG4gKiBHaXZlbiBhbiBpbnB1dCB0ZW5zb3IsIHJldHVybnMgYSBuZXcgdGVuc29yIHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICogaW5wdXQgdGVuc29yIHdpdGggc2hhcGUgYHNoYXBlYC5cbiAqXG4gKiBUaGUgbWV0aG9kIHN1cHBvcnRzIHRoZSBudWxsIHZhbHVlIGluIHRlbnNvci4gSXQgd2lsbCBzdGlsbCBjaGVjayB0aGUgc2hhcGVzLFxuICogYW5kIG51bGwgaXMgYSBwbGFjZWhvbGRlci5cbiAqXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgeSA9IHRmLnRlbnNvcjFkKFsxLCBudWxsLCAzLCA0XSk7XG4gKiBjb25zdCB6ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwyXSk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh4LCBbNF0pLnByaW50KCk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh5LCBbNF0pLnByaW50KCk7XG4gKiB0Zi5lbnN1cmVTaGFwZSh6LCBbbnVsbCwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIGVuc3VyZWQuXG4gKiBAcGFyYW0gc2hhcGUgQSBUZW5zb3JTaGFwZSByZXByZXNlbnRpbmcgdGhlIHNoYXBlIG9mIHRoaXMgdGVuc29yLCBhbiBhcnJheVxuICogICAgIG9yIG51bGwuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gZW5zdXJlU2hhcGVfPFIgZXh0ZW5kcyBSYW5rPih4OiBUZW5zb3IsIHNoYXBlOiBTaGFwZU1hcFtSXSk6IFRlbnNvciB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2Vuc3VyZVNoYXBlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGlmICghYXJyYXlzRXF1YWxXaXRoTnVsbCgkeC5zaGFwZSwgc2hhcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFbnN1cmVTaGFwZTogU2hhcGUgb2YgdGVuc29yICR7XG4gICAgICAgICR4LnNoYXBlfSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGV4cGVjdGVkIHNoYXBlICR7c2hhcGV9YCk7XG4gIH1cblxuICByZXR1cm4geDtcbn1cbmV4cG9ydCBjb25zdCBlbnN1cmVTaGFwZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZW5zdXJlU2hhcGVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Erf } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes Gauss error function of the input `tf.Tensor` element-wise:\n * `erf(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, .1, -.1, .7]);\n *\n * x.erf().print(); // or tf.erf(x);\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction erf_(x) {\n let $x = convertToTensor(x, 'x', 'erf');\n util.assert($x.dtype === 'int32' || $x.dtype === 'float32', () => 'Input dtype must be `int32` or `float32`.');\n if ($x.dtype === 'int32') {\n $x = cast($x, 'float32');\n }\n const inputs = { x: $x };\n return ENGINE.runKernel(Erf, inputs);\n}\nexport const erf = /* @__PURE__ */ op({ erf_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXJmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFDOUMsR0FBRyxFQUFFLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUV2RCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFO1FBQ3hCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFCO0lBRUQsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0VyZiwgRXJmSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBHYXVzcyBlcnJvciBmdW5jdGlvbiBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYGVyZih4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAuMSwgLS4xLCAuN10pO1xuICpcbiAqIHguZXJmKCkucHJpbnQoKTsgLy8gb3IgdGYuZXJmKHgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBlcmZfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZXJmJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdpbnQzMicgfHwgJHguZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+ICdJbnB1dCBkdHlwZSBtdXN0IGJlIGBpbnQzMmAgb3IgYGZsb2F0MzJgLicpO1xuXG4gIGlmICgkeC5kdHlwZSA9PT0gJ2ludDMyJykge1xuICAgICR4ID0gY2FzdCgkeCwgJ2Zsb2F0MzInKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogRXJmSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXJmLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgZXJmID0gLyogQF9fUFVSRV9fICovIG9wKHtlcmZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n * Returns true if the axis specifies the inner most dimensions of the\n * array.\n */\nexport function axesAreInnerMostDims(axes, rank) {\n for (let i = 0; i < axes.length; ++i) {\n if (axes[axes.length - i - 1] !== rank - 1 - i) {\n return false;\n }\n }\n return true;\n}\nexport function combineLocations(outputLoc, reduceLoc, axes) {\n const rank = outputLoc.length + reduceLoc.length;\n const loc = [];\n let outIdx = 0;\n let reduceIdx = 0;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n loc.push(outputLoc[outIdx++]);\n }\n else {\n loc.push(reduceLoc[reduceIdx++]);\n }\n }\n return loc;\n}\nexport function computeOutAndReduceShapes(aShape, axes) {\n const outShape = [];\n const rank = aShape.length;\n for (let dim = 0; dim < rank; dim++) {\n if (axes.indexOf(dim) === -1) {\n outShape.push(aShape[dim]);\n }\n }\n const reduceShape = axes.map(dim => aShape[dim]);\n return [outShape, reduceShape];\n}\nexport function expandShapeToKeepDim(shape, axes) {\n const reduceSubShape = axes.map(x => 1);\n return combineLocations(shape, reduceSubShape, axes);\n}\nexport function assertAxesAreInnerMostDims(msg, axes, rank) {\n util.assert(axesAreInnerMostDims(axes, rank), () => `${msg} supports only inner-most axes for now. ` +\n `Got axes ${axes} and rank-${rank} input.`);\n}\n/**\n * Returns the axes permutation to be used with `tf.transpose`, if such\n * permutation is necessary. Otherwise it returns null. This method is used by\n * operations that operate only on inner-most axes.\n */\nexport function getAxesPermutation(axes, rank) {\n if (axesAreInnerMostDims(axes, rank)) {\n return null;\n }\n const result = [];\n for (let i = 0; i < rank; ++i) {\n if (axes.indexOf(i) === -1) {\n result.push(i);\n }\n }\n axes.forEach(axis => result.push(axis));\n return result;\n}\n/** Returns the axes permutation that undoes the original permutation. */\nexport function getUndoAxesPermutation(axes) {\n return axes.map((axis, i) => [i, axis])\n .sort((a, b) => a[1] - b[1])\n .map(x => x[0]);\n}\nexport function getInnerMostAxes(numAxes, rank) {\n const res = [];\n for (let i = rank - numAxes; i < rank; ++i) {\n res.push(i);\n }\n return res;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYXhpc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFjLEVBQUUsSUFBWTtJQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QyxPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLFNBQW1CLEVBQUUsU0FBbUIsRUFBRSxJQUFjO0lBQzFELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDaEIsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9CO2FBQU07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QUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBheGlzIHNwZWNpZmllcyB0aGUgaW5uZXIgbW9zdCBkaW1lbnNpb25zIG9mIHRoZVxuICogYXJyYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXhlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChheGVzW2F4ZXMubGVuZ3RoIC0gaSAtIDFdICE9PSByYW5rIC0gMSAtIGkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTG9jYXRpb25zKFxuICAgIG91dHB1dExvYzogbnVtYmVyW10sIHJlZHVjZUxvYzogbnVtYmVyW10sIGF4ZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCByYW5rID0gb3V0cHV0TG9jLmxlbmd0aCArIHJlZHVjZUxvYy5sZW5ndGg7XG4gIGNvbnN0IGxvYyA9IFtdO1xuICBsZXQgb3V0SWR4ID0gMDtcbiAgbGV0IHJlZHVjZUlkeCA9IDA7XG4gIMKgIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgbG9jLnB1c2gob3V0cHV0TG9jW291dElkeCsrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYy5wdXNoKHJlZHVjZUxvY1tyZWR1Y2VJZHgrK10pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG9jO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcyhcbiAgICBhU2hhcGU6IG51bWJlcltdLCBheGVzOiBudW1iZXJbXSk6IFtudW1iZXJbXSwgbnVtYmVyW11dIHtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbXTtcbiAgY29uc3QgcmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gIGZvciAobGV0IGRpbSA9IDA7IGRpbSA8IHJhbms7IGRpbSsrKSB7XG4gICAgaWYgKGF4ZXMuaW5kZXhPZihkaW0pID09PSAtMSkge1xuICAgICAgb3V0U2hhcGUucHVzaChhU2hhcGVbZGltXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlZHVjZVNoYXBlID0gYXhlcy5tYXAoZGltID0+IGFTaGFwZVtkaW1dKTtcbiAgcmV0dXJuIFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kU2hhcGVUb0tlZXBEaW0oXG4gICAgc2hhcGU6IG51bWJlcltdLCBheGVzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgcmVkdWNlU3ViU2hhcGUgPSBheGVzLm1hcCh4ID0+IDEpO1xuICByZXR1cm4gY29tYmluZUxvY2F0aW9ucyhzaGFwZSwgcmVkdWNlU3ViU2hhcGUsIGF4ZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoXG4gICAgbXNnOiBzdHJpbmcsIGF4ZXM6IG51bWJlcltdLCByYW5rOiBudW1iZXIpOiB2b2lkIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzLCByYW5rKSxcbiAgICAgICgpID0+IGAke21zZ30gc3VwcG9ydHMgb25seSBpbm5lci1tb3N0IGF4ZXMgZm9yIG5vdy4gYCArXG4gICAgICAgICAgYEdvdCBheGVzICR7YXhlc30gYW5kIHJhbmstJHtyYW5rfSBpbnB1dC5gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBheGVzIHBlcm11dGF0aW9uIHRvIGJlIHVzZWQgd2l0aCBgdGYudHJhbnNwb3NlYCwgaWYgc3VjaFxuICogcGVybXV0YXRpb24gaXMgbmVjZXNzYXJ5LiBPdGhlcndpc2UgaXQgcmV0dXJucyBudWxsLiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5XG4gKiBvcGVyYXRpb25zIHRoYXQgb3BlcmF0ZSBvbmx5IG9uIGlubmVyLW1vc3QgYXhlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4ZXNQZXJtdXRhdGlvbihheGVzOiBudW1iZXJbXSwgcmFuazogbnVtYmVyKTogbnVtYmVyW118XG4gICAgbnVsbCB7XG4gIGlmIChheGVzQXJlSW5uZXJNb3N0RGltcyhheGVzLCByYW5rKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyArK2kpIHtcbiAgICBpZiAoYXhlcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgfVxuICB9XG4gIGF4ZXMuZm9yRWFjaChheGlzID0+IHJlc3VsdC5wdXNoKGF4aXMpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIFJldHVybnMgdGhlIGF4ZXMgcGVybXV0YXRpb24gdGhhdCB1bmRvZXMgdGhlIG9yaWdpbmFsIHBlcm11dGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuZG9BeGVzUGVybXV0YXRpb24oYXhlczogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIHJldHVybiBheGVzLm1hcCgoYXhpcywgaSkgPT4gW2ksIGF4aXNdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVxuICAgICAgLm1hcCh4ID0+IHhbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5uZXJNb3N0QXhlcyhudW1BeGVzOiBudW1iZXIsIHJhbms6IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgcmVzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gcmFuayAtIG51bUF4ZXM7IGkgPCByYW5rOyArK2kpIHtcbiAgICByZXMucHVzaChpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Max } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the maximum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.max().print(); // or tf.max(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.max(axis).print(); // or tf.max(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction max_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'max');\n const inputs = { x: $x };\n const attrs = { reductionIndices: axis, keepDims };\n return ENGINE.runKernel(Max, inputs, attrs);\n}\nexport const max = /* @__PURE__ */ op({ max_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFhLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRTNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsR0FBRyxFQUFFLE1BQW1DLEVBQ3hDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4LCBNYXhBdHRycywgTWF4SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1heGltdW0gb2YgZWxlbWVudHMgYWNyb3NzIGRpbWVuc2lvbnMgb2YgYSBgdGYuVGVuc29yYC5cbiAqXG4gKiBSZWR1Y2VzIHRoZSBpbnB1dCBhbG9uZyB0aGUgZGltZW5zaW9ucyBnaXZlbiBpbiBgYXhlc2AuIFVubGVzcyBga2VlcERpbXNgXG4gKiBpcyB0cnVlLCB0aGUgcmFuayBvZiB0aGUgYHRmLlRlbnNvcmAgaXMgcmVkdWNlZCBieSAxIGZvciBlYWNoIGVudHJ5IGluXG4gKiBgYXhlc2AuIElmIGBrZWVwRGltc2AgaXMgdHJ1ZSwgdGhlIHJlZHVjZWQgZGltZW5zaW9ucyBhcmUgcmV0YWluZWQgd2l0aFxuICogbGVuZ3RoIDEuIElmIGBheGVzYCBoYXMgbm8gZW50cmllcywgYWxsIGRpbWVuc2lvbnMgYXJlIHJlZHVjZWQsIGFuZCBhXG4gKiBgdGYuVGVuc29yYCB3aXRoIGEgc2luZ2xlIGVsZW1lbnQgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHgubWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLm1heCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4Lm1heChheGlzKS5wcmludCgpOyAgLy8gb3IgdGYubWF4KHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1heF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwsIGtlZXBEaW1zID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBNYXhJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWF4QXR0cnMgPSB7cmVkdWN0aW9uSW5kaWNlczogYXhpcywga2VlcERpbXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgTWF4LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWF4X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Min } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the minimum value from the input.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axes`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axes` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.min().print(); // or tf.min(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.min(axis).print(); // or tf.min(x, axis)\n * ```\n *\n * @param x The input Tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction min_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'min');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(Min, inputs, attrs);\n}\nexport const min = /* @__PURE__ */ op({ min_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFhLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRXpDLDBEQUEwRDtJQUMxRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ1osR0FBRyxFQUFFLE1BQW1DLEVBQ3hDLEtBQWdDLENBQU0sQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pbiwgTWluQXR0cnMsIE1pbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIGZyb20gdGhlIGlucHV0LlxuICpcbiAqIFJlZHVjZXMgdGhlIGlucHV0IGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGVzYC4gVW5sZXNzIGBrZWVwRGltc2BcbiAqIGlzIHRydWUsIHRoZSByYW5rIG9mIHRoZSBhcnJheSBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW4gYGF4ZXNgLlxuICogSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoIGxlbmd0aCAxLlxuICogSWYgYGF4ZXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFuIGFycmF5IHdpdGggYVxuICogc2luZ2xlIGVsZW1lbnQgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIHgubWluKCkucHJpbnQoKTsgIC8vIG9yIHRmLm1pbih4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4Lm1pbihheGlzKS5wcmludCgpOyAgLy8gb3IgdGYubWluKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1pbl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwsIGtlZXBEaW1zID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWluJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBNaW5JbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWluQXR0cnMgPSB7YXhpcywga2VlcERpbXN9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgTWluLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IG1pbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWluX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Pow } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the power of one `tf.Tensor` to another. Supports broadcasting.\n *\n * Given a `tf.Tensor` x and a `tf.Tensor` y, this operation computes x^y for\n * corresponding elements in x and y. The result's dtype will be the upcasted\n * type of the `base` and `exp` dtypes.\n *\n * ```js\n * const a = tf.tensor([[2, 3], [4, 5]])\n * const b = tf.tensor([[1, 2], [3, 0]]).toInt();\n *\n * a.pow(b).print(); // or tf.pow(a, b)\n * ```\n *\n * ```js\n * const a = tf.tensor([[1, 2], [3, 4]])\n * const b = tf.tensor(2).toInt();\n *\n * a.pow(b).print(); // or tf.pow(a, b)\n * ```\n * We also expose `powStrict` which has the same signature as this op and\n * asserts that `base` and `exp` are the same shape (does not broadcast).\n *\n * @param base The base `tf.Tensor` to pow element-wise.\n * @param exp The exponent `tf.Tensor` to pow element-wise.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction pow_(base, exp) {\n let $base = convertToTensor(base, 'base', 'pow');\n let $exp = convertToTensor(exp, 'exp', 'pow');\n [$base, $exp] = makeTypesMatch($base, $exp);\n const inputs = { a: $base, b: $exp };\n return ENGINE.runKernel(Pow, inputs);\n}\nexport const pow = /* @__PURE__ */ op({ pow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsSUFBdUIsRUFBRSxHQUFzQjtJQUNqRCxJQUFJLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFOUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQb3csIFBvd0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcG93ZXIgb2Ygb25lIGB0Zi5UZW5zb3JgIHRvIGFub3RoZXIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBHaXZlbiBhIGB0Zi5UZW5zb3JgIHggYW5kIGEgYHRmLlRlbnNvcmAgeSwgdGhpcyBvcGVyYXRpb24gY29tcHV0ZXMgeF55IGZvclxuICogY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB4IGFuZCB5LiBUaGUgcmVzdWx0J3MgZHR5cGUgd2lsbCBiZSB0aGUgdXBjYXN0ZWRcbiAqIHR5cGUgb2YgdGhlIGBiYXNlYCBhbmQgYGV4cGAgZHR5cGVzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yKFtbMiwgM10sIFs0LCA1XV0pXG4gKiBjb25zdCBiID0gdGYudGVuc29yKFtbMSwgMl0sIFszLCAwXV0pLnRvSW50KCk7XG4gKlxuICogYS5wb3coYikucHJpbnQoKTsgIC8vIG9yIHRmLnBvdyhhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IoW1sxLCAyXSwgWzMsIDRdXSlcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IoMikudG9JbnQoKTtcbiAqXG4gKiBhLnBvdyhiKS5wcmludCgpOyAgLy8gb3IgdGYucG93KGEsIGIpXG4gKiBgYGBcbiAqIFdlIGFsc28gZXhwb3NlIGBwb3dTdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYmFzZWAgYW5kIGBleHBgIGFyZSB0aGUgc2FtZSBzaGFwZSAoZG9lcyBub3QgYnJvYWRjYXN0KS5cbiAqXG4gKiBAcGFyYW0gYmFzZSBUaGUgYmFzZSBgdGYuVGVuc29yYCB0byBwb3cgZWxlbWVudC13aXNlLlxuICogQHBhcmFtIGV4cCBUaGUgZXhwb25lbnQgYHRmLlRlbnNvcmAgdG8gcG93IGVsZW1lbnQtd2lzZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdBcml0aG1ldGljJ31cbiAqL1xuZnVuY3Rpb24gcG93XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBiYXNlOiBUZW5zb3J8VGVuc29yTGlrZSwgZXhwOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGJhc2UgPSBjb252ZXJ0VG9UZW5zb3IoYmFzZSwgJ2Jhc2UnLCAncG93Jyk7XG4gIGxldCAkZXhwID0gY29udmVydFRvVGVuc29yKGV4cCwgJ2V4cCcsICdwb3cnKTtcbiAgWyRiYXNlLCAkZXhwXSA9IG1ha2VUeXBlc01hdGNoKCRiYXNlLCAkZXhwKTtcblxuICBjb25zdCBpbnB1dHM6IFBvd0lucHV0cyA9IHthOiAkYmFzZSwgYjogJGV4cH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUG93LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBwb3cgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Bvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { isTypedArray } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-0 `tf.Tensor` (scalar) with the provided value and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.scalar` as it makes the code more readable.\n *\n * ```js\n * tf.scalar(3.14).print();\n * ```\n *\n * @param value The value of the scalar.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function scalar(value, dtype) {\n if (((isTypedArray(value) && dtype !== 'string') || Array.isArray(value)) &&\n dtype !== 'complex64') {\n throw new Error('Error creating a new Scalar: value must be a primitive ' +\n '(number|boolean|string)');\n }\n if (dtype === 'string' && isTypedArray(value) &&\n !(value instanceof Uint8Array)) {\n throw new Error('When making a scalar from encoded string, ' +\n 'the value must be `Uint8Array`.');\n }\n const shape = [];\n const inferredShape = [];\n return makeTensor(value, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2NhbGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsS0FBdUMsRUFBRSxLQUFnQjtJQUMzRCxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckUsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCx5QkFBeUIsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsSUFBSSxLQUFLLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDekMsQ0FBQyxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNYLDRDQUE0QztZQUM1QyxpQ0FBaUMsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQVcsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7aXNUeXBlZEFycmF5fSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay0wIGB0Zi5UZW5zb3JgIChzY2FsYXIpIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlIGFuZCBkdHlwZS5cbiAqXG4gKiBUaGUgc2FtZSBmdW5jdGlvbmFsaXR5IGNhbiBiZSBhY2hpZXZlZCB3aXRoIGB0Zi50ZW5zb3JgLCBidXQgaW4gZ2VuZXJhbFxuICogd2UgcmVjb21tZW5kIHVzaW5nIGB0Zi5zY2FsYXJgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogYGBganNcbiAqIHRmLnNjYWxhcigzLjE0KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc2NhbGFyLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NhbGFyKFxuICAgIHZhbHVlOiBudW1iZXJ8Ym9vbGVhbnxzdHJpbmd8VWludDhBcnJheSwgZHR5cGU/OiBEYXRhVHlwZSk6IFNjYWxhciB7XG4gIGlmICgoKGlzVHlwZWRBcnJheSh2YWx1ZSkgJiYgZHR5cGUgIT09ICdzdHJpbmcnKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgJiZcbiAgICAgIGR0eXBlICE9PSAnY29tcGxleDY0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Vycm9yIGNyZWF0aW5nIGEgbmV3IFNjYWxhcjogdmFsdWUgbXVzdCBiZSBhIHByaW1pdGl2ZSAnICtcbiAgICAgICAgJyhudW1iZXJ8Ym9vbGVhbnxzdHJpbmcpJyk7XG4gIH1cbiAgaWYgKGR0eXBlID09PSAnc3RyaW5nJyAmJiBpc1R5cGVkQXJyYXkodmFsdWUpICYmXG4gICAgICAhKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdXaGVuIG1ha2luZyBhIHNjYWxhciBmcm9tIGVuY29kZWQgc3RyaW5nLCAnICtcbiAgICAgICAgJ3RoZSB2YWx1ZSBtdXN0IGJlIGBVaW50OEFycmF5YC4nKTtcbiAgfVxuICBjb25zdCBzaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgaW5mZXJyZWRTaGFwZTogbnVtYmVyW10gPSBbXTtcbiAgcmV0dXJuIG1ha2VUZW5zb3IodmFsdWUsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgU2NhbGFyO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sqrt } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes square root of the input `tf.Tensor` element-wise: `y = sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.sqrt().print(); // or tf.sqrt(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sqrt_(x) {\n const $x = convertToTensor(x, 'x', 'sqrt', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sqrt, inputs);\n}\nexport const sqrt = /* @__PURE__ */ op({ sqrt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NxcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEQsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NxcnQsIFNxcnRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgc3F1YXJlIHJvb3Qgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYHkgPSBzcXJ0KHgpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDQsIC0xXSk7XG4gKlxuICogeC5zcXJ0KCkucHJpbnQoKTsgIC8vIG9yIHRmLnNxcnQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc3FydF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NxcnQnLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogU3FydElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoU3FydCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHNxcnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NxcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes square of `x` element-wise: `x ^ 2`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.sqrt(2), -1]);\n *\n * x.square().print(); // or tf.square(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction square_(x) {\n const $x = convertToTensor(x, 'x', 'square');\n const attrs = {};\n return ENGINE.runKernel('Square', { x: $x }, attrs);\n}\nexport const square = /* @__PURE__ */ op({ square_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3F1YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLE9BQU8sQ0FBbUIsQ0FBZTtJQUNoRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzcXVhcmUgb2YgYHhgIGVsZW1lbnQtd2lzZTogYHggXiAyYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIE1hdGguc3FydCgyKSwgLTFdKTtcbiAqXG4gKiB4LnNxdWFyZSgpLnByaW50KCk7ICAvLyBvciB0Zi5zcXVhcmUoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc3F1YXJlXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3F1YXJlJyk7XG4gIGNvbnN0IGF0dHJzID0ge307XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKCdTcXVhcmUnLCB7eDogJHh9LCBhdHRycyk7XG59XG5cbmV4cG9ydCBjb25zdCBzcXVhcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NxdWFyZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes the sum of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If axes has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.sum().print(); // or tf.sum(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.sum(axis).print(); // or tf.sum(x, axis)\n * ```\n *\n * @param x The input tensor to compute the sum over. If the dtype is `bool`\n * it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction sum_(x, axis = null, keepDims = false) {\n let $x = convertToTensor(x, 'x', 'sum');\n if ($x.dtype === 'bool') {\n $x = cast($x, 'int32');\n }\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Sum, inputs, attrs);\n}\nexport const sum = /* @__PURE__ */ op({ sum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILFNBQVMsSUFBSSxDQUNULENBQW9CLEVBQUUsT0FBd0IsSUFBSSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ3RFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7UUFDdkIsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTdW0sIFN1bUF0dHJzLCBTdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgc3VtIG9mIGVsZW1lbnRzIGFjcm9zcyBkaW1lbnNpb25zIG9mIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogUmVkdWNlcyB0aGUgaW5wdXQgYWxvbmcgdGhlIGRpbWVuc2lvbnMgZ2l2ZW4gaW4gYGF4ZXNgLiBVbmxlc3MgYGtlZXBEaW1zYFxuICogaXMgdHJ1ZSwgdGhlIHJhbmsgb2YgdGhlIGB0Zi5UZW5zb3JgIGlzIHJlZHVjZWQgYnkgMSBmb3IgZWFjaCBlbnRyeSBpblxuICogYGF4ZXNgLiBJZiBga2VlcERpbXNgIGlzIHRydWUsIHRoZSByZWR1Y2VkIGRpbWVuc2lvbnMgYXJlIHJldGFpbmVkIHdpdGhcbiAqIGxlbmd0aCAxLiBJZiBheGVzIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGFcbiAqIGB0Zi5UZW5zb3JgIHdpdGggYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogeC5zdW0oKS5wcmludCgpOyAgLy8gb3IgdGYuc3VtKHgpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFsxLCAyLCAzLCA0XSwgWzIsIDJdKTtcbiAqXG4gKiBjb25zdCBheGlzID0gMTtcbiAqIHguc3VtKGF4aXMpLnByaW50KCk7ICAvLyBvciB0Zi5zdW0oeCwgYXhpcylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gY29tcHV0ZSB0aGUgc3VtIG92ZXIuIElmIHRoZSBkdHlwZSBpcyBgYm9vbGBcbiAqICAgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYGludDMyYCBhbmQgdGhlIG91dHB1dCBkdHlwZSB3aWxsIGJlIGBpbnQzMmAuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uKHMpIHRvIHJlZHVjZS4gQnkgZGVmYXVsdCBpdCByZWR1Y2VzXG4gKiAgICAgYWxsIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0ga2VlcERpbXMgSWYgdHJ1ZSwgcmV0YWlucyByZWR1Y2VkIGRpbWVuc2lvbnMgd2l0aCBzaXplIDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc3VtXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3VtJyk7XG4gIGlmICgkeC5kdHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgJHggPSBjYXN0KCR4LCAnaW50MzInKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3VtSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFN1bUF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFN1bSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBzdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { abs } from './abs';\nimport * as axis_util from './axis_util';\nimport { max } from './max';\nimport { min } from './min';\nimport { op } from './operation';\nimport { pow } from './pow';\nimport { reshape } from './reshape';\nimport { scalar } from './scalar';\nimport { sqrt } from './sqrt';\nimport { square } from './square';\nimport { sum } from './sum';\n/**\n * Computes the norm of scalar, vectors, and matrices.\n * This function can compute several different vector norms (the 1-norm, the\n * Euclidean or 2-norm, the inf-norm, and in general the p-norm for p > 0)\n * and matrix norms (Frobenius, 1-norm, and inf-norm).\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.norm().print(); // or tf.norm(x)\n * ```\n *\n * @param x The input array.\n * @param ord Optional. Order of the norm. Supported norm types are\n * following:\n *\n * | ord | norm for matrices | norm for vectors\n * |------------|---------------------------|---------------------\n * |'euclidean' |Frobenius norm |2-norm\n * |'fro' |Frobenius norm\t |\n * |Infinity |max(sum(abs(x), axis=1)) |max(abs(x))\n * |-Infinity |min(sum(abs(x), axis=1)) |min(abs(x))\n * |1 |max(sum(abs(x), axis=0)) |sum(abs(x))\n * |2 | |sum(abs(x)^2)^(1/2)\n *\n * @param axis Optional. If axis is null (the default), the input is\n * considered a vector and a single vector norm is computed over the entire\n * set of values in the Tensor, i.e. norm(x, ord) is equivalent\n * to norm(x.reshape([-1]), ord). If axis is an integer, the input\n * is considered a batch of vectors, and axis determines the axis in x\n * over which to compute vector norms. If axis is a 2-tuple of integer it is\n * considered a batch of matrices and axis determines the axes in NDArray\n * over which to compute a matrix norm.\n * @param keepDims Optional. If true, the norm has the same dimensionality\n * as the input.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction norm_(x, ord = 'euclidean', axis = null, keepDims = false) {\n x = convertToTensor(x, 'x', 'norm');\n const norm = normImpl(x, ord, axis);\n let keepDimsShape = norm.shape;\n if (keepDims) {\n const axes = parseAxisParam(axis, x.shape);\n keepDimsShape = axis_util.expandShapeToKeepDim(norm.shape, axes);\n }\n return reshape(norm, keepDimsShape);\n}\nfunction normImpl(x, p, axis = null) {\n if (x.rank === 0) {\n return abs(x);\n }\n // consider vector when no axis is specified\n if (x.rank !== 1 && axis === null) {\n return normImpl(reshape(x, [-1]), p, axis);\n }\n // vector\n if (x.rank === 1 || typeof axis === 'number' ||\n Array.isArray(axis) && axis.length === 1) {\n if (p === 1) {\n return sum(abs(x), axis);\n }\n if (p === Infinity) {\n return max(abs(x), axis);\n }\n if (p === -Infinity) {\n return min(abs(x), axis);\n }\n if (p === 'euclidean' || p === 2) {\n // norm(x, 2) = sum(abs(xi) ^ 2) ^ 1/2\n return sqrt(sum(pow(abs(x), scalar(2, 'int32')), axis));\n }\n throw new Error(`Error in norm: invalid ord value: ${p}`);\n }\n // matrix (assumption axis[0] < axis[1])\n if (Array.isArray(axis) && axis.length === 2) {\n if (p === 1) {\n return max(sum(abs(x), axis[0]), axis[1] - 1);\n }\n if (p === Infinity) {\n return max(sum(abs(x), axis[1]), axis[0]);\n }\n if (p === -Infinity) {\n return min(sum(abs(x), axis[1]), axis[0]);\n }\n if (p === 'fro' || p === 'euclidean') {\n // norm(x) = sqrt(sum(pow(x, 2)))\n return sqrt(sum(square(x), axis));\n }\n throw new Error(`Error in norm: invalid ord value: ${p}`);\n }\n throw new Error(`Error in norm: invalid axis: ${axis}`);\n}\nexport const norm = /* @__PURE__ */ op({ norm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL25vcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssU0FBUyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsS0FBSyxDQUNWLENBQW9CLEVBQUUsTUFBZ0MsV0FBVyxFQUNqRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDaEQsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXBDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxD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QUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUNwQyxpQ0FBaUM7WUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtwYXJzZUF4aXNQYXJhbX0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7YWJzfSBmcm9tICcuL2Ficyc7XG5pbXBvcnQgKiBhcyBheGlzX3V0aWwgZnJvbSAnLi9heGlzX3V0aWwnO1xuaW1wb3J0IHttYXh9IGZyb20gJy4vbWF4JztcbmltcG9ydCB7bWlufSBmcm9tICcuL21pbic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Bvd30gZnJvbSAnLi9wb3cnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4vc2NhbGFyJztcbmltcG9ydCB7c3FydH0gZnJvbSAnLi9zcXJ0JztcbmltcG9ydCB7c3F1YXJlfSBmcm9tICcuL3NxdWFyZSc7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9zdW0nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBub3JtIG9mIHNjYWxhciwgdmVjdG9ycywgYW5kIG1hdHJpY2VzLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gY29tcHV0ZSBzZXZlcmFsIGRpZmZlcmVudCB2ZWN0b3Igbm9ybXMgKHRoZSAxLW5vcm0sIHRoZVxuICogRXVjbGlkZWFuIG9yIDItbm9ybSwgdGhlIGluZi1ub3JtLCBhbmQgaW4gZ2VuZXJhbCB0aGUgcC1ub3JtIGZvciBwID4gMClcbiAqIGFuZCBtYXRyaXggbm9ybXMgKEZyb2Jlbml1cywgMS1ub3JtLCBhbmQgaW5mLW5vcm0pLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqXG4gKiB4Lm5vcm0oKS5wcmludCgpOyAgLy8gb3IgdGYubm9ybSh4KVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIG9yZCBPcHRpb25hbC4gT3JkZXIgb2YgdGhlIG5vcm0uIFN1cHBvcnRlZCBub3JtIHR5cGVzIGFyZVxuICogZm9sbG93aW5nOlxuICpcbiAqICB8IG9yZCAgICAgICAgfCBub3JtIGZvciBtYXRyaWNlcyAgICAgICAgIHwgbm9ybSBmb3IgdmVjdG9yc1xuICogIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIHwnZXVjbGlkZWFuJyB8RnJvYmVuaXVzIG5vcm0gICAgICAgICAgICAgfDItbm9ybVxuICogIHwnZnJvJyAgICAgICB8RnJvYmVuaXVzIG5vcm1cdCAgICAgICAgICAgfFxuICogIHxJbmZpbml0eSAgICB8bWF4KHN1bShhYnMoeCksIGF4aXM9MSkpICAgfG1heChhYnMoeCkpXG4gKiAgfC1JbmZpbml0eSAgIHxtaW4oc3VtKGFicyh4KSwgYXhpcz0xKSkgICB8bWluKGFicyh4KSlcbiAqICB8MSAgICAgICAgICAgfG1heChzdW0oYWJzKHgpLCBheGlzPTApKSAgIHxzdW0oYWJzKHgpKVxuICogIHwyICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHN1bShhYnMoeCleMileKDEvMilcbiAqXG4gKiBAcGFyYW0gYXhpcyBPcHRpb25hbC4gSWYgYXhpcyBpcyBudWxsICh0aGUgZGVmYXVsdCksIHRoZSBpbnB1dCBpc1xuICogY29uc2lkZXJlZCBhIHZlY3RvciBhbmQgYSBzaW5nbGUgdmVjdG9yIG5vcm0gaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlXG4gKiBzZXQgb2YgdmFsdWVzIGluIHRoZSBUZW5zb3IsIGkuZS4gbm9ybSh4LCBvcmQpIGlzIGVxdWl2YWxlbnRcbiAqIHRvIG5vcm0oeC5yZXNoYXBlKFstMV0pLCBvcmQpLiBJZiBheGlzIGlzIGFuIGludGVnZXIsIHRoZSBpbnB1dFxuICogaXMgY29uc2lkZXJlZCBhIGJhdGNoIG9mIHZlY3RvcnMsIGFuZCBheGlzIGRldGVybWluZXMgdGhlIGF4aXMgaW4geFxuICogb3ZlciB3aGljaCB0byBjb21wdXRlIHZlY3RvciBub3Jtcy4gSWYgYXhpcyBpcyBhIDItdHVwbGUgb2YgaW50ZWdlciBpdCBpc1xuICogY29uc2lkZXJlZCBhIGJhdGNoIG9mIG1hdHJpY2VzIGFuZCBheGlzIGRldGVybWluZXMgdGhlIGF4ZXMgaW4gTkRBcnJheVxuICogb3ZlciB3aGljaCB0byBjb21wdXRlIGEgbWF0cml4IG5vcm0uXG4gKiBAcGFyYW0ga2VlcERpbXMgT3B0aW9uYWwuIElmIHRydWUsIHRoZSBub3JtIGhhcyB0aGUgc2FtZSBkaW1lbnNpb25hbGl0eVxuICogYXMgdGhlIGlucHV0LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gbm9ybV8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIG9yZDogbnVtYmVyfCdldWNsaWRlYW4nfCdmcm8nID0gJ2V1Y2xpZGVhbicsXG4gICAgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFRlbnNvciB7XG4gIHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbm9ybScpO1xuXG4gIGNvbnN0IG5vcm0gPSBub3JtSW1wbCh4LCBvcmQsIGF4aXMpO1xuICBsZXQga2VlcERpbXNTaGFwZSA9IG5vcm0uc2hhcGU7XG4gIGlmIChrZWVwRGltcykge1xuICAgIGNvbnN0IGF4ZXMgPSBwYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKTtcbiAgICBrZWVwRGltc1NoYXBlID0gYXhpc191dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG5vcm0uc2hhcGUsIGF4ZXMpO1xuICB9XG4gIHJldHVybiByZXNoYXBlKG5vcm0sIGtlZXBEaW1zU2hhcGUpO1xufVxuXG5mdW5jdGlvbiBub3JtSW1wbChcbiAgICB4OiBUZW5zb3IsIHA6IG51bWJlcnxzdHJpbmcsIGF4aXM6IG51bWJlcnxudW1iZXJbXSA9IG51bGwpOiBUZW5zb3Ige1xuICBpZiAoeC5yYW5rID09PSAwKSB7XG4gICAgcmV0dXJuIGFicyh4KTtcbiAgfVxuXG4gIC8vIGNvbnNpZGVyIHZlY3RvciB3aGVuIG5vIGF4aXMgaXMgc3BlY2lmaWVkXG4gIGlmICh4LnJhbmsgIT09IDEgJiYgYXhpcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBub3JtSW1wbChyZXNoYXBlKHgsIFstMV0pLCBwLCBheGlzKTtcbiAgfVxuXG4gIC8vIHZlY3RvclxuICBpZiAoeC5yYW5rID09PSAxIHx8IHR5cGVvZiBheGlzID09PSAnbnVtYmVyJyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShheGlzKSAmJiBheGlzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChwID09PSAxKSB7XG4gICAgICByZXR1cm4gc3VtKGFicyh4KSwgYXhpcyk7XG4gICAgfVxuICAgIGlmIChwID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG1heChhYnMoeCksIGF4aXMpO1xuICAgIH1cbiAgICBpZiAocCA9PT0gLUluZmluaXR5KSB7XG4gICAgICByZXR1cm4gbWluKGFicyh4KSwgYXhpcyk7XG4gICAgfVxuICAgIGlmIChwID09PSAnZXVjbGlkZWFuJyB8fCBwID09PSAyKSB7XG4gICAgICAvLyBub3JtKHgsIDIpID0gc3VtKGFicyh4aSkgXiAyKSBeIDEvMlxuICAgICAgcmV0dXJuIHNxcnQoc3VtKHBvdyhhYnMoeCksIHNjYWxhcigyLCAnaW50MzInKSksIGF4aXMpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIG5vcm06IGludmFsaWQgb3JkIHZhbHVlOiAke3B9YCk7XG4gIH1cblxuICAvLyBtYXRyaXggKGFzc3VtcHRpb24gYXhpc1swXSA8IGF4aXNbMV0pXG4gIGlmIChBcnJheS5pc0FycmF5KGF4aXMpICYmIGF4aXMubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHAgPT09IDEpIHtcbiAgICAgIHJldHVybiBtYXgoc3VtKGFicyh4KSwgYXhpc1swXSksIGF4aXNbMV0gLSAxKTtcbiAgICB9XG4gICAgaWYgKHAgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gbWF4KHN1bShhYnMoeCksIGF4aXNbMV0pLCBheGlzWzBdKTtcbiAgICB9XG4gICAgaWYgKHAgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuIG1pbihzdW0oYWJzKHgpLCBheGlzWzFdKSwgYXhpc1swXSk7XG4gICAgfVxuICAgIGlmIChwID09PSAnZnJvJyB8fCBwID09PSAnZXVjbGlkZWFuJykge1xuICAgICAgLy8gbm9ybSh4KSA9IHNxcnQoc3VtKHBvdyh4LCAyKSkpXG4gICAgICByZXR1cm4gc3FydChzdW0oc3F1YXJlKHgpLCBheGlzKSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBub3JtOiBpbnZhbGlkIG9yZCB2YWx1ZTogJHtwfWApO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBub3JtOiBpbnZhbGlkIGF4aXM6ICR7YXhpc31gKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vcm0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vcm1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { norm } from './norm';\nimport { op } from './operation';\n/**\n * Computes the Euclidean norm of scalar, vectors, and matrices.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.euclideanNorm().print(); // or tf.euclideanNorm(x)\n * ```\n *\n * @param x The input array.\n * @param axis Optional. If axis is null (the default), the input is\n * considered a vector and a single vector norm is computed over the entire\n * set of values in the Tensor, i.e. euclideanNorm(x) is equivalent\n * to euclideanNorm(x.reshape([-1])). If axis is an integer, the input\n * is considered a batch of vectors, and axis determines the axis in x\n * over which to compute vector norms. If axis is a 2-tuple of integer it is\n * considered a batch of matrices and axis determines the axes in NDArray\n * over which to compute a matrix norm.\n * @param keepDims Optional. If true, the norm has the same dimensionality\n * as the input.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction euclideanNorm_(x, axis = null, keepDims = false) {\n return norm(x, 'euclidean', axis, keepDims);\n}\nexport const euclideanNorm = /* @__PURE__ */ op({ euclideanNorm_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVjbGlkZWFuX25vcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9ldWNsaWRlYW5fbm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQ2xELFFBQVEsR0FBRyxLQUFLO0lBQ2xCLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7bm9ybX0gZnJvbSAnLi9ub3JtJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgRXVjbGlkZWFuIG5vcm0gb2Ygc2NhbGFyLCB2ZWN0b3JzLCBhbmQgbWF0cmljZXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICpcbiAqIHguZXVjbGlkZWFuTm9ybSgpLnByaW50KCk7ICAvLyBvciB0Zi5ldWNsaWRlYW5Ob3JtKHgpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXhpcyBPcHRpb25hbC4gSWYgYXhpcyBpcyBudWxsICh0aGUgZGVmYXVsdCksIHRoZSBpbnB1dCBpc1xuICogY29uc2lkZXJlZCBhIHZlY3RvciBhbmQgYSBzaW5nbGUgdmVjdG9yIG5vcm0gaXMgY29tcHV0ZWQgb3ZlciB0aGUgZW50aXJlXG4gKiBzZXQgb2YgdmFsdWVzIGluIHRoZSBUZW5zb3IsIGkuZS4gZXVjbGlkZWFuTm9ybSh4KSBpcyBlcXVpdmFsZW50XG4gKiB0byBldWNsaWRlYW5Ob3JtKHgucmVzaGFwZShbLTFdKSkuIElmIGF4aXMgaXMgYW4gaW50ZWdlciwgdGhlIGlucHV0XG4gKiBpcyBjb25zaWRlcmVkIGEgYmF0Y2ggb2YgdmVjdG9ycywgYW5kIGF4aXMgZGV0ZXJtaW5lcyB0aGUgYXhpcyBpbiB4XG4gKiBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgdmVjdG9yIG5vcm1zLiBJZiBheGlzIGlzIGEgMi10dXBsZSBvZiBpbnRlZ2VyIGl0IGlzXG4gKiBjb25zaWRlcmVkIGEgYmF0Y2ggb2YgbWF0cmljZXMgYW5kIGF4aXMgZGV0ZXJtaW5lcyB0aGUgYXhlcyBpbiBOREFycmF5XG4gKiBvdmVyIHdoaWNoIHRvIGNvbXB1dGUgYSBtYXRyaXggbm9ybS5cbiAqIEBwYXJhbSBrZWVwRGltcyBPcHRpb25hbC4gSWYgdHJ1ZSwgdGhlIG5vcm0gaGFzIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5XG4gKiBhcyB0aGUgaW5wdXQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTWF0cmljZXMnfVxuICovXG5mdW5jdGlvbiBldWNsaWRlYW5Ob3JtXyhcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCxcbiAgICBrZWVwRGltcyA9IGZhbHNlKTogVGVuc29yIHtcbiAgcmV0dXJuIG5vcm0oeCwgJ2V1Y2xpZGVhbicsIGF4aXMsIGtlZXBEaW1zKTtcbn1cblxuZXhwb3J0IGNvbnN0IGV1Y2xpZGVhbk5vcm0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2V1Y2xpZGVhbk5vcm1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Exp } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential of the input `tf.Tensor` element-wise. `e ^ x`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.exp().print(); // or tf.exp(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction exp_(x) {\n const $x = convertToTensor(x, 'x', 'exp');\n const inputs = { x: $x };\n return ENGINE.runKernel(Exp, inputs);\n}\nexport const exp = /* @__PURE__ */ op({ exp_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0V4cCwgRXhwSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIGV4cG9uZW50aWFsIG9mIHRoZSBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2UuIGBlIF4geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAtM10pO1xuICpcbiAqIHguZXhwKCkucHJpbnQoKTsgIC8vIG9yIHRmLmV4cCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBleHBfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdleHAnKTtcblxuICBjb25zdCBpbnB1dHM6IEV4cElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEV4cCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGV4cCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ExpandDims } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Returns a `tf.Tensor` that has expanded rank, by inserting a dimension\n * into the tensor's shape.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const axis = 1;\n * x.expandDims(axis).print();\n * ```\n *\n * @param x The input tensor whose dimensions are to be expanded.\n * @param axis The dimension index at which to insert shape of `1`. Defaults\n * to 0 (the first dimension).\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction expandDims_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'expandDims', 'string_or_numeric');\n util.assert(axis <= $x.rank, () => 'Axis must be <= rank of the tensor');\n const inputs = { input: $x };\n const attrs = { dim: axis };\n return ENGINE.runKernel(ExpandDims, inputs, attrs);\n}\nexport const expandDims = /* @__PURE__ */ op({ expandDims_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kX2RpbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9leHBhbmRfZGltcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW9DLE1BQU0saUJBQWlCLENBQUM7QUFJOUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQW9CLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDbkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sTUFBTSxHQUFxQixFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBb0IsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixVQUFVLEVBQUUsTUFBbUMsRUFDL0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtFeHBhbmREaW1zLCBFeHBhbmREaW1zQXR0cnMsIEV4cGFuZERpbXNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyBhIGB0Zi5UZW5zb3JgIHRoYXQgaGFzIGV4cGFuZGVkIHJhbmssIGJ5IGluc2VydGluZyBhIGRpbWVuc2lvblxuICogaW50byB0aGUgdGVuc29yJ3Mgc2hhcGUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LmV4cGFuZERpbXMoYXhpcykucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3Igd2hvc2UgZGltZW5zaW9ucyBhcmUgdG8gYmUgZXhwYW5kZWQuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uIGluZGV4IGF0IHdoaWNoIHRvIGluc2VydCBzaGFwZSBvZiBgMWAuIERlZmF1bHRzXG4gKiAgICAgdG8gMCAodGhlIGZpcnN0IGRpbWVuc2lvbikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gZXhwYW5kRGltc188VCBleHRlbmRzIFRlbnNvcj4oeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2V4cGFuZERpbXMnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcblxuICB1dGlsLmFzc2VydChheGlzIDw9ICR4LnJhbmssICgpID0+ICdBeGlzIG11c3QgYmUgPD0gcmFuayBvZiB0aGUgdGVuc29yJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBFeHBhbmREaW1zSW5wdXRzID0ge2lucHV0OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBFeHBhbmREaW1zQXR0cnMgPSB7ZGltOiBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIEV4cGFuZERpbXMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZXhwYW5kRGltcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwYW5kRGltc199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Expm1 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes exponential of the input `tf.Tensor` minus one element-wise.\n * `e ^ x - 1`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, -3]);\n *\n * x.expm1().print(); // or tf.expm1(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction expm1_(x) {\n const $x = convertToTensor(x, 'x', 'expm1');\n const inputs = { x: $x };\n return ENGINE.runKernel(Expm1, inputs);\n}\nexport const expm1 = /* @__PURE__ */ op({ expm1_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9leHBtMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0V4cG0xLCBFeHBtMUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBleHBvbmVudGlhbCBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgbWludXMgb25lIGVsZW1lbnQtd2lzZS5cbiAqIGBlIF4geCAtIDFgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgLTNdKTtcbiAqXG4gKiB4LmV4cG0xKCkucHJpbnQoKTsgIC8vIG9yIHRmLmV4cG0xKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGV4cG0xXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZXhwbTEnKTtcblxuICBjb25zdCBpbnB1dHM6IEV4cG0xSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoRXhwbTEsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBleHBtMSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXhwbTFffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tile } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Construct a tensor by repeating it the number of times given by reps.\n *\n * This operation creates a new tensor by replicating `input` `reps`\n * times. The output tensor's `i`th dimension has `input.shape[i] *\n * reps[i]` elements, and the values of `input` are replicated\n * `reps[i]` times along the `i`th dimension. For example, tiling\n * `[a, b, c, d]` by `[2]` produces `[a, b, c, d, a, b, c, d]`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n *\n * a.tile([2]).print(); // or tf.tile(a, [2])\n * ```\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.tile([1, 2]).print(); // or tf.tile(a, [1,2])\n * ```\n * @param x The tensor to tile.\n * @param reps Determines the number of replications per dimension.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction tile_(x, reps) {\n const $x = convertToTensor(x, 'x', 'tile', 'string_or_numeric');\n util.assert($x.rank === reps.length, () => `Error in transpose: rank of input ${$x.rank} ` +\n `must match length of reps ${reps}.`);\n const inputs = { x: $x };\n const attrs = { reps };\n return ENGINE.runKernel(Tile, inputs, attrs);\n}\nexport const tile = /* @__PURE__ */ op({ tile_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZSxFQUFFLElBQWM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsSUFBSSxHQUFHO1FBQ2pELDZCQUE2QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFaEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUaWxlLCBUaWxlQXR0cnMsIFRpbGVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29uc3RydWN0IGEgdGVuc29yIGJ5IHJlcGVhdGluZyBpdCB0aGUgbnVtYmVyIG9mIHRpbWVzIGdpdmVuIGJ5IHJlcHMuXG4gKlxuICogVGhpcyBvcGVyYXRpb24gY3JlYXRlcyBhIG5ldyB0ZW5zb3IgYnkgcmVwbGljYXRpbmcgYGlucHV0YCBgcmVwc2BcbiAqIHRpbWVzLiBUaGUgb3V0cHV0IHRlbnNvcidzIGBpYHRoIGRpbWVuc2lvbiBoYXMgYGlucHV0LnNoYXBlW2ldICpcbiAqIHJlcHNbaV1gIGVsZW1lbnRzLCBhbmQgdGhlIHZhbHVlcyBvZiBgaW5wdXRgIGFyZSByZXBsaWNhdGVkXG4gKiBgcmVwc1tpXWAgdGltZXMgYWxvbmcgdGhlIGBpYHRoIGRpbWVuc2lvbi4gRm9yIGV4YW1wbGUsIHRpbGluZ1xuICogYFthLCBiLCBjLCBkXWAgYnkgYFsyXWAgcHJvZHVjZXMgYFthLCBiLCBjLCBkLCBhLCBiLCBjLCBkXWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMl0pO1xuICpcbiAqIGEudGlsZShbMl0pLnByaW50KCk7ICAgIC8vIG9yIHRmLnRpbGUoYSwgWzJdKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogYS50aWxlKFsxLCAyXSkucHJpbnQoKTsgIC8vIG9yIHRmLnRpbGUoYSwgWzEsMl0pXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgdG8gdGlsZS5cbiAqIEBwYXJhbSByZXBzIERldGVybWluZXMgdGhlIG51bWJlciBvZiByZXBsaWNhdGlvbnMgcGVyIGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gdGlsZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlLCByZXBzOiBudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0aWxlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gcmVwcy5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gdHJhbnNwb3NlOiByYW5rIG9mIGlucHV0ICR7JHgucmFua30gYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggbGVuZ3RoIG9mIHJlcHMgJHtyZXBzfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IFRpbGVJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogVGlsZUF0dHJzID0ge3JlcHN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVGlsZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCB0aWxlID0gLyogQF9fUFVSRV9fICovIG9wKHt0aWxlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from './buffer';\nimport { expandDims } from './expand_dims';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { tile } from './tile';\n/**\n * Create an identity matrix.\n *\n * @param numRows Number of rows.\n * @param numColumns Number of columns. Defaults to `numRows`.\n * @param batchShape If provided, will add the batch shape to the beginning\n * of the shape of the returned `tf.Tensor` by repeating the identity\n * matrix.\n * @param dtype Data type.\n * @returns Identity matrix of the specified size and data type, possibly\n * with batch repetition if `batchShape` is specified.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction eye_(numRows, numColumns, batchShape, dtype = 'float32') {\n if (numColumns == null) {\n numColumns = numRows;\n }\n const buff = buffer([numRows, numColumns], dtype);\n const n = numRows <= numColumns ? numRows : numColumns;\n for (let i = 0; i < n; ++i) {\n buff.set(1, i, i);\n }\n const out = reshape(buff.toTensor(), [numRows, numColumns]);\n if (batchShape == null) {\n return out;\n }\n else {\n if (batchShape.length === 1) {\n return tile(expandDims(out, 0), [batchShape[0], 1, 1]);\n }\n else if (batchShape.length === 2) {\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return tile(expandDims(expandDims(out, 0), 0), [batchShape[0], batchShape[1], 1, 1]);\n }\n else if (batchShape.length === 3) {\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return tile(expandDims(expandDims(expandDims(out, 0), 0), 0), [\n batchShape[0], batchShape[1], batchShape[2], 1, 1\n ]);\n }\n else {\n throw new Error(`eye() currently supports only 1D and 2D ` +\n // tslint:disable-next-line:no-any\n `batchShapes, but received ${batchShape.length}D.`);\n }\n }\n}\nexport const eye = /* @__PURE__ */ op({ eye_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXllLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZXllLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1Qjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsT0FBZSxFQUFFLFVBQW1CLEVBQ3BDLFVBSXdFLEVBQ3hFLFFBQWtCLFNBQVM7SUFDN0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLFVBQVUsR0FBRyxPQUFPLENBQUM7S0FDdEI7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxDQUFDLEdBQUcsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLEdBQUcsR0FBYSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTTtRQUNMLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQWEsQ0FBQztTQUNwRTthQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEMseURBQXlEO1lBQ3pELE9BQU8sSUFBSSxDQUNBLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNqQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFhLENBQUM7U0FDOUQ7YUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLHlEQUF5RDtZQUN6RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2xELENBQWEsQ0FBQztTQUN2QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDWCwwQ0FBMEM7Z0JBQzFDLGtDQUFrQztnQkFDbEMsNkJBQThCLFVBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUNsRTtLQUNGO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmltcG9ydCB7ZXhwYW5kRGltc30gZnJvbSAnLi9leHBhbmRfZGltcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3RpbGV9IGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeC5cbiAqXG4gKiBAcGFyYW0gbnVtUm93cyBOdW1iZXIgb2Ygcm93cy5cbiAqIEBwYXJhbSBudW1Db2x1bW5zIE51bWJlciBvZiBjb2x1bW5zLiBEZWZhdWx0cyB0byBgbnVtUm93c2AuXG4gKiBAcGFyYW0gYmF0Y2hTaGFwZSBJZiBwcm92aWRlZCwgd2lsbCBhZGQgdGhlIGJhdGNoIHNoYXBlIHRvIHRoZSBiZWdpbm5pbmdcbiAqICAgb2YgdGhlIHNoYXBlIG9mIHRoZSByZXR1cm5lZCBgdGYuVGVuc29yYCBieSByZXBlYXRpbmcgdGhlIGlkZW50aXR5XG4gKiAgIG1hdHJpeC5cbiAqIEBwYXJhbSBkdHlwZSBEYXRhIHR5cGUuXG4gKiBAcmV0dXJucyBJZGVudGl0eSBtYXRyaXggb2YgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBkYXRhIHR5cGUsIHBvc3NpYmx5XG4gKiAgIHdpdGggYmF0Y2ggcmVwZXRpdGlvbiBpZiBgYmF0Y2hTaGFwZWAgaXMgc3BlY2lmaWVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gZXllXyhcbiAgICBudW1Sb3dzOiBudW1iZXIsIG51bUNvbHVtbnM/OiBudW1iZXIsXG4gICAgYmF0Y2hTaGFwZT86XG4gICAgICAgIFtcbiAgICAgICAgICBudW1iZXJcbiAgICAgICAgXXxbbnVtYmVyLFxuICAgICAgICAgICBudW1iZXJdfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXXxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3IyRCB7XG4gIGlmIChudW1Db2x1bW5zID09IG51bGwpIHtcbiAgICBudW1Db2x1bW5zID0gbnVtUm93cztcbiAgfVxuICBjb25zdCBidWZmID0gYnVmZmVyKFtudW1Sb3dzLCBudW1Db2x1bW5zXSwgZHR5cGUpO1xuICBjb25zdCBuID0gbnVtUm93cyA8PSBudW1Db2x1bW5zID8gbnVtUm93cyA6IG51bUNvbHVtbnM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgYnVmZi5zZXQoMSwgaSwgaSk7XG4gIH1cbiAgY29uc3Qgb3V0OiBUZW5zb3IyRCA9IHJlc2hhcGUoYnVmZi50b1RlbnNvcigpLCBbbnVtUm93cywgbnVtQ29sdW1uc10pO1xuICBpZiAoYmF0Y2hTaGFwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmF0Y2hTaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aWxlKGV4cGFuZERpbXMob3V0LCAwKSwgW2JhdGNoU2hhcGVbMF0sIDEsIDFdKSBhcyBUZW5zb3IyRDtcbiAgICB9IGVsc2UgaWYgKGJhdGNoU2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgIHJldHVybiB0aWxlKFxuICAgICAgICAgICAgICAgICBleHBhbmREaW1zKGV4cGFuZERpbXMob3V0LCAwKSwgMCksXG4gICAgICAgICAgICAgICAgIFtiYXRjaFNoYXBlWzBdLCBiYXRjaFNoYXBlWzFdLCAxLCAxXSkgYXMgVGVuc29yMkQ7XG4gICAgfSBlbHNlIGlmIChiYXRjaFNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICByZXR1cm4gdGlsZShleHBhbmREaW1zKGV4cGFuZERpbXMoZXhwYW5kRGltcyhvdXQsIDApLCAwKSwgMCksIFtcbiAgICAgICAgICAgICAgIGJhdGNoU2hhcGVbMF0sIGJhdGNoU2hhcGVbMV0sIGJhdGNoU2hhcGVbMl0sIDEsIDFcbiAgICAgICAgICAgICBdKSBhcyBUZW5zb3IyRDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBleWUoKSBjdXJyZW50bHkgc3VwcG9ydHMgb25seSAxRCBhbmQgMkQgYCArXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGBiYXRjaFNoYXBlcywgYnV0IHJlY2VpdmVkICR7KGJhdGNoU2hhcGUgYXMgYW55KS5sZW5ndGh9RC5gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGV5ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZXllX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Floor } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes floor of input `tf.Tensor` element-wise: `floor(x)`.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.floor().print(); // or tf.floor(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction floor_(x) {\n const $x = convertToTensor(x, 'x', 'floor', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Floor, inputs);\n}\nexport const floor = /* @__PURE__ */ op({ floor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9mbG9vci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsTUFBTSxDQUFtQixDQUFlO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV2RCxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtGbG9vciwgRmxvb3JJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgZmxvb3Igb2YgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgZmxvb3IoeClgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LmZsb29yKCkucHJpbnQoKTsgIC8vIG9yIHRmLmZsb29yKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGZsb29yXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZmxvb3InLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogRmxvb3JJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChGbG9vciwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IGZsb29yID0gLyogQF9fUFVSRV9fICovIG9wKHtmbG9vcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GatherV2 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Gather slices from tensor `x`'s axis `axis` according to `indices`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const indices = tf.tensor1d([1, 3, 3], 'int32');\n *\n * x.gather(indices).print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const indices = tf.tensor1d([1, 1, 0], 'int32');\n *\n * x.gather(indices).print();\n * ```\n * @param x The input tensor whose slices are to be gathered.\n * @param indices The indices of the values to extract.\n * @param axis The axis over which to select values. Defaults to 0.\n * @param batchDims Optional. The number of batch dimensions. It must be less\n * than or equal to rank(indices). Defaults to 0.\n * The output tensor will have shape of\n * `x.shape[:axis] + indices.shape[batchDims:] + x.shape[axis + 1:]`\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction gather_(x, indices, axis = 0, batchDims = 0) {\n const $x = convertToTensor(x, 'x', 'gather');\n const $indices = convertToTensor(indices, 'indices', 'gather', 'int32');\n const inputs = { x: $x, indices: $indices };\n const attrs = { axis, batchDims };\n return ENGINE.runKernel(GatherV2, inputs, attrs);\n}\nexport const gather = /* @__PURE__ */ op({ gather_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZ2F0aGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBZ0MsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILFNBQVMsT0FBTyxDQUNaLENBQWUsRUFBRSxPQUEwQixFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzFELE1BQU0sS0FBSyxHQUFrQixFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUUvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFFBQVEsRUFBRSxNQUFtQyxFQUM3QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0dhdGhlclYyLCBHYXRoZXJWMkF0dHJzLCBHYXRoZXJWMklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEdhdGhlciBzbGljZXMgZnJvbSB0ZW5zb3IgYHhgJ3MgYXhpcyBgYXhpc2AgYWNjb3JkaW5nIHRvIGBpbmRpY2VzYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzEsIDMsIDNdLCAnaW50MzInKTtcbiAqXG4gKiB4LmdhdGhlcihpbmRpY2VzKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzEsIDEsIDBdLCAnaW50MzInKTtcbiAqXG4gKiB4LmdhdGhlcihpbmRpY2VzKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHdob3NlIHNsaWNlcyBhcmUgdG8gYmUgZ2F0aGVyZWQuXG4gKiBAcGFyYW0gaW5kaWNlcyBUaGUgaW5kaWNlcyBvZiB0aGUgdmFsdWVzIHRvIGV4dHJhY3QuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBvdmVyIHdoaWNoIHRvIHNlbGVjdCB2YWx1ZXMuIERlZmF1bHRzIHRvIDAuXG4gKiBAcGFyYW0gYmF0Y2hEaW1zIE9wdGlvbmFsLiBUaGUgbnVtYmVyIG9mIGJhdGNoIGRpbWVuc2lvbnMuIEl0IG11c3QgYmUgbGVzc1xuICogICAgIHRoYW4gb3IgZXF1YWwgdG8gcmFuayhpbmRpY2VzKS4gRGVmYXVsdHMgdG8gMC5cbiAqICAgICBUaGUgb3V0cHV0IHRlbnNvciB3aWxsIGhhdmUgc2hhcGUgb2ZcbiAqICAgICBgeC5zaGFwZVs6YXhpc10gKyBpbmRpY2VzLnNoYXBlW2JhdGNoRGltczpdICsgeC5zaGFwZVtheGlzICsgMTpdYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBnYXRoZXJfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsIGF4aXMgPSAwLCBiYXRjaERpbXMgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2dhdGhlcicpO1xuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdnYXRoZXInLCAnaW50MzInKTtcblxuICBjb25zdCBpbnB1dHM6IEdhdGhlclYySW5wdXRzID0ge3g6ICR4LCBpbmRpY2VzOiAkaW5kaWNlc307XG4gIGNvbnN0IGF0dHJzOiBHYXRoZXJWMkF0dHJzID0ge2F4aXMsIGJhdGNoRGltc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBHYXRoZXJWMiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBnYXRoZXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2dhdGhlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Greater } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a > b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greater(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction greater_(a, b) {\n let $a = convertToTensor(a, 'a', 'greater', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'greater', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Greater, inputs);\n}\nexport const greater = /* @__PURE__ */ op({ greater_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2dyZWF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBa0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUU3QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0dyZWF0ZXIsIEdyZWF0ZXJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA+IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEuZ3JlYXRlcihiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgaW5wdXQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBncmVhdGVyXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2dyZWF0ZXInLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2dyZWF0ZXInLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKCRhLnNoYXBlLCAkYi5zaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBHcmVhdGVySW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoR3JlYXRlciwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZ3JlYXRlciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z3JlYXRlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GreaterEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a >= b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.greaterEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction greaterEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'greaterEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'greaterEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(GreaterEqual, inputs);\n}\nexport const greaterEqual = /* @__PURE__ */ op({ greaterEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlYXRlcl9lcXVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2dyZWF0ZXJfZXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBR2pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtHcmVhdGVyRXF1YWwsIEdyZWF0ZXJFcXVhbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIChhID49IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEuZ3JlYXRlckVxdWFsKGIpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGdyZWF0ZXJFcXVhbF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdncmVhdGVyRXF1YWwnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2dyZWF0ZXJFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IEdyZWF0ZXJFcXVhbElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEdyZWF0ZXJFcXVhbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgZ3JlYXRlckVxdWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtncmVhdGVyRXF1YWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Imag } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the imaginary part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the imaginary part of each element in input considered as a complex number.\n * If input is real, a tensor of all zeros is returned.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.imag(x).print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction imag_(input) {\n const $input = convertToTensor(input, 'input', 'imag');\n const inputs = { input: $input };\n return ENGINE.runKernel(Imag, inputs);\n}\nexport const imag = /* @__PURE__ */ op({ imag_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsS0FBSyxDQUFtQixLQUFtQjtJQUNsRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2RCxNQUFNLE1BQU0sR0FBZSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7SW1hZywgSW1hZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG4vKipcbiAqIFJldHVybnMgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCAob3IgcmVhbCkgdGVuc29yLlxuICpcbiAqIEdpdmVuIGEgdGVuc29yIGlucHV0LCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIGEgdGVuc29yIG9mIHR5cGUgZmxvYXQgdGhhdCBpc1xuICogdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGVhY2ggZWxlbWVudCBpbiBpbnB1dCBjb25zaWRlcmVkIGFzIGEgY29tcGxleCBudW1iZXIuXG4gKiBJZiBpbnB1dCBpcyByZWFsLCBhIHRlbnNvciBvZiBhbGwgemVyb3MgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KFstMi4yNSwgMy4yNV0sIFs0Ljc1LCA1Ljc1XSk7XG4gKiB0Zi5pbWFnKHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGltYWdfPFQgZXh0ZW5kcyBUZW5zb3I+KGlucHV0OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGlucHV0ID0gY29udmVydFRvVGVuc29yKGlucHV0LCAnaW5wdXQnLCAnaW1hZycpO1xuXG4gIGNvbnN0IGlucHV0czogSW1hZ0lucHV0cyA9IHtpbnB1dDogJGlucHV0fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoSW1hZywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgaW1hZyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aW1hZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsFinite } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are finite.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isFinite().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isFinite_(x) {\n const $x = convertToTensor(x, 'x', 'isFinite');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsFinite, inputs);\n}\nexport const isFinite = /* @__PURE__ */ op({ isFinite_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfZmluaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfZmluaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsU0FBUyxDQUFtQixDQUFlO0lBQ2xELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7SXNGaW5pdGUsIElzRmluaXRlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgd2hpY2ggZWxlbWVudHMgb2YgeCBhcmUgZmluaXRlLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoW05hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgMCwgMV0pO1xuICpcbiAqIHguaXNGaW5pdGUoKS5wcmludCgpOyAgLy8gb3IgdGYuaXNOYU4oeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IFRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gaXNGaW5pdGVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdpc0Zpbml0ZScpO1xuXG4gIGNvbnN0IGlucHV0czogSXNGaW5pdGVJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElzRmluaXRlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgaXNGaW5pdGUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lzRmluaXRlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsInf } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are Infinity or -Infinity.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isInf().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isInf_(x) {\n const $x = convertToTensor(x, 'x', 'isInf');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsInf, inputs);\n}\nexport const isInf = /* @__PURE__ */ op({ isInf_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfaW5mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfaW5mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBR25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxNQUFNLENBQW1CLENBQWU7SUFDL0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJc0luZiwgSXNJbmZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB3aGljaCBlbGVtZW50cyBvZiB4IGFyZSBJbmZpbml0eSBvciAtSW5maW5pdHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbTmFOLCBJbmZpbml0eSwgLUluZmluaXR5LCAwLCAxXSk7XG4gKlxuICogeC5pc0luZigpLnByaW50KCk7ICAvLyBvciB0Zi5pc05hTih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBpc0luZl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2lzSW5mJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBJc0luZklucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoSXNJbmYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBpc0luZiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aXNJbmZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { IsNan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns which elements of x are NaN.\n *\n * ```js\n * const x = tf.tensor1d([NaN, Infinity, -Infinity, 0, 1]);\n *\n * x.isNaN().print(); // or tf.isNaN(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction isNaN_(x) {\n const $x = convertToTensor(x, 'x', 'isNaN');\n const inputs = { x: $x };\n return ENGINE.runKernel(IsNan, inputs);\n}\nexport const isNaN = /* @__PURE__ */ op({ isNaN_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNfbmFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaXNfbmFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBR25ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxNQUFNLENBQW1CLENBQWU7SUFDL0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtJc05hbiwgSXNOYW5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB3aGljaCBlbGVtZW50cyBvZiB4IGFyZSBOYU4uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbTmFOLCBJbmZpbml0eSwgLUluZmluaXR5LCAwLCAxXSk7XG4gKlxuICogeC5pc05hTigpLnByaW50KCk7ICAvLyBvciB0Zi5pc05hTih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgVGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBpc05hTl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2lzTmFOJyk7XG4gIGNvbnN0IGlucHV0czogSXNOYW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElzTmFuLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgaXNOYU4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lzTmFOX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LeakyRelu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes leaky rectified linear element-wise.\n *\n * See\n * [http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf](\n * http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf)\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.leakyRelu(0.1).print(); // or tf.leakyRelu(x, 0.1)\n * ```\n * @param x The input tensor.\n * @param alpha The scaling factor for negative values, defaults to 0.2.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction leakyRelu_(x, alpha = 0.2) {\n const $x = convertToTensor(x, 'x', 'leakyRelu');\n const inputs = { x: $x };\n const attrs = { alpha };\n return ENGINE.runKernel(LeakyRelu, inputs, attrs);\n}\nexport const leakyRelu = /* @__PURE__ */ op({ leakyRelu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVha3lfcmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlYWt5X3JlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxVQUFVLENBQW1CLENBQWUsRUFBRSxLQUFLLEdBQUcsR0FBRztJQUNoRSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVoRCxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQW1CLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFdEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMZWFreVJlbHUsIExlYWt5UmVsdUF0dHJzLCBMZWFreVJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBsZWFreSByZWN0aWZpZWQgbGluZWFyIGVsZW1lbnQtd2lzZS5cbiAqXG4gKiBTZWVcbiAqIFtodHRwOi8vd2ViLnN0YW5mb3JkLmVkdS9+YXduaS9wYXBlcnMvcmVsdV9oeWJyaWRfaWNtbDIwMTNfZmluYWwucGRmXShcbiAqICAgICBodHRwOi8vd2ViLnN0YW5mb3JkLmVkdS9+YXduaS9wYXBlcnMvcmVsdV9oeWJyaWRfaWNtbDIwMTNfZmluYWwucGRmKVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHgubGVha3lSZWx1KDAuMSkucHJpbnQoKTsgIC8vIG9yIHRmLmxlYWt5UmVsdSh4LCAwLjEpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYWxwaGEgVGhlIHNjYWxpbmcgZmFjdG9yIGZvciBuZWdhdGl2ZSB2YWx1ZXMsIGRlZmF1bHRzIHRvIDAuMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbGVha3lSZWx1XzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UsIGFscGhhID0gMC4yKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xlYWt5UmVsdScpO1xuXG4gIGNvbnN0IGlucHV0czogTGVha3lSZWx1SW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IExlYWt5UmVsdUF0dHJzID0ge2FscGhhfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIExlYWt5UmVsdSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZWFreVJlbHUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xlYWt5UmVsdV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Less } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a < b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.less(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction less_(a, b) {\n let $a = convertToTensor(a, 'a', 'less', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'less', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Less, inputs);\n}\nexport const less = /* @__PURE__ */ op({ less_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLEtBQUssQ0FDVixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUUxQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xlc3MsIExlc3NJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cnV0aCB2YWx1ZSBvZiAoYSA8IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMiwgMiwgMl0pO1xuICpcbiAqIGEubGVzcyhiKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTG9naWNhbCd9XG4gKi9cbmZ1bmN0aW9uIGxlc3NfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbGVzcycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbGVzcycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExlc3NJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMZXNzLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZXNzID0gLyogQF9fUFVSRV9fICovIG9wKHtsZXNzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LessEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a <= b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([2, 2, 2]);\n *\n * a.lessEqual(b).print();\n * ```\n *\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction lessEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'lessEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'lessEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LessEqual, inputs);\n}\nexport const lessEqual = /* @__PURE__ */ op({ lessEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVzc19lcXVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xlc3NfZXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsVUFBVSxDQUNmLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbkUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUUvQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xlc3NFcXVhbCwgTGVzc0VxdWFsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHthc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZX0gZnJvbSAnLi9icm9hZGNhc3RfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJ1dGggdmFsdWUgb2YgKGEgPD0gYikgZWxlbWVudC13aXNlLiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsyLCAyLCAyXSk7XG4gKlxuICogYS5sZXNzRXF1YWwoYikucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIGlucHV0IHRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzIGBhYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbGVzc0VxdWFsXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xlc3NFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbGVzc0VxdWFsJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkYS5zaGFwZSwgJGIuc2hhcGUpO1xuXG4gIGNvbnN0IGlucHV0czogTGVzc0VxdWFsSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoTGVzc0VxdWFsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsZXNzRXF1YWwgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xlc3NFcXVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LinSpace } from '../kernel_names';\n/**\n * Return an evenly spaced sequence of numbers over the given interval.\n *\n * ```js\n * tf.linspace(0, 9, 10).print();\n * ```\n * @param start The start value of the sequence.\n * @param stop The end value of the sequence.\n * @param num The number of values to generate.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function linspace(start, stop, num) {\n if (num <= 0) {\n throw new Error('The number of values should be positive.');\n }\n const attrs = { start, stop, num };\n return ENGINE.runKernel(LinSpace, {}, attrs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9saW5zcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFJeEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsR0FBVztJQUMvRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxNQUFNLEtBQUssR0FBa0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ2hELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQWdDLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TGluU3BhY2UsIExpblNwYWNlQXR0cnN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogUmV0dXJuIGFuIGV2ZW5seSBzcGFjZWQgc2VxdWVuY2Ugb2YgbnVtYmVycyBvdmVyIHRoZSBnaXZlbiBpbnRlcnZhbC5cbiAqXG4gKiBgYGBqc1xuICogdGYubGluc3BhY2UoMCwgOSwgMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzdGFydCBUaGUgc3RhcnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlLlxuICogQHBhcmFtIHN0b3AgVGhlIGVuZCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UuXG4gKiBAcGFyYW0gbnVtIFRoZSBudW1iZXIgb2YgdmFsdWVzIHRvIGdlbmVyYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpbnNwYWNlKHN0YXJ0OiBudW1iZXIsIHN0b3A6IG51bWJlciwgbnVtOiBudW1iZXIpOiBUZW5zb3IxRCB7XG4gIGlmIChudW0gPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG51bWJlciBvZiB2YWx1ZXMgc2hvdWxkIGJlIHBvc2l0aXZlLicpO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IExpblNwYWNlQXR0cnMgPSB7c3RhcnQsIHN0b3AsIG51bX07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKExpblNwYWNlLCB7fSwgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LRN } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Normalizes the activation of a local neighborhood across or within\n * channels.\n *\n * @param x The input tensor. The 4-D input tensor is treated as a 3-D array\n * of 1D vectors (along the last dimension), and each vector is\n * normalized independently.\n * @param depthRadius The number of adjacent channels in the 1D normalization\n * window.\n * @param bias A constant bias term for the basis.\n * @param alpha A scale factor, usually positive.\n * @param beta An exponent.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction localResponseNormalization_(x, depthRadius = 5, bias = 1, alpha = 1, beta = 0.5) {\n const $x = convertToTensor(x, 'x', 'localResponseNormalization');\n util.assert($x.rank === 4 || $x.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${$x.rank}.`);\n util.assert(util.isInt(depthRadius), () => `Error in localResponseNormalization: depthRadius must be an ` +\n `integer but got depthRadius ${depthRadius}.`);\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n const inputs = { x: x4D };\n const attrs = { depthRadius, bias, alpha, beta };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(LRN, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n else {\n return res;\n }\n}\nexport const localResponseNormalization = /* @__PURE__ */ op({ localResponseNormalization_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxfcmVzcG9uc2Vfbm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvY2FsX3Jlc3BvbnNlX25vcm1hbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFzQixNQUFNLGlCQUFpQixDQUFDO0FBSXpELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLDJCQUEyQixDQUNoQyxDQUFlLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUc7SUFDbkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQztzQkFDVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLDhEQUE4RDtRQUNoRSwrQkFBK0IsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV2RCxJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUVuQyxNQUFNLEtBQUssR0FBYSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBRXpELDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLEdBQUcsRUFBRSxNQUFtQyxFQUN4QyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO1NBQU07UUFDTCxPQUFPLEdBQUcsQ0FBQztLQUNaO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQywyQkFBMkIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMUk4sIExSTkF0dHJzLCBMUk5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgYWN0aXZhdGlvbiBvZiBhIGxvY2FsIG5laWdoYm9yaG9vZCBhY3Jvc3Mgb3Igd2l0aGluXG4gKiBjaGFubmVscy5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBUaGUgNC1EIGlucHV0IHRlbnNvciBpcyB0cmVhdGVkIGFzIGEgMy1EIGFycmF5XG4gKiAgICAgb2YgMUQgdmVjdG9ycyAoYWxvbmcgdGhlIGxhc3QgZGltZW5zaW9uKSwgYW5kIGVhY2ggdmVjdG9yIGlzXG4gKiAgICAgbm9ybWFsaXplZCBpbmRlcGVuZGVudGx5LlxuICogQHBhcmFtIGRlcHRoUmFkaXVzIFRoZSBudW1iZXIgb2YgYWRqYWNlbnQgY2hhbm5lbHMgaW4gdGhlIDFEIG5vcm1hbGl6YXRpb25cbiAqICAgICB3aW5kb3cuXG4gKiBAcGFyYW0gYmlhcyBBIGNvbnN0YW50IGJpYXMgdGVybSBmb3IgdGhlIGJhc2lzLlxuICogQHBhcmFtIGFscGhhIEEgc2NhbGUgZmFjdG9yLCB1c3VhbGx5IHBvc2l0aXZlLlxuICogQHBhcmFtIGJldGEgQW4gZXhwb25lbnQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnTm9ybWFsaXphdGlvbid9XG4gKi9cbmZ1bmN0aW9uIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZGVwdGhSYWRpdXMgPSA1LCBiaWFzID0gMSwgYWxwaGEgPSAxLCBiZXRhID0gMC41KTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gNCB8fCAkeC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uOiB4IG11c3QgYmUgcmFuayAzIG9yIDQgYnV0IGdvdFxuICAgICAgICAgICAgICAgcmFuayAkeyR4LnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHV0aWwuaXNJbnQoZGVwdGhSYWRpdXMpLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uOiBkZXB0aFJhZGl1cyBtdXN0IGJlIGFuIGAgK1xuICAgICAgICAgIGBpbnRlZ2VyIGJ1dCBnb3QgZGVwdGhSYWRpdXMgJHtkZXB0aFJhZGl1c30uYCk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSAzKSB7XG4gICAgcmVzaGFwZWRUbzREID0gdHJ1ZTtcbiAgICB4NEQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBMUk5JbnB1dHMgPSB7eDogeDREfTtcblxuICBjb25zdCBhdHRyczogTFJOQXR0cnMgPSB7ZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBMUk4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9uID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2NhbFJlc3BvbnNlTm9ybWFsaXphdGlvbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Log } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes natural logarithm of the input `tf.Tensor` element-wise: `ln(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E]);\n *\n * x.log().print(); // or tf.log(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction log_(x) {\n const $x = convertToTensor(x, 'x', 'log', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Log, inputs);\n}\nexport const log = /* @__PURE__ */ op({ log_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtMb2csIExvZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgbG4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgTWF0aC5FXSk7XG4gKlxuICogeC5sb2coKS5wcmludCgpOyAgLy8gb3IgdGYubG9nKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIGxvZ188VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZycsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBMb2dJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2csIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBsb2cgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Log1p } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes natural logarithm of the input `tf.Tensor` plus one\n * element-wise: `ln(1 + x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, Math.E - 1]);\n *\n * x.log1p().print(); // or tf.log1p(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction log1p_(x) {\n const $x = convertToTensor(x, 'x', 'log1p');\n const inputs = { x: $x };\n return ENGINE.runKernel(Log1p, inputs);\n}\nexport const log1p = /* @__PURE__ */ op({ log1p_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nMXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2cxcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xvZzFwLCBMb2cxcElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgcGx1cyBvbmVcbiAqIGVsZW1lbnQtd2lzZTogYGxuKDEgKyB4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCBNYXRoLkUgLSAxXSk7XG4gKlxuICogeC5sb2cxcCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2cxcCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBsb2cxcF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZzFwJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBMb2cxcElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKExvZzFwLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgbG9nMXAgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZzFwX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { Tensor, Variable } from './tensor';\nimport { convertToTensor, convertToTensorArray } from './tensor_util_env';\nimport * as util from './util';\n/**\n * Provided `f(x)`, returns another function `g(x, dy?)`, which gives the\n * gradient of `f(x)` with respect to `x`.\n *\n * If `dy` is provided, the gradient of `f(x).mul(dy).sum()` with respect to\n * `x` is computed instead. `f(x)` must take a single tensor `x` and return a\n * single tensor `y`. If `f()` takes multiple inputs, use `tf.grads` instead.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.grad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * g(x).print();\n * ```\n *\n * ```js\n * // f(x) = x ^ 3\n * const f = x => x.pow(tf.scalar(3, 'int32'));\n * // f'(x) = 3x ^ 2\n * const g = tf.grad(f);\n * // f''(x) = 6x\n * const gg = tf.grad(g);\n *\n * const x = tf.tensor1d([2, 3]);\n * gg(x).print();\n * ```\n *\n * @param f The function f(x), to compute gradient for.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction grad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in grad(f) must be a function');\n return (x, dy) => {\n // x can be of any dtype, thus null as the last argument.\n const $x = convertToTensor(x, 'x', 'tf.grad', 'string_or_numeric');\n const $dy = (dy != null) ? convertToTensor(dy, 'dy', 'tf.grad') : null;\n return ENGINE.tidy(() => {\n const { value, grads } = ENGINE.gradients(() => f($x), [$x], $dy);\n if ($dy != null) {\n util.assertShapesMatch(value.shape, $dy.shape, 'The shape of dy passed in grad(f)(x, dy) must match the shape ' +\n 'returned by f(x)');\n }\n checkGrads(grads);\n return grads[0];\n });\n };\n}\n/**\n * Provided `f(x1, x2,...)`, returns another function `g([x1, x2,...], dy?)`,\n * which gives an array of gradients of `f()` with respect to each input\n * [`x1`,`x2`,...].\n *\n * If `dy` is passed when calling `g()`, the gradient of\n * `f(x1,...).mul(dy).sum()` with respect to each input is computed instead.\n * The provided `f` must take one or more tensors and return a single tensor\n * `y`. If `f()` takes a single input, we recommend using `tf.grad` instead.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df / da = b, df / db = a\n * const g = tf.grads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const [da, db] = g([a, b]);\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n *\n * @param f The function `f(x1, x2,...)` to compute gradients for.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction grads(f) {\n util.assert(util.isFunction(f), () => 'The f passed in grads(f) must be a function');\n return (args, dy) => {\n util.assert(Array.isArray(args), () => 'The args passed in grads(f)(args) must be an array ' +\n 'of `Tensor`s or `TensorLike`s');\n // args can be of any dtype, thus null as the last argument.\n const $args = convertToTensorArray(args, 'args', 'tf.grads', 'string_or_numeric');\n const $dy = (dy != null) ? convertToTensor(dy, 'dy', 'tf.grads') : null;\n return ENGINE.tidy(() => {\n const { value, grads } = ENGINE.gradients(() => f(...$args), $args, $dy);\n if ($dy != null) {\n util.assertShapesMatch(value.shape, $dy.shape, 'The shape of dy passed in grads(f)([x1,...], dy) must ' +\n 'match the shape returned by f([x1,...])');\n }\n checkGrads(grads);\n return grads;\n });\n };\n}\n/**\n * Like `tf.grad`, but also returns the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grad: The gradient of `f(x)` w.r.t. `x` (result of `tf.grad`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(x) = x ^ 2\n * const f = x => x.square();\n * // f'(x) = 2x\n * const g = tf.valueAndGrad(f);\n *\n * const x = tf.tensor1d([2, 3]);\n * const {value, grad} = g(x);\n *\n * console.log('value');\n * value.print();\n * console.log('grad');\n * grad.print();\n * ```\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction valueAndGrad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in valueAndGrad(f) must be a function');\n return (x, dy) => {\n util.assert(x instanceof Tensor, () => 'The x passed in valueAndGrad(f)(x) must be a tensor');\n util.assert(dy == null || dy instanceof Tensor, () => 'The dy passed in valueAndGrad(f)(x, dy) must be a tensor');\n const { grads, value } = ENGINE.gradients(() => f(x), [x], dy);\n checkGrads(grads);\n return { grad: grads[0], value };\n };\n}\n/**\n * Like `tf.grads`, but returns also the value of `f()`. Useful when `f()`\n * returns a metric you want to show.\n *\n * The result is a rich object with the following properties:\n * - grads: The gradients of `f()` w.r.t. each input (result of `tf.grads`).\n * - value: The value returned by `f(x)`.\n *\n * ```js\n * // f(a, b) = a * b\n * const f = (a, b) => a.mul(b);\n * // df/da = b, df/db = a\n * const g = tf.valueAndGrads(f);\n *\n * const a = tf.tensor1d([2, 3]);\n * const b = tf.tensor1d([-2, -3]);\n * const {value, grads} = g([a, b]);\n *\n * const [da, db] = grads;\n *\n * console.log('value');\n * value.print();\n *\n * console.log('da');\n * da.print();\n * console.log('db');\n * db.print();\n * ```\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction valueAndGrads(f) {\n util.assert(util.isFunction(f), () => 'The f passed in valueAndGrads(f) must be a function');\n return (args, dy) => {\n util.assert(Array.isArray(args) && args.every(arg => arg instanceof Tensor), () => 'The args passed in valueAndGrads(f)(args) must be array of ' +\n 'tensors');\n util.assert(dy == null || dy instanceof Tensor, () => 'The dy passed in valueAndGrads(f)(args, dy) must be a tensor');\n const res = ENGINE.gradients(() => f(...args), args, dy);\n if (dy != null) {\n util.assertShapesMatch(res.value.shape, dy.shape, 'The shape of dy passed in valueAndGrads(f)([x1,...], dy) must ' +\n 'match the shape returned by f([x1,...])');\n }\n checkGrads(res.grads);\n return res;\n };\n}\n/**\n * Computes and returns the gradient of f(x) with respect to the list of\n * trainable variables provided by `varList`. If no list is provided, it\n * defaults to all trainable variables.\n *\n * ```js\n * const a = tf.variable(tf.tensor1d([3, 4]));\n * const b = tf.variable(tf.tensor1d([5, 6]));\n * const x = tf.tensor1d([1, 2]);\n *\n * // f(a, b) = a * x ^ 2 + b * x\n * const f = () => a.mul(x.square()).add(b.mul(x)).sum();\n * // df/da = x ^ 2, df/db = x\n * const {value, grads} = tf.variableGrads(f);\n *\n * Object.keys(grads).forEach(varName => grads[varName].print());\n * ```\n *\n * @param f The function to execute. f() should return a scalar.\n * @param varList The list of variables to compute the gradients with respect\n * to. Defaults to all trainable variables.\n * @returns An object with the following keys and values:\n * - `value`: The value of the function `f`.\n * - `grads`: A map from the names of the variables to the gradients.\n * If the `varList` argument is provided explicitly and contains a subset of\n * non-trainable variables, this map in the return value will contain keys\n * that map the names of the non-trainable variables to `null`.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction variableGrads(f, varList) {\n util.assert(util.isFunction(f), () => 'The f passed in variableGrads(f) must be a function');\n util.assert(varList == null ||\n Array.isArray(varList) && varList.every(v => v instanceof Variable), () => 'The varList passed in variableGrads(f, varList) must be an array ' +\n 'of variables');\n const specifiedVarList = varList != null;\n if (!specifiedVarList) {\n // Get all of the trainable variables.\n varList = [];\n for (const varName in ENGINE.registeredVariables) {\n varList.push(ENGINE.registeredVariables[varName]);\n }\n }\n const specifiedNonTrainable = specifiedVarList ? varList.filter(variable => !variable.trainable) : null;\n // Prune non-trainable variables.\n const originalVarCount = varList.length;\n varList = varList.filter(variable => variable.trainable);\n util.assert(varList.length > 0, () => `variableGrads() expects at least one of the input variables to ` +\n `be trainable, but none of the ${originalVarCount} variables is ` +\n `trainable.`);\n const allowNoGradients = true;\n const { value, grads } = ENGINE.gradients(f, varList, null, allowNoGradients);\n util.assert(grads.some(g => g != null), () => 'Cannot find a connection between any variable and the result of ' +\n 'the loss function y=f(x). Please make sure the operations that ' +\n 'use variables are inside the function f passed to minimize().');\n util.assert(value.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it ` +\n `returned a rank-${value.rank} tensor`);\n const namedGrads = {};\n varList.forEach((v, i) => {\n if (grads[i] != null) {\n namedGrads[v.name] = grads[i];\n }\n });\n if (specifiedNonTrainable != null) {\n // If varList is explicitly provided and contains non-trainable values,\n // add them to the returned gradients with `null` values.\n specifiedNonTrainable.forEach(v => namedGrads[v.name] = null);\n }\n return { value, grads: namedGrads };\n}\n/**\n * Overrides the gradient computation of a function `f`.\n *\n * Takes a function\n * `f(...inputs, save) => {value: Tensor, gradFunc: (dy, saved) => Tensor[]}`\n * and returns another function `g(...inputs)` which takes the same inputs as\n * `f`. When called, `g` returns `f().value`. In backward mode, custom gradients\n * with respect to each input of `f` are computed using `f().gradFunc`.\n *\n * The `save` function passed to `f` should be used for saving tensors needed\n * in the gradient. And the `saved` passed to the `gradFunc` is a\n * `NamedTensorMap`, which contains those saved tensors.\n *\n * ```js\n * const customOp = tf.customGrad((x, save) => {\n * // Save x to make sure it's available later for the gradient.\n * save([x]);\n * // Override gradient of our custom x ^ 2 op to be dy * abs(x);\n * return {\n * value: x.square(),\n * // Note `saved.x` which points to the `x` we saved earlier.\n * gradFunc: (dy, saved) => [dy.mul(saved[0].abs())]\n * };\n * });\n *\n * const x = tf.tensor1d([-1, -2, 3]);\n * const dx = tf.grad(x => customOp(x));\n *\n * console.log(`f(x):`);\n * customOp(x).print();\n * console.log(`f'(x):`);\n * dx(x).print();\n * ```\n *\n * @param f The function to evaluate in forward mode, which should return\n * `{value: Tensor, gradFunc: (dy, saved) => Tensor[]}`, where `gradFunc`\n * returns the custom gradients of `f` with respect to its inputs.\n *\n * @doc {heading: 'Training', subheading: 'Gradients'}\n */\nfunction customGrad(f) {\n return ENGINE.customGrad(f);\n}\nfunction checkGrads(grads) {\n const numNullGradients = grads.filter(g => g == null).length;\n if (numNullGradients > 0) {\n throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.`);\n }\n}\nexport { customGrad, variableGrads, valueAndGrad, valueAndGrads, grad, grads, };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9ncmFkaWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFxQixNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxFQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRXhFLE9BQU8sS0FBSyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLElBQUksQ0FBQyxDQUF3QjtJQUVwQyxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsQ0FBb0IsRUFBRSxFQUFzQixFQUFVLEVBQUU7UUFDOUQseURBQXlEO1FBQ3pELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUNMLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFB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LEVBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILFNBQVMsVUFBVSxDQUFtQixDQUF3QjtJQUU1RCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWU7SUFDakMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUNYO29FQUM0RCxDQUFDLENBQUM7S0FDbkU7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxHQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q3VzdG9tR3JhZGllbnRGdW5jLCBFTkdJTkV9IGZyb20gJy4vZW5naW5lJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFZhcmlhYmxlfSBmcm9tICcuL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvciwgY29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogUHJvdmlkZWQgYGYoeClgLCByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24gYGcoeCwgZHk/KWAsIHdoaWNoIGdpdmVzIHRoZVxuICogZ3JhZGllbnQgb2YgYGYoeClgIHdpdGggcmVzcGVjdCB0byBgeGAuXG4gKlxuICogSWYgYGR5YCBpcyBwcm92aWRlZCwgdGhlIGdyYWRpZW50IG9mIGBmKHgpLm11bChkeSkuc3VtKClgIHdpdGggcmVzcGVjdCB0b1xuICogYHhgIGlzIGNvbXB1dGVkIGluc3RlYWQuIGBmKHgpYCBtdXN0IHRha2UgYSBzaW5nbGUgdGVuc29yIGB4YCBhbmQgcmV0dXJuIGFcbiAqIHNpbmdsZSB0ZW5zb3IgYHlgLiBJZiBgZigpYCB0YWtlcyBtdWx0aXBsZSBpbnB1dHMsIHVzZSBgdGYuZ3JhZHNgIGluc3RlYWQuXG4gKlxuICogYGBganNcbiAqIC8vIGYoeCkgPSB4IF4gMlxuICogY29uc3QgZiA9IHggPT4geC5zcXVhcmUoKTtcbiAqIC8vIGYnKHgpID0gMnhcbiAqIGNvbnN0IGcgPSB0Zi5ncmFkKGYpO1xuICpcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMiwgM10pO1xuICogZyh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIGYoeCkgPSB4IF4gM1xuICogY29uc3QgZiA9IHggPT4geC5wb3codGYuc2NhbGFyKDMsICdpbnQzMicpKTtcbiAqIC8vIGYnKHgpID0gM3ggXiAyXG4gKiBjb25zdCBnID0gdGYuZ3JhZChmKTtcbiAqIC8vIGYnJyh4KSA9IDZ4XG4gKiBjb25zdCBnZyA9IHRmLmdyYWQoZyk7XG4gKlxuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsyLCAzXSk7XG4gKiBnZyh4KS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIGYoeCksIHRvIGNvbXB1dGUgZ3JhZGllbnQgZm9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBncmFkKGY6ICh4OiBUZW5zb3IpID0+IFRlbnNvcik6IChcbiAgICB4OiBUZW5zb3JMaWtlfFRlbnNvciwgZHk/OiBUZW5zb3JMaWtlfFRlbnNvcikgPT4gVGVuc29yIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmlzRnVuY3Rpb24oZiksICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gZ3JhZChmKSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgcmV0dXJuICh4OiBUZW5zb3JMaWtlfFRlbnNvciwgZHk/OiBUZW5zb3JMaWtlfFRlbnNvcik6IFRlbnNvciA9PiB7XG4gICAgLy8geCBjYW4gYmUgb2YgYW55IGR0eXBlLCB0aHVzIG51bGwgYXMgdGhlIGxhc3QgYXJndW1lbnQuXG4gICAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndGYuZ3JhZCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICAgIGNvbnN0ICRkeTogVGVuc29yID1cbiAgICAgICAgKGR5ICE9IG51bGwpID8gY29udmVydFRvVGVuc29yKGR5LCAnZHknLCAndGYuZ3JhZCcpIDogbnVsbDtcbiAgICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlLCBncmFkc30gPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoJHgpLCBbJHhdLCAkZHkpO1xuICAgICAgaWYgKCRkeSAhPSBudWxsKSB7XG4gICAgICAgIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAgICAgICB2YWx1ZS5zaGFwZSwgJGR5LnNoYXBlLFxuICAgICAgICAgICAgJ1RoZSBzaGFwZSBvZiBkeSBwYXNzZWQgaW4gZ3JhZChmKSh4LCBkeSkgbXVzdCBtYXRjaCB0aGUgc2hhcGUgJyArXG4gICAgICAgICAgICAgICAgJ3JldHVybmVkIGJ5IGYoeCknKTtcbiAgICAgIH1cbiAgICAgIGNoZWNrR3JhZHMoZ3JhZHMpO1xuICAgICAgcmV0dXJuIGdyYWRzWzBdO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVkIGBmKHgxLCB4MiwuLi4pYCwgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uIGBnKFt4MSwgeDIsLi4uXSwgZHk/KWAsXG4gKiB3aGljaCBnaXZlcyBhbiBhcnJheSBvZiBncmFkaWVudHMgb2YgYGYoKWAgd2l0aCByZXNwZWN0IHRvIGVhY2ggaW5wdXRcbiAqIFtgeDFgLGB4MmAsLi4uXS5cbiAqXG4gKiBJZiBgZHlgIGlzIHBhc3NlZCB3aGVuIGNhbGxpbmcgYGcoKWAsIHRoZSBncmFkaWVudCBvZlxuICogYGYoeDEsLi4uKS5tdWwoZHkpLnN1bSgpYCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBpbnB1dCBpcyBjb21wdXRlZCBpbnN0ZWFkLlxuICogVGhlIHByb3ZpZGVkIGBmYCBtdXN0IHRha2Ugb25lIG9yIG1vcmUgdGVuc29ycyBhbmQgcmV0dXJuIGEgc2luZ2xlIHRlbnNvclxuICogYHlgLiBJZiBgZigpYCB0YWtlcyBhIHNpbmdsZSBpbnB1dCwgd2UgcmVjb21tZW5kIHVzaW5nIGB0Zi5ncmFkYCBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBmKGEsIGIpID0gYSAqIGJcbiAqIGNvbnN0IGYgPSAoYSwgYikgPT4gYS5tdWwoYik7XG4gKiAvLyBkZiAvIGRhID0gYiwgZGYgLyBkYiA9IGFcbiAqIGNvbnN0IGcgPSB0Zi5ncmFkcyhmKTtcbiAqXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbLTIsIC0zXSk7XG4gKiBjb25zdCBbZGEsIGRiXSA9IGcoW2EsIGJdKTtcbiAqIGNvbnNvbGUubG9nKCdkYScpO1xuICogZGEucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdkYicpO1xuICogZGIucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBmIFRoZSBmdW5jdGlvbiBgZih4MSwgeDIsLi4uKWAgdG8gY29tcHV0ZSBncmFkaWVudHMgZm9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBncmFkcyhmOiAoLi4uYXJnczogVGVuc29yW10pID0+IFRlbnNvcik6IChcbiAgICBhcmdzOiBBcnJheTxUZW5zb3J8VGVuc29yTGlrZT4sIGR5PzogVGVuc29yfFRlbnNvckxpa2UpID0+IFRlbnNvcltdIHtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmlzRnVuY3Rpb24oZiksICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gZ3JhZHMoZikgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIHJldHVybiAoYXJnczogQXJyYXk8VGVuc29yfFRlbnNvckxpa2U+LCBkeT86IFRlbnNvcnxUZW5zb3JMaWtlKTogVGVuc29yW10gPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBBcnJheS5pc0FycmF5KGFyZ3MpLFxuICAgICAgICAoKSA9PiAnVGhlIGFyZ3MgcGFzc2VkIGluIGdyYWRzKGYpKGFyZ3MpIG11c3QgYmUgYW4gYXJyYXkgJyArXG4gICAgICAgICAgICAnb2YgYFRlbnNvcmBzIG9yIGBUZW5zb3JMaWtlYHMnKTtcbiAgICAvLyBhcmdzIGNhbiBiZSBvZiBhbnkgZHR5cGUsIHRodXMgbnVsbCBhcyB0aGUgbGFzdCBhcmd1bWVudC5cbiAgICBjb25zdCAkYXJncyA9XG4gICAgICAgIGNvbnZlcnRUb1RlbnNvckFycmF5KGFyZ3MsICdhcmdzJywgJ3RmLmdyYWRzJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gICAgY29uc3QgJGR5OiBUZW5zb3IgPVxuICAgICAgICAoZHkgIT0gbnVsbCkgPyBjb252ZXJ0VG9UZW5zb3IoZHksICdkeScsICd0Zi5ncmFkcycpIDogbnVsbDtcbiAgICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgICAgY29uc3Qge3ZhbHVlLCBncmFkc30gPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoLi4uJGFyZ3MpLCAkYXJncywgJGR5KTtcbiAgICAgIGlmICgkZHkgIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgICAgICAgdmFsdWUuc2hhcGUsICRkeS5zaGFwZSxcbiAgICAgICAgICAgICdUaGUgc2hhcGUgb2YgZHkgcGFzc2VkIGluIGdyYWRzKGYpKFt4MSwuLi5dLCBkeSkgbXVzdCAnICtcbiAgICAgICAgICAgICAgICAnbWF0Y2ggdGhlIHNoYXBlIHJldHVybmVkIGJ5IGYoW3gxLC4uLl0pJyk7XG4gICAgICB9XG4gICAgICBjaGVja0dyYWRzKGdyYWRzKTtcbiAgICAgIHJldHVybiBncmFkcztcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBMaWtlIGB0Zi5ncmFkYCwgYnV0IGFsc28gcmV0dXJucyB0aGUgdmFsdWUgb2YgYGYoKWAuIFVzZWZ1bCB3aGVuIGBmKClgXG4gKiByZXR1cm5zIGEgbWV0cmljIHlvdSB3YW50IHRvIHNob3cuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBhIHJpY2ggb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBncmFkOiBUaGUgZ3JhZGllbnQgb2YgYGYoeClgIHcuci50LiBgeGAgKHJlc3VsdCBvZiBgdGYuZ3JhZGApLlxuICogLSB2YWx1ZTogVGhlIHZhbHVlIHJldHVybmVkIGJ5IGBmKHgpYC5cbiAqXG4gKiBgYGBqc1xuICogLy8gZih4KSA9IHggXiAyXG4gKiBjb25zdCBmID0geCA9PiB4LnNxdWFyZSgpO1xuICogLy8gZicoeCkgPSAyeFxuICogY29uc3QgZyA9IHRmLnZhbHVlQW5kR3JhZChmKTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IHt2YWx1ZSwgZ3JhZH0gPSBnKHgpO1xuICpcbiAqIGNvbnNvbGUubG9nKCd2YWx1ZScpO1xuICogdmFsdWUucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdncmFkJyk7XG4gKiBncmFkLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFsdWVBbmRHcmFkPEkgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KGY6ICh4OiBJKSA9PiBPKTogKFxuICAgIHg6IEksIGR5PzogTykgPT4ge1xuICB2YWx1ZTogTztcbiAgZ3JhZDogSTtcbn0ge1xuICB1dGlsLmFzc2VydChcbiAgICAgIHV0aWwuaXNGdW5jdGlvbihmKSxcbiAgICAgICgpID0+ICdUaGUgZiBwYXNzZWQgaW4gdmFsdWVBbmRHcmFkKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gKHg6IEksIGR5PzogTykgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICB4IGluc3RhbmNlb2YgVGVuc29yLFxuICAgICAgICAoKSA9PiAnVGhlIHggcGFzc2VkIGluIHZhbHVlQW5kR3JhZChmKSh4KSBtdXN0IGJlIGEgdGVuc29yJyk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGR5ID09IG51bGwgfHwgZHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZChmKSh4LCBkeSkgbXVzdCBiZSBhIHRlbnNvcicpO1xuICAgIGNvbnN0IHtncmFkcywgdmFsdWV9ID0gRU5HSU5FLmdyYWRpZW50cygoKSA9PiBmKHgpLCBbeF0sIGR5KTtcbiAgICBjaGVja0dyYWRzKGdyYWRzKTtcbiAgICByZXR1cm4ge2dyYWQ6IGdyYWRzWzBdIGFzIEksIHZhbHVlfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBMaWtlIGB0Zi5ncmFkc2AsIGJ1dCByZXR1cm5zIGFsc28gdGhlIHZhbHVlIG9mIGBmKClgLiBVc2VmdWwgd2hlbiBgZigpYFxuICogcmV0dXJucyBhIG1ldHJpYyB5b3Ugd2FudCB0byBzaG93LlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYSByaWNoIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIC0gZ3JhZHM6IFRoZSBncmFkaWVudHMgb2YgYGYoKWAgdy5yLnQuIGVhY2ggaW5wdXQgKHJlc3VsdCBvZiBgdGYuZ3JhZHNgKS5cbiAqIC0gdmFsdWU6IFRoZSB2YWx1ZSByZXR1cm5lZCBieSBgZih4KWAuXG4gKlxuICogYGBganNcbiAqIC8vIGYoYSwgYikgPSBhICogYlxuICogY29uc3QgZiA9IChhLCBiKSA9PiBhLm11bChiKTtcbiAqIC8vIGRmL2RhID0gYiwgZGYvZGIgPSBhXG4gKiBjb25zdCBnID0gdGYudmFsdWVBbmRHcmFkcyhmKTtcbiAqXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbLTIsIC0zXSk7XG4gKiBjb25zdCB7dmFsdWUsIGdyYWRzfSA9IGcoW2EsIGJdKTtcbiAqXG4gKiBjb25zdCBbZGEsIGRiXSA9IGdyYWRzO1xuICpcbiAqIGNvbnNvbGUubG9nKCd2YWx1ZScpO1xuICogdmFsdWUucHJpbnQoKTtcbiAqXG4gKiBjb25zb2xlLmxvZygnZGEnKTtcbiAqIGRhLnByaW50KCk7XG4gKiBjb25zb2xlLmxvZygnZGInKTtcbiAqIGRiLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFsdWVBbmRHcmFkczxPIGV4dGVuZHMgVGVuc29yPihmOiAoLi4uYXJnczogVGVuc29yW10pID0+IE8pOiAoXG4gICAgYXJnczogVGVuc29yW10sIGR5PzogTykgPT4ge1xuICBncmFkczogVGVuc29yW107XG4gIHZhbHVlOiBPO1xufSB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgKCkgPT4gJ1RoZSBmIHBhc3NlZCBpbiB2YWx1ZUFuZEdyYWRzKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gKGFyZ3M6IFRlbnNvcltdLCBkeT86IE8pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSAmJiBhcmdzLmV2ZXJ5KGFyZyA9PiBhcmcgaW5zdGFuY2VvZiBUZW5zb3IpLFxuICAgICAgICAoKSA9PiAnVGhlIGFyZ3MgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoYXJncykgbXVzdCBiZSBhcnJheSBvZiAnICtcbiAgICAgICAgICAgICd0ZW5zb3JzJyk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGR5ID09IG51bGwgfHwgZHkgaW5zdGFuY2VvZiBUZW5zb3IsXG4gICAgICAgICgpID0+ICdUaGUgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoYXJncywgZHkpIG11c3QgYmUgYSB0ZW5zb3InKTtcbiAgICBjb25zdCByZXMgPSBFTkdJTkUuZ3JhZGllbnRzKCgpID0+IGYoLi4uYXJncyksIGFyZ3MsIGR5KTtcbiAgICBpZiAoZHkgIT0gbnVsbCkge1xuICAgICAgdXRpbC5hc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICAgICByZXMudmFsdWUuc2hhcGUsIGR5LnNoYXBlLFxuICAgICAgICAgICdUaGUgc2hhcGUgb2YgZHkgcGFzc2VkIGluIHZhbHVlQW5kR3JhZHMoZikoW3gxLC4uLl0sIGR5KSBtdXN0ICcgK1xuICAgICAgICAgICAgICAnbWF0Y2ggdGhlIHNoYXBlIHJldHVybmVkIGJ5IGYoW3gxLC4uLl0pJyk7XG4gICAgfVxuICAgIGNoZWNrR3JhZHMocmVzLmdyYWRzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBncmFkaWVudCBvZiBmKHgpIHdpdGggcmVzcGVjdCB0byB0aGUgbGlzdCBvZlxuICogdHJhaW5hYmxlIHZhcmlhYmxlcyBwcm92aWRlZCBieSBgdmFyTGlzdGAuIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGl0XG4gKiBkZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnZhcmlhYmxlKHRmLnRlbnNvcjFkKFszLCA0XSkpO1xuICogY29uc3QgYiA9IHRmLnZhcmlhYmxlKHRmLnRlbnNvcjFkKFs1LCA2XSkpO1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKlxuICogLy8gZihhLCBiKSA9IGEgKiB4IF4gMiArIGIgKiB4XG4gKiBjb25zdCBmID0gKCkgPT4gYS5tdWwoeC5zcXVhcmUoKSkuYWRkKGIubXVsKHgpKS5zdW0oKTtcbiAqIC8vIGRmL2RhID0geCBeIDIsIGRmL2RiID0geFxuICogY29uc3Qge3ZhbHVlLCBncmFkc30gPSB0Zi52YXJpYWJsZUdyYWRzKGYpO1xuICpcbiAqIE9iamVjdC5rZXlzKGdyYWRzKS5mb3JFYWNoKHZhck5hbWUgPT4gZ3JhZHNbdmFyTmFtZV0ucHJpbnQoKSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS4gZigpIHNob3VsZCByZXR1cm4gYSBzY2FsYXIuXG4gKiBAcGFyYW0gdmFyTGlzdCBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgdG8gY29tcHV0ZSB0aGUgZ3JhZGllbnRzIHdpdGggcmVzcGVjdFxuICogICAgIHRvLiBEZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5cyBhbmQgdmFsdWVzOlxuICogICAtIGB2YWx1ZWA6IFRoZSB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gYGZgLlxuICogICAtIGBncmFkc2A6IEEgbWFwIGZyb20gdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgdG8gdGhlIGdyYWRpZW50cy5cbiAqICAgICBJZiB0aGUgYHZhckxpc3RgIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGV4cGxpY2l0bHkgYW5kIGNvbnRhaW5zIGEgc3Vic2V0IG9mXG4gKiAgICAgbm9uLXRyYWluYWJsZSB2YXJpYWJsZXMsIHRoaXMgbWFwIGluIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBjb250YWluIGtleXNcbiAqICAgICB0aGF0IG1hcCB0aGUgbmFtZXMgb2YgdGhlIG5vbi10cmFpbmFibGUgdmFyaWFibGVzIHRvIGBudWxsYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnR3JhZGllbnRzJ31cbiAqL1xuZnVuY3Rpb24gdmFyaWFibGVHcmFkcyhmOiAoKSA9PiBTY2FsYXIsIHZhckxpc3Q/OiBWYXJpYWJsZVtdKTpcbiAgICB7dmFsdWU6IFNjYWxhciwgZ3JhZHM6IE5hbWVkVGVuc29yTWFwfSB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdXRpbC5pc0Z1bmN0aW9uKGYpLFxuICAgICAgKCkgPT4gJ1RoZSBmIHBhc3NlZCBpbiB2YXJpYWJsZUdyYWRzKGYpIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHZhckxpc3QgPT0gbnVsbCB8fFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFyTGlzdCkgJiYgdmFyTGlzdC5ldmVyeSh2ID0+IHYgaW5zdGFuY2VvZiBWYXJpYWJsZSksXG4gICAgICAoKSA9PlxuICAgICAgICAgICdUaGUgdmFyTGlzdCBwYXNzZWQgaW4gdmFyaWFibGVHcmFkcyhmLCB2YXJMaXN0KSBtdXN0IGJlIGFuIGFycmF5ICcgK1xuICAgICAgICAgICdvZiB2YXJpYWJsZXMnKTtcblxuICBjb25zdCBzcGVjaWZpZWRWYXJMaXN0ID0gdmFyTGlzdCAhPSBudWxsO1xuICBpZiAoIXNwZWNpZmllZFZhckxpc3QpIHtcbiAgICAvLyBHZXQgYWxsIG9mIHRoZSB0cmFpbmFibGUgdmFyaWFibGVzLlxuICAgIHZhckxpc3QgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHZhck5hbWUgaW4gRU5HSU5FLnJlZ2lzdGVyZWRWYXJpYWJsZXMpIHtcbiAgICAgIHZhckxpc3QucHVzaChFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1t2YXJOYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3BlY2lmaWVkTm9uVHJhaW5hYmxlOiBWYXJpYWJsZVtdID1cbiAgICAgIHNwZWNpZmllZFZhckxpc3QgPyB2YXJMaXN0LmZpbHRlcih2YXJpYWJsZSA9PiAhdmFyaWFibGUudHJhaW5hYmxlKSA6IG51bGw7XG5cbiAgLy8gUHJ1bmUgbm9uLXRyYWluYWJsZSB2YXJpYWJsZXMuXG4gIGNvbnN0IG9yaWdpbmFsVmFyQ291bnQgPSB2YXJMaXN0Lmxlbmd0aDtcbiAgdmFyTGlzdCA9IHZhckxpc3QuZmlsdGVyKHZhcmlhYmxlID0+IHZhcmlhYmxlLnRyYWluYWJsZSk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdmFyTGlzdC5sZW5ndGggPiAwLFxuICAgICAgKCkgPT4gYHZhcmlhYmxlR3JhZHMoKSBleHBlY3RzIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXQgdmFyaWFibGVzIHRvIGAgK1xuICAgICAgICAgIGBiZSB0cmFpbmFibGUsIGJ1dCBub25lIG9mIHRoZSAke29yaWdpbmFsVmFyQ291bnR9IHZhcmlhYmxlcyBpcyBgICtcbiAgICAgICAgICBgdHJhaW5hYmxlLmApO1xuXG4gIGNvbnN0IGFsbG93Tm9HcmFkaWVudHMgPSB0cnVlO1xuICBjb25zdCB7dmFsdWUsIGdyYWRzfSA9IEVOR0lORS5ncmFkaWVudHMoZiwgdmFyTGlzdCwgbnVsbCwgYWxsb3dOb0dyYWRpZW50cyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBncmFkcy5zb21lKGcgPT4gZyAhPSBudWxsKSxcbiAgICAgICgpID0+ICdDYW5ub3QgZmluZCBhIGNvbm5lY3Rpb24gYmV0d2VlbiBhbnkgdmFyaWFibGUgYW5kIHRoZSByZXN1bHQgb2YgJyArXG4gICAgICAgICAgJ3RoZSBsb3NzIGZ1bmN0aW9uIHk9Zih4KS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW9ucyB0aGF0ICcgK1xuICAgICAgICAgICd1c2UgdmFyaWFibGVzIGFyZSBpbnNpZGUgdGhlIGZ1bmN0aW9uIGYgcGFzc2VkIHRvIG1pbmltaXplKCkuJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgdmFsdWUucmFuayA9PT0gMCxcbiAgICAgICgpID0+IGBUaGUgZiBwYXNzZWQgaW4gdmFyaWFibGVHcmFkcyhmKSBtdXN0IHJldHVybiBhIHNjYWxhciwgYnV0IGl0IGAgK1xuICAgICAgICAgIGByZXR1cm5lZCBhIHJhbmstJHt2YWx1ZS5yYW5rfSB0ZW5zb3JgKTtcblxuICBjb25zdCBuYW1lZEdyYWRzOiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuICB2YXJMaXN0LmZvckVhY2goKHYsIGkpID0+IHtcbiAgICBpZiAoZ3JhZHNbaV0gIT0gbnVsbCkge1xuICAgICAgbmFtZWRHcmFkc1t2Lm5hbWVdID0gZ3JhZHNbaV07XG4gICAgfVxuICB9KTtcbiAgaWYgKHNwZWNpZmllZE5vblRyYWluYWJsZSAhPSBudWxsKSB7XG4gICAgLy8gSWYgdmFyTGlzdCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkIGFuZCBjb250YWlucyBub24tdHJhaW5hYmxlIHZhbHVlcyxcbiAgICAvLyBhZGQgdGhlbSB0byB0aGUgcmV0dXJuZWQgZ3JhZGllbnRzIHdpdGggYG51bGxgIHZhbHVlcy5cbiAgICBzcGVjaWZpZWROb25UcmFpbmFibGUuZm9yRWFjaCh2ID0+IG5hbWVkR3JhZHNbdi5uYW1lXSA9IG51bGwpO1xuICB9XG4gIHJldHVybiB7dmFsdWUsIGdyYWRzOiBuYW1lZEdyYWRzfTtcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgdGhlIGdyYWRpZW50IGNvbXB1dGF0aW9uIG9mIGEgZnVuY3Rpb24gYGZgLlxuICpcbiAqIFRha2VzIGEgZnVuY3Rpb25cbiAqIGBmKC4uLmlucHV0cywgc2F2ZSkgPT4ge3ZhbHVlOiBUZW5zb3IsIGdyYWRGdW5jOiAoZHksIHNhdmVkKSA9PiBUZW5zb3JbXX1gXG4gKiBhbmQgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uIGBnKC4uLmlucHV0cylgIHdoaWNoIHRha2VzIHRoZSBzYW1lIGlucHV0cyBhc1xuICogYGZgLiBXaGVuIGNhbGxlZCwgYGdgIHJldHVybnMgYGYoKS52YWx1ZWAuIEluIGJhY2t3YXJkIG1vZGUsIGN1c3RvbSBncmFkaWVudHNcbiAqIHdpdGggcmVzcGVjdCB0byBlYWNoIGlucHV0IG9mIGBmYCBhcmUgY29tcHV0ZWQgdXNpbmcgYGYoKS5ncmFkRnVuY2AuXG4gKlxuICogVGhlIGBzYXZlYCBmdW5jdGlvbiBwYXNzZWQgdG8gYGZgIHNob3VsZCBiZSB1c2VkIGZvciBzYXZpbmcgdGVuc29ycyBuZWVkZWRcbiAqIGluIHRoZSBncmFkaWVudC4gQW5kIHRoZSBgc2F2ZWRgIHBhc3NlZCB0byB0aGUgYGdyYWRGdW5jYCBpcyBhXG4gKiBgTmFtZWRUZW5zb3JNYXBgLCB3aGljaCBjb250YWlucyB0aG9zZSBzYXZlZCB0ZW5zb3JzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBjdXN0b21PcCA9IHRmLmN1c3RvbUdyYWQoKHgsIHNhdmUpID0+IHtcbiAqICAgLy8gU2F2ZSB4IHRvIG1ha2Ugc3VyZSBpdCdzIGF2YWlsYWJsZSBsYXRlciBmb3IgdGhlIGdyYWRpZW50LlxuICogICBzYXZlKFt4XSk7XG4gKiAgIC8vIE92ZXJyaWRlIGdyYWRpZW50IG9mIG91ciBjdXN0b20geCBeIDIgb3AgdG8gYmUgZHkgKiBhYnMoeCk7XG4gKiAgIHJldHVybiB7XG4gKiAgICAgdmFsdWU6IHguc3F1YXJlKCksXG4gKiAgICAgLy8gTm90ZSBgc2F2ZWQueGAgd2hpY2ggcG9pbnRzIHRvIHRoZSBgeGAgd2Ugc2F2ZWQgZWFybGllci5cbiAqICAgICBncmFkRnVuYzogKGR5LCBzYXZlZCkgPT4gW2R5Lm11bChzYXZlZFswXS5hYnMoKSldXG4gKiAgIH07XG4gKiB9KTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAtMiwgM10pO1xuICogY29uc3QgZHggPSB0Zi5ncmFkKHggPT4gY3VzdG9tT3AoeCkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBmKHgpOmApO1xuICogY3VzdG9tT3AoeCkucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKGBmJyh4KTpgKTtcbiAqIGR4KHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUgaW4gZm9yd2FyZCBtb2RlLCB3aGljaCBzaG91bGQgcmV0dXJuXG4gKiAgICAgYHt2YWx1ZTogVGVuc29yLCBncmFkRnVuYzogKGR5LCBzYXZlZCkgPT4gVGVuc29yW119YCwgd2hlcmUgYGdyYWRGdW5jYFxuICogICAgIHJldHVybnMgdGhlIGN1c3RvbSBncmFkaWVudHMgb2YgYGZgIHdpdGggcmVzcGVjdCB0byBpdHMgaW5wdXRzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdHcmFkaWVudHMnfVxuICovXG5mdW5jdGlvbiBjdXN0b21HcmFkPFQgZXh0ZW5kcyBUZW5zb3I+KGY6IEN1c3RvbUdyYWRpZW50RnVuYzxUPik6XG4gICAgKC4uLmFyZ3M6IFRlbnNvcltdKSA9PiBUIHtcbiAgcmV0dXJuIEVOR0lORS5jdXN0b21HcmFkKGYpO1xufVxuXG5mdW5jdGlvbiBjaGVja0dyYWRzKGdyYWRzOiBUZW5zb3JbXSkge1xuICBjb25zdCBudW1OdWxsR3JhZGllbnRzID0gZ3JhZHMuZmlsdGVyKGcgPT4gZyA9PSBudWxsKS5sZW5ndGg7XG4gIGlmIChudW1OdWxsR3JhZGllbnRzID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjb21wdXRlIGdyYWRpZW50IG9mIHk9Zih4KSB3aXRoIHJlc3BlY3QgdG8geC4gTWFrZSBzdXJlIHRoYXRcbiAgICB0aGUgZiB5b3UgcGFzc2VkIGVuY2xvc2VzIGFsbCBvcGVyYXRpb25zIHRoYXQgbGVhZCBmcm9tIHggdG8geS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBjdXN0b21HcmFkLFxuICB2YXJpYWJsZUdyYWRzLFxuICB2YWx1ZUFuZEdyYWQsXG4gIHZhbHVlQW5kR3JhZHMsXG4gIGdyYWQsXG4gIGdyYWRzLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Neg } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes `-1 * x` element-wise.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, -2, 0], [2, 2]);\n *\n * x.neg().print(); // or tf.neg(x)\n * ```\n *\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction neg_(x) {\n const $x = convertToTensor(x, 'x', 'neg');\n const inputs = { x: $x };\n return ENGINE.runKernel(Neg, inputs);\n}\nexport const neg = /* @__PURE__ */ op({ neg_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbmVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFlO0lBQzdDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtOZWcsIE5lZ0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBgLTEgKiB4YCBlbGVtZW50LXdpc2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgLTIsIDBdLCBbMiwgMl0pO1xuICpcbiAqIHgubmVnKCkucHJpbnQoKTsgIC8vIG9yIHRmLm5lZyh4KVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbmVnXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbmVnJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBOZWdJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChOZWcsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBuZWcgPSAvKiBAX19QVVJFX18gKi8gb3Aoe25lZ199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Softplus } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes softplus of the input `tf.Tensor` element-wise: `log(exp(x) + 1)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.softplus().print(); // or tf.softplus(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction softplus_(x) {\n const $x = convertToTensor(x, 'x', 'softplus');\n const inputs = { x: $x };\n return ENGINE.runKernel(Softplus, inputs);\n}\nexport const softplus = /* @__PURE__ */ op({ softplus_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdHBsdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zb2Z0cGx1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLFNBQVMsQ0FBbUIsQ0FBZTtJQUNsRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBbUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDdkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NvZnRwbHVzLCBTb2Z0cGx1c0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzb2Z0cGx1cyBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgbG9nKGV4cCh4KSArIDEpYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDEsIC0xLCAuN10pO1xuICpcbiAqIHguc29mdHBsdXMoKS5wcmludCgpOyAgLy8gb3IgdGYuc29mdHBsdXMoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc29mdHBsdXNfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzb2Z0cGx1cycpO1xuXG4gIGNvbnN0IGlucHV0czogU29mdHBsdXNJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTb2Z0cGx1cywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHNvZnRwbHVzID0gLyogQF9fUFVSRV9fICovIG9wKHtzb2Z0cGx1c199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../gradients';\nimport { convertToTensor } from '../tensor_util_env';\nimport { mul } from './mul';\nimport { neg } from './neg';\nimport { op } from './operation';\nimport { sigmoid } from './sigmoid';\nimport { softplus } from './softplus';\n/**\n * Computes log sigmoid of the input `tf.Tensor` element-wise:\n * `logSigmoid(x)`. For numerical stability, we use `-tf.softplus(-x)`.\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.logSigmoid().print(); // or tf.logSigmoid(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction logSigmoid_(x) {\n const $x = convertToTensor(x, 'x', 'logSigmoid');\n // Use a custom gradient to maintain previous implementation.\n // There is no LogSigmoid kernel in TF so we can't use engine.runKernel\n // directly\n const customOp = customGrad((x) => {\n // TODO(yassogba) we can remove the chained softplus call here only\n // after backends have modualrized softplus at which point we can call\n // engine runKernel(..., Sotfplus, ...) directly.\n const value = neg(softplus(neg(x)));\n const gradFunc = (dy) => {\n const derX = mul(dy, sigmoid(neg(x)));\n return derX;\n };\n return { value, gradFunc };\n });\n return customOp($x);\n}\nexport const logSigmoid = /* @__PURE__ */ op({ logSigmoid_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NpZ21vaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc2lnbW9pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFakQsNkRBQTZEO0lBQzdELHVFQUF1RTtJQUN2RSxXQUFXO0lBQ1gsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7UUFDeEMsbUVBQW1FO1FBQ25FLHNFQUFzRTtRQUN0RSxpREFBaUQ7UUFDakQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBSyxFQUFFLEVBQUU7WUFDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztRQUNGLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQU0sQ0FBQztBQUMzQixDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2N1c3RvbUdyYWR9IGZyb20gJy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi9uZWcnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzb2Z0cGx1c30gZnJvbSAnLi9zb2Z0cGx1cyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgbG9nIHNpZ21vaWQgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTpcbiAqIGBsb2dTaWdtb2lkKHgpYC4gRm9yIG51bWVyaWNhbCBzdGFiaWxpdHksIHdlIHVzZSBgLXRmLnNvZnRwbHVzKC14KWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgMSwgLTEsIC43XSk7XG4gKlxuICogeC5sb2dTaWdtb2lkKCkucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1NpZ21vaWQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gbG9nU2lnbW9pZF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZ1NpZ21vaWQnKTtcblxuICAvLyBVc2UgYSBjdXN0b20gZ3JhZGllbnQgdG8gbWFpbnRhaW4gcHJldmlvdXMgaW1wbGVtZW50YXRpb24uXG4gIC8vIFRoZXJlIGlzIG5vIExvZ1NpZ21vaWQga2VybmVsIGluIFRGIHNvIHdlIGNhbid0IHVzZSBlbmdpbmUucnVuS2VybmVsXG4gIC8vIGRpcmVjdGx5XG4gIGNvbnN0IGN1c3RvbU9wID0gY3VzdG9tR3JhZCgoeDogVGVuc29yKSA9PiB7XG4gICAgLy8gVE9ETyh5YXNzb2diYSkgd2UgY2FuIHJlbW92ZSB0aGUgY2hhaW5lZCBzb2Z0cGx1cyBjYWxsIGhlcmUgb25seVxuICAgIC8vIGFmdGVyIGJhY2tlbmRzIGhhdmUgbW9kdWFscml6ZWQgc29mdHBsdXMgYXQgd2hpY2ggcG9pbnQgd2UgY2FuIGNhbGxcbiAgICAvLyBlbmdpbmUgcnVuS2VybmVsKC4uLiwgU290ZnBsdXMsIC4uLikgZGlyZWN0bHkuXG4gICAgY29uc3QgdmFsdWUgPSBuZWcoc29mdHBsdXMobmVnKHgpKSk7XG5cbiAgICBjb25zdCBncmFkRnVuYyA9IChkeTogVCkgPT4ge1xuICAgICAgY29uc3QgZGVyWCA9IG11bChkeSwgc2lnbW9pZChuZWcoeCkpKTtcbiAgICAgIHJldHVybiBkZXJYO1xuICAgIH07XG4gICAgcmV0dXJuIHt2YWx1ZSwgZ3JhZEZ1bmN9O1xuICB9KTtcblxuICByZXR1cm4gY3VzdG9tT3AoJHgpIGFzIFQ7XG59XG5leHBvcnQgY29uc3QgbG9nU2lnbW9pZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9nU2lnbW9pZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sub } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Subtracts two `tf.Tensor`s element-wise, A - B. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.tensor1d([1, 2, 3, 4]);\n *\n * a.sub(b).print(); // or tf.sub(a, b)\n * ```\n *\n * ```js\n * // Broadcast subtract a with b.\n * const a = tf.tensor1d([10, 20, 30, 40]);\n * const b = tf.scalar(5);\n *\n * a.sub(b).print(); // or tf.sub(a, b)\n * ```\n * @param a The first `tf.Tensor` to subtract from.\n * @param b The second `tf.Tensor` to be subtracted. Must have the same dtype as\n * `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction sub_(a, b) {\n let $a = convertToTensor(a, 'a', 'sub');\n let $b = convertToTensor(b, 'b', 'sub');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Sub, inputs);\n}\nexport const sub = /* @__PURE__ */ op({ sub_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3ViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsSUFBSSxDQUFtQixDQUFvQixFQUFFLENBQW9CO0lBQ3hFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQWMsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N1YiwgU3ViSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFN1YnRyYWN0cyB0d28gYHRmLlRlbnNvcmBzIGVsZW1lbnQtd2lzZSwgQSAtIEIuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxMCwgMjAsIDMwLCA0MF0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKlxuICogYS5zdWIoYikucHJpbnQoKTsgIC8vIG9yIHRmLnN1YihhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBzdWJ0cmFjdCBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMTAsIDIwLCAzMCwgNDBdKTtcbiAqIGNvbnN0IGIgPSB0Zi5zY2FsYXIoNSk7XG4gKlxuICogYS5zdWIoYikucHJpbnQoKTsgIC8vIG9yIHRmLnN1YihhLCBiKVxuICogYGBgXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgYHRmLlRlbnNvcmAgdG8gc3VidHJhY3QgZnJvbS5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgYHRmLlRlbnNvcmAgdG8gYmUgc3VidHJhY3RlZC4gTXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzXG4gKiBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIHN1Yl88VCBleHRlbmRzIFRlbnNvcj4oYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdzdWInKTtcbiAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ3N1YicpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgY29uc3QgaW5wdXRzOiBTdWJJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTdWIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHN1YiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3ViX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../gradients';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { exp } from './exp';\nimport { log } from './log';\nimport { max } from './max';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { sub } from './sub';\nimport { sum } from './sum';\n/**\n * Computes the log softmax.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.logSoftmax().print(); // or tf.logSoftmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.logSoftmax().print(); // or tf.logSoftmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param axis The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction logSoftmax_(logits, axis = -1) {\n const $logits = convertToTensor(logits, 'logits', 'logSoftmax');\n if (axis === -1) {\n axis = $logits.rank - 1;\n }\n if (axis !== $logits.rank - 1) {\n throw Error('Log Softmax along a non-last dimension is not yet supported. ' +\n `Logits was rank ${$logits.rank} and axis was ${axis}`);\n }\n // const forward: ForwardFunc = (backend, save) => {\n // const keepDims = true;\n // const xMax = max(logits, axis, true);\n // const shifted = sub(logits, xMax);\n // const value =\n // sub(cast(shifted, 'float32'), log(sum(exp(shifted), axis,\n // keepDims)));\n // save([value]);\n // return value;\n // };\n // Use a custom gradient for numerical stability.\n const customOp = customGrad((logits, save) => {\n const keepDims = true;\n const xMax = max(logits, axis, true);\n const shifted = sub(logits, xMax);\n const value = sub(cast(shifted, 'float32'), log(sum(exp(shifted), axis, keepDims)));\n save([value]);\n const gradFunc = (dy, saved) => {\n const [value] = saved;\n const keepDims = true;\n const softmax = exp(value);\n return sub(dy, mul(sum(dy, axis, keepDims), softmax));\n };\n return { value, gradFunc };\n });\n return customOp($logits);\n // TODO Use Engine.runKernel when CPU/WebGL/WASM backends implement this.\n // const inputs: LogSoftmaxInputs = {logits: $logits};\n // const attrs: LogSoftmaxAttrs = {axis};\n // return ENGINE.runKernel(\n // LogSoftmax, inputs as unknown as NamedTensorMap,\n // attrs as unknown as NamedAttrMap);\n}\nexport const logSoftmax = /* @__PURE__ */ op({ logSoftmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NvZnRtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc29mdG1heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBSXhDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLE1BQW9CLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtRQUNmLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztLQUN6QjtJQUNELElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxDQUNQLCtEQUErRDtZQUMvRCxtQkFBbUIsT0FBTyxDQUFDLElBQUksaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDN0Q7SUFFRCw0REFBNEQ7SUFDNUQsMkJBQTJCO0lBQzNCLDBDQUEwQztJQUMxQyx1Q0FBdUM7SUFDdkMsa0JBQWtCO0lBQ2xCLGtFQUFrRTtJQUNsRSxxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixLQUFLO0lBRUwsaURBQWlEO0lBQ2pELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLE1BQWMsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQ1AsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFVLEVBQUUsS0FBZSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFDRixPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFNLENBQUM7SUFFOUIseUVBQXlFO0lBQ3pFLHNEQUFzRDtJQUN0RCx5Q0FBeUM7SUFDekMsMkJBQTJCO0lBQzNCLDhEQUE4RDtJQUM5RCxnREFBZ0Q7QUFDbEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi9ncmFkaWVudHMnO1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7R3JhZFNhdmVGdW5jfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtleHB9IGZyb20gJy4vZXhwJztcbmltcG9ydCB7bG9nfSBmcm9tICcuL2xvZyc7XG5pbXBvcnQge21heH0gZnJvbSAnLi9tYXgnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7c3VifSBmcm9tICcuL3N1Yic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9zdW0nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBsb2cgc29mdG1heC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogYS5sb2dTb2Z0bWF4KCkucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1NvZnRtYXgoYSlcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzIsIDQsIDYsIDEsIDIsIDNdLCBbMiwgM10pO1xuICpcbiAqIGEubG9nU29mdG1heCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2dTb2Z0bWF4KGEpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbG9naXRzIFRoZSBsb2dpdHMgYXJyYXkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgZGltZW5zaW9uIHNvZnRtYXggd291bGQgYmUgcGVyZm9ybWVkIG9uLiBEZWZhdWx0cyB0byBgLTFgXG4gKiAgICAgd2hpY2ggaW5kaWNhdGVzIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdOb3JtYWxpemF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbG9nU29mdG1heF88VCBleHRlbmRzIFRlbnNvcj4obG9naXRzOiBUfFRlbnNvckxpa2UsIGF4aXMgPSAtMSk6IFQge1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdsb2dTb2Z0bWF4Jyk7XG5cbiAgaWYgKGF4aXMgPT09IC0xKSB7XG4gICAgYXhpcyA9ICRsb2dpdHMucmFuayAtIDE7XG4gIH1cbiAgaWYgKGF4aXMgIT09ICRsb2dpdHMucmFuayAtIDEpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0xvZyBTb2Z0bWF4IGFsb25nIGEgbm9uLWxhc3QgZGltZW5zaW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgYExvZ2l0cyB3YXMgcmFuayAkeyRsb2dpdHMucmFua30gYW5kIGF4aXMgd2FzICR7YXhpc31gKTtcbiAgfVxuXG4gIC8vIGNvbnN0IGZvcndhcmQ6IEZvcndhcmRGdW5jPFRlbnNvcj4gPSAoYmFja2VuZCwgc2F2ZSkgPT4ge1xuICAvLyAgIGNvbnN0IGtlZXBEaW1zID0gdHJ1ZTtcbiAgLy8gICBjb25zdCB4TWF4ID0gbWF4KGxvZ2l0cywgYXhpcywgdHJ1ZSk7XG4gIC8vICAgY29uc3Qgc2hpZnRlZCA9IHN1Yihsb2dpdHMsIHhNYXgpO1xuICAvLyAgIGNvbnN0IHZhbHVlID1cbiAgLy8gICAgICAgc3ViKGNhc3Qoc2hpZnRlZCwgJ2Zsb2F0MzInKSwgbG9nKHN1bShleHAoc2hpZnRlZCksIGF4aXMsXG4gIC8vICAgICAgIGtlZXBEaW1zKSkpO1xuICAvLyAgIHNhdmUoW3ZhbHVlXSk7XG4gIC8vICAgcmV0dXJuIHZhbHVlO1xuICAvLyB9O1xuXG4gIC8vIFVzZSBhIGN1c3RvbSBncmFkaWVudCBmb3IgbnVtZXJpY2FsIHN0YWJpbGl0eS5cbiAgY29uc3QgY3VzdG9tT3AgPSBjdXN0b21HcmFkKChsb2dpdHM6IFRlbnNvciwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgIGNvbnN0IHhNYXggPSBtYXgobG9naXRzLCBheGlzLCB0cnVlKTtcbiAgICBjb25zdCBzaGlmdGVkID0gc3ViKGxvZ2l0cywgeE1heCk7XG4gICAgY29uc3QgdmFsdWUgPVxuICAgICAgICBzdWIoY2FzdChzaGlmdGVkLCAnZmxvYXQzMicpLCBsb2coc3VtKGV4cChzaGlmdGVkKSwgYXhpcywga2VlcERpbXMpKSk7XG4gICAgc2F2ZShbdmFsdWVdKTtcblxuICAgIGNvbnN0IGdyYWRGdW5jID0gKGR5OiBUZW5zb3IsIHNhdmVkOiBUZW5zb3JbXSkgPT4ge1xuICAgICAgY29uc3QgW3ZhbHVlXSA9IHNhdmVkO1xuICAgICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgICAgY29uc3Qgc29mdG1heCA9IGV4cCh2YWx1ZSk7XG4gICAgICByZXR1cm4gc3ViKGR5LCBtdWwoc3VtKGR5LCBheGlzLCBrZWVwRGltcyksIHNvZnRtYXgpKTtcbiAgICB9O1xuICAgIHJldHVybiB7dmFsdWUsIGdyYWRGdW5jfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGN1c3RvbU9wKCRsb2dpdHMpIGFzIFQ7XG5cbiAgLy8gVE9ETyBVc2UgRW5naW5lLnJ1bktlcm5lbCB3aGVuIENQVS9XZWJHTC9XQVNNIGJhY2tlbmRzIGltcGxlbWVudCB0aGlzLlxuICAvLyBjb25zdCBpbnB1dHM6IExvZ1NvZnRtYXhJbnB1dHMgPSB7bG9naXRzOiAkbG9naXRzfTtcbiAgLy8gY29uc3QgYXR0cnM6IExvZ1NvZnRtYXhBdHRycyA9IHtheGlzfTtcbiAgLy8gcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gIC8vICAgICAgICAgICAgTG9nU29mdG1heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gIC8vICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbG9nU29mdG1heCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9nU29mdG1heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { add } from './add';\nimport { expandShapeToKeepDim } from './axis_util';\nimport { exp } from './exp';\nimport { log } from './log';\nimport { max } from './max';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { sub } from './sub';\nimport { sum } from './sum';\n/**\n * Computes the log(sum(exp(elements across the reduction dimensions))).\n *\n * Reduces the input along the dimensions given in `axis`. Unless `keepDims`\n * is true, the rank of the array is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and an array with a\n * single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.logSumExp().print(); // or tf.logSumExp(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.logSumExp(axis).print(); // or tf.logSumExp(a, axis)\n * ```\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. If null (the default),\n * reduces all dimensions.\n * @param keepDims If true, retains reduced dimensions with length\n * of 1. Defaults to false.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction logSumExp_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'logSumExp');\n const axes = parseAxisParam(axis, $x.shape);\n const xMax = max($x, axes, true /* keepDims */);\n const a = sub($x, xMax);\n const b = exp(a);\n const c = sum(b, axes);\n const d = log(c);\n const res = add(reshape(xMax, d.shape), d);\n if (keepDims) {\n const newShape = expandShapeToKeepDim(res.shape, axes);\n return reshape(res, newShape);\n }\n return res;\n}\nexport const logSumExp = /* @__PURE__ */ op({ logSumExp_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3N1bV9leHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dfc3VtX2V4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV2QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUyxVQUFVLENBQ2YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFaEQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQyxJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBTSxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxHQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtwYXJzZUF4aXNQYXJhbX0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuL2FkZCc7XG5pbXBvcnQge2V4cGFuZFNoYXBlVG9LZWVwRGltfSBmcm9tICcuL2F4aXNfdXRpbCc7XG5pbXBvcnQge2V4cH0gZnJvbSAnLi9leHAnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nJztcbmltcG9ydCB7bWF4fSBmcm9tICcuL21heCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi9zdWInO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vc3VtJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbG9nKHN1bShleHAoZWxlbWVudHMgYWNyb3NzIHRoZSByZWR1Y3Rpb24gZGltZW5zaW9ucykpKS5cbiAqXG4gKiBSZWR1Y2VzIHRoZSBpbnB1dCBhbG9uZyB0aGUgZGltZW5zaW9ucyBnaXZlbiBpbiBgYXhpc2AuIFVubGVzcyBga2VlcERpbXNgXG4gKiBpcyB0cnVlLCB0aGUgcmFuayBvZiB0aGUgYXJyYXkgaXMgcmVkdWNlZCBieSAxIGZvciBlYWNoIGVudHJ5IGluIGBheGlzYC5cbiAqIElmIGBrZWVwRGltc2AgaXMgdHJ1ZSwgdGhlIHJlZHVjZWQgZGltZW5zaW9ucyBhcmUgcmV0YWluZWQgd2l0aCBsZW5ndGggMS5cbiAqIElmIGBheGlzYCBoYXMgbm8gZW50cmllcywgYWxsIGRpbWVuc2lvbnMgYXJlIHJlZHVjZWQsIGFuZCBhbiBhcnJheSB3aXRoIGFcbiAqIHNpbmdsZSBlbGVtZW50IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiB4LmxvZ1N1bUV4cCgpLnByaW50KCk7ICAvLyBvciB0Zi5sb2dTdW1FeHAoeClcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogeC5sb2dTdW1FeHAoYXhpcykucHJpbnQoKTsgIC8vIG9yIHRmLmxvZ1N1bUV4cChhLCBheGlzKVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIElmIG51bGwgKHRoZSBkZWZhdWx0KSxcbiAqICAgICByZWR1Y2VzIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggbGVuZ3RoXG4gKiAgICAgb2YgMS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUmVkdWN0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbG9nU3VtRXhwXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCwga2VlcERpbXMgPSBmYWxzZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdsb2dTdW1FeHAnKTtcblxuICBjb25zdCBheGVzID0gcGFyc2VBeGlzUGFyYW0oYXhpcywgJHguc2hhcGUpO1xuICBjb25zdCB4TWF4ID0gbWF4KCR4LCBheGVzLCB0cnVlIC8qIGtlZXBEaW1zICovKTtcbiAgY29uc3QgYSA9IHN1YigkeCwgeE1heCk7XG4gIGNvbnN0IGIgPSBleHAoYSk7XG4gIGNvbnN0IGMgPSBzdW0oYiwgYXhlcyk7XG4gIGNvbnN0IGQgPSBsb2coYyk7XG4gIGNvbnN0IHJlcyA9IGFkZChyZXNoYXBlKHhNYXgsIGQuc2hhcGUpLCBkKTtcblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKHJlcy5zaGFwZSwgYXhlcyk7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBuZXdTaGFwZSkgYXMgVDtcbiAgfVxuICByZXR1cm4gcmVzIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dTdW1FeHAgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ1N1bUV4cF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalAnd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a AND b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalAnd(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalAnd_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalAnd', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalAnd', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LogicalAnd, inputs);\n}\nexport const logicalAnd = /* @__PURE__ */ op({ logicalAnd_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX2FuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLFdBQVcsQ0FDaEIsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWhELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TG9naWNhbEFuZCwgTG9naWNhbEFuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIEFORCBiYCBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgZmFsc2UsIHRydWUsIHRydWVdLCAnYm9vbCcpO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbEFuZChiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbEFuZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xvZ2ljYWxBbmQnLCAnYm9vbCcpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdsb2dpY2FsQW5kJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxBbmRJbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsQW5kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dpY2FsQW5kX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalNot } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the truth value of `NOT x` element-wise.\n *\n * ```js\n * const a = tf.tensor1d([false, true], 'bool');\n *\n * a.logicalNot().print();\n * ```\n *\n * @param x The input tensor. Must be of dtype 'bool'.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalNot_(x) {\n const $x = convertToTensor(x, 'x', 'logicalNot', 'bool');\n const inputs = { x: $x };\n return ENGINE.runKernel(LogicalNot, inputs);\n}\nexport const logicalNot = /* @__PURE__ */ op({ logicalNot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9ub3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX25vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFHN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFxQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TG9naWNhbE5vdCwgTG9naWNhbE5vdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJ1dGggdmFsdWUgb2YgYE5PVCB4YCBlbGVtZW50LXdpc2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbE5vdCgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLiBNdXN0IGJlIG9mIGR0eXBlICdib29sJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbE5vdF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2xvZ2ljYWxOb3QnLCAnYm9vbCcpO1xuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxOb3RJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsTm90LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsTm90ID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dpY2FsTm90X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { LogicalOr } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a OR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalOr(b).print();\n * ```\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalOr_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalOr', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalOr', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(LogicalOr, inputs);\n}\nexport const logicalOr = /* @__PURE__ */ op({ logicalOr_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9vci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvZ2ljYWxfb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBRzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFvQixFQUFFLENBQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQW9CLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDL0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge0xvZ2ljYWxPciwgTG9naWNhbE9ySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIE9SIGJgIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZV0sICdib29sJyk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdib29sJyk7XG4gKlxuICogYS5sb2dpY2FsT3IoYikucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbE9yXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbG9naWNhbE9yJywgJ2Jvb2wnKTtcbiAgY29uc3QgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbG9naWNhbE9yJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IExvZ2ljYWxPcklucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChMb2dpY2FsT3IsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBsb2dpY2FsT3IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2xvZ2ljYWxPcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { logicalAnd } from './logical_and';\nimport { logicalNot } from './logical_not';\nimport { logicalOr } from './logical_or';\nimport { op } from './operation';\n/**\n * Returns the truth value of `a XOR b` element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([false, false, true, true], 'bool');\n * const b = tf.tensor1d([false, true, false, true], 'bool');\n *\n * a.logicalXor(b).print();\n * ```\n *\n * @param a The first input tensor. Must be of dtype bool.\n * @param b The second input tensor. Must be of dtype bool.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction logicalXor_(a, b) {\n const $a = convertToTensor(a, 'a', 'logicalXor', 'bool');\n const $b = convertToTensor(b, 'b', 'logicalXor', 'bool');\n assertAndGetBroadcastShape($a.shape, $b.shape);\n // x ^ y = (x | y) & ~(x & y)\n return logicalAnd(logicalOr(a, b), logicalNot(logicalAnd(a, b)));\n}\nexport const logicalXor = /* @__PURE__ */ op({ logicalXor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF94b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb2dpY2FsX3hvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsV0FBVyxDQUNoQixDQUFvQixFQUFFLENBQW9CO0lBQzVDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsNkJBQTZCO0lBQzdCLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHthc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZX0gZnJvbSAnLi9icm9hZGNhc3RfdXRpbCc7XG5pbXBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4vbG9naWNhbF9hbmQnO1xuaW1wb3J0IHtsb2dpY2FsTm90fSBmcm9tICcuL2xvZ2ljYWxfbm90JztcbmltcG9ydCB7bG9naWNhbE9yfSBmcm9tICcuL2xvZ2ljYWxfb3InO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIGBhIFhPUiBiYCBlbGVtZW50LXdpc2UuIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgZmFsc2UsIHRydWUsIHRydWVdLCAnYm9vbCcpO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAnYm9vbCcpO1xuICpcbiAqIGEubG9naWNhbFhvcihiKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci4gTXVzdCBiZSBvZiBkdHlwZSBib29sLlxuICogQHBhcmFtIGIgVGhlIHNlY29uZCBpbnB1dCB0ZW5zb3IuIE11c3QgYmUgb2YgZHR5cGUgYm9vbC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdMb2dpY2FsJ31cbiAqL1xuZnVuY3Rpb24gbG9naWNhbFhvcl88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ2xvZ2ljYWxYb3InLCAnYm9vbCcpO1xuICBjb25zdCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdsb2dpY2FsWG9yJywgJ2Jvb2wnKTtcbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICAvLyB4IF4geSA9ICh4IHwgeSkgJiB+KHggJiB5KVxuICByZXR1cm4gbG9naWNhbEFuZChsb2dpY2FsT3IoYSwgYiksIGxvZ2ljYWxOb3QobG9naWNhbEFuZChhLCBiKSkpO1xufVxuXG5leHBvcnQgY29uc3QgbG9naWNhbFhvciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bG9naWNhbFhvcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SearchSorted } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { sizeFromShape } from '../util_base';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nconst INT32_MAX = 2147483648;\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The side argument controls which index is returned if a value lands exactly\n * on an edge.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'sortedSequence' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const edges = tf.tensor1d([-1, 3.3, 9.1, 10.0]);\n * let values = tf.tensor1d([0.0, 4.1, 12.0]);\n * const result1 = tf.searchSorted(edges, values, 'left');\n * result1.print(); // [1, 2, 4]\n *\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * values = tf.tensor1d([0, 4, 10]);\n * const result2 = tf.searchSorted(seq, values, 'left');\n * result2.print(); // [0, 2, 3]\n * const result3 = tf.searchSorted(seq, values, 'right');\n * result3.print(); // [1, 2, 5]\n *\n * const sortedSequence = tf.tensor2d([[0., 3., 8., 9., 10.],\n * [1., 2., 3., 4., 5.]]);\n * values = tf.tensor2d([[9.8, 2.1, 4.3],\n * [0.1, 6.6, 4.5, ]]);\n * const result4 = tf.searchSorted(sortedSequence, values, 'left');\n * result4.print(); // [[4, 1, 2], [0, 5, 4]]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @param side: 'left'|'right'. Defaults to 'left'. 'left' corresponds to lower\n * bound and 'right' to upper bound.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying either lower bound or upper bound (depending on side) to each\n * value. The result is not a global index to the entire Tensor, but the\n * index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction searchSorted_(sortedSequence, values, side = 'left') {\n const $sortedSequence = convertToTensor(sortedSequence, 'sortedSequence', 'searchSorted');\n const $values = convertToTensor(values, 'values', 'searchSorted');\n const sequenceSize = $sortedSequence.shape[$sortedSequence.shape.length - 1];\n const valuesSize = $values.shape[$values.shape.length - 1];\n const $sortedSequence2D = reshape($sortedSequence, [-1, sequenceSize]);\n const $values2D = reshape($values, [-1, valuesSize]);\n if ($sortedSequence2D.rank < 2) {\n throw new Error(`Sorted input argument must be at least 2-dimensional`);\n }\n if ($sortedSequence2D.shape[0] !== $values2D.shape[0]) {\n throw new Error(`Leading dimension of 'sortedSequence' and 'values' must match.`);\n }\n if (sizeFromShape($values2D.shape) >= INT32_MAX) {\n throw new Error(`values tensor size must less than ${INT32_MAX}`);\n }\n if ($sortedSequence2D.shape[1] >= INT32_MAX) {\n throw new Error(`trailing dim_size must less than ${INT32_MAX} for int32 output type, was ${$sortedSequence2D.shape[1]}`);\n }\n const inputs = {\n sortedSequence: $sortedSequence2D,\n values: $values2D,\n };\n const attrs = { side };\n return ENGINE.runKernel(SearchSorted, inputs, attrs);\n}\nexport const searchSorted = /* @__PURE__ */ op({ searchSorted_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoX3NvcnRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlYXJjaF9zb3J0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFDN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUNILFNBQVMsYUFBYSxDQUNsQixjQUFpQyxFQUFFLE1BQXlCLEVBQzVELE9BQXVCLE1BQU07SUFDL0IsTUFBTSxlQUFlLEdBQ2pCLGVBQWUsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbEUsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFckQsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztLQUN6RTtJQUNELElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FDWCxnRUFBZ0UsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQ1osU0FBUywrQkFBK0IsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMzRTtJQUVELE1BQU0sTUFBTSxHQUF1QjtRQUNqQyxjQUFjLEVBQUUsaUJBQWlCO1FBQ2pDLE1BQU0sRUFBRSxTQUFTO0tBQ2xCLENBQUM7SUFDRixNQUFNLEtBQUssR0FBc0IsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUV4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQVksRUFBRSxLQUFXLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2VhcmNoU29ydGVkLCBTZWFyY2hTb3J0ZWRBdHRycywgU2VhcmNoU29ydGVkSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG5jb25zdCBJTlQzMl9NQVggPSAyMTQ3NDgzNjQ4O1xuLyoqXG4gKiBTZWFyY2hlcyBmb3Igd2hlcmUgYSB2YWx1ZSB3b3VsZCBnbyBpbiBhIHNvcnRlZCBzZXF1ZW5jZS5cbiAqXG4gKiBUaGlzIGlzIG5vdCBhIG1ldGhvZCBmb3IgY2hlY2tpbmcgY29udGFpbm1lbnQgKGxpa2UgamF2YXNjcmlwdCBpbikuXG4gKlxuICogVGhlIHR5cGljYWwgdXNlIGNhc2UgZm9yIHRoaXMgb3BlcmF0aW9uIGlzIFwiYmlubmluZ1wiLCBcImJ1Y2tldGluZ1wiLCBvclxuICogXCJkaXNjcmV0aXppbmdcIi4gVGhlIHZhbHVlcyBhcmUgYXNzaWduZWQgdG8gYnVja2V0LWluZGljZXMgYmFzZWQgb24gdGhlIGVkZ2VzXG4gKiBsaXN0ZWQgaW4gJ3NvcnRlZFNlcXVlbmNlJy4gVGhpcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgYnVja2V0LWluZGV4IGZvciBlYWNoXG4gKiB2YWx1ZS5cbiAqXG4gKiBUaGUgc2lkZSBhcmd1bWVudCBjb250cm9scyB3aGljaCBpbmRleCBpcyByZXR1cm5lZCBpZiBhIHZhbHVlIGxhbmRzIGV4YWN0bHlcbiAqIG9uIGFuIGVkZ2UuXG4gKlxuICogVGhlIGF4aXMgaXMgbm90IHNldHRhYmxlIGZvciB0aGlzIG9wZXJhdGlvbi4gSXQgYWx3YXlzIG9wZXJhdGVzIG9uIHRoZVxuICogaW5uZXJtb3N0IGRpbWVuc2lvbiAoYXhpcz0tMSkuIFRoZSBvcGVyYXRpb24gd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBvdXRlclxuICogZGltZW5zaW9ucy5cbiAqXG4gKiBOb3RlOiBUaGlzIG9wZXJhdGlvbiBhc3N1bWVzIHRoYXQgJ3NvcnRlZFNlcXVlbmNlJyBpcyBzb3J0ZWQgYWxvbmcgdGhlXG4gKiBpbm5lcm1vc3QgYXhpcywgbWF5YmUgdXNpbmcgJ3NvcnQoLi4uLCBheGlzPS0xKScuIElmIHRoZSBzZXF1ZW5jZSBpcyBub3RcbiAqIHNvcnRlZCBubyBlcnJvciBpcyByYWlzZWQgYW5kIHRoZSBjb250ZW50IG9mIHRoZSByZXR1cm5lZCB0ZW5zb3IgaXMgbm90IHdlbGxcbiAqIGRlZmluZWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGVkZ2VzID0gdGYudGVuc29yMWQoWy0xLCAzLjMsIDkuMSwgMTAuMF0pO1xuICogbGV0IHZhbHVlcyA9IHRmLnRlbnNvcjFkKFswLjAsIDQuMSwgMTIuMF0pO1xuICogY29uc3QgcmVzdWx0MSA9IHRmLnNlYXJjaFNvcnRlZChlZGdlcywgdmFsdWVzLCAnbGVmdCcpO1xuICogcmVzdWx0MS5wcmludCgpOyAvLyBbMSwgMiwgNF1cbiAqXG4gKiBjb25zdCBzZXEgPSB0Zi50ZW5zb3IxZChbMCwgMywgOSwgMTAsIDEwXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMCwgNCwgMTBdKTtcbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zZWFyY2hTb3J0ZWQoc2VxLCB2YWx1ZXMsICdsZWZ0Jyk7XG4gKiByZXN1bHQyLnByaW50KCk7IC8vIFswLCAyLCAzXVxuICogY29uc3QgcmVzdWx0MyA9IHRmLnNlYXJjaFNvcnRlZChzZXEsIHZhbHVlcywgJ3JpZ2h0Jyk7XG4gKiByZXN1bHQzLnByaW50KCk7IC8vIFsxLCAyLCA1XVxuICpcbiAqIGNvbnN0IHNvcnRlZFNlcXVlbmNlID0gdGYudGVuc29yMmQoW1swLiwgMy4sIDguLCA5LiwgMTAuXSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLiwgMi4sIDMuLCA0LiwgNS5dXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IyZChbWzkuOCwgMi4xLCA0LjNdLFxuICogICAgICAgICAgICAgICAgICAgICAgIFswLjEsIDYuNiwgNC41LCBdXSk7XG4gKiBjb25zdCByZXN1bHQ0ID0gdGYuc2VhcmNoU29ydGVkKHNvcnRlZFNlcXVlbmNlLCB2YWx1ZXMsICdsZWZ0Jyk7XG4gKiByZXN1bHQ0LnByaW50KCk7IC8vIFtbNCwgMSwgMl0sIFswLCA1LCA0XV1cbiAqIGBgYFxuICogQHBhcmFtIHNvcnRlZFNlcXVlbmNlOiBOLUQuIFNvcnRlZCBzZXF1ZW5jZS5cbiAqIEBwYXJhbSB2YWx1ZXM6IE4tRC4gU2VhcmNoIHZhbHVlcy5cbiAqIEBwYXJhbSBzaWRlOiAnbGVmdCd8J3JpZ2h0Jy4gRGVmYXVsdHMgdG8gJ2xlZnQnLiAnbGVmdCcgY29ycmVzcG9uZHMgdG8gbG93ZXJcbiAqICAgICBib3VuZCBhbmQgJ3JpZ2h0JyB0byB1cHBlciBib3VuZC5cbiAqIEByZXR1cm4gQW4gTi1EIGludDMyIHRlbnNvciB0aGUgc2l6ZSBvZiB2YWx1ZXMgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mXG4gKiAgICAgYXBwbHlpbmcgZWl0aGVyIGxvd2VyIGJvdW5kIG9yIHVwcGVyIGJvdW5kIChkZXBlbmRpbmcgb24gc2lkZSkgdG8gZWFjaFxuICogICAgIHZhbHVlLiBUaGUgcmVzdWx0IGlzIG5vdCBhIGdsb2JhbCBpbmRleCB0byB0aGUgZW50aXJlIFRlbnNvciwgYnV0IHRoZVxuICogICAgIGluZGV4IGluIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0V2YWx1YXRpb24nfVxuICovXG5mdW5jdGlvbiBzZWFyY2hTb3J0ZWRfKFxuICAgIHNvcnRlZFNlcXVlbmNlOiBUZW5zb3J8VGVuc29yTGlrZSwgdmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBzaWRlOiAnbGVmdCd8J3JpZ2h0JyA9ICdsZWZ0Jyk6IFRlbnNvciB7XG4gIGNvbnN0ICRzb3J0ZWRTZXF1ZW5jZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc29ydGVkU2VxdWVuY2UsICdzb3J0ZWRTZXF1ZW5jZScsICdzZWFyY2hTb3J0ZWQnKTtcbiAgY29uc3QgJHZhbHVlcyA9IGNvbnZlcnRUb1RlbnNvcih2YWx1ZXMsICd2YWx1ZXMnLCAnc2VhcmNoU29ydGVkJyk7XG5cbiAgY29uc3Qgc2VxdWVuY2VTaXplID0gJHNvcnRlZFNlcXVlbmNlLnNoYXBlWyRzb3J0ZWRTZXF1ZW5jZS5zaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3QgdmFsdWVzU2l6ZSA9ICR2YWx1ZXMuc2hhcGVbJHZhbHVlcy5zaGFwZS5sZW5ndGggLSAxXTtcbiAgY29uc3QgJHNvcnRlZFNlcXVlbmNlMkQgPSByZXNoYXBlKCRzb3J0ZWRTZXF1ZW5jZSwgWy0xLCBzZXF1ZW5jZVNpemVdKTtcbiAgY29uc3QgJHZhbHVlczJEID0gcmVzaGFwZSgkdmFsdWVzLCBbLTEsIHZhbHVlc1NpemVdKTtcblxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQucmFuayA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnRlZCBpbnB1dCBhcmd1bWVudCBtdXN0IGJlIGF0IGxlYXN0IDItZGltZW5zaW9uYWxgKTtcbiAgfVxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMF0gIT09ICR2YWx1ZXMyRC5zaGFwZVswXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExlYWRpbmcgZGltZW5zaW9uIG9mICdzb3J0ZWRTZXF1ZW5jZScgYW5kICd2YWx1ZXMnIG11c3QgbWF0Y2guYCk7XG4gIH1cbiAgaWYgKHNpemVGcm9tU2hhcGUoJHZhbHVlczJELnNoYXBlKSA+PSBJTlQzMl9NQVgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlcyB0ZW5zb3Igc2l6ZSBtdXN0IGxlc3MgdGhhbiAke0lOVDMyX01BWH1gKTtcbiAgfVxuICBpZiAoJHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMV0gPj0gSU5UMzJfTUFYKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0cmFpbGluZyBkaW1fc2l6ZSBtdXN0IGxlc3MgdGhhbiAke1xuICAgICAgICBJTlQzMl9NQVh9IGZvciBpbnQzMiBvdXRwdXQgdHlwZSwgd2FzICR7JHNvcnRlZFNlcXVlbmNlMkQuc2hhcGVbMV19YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNlYXJjaFNvcnRlZElucHV0cyA9IHtcbiAgICBzb3J0ZWRTZXF1ZW5jZTogJHNvcnRlZFNlcXVlbmNlMkQsXG4gICAgdmFsdWVzOiAkdmFsdWVzMkQsXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBTZWFyY2hTb3J0ZWRBdHRycyA9IHtzaWRlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTZWFyY2hTb3J0ZWQsIGlucHV0cyBhcyB7fSwgYXR0cnMgYXMge30pO1xufVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoU29ydGVkID0gLyogQF9fUFVSRV9fICovIG9wKHtzZWFyY2hTb3J0ZWRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { searchSorted } from './search_sorted';\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The index returned corresponds to the first edge greater than or equal to the\n * value.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'lowerBound' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const edges = tf.tensor1d([-1, 3.3, 9.1, 10.0]);\n * let values = tf.tensor1d([0.0, 4.1, 12.0]);\n * const result1 = tf.lowerBound(edges, values);\n * result1.print(); // [1, 2, 4]\n *\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * values = tf.tensor1d([0, 4, 10]);\n * const result2 = tf.lowerBound(seq, values);\n * result2.print(); // [0, 2, 3]\n *\n * const sortedSequence = tf.tensor2d([[0., 3., 8., 9., 10.],\n * [1., 2., 3., 4., 5.]]);\n * values = tf.tensor2d([[9.8, 2.1, 4.3],\n * [0.1, 6.6, 4.5, ]]);\n * const result3 = tf.lowerBound(sortedSequence, values);\n * result3.print(); // [[4, 1, 2], [0, 5, 4]]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying lower bound to each value. The result is not a global index to\n * the entire Tensor, but the index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function lowerBound(sortedSequence, values) {\n return searchSorted(sortedSequence, values, 'left');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93ZXJfYm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3dlcl9ib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN0QixjQUFpQyxFQUFFLE1BQXlCO0lBQzlELE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7c2VhcmNoU29ydGVkfSBmcm9tICcuL3NlYXJjaF9zb3J0ZWQnO1xuXG4vKipcbiAqIFNlYXJjaGVzIGZvciB3aGVyZSBhIHZhbHVlIHdvdWxkIGdvIGluIGEgc29ydGVkIHNlcXVlbmNlLlxuICpcbiAqIFRoaXMgaXMgbm90IGEgbWV0aG9kIGZvciBjaGVja2luZyBjb250YWlubWVudCAobGlrZSBqYXZhc2NyaXB0IGluKS5cbiAqXG4gKiBUaGUgdHlwaWNhbCB1c2UgY2FzZSBmb3IgdGhpcyBvcGVyYXRpb24gaXMgXCJiaW5uaW5nXCIsIFwiYnVja2V0aW5nXCIsIG9yXG4gKiBcImRpc2NyZXRpemluZ1wiLiBUaGUgdmFsdWVzIGFyZSBhc3NpZ25lZCB0byBidWNrZXQtaW5kaWNlcyBiYXNlZCBvbiB0aGUgZWRnZXNcbiAqIGxpc3RlZCBpbiAnc29ydGVkU2VxdWVuY2UnLiBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBidWNrZXQtaW5kZXggZm9yIGVhY2hcbiAqIHZhbHVlLlxuICpcbiAqIFRoZSBpbmRleCByZXR1cm5lZCBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgZWRnZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlXG4gKiB2YWx1ZS5cbiAqXG4gKiBUaGUgYXhpcyBpcyBub3Qgc2V0dGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uLiBJdCBhbHdheXMgb3BlcmF0ZXMgb24gdGhlXG4gKiBpbm5lcm1vc3QgZGltZW5zaW9uIChheGlzPS0xKS4gVGhlIG9wZXJhdGlvbiB3aWxsIGFjY2VwdCBhbnkgbnVtYmVyIG9mIG91dGVyXG4gKiBkaW1lbnNpb25zLlxuICpcbiAqIE5vdGU6IFRoaXMgb3BlcmF0aW9uIGFzc3VtZXMgdGhhdCAnbG93ZXJCb3VuZCcgaXMgc29ydGVkIGFsb25nIHRoZVxuICogaW5uZXJtb3N0IGF4aXMsIG1heWJlIHVzaW5nICdzb3J0KC4uLiwgYXhpcz0tMSknLiBJZiB0aGUgc2VxdWVuY2UgaXMgbm90XG4gKiBzb3J0ZWQgbm8gZXJyb3IgaXMgcmFpc2VkIGFuZCB0aGUgY29udGVudCBvZiB0aGUgcmV0dXJuZWQgdGVuc29yIGlzIG5vdCB3ZWxsXG4gKiBkZWZpbmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBlZGdlcyA9IHRmLnRlbnNvcjFkKFstMSwgMy4zLCA5LjEsIDEwLjBdKTtcbiAqIGxldCB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMC4wLCA0LjEsIDEyLjBdKTtcbiAqIGNvbnN0IHJlc3VsdDEgPSB0Zi5sb3dlckJvdW5kKGVkZ2VzLCB2YWx1ZXMpO1xuICogcmVzdWx0MS5wcmludCgpOyAvLyBbMSwgMiwgNF1cbiAqXG4gKiBjb25zdCBzZXEgPSB0Zi50ZW5zb3IxZChbMCwgMywgOSwgMTAsIDEwXSk7XG4gKiB2YWx1ZXMgPSB0Zi50ZW5zb3IxZChbMCwgNCwgMTBdKTtcbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5sb3dlckJvdW5kKHNlcSwgdmFsdWVzKTtcbiAqIHJlc3VsdDIucHJpbnQoKTsgLy8gWzAsIDIsIDNdXG4gKlxuICogY29uc3Qgc29ydGVkU2VxdWVuY2UgPSB0Zi50ZW5zb3IyZChbWzAuLCAzLiwgOC4sIDkuLCAxMC5dLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEuLCAyLiwgMy4sIDQuLCA1Ll1dKTtcbiAqIHZhbHVlcyA9IHRmLnRlbnNvcjJkKFtbOS44LCAyLjEsIDQuM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgWzAuMSwgNi42LCA0LjUsIF1dKTtcbiAqIGNvbnN0IHJlc3VsdDMgPSB0Zi5sb3dlckJvdW5kKHNvcnRlZFNlcXVlbmNlLCB2YWx1ZXMpO1xuICogcmVzdWx0My5wcmludCgpOyAvLyBbWzQsIDEsIDJdLCBbMCwgNSwgNF1dXG4gKiBgYGBcbiAqIEBwYXJhbSBzb3J0ZWRTZXF1ZW5jZTogTi1ELiBTb3J0ZWQgc2VxdWVuY2UuXG4gKiBAcGFyYW0gdmFsdWVzOiBOLUQuIFNlYXJjaCB2YWx1ZXMuXG4gKiBAcmV0dXJuIEFuIE4tRCBpbnQzMiB0ZW5zb3IgdGhlIHNpemUgb2YgdmFsdWVzIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZlxuICogICAgIGFwcGx5aW5nIGxvd2VyIGJvdW5kIHRvIGVhY2ggdmFsdWUuIFRoZSByZXN1bHQgaXMgbm90IGEgZ2xvYmFsIGluZGV4IHRvXG4gKiAgICAgdGhlIGVudGlyZSBUZW5zb3IsIGJ1dCB0aGUgaW5kZXggaW4gdGhlIGxhc3QgZGltZW5zaW9uLlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnRXZhbHVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb3dlckJvdW5kKFxuICAgIHNvcnRlZFNlcXVlbmNlOiBUZW5zb3J8VGVuc29yTGlrZSwgdmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSk6IFRlbnNvciB7XG4gIHJldHVybiBzZWFyY2hTb3J0ZWQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcywgJ2xlZnQnKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPool } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 2D max pooling of an image.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in dilated pooling. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction maxPool_(x, filterSize, strides, pad, dimRoundingMode) {\n const $x = convertToTensor(x, 'x', 'maxPool');\n const dilations = 1;\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x4D.rank}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n conv_util.checkPadOnDimRoundingMode('maxPool', pad, dimRoundingMode);\n const inputs = { x: x4D };\n const attrs = { filterSize, strides, pad, dimRoundingMode };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(MaxPool, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const maxPool = /* @__PURE__ */ op({ maxPool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQThCLE1BQU0saUJBQWlCLENBQUM7QUFJckUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxRQUFRLENBQ2IsQ0FBZSxFQUFFLFVBQW1DLEVBQ3BELE9BQWdDLEVBQ2hDLEdBQW9ELEVBQ3BELGVBQXdDO0lBQzFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLEdBQUcsR0FBRyxFQUFjLENBQUM7SUFDekIsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Q7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQzVELEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxlQUFlLE9BQU8sbUJBQW1CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDL0QsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFpQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxDQUFDO0lBRXhFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4UG9vbCwgTWF4UG9vbEF0dHJzLCBNYXhQb29sSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgMkQgbWF4IHBvb2xpbmcgb2YgYW4gaW1hZ2UuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMyBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyU2l6ZSBUaGUgZmlsdGVyIHNpemU6IGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLiBJZlxuICogICAgIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYGZpbHRlckhlaWdodCA9PSBmaWx0ZXJXaWR0aGAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgcG9vbGluZzogYFtzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoXWAuIElmXG4gKiAgICAgYHN0cmlkZXNgIGlzIGEgc2luZ2xlIG51bWJlciwgdGhlbiBgc3RyaWRlSGVpZ2h0ID09IHN0cmlkZVdpZHRoYC5cbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gZGlsYXRlZCBwb29saW5nLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uc2AgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgIC0gRm9yIG1vcmUgaW5mbywgc2VlIHRoaXMgZ3VpZGU6XG4gKiAgICAgW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbl0oXG4gKiAgICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb24pXG4gKiBAcGFyYW0gZGltUm91bmRpbmdNb2RlIEEgc3RyaW5nIGZyb206ICdjZWlsJywgJ3JvdW5kJywgJ2Zsb29yJy4gSWYgbm9uZSBpc1xuICogICAgIHByb3ZpZGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdHJ1bmNhdGUuXG4gKi9cbmZ1bmN0aW9uIG1heFBvb2xfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4UG9vbCcpO1xuICBjb25zdCBkaWxhdGlvbnMgPSAxO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gbWF4UG9vbDogaW5wdXQgbXVzdCBiZSByYW5rIDQgYnV0IGdvdCByYW5rICR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGNvbnZfdXRpbC5laXRoZXJTdHJpZGVzT3JEaWxhdGlvbnNBcmVPbmUoc3RyaWRlcywgZGlsYXRpb25zKSxcbiAgICAgICgpID0+ICdFcnJvciBpbiBtYXhQb29sOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCBiZSAxLiAnICtcbiAgICAgICAgICBgR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdtYXhQb29sJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBpbnB1dHM6IE1heFBvb2xJbnB1dHMgPSB7eDogeDREfTtcbiAgY29uc3QgYXR0cnM6IE1heFBvb2xBdHRycyA9IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZX07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgTWF4UG9vbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVDtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21heFBvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPool3D } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { checkPadOnDimRoundingMode } from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the 3D max pooling.\n *\n * ```js\n * const x = tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]);\n * const result = tf.maxPool3d(x, 2, 1, 'valid');\n * result.print();\n * ```\n *\n * @param x The input tensor, of rank 5 or rank 4 of shape\n * `[batch, depth, height, width, inChannels]`.\n * @param filterSize The filter size:\n * `[filterDepth, filterHeight, filterWidth]`.\n * If `filterSize` is a single number,\n * then `filterDepth == filterHeight == filterWidth`.\n * @param strides The strides of the pooling:\n * `[strideDepth, strideHeight, strideWidth]`.\n * If `strides` is a single number,\n * then `strideDepth == strideHeight == strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1*1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction maxPool3d_(x, filterSize = [1, 1, 1], strides, pad, dimRoundingMode, dataFormat = 'NDHWC') {\n const $x = convertToTensor(x, 'x', 'maxPool3d');\n let x5D = $x;\n let reshapedTo5D = false;\n if ($x.rank === 4) {\n reshapedTo5D = true;\n x5D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2], $x.shape[3]]);\n }\n util.assert(x5D.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${x5D.rank}.`);\n util.assert(dataFormat === 'NDHWC', () => `Error in maxPool3d: Only NDHWC is currently supported, ` +\n `but got dataFormat of ${dataFormat}`);\n checkPadOnDimRoundingMode('maxPool3d', pad, dimRoundingMode);\n const inputs = { x: x5D };\n const attrs = { filterSize, strides, pad, dimRoundingMode, dataFormat };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(MaxPool3D, inputs, attrs);\n if (reshapedTo5D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3], res.shape[4]]);\n }\n return res;\n}\nexport const maxPool3d = /* @__PURE__ */ op({ maxPool3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2xfM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbF8zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxTQUFTLEVBQWtDLE1BQU0saUJBQWlCLENBQUM7QUFJM0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsYUFBOEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN4RSxPQUF3QyxFQUFFLEdBQTBCLEVBQ3BFLGVBQXdDLEVBQ3hDLGFBQThCLE9BQU87SUFDdkMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFaEQsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDNUU7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUNQLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLHFEQUFxRCxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUNQLFVBQVUsS0FBSyxPQUFPLEVBQ3RCLEdBQUcsRUFBRSxDQUFDLHlEQUF5RDtRQUMzRCx5QkFBeUIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDVSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsQ0FBQztJQUU3RSwwREFBMEQ7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBTSxDQUFDO0lBRXZELElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUNILEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkUsQ0FBQztLQUNQO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TWF4UG9vbDNELCBNYXhQb29sM0RBdHRycywgTWF4UG9vbDNESW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjRELCBUZW5zb3I1RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtjaGVja1BhZE9uRGltUm91bmRpbmdNb2RlfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIDNEIG1heCBwb29saW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yNWQoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLCBbMSwgMiwgMiwgMiwgMV0pO1xuICogY29uc3QgcmVzdWx0ID0gdGYubWF4UG9vbDNkKHgsIDIsIDEsICd2YWxpZCcpO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDUgb3IgcmFuayA0IG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGluQ2hhbm5lbHNdYC5cbiAqIEBwYXJhbSBmaWx0ZXJTaXplIFRoZSBmaWx0ZXIgc2l6ZTpcbiAqICAgICBgW2ZpbHRlckRlcHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoXWAuXG4gKiAgICAgSWYgYGZpbHRlclNpemVgIGlzIGEgc2luZ2xlIG51bWJlcixcbiAqICAgICB0aGVuIGBmaWx0ZXJEZXB0aCA9PSBmaWx0ZXJIZWlnaHQgPT0gZmlsdGVyV2lkdGhgLlxuICogQHBhcmFtIHN0cmlkZXMgVGhlIHN0cmlkZXMgb2YgdGhlIHBvb2xpbmc6XG4gKiAgICAgYFtzdHJpZGVEZXB0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLlxuICogICAgIElmIGBzdHJpZGVzYCBpcyBhIHNpbmdsZSBudW1iZXIsXG4gKiAgICAgdGhlbiBgc3RyaWRlRGVwdGggPT0gc3RyaWRlSGVpZ2h0ID09IHN0cmlkZVdpZHRoYC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgICAtIGBzYW1lYCBhbmQgc3RyaWRlIDE6IG91dHB1dCB3aWxsIGJlIG9mIHNhbWUgc2l6ZSBhcyBpbnB1dCxcbiAqICAgICAgIHJlZ2FyZGxlc3Mgb2YgZmlsdGVyIHNpemUuXG4gKiAgICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDEqMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5ESFdDXCIsIFwiTkNESFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5ESFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOREhXQ1wiLCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gdGhlIG9yZGVyIG9mOiBbYmF0Y2gsXG4gKiAgICAgZGVwdGgsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5ESFdDXCIgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbWF4UG9vbDNkXzxUIGV4dGVuZHMgVGVuc29yNER8VGVuc29yNUQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZmlsdGVyU2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdfG51bWJlciA9IFsxLCAxLCAxXSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl18bnVtYmVyLCBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcixcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnLFxuICAgIGRhdGFGb3JtYXQ6ICdOREhXQyd8J05DREhXJyA9ICdOREhXQycpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnbWF4UG9vbDNkJyk7XG5cbiAgbGV0IHg1RCA9ICR4IGFzIFRlbnNvcjVEO1xuICBsZXQgcmVzaGFwZWRUbzVEID0gZmFsc2U7XG4gIGlmICgkeC5yYW5rID09PSA0KSB7XG4gICAgcmVzaGFwZWRUbzVEID0gdHJ1ZTtcbiAgICB4NUQgPSByZXNoYXBlKCR4LCBbMSwgJHguc2hhcGVbMF0sICR4LnNoYXBlWzFdLCAkeC5zaGFwZVsyXSwgJHguc2hhcGVbM11dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDVELnJhbmsgPT09IDUsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gbWF4UG9vbDNkOiB4IG11c3QgYmUgcmFuayA1IGJ1dCBnb3QgcmFuayAke3g1RC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBkYXRhRm9ybWF0ID09PSAnTkRIV0MnLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG1heFBvb2wzZDogT25seSBOREhXQyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLCBgICtcbiAgICAgICAgICBgYnV0IGdvdCBkYXRhRm9ybWF0IG9mICR7ZGF0YUZvcm1hdH1gKTtcbiAgY2hlY2tQYWRPbkRpbVJvdW5kaW5nTW9kZSgnbWF4UG9vbDNkJywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBpbnB1dHM6IE1heFBvb2wzRElucHV0cyA9IHt4OiB4NUR9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIE1heFBvb2wzREF0dHJzID0ge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkYXRhRm9ybWF0fTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBNYXhQb29sM0QsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG81RCkge1xuICAgIHJldHVybiByZXNoYXBlKFxuICAgICAgICAgICAgICAgcmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXSwgcmVzLnNoYXBlWzRdXSkgYXNcbiAgICAgICAgVDtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sM2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21heFBvb2wzZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MaxPoolWithArgmax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the 2D max pooling of an image with Argmax index.\n * The indices in argmax are flattened, so that a maximum value at position `[b,\n * y, x, c]` becomes flattened index: `(y * width + x) * channels + c` if\n * include_batch_in_index is False; `((b * height + y) * width + x) * channels\n * +c` if include_batch_in_index is True.\n *\n * The indices returned are always in `[0, height) x [0, width)` before\n * flattening.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param filterSize The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dataFormat An optional string from: \"NDHWC\", \"NCDHW\". Defaults to\n * \"NDHWC\". Specify the data format of the input and output data. With the\n * default format \"NDHWC\", the data is stored in the order of: [batch,\n * depth, height, width, channels]. Only \"NDHWC\" is currently supported.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param includeBatchIndex Defaults to False. Whether to include batch\n * dimension in flattened index of argmax.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction maxPoolWithArgmax_(x, filterSize, strides, pad, includeBatchInIndex = false) {\n const $x = convertToTensor(x, 'x', 'maxPoolWithArgmax');\n const inputs = { x: $x };\n const attrs = { filterSize, strides, pad, includeBatchInIndex };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(MaxPoolWithArgmax, inputs, attrs);\n return { result: result[0], indexes: result[1] };\n}\nexport const maxPoolWithArgmax = /* @__PURE__ */ op({ maxPoolWithArgmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4X3Bvb2xfd2l0aF9hcmdtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tYXhfcG9vbF93aXRoX2FyZ21heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0QsTUFBTSxpQkFBaUIsQ0FBQztBQUluRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixDQUFlLEVBQUUsVUFBbUMsRUFDcEQsT0FBZ0MsRUFBRSxHQUEwQixFQUM1RCxtQkFBbUIsR0FBRyxLQUFLO0lBQzdCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFeEQsTUFBTSxNQUFNLEdBQTRCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2hELE1BQU0sS0FBSyxHQUNrQixFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFDLENBQUM7SUFFN0UsMERBQTBEO0lBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osaUJBQWlCLEVBQUUsTUFBbUMsRUFDdEQsS0FBZ0MsQ0FBYSxDQUFDO0lBRWpFLE9BQU8sRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01heFBvb2xXaXRoQXJnbWF4LCBNYXhQb29sV2l0aEFyZ21heEF0dHJzLCBNYXhQb29sV2l0aEFyZ21heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgMkQgbWF4IHBvb2xpbmcgb2YgYW4gaW1hZ2Ugd2l0aCBBcmdtYXggaW5kZXguXG4gKiBUaGUgaW5kaWNlcyBpbiBhcmdtYXggYXJlIGZsYXR0ZW5lZCwgc28gdGhhdCBhIG1heGltdW0gdmFsdWUgYXQgcG9zaXRpb24gYFtiLFxuICogeSwgeCwgY11gIGJlY29tZXMgZmxhdHRlbmVkIGluZGV4OiBgKHkgKiB3aWR0aCArIHgpICogY2hhbm5lbHMgKyBjYCBpZlxuICogaW5jbHVkZV9iYXRjaF9pbl9pbmRleCBpcyBGYWxzZTsgYCgoYiAqIGhlaWdodCArIHkpICogd2lkdGggKyB4KSAqIGNoYW5uZWxzXG4gKiArY2AgaWYgaW5jbHVkZV9iYXRjaF9pbl9pbmRleCBpcyBUcnVlLlxuICpcbiAqIFRoZSBpbmRpY2VzIHJldHVybmVkIGFyZSBhbHdheXMgaW4gYFswLCBoZWlnaHQpIHggWzAsIHdpZHRoKWAgYmVmb3JlXG4gKiBmbGF0dGVuaW5nLlxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNCBvciByYW5rIDMgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIGZpbHRlclNpemUgVGhlIGZpbHRlciBzaXplOiBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGhdYC4gSWZcbiAqICAgICBgZmlsdGVyU2l6ZWAgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBmaWx0ZXJIZWlnaHQgPT0gZmlsdGVyV2lkdGhgLlxuICogQHBhcmFtIHN0cmlkZXMgVGhlIHN0cmlkZXMgb2YgdGhlIHBvb2xpbmc6IGBbc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF1gLiBJZlxuICogICAgIGBzdHJpZGVzYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PSBzdHJpZGVXaWR0aGAuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdCBBbiBvcHRpb25hbCBzdHJpbmcgZnJvbTogXCJOREhXQ1wiLCBcIk5DREhXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOREhXQ1wiLiBTcGVjaWZ5IHRoZSBkYXRhIGZvcm1hdCBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhLiBXaXRoIHRoZVxuICogICAgIGRlZmF1bHQgZm9ybWF0IFwiTkRIV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGRlcHRoLCBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOREhXQ1wiIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gcGFkIFRoZSB0eXBlIG9mIHBhZGRpbmcgYWxnb3JpdGhtLlxuICogICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAgLSBgdmFsaWRgOiBvdXRwdXQgd2lsbCBiZSBzbWFsbGVyIHRoYW4gaW5wdXQgaWYgZmlsdGVyIGlzIGxhcmdlclxuICogICAgICAgdGhhbiAxeDEuXG4gKiAgICAtIEZvciBtb3JlIGluZm8sIHNlZSB0aGlzIGd1aWRlOlxuICogICAgIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vY29udm9sdXRpb25dKFxuICogICAgICAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uKVxuICogQHBhcmFtIGluY2x1ZGVCYXRjaEluZGV4IERlZmF1bHRzIHRvIEZhbHNlLiBXaGV0aGVyIHRvIGluY2x1ZGUgYmF0Y2hcbiAqICAgIGRpbWVuc2lvbiBpbiBmbGF0dGVuZWQgaW5kZXggb2YgYXJnbWF4LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gbWF4UG9vbFdpdGhBcmdtYXhfPFQgZXh0ZW5kcyBUZW5zb3I0RD4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBmaWx0ZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlciwgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXIsXG4gICAgaW5jbHVkZUJhdGNoSW5JbmRleCA9IGZhbHNlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdtYXhQb29sV2l0aEFyZ21heCcpO1xuXG4gIGNvbnN0IGlucHV0czogTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczpcbiAgICAgIE1heFBvb2xXaXRoQXJnbWF4QXR0cnMgPSB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBpbmNsdWRlQmF0Y2hJbkluZGV4fTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlc3VsdCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgICBNYXhQb29sV2l0aEFyZ21heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yW107XG5cbiAgcmV0dXJuIHtyZXN1bHQ6IHJlc3VsdFswXSwgaW5kZXhlczogcmVzdWx0WzFdfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2xXaXRoQXJnbWF4ID0gLyogQF9fUFVSRV9fICovIG9wKHttYXhQb29sV2l0aEFyZ21heF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Maximum } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Returns the max of a and b (`a > b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `tf.maximumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.maximum(b).print(); // or tf.maximum(a, b)\n * ```\n *\n * ```js\n * // Broadcast maximum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.maximum(b).print(); // or tf.maximum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction maximum_(a, b) {\n let $a = convertToTensor(a, 'a', 'maximum');\n let $b = convertToTensor(b, 'b', 'maximum');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'bool') {\n $a = cast($a, 'int32');\n $b = cast($b, 'int32');\n }\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Maximum, inputs);\n}\nexport const maximum = /* @__PURE__ */ op({ maximum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21heGltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFN0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01heGltdW0sIE1heGltdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXggb2YgYSBhbmQgYiAoYGEgPiBiID8gYSA6IGJgKSBlbGVtZW50LXdpc2UuXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYHRmLm1heGltdW1TdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgNCwgMywgMTZdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMSwgMiwgOSwgNF0pO1xuICpcbiAqIGEubWF4aW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWF4aW11bShhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtYXhpbXVtIGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubWF4aW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWF4aW11bShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG1heGltdW1fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbWF4aW11bScpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWF4aW11bScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgaWYgKCRhLmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAkYSA9IGNhc3QoJGEsICdpbnQzMicpO1xuICAgICRiID0gY2FzdCgkYiwgJ2ludDMyJyk7XG4gIH1cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IE1heGltdW1JbnB1dHMgPSB7YTogJGEsIGI6ICRifTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChNYXhpbXVtLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhpbXVtID0gLyogQF9fUFVSRV9fICovIG9wKHttYXhpbXVtX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Mean } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the mean of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces `x` along the dimensions given in `axis`. Unless `keepDims` is\n * true, the rank of the `tf.Tensor` is reduced by 1 for each entry in `axis`.\n * If `keepDims` is true, the reduced dimensions are retained with length 1.\n * If `axis` has no entries, all dimensions are reduced, and a `tf.Tensor` with\n * a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.mean().print(); // or tf.mean(a)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.mean(axis).print(); // or tf.mean(x, axis)\n * ```\n *\n * @param x The input tensor.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction mean_(x, axis = null, keepDims = false) {\n const $x = convertToTensor(x, 'x', 'mean');\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Mean, inputs, attrs);\n}\nexport const mean = /* @__PURE__ */ op({ mean_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21lYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQWMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFFMUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtNZWFuLCBNZWFuQXR0cnMsIE1lYW5JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBvZiBlbGVtZW50cyBhY3Jvc3MgZGltZW5zaW9ucyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIFJlZHVjZXMgYHhgIGFsb25nIHRoZSBkaW1lbnNpb25zIGdpdmVuIGluIGBheGlzYC4gVW5sZXNzIGBrZWVwRGltc2AgaXNcbiAqIHRydWUsIHRoZSByYW5rIG9mIHRoZSBgdGYuVGVuc29yYCBpcyByZWR1Y2VkIGJ5IDEgZm9yIGVhY2ggZW50cnkgaW4gYGF4aXNgLlxuICogSWYgYGtlZXBEaW1zYCBpcyB0cnVlLCB0aGUgcmVkdWNlZCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZCB3aXRoIGxlbmd0aCAxLlxuICogSWYgYGF4aXNgIGhhcyBubyBlbnRyaWVzLCBhbGwgZGltZW5zaW9ucyBhcmUgcmVkdWNlZCwgYW5kIGEgYHRmLlRlbnNvcmAgd2l0aFxuICogYSBzaW5nbGUgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKlxuICogeC5tZWFuKCkucHJpbnQoKTsgIC8vIG9yIHRmLm1lYW4oYSlcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIGNvbnN0IGF4aXMgPSAxO1xuICogeC5tZWFuKGF4aXMpLnByaW50KCk7ICAvLyBvciB0Zi5tZWFuKHgsIGF4aXMpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG1lYW5fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzOiBudW1iZXJ8bnVtYmVyW10gPSBudWxsLCBrZWVwRGltcyA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21lYW4nKTtcblxuICBjb25zdCBpbnB1dHM6IE1lYW5JbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogTWVhbkF0dHJzID0ge2F4aXMsIGtlZXBEaW1zfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIE1lYW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgbWVhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWVhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { assertNonNegativeIntegerDimensions, makeZerosTypedArray, sizeFromShape } from '../util';\nimport { complex } from './complex';\n/**\n * Creates a `tf.Tensor` with all elements set to 0.\n *\n * ```js\n * tf.zeros([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Can\n * be 'float32', 'int32' or 'bool'. Defaults to 'float'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function zeros(shape, dtype = 'float32') {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype === 'complex64') {\n const real = zeros(shape, 'float32');\n const imag = zeros(shape, 'float32');\n return complex(real, imag);\n }\n const values = makeZerosTypedArray(sizeFromShape(shape), dtype);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy96ZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR2pDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFL0YsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixLQUFrQixFQUFFLFFBQWtCLFNBQVM7SUFDakQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDNUI7SUFDRCxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFjLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMsIG1ha2VaZXJvc1R5cGVkQXJyYXksIHNpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4vY29tcGxleCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAwLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi56ZXJvcyhbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIHR5cGUgb2YgYW4gZWxlbWVudCBpbiB0aGUgcmVzdWx0aW5nIHRlbnNvci4gQ2FuXG4gKiAgICAgYmUgJ2Zsb2F0MzInLCAnaW50MzInIG9yICdib29sJy4gRGVmYXVsdHMgdG8gJ2Zsb2F0Jy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvczxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWwgPSB6ZXJvcyhzaGFwZSwgJ2Zsb2F0MzInKTtcbiAgICBjb25zdCBpbWFnID0gemVyb3Moc2hhcGUsICdmbG9hdDMyJyk7XG4gICAgcmV0dXJuIGNvbXBsZXgocmVhbCwgaW1hZyk7XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gbWFrZVplcm9zVHlwZWRBcnJheShzaXplRnJvbVNoYXBlKHNoYXBlKSwgZHR5cGUpO1xuICByZXR1cm4gRU5HSU5FLm1ha2VUZW5zb3IodmFsdWVzLCBzaGFwZSwgZHR5cGUpIGFzIFRlbnNvcjxSPjtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { makeOnesTypedArray, sizeFromShape } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { complex } from './complex';\nimport { zeros } from './zeros';\n/**\n * Creates a `tf.Tensor` with all elements set to 1.\n *\n * ```js\n * tf.ones([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The type of an element in the resulting tensor. Defaults to\n * 'float'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function ones(shape, dtype = 'float32') {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype === 'complex64') {\n const real = ones(shape, 'float32');\n const imag = zeros(shape, 'float32');\n return complex(real, imag);\n }\n const values = makeOnesTypedArray(sizeFromShape(shape), dtype);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL29uZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdqQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzFELE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FDaEIsS0FBa0IsRUFBRSxRQUFrQixTQUFTO0lBQ2pELGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9ELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBYyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHttYWtlT25lc1R5cGVkQXJyYXksIHNpemVGcm9tU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL2NvbXBsZXgnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi96ZXJvcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggYWxsIGVsZW1lbnRzIHNldCB0byAxLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5vbmVzKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgdHlwZSBvZiBhbiBlbGVtZW50IGluIHRoZSByZXN1bHRpbmcgdGVuc29yLiBEZWZhdWx0cyB0b1xuICogICAgICdmbG9hdCcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25lczxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCBkdHlwZTogRGF0YVR5cGUgPSAnZmxvYXQzMicpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWwgPSBvbmVzKHNoYXBlLCAnZmxvYXQzMicpO1xuICAgIGNvbnN0IGltYWcgPSB6ZXJvcyhzaGFwZSwgJ2Zsb2F0MzInKTtcbiAgICByZXR1cm4gY29tcGxleChyZWFsLCBpbWFnKTtcbiAgfVxuICBjb25zdCB2YWx1ZXMgPSBtYWtlT25lc1R5cGVkQXJyYXkoc2l6ZUZyb21TaGFwZShzaGFwZSksIGR0eXBlKTtcbiAgcmV0dXJuIEVOR0lORS5tYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { matMul } from './mat_mul';\nimport { ones } from './ones';\nimport { reshape } from './reshape';\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport { sizeFromShape } from '../util_base';\n/**\n * Broadcasts parameters for evaluation on an N-D grid.\n *\n * Given N one-dimensional coordinate arrays `*args`, returns a list `outputs`\n * of N-D coordinate arrays for evaluating expressions on an N-D grid.\n *\n * Notes:\n * `meshgrid` supports cartesian ('xy') and matrix ('ij') indexing conventions.\n * When the `indexing` argument is set to 'xy' (the default), the broadcasting\n * instructions for the first two dimensions are swapped.\n * Examples:\n * Calling `const [X, Y] = meshgrid(x, y)` with the tensors\n *\n * ```javascript\n * const x = [1, 2, 3];\n * const y = [4, 5, 6];\n * const [X, Y] = tf.meshgrid(x, y);\n * // X = [[1, 2, 3],\n * // [1, 2, 3],\n * // [1, 2, 3]]\n * // Y = [[4, 4, 4],\n * // [5, 5, 5],\n * // [6, 6, 6]]\n * ```\n *\n * @param x Tensor with rank geq 1.\n * @param y Tensor with rank geq 1.\n * @param indexing\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nexport function meshgrid(x, y, { indexing = 'xy' } = {}) {\n if (indexing !== 'xy' && indexing !== 'ij') {\n throw new TypeError(`${indexing} is not a valid third argument to meshgrid`);\n }\n if (x === undefined) {\n return [];\n }\n let $x = convertToTensor(x, 'x', 'meshgrid', x instanceof Tensor ? x.dtype : 'float32');\n if (y === undefined) {\n return [$x];\n }\n let $y = convertToTensor(y, 'y', 'meshgrid', y instanceof Tensor ? y.dtype : 'float32');\n const w = sizeFromShape($x.shape);\n const h = sizeFromShape($y.shape);\n if (indexing === 'xy') {\n $x = reshape($x, [1, -1]);\n $y = reshape($y, [-1, 1]);\n return [\n matMul(ones([h, 1], $x.dtype), $x),\n matMul($y, ones([1, w], $y.dtype)),\n ];\n }\n $x = reshape($x, [-1, 1]);\n $y = reshape($y, [1, -1]);\n return [\n matMul($x, ones([1, h], $x.dtype)),\n matMul(ones([w, 1], $y.dtype), $y),\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tZXNoZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRTNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixDQUFnQixFQUFFLENBQWdCLEVBQUUsRUFBQyxRQUFRLEdBQUcsSUFBSSxFQUFDLEdBQUcsRUFBRTtJQUM1RCxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUMxQyxNQUFNLElBQUksU0FBUyxDQUNmLEdBQUcsUUFBUSw0Q0FBNEMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO1FBQ25CLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFDRCxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQ3BCLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUNuQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksRUFBRSxHQUFHLGVBQWUsQ0FDcEIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFbkUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtRQUNyQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7UUFDL0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBTSxDQUFDO1FBQy9CLE9BQU87WUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DLENBQUM7S0FDSDtJQUVELEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQU0sQ0FBQztJQUMvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFNLENBQUM7SUFDL0IsT0FBTztRQUNMLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7bWF0TXVsfSBmcm9tICcuL21hdF9tdWwnO1xuaW1wb3J0IHtvbmVzfSBmcm9tICcuL29uZXMnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG4vKipcbiAqIEJyb2FkY2FzdHMgcGFyYW1ldGVycyBmb3IgZXZhbHVhdGlvbiBvbiBhbiBOLUQgZ3JpZC5cbiAqXG4gKiBHaXZlbiBOIG9uZS1kaW1lbnNpb25hbCBjb29yZGluYXRlIGFycmF5cyBgKmFyZ3NgLCByZXR1cm5zIGEgbGlzdCBgb3V0cHV0c2BcbiAqIG9mIE4tRCBjb29yZGluYXRlIGFycmF5cyBmb3IgZXZhbHVhdGluZyBleHByZXNzaW9ucyBvbiBhbiBOLUQgZ3JpZC5cbiAqXG4gKiBOb3RlczpcbiAqIGBtZXNoZ3JpZGAgc3VwcG9ydHMgY2FydGVzaWFuICgneHknKSBhbmQgbWF0cml4ICgnaWonKSBpbmRleGluZyBjb252ZW50aW9ucy5cbiAqIFdoZW4gdGhlIGBpbmRleGluZ2AgYXJndW1lbnQgaXMgc2V0IHRvICd4eScgKHRoZSBkZWZhdWx0KSwgdGhlIGJyb2FkY2FzdGluZ1xuICogaW5zdHJ1Y3Rpb25zIGZvciB0aGUgZmlyc3QgdHdvIGRpbWVuc2lvbnMgYXJlIHN3YXBwZWQuXG4gKiBFeGFtcGxlczpcbiAqIENhbGxpbmcgYGNvbnN0IFtYLCBZXSA9IG1lc2hncmlkKHgsIHkpYCB3aXRoIHRoZSB0ZW5zb3JzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeCA9IFsxLCAyLCAzXTtcbiAqIGNvbnN0IHkgPSBbNCwgNSwgNl07XG4gKiBjb25zdCBbWCwgWV0gPSB0Zi5tZXNoZ3JpZCh4LCB5KTtcbiAqIC8vIFggPSBbWzEsIDIsIDNdLFxuICogLy8gICAgICBbMSwgMiwgM10sXG4gKiAvLyAgICAgIFsxLCAyLCAzXV1cbiAqIC8vIFkgPSBbWzQsIDQsIDRdLFxuICogLy8gICAgICBbNSwgNSwgNV0sXG4gKiAvLyAgICAgIFs2LCA2LCA2XV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRlbnNvciB3aXRoIHJhbmsgZ2VxIDEuXG4gKiBAcGFyYW0geSBUZW5zb3Igd2l0aCByYW5rIGdlcSAxLlxuICogQHBhcmFtIGluZGV4aW5nXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXNoZ3JpZDxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4PzogVHxUZW5zb3JMaWtlLCB5PzogVHxUZW5zb3JMaWtlLCB7aW5kZXhpbmcgPSAneHknfSA9IHt9KTogVFtdIHtcbiAgaWYgKGluZGV4aW5nICE9PSAneHknICYmIGluZGV4aW5nICE9PSAnaWonKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYCR7aW5kZXhpbmd9IGlzIG5vdCBhIHZhbGlkIHRoaXJkIGFyZ3VtZW50IHRvIG1lc2hncmlkYCk7XG4gIH1cbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJHggPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICB4LCAneCcsICdtZXNoZ3JpZCcsIHggaW5zdGFuY2VvZiBUZW5zb3IgPyB4LmR0eXBlIDogJ2Zsb2F0MzInKTtcblxuICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFskeF07XG4gIH1cbiAgbGV0ICR5ID0gY29udmVydFRvVGVuc29yKFxuICAgICAgeSwgJ3knLCAnbWVzaGdyaWQnLCB5IGluc3RhbmNlb2YgVGVuc29yID8geS5kdHlwZSA6ICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgdyA9IHNpemVGcm9tU2hhcGUoJHguc2hhcGUpO1xuICBjb25zdCBoID0gc2l6ZUZyb21TaGFwZSgkeS5zaGFwZSk7XG5cbiAgaWYgKGluZGV4aW5nID09PSAneHknKSB7XG4gICAgJHggPSByZXNoYXBlKCR4LCBbMSwgLTFdKSBhcyBUO1xuICAgICR5ID0gcmVzaGFwZSgkeSwgWy0xLCAxXSkgYXMgVDtcbiAgICByZXR1cm4gW1xuICAgICAgbWF0TXVsKG9uZXMoW2gsIDFdLCAkeC5kdHlwZSksICR4KSxcbiAgICAgIG1hdE11bCgkeSwgb25lcyhbMSwgd10sICR5LmR0eXBlKSksXG4gICAgXTtcbiAgfVxuXG4gICR4ID0gcmVzaGFwZSgkeCwgWy0xLCAxXSkgYXMgVDtcbiAgJHkgPSByZXNoYXBlKCR5LCBbMSwgLTFdKSBhcyBUO1xuICByZXR1cm4gW1xuICAgIG1hdE11bCgkeCwgb25lcyhbMSwgaF0sICR4LmR0eXBlKSksXG4gICAgbWF0TXVsKG9uZXMoW3csIDFdLCAkeS5kdHlwZSksICR5KSxcbiAgXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Minimum } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Returns the min of a and b (`a < b ? a : b`) element-wise.\n * Supports broadcasting.\n *\n * We also expose `minimumStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.minimum(b).print(); // or tf.minimum(a, b)\n * ```\n *\n * ```js\n * // Broadcast minimum a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.minimum(b).print(); // or tf.minimum(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction minimum_(a, b) {\n let $a = convertToTensor(a, 'a', 'minimum');\n let $b = convertToTensor(b, 'b', 'minimum');\n [$a, $b] = makeTypesMatch($a, $b);\n if ($a.dtype === 'bool') {\n $a = cast($a, 'int32');\n $b = cast($b, 'int32');\n }\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Minimum, inputs);\n}\nexport const minimum = /* @__PURE__ */ op({ minimum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21pbmltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsMEJBQTBCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFN0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pbmltdW0sIE1pbmltdW1JbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW4gb2YgYSBhbmQgYiAoYGEgPCBiID8gYSA6IGJgKSBlbGVtZW50LXdpc2UuXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYG1pbmltdW1TdHJpY3RgIHdoaWNoIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBvcCBhbmRcbiAqIGFzc2VydHMgdGhhdCBgYWAgYW5kIGBiYCBhcmUgdGhlIHNhbWUgc2hhcGUgKGRvZXMgbm90IGJyb2FkY2FzdCkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgNCwgMywgMTZdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMSwgMiwgOSwgNF0pO1xuICpcbiAqIGEubWluaW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWluaW11bShhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBtaW5pbXVtIGEgd2l0aCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubWluaW11bShiKS5wcmludCgpOyAgLy8gb3IgdGYubWluaW11bShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIG1pbmltdW1fPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbWluaW11bScpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbWluaW11bScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgaWYgKCRhLmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAkYSA9IGNhc3QoJGEsICdpbnQzMicpO1xuICAgICRiID0gY2FzdCgkYiwgJ2ludDMyJyk7XG4gIH1cblxuICBhc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZSgkYS5zaGFwZSwgJGIuc2hhcGUpO1xuXG4gIGNvbnN0IGlucHV0czogTWluaW11bUlucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE1pbmltdW0sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1pbmltdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe21pbmltdW1ffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { MirrorPad } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Pads a `tf.Tensor` using mirror padding.\n *\n * This operation implements the `REFLECT` and `SYMMETRIC` modes of pad.\n *\n * ```js\n * const x = tf.range(0, 9).reshape([1, 1, 3, 3]);\n * x.mirrorPad([[0, 0], [0, 0], [2, 2], [2, 2]], 'reflect').print();\n * ```\n * @param x The tensor to pad.\n * @param paddings An array of length `R` (the rank of the tensor), where\n * each element is a length-2 tuple of ints `[padBefore, padAfter]`,\n * specifying how much to pad along each dimension of the tensor.\n * In \"reflect\" mode, the padded regions do not include the borders,\n * while in \"symmetric\" mode the padded regions do include the borders.\n * For example, if the input is `[1, 2, 3]` and paddings is `[0, 2]`,\n * then the output is `[1, 2, 3, 2, 1]` in \"reflect\" mode, and\n * `[1, 2, 3, 3, 2]` in \"symmetric\" mode.\n * If `mode` is \"reflect\" then both `paddings[D, 0]` and `paddings[D, 1]`\n * must be no greater than `x.shape[D] - 1`. If mode is \"symmetric\"\n * then both `paddings[D, 0]` and `paddings[D, 1]` must be no greater than\n * `x.shape[D]`\n * @param mode String to specify padding mode. Can be `'reflect' | 'symmetric'`\n */\n/** @doc {heading: 'Tensors', subheading: 'Transformations'} */\nfunction mirrorPad_(x, paddings, mode) {\n util.assert(mode === 'reflect' || mode === 'symmetric', () => `Invalid mode. Mode must be either reflect or symmetric. ` +\n `Got ${mode}.`);\n const $x = convertToTensor(x, 'x', 'mirrorPad');\n if ($x.rank === 0) {\n throw new Error('mirrorPad(scalar) is not defined. ' +\n 'Pass non-scalar to mirrorPad');\n }\n util.assert(paddings.length === $x.rank, () => `Padding doesn't match input. Must be ${$x.rank}. ` +\n `Got ${paddings.length}.`);\n const shapeOffset = mode === 'reflect' ? 1 : 0;\n for (let i = 0; i < $x.rank; i++) {\n util.assert(paddings[i].length === 2, () => `Invalid number of paddings. Must be length of 2 each.`);\n util.assert(paddings[i][0] >= 0 && paddings[i][0] <= $x.shape[i] - shapeOffset &&\n paddings[i][1] >= 0 && paddings[i][1] <= $x.shape[i] - shapeOffset, () => `Padding in dimension ${i} cannot be greater than or equal ` +\n `to ${$x.shape[i] - shapeOffset} or less than 0 for input of ` +\n `shape ${$x.shape}`);\n }\n const attrs = { paddings, mode };\n const inputs = { x: $x };\n return ENGINE.runKernel(MirrorPad, inputs, attrs);\n}\nexport const mirrorPad = /* @__PURE__ */ op({ mirrorPad_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlycm9yX3BhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21pcnJvcl9wYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILCtEQUErRDtBQUMvRCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsUUFBaUMsRUFDbEQsSUFBMkI7SUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxXQUFXLEVBQzFDLEdBQUcsRUFBRSxDQUFDLDBEQUEwRDtRQUM1RCxPQUFPLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEIsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUNYLG9DQUFvQztZQUNwQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQzNCLEdBQUcsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLENBQUMsSUFBSSxJQUFJO1FBQ3JELE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDeEIsR0FBRyxFQUFFLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztZQUM5RCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFDdEUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsbUNBQW1DO1lBQzlELE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLCtCQUErQjtZQUM5RCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsTUFBTSxLQUFLLEdBQW1CLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFvQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge01pcnJvclBhZCwgTWlycm9yUGFkQXR0cnMsIE1pcnJvclBhZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcmAgdXNpbmcgbWlycm9yIHBhZGRpbmcuXG4gKlxuICogVGhpcyBvcGVyYXRpb24gaW1wbGVtZW50cyB0aGUgYFJFRkxFQ1RgIGFuZCBgU1lNTUVUUklDYCBtb2RlcyBvZiBwYWQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5yYW5nZSgwLCA5KS5yZXNoYXBlKFsxLCAxLCAzLCAzXSk7XG4gKiB4Lm1pcnJvclBhZChbWzAsIDBdLCBbMCwgMF0sIFsyLCAyXSwgWzIsIDJdXSwgJ3JlZmxlY3QnKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgdGVuc29yIHRvIHBhZC5cbiAqIEBwYXJhbSBwYWRkaW5ncyBBbiBhcnJheSBvZiBsZW5ndGggYFJgICh0aGUgcmFuayBvZiB0aGUgdGVuc29yKSwgd2hlcmVcbiAqIGVhY2ggZWxlbWVudCBpcyBhIGxlbmd0aC0yIHR1cGxlIG9mIGludHMgYFtwYWRCZWZvcmUsIHBhZEFmdGVyXWAsXG4gKiBzcGVjaWZ5aW5nIGhvdyBtdWNoIHRvIHBhZCBhbG9uZyBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgdGVuc29yLlxuICogSW4gXCJyZWZsZWN0XCIgbW9kZSwgdGhlIHBhZGRlZCByZWdpb25zIGRvIG5vdCBpbmNsdWRlIHRoZSBib3JkZXJzLFxuICogd2hpbGUgaW4gXCJzeW1tZXRyaWNcIiBtb2RlIHRoZSBwYWRkZWQgcmVnaW9ucyBkbyBpbmNsdWRlIHRoZSBib3JkZXJzLlxuICogRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnB1dCBpcyBgWzEsIDIsIDNdYCBhbmQgcGFkZGluZ3MgaXMgYFswLCAyXWAsXG4gKiB0aGVuIHRoZSBvdXRwdXQgaXMgYFsxLCAyLCAzLCAyLCAxXWAgaW4gXCJyZWZsZWN0XCIgbW9kZSwgYW5kXG4gKiBgWzEsIDIsIDMsIDMsIDJdYCBpbiBcInN5bW1ldHJpY1wiIG1vZGUuXG4gKiBJZiBgbW9kZWAgaXMgXCJyZWZsZWN0XCIgdGhlbiBib3RoIGBwYWRkaW5nc1tELCAwXWAgYW5kIGBwYWRkaW5nc1tELCAxXWBcbiAqIG11c3QgYmUgbm8gZ3JlYXRlciB0aGFuIGB4LnNoYXBlW0RdIC0gMWAuIElmIG1vZGUgaXMgXCJzeW1tZXRyaWNcIlxuICogdGhlbiBib3RoIGBwYWRkaW5nc1tELCAwXWAgYW5kIGBwYWRkaW5nc1tELCAxXWAgbXVzdCBiZSBubyBncmVhdGVyIHRoYW5cbiAqIGB4LnNoYXBlW0RdYFxuICogQHBhcmFtIG1vZGUgU3RyaW5nIHRvIHNwZWNpZnkgcGFkZGluZyBtb2RlLiBDYW4gYmUgYCdyZWZsZWN0JyB8ICdzeW1tZXRyaWMnYFxuICovXG4vKiogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ30gKi9cbmZ1bmN0aW9uIG1pcnJvclBhZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgbW9kZTogJ3JlZmxlY3QnfCdzeW1tZXRyaWMnKTogVCB7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgbW9kZSA9PT0gJ3JlZmxlY3QnIHx8IG1vZGUgPT09ICdzeW1tZXRyaWMnLFxuICAgICAgKCkgPT4gYEludmFsaWQgbW9kZS4gTW9kZSBtdXN0IGJlIGVpdGhlciByZWZsZWN0IG9yIHN5bW1ldHJpYy4gYCArXG4gICAgICAgICAgYEdvdCAke21vZGV9LmApO1xuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21pcnJvclBhZCcpO1xuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ21pcnJvclBhZChzY2FsYXIpIGlzIG5vdCBkZWZpbmVkLiAnICtcbiAgICAgICAgJ1Bhc3Mgbm9uLXNjYWxhciB0byBtaXJyb3JQYWQnKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgIHBhZGRpbmdzLmxlbmd0aCA9PT0gJHgucmFuayxcbiAgICAgICgpID0+IGBQYWRkaW5nIGRvZXNuJ3QgbWF0Y2ggaW5wdXQuIE11c3QgYmUgJHskeC5yYW5rfS4gYCArXG4gICAgICAgICAgYEdvdCAke3BhZGRpbmdzLmxlbmd0aH0uYCk7XG4gIGNvbnN0IHNoYXBlT2Zmc2V0ID0gbW9kZSA9PT0gJ3JlZmxlY3QnID8gMSA6IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgJHgucmFuazsgaSsrKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHBhZGRpbmdzW2ldLmxlbmd0aCA9PT0gMixcbiAgICAgICAgKCkgPT4gYEludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyIGVhY2guYCk7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHBhZGRpbmdzW2ldWzBdID49IDAgJiYgcGFkZGluZ3NbaV1bMF0gPD0gJHguc2hhcGVbaV0gLSBzaGFwZU9mZnNldCAmJlxuICAgICAgICAgICAgcGFkZGluZ3NbaV1bMV0gPj0gMCAmJiBwYWRkaW5nc1tpXVsxXSA8PSAkeC5zaGFwZVtpXSAtIHNoYXBlT2Zmc2V0LFxuICAgICAgICAoKSA9PiBgUGFkZGluZyBpbiBkaW1lbnNpb24gJHtpfSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGAgK1xuICAgICAgICAgICAgYHRvICR7JHguc2hhcGVbaV0gLSBzaGFwZU9mZnNldH0gb3IgbGVzcyB0aGFuIDAgZm9yIGlucHV0IG9mIGAgK1xuICAgICAgICAgICAgYHNoYXBlICR7JHguc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBhdHRyczogTWlycm9yUGFkQXR0cnMgPSB7cGFkZGluZ3MsIG1vZGV9O1xuICBjb25zdCBpbnB1dHM6IE1pcnJvclBhZElucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgTWlycm9yUGFkLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1pcnJvclBhZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bWlycm9yUGFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Mod } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the mod of a and b element-wise.\n * `floor(x / y) * y + mod(x, y) = x`\n * Supports broadcasting.\n *\n * We also expose `tf.modStrict` which has the same signature as this op and\n * asserts that `a` and `b` are the same shape (does not broadcast).\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.mod(b).print(); // or tf.mod(a, b)\n * ```\n *\n * ```js\n * // Broadcast a mod b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.mod(b).print(); // or tf.mod(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction mod_(a, b) {\n let $a = convertToTensor(a, 'a', 'mod');\n let $b = convertToTensor(b, 'b', 'mod');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(Mod, inputs);\n}\nexport const mod = /* @__PURE__ */ op({ mod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbW9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQW9CLEVBQUUsQ0FBb0I7SUFDeEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQyxNQUFNLE1BQU0sR0FBYyxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXpDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtNb2QsIE1vZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb2Qgb2YgYSBhbmQgYiBlbGVtZW50LXdpc2UuXG4gKiBgZmxvb3IoeCAvIHkpICogeSArIG1vZCh4LCB5KSA9IHhgXG4gKiBTdXBwb3J0cyBicm9hZGNhc3RpbmcuXG4gKlxuICogV2UgYWxzbyBleHBvc2UgYHRmLm1vZFN0cmljdGAgd2hpY2ggaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGlzIG9wIGFuZFxuICogYXNzZXJ0cyB0aGF0IGBhYCBhbmQgYGJgIGFyZSB0aGUgc2FtZSBzaGFwZSAoZG9lcyBub3QgYnJvYWRjYXN0KS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCAzLCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCA5LCA0XSk7XG4gKlxuICogYS5tb2QoYikucHJpbnQoKTsgIC8vIG9yIHRmLm1vZChhLCBiKVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEJyb2FkY2FzdCBhIG1vZCBiLlxuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsyLCA0LCA2LCA4XSk7XG4gKiBjb25zdCBiID0gdGYuc2NhbGFyKDUpO1xuICpcbiAqIGEubW9kKGIpLnByaW50KCk7ICAvLyBvciB0Zi5tb2QoYSwgYilcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBhIFRoZSBmaXJzdCB0ZW5zb3IuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIHRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0FyaXRobWV0aWMnfVxuICovXG5mdW5jdGlvbiBtb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KGE6IFRlbnNvcnxUZW5zb3JMaWtlLCBiOiBUZW5zb3J8VGVuc29yTGlrZSk6IFQge1xuICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnbW9kJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdtb2QnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGNvbnN0IGlucHV0czogTW9kSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoTW9kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBtb2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe21vZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { parseAxisParam } from '../util';\nimport { expandShapeToKeepDim } from './axis_util';\nimport { cast } from './cast';\nimport { mean } from './mean';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { square } from './square';\nimport { sub } from './sub';\n/**\n * Calculates the mean and variance of `x`. The mean and variance are\n * calculated by aggregating the contents of `x` across `axes`. If `x` is\n * 1-D and `axes = [0]` this is just the mean and variance of a vector.\n *\n * @param x The input tensor.\n * @param axis The dimension(s) along with to compute mean and\n * variance. By default it reduces all dimensions.\n * @param keepDims If true, the moments have the same dimensionality as the\n * input.\n * @return An object with two keys: `mean` and `variance`.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction moments_(x, axis = null, keepDims = false) {\n x = convertToTensor(x, 'x', 'moments');\n const axes = parseAxisParam(axis, x.shape);\n const xMean = mean(x, axes, keepDims);\n let keepDimsShape = xMean.shape;\n if (!keepDims) {\n keepDimsShape = expandShapeToKeepDim(xMean.shape, axes);\n }\n const devSquared = square(sub(cast(x, 'float32'), reshape(xMean, keepDimsShape)));\n const variance = mean(devSquared, axes, keepDims);\n return { mean: xMean, variance };\n}\nexport const moments = /* @__PURE__ */ op({ moments_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL21vbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFvQixFQUFFLE9BQXdCLElBQUksRUFDbEQsUUFBUSxHQUFHLEtBQUs7SUFDbEIsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsTUFBTSxVQUFVLEdBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7cGFyc2VBeGlzUGFyYW19IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2V4cGFuZFNoYXBlVG9LZWVwRGltfSBmcm9tICcuL2F4aXNfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vY2FzdCc7XG5pbXBvcnQge21lYW59IGZyb20gJy4vbWVhbic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi9zcXVhcmUnO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4vc3ViJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBtZWFuIGFuZCB2YXJpYW5jZSBvZiBgeGAuIFRoZSBtZWFuIGFuZCB2YXJpYW5jZSBhcmVcbiAqIGNhbGN1bGF0ZWQgYnkgYWdncmVnYXRpbmcgdGhlIGNvbnRlbnRzIG9mIGB4YCBhY3Jvc3MgYGF4ZXNgLiBJZiBgeGAgaXNcbiAqIDEtRCBhbmQgYGF4ZXMgPSBbMF1gIHRoaXMgaXMganVzdCB0aGUgbWVhbiBhbmQgdmFyaWFuY2Ugb2YgYSB2ZWN0b3IuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24ocykgYWxvbmcgd2l0aCB0byBjb21wdXRlIG1lYW4gYW5kXG4gKiAgICAgdmFyaWFuY2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlcyBhbGwgZGltZW5zaW9ucy5cbiAqIEBwYXJhbSBrZWVwRGltcyBJZiB0cnVlLCB0aGUgbW9tZW50cyBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbmFsaXR5IGFzIHRoZVxuICogICAgIGlucHV0LlxuICogQHJldHVybiBBbiBvYmplY3Qgd2l0aCB0d28ga2V5czogYG1lYW5gIGFuZCBgdmFyaWFuY2VgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ05vcm1hbGl6YXRpb24nfVxuICovXG5mdW5jdGlvbiBtb21lbnRzXyhcbiAgICB4OiBUZW5zb3J8VGVuc29yTGlrZSwgYXhpczogbnVtYmVyfG51bWJlcltdID0gbnVsbCxcbiAgICBrZWVwRGltcyA9IGZhbHNlKToge21lYW46IFRlbnNvciwgdmFyaWFuY2U6IFRlbnNvcn0ge1xuICB4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21vbWVudHMnKTtcbiAgY29uc3QgYXhlcyA9IHBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBjb25zdCB4TWVhbiA9IG1lYW4oeCwgYXhlcywga2VlcERpbXMpO1xuICBsZXQga2VlcERpbXNTaGFwZSA9IHhNZWFuLnNoYXBlO1xuICBpZiAoIWtlZXBEaW1zKSB7XG4gICAga2VlcERpbXNTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKHhNZWFuLnNoYXBlLCBheGVzKTtcbiAgfVxuICBjb25zdCBkZXZTcXVhcmVkID1cbiAgICAgIHNxdWFyZShzdWIoY2FzdCh4LCAnZmxvYXQzMicpLCByZXNoYXBlKHhNZWFuLCBrZWVwRGltc1NoYXBlKSkpO1xuICBjb25zdCB2YXJpYW5jZSA9IG1lYW4oZGV2U3F1YXJlZCwgYXhlcywga2VlcERpbXMpO1xuICByZXR1cm4ge21lYW46IHhNZWFuLCB2YXJpYW5jZX07XG59XG5cbmV4cG9ydCBjb25zdCBtb21lbnRzID0gLyogQF9fUFVSRV9fICovIG9wKHttb21lbnRzX30pO1xuIl19","import { convertToTensor, convertToTensorArray } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the next states and outputs of a stack of LSTMCells.\n *\n * Each cell output is used as input to the next cell.\n *\n * Returns `[cellState, cellOutput]`.\n *\n * Derived from tf.contrib.rn.MultiRNNCell.\n *\n * @param lstmCells Array of LSTMCell functions.\n * @param data The input to the cell.\n * @param c Array of previous cell states.\n * @param h Array of previous cell outputs.\n *\n * @doc {heading: 'Operations', subheading: 'RNN'}\n */\nfunction multiRNNCell_(lstmCells, data, c, h) {\n const $data = convertToTensor(data, 'data', 'multiRNNCell');\n const $c = convertToTensorArray(c, 'c', 'multiRNNCell');\n const $h = convertToTensorArray(h, 'h', 'multiRNNCell');\n let input = $data;\n const newStates = [];\n for (let i = 0; i < lstmCells.length; i++) {\n const output = lstmCells[i](input, $c[i], $h[i]);\n newStates.push(output[0]);\n newStates.push(output[1]);\n input = output[1];\n }\n const newC = [];\n const newH = [];\n for (let i = 0; i < newStates.length; i += 2) {\n newC.push(newStates[i]);\n newH.push(newStates[i + 1]);\n }\n return [newC, newH];\n}\nexport const multiRNNCell = /* @__PURE__ */ op({ multiRNNCell_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfcm5uX2NlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tdWx0aV9ybm5fY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXpFLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFTL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQXlCLEVBQUUsSUFBeUIsRUFDcEQsQ0FBNkIsRUFDN0IsQ0FBNkI7SUFDL0IsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsTUFBTSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRXhELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLElBQUksR0FBZSxFQUFFLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvciwgY29udmVydFRvVGVuc29yQXJyYXl9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBAZG9jYWxpYXMgKGRhdGE6IFRlbnNvcjJELCBjOiBUZW5zb3IyRCwgaDogVGVuc29yMkQpOiBbVGVuc29yMkQsIFRlbnNvcjJEXVxuICovXG5leHBvcnQgdHlwZSBMU1RNQ2VsbEZ1bmMgPSB7XG4gIChkYXRhOiBUZW5zb3IyRCwgYzogVGVuc29yMkQsIGg6IFRlbnNvcjJEKTogW1RlbnNvcjJELCBUZW5zb3IyRF07XG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBuZXh0IHN0YXRlcyBhbmQgb3V0cHV0cyBvZiBhIHN0YWNrIG9mIExTVE1DZWxscy5cbiAqXG4gKiBFYWNoIGNlbGwgb3V0cHV0IGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIG5leHQgY2VsbC5cbiAqXG4gKiBSZXR1cm5zIGBbY2VsbFN0YXRlLCBjZWxsT3V0cHV0XWAuXG4gKlxuICogRGVyaXZlZCBmcm9tIHRmLmNvbnRyaWIucm4uTXVsdGlSTk5DZWxsLlxuICpcbiAqIEBwYXJhbSBsc3RtQ2VsbHMgQXJyYXkgb2YgTFNUTUNlbGwgZnVuY3Rpb25zLlxuICogQHBhcmFtIGRhdGEgVGhlIGlucHV0IHRvIHRoZSBjZWxsLlxuICogQHBhcmFtIGMgQXJyYXkgb2YgcHJldmlvdXMgY2VsbCBzdGF0ZXMuXG4gKiBAcGFyYW0gaCBBcnJheSBvZiBwcmV2aW91cyBjZWxsIG91dHB1dHMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnUk5OJ31cbiAqL1xuZnVuY3Rpb24gbXVsdGlSTk5DZWxsXyhcbiAgICBsc3RtQ2VsbHM6IExTVE1DZWxsRnVuY1tdLCBkYXRhOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGM6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+LFxuICAgIGg6IEFycmF5PFRlbnNvcjJEfFRlbnNvckxpa2U+KTogW1RlbnNvcjJEW10sIFRlbnNvcjJEW11dIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnbXVsdGlSTk5DZWxsJyk7XG4gIGNvbnN0ICRjID0gY29udmVydFRvVGVuc29yQXJyYXkoYywgJ2MnLCAnbXVsdGlSTk5DZWxsJyk7XG4gIGNvbnN0ICRoID0gY29udmVydFRvVGVuc29yQXJyYXkoaCwgJ2gnLCAnbXVsdGlSTk5DZWxsJyk7XG5cbiAgbGV0IGlucHV0ID0gJGRhdGE7XG4gIGNvbnN0IG5ld1N0YXRlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxzdG1DZWxscy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG91dHB1dCA9IGxzdG1DZWxsc1tpXShpbnB1dCwgJGNbaV0sICRoW2ldKTtcbiAgICBuZXdTdGF0ZXMucHVzaChvdXRwdXRbMF0pO1xuICAgIG5ld1N0YXRlcy5wdXNoKG91dHB1dFsxXSk7XG4gICAgaW5wdXQgPSBvdXRwdXRbMV07XG4gIH1cbiAgY29uc3QgbmV3QzogVGVuc29yMkRbXSA9IFtdO1xuICBjb25zdCBuZXdIOiBUZW5zb3IyRFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgbmV3Qy5wdXNoKG5ld1N0YXRlc1tpXSk7XG4gICAgbmV3SC5wdXNoKG5ld1N0YXRlc1tpICsgMV0pO1xuICB9XG4gIHJldHVybiBbbmV3QywgbmV3SF07XG59XG5leHBvcnQgY29uc3QgbXVsdGlSTk5DZWxsID0gLyogQF9fUFVSRV9fICovIG9wKHttdWx0aVJOTkNlbGxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Multinomial } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Creates a `tf.Tensor` with values drawn from a multinomial distribution.\n *\n * ```js\n * const probs = tf.tensor([.75, .25]);\n * tf.multinomial(probs, 3).print();\n * ```\n *\n * @param logits 1D array with unnormalized log-probabilities, or\n * 2D array of shape `[batchSize, numOutcomes]`. See the `normalized`\n * parameter.\n * @param numSamples Number of samples to draw for each row slice.\n * @param seed The seed number.\n * @param normalized Whether the provided `logits` are normalized true\n * probabilities (sum to 1). Defaults to false.\n * @return 1D array of shape `[numSamples]`, or 2D array of shape\n * `[batchSize, numSamples]`, depending on the rank of the input.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction multinomial_(logits, numSamples, seed, normalized = false) {\n const $logits = convertToTensor(logits, 'logits', 'multinomial');\n const numOutcomes = $logits.size;\n const origRank = $logits.rank;\n if (numOutcomes < 2) {\n throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ` +\n `${numOutcomes}.`);\n }\n if (origRank > 2) {\n throw new Error(`Rank of probabilities must be 1 or 2, but is ${origRank}`);\n }\n // TODO(lina128): Investigate correct seed behavior. The code seems not allow\n // setting see to 0.\n seed = seed || Math.random();\n // The kernel only accepts (and returns) rank 2 tensors.\n const logits2D = origRank === 1 ? reshape($logits, [1, -1]) : $logits;\n const inputs = { logits: logits2D };\n const attrs = { numSamples, seed, normalized };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(Multinomial, inputs, attrs);\n // tslint:disable-next-line:no-unnecessary-type-assertion\n return origRank === 1 ? reshape(res, [res.size]) : res;\n}\nexport const multinomial = /* @__PURE__ */ op({ multinomial_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlub21pYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tdWx0aW5vbWlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0saUJBQWlCLENBQUM7QUFJakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsWUFBWSxDQUNqQixNQUFvQyxFQUFFLFVBQWtCLEVBQUUsSUFBYSxFQUN2RSxVQUFVLEdBQUcsS0FBSztJQUNwQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDOUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsOERBQThEO1lBQzlELEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztLQUN4QjtJQUNELElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBQ0QsNkVBQTZFO0lBQzdFLG9CQUFvQjtJQUNwQixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUU3Qix3REFBd0Q7SUFDeEQsTUFBTSxRQUFRLEdBQ1YsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQW1CLENBQUM7SUFFckUsTUFBTSxNQUFNLEdBQXNCLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUFxQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFFL0QsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osV0FBVyxFQUFFLE1BQW1DLEVBQ2hELEtBQWdDLENBQWEsQ0FBQztJQUU5RCx5REFBeUQ7SUFDekQsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7TXVsdGlub21pYWwsIE11bHRpbm9taWFsQXR0cnMsIE11bHRpbm9taWFsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIGRyYXduIGZyb20gYSBtdWx0aW5vbWlhbCBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHByb2JzID0gdGYudGVuc29yKFsuNzUsIC4yNV0pO1xuICogdGYubXVsdGlub21pYWwocHJvYnMsIDMpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbG9naXRzIDFEIGFycmF5IHdpdGggdW5ub3JtYWxpemVkIGxvZy1wcm9iYWJpbGl0aWVzLCBvclxuICogICAgIDJEIGFycmF5IG9mIHNoYXBlIGBbYmF0Y2hTaXplLCBudW1PdXRjb21lc11gLiBTZWUgdGhlIGBub3JtYWxpemVkYFxuICogICAgIHBhcmFtZXRlci5cbiAqIEBwYXJhbSBudW1TYW1wbGVzIE51bWJlciBvZiBzYW1wbGVzIHRvIGRyYXcgZm9yIGVhY2ggcm93IHNsaWNlLlxuICogQHBhcmFtIHNlZWQgVGhlIHNlZWQgbnVtYmVyLlxuICogQHBhcmFtIG5vcm1hbGl6ZWQgV2hldGhlciB0aGUgcHJvdmlkZWQgYGxvZ2l0c2AgYXJlIG5vcm1hbGl6ZWQgdHJ1ZVxuICogICAgIHByb2JhYmlsaXRpZXMgKHN1bSB0byAxKS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcmV0dXJuIDFEIGFycmF5IG9mIHNoYXBlIGBbbnVtU2FtcGxlc11gLCBvciAyRCBhcnJheSBvZiBzaGFwZVxuICogICAgIGBbYmF0Y2hTaXplLCBudW1TYW1wbGVzXWAsIGRlcGVuZGluZyBvbiB0aGUgcmFuayBvZiB0aGUgaW5wdXQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gbXVsdGlub21pYWxfKFxuICAgIGxvZ2l0czogVGVuc29yMUR8VGVuc29yMkR8VGVuc29yTGlrZSwgbnVtU2FtcGxlczogbnVtYmVyLCBzZWVkPzogbnVtYmVyLFxuICAgIG5vcm1hbGl6ZWQgPSBmYWxzZSk6IFRlbnNvcjFEfFRlbnNvcjJEIHtcbiAgY29uc3QgJGxvZ2l0cyA9IGNvbnZlcnRUb1RlbnNvcihsb2dpdHMsICdsb2dpdHMnLCAnbXVsdGlub21pYWwnKTtcbiAgY29uc3QgbnVtT3V0Y29tZXMgPSAkbG9naXRzLnNpemU7XG4gIGNvbnN0IG9yaWdSYW5rID0gJGxvZ2l0cy5yYW5rO1xuICBpZiAobnVtT3V0Y29tZXMgPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXJyb3IgaW4gbXVsdGlub21pYWw6IHlvdSBuZWVkIGF0IGxlYXN0IDIgb3V0Y29tZXMsIGJ1dCBnb3QgYCArXG4gICAgICAgIGAke251bU91dGNvbWVzfS5gKTtcbiAgfVxuICBpZiAob3JpZ1JhbmsgPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSYW5rIG9mIHByb2JhYmlsaXRpZXMgbXVzdCBiZSAxIG9yIDIsIGJ1dCBpcyAke29yaWdSYW5rfWApO1xuICB9XG4gIC8vIFRPRE8obGluYTEyOCk6IEludmVzdGlnYXRlIGNvcnJlY3Qgc2VlZCBiZWhhdmlvci4gVGhlIGNvZGUgc2VlbXMgbm90IGFsbG93XG4gIC8vIHNldHRpbmcgc2VlIHRvIDAuXG4gIHNlZWQgPSBzZWVkIHx8IE1hdGgucmFuZG9tKCk7XG5cbiAgLy8gVGhlIGtlcm5lbCBvbmx5IGFjY2VwdHMgKGFuZCByZXR1cm5zKSByYW5rIDIgdGVuc29ycy5cbiAgY29uc3QgbG9naXRzMkQ6IFRlbnNvcjJEID1cbiAgICAgIG9yaWdSYW5rID09PSAxID8gcmVzaGFwZSgkbG9naXRzLCBbMSwgLTFdKSA6ICRsb2dpdHMgYXMgVGVuc29yMkQ7XG5cbiAgY29uc3QgaW5wdXRzOiBNdWx0aW5vbWlhbElucHV0cyA9IHtsb2dpdHM6IGxvZ2l0czJEfTtcbiAgY29uc3QgYXR0cnM6IE11bHRpbm9taWFsQXR0cnMgPSB7bnVtU2FtcGxlcywgc2VlZCwgbm9ybWFsaXplZH07XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgTXVsdGlub21pYWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjJEO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gb3JpZ1JhbmsgPT09IDEgPyByZXNoYXBlKHJlcywgW3Jlcy5zaXplXSkgYXMgVGVuc29yMUQgOiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBtdWx0aW5vbWlhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bXVsdGlub21pYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { NotEqual } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns the truth value of (a != b) element-wise. Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([0, 2, 3]);\n *\n * a.notEqual(b).print();\n * ```\n * @param a The first input tensor.\n * @param b The second input tensor. Must have the same dtype as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nfunction notEqual_(a, b) {\n let $a = convertToTensor(a, 'a', 'notEqual', 'string_or_numeric');\n let $b = convertToTensor(b, 'b', 'notEqual', 'string_or_numeric');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n return ENGINE.runKernel(NotEqual, inputs);\n}\nexport const notEqual = /* @__PURE__ */ op({ notEqual_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90X2VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbm90X2VxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsU0FBUyxDQUNkLENBQW9CLEVBQUUsQ0FBb0I7SUFDNUMsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVsQywwQkFBMEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUvQyxNQUFNLE1BQU0sR0FBbUIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUU5QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge05vdEVxdWFsLCBOb3RFcXVhbElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7bWFrZVR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7YXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGV9IGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHRydXRoIHZhbHVlIG9mIChhICE9IGIpIGVsZW1lbnQtd2lzZS4gU3VwcG9ydHMgYnJvYWRjYXN0aW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMCwgMiwgM10pO1xuICpcbiAqIGEubm90RXF1YWwoYikucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGEgVGhlIGZpcnN0IGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgaW5wdXQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgYGFgLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5mdW5jdGlvbiBub3RFcXVhbF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgYTogVGVuc29yfFRlbnNvckxpa2UsIGI6IFRlbnNvcnxUZW5zb3JMaWtlKTogVCB7XG4gIGxldCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdub3RFcXVhbCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBsZXQgJGIgPSBjb252ZXJ0VG9UZW5zb3IoYiwgJ2InLCAnbm90RXF1YWwnLCAnc3RyaW5nX29yX251bWVyaWMnKTtcbiAgWyRhLCAkYl0gPSBtYWtlVHlwZXNNYXRjaCgkYSwgJGIpO1xuXG4gIGFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKCRhLnNoYXBlLCAkYi5zaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBOb3RFcXVhbElucHV0cyA9IHthOiAkYSwgYjogJGJ9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKE5vdEVxdWFsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBub3RFcXVhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bm90RXF1YWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { OneHot } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a one-hot `tf.Tensor`. The locations represented by `indices` take\n * value `onValue` (defaults to 1), while all other locations take value\n * `offValue` (defaults to 0). If `indices` is rank `R`, the output has rank\n * `R+1` with the last axis of size `depth`.\n * `indices` used to encode prediction class must start from 0. For example,\n * if you have 3 classes of data, class 1 should be encoded as 0, class 2\n * should be 1, and class 3 should be 2.\n *\n * ```js\n * tf.oneHot(tf.tensor1d([0, 1], 'int32'), 3).print();\n * ```\n *\n * @param indices `tf.Tensor` of indices with dtype `int32`. Indices must\n * start from 0.\n * @param depth The depth of the one hot dimension.\n * @param onValue A number used to fill in the output when the index matches\n * the location.\n * @param offValue A number used to fill in the output when the index does\n * not match the location.\n * @param dtype The dtype of the output tensor, default to 'int32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction oneHot_(indices, depth, onValue = 1, offValue = 0, dtype = 'int32') {\n if (depth < 2) {\n throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`);\n }\n const $indices = convertToTensor(indices, 'indices', 'oneHot', 'int32');\n const inputs = { indices: $indices };\n const attrs = { dtype, depth, onValue, offValue };\n return ENGINE.runKernel(OneHot, inputs, attrs);\n}\nexport const oneHot = /* @__PURE__ */ op({ oneHot_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lX2hvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL29uZV9ob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsT0FBTyxDQUNaLE9BQTBCLEVBQUUsS0FBYSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFDcEUsUUFBa0IsT0FBTztJQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzNFO0lBQ0QsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFpQixFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBZ0IsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE1BQU0sRUFBRSxNQUFtQyxFQUMzQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge09uZUhvdCwgT25lSG90QXR0cnMsIE9uZUhvdElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge0RhdGFUeXBlLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgb25lLWhvdCBgdGYuVGVuc29yYC4gVGhlIGxvY2F0aW9ucyByZXByZXNlbnRlZCBieSBgaW5kaWNlc2AgdGFrZVxuICogdmFsdWUgYG9uVmFsdWVgIChkZWZhdWx0cyB0byAxKSwgd2hpbGUgYWxsIG90aGVyIGxvY2F0aW9ucyB0YWtlIHZhbHVlXG4gKiBgb2ZmVmFsdWVgIChkZWZhdWx0cyB0byAwKS4gSWYgYGluZGljZXNgIGlzIHJhbmsgYFJgLCB0aGUgb3V0cHV0IGhhcyByYW5rXG4gKiBgUisxYCB3aXRoIHRoZSBsYXN0IGF4aXMgb2Ygc2l6ZSBgZGVwdGhgLlxuICogYGluZGljZXNgIHVzZWQgdG8gZW5jb2RlIHByZWRpY3Rpb24gY2xhc3MgbXVzdCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLFxuICogIGlmIHlvdSBoYXZlIDMgY2xhc3NlcyBvZiBkYXRhLCBjbGFzcyAxIHNob3VsZCBiZSBlbmNvZGVkIGFzIDAsIGNsYXNzIDJcbiAqICBzaG91bGQgYmUgMSwgYW5kIGNsYXNzIDMgc2hvdWxkIGJlIDIuXG4gKlxuICogYGBganNcbiAqIHRmLm9uZUhvdCh0Zi50ZW5zb3IxZChbMCwgMV0sICdpbnQzMicpLCAzKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGluZGljZXMgYHRmLlRlbnNvcmAgb2YgaW5kaWNlcyB3aXRoIGR0eXBlIGBpbnQzMmAuIEluZGljZXMgbXVzdFxuICogc3RhcnQgZnJvbSAwLlxuICogQHBhcmFtIGRlcHRoIFRoZSBkZXB0aCBvZiB0aGUgb25lIGhvdCBkaW1lbnNpb24uXG4gKiBAcGFyYW0gb25WYWx1ZSBBIG51bWJlciB1c2VkIHRvIGZpbGwgaW4gdGhlIG91dHB1dCB3aGVuIHRoZSBpbmRleCBtYXRjaGVzXG4gKiB0aGUgbG9jYXRpb24uXG4gKiBAcGFyYW0gb2ZmVmFsdWUgQSBudW1iZXIgdXNlZCB0byBmaWxsIGluIHRoZSBvdXRwdXQgd2hlbiB0aGUgaW5kZXggZG9lc1xuICogICAgIG5vdCBtYXRjaCB0aGUgbG9jYXRpb24uXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGR0eXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLCBkZWZhdWx0IHRvICdpbnQzMicuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5mdW5jdGlvbiBvbmVIb3RfKFxuICAgIGluZGljZXM6IFRlbnNvcnxUZW5zb3JMaWtlLCBkZXB0aDogbnVtYmVyLCBvblZhbHVlID0gMSwgb2ZmVmFsdWUgPSAwLFxuICAgIGR0eXBlOiBEYXRhVHlwZSA9ICdpbnQzMicpOiBUZW5zb3Ige1xuICBpZiAoZGVwdGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbiBvbmVIb3Q6IGRlcHRoIG11c3QgYmUgPj0yLCBidXQgaXQgaXMgJHtkZXB0aH1gKTtcbiAgfVxuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdvbmVIb3QnLCAnaW50MzInKTtcblxuICBjb25zdCBpbnB1dHM6IE9uZUhvdElucHV0cyA9IHtpbmRpY2VzOiAkaW5kaWNlc307XG4gIGNvbnN0IGF0dHJzOiBPbmVIb3RBdHRycyA9IHtkdHlwZSwgZGVwdGgsIG9uVmFsdWUsIG9mZlZhbHVlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIE9uZUhvdCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBvbmVIb3QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe29uZUhvdF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { OnesLike } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with all elements set to 1 with the same shape as the\n * given tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n * tf.onesLike(x).print();\n * ```\n * @param x A tensor.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction onesLike_(x) {\n const $x = convertToTensor(x, 'x', 'onesLike');\n const inputs = { x: $x };\n return ENGINE.runKernel(OnesLike, inputs);\n}\nexport const onesLike = /* @__PURE__ */ op({ onesLike_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lc19saWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb25lc19saWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsU0FBUyxDQUFtQixDQUFlO0lBQ2xELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFtQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUN2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7T25lc0xpa2UsIE9uZXNMaWtlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIGFsbCBlbGVtZW50cyBzZXQgdG8gMSB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIHRoZVxuICogZ2l2ZW4gdGVuc29yLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyXSk7XG4gKiB0Zi5vbmVzTGlrZSh4KS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBBIHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIG9uZXNMaWtlXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnb25lc0xpa2UnKTtcblxuICBjb25zdCBpbnB1dHM6IE9uZXNMaWtlSW5wdXRzID0ge3g6ICR4fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoT25lc0xpa2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IG9uZXNMaWtlID0gLyogQF9fUFVSRV9fICovIG9wKHtvbmVzTGlrZV99KTtcbiJdfQ==","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { matMul } from './mat_mul';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the outer product of two vectors, `v1` and `v2`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n * const b = tf.tensor1d([3, 4, 5]);\n *\n * tf.outerProduct(a, b).print();\n * ```\n * @param v1 The first vector in the outer product operation.\n * @param v2 The second vector in the outer product operation.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction outerProduct_(v1, v2) {\n const $v1 = convertToTensor(v1, 'v1', 'outerProduct');\n const $v2 = convertToTensor(v2, 'v2', 'outerProduct');\n util.assert($v1.rank === 1 && $v2.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ` +\n `${$v1.rank} and ${$v2.rank}.`);\n const v12D = reshape($v1, [-1, 1]);\n const v22D = reshape($v2, [1, -1]);\n return matMul(v12D, v22D);\n}\nexport const outerProduct = /* @__PURE__ */ op({ outerProduct_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0ZXJfcHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL291dGVyX3Byb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLEVBQXVCLEVBQUUsRUFBdUI7SUFDbEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFdEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDaEMsR0FBRyxFQUFFLENBQUMsOERBQThEO1FBQ2hFLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7bWF0TXVsfSBmcm9tICcuL21hdF9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBvdXRlciBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzLCBgdjFgIGFuZCBgdjJgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IxZChbMywgNCwgNV0pO1xuICpcbiAqIHRmLm91dGVyUHJvZHVjdChhLCBiKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gdjEgVGhlIGZpcnN0IHZlY3RvciBpbiB0aGUgb3V0ZXIgcHJvZHVjdCBvcGVyYXRpb24uXG4gKiBAcGFyYW0gdjIgVGhlIHNlY29uZCB2ZWN0b3IgaW4gdGhlIG91dGVyIHByb2R1Y3Qgb3BlcmF0aW9uLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gb3V0ZXJQcm9kdWN0XyhcbiAgICB2MTogVGVuc29yMUR8VGVuc29yTGlrZSwgdjI6IFRlbnNvcjFEfFRlbnNvckxpa2UpOiBUZW5zb3IyRCB7XG4gIGNvbnN0ICR2MSA9IGNvbnZlcnRUb1RlbnNvcih2MSwgJ3YxJywgJ291dGVyUHJvZHVjdCcpO1xuICBjb25zdCAkdjIgPSBjb252ZXJ0VG9UZW5zb3IodjIsICd2MicsICdvdXRlclByb2R1Y3QnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR2MS5yYW5rID09PSAxICYmICR2Mi5yYW5rID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG91dGVyUHJvZHVjdDogaW5wdXRzIG11c3QgYmUgcmFuayAxLCBidXQgZ290IHJhbmtzIGAgK1xuICAgICAgICAgIGAkeyR2MS5yYW5rfSBhbmQgJHskdjIucmFua30uYCk7XG5cbiAgY29uc3QgdjEyRCA9IHJlc2hhcGUoJHYxLCBbLTEsIDFdKTtcbiAgY29uc3QgdjIyRCA9IHJlc2hhcGUoJHYyLCBbMSwgLTFdKTtcbiAgcmV0dXJuIG1hdE11bCh2MTJELCB2MjJEKTtcbn1cblxuZXhwb3J0IGNvbnN0IG91dGVyUHJvZHVjdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7b3V0ZXJQcm9kdWN0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { PadV2 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Pads a `tf.Tensor` with a given value and paddings.\n *\n * This operation implements `CONSTANT` mode. For `REFLECT` and `SYMMETRIC`,\n * refer to `tf.mirrorPad`.\n *\n * Also available are stricter rank-specific methods with the same signature\n * as this method that assert that `paddings` is of given length.\n * - `tf.pad1d`\n * - `tf.pad2d`\n * - `tf.pad3d`\n * - `tf.pad4d`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * x.pad([[1, 2]]).print();\n * ```\n * @param x The tensor to pad.\n * @param paddings An array of length `R` (the rank of the tensor), where\n * each element is a length-2 tuple of ints `[padBefore, padAfter]`,\n * specifying how much to pad along each dimension of the tensor.\n * @param constantValue The pad value to use. Defaults to 0.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction pad_(x, paddings, constantValue = 0) {\n const $x = convertToTensor(x, 'x', 'pad');\n if ($x.rank === 0) {\n throw new Error('pad(scalar) is not defined. Pass non-scalar to pad');\n }\n const attrs = { paddings, constantValue };\n const inputs = { x: $x };\n return ENGINE.runKernel(PadV2, inputs, attrs);\n}\nexport const pad = /* @__PURE__ */ op({ pad_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcGFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEtBQUssRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUkvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsU0FBUyxJQUFJLENBQ1QsQ0FBZSxFQUFFLFFBQWlDLEVBQUUsYUFBYSxHQUFHLENBQUM7SUFDdkUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7S0FDdkU7SUFFRCxNQUFNLEtBQUssR0FBZSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixLQUFLLEVBQUUsTUFBbUMsRUFDMUMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQYWRWMiwgUGFkVjJBdHRycywgUGFkVjJJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcmAgd2l0aCBhIGdpdmVuIHZhbHVlIGFuZCBwYWRkaW5ncy5cbiAqXG4gKiBUaGlzIG9wZXJhdGlvbiBpbXBsZW1lbnRzIGBDT05TVEFOVGAgbW9kZS4gRm9yIGBSRUZMRUNUYCBhbmQgYFNZTU1FVFJJQ2AsXG4gKiByZWZlciB0byBgdGYubWlycm9yUGFkYC5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlXG4gKiBhcyB0aGlzIG1ldGhvZCB0aGF0IGFzc2VydCB0aGF0IGBwYWRkaW5nc2AgaXMgb2YgZ2l2ZW4gbGVuZ3RoLlxuICogICAtIGB0Zi5wYWQxZGBcbiAqICAgLSBgdGYucGFkMmRgXG4gKiAgIC0gYHRmLnBhZDNkYFxuICogICAtIGB0Zi5wYWQ0ZGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzLCA0XSk7XG4gKiB4LnBhZChbWzEsIDJdXSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byBwYWQuXG4gKiBAcGFyYW0gcGFkZGluZ3MgQW4gYXJyYXkgb2YgbGVuZ3RoIGBSYCAodGhlIHJhbmsgb2YgdGhlIHRlbnNvciksIHdoZXJlXG4gKiBlYWNoIGVsZW1lbnQgaXMgYSBsZW5ndGgtMiB0dXBsZSBvZiBpbnRzIGBbcGFkQmVmb3JlLCBwYWRBZnRlcl1gLFxuICogc3BlY2lmeWluZyBob3cgbXVjaCB0byBwYWQgYWxvbmcgZWFjaCBkaW1lbnNpb24gb2YgdGhlIHRlbnNvci5cbiAqIEBwYXJhbSBjb25zdGFudFZhbHVlIFRoZSBwYWQgdmFsdWUgdG8gdXNlLiBEZWZhdWx0cyB0byAwLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1RyYW5zZm9ybWF0aW9ucyd9XG4gKi9cbmZ1bmN0aW9uIHBhZF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBwYWRkaW5nczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIGNvbnN0YW50VmFsdWUgPSAwKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3BhZCcpO1xuICBpZiAoJHgucmFuayA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFkKHNjYWxhcikgaXMgbm90IGRlZmluZWQuIFBhc3Mgbm9uLXNjYWxhciB0byBwYWQnKTtcbiAgfVxuXG4gIGNvbnN0IGF0dHJzOiBQYWRWMkF0dHJzID0ge3BhZGRpbmdzLCBjb25zdGFudFZhbHVlfTtcbiAgY29uc3QgaW5wdXRzOiBQYWRWMklucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgUGFkVjIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcGFkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWRffSk7XG4iXX0=","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor1D` with a given value and paddings. See `pad` for details.\n */\nfunction pad1d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 2, () => 'Invalid number of paddings. Must be length of 2.');\n return pad(x, [paddings], constantValue);\n}\nexport const pad1d = /* @__PURE__ */ op({ pad1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkMWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQxZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUFFLFFBQTBCLEVBQ2xELGFBQWEsR0FBRyxDQUFDO0lBQ25CLE1BQU0sQ0FDRixRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUM5RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IxRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjFEYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDFkXyhcbiAgICB4OiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBwYWRkaW5nczogW251bWJlciwgbnVtYmVyXSxcbiAgICBjb25zdGFudFZhbHVlID0gMCk6IFRlbnNvcjFEIHtcbiAgYXNzZXJ0KFxuICAgICAgcGFkZGluZ3MubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gJ0ludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyLicpO1xuICByZXR1cm4gcGFkKHgsIFtwYWRkaW5nc10sIGNvbnN0YW50VmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgcGFkMWQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3BhZDFkX30pO1xuIl19","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor2D` with a given value and paddings. See `pad` for details.\n */\nfunction pad2d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 2 && paddings[0].length === 2 &&\n paddings[1].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad2d = /* @__PURE__ */ op({ pad2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUFFLFFBQThDLEVBQ3RFLGFBQWEsR0FBRyxDQUFDO0lBQ25CLE1BQU0sQ0FDRixRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDN0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjJEYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDJkXyhcbiAgICB4OiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBwYWRkaW5nczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yMkQge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDIgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gJ0ludmFsaWQgbnVtYmVyIG9mIHBhZGRpbmdzLiBNdXN0IGJlIGxlbmd0aCBvZiAyIGVhY2guJyk7XG4gIHJldHVybiBwYWQoeCwgcGFkZGluZ3MsIGNvbnN0YW50VmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgcGFkMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3BhZDJkX30pO1xuIl19","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor3D` with a given value and paddings. See `pad` for details.\n */\nfunction pad3d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 3 && paddings[0].length === 2 &&\n paddings[1].length === 2 && paddings[2].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad3d = /* @__PURE__ */ op({ pad3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQzZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUN0QixRQUFnRSxFQUNoRSxhQUFhLEdBQUcsQ0FBQztJQUNuQixNQUFNLENBQ0YsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN4RCxHQUFHLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0R9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cGFkfSBmcm9tICcuL3BhZCc7XG5cbi8qKlxuICogUGFkcyBhIGB0Zi5UZW5zb3IzRGAgd2l0aCBhIGdpdmVuIHZhbHVlIGFuZCBwYWRkaW5ncy4gU2VlIGBwYWRgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBwYWQzZF8oXG4gICAgeDogVGVuc29yM0R8VGVuc29yTGlrZSxcbiAgICBwYWRkaW5nczogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yM0Qge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDMgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyICYmIHBhZGRpbmdzWzJdLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+ICdJbnZhbGlkIG51bWJlciBvZiBwYWRkaW5ncy4gTXVzdCBiZSBsZW5ndGggb2YgMiBlYWNoLicpO1xuICByZXR1cm4gcGFkKHgsIHBhZGRpbmdzLCBjb25zdGFudFZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZDNkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWQzZF99KTtcbiJdfQ==","import { assert } from '../util';\nimport { op } from './operation';\nimport { pad } from './pad';\n/**\n * Pads a `tf.Tensor4D` with a given value and paddings. See `pad` for details.\n */\nfunction pad4d_(x, paddings, constantValue = 0) {\n assert(paddings.length === 4 && paddings[0].length === 2 &&\n paddings[1].length === 2 && paddings[2].length === 2 &&\n paddings[3].length === 2, () => 'Invalid number of paddings. Must be length of 2 each.');\n return pad(x, paddings, constantValue);\n}\nexport const pad4d = /* @__PURE__ */ op({ pad4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFkNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wYWQ0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFzQixFQUN0QixRQUdLLEVBQ0wsYUFBYSxHQUFHLENBQUM7SUFDbkIsTUFBTSxDQUNGLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUM3QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDcEQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcblxuLyoqXG4gKiBQYWRzIGEgYHRmLlRlbnNvcjREYCB3aXRoIGEgZ2l2ZW4gdmFsdWUgYW5kIHBhZGRpbmdzLiBTZWUgYHBhZGAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHBhZDRkXyhcbiAgICB4OiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIHBhZGRpbmdzOlxuICAgICAgICBbXG4gICAgICAgICAgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXVxuICAgICAgICBdLFxuICAgIGNvbnN0YW50VmFsdWUgPSAwKTogVGVuc29yNEQge1xuICBhc3NlcnQoXG4gICAgICBwYWRkaW5ncy5sZW5ndGggPT09IDQgJiYgcGFkZGluZ3NbMF0ubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgcGFkZGluZ3NbMV0ubGVuZ3RoID09PSAyICYmIHBhZGRpbmdzWzJdLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgIHBhZGRpbmdzWzNdLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+ICdJbnZhbGlkIG51bWJlciBvZiBwYWRkaW5ncy4gTXVzdCBiZSBsZW5ndGggb2YgMiBlYWNoLicpO1xuICByZXR1cm4gcGFkKHgsIHBhZGRpbmdzLCBjb25zdGFudFZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZDRkID0gLyogQF9fUFVSRV9fICovIG9wKHtwYWQ0ZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SpaceToBatchND } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * This operation divides \"spatial\" dimensions `[1, ..., M]` of the input into\n * a grid of blocks of shape `blockShape`, and interleaves these blocks with\n * the \"batch\" dimension (0) such that in the output, the spatial\n * dimensions `[1, ..., M]` correspond to the position within the grid,\n * and the batch dimension combines both the position within a spatial block\n * and the original batch position. Prior to division into blocks,\n * the spatial dimensions of the input are optionally zero padded\n * according to `paddings`. See below for a precise description.\n *\n * ```js\n * const x = tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]);\n * const blockShape = [2, 2];\n * const paddings = [[0, 0], [0, 0]];\n *\n * x.spaceToBatchND(blockShape, paddings).print();\n * ```\n *\n * @param x A `tf.Tensor`. N-D with `x.shape` = `[batch] + spatialShape +\n * remainingShape`, where spatialShape has `M` dimensions.\n * @param blockShape A 1-D array. Must have shape `[M]`, all values must\n * be >= 1.\n * @param paddings A 2-D array. Must have shape `[M, 2]`, all values must be >=\n * 0. `paddings[i] = [padStart, padEnd]` specifies the amount to zero-pad\n * from input dimension `i + 1`, which corresponds to spatial dimension `i`. It\n * is required that\n * `(inputShape[i + 1] + padStart + padEnd) % blockShape[i] === 0`\n *\n * This operation is equivalent to the following steps:\n *\n * 1. Zero-pad the start and end of dimensions `[1, ..., M]` of the input\n * according to `paddings` to produce `padded` of shape paddedShape.\n *\n * 2. Reshape `padded` to `reshapedPadded` of shape:\n * `[batch] + [paddedShape[1] / blockShape[0], blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1], blockShape[M-1]] + remainingShape`\n *\n * 3. Permute dimensions of `reshapedPadded` to produce `permutedReshapedPadded`\n * of shape: `blockShape + [batch] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n *\n * 4. Reshape `permutedReshapedPadded` to flatten `blockShape` into the\n * batch dimension, producing an output tensor of shape:\n * `[batch * prod(blockShape)] + [paddedShape[1] / blockShape[0], ...,\n * paddedShape[M] / blockShape[M-1]] + remainingShape`\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction spaceToBatchND_(x, blockShape, paddings) {\n const $x = convertToTensor(x, 'x', 'spaceToBatchND');\n util.assert($x.rank >= 1 + blockShape.length, () => `input rank ${$x.rank} should be > than [blockShape] ${blockShape.length}`);\n util.assert(paddings.length === blockShape.length, () => `paddings.shape[0] ${paddings.length} must be equal to [blockShape] ${blockShape.length}`);\n util.assert($x.shape.reduce((a, b, i) => {\n if (i > 0 && i <= blockShape.length) {\n return a &&\n ((b + paddings[i - 1][0] + paddings[i - 1][1]) %\n blockShape[i - 1] ===\n 0);\n }\n return a;\n }, true), () => `input spatial dimensions ${$x.shape.slice(1)} with paddings ${paddings.toString()} must be divisible by blockShapes ${blockShape.toString()}`);\n const inputs = { x: $x };\n const attrs = { blockShape, paddings };\n return ENGINE.runKernel(SpaceToBatchND, inputs, attrs);\n}\nexport const spaceToBatchND = /* @__PURE__ */ op({ spaceToBatchND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2VfdG9fYmF0Y2hfbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFjZV90b19iYXRjaF9uZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxjQUFjLEVBQTRDLE1BQU0saUJBQWlCLENBQUM7QUFJMUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLENBQWUsRUFBRSxVQUFvQixFQUFFLFFBQW9CO0lBQzdELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFckQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUNoQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLGtDQUN2QixVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QixJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFDckMsR0FBRyxFQUFFLENBQUMscUJBQ0YsUUFBUSxDQUFDLE1BQU0sa0NBQWtDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTlFLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25DLE9BQU8sQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ1Q7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsRUFDRCxJQUFJLENBQUMsRUFDVCxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUMvQyxRQUFRLENBQUMsUUFBUSxFQUFFLHFDQUNuQixVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sTUFBTSxHQUF5QixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBd0IsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFFMUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixjQUFjLEVBQUUsTUFBbUMsRUFDbkQsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGFjZVRvQmF0Y2hORCwgU3BhY2VUb0JhdGNoTkRBdHRycywgU3BhY2VUb0JhdGNoTkRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogVGhpcyBvcGVyYXRpb24gZGl2aWRlcyBcInNwYXRpYWxcIiBkaW1lbnNpb25zIGBbMSwgLi4uLCBNXWAgb2YgdGhlIGlucHV0IGludG9cbiAqIGEgZ3JpZCBvZiBibG9ja3Mgb2Ygc2hhcGUgYGJsb2NrU2hhcGVgLCBhbmQgaW50ZXJsZWF2ZXMgdGhlc2UgYmxvY2tzIHdpdGhcbiAqIHRoZSBcImJhdGNoXCIgZGltZW5zaW9uICgwKSBzdWNoIHRoYXQgaW4gdGhlIG91dHB1dCwgdGhlIHNwYXRpYWxcbiAqIGRpbWVuc2lvbnMgYFsxLCAuLi4sIE1dYCBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGdyaWQsXG4gKiBhbmQgdGhlIGJhdGNoIGRpbWVuc2lvbiBjb21iaW5lcyBib3RoIHRoZSBwb3NpdGlvbiB3aXRoaW4gYSBzcGF0aWFsIGJsb2NrXG4gKiBhbmQgdGhlIG9yaWdpbmFsIGJhdGNoIHBvc2l0aW9uLiBQcmlvciB0byBkaXZpc2lvbiBpbnRvIGJsb2NrcyxcbiAqIHRoZSBzcGF0aWFsIGRpbWVuc2lvbnMgb2YgdGhlIGlucHV0IGFyZSBvcHRpb25hbGx5IHplcm8gcGFkZGVkXG4gKiBhY2NvcmRpbmcgdG8gYHBhZGRpbmdzYC4gU2VlIGJlbG93IGZvciBhIHByZWNpc2UgZGVzY3JpcHRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3I0ZChbMSwgMiwgMywgNF0sIFsxLCAyLCAyLCAxXSk7XG4gKiBjb25zdCBibG9ja1NoYXBlID0gWzIsIDJdO1xuICogY29uc3QgcGFkZGluZ3MgPSBbWzAsIDBdLCBbMCwgMF1dO1xuICpcbiAqIHguc3BhY2VUb0JhdGNoTkQoYmxvY2tTaGFwZSwgcGFkZGluZ3MpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBBIGB0Zi5UZW5zb3JgLiBOLUQgd2l0aCBgeC5zaGFwZWAgPSBgW2JhdGNoXSArIHNwYXRpYWxTaGFwZSArXG4gKiByZW1haW5pbmdTaGFwZWAsIHdoZXJlIHNwYXRpYWxTaGFwZSBoYXMgYE1gIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0gYmxvY2tTaGFwZSBBIDEtRCBhcnJheS4gTXVzdCBoYXZlIHNoYXBlIGBbTV1gLCBhbGwgdmFsdWVzIG11c3RcbiAqIGJlID49IDEuXG4gKiBAcGFyYW0gcGFkZGluZ3MgQSAyLUQgYXJyYXkuIE11c3QgaGF2ZSBzaGFwZSBgW00sIDJdYCwgYWxsIHZhbHVlcyBtdXN0IGJlID49XG4gKiAgICAgMC4gYHBhZGRpbmdzW2ldID0gW3BhZFN0YXJ0LCBwYWRFbmRdYCBzcGVjaWZpZXMgdGhlIGFtb3VudCB0byB6ZXJvLXBhZFxuICogZnJvbSBpbnB1dCBkaW1lbnNpb24gYGkgKyAxYCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gc3BhdGlhbCBkaW1lbnNpb24gYGlgLiBJdFxuICogaXMgcmVxdWlyZWQgdGhhdFxuICogYChpbnB1dFNoYXBlW2kgKyAxXSArIHBhZFN0YXJ0ICsgcGFkRW5kKSAlIGJsb2NrU2hhcGVbaV0gPT09IDBgXG4gKlxuICogVGhpcyBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICpcbiAqIDEuIFplcm8tcGFkIHRoZSBzdGFydCBhbmQgZW5kIG9mIGRpbWVuc2lvbnMgYFsxLCAuLi4sIE1dYCBvZiB0aGUgaW5wdXRcbiAqIGFjY29yZGluZyB0byBgcGFkZGluZ3NgIHRvIHByb2R1Y2UgYHBhZGRlZGAgb2Ygc2hhcGUgcGFkZGVkU2hhcGUuXG4gKlxuICogMi4gUmVzaGFwZSBgcGFkZGVkYCB0byBgcmVzaGFwZWRQYWRkZWRgIG9mIHNoYXBlOlxuICogYFtiYXRjaF0gKyBbcGFkZGVkU2hhcGVbMV0gLyBibG9ja1NoYXBlWzBdLCBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBwYWRkZWRTaGFwZVtNXSAvIGJsb2NrU2hhcGVbTS0xXSwgYmxvY2tTaGFwZVtNLTFdXSArIHJlbWFpbmluZ1NoYXBlYFxuICpcbiAqIDMuIFBlcm11dGUgZGltZW5zaW9ucyBvZiBgcmVzaGFwZWRQYWRkZWRgIHRvIHByb2R1Y2UgYHBlcm11dGVkUmVzaGFwZWRQYWRkZWRgXG4gKiBvZiBzaGFwZTogYGJsb2NrU2hhcGUgKyBbYmF0Y2hdICsgW3BhZGRlZFNoYXBlWzFdIC8gYmxvY2tTaGFwZVswXSwgLi4uLFxuICogcGFkZGVkU2hhcGVbTV0gLyBibG9ja1NoYXBlW00tMV1dICsgcmVtYWluaW5nU2hhcGVgXG4gKlxuICogNC4gUmVzaGFwZSBgcGVybXV0ZWRSZXNoYXBlZFBhZGRlZGAgdG8gZmxhdHRlbiBgYmxvY2tTaGFwZWAgaW50byB0aGVcbiAqIGJhdGNoIGRpbWVuc2lvbiwgcHJvZHVjaW5nIGFuIG91dHB1dCB0ZW5zb3Igb2Ygc2hhcGU6XG4gKiBgW2JhdGNoICogcHJvZChibG9ja1NoYXBlKV0gKyBbcGFkZGVkU2hhcGVbMV0gLyBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBwYWRkZWRTaGFwZVtNXSAvIGJsb2NrU2hhcGVbTS0xXV0gKyByZW1haW5pbmdTaGFwZWBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5mdW5jdGlvbiBzcGFjZVRvQmF0Y2hORF88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgeDogVHxUZW5zb3JMaWtlLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcGFkZGluZ3M6IG51bWJlcltdW10pOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3BhY2VUb0JhdGNoTkQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPj0gMSArIGJsb2NrU2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT4gYGlucHV0IHJhbmsgJHskeC5yYW5rfSBzaG91bGQgYmUgPiB0aGFuIFtibG9ja1NoYXBlXSAke1xuICAgICAgICAgIGJsb2NrU2hhcGUubGVuZ3RofWApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgcGFkZGluZ3MubGVuZ3RoID09PSBibG9ja1NoYXBlLmxlbmd0aCxcbiAgICAgICgpID0+IGBwYWRkaW5ncy5zaGFwZVswXSAke1xuICAgICAgICAgIHBhZGRpbmdzLmxlbmd0aH0gbXVzdCBiZSBlcXVhbCB0byBbYmxvY2tTaGFwZV0gJHtibG9ja1NoYXBlLmxlbmd0aH1gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnNoYXBlLnJlZHVjZShcbiAgICAgICAgICAoYSwgYiwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPD0gYmxvY2tTaGFwZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEgJiZcbiAgICAgICAgICAgICAgICAgICgoYiArIHBhZGRpbmdzW2kgLSAxXVswXSArIHBhZGRpbmdzW2kgLSAxXVsxXSkgJVxuICAgICAgICAgICAgICAgICAgICAgICBibG9ja1NoYXBlW2kgLSAxXSA9PT1cbiAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZSksXG4gICAgICAoKSA9PiBgaW5wdXQgc3BhdGlhbCBkaW1lbnNpb25zICR7JHguc2hhcGUuc2xpY2UoMSl9IHdpdGggcGFkZGluZ3MgJHtcbiAgICAgICAgICBwYWRkaW5ncy50b1N0cmluZygpfSBtdXN0IGJlIGRpdmlzaWJsZSBieSBibG9ja1NoYXBlcyAke1xuICAgICAgICAgIGJsb2NrU2hhcGUudG9TdHJpbmcoKX1gKTtcblxuICBjb25zdCBpbnB1dHM6IFNwYWNlVG9CYXRjaE5ESW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFNwYWNlVG9CYXRjaE5EQXR0cnMgPSB7YmxvY2tTaGFwZSwgcGFkZGluZ3N9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU3BhY2VUb0JhdGNoTkQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhY2VUb0JhdGNoTkQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NwYWNlVG9CYXRjaE5EX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { avgPool } from './avg_pool';\nimport { batchToSpaceND } from './batch_to_space_nd';\nimport * as conv_util from './conv_util';\nimport { maxPool } from './max_pool';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nimport { spaceToBatchND } from './space_to_batch_nd';\n/**\n * Performs an N-D pooling operation\n *\n * @param input The input tensor, of rank 4 or rank 3 of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param windowShape The filter size: `[filterHeight, filterWidth]`. If\n * `filterSize` is a single number, then `filterHeight == filterWidth`.\n * @param poolingType The type of pooling, either 'max' or 'avg'.\n * @param pad The type of padding algorithm:\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_guides/python/nn#Convolution](\n * https://www.tensorflow.org/api_guides/python/nn#Convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in dilated pooling. Defaults to `[1, 1]`. If `dilationRate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param strides The strides of the pooling: `[strideHeight, strideWidth]`. If\n * `strides` is a single number, then `strideHeight == strideWidth`.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction pool_(input, windowShape, poolingType, pad, dilations, strides, dimRoundingMode) {\n if (dilations == null) {\n dilations = [1, 1];\n }\n if (strides == null) {\n strides = 1;\n }\n if (pad === 0) {\n pad = 'valid';\n }\n const $x = convertToTensor(input, 'x', 'maxPool');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in pool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = conv_util.computePool2DInfo(x4D.shape, windowShape, strides, dilations, pad);\n const dilation = [convInfo.dilationHeight, convInfo.dilationWidth];\n // The following implementation does batchToSpace(pool(spaceToBatch(x)))\n // whenever dilation > 1 since the TF kernels do not support dilation > 1.\n // tslint:disable-next-line:max-line-length\n // https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L1037\n let basePadding;\n if (pad === 'same') {\n basePadding = withSpaceToBatchBasePaddings([convInfo.filterHeight, convInfo.filterWidth], dilation);\n }\n else {\n basePadding = [[0, 0], [0, 0]];\n }\n const isDilationOne = dilation[0] === 1 && dilation[1] === 1;\n const [adjustedPadding, adjustedCrops] = requiredSpaceToBatchPaddings([convInfo.inHeight, convInfo.inWidth], dilation, basePadding);\n const convertedPad = isDilationOne ? pad : 'valid';\n const convertedX = isDilationOne ? x4D : spaceToBatchND(x4D, dilation, adjustedPadding);\n const forwardOp = poolingType === 'avg' ?\n () => avgPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode) :\n () => maxPool(convertedX, windowShape, strides, convertedPad, dimRoundingMode);\n const y = forwardOp();\n const res = isDilationOne ? y : batchToSpaceND(y, dilation, adjustedCrops);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\n// Helper function to compute crops and paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/array_ops.py#L2184\nfunction requiredSpaceToBatchPaddings(inputShape, blockShape, basePadding) {\n const padStart = basePadding.map(b => b[0]);\n const origPadEnd = basePadding.map(b => b[1]);\n const fullInputShape = inputShape.concat(padStart, origPadEnd);\n const padEndExtra = blockShape.map((b, i) => (b - fullInputShape[i] % b) % b);\n const padEnd = origPadEnd.map((s, i) => s + padEndExtra[i]);\n const paddings = blockShape.map((_, i) => [padStart[i], padEnd[i]]);\n const crops = blockShape.map((_, i) => [0, padEndExtra[i]]);\n return [paddings, crops];\n}\n// Helper function to compute base paddings for pool with dilation > 1.\n// tslint:disable-next-line:max-line-length\n// https://github.com/tensorflow/tensorflow/blob/50f6bb67dc98c9b74630b6047aae7a4f8a40fd02/tensorflow/python/ops/nn_ops.py#L524\nfunction withSpaceToBatchBasePaddings(filterShape, dilation) {\n // Spatial dimensions of the filters and the upsampled filters in which we\n // introduce (rate - 1) zeros between consecutive filter values.\n const dilatedFilterShape = filterShape.map((s, i) => {\n return s + (s - 1) * (dilation[i] - 1);\n });\n const padExtraShape = dilatedFilterShape.map(s => s - 1);\n // When padding is odd, we pad more at end, following the same\n // convention as conv2d.\n const padExtraStart = padExtraShape.map(s => Math.floor(s / 2));\n const padExtraEnd = padExtraShape.map((s, i) => s - padExtraStart[i]);\n return padExtraShape.map((_, i) => {\n return [padExtraStart[i], padExtraEnd[i]];\n });\n}\nexport const pool = /* @__PURE__ */ op({ pool_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsS0FBbUIsRUFBRSxXQUFvQyxFQUN6RCxXQUF3QixFQUN4QixHQUFvRCxFQUNwRCxTQUFtQyxFQUFFLE9BQWlDLEVBQ3RFLGVBQXdDO0lBQzFDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDcEI7SUFDRCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ2IsR0FBRyxHQUFHLE9BQU8sQ0FBQztLQUNmO0lBRUQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVB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NUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2F2Z1Bvb2x9IGZyb20gJy4vYXZnX3Bvb2wnO1xuaW1wb3J0IHtiYXRjaFRvU3BhY2VORH0gZnJvbSAnLi9iYXRjaF90b19zcGFjZV9uZCc7XG5pbXBvcnQgKiBhcyBjb252X3V0aWwgZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHttYXhQb29sfSBmcm9tICcuL21heF9wb29sJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcbmltcG9ydCB7c3BhY2VUb0JhdGNoTkR9IGZyb20gJy4vc3BhY2VfdG9fYmF0Y2hfbmQnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGFuIE4tRCBwb29saW5nIG9wZXJhdGlvblxuICpcbiAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSB3aW5kb3dTaGFwZSBUaGUgZmlsdGVyIHNpemU6IGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aF1gLiBJZlxuICogICAgIGBmaWx0ZXJTaXplYCBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYGZpbHRlckhlaWdodCA9PSBmaWx0ZXJXaWR0aGAuXG4gKiBAcGFyYW0gcG9vbGluZ1R5cGUgVGhlIHR5cGUgb2YgcG9vbGluZywgZWl0aGVyICdtYXgnIG9yICdhdmcnLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobTpcbiAqICAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgIC0gYHZhbGlkYDogb3V0cHV0IHdpbGwgYmUgc21hbGxlciB0aGFuIGlucHV0IGlmIGZpbHRlciBpcyBsYXJnZXJcbiAqICAgICAgIHRoYW4gMXgxLlxuICogICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2d1aWRlcy9weXRob24vbm4jQ29udm9sdXRpb25dKFxuICogICAgICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZ3VpZGVzL3B5dGhvbi9ubiNDb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gZGlsYXRlZCBwb29saW5nLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uUmF0ZWAgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBwb29saW5nOiBgW3N0cmlkZUhlaWdodCwgc3RyaWRlV2lkdGhdYC4gSWZcbiAqICAgICBgc3RyaWRlc2AgaXMgYSBzaW5nbGUgbnVtYmVyLCB0aGVuIGBzdHJpZGVIZWlnaHQgPT0gc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gcG9vbF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICBpbnB1dDogVHxUZW5zb3JMaWtlLCB3aW5kb3dTaGFwZTogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcG9vbGluZ1R5cGU6ICdhdmcnfCdtYXgnLFxuICAgIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyfGNvbnZfdXRpbC5FeHBsaWNpdFBhZGRpbmcsXG4gICAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsIHN0cmlkZXM/OiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnKSB7XG4gIGlmIChkaWxhdGlvbnMgPT0gbnVsbCkge1xuICAgIGRpbGF0aW9ucyA9IFsxLCAxXTtcbiAgfVxuICBpZiAoc3RyaWRlcyA9PSBudWxsKSB7XG4gICAgc3RyaWRlcyA9IDE7XG4gIH1cbiAgaWYgKHBhZCA9PT0gMCkge1xuICAgIHBhZCA9ICd2YWxpZCc7XG4gIH1cblxuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ3gnLCAnbWF4UG9vbCcpO1xuICBsZXQgeDREID0gJHggYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcblxuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIHBvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGNvbnZfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHg0RC5zaGFwZSwgd2luZG93U2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkKTtcbiAgY29uc3QgZGlsYXRpb246IFtudW1iZXIsIG51bWJlcl0gPVxuICAgICAgW2NvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LCBjb252SW5mby5kaWxhdGlvbldpZHRoXTtcblxuICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRvZXMgYmF0Y2hUb1NwYWNlKHBvb2woc3BhY2VUb0JhdGNoKHgpKSlcbiAgLy8gd2hlbmV2ZXIgZGlsYXRpb24gPiAxIHNpbmNlIHRoZSBURiBrZXJuZWxzIGRvIG5vdCBzdXBwb3J0IGRpbGF0aW9uID4gMS5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvNTBmNmJiNjdkYzk4YzliNzQ2MzBiNjA0N2FhZTdhNGY4YTQwZmQwMi90ZW5zb3JmbG93L3B5dGhvbi9vcHMvbm5fb3BzLnB5I0wxMDM3XG5cbiAgbGV0IGJhc2VQYWRkaW5nOiBudW1iZXJbXVtdO1xuICBpZiAocGFkID09PSAnc2FtZScpIHtcbiAgICBiYXNlUGFkZGluZyA9IHdpdGhTcGFjZVRvQmF0Y2hCYXNlUGFkZGluZ3MoXG4gICAgICAgIFtjb252SW5mby5maWx0ZXJIZWlnaHQsIGNvbnZJbmZvLmZpbHRlcldpZHRoXSwgZGlsYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGJhc2VQYWRkaW5nID0gW1swLCAwXSwgWzAsIDBdXTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlsYXRpb25PbmUgPSBkaWxhdGlvblswXSA9PT0gMSAmJiBkaWxhdGlvblsxXSA9PT0gMTtcbiAgY29uc3QgW2FkanVzdGVkUGFkZGluZywgYWRqdXN0ZWRDcm9wc10gPSByZXF1aXJlZFNwYWNlVG9CYXRjaFBhZGRpbmdzKFxuICAgICAgW2NvbnZJbmZvLmluSGVpZ2h0LCBjb252SW5mby5pbldpZHRoXSwgZGlsYXRpb24sIGJhc2VQYWRkaW5nKTtcbiAgY29uc3QgY29udmVydGVkUGFkID0gaXNEaWxhdGlvbk9uZSA/IHBhZCA6ICd2YWxpZCc7XG4gIGNvbnN0IGNvbnZlcnRlZFggPVxuICAgICAgaXNEaWxhdGlvbk9uZSA/IHg0RCA6IHNwYWNlVG9CYXRjaE5EKHg0RCwgZGlsYXRpb24sIGFkanVzdGVkUGFkZGluZyk7XG5cbiAgY29uc3QgZm9yd2FyZE9wID0gcG9vbGluZ1R5cGUgPT09ICdhdmcnID9cbiAgICAgICgpID0+IGF2Z1Bvb2woY29udmVydGVkWCwgd2luZG93U2hhcGUsIHN0cmlkZXMsIGNvbnZlcnRlZFBhZCxcbiAgICAgICAgICAgICAgICAgICAgZGltUm91bmRpbmdNb2RlKSA6XG4gICAgICAoKSA9PiBtYXhQb29sKGNvbnZlcnRlZFgsIHdpbmRvd1NoYXBlLCBzdHJpZGVzLCBjb252ZXJ0ZWRQYWQsXG4gICAgICAgICAgICAgICAgICAgIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IHkgPSBmb3J3YXJkT3AoKTtcblxuICBjb25zdCByZXMgPSBpc0RpbGF0aW9uT25lID8geSA6IGJhdGNoVG9TcGFjZU5EKHksIGRpbGF0aW9uLCBhZGp1c3RlZENyb3BzKTtcblxuICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgcmV0dXJuIHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzIFQ7XG4gIH1cblxuICByZXR1cm4gcmVzIGFzIFQ7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb21wdXRlIGNyb3BzIGFuZCBwYWRkaW5ncyBmb3IgcG9vbCB3aXRoIGRpbGF0aW9uID4gMS5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi81MGY2YmI2N2RjOThjOWI3NDYzMGI2MDQ3YWFlN2E0ZjhhNDBmZDAyL3RlbnNvcmZsb3cvcHl0aG9uL29wcy9hcnJheV9vcHMucHkjTDIxODRcbmZ1bmN0aW9uIHJlcXVpcmVkU3BhY2VUb0JhdGNoUGFkZGluZ3MoXG4gICAgaW5wdXRTaGFwZTogW251bWJlciwgbnVtYmVyXSwgYmxvY2tTaGFwZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBiYXNlUGFkZGluZzogbnVtYmVyW11bXSkge1xuICBjb25zdCBwYWRTdGFydCA9IGJhc2VQYWRkaW5nLm1hcChiID0+IGJbMF0pO1xuICBjb25zdCBvcmlnUGFkRW5kID0gYmFzZVBhZGRpbmcubWFwKGIgPT4gYlsxXSk7XG4gIGNvbnN0IGZ1bGxJbnB1dFNoYXBlID0gaW5wdXRTaGFwZS5jb25jYXQocGFkU3RhcnQsIG9yaWdQYWRFbmQpO1xuICBjb25zdCBwYWRFbmRFeHRyYSA9IGJsb2NrU2hhcGUubWFwKChiLCBpKSA9PiAoYiAtIGZ1bGxJbnB1dFNoYXBlW2ldICUgYikgJSBiKTtcbiAgY29uc3QgcGFkRW5kID0gb3JpZ1BhZEVuZC5tYXAoKHMsIGkpID0+IHMgKyBwYWRFbmRFeHRyYVtpXSk7XG4gIGNvbnN0IHBhZGRpbmdzID0gYmxvY2tTaGFwZS5tYXAoKF8sIGkpID0+IFtwYWRTdGFydFtpXSwgcGFkRW5kW2ldXSk7XG4gIGNvbnN0IGNyb3BzID0gYmxvY2tTaGFwZS5tYXAoKF8sIGkpID0+IFswLCBwYWRFbmRFeHRyYVtpXV0pO1xuICByZXR1cm4gW3BhZGRpbmdzLCBjcm9wc107XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb21wdXRlIGJhc2UgcGFkZGluZ3MgZm9yIHBvb2wgd2l0aCBkaWxhdGlvbiA+IDEuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvNTBmNmJiNjdkYzk4YzliNzQ2MzBiNjA0N2FhZTdhNGY4YTQwZmQwMi90ZW5zb3JmbG93L3B5dGhvbi9vcHMvbm5fb3BzLnB5I0w1MjRcbmZ1bmN0aW9uIHdpdGhTcGFjZVRvQmF0Y2hCYXNlUGFkZGluZ3MoXG4gICAgZmlsdGVyU2hhcGU6IFtudW1iZXIsIG51bWJlcl0sIGRpbGF0aW9uOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gIC8vIFNwYXRpYWwgZGltZW5zaW9ucyBvZiB0aGUgZmlsdGVycyBhbmQgdGhlIHVwc2FtcGxlZCBmaWx0ZXJzIGluIHdoaWNoIHdlXG4gIC8vIGludHJvZHVjZSAocmF0ZSAtIDEpIHplcm9zIGJldHdlZW4gY29uc2VjdXRpdmUgZmlsdGVyIHZhbHVlcy5cbiAgY29uc3QgZGlsYXRlZEZpbHRlclNoYXBlID0gZmlsdGVyU2hhcGUubWFwKChzLCBpKSA9PiB7XG4gICAgcmV0dXJuIHMgKyAocyAtIDEpICogKGRpbGF0aW9uW2ldIC0gMSk7XG4gIH0pO1xuICBjb25zdCBwYWRFeHRyYVNoYXBlID0gZGlsYXRlZEZpbHRlclNoYXBlLm1hcChzID0+IHMgLSAxKTtcblxuICAvLyBXaGVuIHBhZGRpbmcgaXMgb2RkLCB3ZSBwYWQgbW9yZSBhdCBlbmQsIGZvbGxvd2luZyB0aGUgc2FtZVxuICAvLyBjb252ZW50aW9uIGFzIGNvbnYyZC5cbiAgY29uc3QgcGFkRXh0cmFTdGFydCA9IHBhZEV4dHJhU2hhcGUubWFwKHMgPT4gTWF0aC5mbG9vcihzIC8gMikpO1xuICBjb25zdCBwYWRFeHRyYUVuZCA9IHBhZEV4dHJhU2hhcGUubWFwKChzLCBpKSA9PiBzIC0gcGFkRXh0cmFTdGFydFtpXSk7XG4gIHJldHVybiBwYWRFeHRyYVNoYXBlLm1hcCgoXywgaSkgPT4ge1xuICAgIHJldHVybiBbcGFkRXh0cmFTdGFydFtpXSwgcGFkRXh0cmFFbmRbaV1dO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBvb2wgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Bvb2xffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Prelu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes leaky rectified linear element-wise with parametric alphas.\n *\n * `x < 0 ? alpha * x : f(x) = x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n * const alpha = tf.scalar(0.1);\n *\n * x.prelu(alpha).print(); // or tf.prelu(x, alpha)\n * ```\n * @param x The input tensor.\n * @param alpha Scaling factor for negative values.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction prelu_(x, alpha) {\n const $x = convertToTensor(x, 'x', 'prelu');\n const $alpha = convertToTensor(alpha, 'alpha', 'prelu');\n const inputs = { x: $x, alpha: $alpha };\n return ENGINE.runKernel(Prelu, inputs);\n}\nexport const prelu = /* @__PURE__ */ op({ prelu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9wcmVsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZSxFQUFFLEtBQW1CO0lBQ3BFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUFnQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQ25ELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtQcmVsdSwgUHJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgbGVha3kgcmVjdGlmaWVkIGxpbmVhciBlbGVtZW50LXdpc2Ugd2l0aCBwYXJhbWV0cmljIGFscGhhcy5cbiAqXG4gKiBgeCA8IDAgPyBhbHBoYSAqIHggOiBmKHgpID0geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFstMSwgMiwgLTMsIDRdKTtcbiAqIGNvbnN0IGFscGhhID0gdGYuc2NhbGFyKDAuMSk7XG4gKlxuICogeC5wcmVsdShhbHBoYSkucHJpbnQoKTsgIC8vIG9yIHRmLnByZWx1KHgsIGFscGhhKVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICogQHBhcmFtIGFscGhhIFNjYWxpbmcgZmFjdG9yIGZvciBuZWdhdGl2ZSB2YWx1ZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHByZWx1XzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UsIGFscGhhOiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAncHJlbHUnKTtcbiAgY29uc3QgJGFscGhhID0gY29udmVydFRvVGVuc29yKGFscGhhLCAnYWxwaGEnLCAncHJlbHUnKTtcblxuICBjb25zdCBpbnB1dHM6IFByZWx1SW5wdXRzID0ge3g6ICR4LCBhbHBoYTogJGFscGhhfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUHJlbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByZWx1ID0gLyogQF9fUFVSRV9fICovIG9wKHtwcmVsdV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Prod } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\n/**\n * Computes the product of elements across dimensions of a `tf.Tensor`.\n *\n * Reduces the input along the dimensions given in `axes`. Unless `keepDims`\n * is true, the rank of the `tf.Tensor` is reduced by 1 for each entry in\n * `axes`. If `keepDims` is true, the reduced dimensions are retained with\n * length 1. If `axes` has no entries, all dimensions are reduced, and a\n * `tf.Tensor` with a single element is returned.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3]);\n *\n * x.prod().print(); // or tf.prod(x)\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.prod(axis).print(); // or tf.prod(x, axis)\n * ```\n *\n * @param x The input tensor to compute the product over. If the dtype is `bool`\n * it will be converted to `int32` and the output dtype will be `int32`.\n * @param axis The dimension(s) to reduce. By default it reduces\n * all dimensions.\n * @param keepDims If true, retains reduced dimensions with size 1.\n *\n * @doc {heading: 'Operations', subheading: 'Reduction'}\n */\nfunction prod_(x, axis = null, keepDims = false) {\n let $x = convertToTensor(x, 'x', 'prod');\n if ($x.dtype === 'bool') {\n // bool is not an allowed type for the underlying kernel.\n $x = cast($x, 'int32');\n }\n const inputs = { x: $x };\n const attrs = { axis, keepDims };\n return ENGINE.runKernel(Prod, inputs, attrs);\n}\nexport const prod = /* @__PURE__ */ op({ prod_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Byb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsU0FBUyxLQUFLLENBQ1YsQ0FBb0IsRUFBRSxPQUF3QixJQUFJLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDdEUsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFekMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUN2Qix5REFBeUQ7UUFDekQsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBYyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQztJQUUxQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1Byb2QsIFByb2RBdHRycywgUHJvZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL2Nhc3QnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBwcm9kdWN0IG9mIGVsZW1lbnRzIGFjcm9zcyBkaW1lbnNpb25zIG9mIGEgYHRmLlRlbnNvcmAuXG4gKlxuICogUmVkdWNlcyB0aGUgaW5wdXQgYWxvbmcgdGhlIGRpbWVuc2lvbnMgZ2l2ZW4gaW4gYGF4ZXNgLiBVbmxlc3MgYGtlZXBEaW1zYFxuICogaXMgdHJ1ZSwgdGhlIHJhbmsgb2YgdGhlIGB0Zi5UZW5zb3JgIGlzIHJlZHVjZWQgYnkgMSBmb3IgZWFjaCBlbnRyeSBpblxuICogYGF4ZXNgLiBJZiBga2VlcERpbXNgIGlzIHRydWUsIHRoZSByZWR1Y2VkIGRpbWVuc2lvbnMgYXJlIHJldGFpbmVkIHdpdGhcbiAqIGxlbmd0aCAxLiBJZiBgYXhlc2AgaGFzIG5vIGVudHJpZXMsIGFsbCBkaW1lbnNpb25zIGFyZSByZWR1Y2VkLCBhbmQgYVxuICogYHRmLlRlbnNvcmAgd2l0aCBhIHNpbmdsZSBlbGVtZW50IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiB4LnByb2QoKS5wcmludCgpOyAgLy8gb3IgdGYucHJvZCh4KVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKlxuICogY29uc3QgYXhpcyA9IDE7XG4gKiB4LnByb2QoYXhpcykucHJpbnQoKTsgIC8vIG9yIHRmLnByb2QoeCwgYXhpcylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IgdG8gY29tcHV0ZSB0aGUgcHJvZHVjdCBvdmVyLiBJZiB0aGUgZHR5cGUgaXMgYGJvb2xgXG4gKiAgIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGBpbnQzMmAgYW5kIHRoZSBvdXRwdXQgZHR5cGUgd2lsbCBiZSBgaW50MzJgLlxuICogQHBhcmFtIGF4aXMgVGhlIGRpbWVuc2lvbihzKSB0byByZWR1Y2UuIEJ5IGRlZmF1bHQgaXQgcmVkdWNlc1xuICogICAgIGFsbCBkaW1lbnNpb25zLlxuICogQHBhcmFtIGtlZXBEaW1zIElmIHRydWUsIHJldGFpbnMgcmVkdWNlZCBkaW1lbnNpb25zIHdpdGggc2l6ZSAxLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1JlZHVjdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHByb2RfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzOiBudW1iZXJ8bnVtYmVyW10gPSBudWxsLCBrZWVwRGltcyA9IGZhbHNlKTogVCB7XG4gIGxldCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdwcm9kJyk7XG5cbiAgaWYgKCR4LmR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAvLyBib29sIGlzIG5vdCBhbiBhbGxvd2VkIHR5cGUgZm9yIHRoZSB1bmRlcmx5aW5nIGtlcm5lbC5cbiAgICAkeCA9IGNhc3QoJHgsICdpbnQzMicpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBQcm9kSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFByb2RBdHRycyA9IHtheGlzLCBrZWVwRGltc307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBQcm9kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Byb2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedGather } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nfunction raggedGather_(paramsNestedSplits, paramsDenseValues, indices, outputRaggedRank) {\n const $paramsNestedSplits = paramsNestedSplits.map((t, i) => convertToTensor(t, `tensors${i}`, 'raggedGather', 'int32'));\n const $paramsDenseValues = convertToTensor(paramsDenseValues, 'paramsDenseValues', 'raggedGather');\n const $indices = convertToTensor(indices, 'indices', 'raggedGather', 'int32');\n const inputs = {\n paramsNestedSplits: $paramsNestedSplits,\n paramsDenseValues: $paramsDenseValues,\n indices: $indices,\n };\n const attrs = { outputRaggedRank };\n const result = ENGINE.runKernel(RaggedGather, inputs, attrs);\n return {\n outputNestedSplits: result.slice(0, result.length - 1),\n outputDenseValues: result[result.length - 1],\n };\n}\nexport const raggedGather = /* @__PURE__ */ op({ raggedGather_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX2dhdGhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhZ2dlZF9nYXRoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBNEIvQixTQUFTLGFBQWEsQ0FDbEIsa0JBQTRCLEVBQUUsaUJBQW9DLEVBQ2xFLE9BQTBCLEVBQUUsZ0JBQXdCO0lBQ3RELE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUM5QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLGtCQUFrQixHQUNwQixlQUFlLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTlFLE1BQU0sTUFBTSxHQUF1QjtRQUNqQyxrQkFBa0IsRUFBRSxtQkFBbUI7UUFDdkMsaUJBQWlCLEVBQUUsa0JBQWtCO1FBQ3JDLE9BQU8sRUFBRSxRQUFRO0tBQ2xCLENBQUM7SUFDRixNQUFNLEtBQUssR0FBc0IsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDO0lBRXBELE1BQU0sTUFBTSxHQUNSLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQVksRUFBRSxLQUFXLENBQUMsQ0FBQztJQUM5RCxPQUFPO1FBQ0wsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7UmFnZ2VkR2F0aGVyLCBSYWdnZWRHYXRoZXJBdHRycywgUmFnZ2VkR2F0aGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEdhdGhlciByYWdnZWQgc2xpY2VzIGZyb20gcGFyYW1zIGF4aXMgMCBhY2NvcmRpbmcgdG8gaW5kaWNlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zTmVzdGVkU3BsaXRzOiBBIGxpc3Qgb2YgYXQgbGVhc3QgMSBUZW5zb3Igd2l0aCB0eXBlICdpbnQzMicgVGhlXG4gKiAgICAgbmVzdGVkUm93U3BsaXRzIHRlbnNvcnMgdGhhdCBkZWZpbmUgdGhlIHJvdy1wYXJ0aXRpb25pbmcgZm9yIHRoZSBwYXJhbXNcbiAqICAgICBSYWdnZWRUZW5zb3IgaW5wdXQuXG4gKiBAcGFyYW0gcGFyYW1zRGVuc2VWYWx1ZXM6IEEgVGVuc29yLiBUaGUgZmxhdFZhbHVlcyBmb3IgdGhlIHBhcmFtc1xuICogICAgIFJhZ2dlZFRlbnNvci5cbiAqIEBwYXJhbSBpbmRpY2VzOiBBIFRlbnNvci4gTXVzdCBiZSBvbmUgb2YgdHlwZTogaW50MzIuIEluZGljZXMgaW4gdGhlXG4gKiAgICAgb3V0ZXJtb3N0IGRpbWVuc2lvbiBvZiBwYXJhbXMgb2YgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBnYXRoZXJlZC5cbiAqIEBwYXJhbSBvdXRwdXRSYWdnZWRSYW5rOiBBbiBpbnQgdGhhdCBpcyA+PSAwLiBUaGUgcmFnZ2VkIHJhbmsgb2YgdGhlIG91dHB1dFxuICogICAgIFJhZ2dlZFRlbnNvci4gb3V0cHV0TmVzdGVkU3BsaXRzIHdpbGwgY29udGFpbiB0aGlzIG51bWJlciBvZiByb3dTcGxpdHNcbiAqICAgICB0ZW5zb3JzLiBUaGlzIHZhbHVlIHNob3VsZCBlcXVhbCBpbmRpY2VzLnNoYXBlLm5kaW1zICsgcGFyYW1zLnJhZ2dlZFJhbmtcbiAqICAgICAtIDEuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gb3V0cHV0TmVzdGVkU3BsaXRzOiBBIGxpc3Qgb2Ygb3V0cHV0UmFnZ2VkUmFuayBUZW5zb3Igb2JqZWN0cyB3aXRoIHRoZVxuICogc2FtZSB0eXBlIGFzIHBhcmFtc05lc3RlZFNwbGl0cy5cbiAqICAgICAtIG91dHB1dERlbnNlVmFsdWVzOiBBIFRlbnNvci4gSGFzIHRoZSBzYW1lIHR5cGUgYXMgcGFyYW1zRGVuc2VWYWx1ZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSYWdnZWQnfVxuICovXG5cbmludGVyZmFjZSBSYWdnZWRHYXRoZXJNYXAge1xuICBvdXRwdXROZXN0ZWRTcGxpdHM6IFRlbnNvcltdO1xuICBvdXRwdXREZW5zZVZhbHVlczogVGVuc29yO1xufVxuXG5mdW5jdGlvbiByYWdnZWRHYXRoZXJfKFxuICAgIHBhcmFtc05lc3RlZFNwbGl0czogVGVuc29yW10sIHBhcmFtc0RlbnNlVmFsdWVzOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBpbmRpY2VzOiBUZW5zb3J8VGVuc29yTGlrZSwgb3V0cHV0UmFnZ2VkUmFuazogbnVtYmVyKTogUmFnZ2VkR2F0aGVyTWFwIHtcbiAgY29uc3QgJHBhcmFtc05lc3RlZFNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0cy5tYXAoXG4gICAgICAodCwgaSkgPT4gY29udmVydFRvVGVuc29yKHQsIGB0ZW5zb3JzJHtpfWAsICdyYWdnZWRHYXRoZXInLCAnaW50MzInKSk7XG4gIGNvbnN0ICRwYXJhbXNEZW5zZVZhbHVlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IocGFyYW1zRGVuc2VWYWx1ZXMsICdwYXJhbXNEZW5zZVZhbHVlcycsICdyYWdnZWRHYXRoZXInKTtcbiAgY29uc3QgJGluZGljZXMgPSBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAncmFnZ2VkR2F0aGVyJywgJ2ludDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSYWdnZWRHYXRoZXJJbnB1dHMgPSB7XG4gICAgcGFyYW1zTmVzdGVkU3BsaXRzOiAkcGFyYW1zTmVzdGVkU3BsaXRzLFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiAkcGFyYW1zRGVuc2VWYWx1ZXMsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBSYWdnZWRHYXRoZXJBdHRycyA9IHtvdXRwdXRSYWdnZWRSYW5rfTtcblxuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoUmFnZ2VkR2F0aGVyLCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbiAgcmV0dXJuIHtcbiAgICBvdXRwdXROZXN0ZWRTcGxpdHM6IHJlc3VsdC5zbGljZSgwLCByZXN1bHQubGVuZ3RoIC0gMSksXG4gICAgb3V0cHV0RGVuc2VWYWx1ZXM6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRHYXRoZXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhZ2dlZEdhdGhlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedRange } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns a RaggedTensor result composed from rtDenseValues and rtNestedSplits,\n * such that result[i] = [starts[i], starts[i] + deltas[i], ..., limits[i]]).\n *\n * @param starts: A Tensor. Must be one of the following types:\n * 'float32', 'int32'. The starts of each range.\n * @param limits: A Tensor. Must have the same type as starts. The limits of\n * each range.\n * @param deltas: A Tensor. Must have the same type as starts. The deltas of\n * each range.\n * @return A map with the following properties:\n * - rtNestedSplits: A Tensor of type 'int32'.\n * - rtDenseValues: A Tensor. Has the same type as starts.\n */\nfunction raggedRange_(starts, limits, deltas) {\n const $starts = convertToTensor(starts, 'starts', 'raggedRange');\n const $limits = convertToTensor(limits, 'limits', 'raggedRange', $starts.dtype);\n const $deltas = convertToTensor(deltas, 'deltas', 'raggedRange', $starts.dtype);\n const inputs = {\n starts: $starts,\n limits: $limits,\n deltas: $deltas,\n };\n const result = ENGINE.runKernel(RaggedRange, inputs);\n return {\n rtNestedSplits: result[0],\n rtDenseValues: result[1],\n };\n}\nexport const raggedRange = /* @__PURE__ */ op({ raggedRange_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3JhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFnZ2VkX3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFdBQVcsRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUcvRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsU0FBUyxZQUFZLENBQ2pCLE1BQXlCLEVBQUUsTUFBeUIsRUFDcEQsTUFBeUI7SUFDM0IsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FDVCxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBFLE1BQU0sTUFBTSxHQUFzQjtRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLE9BQU87S0FDaEIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQVksQ0FBQyxDQUFDO0lBQ3JFLE9BQU87UUFDTCxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JhZ2dlZFJhbmdlLCBSYWdnZWRSYW5nZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogUmV0dXJucyBhIFJhZ2dlZFRlbnNvciByZXN1bHQgY29tcG9zZWQgZnJvbSBydERlbnNlVmFsdWVzIGFuZCBydE5lc3RlZFNwbGl0cyxcbiAqIHN1Y2ggdGhhdCByZXN1bHRbaV0gPSBbc3RhcnRzW2ldLCBzdGFydHNbaV0gKyBkZWx0YXNbaV0sIC4uLiwgbGltaXRzW2ldXSkuXG4gKlxuICogQHBhcmFtIHN0YXJ0czogQSBUZW5zb3IuIE11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6XG4gKiAgICAgJ2Zsb2F0MzInLCAnaW50MzInLiBUaGUgc3RhcnRzIG9mIGVhY2ggcmFuZ2UuXG4gKiBAcGFyYW0gbGltaXRzOiBBIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgc3RhcnRzLiBUaGUgbGltaXRzIG9mXG4gKiAgICAgZWFjaCByYW5nZS5cbiAqIEBwYXJhbSBkZWx0YXM6IEEgVGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBzdGFydHMuIFRoZSBkZWx0YXMgb2ZcbiAqICAgICBlYWNoIHJhbmdlLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHJ0TmVzdGVkU3BsaXRzOiBBIFRlbnNvciBvZiB0eXBlICdpbnQzMicuXG4gKiAgICAgLSBydERlbnNlVmFsdWVzOiBBIFRlbnNvci4gSGFzIHRoZSBzYW1lIHR5cGUgYXMgc3RhcnRzLlxuICovXG5cbmZ1bmN0aW9uIHJhZ2dlZFJhbmdlXyhcbiAgICBzdGFydHM6IFRlbnNvcnxUZW5zb3JMaWtlLCBsaW1pdHM6IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIGRlbHRhczogVGVuc29yfFRlbnNvckxpa2UpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRzdGFydHMgPSBjb252ZXJ0VG9UZW5zb3Ioc3RhcnRzLCAnc3RhcnRzJywgJ3JhZ2dlZFJhbmdlJyk7XG4gIGNvbnN0ICRsaW1pdHMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGxpbWl0cywgJ2xpbWl0cycsICdyYWdnZWRSYW5nZScsICRzdGFydHMuZHR5cGUpO1xuICBjb25zdCAkZGVsdGFzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZWx0YXMsICdkZWx0YXMnLCAncmFnZ2VkUmFuZ2UnLCAkc3RhcnRzLmR0eXBlKTtcblxuICBjb25zdCBpbnB1dHM6IFJhZ2dlZFJhbmdlSW5wdXRzID0ge1xuICAgIHN0YXJ0czogJHN0YXJ0cyxcbiAgICBsaW1pdHM6ICRsaW1pdHMsXG4gICAgZGVsdGFzOiAkZGVsdGFzLFxuICB9O1xuXG4gIGNvbnN0IHJlc3VsdDogVGVuc29yW10gPSBFTkdJTkUucnVuS2VybmVsKFJhZ2dlZFJhbmdlLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge1xuICAgIHJ0TmVzdGVkU3BsaXRzOiByZXN1bHRbMF0sXG4gICAgcnREZW5zZVZhbHVlczogcmVzdWx0WzFdLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgcmFnZ2VkUmFuZ2UgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhZ2dlZFJhbmdlX30pO1xuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { RaggedTensorToTensor } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Create a dense tensor from a ragged tensor, possibly altering its shape.\n *\n * The raggedTensorToTensor op creates a dense tensor from am array of row\n * partition tensors, a value vector, and default values. If the shape is\n * unspecified, the minimal shape required to contain all the elements in the\n * ragged tensor (the natural shape) will be used. If some dimensions are left\n * unspecified, then the size of the natural shape is used in that dimension.\n *\n * The defaultValue will be broadcast to the output shape. After that, the\n * values from the ragged tensor overwrite the default values. Note that the\n * defaultValue must have less dimensions than the value.\n *\n * The row partition tensors are in the order of the dimensions. At present, the\n * types can be: \"ROW_SPLITS\": the row_splits tensor from the ragged tensor.\n * \"VALUE_ROWIDS\": the value_rowids tensor from the ragged tensor.\n * \"FIRST_DIM_SIZE\": if value_rowids is used for the first dimension, then it\n * is preceded by \"FIRST_DIM_SIZE\".\n * ```\n * @param shape: A Tensor. Must be one of the following types: 'int32'. The\n * desired shape of the output tensor. If left unspecified (empty), the\n * minimal shape required to contain all the elements in the ragged tensor\n * (the natural shape) will be used. If some dimensions are left\n * unspecified, then the size of the natural shape is used in that\n * dimension.\n *\n * Note that dense dimensions cannot be modified by the shape argument.\n * Trying to change the size of a dense dimension will cause the op to fail.\n * Examples: natural shape: [4, 5, 6] shape: -1 output shape: [4, 5, 6]\n *\n * natural shape: [4, 5, 6] shape: [3, -1, 2] output shape: [3, 5, 2]\n *\n * natural shape: [4, 5, 6] shape: [3, 7, 2] output shape: [3, 7, 2]\n * @param values: A Tensor. A 1D tensor representing the values of the ragged\n * tensor.\n * @param defaultValue: A Tensor. Must have the same type as values. The\n * defaultValue when the shape is larger than the ragged tensor. The\n * defaultValue is broadcast until it is the shape of the output tensor,\n * and then overwritten by values in the ragged tensor. The default value\n * must be compatible with this broadcast operation, and must have fewer\n * dimensions than the value tensor.\n * @param rowPartitionTensors: A list of at least 1 Tensor objects with the same\n * type in: 'int32'.\n * @param rowPartitionTypes: A list of strings. The types of the row partition\n * tensors. At present, these can be:\n * \"ROW_SPLITS\": the row_splits tensor from the ragged tensor.\n * \"VALUE_ROWIDS\": the value_rowids tensor from the ragged tensor.\n * \"FIRST_DIM_SIZE\": if value_rowids is used for the first dimension, then\n * it is preceeded by \"FIRST_DIM_SIZE\". The tensors are in the order of\n * the dimensions.\n * @return A Tensor. Has the same type as values.\n * @doc {heading: 'Operations', subheading: 'Ragged'}\n */\nfunction raggedTensorToTensor_(shape, values, defaultValue, rowPartitionTensors, rowPartitionTypes) {\n const $shape = convertToTensor(shape, 'shape', 'raggedTensorToTensor', 'int32');\n const $values = convertToTensor(values, 'values', 'raggedTensorToTensor');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'raggedTensorToTensor', $values.dtype);\n const $rowPartitionTensors = rowPartitionTensors.map((t, i) => convertToTensor(t, `tensors${i}`, 'raggedTensorToTensor', 'int32'));\n const inputs = {\n shape: $shape,\n values: $values,\n defaultValue: $defaultValue,\n rowPartitionTensors: $rowPartitionTensors\n };\n const attrs = { rowPartitionTypes };\n return ENGINE.runKernel(RaggedTensorToTensor, inputs, attrs);\n}\nexport const raggedTensorToTensor = /* @__PURE__ */ op({ raggedTensorToTensor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3RlbnNvcl90b190ZW5zb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYWdnZWRfdGVuc29yX3RvX3RlbnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxvQkFBb0IsRUFBd0QsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9ERztBQUNILFNBQVMscUJBQXFCLENBQzFCLEtBQXdCLEVBQUUsTUFBeUIsRUFDbkQsWUFBK0IsRUFBRSxtQkFBNkIsRUFDOUQsaUJBQTJCO0lBQzdCLE1BQU0sTUFBTSxHQUNSLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUUsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUNqQyxZQUFZLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RSxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDTCxlQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBK0I7UUFDekMsS0FBSyxFQUFFLE1BQU07UUFDYixNQUFNLEVBQUUsT0FBTztRQUNmLFlBQVksRUFBRSxhQUFhO1FBQzNCLG1CQUFtQixFQUFFLG9CQUFvQjtLQUMxQyxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQThCLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQztJQUU3RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsTUFBWSxFQUFFLEtBQVcsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7UmFnZ2VkVGVuc29yVG9UZW5zb3IsIFJhZ2dlZFRlbnNvclRvVGVuc29yQXR0cnMsIFJhZ2dlZFRlbnNvclRvVGVuc29ySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRlbnNlIHRlbnNvciBmcm9tIGEgcmFnZ2VkIHRlbnNvciwgcG9zc2libHkgYWx0ZXJpbmcgaXRzIHNoYXBlLlxuICpcbiAqIFRoZSByYWdnZWRUZW5zb3JUb1RlbnNvciBvcCBjcmVhdGVzIGEgZGVuc2UgdGVuc29yIGZyb20gYW0gYXJyYXkgb2Ygcm93XG4gKiBwYXJ0aXRpb24gdGVuc29ycywgYSB2YWx1ZSB2ZWN0b3IsIGFuZCBkZWZhdWx0IHZhbHVlcy4gSWYgdGhlIHNoYXBlIGlzXG4gKiB1bnNwZWNpZmllZCwgdGhlIG1pbmltYWwgc2hhcGUgcmVxdWlyZWQgdG8gY29udGFpbiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZVxuICogcmFnZ2VkIHRlbnNvciAodGhlIG5hdHVyYWwgc2hhcGUpIHdpbGwgYmUgdXNlZC4gSWYgc29tZSBkaW1lbnNpb25zIGFyZSBsZWZ0XG4gKiB1bnNwZWNpZmllZCwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgbmF0dXJhbCBzaGFwZSBpcyB1c2VkIGluIHRoYXQgZGltZW5zaW9uLlxuICpcbiAqIFRoZSBkZWZhdWx0VmFsdWUgd2lsbCBiZSBicm9hZGNhc3QgdG8gdGhlIG91dHB1dCBzaGFwZS4gQWZ0ZXIgdGhhdCwgdGhlXG4gKiB2YWx1ZXMgZnJvbSB0aGUgcmFnZ2VkIHRlbnNvciBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgdmFsdWVzLiBOb3RlIHRoYXQgdGhlXG4gKiBkZWZhdWx0VmFsdWUgbXVzdCBoYXZlIGxlc3MgZGltZW5zaW9ucyB0aGFuIHRoZSB2YWx1ZS5cbiAqXG4gKiBUaGUgcm93IHBhcnRpdGlvbiB0ZW5zb3JzIGFyZSBpbiB0aGUgb3JkZXIgb2YgdGhlIGRpbWVuc2lvbnMuIEF0IHByZXNlbnQsIHRoZVxuICogdHlwZXMgY2FuIGJlOiBcIlJPV19TUExJVFNcIjogdGhlIHJvd19zcGxpdHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgIFwiVkFMVUVfUk9XSURTXCI6IHRoZSB2YWx1ZV9yb3dpZHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgIFwiRklSU1RfRElNX1NJWkVcIjogaWYgdmFsdWVfcm93aWRzIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCBkaW1lbnNpb24sIHRoZW4gaXRcbiAqIGlzIHByZWNlZGVkIGJ5IFwiRklSU1RfRElNX1NJWkVcIi5cbiAqIGBgYFxuICogQHBhcmFtIHNoYXBlOiBBIFRlbnNvci4gTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczogJ2ludDMyJy4gVGhlXG4gKiAgICAgZGVzaXJlZCBzaGFwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci4gSWYgbGVmdCB1bnNwZWNpZmllZCAoZW1wdHkpLCB0aGVcbiAqICAgICBtaW5pbWFsIHNoYXBlIHJlcXVpcmVkIHRvIGNvbnRhaW4gYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFnZ2VkIHRlbnNvclxuICogICAgICh0aGUgbmF0dXJhbCBzaGFwZSkgd2lsbCBiZSB1c2VkLiBJZiBzb21lIGRpbWVuc2lvbnMgYXJlIGxlZnRcbiAqICAgICB1bnNwZWNpZmllZCwgdGhlbiB0aGUgc2l6ZSBvZiB0aGUgbmF0dXJhbCBzaGFwZSBpcyB1c2VkIGluIHRoYXRcbiAqICAgICBkaW1lbnNpb24uXG4gKlxuICogICAgIE5vdGUgdGhhdCBkZW5zZSBkaW1lbnNpb25zIGNhbm5vdCBiZSBtb2RpZmllZCBieSB0aGUgc2hhcGUgYXJndW1lbnQuXG4gKiAgICAgVHJ5aW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiBhIGRlbnNlIGRpbWVuc2lvbiB3aWxsIGNhdXNlIHRoZSBvcCB0byBmYWlsLlxuICogICAgIEV4YW1wbGVzOiBuYXR1cmFsIHNoYXBlOiBbNCwgNSwgNl0gc2hhcGU6IC0xIG91dHB1dCBzaGFwZTogWzQsIDUsIDZdXG4gKlxuICogICAgIG5hdHVyYWwgc2hhcGU6IFs0LCA1LCA2XSBzaGFwZTogWzMsIC0xLCAyXSBvdXRwdXQgc2hhcGU6IFszLCA1LCAyXVxuICpcbiAqICAgICBuYXR1cmFsIHNoYXBlOiBbNCwgNSwgNl0gc2hhcGU6IFszLCA3LCAyXSBvdXRwdXQgc2hhcGU6IFszLCA3LCAyXVxuICogQHBhcmFtIHZhbHVlczogQSBUZW5zb3IuIEEgMUQgdGVuc29yIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzIG9mIHRoZSByYWdnZWRcbiAqICAgICB0ZW5zb3IuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlOiBBIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdmFsdWVzLiBUaGVcbiAqICAgICBkZWZhdWx0VmFsdWUgd2hlbiB0aGUgc2hhcGUgaXMgbGFyZ2VyIHRoYW4gdGhlIHJhZ2dlZCB0ZW5zb3IuIFRoZVxuICogICAgIGRlZmF1bHRWYWx1ZSBpcyBicm9hZGNhc3QgdW50aWwgaXQgaXMgdGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLFxuICogICAgIGFuZCB0aGVuIG92ZXJ3cml0dGVuIGJ5IHZhbHVlcyBpbiB0aGUgcmFnZ2VkIHRlbnNvci4gVGhlIGRlZmF1bHQgdmFsdWVcbiAqICAgICBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb2FkY2FzdCBvcGVyYXRpb24sIGFuZCBtdXN0IGhhdmUgZmV3ZXJcbiAqICAgICBkaW1lbnNpb25zIHRoYW4gdGhlIHZhbHVlIHRlbnNvci5cbiAqIEBwYXJhbSByb3dQYXJ0aXRpb25UZW5zb3JzOiBBIGxpc3Qgb2YgYXQgbGVhc3QgMSBUZW5zb3Igb2JqZWN0cyB3aXRoIHRoZSBzYW1lXG4gKiAgICAgdHlwZSBpbjogJ2ludDMyJy5cbiAqIEBwYXJhbSByb3dQYXJ0aXRpb25UeXBlczogQSBsaXN0IG9mIHN0cmluZ3MuIFRoZSB0eXBlcyBvZiB0aGUgcm93IHBhcnRpdGlvblxuICogICAgIHRlbnNvcnMuIEF0IHByZXNlbnQsIHRoZXNlIGNhbiBiZTpcbiAqICAgICBcIlJPV19TUExJVFNcIjogdGhlIHJvd19zcGxpdHMgdGVuc29yIGZyb20gdGhlIHJhZ2dlZCB0ZW5zb3IuXG4gKiAgICAgXCJWQUxVRV9ST1dJRFNcIjogdGhlIHZhbHVlX3Jvd2lkcyB0ZW5zb3IgZnJvbSB0aGUgcmFnZ2VkIHRlbnNvci5cbiAqICAgICBcIkZJUlNUX0RJTV9TSVpFXCI6IGlmIHZhbHVlX3Jvd2lkcyBpcyB1c2VkIGZvciB0aGUgZmlyc3QgZGltZW5zaW9uLCB0aGVuXG4gKiAgICAgICAgIGl0IGlzIHByZWNlZWRlZCBieSBcIkZJUlNUX0RJTV9TSVpFXCIuIFRoZSB0ZW5zb3JzIGFyZSBpbiB0aGUgb3JkZXIgb2ZcbiAqICAgICAgICAgdGhlIGRpbWVuc2lvbnMuXG4gKiBAcmV0dXJuIEEgVGVuc29yLiBIYXMgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdSYWdnZWQnfVxuICovXG5mdW5jdGlvbiByYWdnZWRUZW5zb3JUb1RlbnNvcl8oXG4gICAgc2hhcGU6IFRlbnNvcnxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIGRlZmF1bHRWYWx1ZTogVGVuc29yfFRlbnNvckxpa2UsIHJvd1BhcnRpdGlvblRlbnNvcnM6IFRlbnNvcltdLFxuICAgIHJvd1BhcnRpdGlvblR5cGVzOiBzdHJpbmdbXSk6IFRlbnNvciB7XG4gIGNvbnN0ICRzaGFwZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc2hhcGUsICdzaGFwZScsICdyYWdnZWRUZW5zb3JUb1RlbnNvcicsICdpbnQzMicpO1xuICBjb25zdCAkdmFsdWVzID0gY29udmVydFRvVGVuc29yKHZhbHVlcywgJ3ZhbHVlcycsICdyYWdnZWRUZW5zb3JUb1RlbnNvcicpO1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID0gY29udmVydFRvVGVuc29yKFxuICAgICAgZGVmYXVsdFZhbHVlLCAnZGVmYXVsdFZhbHVlJywgJ3JhZ2dlZFRlbnNvclRvVGVuc29yJywgJHZhbHVlcy5kdHlwZSk7XG4gIGNvbnN0ICRyb3dQYXJ0aXRpb25UZW5zb3JzID0gcm93UGFydGl0aW9uVGVuc29ycy5tYXAoXG4gICAgICAodCwgaSkgPT5cbiAgICAgICAgICBjb252ZXJ0VG9UZW5zb3IodCwgYHRlbnNvcnMke2l9YCwgJ3JhZ2dlZFRlbnNvclRvVGVuc29yJywgJ2ludDMyJykpO1xuXG4gIGNvbnN0IGlucHV0czogUmFnZ2VkVGVuc29yVG9UZW5zb3JJbnB1dHMgPSB7XG4gICAgc2hhcGU6ICRzaGFwZSxcbiAgICB2YWx1ZXM6ICR2YWx1ZXMsXG4gICAgZGVmYXVsdFZhbHVlOiAkZGVmYXVsdFZhbHVlLFxuICAgIHJvd1BhcnRpdGlvblRlbnNvcnM6ICRyb3dQYXJ0aXRpb25UZW5zb3JzXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBSYWdnZWRUZW5zb3JUb1RlbnNvckF0dHJzID0ge3Jvd1BhcnRpdGlvblR5cGVzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSYWdnZWRUZW5zb3JUb1RlbnNvciwgaW5wdXRzIGFzIHt9LCBhdHRycyBhcyB7fSk7XG59XG5cbmV4cG9ydCBjb25zdCByYWdnZWRUZW5zb3JUb1RlbnNvciA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFnZ2VkVGVuc29yVG9UZW5zb3JffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { sizeFromShape } from '../util';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\n/**\n * Creates a `tf.Tensor` with values sampled from a random number generator\n * function defined by the user.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param randFunction A random number generator function which is called\n * for each element in the output tensor.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction rand_(shape, randFunction, dtype) {\n assertNonNegativeIntegerDimensions(shape);\n const size = sizeFromShape(shape);\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n for (let i = 0; i < size; i++) {\n values[i] = randFunction();\n }\n return ENGINE.makeTensor(values, shape, dtype);\n}\nexport const rand = /* @__PURE__ */ op({ rand_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUdqQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLEtBQUssQ0FDVixLQUFrQixFQUFFLFlBQTBCLEVBQzlDLEtBQWdCO0lBQ2xCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDeEMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDO1NBQU0sSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFO1FBQzVCLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMvQjtTQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUMzQixNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDL0I7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDL0M7SUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQztLQUM1QjtJQUNELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBYyxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7YXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbF9iYXNlJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICogZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gcmFuZEZ1bmN0aW9uIEEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkXG4gKiBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBvdXRwdXQgdGVuc29yLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdSYW5kb20nfVxuICovXG5mdW5jdGlvbiByYW5kXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdLCByYW5kRnVuY3Rpb246ICgpID0+IG51bWJlcixcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0IHNpemUgPSBzaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgbGV0IHZhbHVlcyA9IG51bGw7XG4gIGlmIChkdHlwZSA9PSBudWxsIHx8IGR0eXBlID09PSAnZmxvYXQzMicpIHtcbiAgICB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUpO1xuICB9IGVsc2UgaWYgKGR0eXBlID09PSAnaW50MzInKSB7XG4gICAgdmFsdWVzID0gbmV3IEludDMyQXJyYXkoc2l6ZSk7XG4gIH0gZWxzZSBpZiAoZHR5cGUgPT09ICdib29sJykge1xuICAgIHZhbHVlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIHZhbHVlc1tpXSA9IHJhbmRGdW5jdGlvbigpO1xuICB9XG4gIHJldHVybiBFTkdJTkUubWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBkdHlwZSkgYXMgVGVuc29yPFI+O1xufVxuXG5leHBvcnQgY29uc3QgcmFuZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZF99KTtcbiJdfQ==","// A port of an algorithm by Johannes Baagøe , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as seedrandom from 'seedrandom';\nimport { expectNumbersClose, testEpsilon } from '../test_util';\n// https://en.wikipedia.org/wiki/Marsaglia_polar_method\nexport class MPRandGauss {\n constructor(mean, stdDeviation, dtype, truncated, seed) {\n this.mean = mean;\n this.stdDev = stdDeviation;\n this.dtype = dtype;\n this.nextVal = NaN;\n this.truncated = truncated;\n if (this.truncated) {\n this.upper = this.mean + this.stdDev * 2;\n this.lower = this.mean - this.stdDev * 2;\n }\n const seedValue = seed ? seed : Math.random();\n this.random = seedrandom.alea(seedValue.toString());\n }\n /** Returns next sample from a Gaussian distribution. */\n nextValue() {\n if (!isNaN(this.nextVal)) {\n const value = this.nextVal;\n this.nextVal = NaN;\n return value;\n }\n let resultX, resultY;\n let isValid = false;\n while (!isValid) {\n let v1, v2, s;\n do {\n v1 = 2 * this.random() - 1;\n v2 = 2 * this.random() - 1;\n s = v1 * v1 + v2 * v2;\n } while (s >= 1 || s === 0);\n const mul = Math.sqrt(-2.0 * Math.log(s) / s);\n resultX = this.mean + this.stdDev * v1 * mul;\n resultY = this.mean + this.stdDev * v2 * mul;\n if (!this.truncated || this.isValidTruncated(resultX)) {\n isValid = true;\n }\n }\n if (!this.truncated || this.isValidTruncated(resultY)) {\n this.nextVal = this.convertValue(resultY);\n }\n return this.convertValue(resultX);\n }\n /** Handles proper rounding for non-floating-point numbers. */\n convertValue(value) {\n if (this.dtype == null || this.dtype === 'float32') {\n return value;\n }\n return Math.round(value);\n }\n /** Returns true if less than 2-standard-deviations from the mean. */\n isValidTruncated(value) {\n return value <= this.upper && value >= this.lower;\n }\n}\n// Marsaglia, George, and Wai Wan Tsang. 2000. \"A Simple Method for Generating\n// Gamma Variables.\"\nexport class RandGamma {\n constructor(alpha, beta, dtype, seed) {\n this.alpha = alpha;\n this.beta = 1 / beta; // convert rate to scale parameter\n this.dtype = dtype;\n const seedValue = seed ? seed : Math.random();\n this.randu = seedrandom.alea(seedValue.toString());\n this.randn = new MPRandGauss(0, 1, dtype, false, this.randu());\n if (alpha < 1) {\n this.d = alpha + (2 / 3);\n }\n else {\n this.d = alpha - (1 / 3);\n }\n this.c = 1 / Math.sqrt(9 * this.d);\n }\n /** Returns next sample from a gamma distribution. */\n nextValue() {\n let x2, v0, v1, x, u, v;\n while (true) {\n do {\n x = this.randn.nextValue();\n v = 1 + (this.c * x);\n } while (v <= 0);\n v *= v * v;\n x2 = x * x;\n v0 = 1 - (0.331 * x2 * x2);\n v1 = (0.5 * x2) + (this.d * (1 - v + Math.log(v)));\n u = this.randu();\n if (u < v0 || Math.log(u) < v1) {\n break;\n }\n }\n v = (1 / this.beta) * this.d * v;\n if (this.alpha < 1) {\n v *= Math.pow(this.randu(), 1 / this.alpha);\n }\n return this.convertValue(v);\n }\n /** Handles proper rounding for non-floating-point numbers. */\n convertValue(value) {\n if (this.dtype === 'float32') {\n return value;\n }\n return Math.round(value);\n }\n}\nexport class UniformRandom {\n constructor(min = 0, max = 1, dtype, seed) {\n /** Handles proper rounding for non floating point numbers. */\n this.canReturnFloat = () => (this.dtype == null || this.dtype === 'float32');\n this.min = min;\n this.range = max - min;\n this.dtype = dtype;\n if (seed == null) {\n seed = Math.random();\n }\n if (typeof seed === 'number') {\n seed = seed.toString();\n }\n if (!this.canReturnFloat() && this.range <= 1) {\n throw new Error(`The difference between ${min} - ${max} <= 1 and dtype is not float`);\n }\n this.random = seedrandom.alea(seed);\n }\n convertValue(value) {\n if (this.canReturnFloat()) {\n return value;\n }\n return Math.round(value);\n }\n nextValue() {\n return this.convertValue(this.min + this.range * this.random());\n }\n}\nexport function jarqueBeraNormalityTest(values) {\n // https://en.wikipedia.org/wiki/Jarque%E2%80%93Bera_test\n const n = values.length;\n const s = skewness(values);\n const k = kurtosis(values);\n const jb = n / 6 * (Math.pow(s, 2) + 0.25 * Math.pow(k - 3, 2));\n // JB test requires 2-degress of freedom from Chi-Square @ 0.95:\n // http://www.itl.nist.gov/div898/handbook/eda/section3/eda3674.htm\n const CHI_SQUARE_2DEG = 5.991;\n if (jb > CHI_SQUARE_2DEG) {\n throw new Error(`Invalid p-value for JB: ${jb}`);\n }\n}\nexport function expectArrayInMeanStdRange(actual, expectedMean, expectedStdDev, epsilon) {\n if (epsilon == null) {\n epsilon = testEpsilon();\n }\n const actualMean = mean(actual);\n expectNumbersClose(actualMean, expectedMean, epsilon);\n expectNumbersClose(standardDeviation(actual, actualMean), expectedStdDev, epsilon);\n}\nfunction mean(values) {\n let sum = 0;\n for (let i = 0; i < values.length; i++) {\n sum += values[i];\n }\n return sum / values.length;\n}\nfunction standardDeviation(values, mean) {\n let squareDiffSum = 0;\n for (let i = 0; i < values.length; i++) {\n const diff = values[i] - mean;\n squareDiffSum += diff * diff;\n }\n return Math.sqrt(squareDiffSum / values.length);\n}\nfunction kurtosis(values) {\n // https://en.wikipedia.org/wiki/Kurtosis\n const valuesMean = mean(values);\n const n = values.length;\n let sum2 = 0;\n let sum4 = 0;\n for (let i = 0; i < n; i++) {\n const v = values[i] - valuesMean;\n sum2 += Math.pow(v, 2);\n sum4 += Math.pow(v, 4);\n }\n return (1 / n) * sum4 / Math.pow((1 / n) * sum2, 2);\n}\nfunction skewness(values) {\n // https://en.wikipedia.org/wiki/Skewness\n const valuesMean = mean(values);\n const n = values.length;\n let sum2 = 0;\n let sum3 = 0;\n for (let i = 0; i < n; i++) {\n const v = values[i] - valuesMean;\n sum2 += Math.pow(v, 2);\n sum3 += Math.pow(v, 3);\n }\n return (1 / n) * sum3 / Math.pow((1 / (n - 1)) * sum2, 3 / 2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFxQjdELHVEQUF1RDtBQUN2RCxNQUFNLE9BQU8sV0FBVztJQVV0QixZQUNJLElBQVksRUFBRSxZQUFvQixFQUFFLEtBQWlDLEVBQ3JFLFNBQW1CLEVBQUUsSUFBYTtRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUMxQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCx3REFBd0Q7SUFD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QUFNLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0ICogYXMgc2VlZHJhbmRvbSBmcm9tICdzZWVkcmFuZG9tJztcblxuaW1wb3J0IHtleHBlY3ROdW1iZXJzQ2xvc2UsIHRlc3RFcHNpbG9ufSBmcm9tICcuLi90ZXN0X3V0aWwnO1xuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tQmFzZSB7XG4gIG5leHRWYWx1ZSgpOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tR2FtbWEge1xuICBuZXh0VmFsdWUoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmROb3JtYWxEYXRhVHlwZXMge1xuICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG4gIGludDMyOiBJbnQzMkFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmRHYW1tYURhdGFUeXBlcyB7XG4gIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcbiAgaW50MzI6IEludDMyQXJyYXk7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01hcnNhZ2xpYV9wb2xhcl9tZXRob2RcbmV4cG9ydCBjbGFzcyBNUFJhbmRHYXVzcyBpbXBsZW1lbnRzIFJhbmRvbUJhc2Uge1xuICBwcml2YXRlIG1lYW46IG51bWJlcjtcbiAgcHJpdmF0ZSBzdGREZXY6IG51bWJlcjtcbiAgcHJpdmF0ZSBuZXh0VmFsOiBudW1iZXI7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzO1xuICBwcml2YXRlIHRydW5jYXRlZD86IGJvb2xlYW47XG4gIHByaXZhdGUgdXBwZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgbG93ZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgcmFuZG9tOiBzZWVkcmFuZG9tLnBybmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBtZWFuOiBudW1iZXIsIHN0ZERldmlhdGlvbjogbnVtYmVyLCBkdHlwZT86IGtleW9mIFJhbmROb3JtYWxEYXRhVHlwZXMsXG4gICAgICB0cnVuY2F0ZWQ/OiBib29sZWFuLCBzZWVkPzogbnVtYmVyKSB7XG4gICAgdGhpcy5tZWFuID0gbWVhbjtcbiAgICB0aGlzLnN0ZERldiA9IHN0ZERldmlhdGlvbjtcbiAgICB0aGlzLmR0eXBlID0gZHR5cGU7XG4gICAgdGhpcy5uZXh0VmFsID0gTmFOO1xuICAgIHRoaXMudHJ1bmNhdGVkID0gdHJ1bmNhdGVkO1xuICAgIGlmICh0aGlzLnRydW5jYXRlZCkge1xuICAgICAgdGhpcy51cHBlciA9IHRoaXMubWVhbiArIHRoaXMuc3RkRGV2ICogMjtcbiAgICAgIHRoaXMubG93ZXIgPSB0aGlzLm1lYW4gLSB0aGlzLnN0ZERldiAqIDI7XG4gICAgfVxuICAgIGNvbnN0IHNlZWRWYWx1ZSA9IHNlZWQgPyBzZWVkIDogTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLnJhbmRvbSA9IHNlZWRyYW5kb20uYWxlYShzZWVkVmFsdWUudG9TdHJpbmcoKSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBuZXh0IHNhbXBsZSBmcm9tIGEgR2F1c3NpYW4gZGlzdHJpYnV0aW9uLiAqL1xuICBwdWJsaWMgbmV4dFZhbHVlKCk6IG51bWJlciB7XG4gICAgaWYgKCFpc05hTih0aGlzLm5leHRWYWwpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubmV4dFZhbDtcbiAgICAgIHRoaXMubmV4dFZhbCA9IE5hTjtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0WDogbnVtYmVyLCByZXN1bHRZOiBudW1iZXI7XG4gICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoIWlzVmFsaWQpIHtcbiAgICAgIGxldCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCBzOiBudW1iZXI7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gMiAqIHRoaXMucmFuZG9tKCkgLSAxO1xuICAgICAgICB2MiA9IDIgKiB0aGlzLnJhbmRvbSgpIC0gMTtcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuXG4gICAgICBjb25zdCBtdWwgPSBNYXRoLnNxcnQoLTIuMCAqIE1hdGgubG9nKHMpIC8gcyk7XG4gICAgICByZXN1bHRYID0gdGhpcy5tZWFuICsgdGhpcy5zdGREZXYgKiB2MSAqIG11bDtcbiAgICAgIHJlc3VsdFkgPSB0aGlzLm1lYW4gKyB0aGlzLnN0ZERldiAqIHYyICogbXVsO1xuXG4gICAgICBpZiAoIXRoaXMudHJ1bmNhdGVkIHx8IHRoaXMuaXNWYWxpZFRydW5jYXRlZChyZXN1bHRYKSkge1xuICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudHJ1bmNhdGVkIHx8IHRoaXMuaXNWYWxpZFRydW5jYXRlZChyZXN1bHRZKSkge1xuICAgICAgdGhpcy5uZXh0VmFsID0gdGhpcy5jb252ZXJ0VmFsdWUocmVzdWx0WSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWx1ZShyZXN1bHRYKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIHByb3BlciByb3VuZGluZyBmb3Igbm9uLWZsb2F0aW5nLXBvaW50IG51bWJlcnMuICovXG4gIHByaXZhdGUgY29udmVydFZhbHVlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmR0eXBlID09IG51bGwgfHwgdGhpcy5kdHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgbGVzcyB0aGFuIDItc3RhbmRhcmQtZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuLiAqL1xuICBwcml2YXRlIGlzVmFsaWRUcnVuY2F0ZWQodmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA8PSB0aGlzLnVwcGVyICYmIHZhbHVlID49IHRoaXMubG93ZXI7XG4gIH1cbn1cblxuLy8gTWFyc2FnbGlhLCBHZW9yZ2UsIGFuZCBXYWkgV2FuIFRzYW5nLiAyMDAwLiBcIkEgU2ltcGxlIE1ldGhvZCBmb3IgR2VuZXJhdGluZ1xuLy8gR2FtbWEgVmFyaWFibGVzLlwiXG5leHBvcnQgY2xhc3MgUmFuZEdhbW1hIGltcGxlbWVudHMgUmFuZG9tR2FtbWEge1xuICBwcml2YXRlIGFscGhhOiBudW1iZXI7XG4gIHByaXZhdGUgYmV0YTogbnVtYmVyO1xuICBwcml2YXRlIGQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBjOiBudW1iZXI7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kR2FtbWFEYXRhVHlwZXM7XG4gIHByaXZhdGUgcmFuZHU6IHNlZWRyYW5kb20ucHJuZztcbiAgcHJpdmF0ZSByYW5kbjogTVBSYW5kR2F1c3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBhbHBoYTogbnVtYmVyLCBiZXRhOiBudW1iZXIsIGR0eXBlOiBrZXlvZiBSYW5kR2FtbWFEYXRhVHlwZXMsXG4gICAgICBzZWVkPzogbnVtYmVyKSB7XG4gICAgdGhpcy5hbHBoYSA9IGFscGhhO1xuICAgIHRoaXMuYmV0YSA9IDEgLyBiZXRhOyAgLy8gY29udmVydCByYXRlIHRvIHNjYWxlIHBhcmFtZXRlclxuICAgIHRoaXMuZHR5cGUgPSBkdHlwZTtcblxuICAgIGNvbnN0IHNlZWRWYWx1ZSA9IHNlZWQgPyBzZWVkIDogTWF0aC5yYW5kb20oKTtcbiAgICB0aGlzLnJhbmR1ID0gc2VlZHJhbmRvbS5hbGVhKHNlZWRWYWx1ZS50b1N0cmluZygpKTtcbiAgICB0aGlzLnJhbmRuID0gbmV3IE1QUmFuZEdhdXNzKDAsIDEsIGR0eXBlLCBmYWxzZSwgdGhpcy5yYW5kdSgpKTtcblxuICAgIGlmIChhbHBoYSA8IDEpIHtcbiAgICAgIHRoaXMuZCA9IGFscGhhICsgKDIgLyAzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kID0gYWxwaGEgLSAoMSAvIDMpO1xuICAgIH1cbiAgICB0aGlzLmMgPSAxIC8gTWF0aC5zcXJ0KDkgKiB0aGlzLmQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgbmV4dCBzYW1wbGUgZnJvbSBhIGdhbW1hIGRpc3RyaWJ1dGlvbi4gKi9cbiAgcHVibGljIG5leHRWYWx1ZSgpOiBudW1iZXIge1xuICAgIGxldCB4MjogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB4OiBudW1iZXIsIHU6IG51bWJlciwgdjogbnVtYmVyO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHggPSB0aGlzLnJhbmRuLm5leHRWYWx1ZSgpO1xuICAgICAgICB2ID0gMSArICh0aGlzLmMgKiB4KTtcbiAgICAgIH0gd2hpbGUgKHYgPD0gMCk7XG4gICAgICB2ICo9IHYgKiB2O1xuICAgICAgeDIgPSB4ICogeDtcbiAgICAgIHYwID0gMSAtICgwLjMzMSAqIHgyICogeDIpO1xuICAgICAgdjEgPSAoMC41ICogeDIpICsgKHRoaXMuZCAqICgxIC0gdiArIE1hdGgubG9nKHYpKSk7XG4gICAgICB1ID0gdGhpcy5yYW5kdSgpO1xuICAgICAgaWYgKHUgPCB2MCB8fCBNYXRoLmxvZyh1KSA8IHYxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB2ID0gKDEgLyB0aGlzLmJldGEpICogdGhpcy5kICogdjtcbiAgICBpZiAodGhpcy5hbHBoYSA8IDEpIHtcbiAgICAgIHYgKj0gTWF0aC5wb3codGhpcy5yYW5kdSgpLCAxIC8gdGhpcy5hbHBoYSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWx1ZSh2KTtcbiAgfVxuICAvKiogSGFuZGxlcyBwcm9wZXIgcm91bmRpbmcgZm9yIG5vbi1mbG9hdGluZy1wb2ludCBudW1iZXJzLiAqL1xuICBwcml2YXRlIGNvbnZlcnRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kdHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybVJhbmRvbSBpbXBsZW1lbnRzIFJhbmRvbUJhc2Uge1xuICBwcml2YXRlIG1pbjogbnVtYmVyO1xuICBwcml2YXRlIHJhbmdlOiBudW1iZXI7XG4gIHByaXZhdGUgcmFuZG9tOiBzZWVkcmFuZG9tLnBybmc7XG4gIHByaXZhdGUgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgbWluID0gMCwgbWF4ID0gMSwgZHR5cGU/OiBrZXlvZiBSYW5kTm9ybWFsRGF0YVR5cGVzLFxuICAgICAgc2VlZD86IHN0cmluZ3xudW1iZXIpIHtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLnJhbmdlID0gbWF4IC0gbWluO1xuICAgIHRoaXMuZHR5cGUgPSBkdHlwZTtcbiAgICBpZiAoc2VlZCA9PSBudWxsKSB7XG4gICAgICBzZWVkID0gTWF0aC5yYW5kb20oKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJykge1xuICAgICAgc2VlZCA9IHNlZWQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuUmV0dXJuRmxvYXQoKSAmJiB0aGlzLnJhbmdlIDw9IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAke21pbn0gLSAke21heH0gPD0gMSBhbmQgZHR5cGUgaXMgbm90IGZsb2F0YCk7XG4gICAgfVxuICAgIHRoaXMucmFuZG9tID0gc2VlZHJhbmRvbS5hbGVhKHNlZWQpO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgcHJvcGVyIHJvdW5kaW5nIGZvciBub24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKi9cbiAgcHJpdmF0ZSBjYW5SZXR1cm5GbG9hdCA9ICgpID0+XG4gICAgICAodGhpcy5kdHlwZSA9PSBudWxsIHx8IHRoaXMuZHR5cGUgPT09ICdmbG9hdDMyJyk7XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY2FuUmV0dXJuRmxvYXQoKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gIH1cblxuICBuZXh0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydFZhbHVlKHRoaXMubWluICsgdGhpcy5yYW5nZSAqIHRoaXMucmFuZG9tKCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqYXJxdWVCZXJhTm9ybWFsaXR5VGVzdCh2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10pIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmFycXVlJUUyJTgwJTkzQmVyYV90ZXN0XG4gIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICBjb25zdCBzID0gc2tld25lc3ModmFsdWVzKTtcbiAgY29uc3QgayA9IGt1cnRvc2lzKHZhbHVlcyk7XG4gIGNvbnN0IGpiID0gbiAvIDYgKiAoTWF0aC5wb3cocywgMikgKyAwLjI1ICogTWF0aC5wb3coayAtIDMsIDIpKTtcbiAgLy8gSkIgdGVzdCByZXF1aXJlcyAyLWRlZ3Jlc3Mgb2YgZnJlZWRvbSBmcm9tIENoaS1TcXVhcmUgQCAwLjk1OlxuICAvLyBodHRwOi8vd3d3Lml0bC5uaXN0Lmdvdi9kaXY4OTgvaGFuZGJvb2svZWRhL3NlY3Rpb24zL2VkYTM2NzQuaHRtXG4gIGNvbnN0IENISV9TUVVBUkVfMkRFRyA9IDUuOTkxO1xuICBpZiAoamIgPiBDSElfU1FVQVJFXzJERUcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcC12YWx1ZSBmb3IgSkI6ICR7amJ9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEFycmF5SW5NZWFuU3RkUmFuZ2UoXG4gICAgYWN0dWFsOiBUeXBlZEFycmF5fG51bWJlcltdLCBleHBlY3RlZE1lYW46IG51bWJlciwgZXhwZWN0ZWRTdGREZXY6IG51bWJlcixcbiAgICBlcHNpbG9uPzogbnVtYmVyKSB7XG4gIGlmIChlcHNpbG9uID09IG51bGwpIHtcbiAgICBlcHNpbG9uID0gdGVzdEVwc2lsb24oKTtcbiAgfVxuICBjb25zdCBhY3R1YWxNZWFuID0gbWVhbihhY3R1YWwpO1xuICBleHBlY3ROdW1iZXJzQ2xvc2UoYWN0dWFsTWVhbiwgZXhwZWN0ZWRNZWFuLCBlcHNpbG9uKTtcbiAgZXhwZWN0TnVtYmVyc0Nsb3NlKFxuICAgICAgc3RhbmRhcmREZXZpYXRpb24oYWN0dWFsLCBhY3R1YWxNZWFuKSwgZXhwZWN0ZWRTdGREZXYsIGVwc2lsb24pO1xufVxuXG5mdW5jdGlvbiBtZWFuKHZhbHVlczogVHlwZWRBcnJheXxudW1iZXJbXSkge1xuICBsZXQgc3VtID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBzdW0gKz0gdmFsdWVzW2ldO1xuICB9XG4gIHJldHVybiBzdW0gLyB2YWx1ZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBzdGFuZGFyZERldmlhdGlvbih2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10sIG1lYW46IG51bWJlcikge1xuICBsZXQgc3F1YXJlRGlmZlN1bSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGlmZiA9IHZhbHVlc1tpXSAtIG1lYW47XG4gICAgc3F1YXJlRGlmZlN1bSArPSBkaWZmICogZGlmZjtcbiAgfVxuICByZXR1cm4gTWF0aC5zcXJ0KHNxdWFyZURpZmZTdW0gLyB2YWx1ZXMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24ga3VydG9zaXModmFsdWVzOiBUeXBlZEFycmF5fG51bWJlcltdKSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0t1cnRvc2lzXG4gIGNvbnN0IHZhbHVlc01lYW4gPSBtZWFuKHZhbHVlcyk7XG4gIGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xuICBsZXQgc3VtMiA9IDA7XG4gIGxldCBzdW00ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCB2ID0gdmFsdWVzW2ldIC0gdmFsdWVzTWVhbjtcbiAgICBzdW0yICs9IE1hdGgucG93KHYsIDIpO1xuICAgIHN1bTQgKz0gTWF0aC5wb3codiwgNCk7XG4gIH1cbiAgcmV0dXJuICgxIC8gbikgKiBzdW00IC8gTWF0aC5wb3coKDEgLyBuKSAqIHN1bTIsIDIpO1xufVxuXG5mdW5jdGlvbiBza2V3bmVzcyh2YWx1ZXM6IFR5cGVkQXJyYXl8bnVtYmVyW10pIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2tld25lc3NcbiAgY29uc3QgdmFsdWVzTWVhbiA9IG1lYW4odmFsdWVzKTtcbiAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIGxldCBzdW0yID0gMDtcbiAgbGV0IHN1bTMgPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgIGNvbnN0IHYgPSB2YWx1ZXNbaV0gLSB2YWx1ZXNNZWFuO1xuICAgIHN1bTIgKz0gTWF0aC5wb3codiwgMik7XG4gICAgc3VtMyArPSBNYXRoLnBvdyh2LCAzKTtcbiAgfVxuICByZXR1cm4gKDEgLyBuKSAqIHN1bTMgLyBNYXRoLnBvdygoMSAvIChuIC0gMSkpICogc3VtMiwgMyAvIDIpO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { RandGamma } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a gamma distribution.\n *\n * ```js\n * tf.randomGamma([2, 2], 1).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param alpha The shape parameter of the gamma distribution.\n * @param beta The inverse scale parameter of the gamma distribution. Defaults\n * to 1.\n * @param dtype The data type of the output. Defaults to float32.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomGamma_(shape, alpha, beta = 1, dtype = 'float32', seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (beta == null) {\n beta = 1;\n }\n if (dtype == null) {\n dtype = 'float32';\n }\n if (dtype !== 'float32' && dtype !== 'int32') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n const rgamma = new RandGamma(alpha, beta, dtype, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = rgamma.nextValue();\n }\n return res.toTensor();\n}\nexport const randomGamma = /* @__PURE__ */ op({ randomGamma_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX2dhbW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZG9tX2dhbW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFlBQVksQ0FDakIsS0FBa0IsRUFBRSxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFDM0MsUUFBMkIsU0FBUyxFQUFFLElBQWE7SUFDckQsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixLQUFLLEdBQUcsU0FBUyxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge1JhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge1JhbmRHYW1tYX0gZnJvbSAnLi9yYW5kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSBnYW1tYSBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbUdhbW1hKFsyLCAyXSwgMSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBhbHBoYSBUaGUgc2hhcGUgcGFyYW1ldGVyIG9mIHRoZSBnYW1tYSBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gYmV0YSBUaGUgaW52ZXJzZSBzY2FsZSBwYXJhbWV0ZXIgb2YgdGhlIGdhbW1hIGRpc3RyaWJ1dGlvbi4gRGVmYXVsdHNcbiAqICAgICB0byAxLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dC4gRGVmYXVsdHMgdG8gZmxvYXQzMi5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tR2FtbWFfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIGFscGhhOiBudW1iZXIsIGJldGEgPSAxLFxuICAgIGR0eXBlOiAnZmxvYXQzMid8J2ludDMyJyA9ICdmbG9hdDMyJywgc2VlZD86IG51bWJlcik6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuICBpZiAoYmV0YSA9PSBudWxsKSB7XG4gICAgYmV0YSA9IDE7XG4gIH1cbiAgaWYgKGR0eXBlID09IG51bGwpIHtcbiAgICBkdHlwZSA9ICdmbG9hdDMyJztcbiAgfVxuICBpZiAoZHR5cGUgIT09ICdmbG9hdDMyJyAmJiBkdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICR7ZHR5cGV9YCk7XG4gIH1cbiAgY29uc3QgcmdhbW1hID0gbmV3IFJhbmRHYW1tYShhbHBoYSwgYmV0YSwgZHR5cGUsIHNlZWQpO1xuICBjb25zdCByZXMgPSBidWZmZXIoc2hhcGUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnZhbHVlc1tpXSA9IHJnYW1tYS5uZXh0VmFsdWUoKTtcbiAgfVxuICByZXR1cm4gcmVzLnRvVGVuc29yKCk7XG59XG5cbmV4cG9ydCBjb25zdCByYW5kb21HYW1tYSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZG9tR2FtbWFffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { MPRandGauss } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a normal distribution.\n *\n * ```js\n * tf.randomNormal([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomNormal_(shape, mean = 0, stdDev = 1, dtype, seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n const randGauss = new MPRandGauss(mean, stdDev, dtype, false /* truncated */, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = randGauss.nextValue();\n }\n return res.toTensor();\n}\nexport const randomNormal = /* @__PURE__ */ op({ randomNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmRvbV9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLEtBQWtCLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEtBQXlCLEVBQ25FLElBQWE7SUFDZixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUssS0FBa0IsS0FBSyxNQUFNLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE1BQU0sU0FBUyxHQUNYLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDdkM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge01QUmFuZEdhdXNzfSBmcm9tICcuL3JhbmRfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIHNhbXBsZWQgZnJvbSBhIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbU5vcm1hbChbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gbWVhbiBUaGUgbWVhbiBvZiB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqIEBwYXJhbSBzdGREZXYgVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gc2VlZCBUaGUgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1JhbmRvbSd9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU5vcm1hbF88UiBleHRlbmRzIFJhbms+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWVhbiA9IDAsIHN0ZERldiA9IDEsIGR0eXBlPzogJ2Zsb2F0MzInfCdpbnQzMicsXG4gICAgc2VlZD86IG51bWJlcik6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMoc2hhcGUpO1xuICBpZiAoZHR5cGUgIT0gbnVsbCAmJiAoZHR5cGUgYXMgRGF0YVR5cGUpID09PSAnYm9vbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIGNvbnN0IHJhbmRHYXVzcyA9XG4gICAgICBuZXcgTVBSYW5kR2F1c3MobWVhbiwgc3RkRGV2LCBkdHlwZSwgZmFsc2UgLyogdHJ1bmNhdGVkICovLCBzZWVkKTtcbiAgY29uc3QgcmVzID0gYnVmZmVyKHNoYXBlLCBkdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kR2F1c3MubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgcmFuZG9tTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtyYW5kb21Ob3JtYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from './operation';\nimport { randomNormal } from './random_normal';\n/**\n * Creates a `tf.Tensor` with values sampled from a normal distribution.\n *\n * The generated values will have mean 0 and standard deviation 1.\n *\n * ```js\n * tf.randomStandardNormal([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The data type of the output.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomStandardNormal_(shape, dtype, seed) {\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type ${dtype}`);\n }\n return randomNormal(shape, 0, 1, dtype, seed);\n}\nexport const randomStandardNormal = /* @__PURE__ */ op({ randomStandardNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3N0YW5kYXJkX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JhbmRvbV9zdGFuZGFyZF9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLHFCQUFxQixDQUMxQixLQUFrQixFQUFFLEtBQXlCLEVBQUUsSUFBYTtJQUM5RCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUssS0FBa0IsS0FBSyxNQUFNLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRDtJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLHFCQUFxQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JhbmRvbU5vcm1hbH0gZnJvbSAnLi9yYW5kb21fbm9ybWFsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgd2l0aCB2YWx1ZXMgc2FtcGxlZCBmcm9tIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHZhbHVlcyB3aWxsIGhhdmUgbWVhbiAwIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gMS5cbiAqXG4gKiBgYGBqc1xuICogdGYucmFuZG9tU3RhbmRhcmROb3JtYWwoWzIsIDJdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNoYXBlIEFuIGFycmF5IG9mIGludGVnZXJzIGRlZmluaW5nIHRoZSBvdXRwdXQgdGVuc29yIHNoYXBlLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dC5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tU3RhbmRhcmROb3JtYWxfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIGR0eXBlPzogJ2Zsb2F0MzInfCdpbnQzMicsIHNlZWQ/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBpZiAoZHR5cGUgIT0gbnVsbCAmJiAoZHR5cGUgYXMgRGF0YVR5cGUpID09PSAnYm9vbCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAke2R0eXBlfWApO1xuICB9XG4gIHJldHVybiByYW5kb21Ob3JtYWwoc2hhcGUsIDAsIDEsIGR0eXBlLCBzZWVkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmRvbVN0YW5kYXJkTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHtyYW5kb21TdGFuZGFyZE5vcm1hbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { UniformRandom } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a uniform distribution.\n *\n * The generated values follow a uniform distribution in the range [minval,\n * maxval). The lower bound minval is included in the range, while the upper\n * bound maxval is excluded.\n *\n * ```js\n * tf.randomUniform([2, 2]).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param minval The lower bound on the range of random values to generate.\n * Defaults to 0.\n * @param maxval The upper bound on the range of random values to generate.\n * Defaults to 1.\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n * @param seed An optional int. Defaults to 0. If seed is set to be non-zero,\n * the random number generator is seeded by the given seed. Otherwise, it is\n * seeded by a random seed.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomUniform_(shape, minval = 0, maxval = 1, dtype = 'float32', seed) {\n assertNonNegativeIntegerDimensions(shape);\n const res = buffer(shape, dtype);\n const random = new UniformRandom(minval, maxval, null, seed);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = random.nextValue();\n }\n return res.toTensor();\n}\nexport const randomUniform = /* @__PURE__ */ op({ randomUniform_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3VuaWZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYW5kb21fdW5pZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFMUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsS0FBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBa0IsU0FBUyxFQUN2RSxJQUFvQjtJQUN0QixrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNwQztJQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtEYXRhVHlwZSwgUmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9uc30gZnJvbSAnLi4vdXRpbF9iYXNlJztcblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7VW5pZm9ybVJhbmRvbX0gZnJvbSAnLi9yYW5kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgdGYuVGVuc29yYCB3aXRoIHZhbHVlcyBzYW1wbGVkIGZyb20gYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHZhbHVlcyBmb2xsb3cgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBpbiB0aGUgcmFuZ2UgW21pbnZhbCxcbiAqIG1heHZhbCkuIFRoZSBsb3dlciBib3VuZCBtaW52YWwgaXMgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLCB3aGlsZSB0aGUgdXBwZXJcbiAqIGJvdW5kIG1heHZhbCBpcyBleGNsdWRlZC5cbiAqXG4gKiBgYGBqc1xuICogdGYucmFuZG9tVW5pZm9ybShbMiwgMl0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2hhcGUgQW4gYXJyYXkgb2YgaW50ZWdlcnMgZGVmaW5pbmcgdGhlIG91dHB1dCB0ZW5zb3Igc2hhcGUuXG4gKiBAcGFyYW0gbWludmFsIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIHZhbHVlcyB0byBnZW5lcmF0ZS5cbiAqICAgRGVmYXVsdHMgdG8gMC5cbiAqIEBwYXJhbSBtYXh2YWwgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZSBvZiByYW5kb20gdmFsdWVzIHRvIGdlbmVyYXRlLlxuICogICBEZWZhdWx0cyB0byAxLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqIEBwYXJhbSBzZWVkIEFuIG9wdGlvbmFsIGludC4gRGVmYXVsdHMgdG8gMC4gSWYgc2VlZCBpcyBzZXQgdG8gYmUgbm9uLXplcm8sXG4gKiAgIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpcyBzZWVkZWQgYnkgdGhlIGdpdmVuIHNlZWQuIE90aGVyd2lzZSwgaXQgaXNcbiAqICAgc2VlZGVkIGJ5IGEgcmFuZG9tIHNlZWQuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnUmFuZG9tJ31cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVW5pZm9ybV88UiBleHRlbmRzIFJhbms+KFxuICAgIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWludmFsID0gMCwgbWF4dmFsID0gMSwgZHR5cGU6IERhdGFUeXBlID0gJ2Zsb2F0MzInLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0IHJlcyA9IGJ1ZmZlcihzaGFwZSwgZHR5cGUpO1xuICBjb25zdCByYW5kb20gPSBuZXcgVW5pZm9ybVJhbmRvbShtaW52YWwsIG1heHZhbCwgbnVsbCwgc2VlZCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kb20ubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgcmFuZG9tVW5pZm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmFuZG9tVW5pZm9ybV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from './operation';\nimport { randomUniform } from './random_uniform';\n/**\n * Creates a `tf.Tensor` with integers sampled from a uniform distribution.\n *\n * The generated values are uniform integers in the range [minval, maxval). The\n * lower bound minval is included in the range, while the upper bound maxval is\n * excluded.\n *\n * ```js\n * tf.randomUniformInt([2, 2], 0, 10).print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param minval Inclusive lower bound on the generated integers.\n * @param maxval Exclusive upper bound on the generated integers.\n * @param seed An optional int. Defaults to 0. If seed is set to be non-zero,\n * the random number generator is seeded by the given seed. Otherwise, it is\n * seeded by a random seed.\n *\n * @doc {heading: 'Tensors', subheading: 'Random'}\n */\nfunction randomUniformInt_(shape, minval, maxval, seed) {\n // TODO(mattsoulanille): Handle optional seed2 input.\n return randomUniform(shape, minval, maxval, 'int32', seed);\n}\nexport const randomUniformInt = /* @__PURE__ */ op({ randomUniformInt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tX3VuaWZvcm1faW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvcmFuZG9tX3VuaWZvcm1faW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsS0FBa0IsRUFBRSxNQUFjLEVBQUUsTUFBYyxFQUNoRCxJQUFvQjtJQUN0QixxREFBcUQ7SUFDckQsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7UmFuaywgU2hhcGVNYXB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmFuZG9tVW5pZm9ybX0gZnJvbSAnLi9yYW5kb21fdW5pZm9ybSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggaW50ZWdlcnMgc2FtcGxlZCBmcm9tIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gKlxuICogVGhlIGdlbmVyYXRlZCB2YWx1ZXMgYXJlIHVuaWZvcm0gaW50ZWdlcnMgaW4gdGhlIHJhbmdlIFttaW52YWwsIG1heHZhbCkuIFRoZVxuICogbG93ZXIgYm91bmQgbWludmFsIGlzIGluY2x1ZGVkIGluIHRoZSByYW5nZSwgd2hpbGUgdGhlIHVwcGVyIGJvdW5kIG1heHZhbCBpc1xuICogZXhjbHVkZWQuXG4gKlxuICogYGBganNcbiAqIHRmLnJhbmRvbVVuaWZvcm1JbnQoWzIsIDJdLCAwLCAxMCkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzaGFwZSBBbiBhcnJheSBvZiBpbnRlZ2VycyBkZWZpbmluZyB0aGUgb3V0cHV0IHRlbnNvciBzaGFwZS5cbiAqIEBwYXJhbSBtaW52YWwgSW5jbHVzaXZlIGxvd2VyIGJvdW5kIG9uIHRoZSBnZW5lcmF0ZWQgaW50ZWdlcnMuXG4gKiBAcGFyYW0gbWF4dmFsIEV4Y2x1c2l2ZSB1cHBlciBib3VuZCBvbiB0aGUgZ2VuZXJhdGVkIGludGVnZXJzLlxuICogQHBhcmFtIHNlZWQgQW4gb3B0aW9uYWwgaW50LiBEZWZhdWx0cyB0byAwLiBJZiBzZWVkIGlzIHNldCB0byBiZSBub24temVybyxcbiAqICAgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzIHNlZWRlZCBieSB0aGUgZ2l2ZW4gc2VlZC4gT3RoZXJ3aXNlLCBpdCBpc1xuICogICBzZWVkZWQgYnkgYSByYW5kb20gc2VlZC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdSYW5kb20nfVxuICovXG5mdW5jdGlvbiByYW5kb21Vbmlmb3JtSW50XzxSIGV4dGVuZHMgUmFuaz4oXG4gIHNoYXBlOiBTaGFwZU1hcFtSXSwgbWludmFsOiBudW1iZXIsIG1heHZhbDogbnVtYmVyLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yPFI+IHtcbiAgLy8gVE9ETyhtYXR0c291bGFuaWxsZSk6IEhhbmRsZSBvcHRpb25hbCBzZWVkMiBpbnB1dC5cbiAgcmV0dXJuIHJhbmRvbVVuaWZvcm0oc2hhcGUsIG1pbnZhbCwgbWF4dmFsLCAnaW50MzInLCBzZWVkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmRvbVVuaWZvcm1JbnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JhbmRvbVVuaWZvcm1JbnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Range } from '../kernel_names';\n/**\n * Creates a new `tf.Tensor1D` filled with the numbers in the range provided.\n *\n * The tensor is a half-open interval meaning it includes start, but\n * excludes stop. Decrementing ranges and negative step values are also\n * supported.\n *\n *\n * ```js\n * tf.range(0, 9, 2).print();\n * ```\n *\n * @param start An integer start value\n * @param stop An integer stop value\n * @param step An integer increment (will default to 1 or -1)\n * @param dtype The data type of the output tensor. Defaults to 'float32'.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function range(start, stop, step = 1, dtype = 'float32') {\n if (step === 0) {\n throw new Error('Cannot have a step of zero');\n }\n const attrs = { start, stop, step, dtype };\n return ENGINE.runKernel(Range, {} /* inputs */, attrs);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FDakIsS0FBYSxFQUFFLElBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUNyQyxRQUEyQixTQUFTO0lBQ3RDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQUMvQztJQUVELE1BQU0sS0FBSyxHQUFlLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFFckQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxFQUMxQyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JhbmdlLCBSYW5nZUF0dHJzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYHRmLlRlbnNvcjFEYCBmaWxsZWQgd2l0aCB0aGUgbnVtYmVycyBpbiB0aGUgcmFuZ2UgcHJvdmlkZWQuXG4gKlxuICogVGhlIHRlbnNvciBpcyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBtZWFuaW5nIGl0IGluY2x1ZGVzIHN0YXJ0LCBidXRcbiAqIGV4Y2x1ZGVzIHN0b3AuIERlY3JlbWVudGluZyByYW5nZXMgYW5kIG5lZ2F0aXZlIHN0ZXAgdmFsdWVzIGFyZSBhbHNvXG4gKiBzdXBwb3J0ZWQuXG4gKlxuICpcbiAqIGBgYGpzXG4gKiB0Zi5yYW5nZSgwLCA5LCAyKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHN0YXJ0IEFuIGludGVnZXIgc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBzdG9wIEFuIGludGVnZXIgc3RvcCB2YWx1ZVxuICogQHBhcmFtIHN0ZXAgQW4gaW50ZWdlciBpbmNyZW1lbnQgKHdpbGwgZGVmYXVsdCB0byAxIG9yIC0xKVxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIERlZmF1bHRzIHRvICdmbG9hdDMyJy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShcbiAgICBzdGFydDogbnVtYmVyLCBzdG9wOiBudW1iZXIsIHN0ZXAgPSAxLFxuICAgIGR0eXBlOiAnZmxvYXQzMid8J2ludDMyJyA9ICdmbG9hdDMyJyk6IFRlbnNvcjFEIHtcbiAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYXZlIGEgc3RlcCBvZiB6ZXJvJyk7XG4gIH1cblxuICBjb25zdCBhdHRyczogUmFuZ2VBdHRycyA9IHtzdGFydCwgc3RvcCwgc3RlcCwgZHR5cGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFJhbmdlLCB7fSAvKiBpbnB1dHMgKi8sXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Real } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns the real part of a complex (or real) tensor.\n *\n * Given a tensor input, this operation returns a tensor of type float that is\n * the real part of each element in input considered as a complex number.\n *\n * If the input is real, it simply makes a clone.\n *\n * ```js\n * const x = tf.complex([-2.25, 3.25], [4.75, 5.75]);\n * tf.real(x).print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction real_(input) {\n const $input = convertToTensor(input, 'input', 'real');\n const inputs = { input: $input };\n return ENGINE.runKernel(Real, inputs);\n}\nexport const real = /* @__PURE__ */ op({ real_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsS0FBbUI7SUFDbEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQWUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlYWwsIFJlYWxJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlYWwgcGFydCBvZiBhIGNvbXBsZXggKG9yIHJlYWwpIHRlbnNvci5cbiAqXG4gKiBHaXZlbiBhIHRlbnNvciBpbnB1dCwgdGhpcyBvcGVyYXRpb24gcmV0dXJucyBhIHRlbnNvciBvZiB0eXBlIGZsb2F0IHRoYXQgaXNcbiAqIHRoZSByZWFsIHBhcnQgb2YgZWFjaCBlbGVtZW50IGluIGlucHV0IGNvbnNpZGVyZWQgYXMgYSBjb21wbGV4IG51bWJlci5cbiAqXG4gKiBJZiB0aGUgaW5wdXQgaXMgcmVhbCwgaXQgc2ltcGx5IG1ha2VzIGEgY2xvbmUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KFstMi4yNSwgMy4yNV0sIFs0Ljc1LCA1Ljc1XSk7XG4gKiB0Zi5yZWFsKHgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHJlYWxfPFQgZXh0ZW5kcyBUZW5zb3I+KGlucHV0OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJGlucHV0ID0gY29udmVydFRvVGVuc29yKGlucHV0LCAnaW5wdXQnLCAncmVhbCcpO1xuXG4gIGNvbnN0IGlucHV0czogUmVhbElucHV0cyA9IHtpbnB1dDogJGlucHV0fTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUmVhbCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcmVhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reciprocal } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes reciprocal of x element-wise: `1 / x`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, 2]);\n *\n * x.reciprocal().print(); // or tf.reciprocal(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction reciprocal_(x) {\n const $x = convertToTensor(x, 'x', 'reciprocal');\n const inputs = { x: $x };\n return ENGINE.runKernel(Reciprocal, inputs);\n}\nexport const reciprocal = /* @__PURE__ */ op({ reciprocal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXByb2NhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlY2lwcm9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBRzdELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxXQUFXLENBQW1CLENBQWU7SUFDcEQsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFakQsTUFBTSxNQUFNLEdBQXFCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSZWNpcHJvY2FsLCBSZWNpcHJvY2FsSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHJlY2lwcm9jYWwgb2YgeCBlbGVtZW50LXdpc2U6IGAxIC8geGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAxLCAyXSk7XG4gKlxuICogeC5yZWNpcHJvY2FsKCkucHJpbnQoKTsgIC8vIG9yIHRmLnJlY2lwcm9jYWwoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcmVjaXByb2NhbF88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JlY2lwcm9jYWwnKTtcblxuICBjb25zdCBpbnB1dHM6IFJlY2lwcm9jYWxJbnB1dHMgPSB7eDogJHh9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWNpcHJvY2FsLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5leHBvcnQgY29uc3QgcmVjaXByb2NhbCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVjaXByb2NhbF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Relu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes rectified linear element-wise: `max(x, 0)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.relu().print(); // or tf.relu(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n * `int32`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction relu_(x) {\n const $x = convertToTensor(x, 'x', 'relu');\n const inputs = { x: $x };\n return ENGINE.runKernel(Relu, inputs);\n}\nexport const relu = /* @__PURE__ */ op({ relu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsU0FBUyxLQUFLLENBQW1CLENBQWU7SUFDOUMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlbHUsIFJlbHVJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgcmVjdGlmaWVkIGxpbmVhciBlbGVtZW50LXdpc2U6IGBtYXgoeCwgMClgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgNF0pO1xuICpcbiAqIHgucmVsdSgpLnByaW50KCk7ICAvLyBvciB0Zi5yZWx1KHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuIElmIHRoZSBkdHlwZSBpcyBgYm9vbGAsIHRoZSBvdXRwdXQgZHR5cGUgd2lsbCBiZVxuICogICAgIGBpbnQzMmAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHJlbHVfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZWx1Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZWx1SW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChSZWx1LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWx1ID0gLyogQF9fUFVSRV9fICovIG9wKHtyZWx1X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Relu6 } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes rectified linear 6 element-wise: `min(max(x, 0), 6)`.\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 8]);\n *\n * x.relu6().print(); // or tf.relu6(x)\n * ```\n * @param x The input tensor. If the dtype is `bool`, the output dtype will be\n * `int32`.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction relu6_(x) {\n const $x = convertToTensor(x, 'x', 'relu6');\n const inputs = { x: $x };\n return ENGINE.runKernel(Relu6, inputs);\n}\nexport const relu6 = /* @__PURE__ */ op({ relu6_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsdTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yZWx1Ni50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JlbHU2LCBSZWx1NklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyByZWN0aWZpZWQgbGluZWFyIDYgZWxlbWVudC13aXNlOiBgbWluKG1heCh4LCAwKSwgNilgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy0xLCAyLCAtMywgOF0pO1xuICpcbiAqIHgucmVsdTYoKS5wcmludCgpOyAgLy8gb3IgdGYucmVsdTYoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci4gSWYgdGhlIGR0eXBlIGlzIGBib29sYCwgdGhlIG91dHB1dCBkdHlwZSB3aWxsIGJlXG4gKiAgICAgYGludDMyYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcmVsdTZfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZWx1NicpO1xuXG4gIGNvbnN0IGlucHV0czogUmVsdTZJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFJlbHU2LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWx1NiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmVsdTZffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Reverse } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Reverses a `tf.Tensor` along a specified axis.\n *\n * Also available are stricter rank-specific methods that assert that `x` is\n * of the given rank:\n * - `tf.reverse1d`\n * - `tf.reverse2d`\n * - `tf.reverse3d`\n * - `tf.reverse4d`\n *\n * Except `tf.reverse1d` (which does not have axis param), all methods have\n * same signature as this method.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n *\n * x.reverse().print();\n * ```\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * const axis = 1;\n * x.reverse(axis).print();\n * ```\n * @param x The input tensor to be reversed.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction reverse_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n const inputs = { x: $x };\n const attrs = { dims: axis };\n return ENGINE.runKernel(Reverse, inputs, attrs);\n}\nexport const reverse = /* @__PURE__ */ op({ reverse_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFlLEVBQUUsSUFBc0I7SUFDekMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3RDLE1BQU0sS0FBSyxHQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JldmVyc2UsIFJldmVyc2VBdHRycywgUmV2ZXJzZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJldmVyc2VzIGEgYHRmLlRlbnNvcmAgYWxvbmcgYSBzcGVjaWZpZWQgYXhpcy5cbiAqXG4gKiBBbHNvIGF2YWlsYWJsZSBhcmUgc3RyaWN0ZXIgcmFuay1zcGVjaWZpYyBtZXRob2RzIHRoYXQgYXNzZXJ0IHRoYXQgYHhgIGlzXG4gKiBvZiB0aGUgZ2l2ZW4gcmFuazpcbiAqICAgLSBgdGYucmV2ZXJzZTFkYFxuICogICAtIGB0Zi5yZXZlcnNlMmRgXG4gKiAgIC0gYHRmLnJldmVyc2UzZGBcbiAqICAgLSBgdGYucmV2ZXJzZTRkYFxuICpcbiAqIEV4Y2VwdCBgdGYucmV2ZXJzZTFkYCAod2hpY2ggZG9lcyBub3QgaGF2ZSBheGlzIHBhcmFtKSwgYWxsIG1ldGhvZHMgaGF2ZVxuICogc2FtZSBzaWduYXR1cmUgYXMgdGhpcyBtZXRob2QuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMSwgMiwgMywgNF0pO1xuICpcbiAqIHgucmV2ZXJzZSgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFsxLCAyLCAzLCA0XSwgWzIsIDJdKTtcbiAqXG4gKiBjb25zdCBheGlzID0gMTtcbiAqIHgucmV2ZXJzZShheGlzKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIHJldmVyc2VkLlxuICogQHBhcmFtIGF4aXMgVGhlIHNldCBvZiBkaW1lbnNpb25zIHRvIHJldmVyc2UuIE11c3QgYmUgaW4gdGhlXG4gKiAgICAgcmFuZ2UgWy1yYW5rKHgpLCByYW5rKHgpKS4gRGVmYXVsdHMgdG8gYWxsIGF4ZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHJldmVyc2VfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgYXhpcz86IG51bWJlcnxudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXZlcnNlJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXZlcnNlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFJldmVyc2VBdHRycyA9IHtkaW1zOiBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFJldmVyc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmV2ZXJzZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor1D`.\n *\n * @param x The input tensor.\n */\nfunction reverse1d_(x) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${$x.rank}.`);\n return reverse($x, 0);\n}\nexport const reverse1d = /* @__PURE__ */ op({ reverse1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8xZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfMWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7OztHQUlHO0FBQ0gsU0FBUyxVQUFVLENBQUMsQ0FBc0I7SUFDeEMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDYixHQUFHLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmV2ZXJzZX0gZnJvbSAnLi9yZXZlcnNlJztcblxuLyoqXG4gKiBSZXZlcnNlcyBhIGB0Zi5UZW5zb3IxRGAuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqL1xuZnVuY3Rpb24gcmV2ZXJzZTFkXyh4OiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yMUQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyZXZlcnNlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMSxcbiAgICAgICgpID0+IGBFcnJvciBpbiByZXZlcnNlMUQ6IHggbXVzdCBiZSByYW5rIDEgYnV0IGdvdCByYW5rICR7JHgucmFua30uYCk7XG4gIHJldHVybiByZXZlcnNlKCR4LCAwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJldmVyc2UxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmV2ZXJzZTFkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor2D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse2d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse2d = /* @__PURE__ */ op({ reverse2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjJEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yMkRgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlMmRfKHg6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3IyRCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2UyRDogeCBtdXN0IGJlIHJhbmsgMiBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTJkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor3D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse3d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse3d = /* @__PURE__ */ op({ reverse3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV8zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjNEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yM0RgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlM2RfKHg6IFRlbnNvcjNEfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3IzRCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSAzLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2UzRDogeCBtdXN0IGJlIHJhbmsgMyBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlM2RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { reverse } from './reverse';\n/**\n * Reverses a `tf.Tensor4D` along a specified axis.\n *\n * @param x The input tensor.\n * @param axis The set of dimensions to reverse. Must be in the\n * range [-rank(x), rank(x)). Defaults to all axes.\n */\nfunction reverse4d_(x, axis) {\n const $x = convertToTensor(x, 'x', 'reverse');\n util.assert($x.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${$x.rank}.`);\n return reverse($x, axis);\n}\nexport const reverse4d = /* @__PURE__ */ op({ reverse4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZV80ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3JldmVyc2VfNGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQXNCO0lBQ2hFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQUMscURBQXFELEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4vcmV2ZXJzZSc7XG5cbi8qKlxuICogUmV2ZXJzZXMgYSBgdGYuVGVuc29yNERgIGFsb25nIGEgc3BlY2lmaWVkIGF4aXMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqIEBwYXJhbSBheGlzIFRoZSBzZXQgb2YgZGltZW5zaW9ucyB0byByZXZlcnNlLiBNdXN0IGJlIGluIHRoZVxuICogICAgIHJhbmdlIFstcmFuayh4KSwgcmFuayh4KSkuIERlZmF1bHRzIHRvIGFsbCBheGVzLlxuICovXG5mdW5jdGlvbiByZXZlcnNlNGRfKHg6IFRlbnNvcjREfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJ8bnVtYmVyW10pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3JldmVyc2UnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJldmVyc2U0RDogeCBtdXN0IGJlIHJhbmsgNCBidXQgZ290IHJhbmsgJHskeC5yYW5rfS5gKTtcbiAgcmV0dXJuIHJldmVyc2UoJHgsIGF4aXMpO1xufVxuXG5leHBvcnQgY29uc3QgcmV2ZXJzZTRkID0gLyogQF9fUFVSRV9fICovIG9wKHtyZXZlcnNlNGRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Round } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes round of input `tf.Tensor` element-wise: `round(x)`.\n * It implements banker's rounding.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3]);\n *\n * x.round().print(); // or tf.round(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction round_(x) {\n const $x = convertToTensor(x, 'x', 'round');\n const inputs = { x: $x };\n return ENGINE.runKernel(Round, inputs);\n}\nexport const round = /* @__PURE__ */ op({ round_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBZ0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFFcEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1JvdW5kLCBSb3VuZElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyByb3VuZCBvZiBpbnB1dCBgdGYuVGVuc29yYCBlbGVtZW50LXdpc2U6IGByb3VuZCh4KWAuXG4gKiBJdCBpbXBsZW1lbnRzIGJhbmtlcidzIHJvdW5kaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjNdKTtcbiAqXG4gKiB4LnJvdW5kKCkucHJpbnQoKTsgIC8vIG9yIHRmLnJvdW5kKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHJvdW5kXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAncm91bmQnKTtcbiAgY29uc3QgaW5wdXRzOiBSb3VuZElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUm91bmQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdW5kID0gLyogQF9fUFVSRV9fICovIG9wKHtyb3VuZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Rsqrt } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes reciprocal of square root of the input `tf.Tensor` element-wise:\n * `y = 1 / sqrt(x)`\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 4, -1]);\n *\n * x.rsqrt().print(); // or tf.rsqrt(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction rsqrt_(x) {\n const $x = convertToTensor(x, 'x', 'rsqrt', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Rsqrt, inputs);\n}\nexport const rsqrt = /* @__PURE__ */ op({ rsqrt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yc3FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxLQUFLLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLE1BQU0sQ0FBbUIsQ0FBZTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkQsTUFBTSxNQUFNLEdBQWdCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRXBDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtSc3FydCwgUnNxcnRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgcmVjaXByb2NhbCBvZiBzcXVhcmUgcm9vdCBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOlxuICogYHkgPSAxIC8gc3FydCh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFsxLCAyLCA0LCAtMV0pO1xuICpcbiAqIHgucnNxcnQoKS5wcmludCgpOyAgLy8gb3IgdGYucnNxcnQoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gcnNxcnRfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdyc3FydCcsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBSc3FydElucHV0cyA9IHt4OiAkeH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoUnNxcnQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCByc3FydCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cnNxcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Selu } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes scaled exponential linear element-wise.\n *\n * `x < 0 ? scale * alpha * (exp(x) - 1) : scale * x`\n *\n * ```js\n * const x = tf.tensor1d([-1, 2, -3, 4]);\n *\n * x.selu().print(); // or tf.selu(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction selu_(x) {\n const $x = convertToTensor(x, 'x', 'selu');\n const inputs = { x: $x };\n return ENGINE.runKernel(Selu, inputs);\n}\nexport const selu = /* @__PURE__ */ op({ selu_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRW5DLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTZWx1LCBTZWx1SW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHNjYWxlZCBleHBvbmVudGlhbCBsaW5lYXIgZWxlbWVudC13aXNlLlxuICpcbiAqIGB4IDwgMCA/IHNjYWxlICogYWxwaGEgKiAoZXhwKHgpIC0gMSkgOiBzY2FsZSAqIHhgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbLTEsIDIsIC0zLCA0XSk7XG4gKlxuICogeC5zZWx1KCkucHJpbnQoKTsgIC8vIG9yIHRmLnNlbHUoeClcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdCYXNpYyBtYXRoJ31cbiAqL1xuZnVuY3Rpb24gc2VsdV88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NlbHUnKTtcblxuICBjb25zdCBpbnB1dHM6IFNlbHVJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNlbHUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlbHUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NlbHVffSk7XG4iXX0=","import { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { conv2d } from './conv2d';\nimport { depthwiseConv2d } from './depthwise_conv2d';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * 2-D convolution with separable filters.\n *\n * Performs a depthwise convolution that acts separately on channels followed\n * by a pointwise convolution that mixes channels. Note that this is\n * separability between dimensions [1, 2] and 3, not spatial separability\n * between dimensions 1 and 2.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/separable_conv2d)\n * for more details.\n *\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param depthwiseFilter The depthwise filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`. This is\n * the filter used in the first step.\n * @param pointwiseFilter The pointwise filter tensor, rank 4, of shape\n * `[1, 1, inChannels * channelMultiplier, outChannels]`. This is\n * the filter used in the second step.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n *\n * @doc {heading: 'Operations', subheading: 'Convolution'}\n */\nfunction separableConv2d_(x, depthwiseFilter, pointwiseFilter, strides, pad, dilation = [1, 1], dataFormat = 'NHWC') {\n const $x = convertToTensor(x, 'x', 'separableConv2d');\n const $depthwiseFilter = convertToTensor(depthwiseFilter, 'depthwiseFilter', 'separableConv2d');\n const $pointwiseFilter = convertToTensor(pointwiseFilter, 'pointwiseFilter', 'separableConv2d');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n if (dataFormat === 'NCHW') {\n throw new Error('separableConv2d currently does not support dataFormat NCHW; only ' +\n 'NHWC is supported');\n }\n util.assert(x4D.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($depthwiseFilter.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but ` +\n `got rank ${$depthwiseFilter.rank}.`);\n util.assert($pointwiseFilter.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but ` +\n `got rank ${$depthwiseFilter.rank}.`);\n util.assert($pointwiseFilter.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter ` +\n ` must be 1, but got ${$pointwiseFilter.shape[0]}.`);\n util.assert($pointwiseFilter.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise ` +\n `filter must be 1, but got ${$pointwiseFilter.shape[1]}.`);\n const inChannels = $depthwiseFilter.shape[2];\n const channelMultiplier = $depthwiseFilter.shape[3];\n util.assert($pointwiseFilter.shape[2] === inChannels * channelMultiplier, () => `Error in separableConv2d: the third dimension of pointwise filter ` +\n `must be ${inChannels * channelMultiplier}, ` +\n `but got ${$pointwiseFilter.shape[2]}.`);\n const depthwise = depthwiseConv2d(x4D, $depthwiseFilter, strides, pad, dataFormat, dilation);\n const pointwiseStride = 1;\n const res = conv2d(depthwise, $pointwiseFilter, pointwiseStride, 'valid', dataFormat);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const separableConv2d = /* @__PURE__ */ op({ separableConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwYXJhYmxlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NlcGFyYWJsZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsQ0FBZSxFQUFFLGVBQW9DLEVBQ3JELGVBQW9DLEVBQUUsT0FBZ0MsRUFDdEUsR0FBbUIsRUFBRSxXQUFvQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDL0QsYUFBNEIsTUFBTTtJQUNwQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQ2xCLGVBQWUsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxNQUFNLGdCQUFnQixHQUNsQixlQUFlLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFM0UsSUFBSSxHQUFHLEdBQUcsRUFBYyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2pC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IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7Y29udjJkfSBmcm9tICcuL2NvbnYyZCc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZH0gZnJvbSAnLi9kZXB0aHdpc2VfY29udjJkJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuLyoqXG4gKiAyLUQgY29udm9sdXRpb24gd2l0aCBzZXBhcmFibGUgZmlsdGVycy5cbiAqXG4gKiBQZXJmb3JtcyBhIGRlcHRod2lzZSBjb252b2x1dGlvbiB0aGF0IGFjdHMgc2VwYXJhdGVseSBvbiBjaGFubmVscyBmb2xsb3dlZFxuICogYnkgYSBwb2ludHdpc2UgY29udm9sdXRpb24gdGhhdCBtaXhlcyBjaGFubmVscy4gTm90ZSB0aGF0IHRoaXMgaXNcbiAqIHNlcGFyYWJpbGl0eSBiZXR3ZWVuIGRpbWVuc2lvbnMgWzEsIDJdIGFuZCAzLCBub3Qgc3BhdGlhbCBzZXBhcmFiaWxpdHlcbiAqIGJldHdlZW4gZGltZW5zaW9ucyAxIGFuZCAyLlxuICpcbiAqIFNlZVxuICogW2h0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9zZXBhcmFibGVfY29udjJkXShcbiAqICAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vc2VwYXJhYmxlX2NvbnYyZClcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBkZXB0aHdpc2VGaWx0ZXIgVGhlIGRlcHRod2lzZSBmaWx0ZXIgdGVuc29yLCByYW5rIDQsIG9mIHNoYXBlXG4gKiAgICAgYFtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBpbkNoYW5uZWxzLCBjaGFubmVsTXVsdGlwbGllcl1gLiBUaGlzIGlzXG4gKiAgICAgdGhlIGZpbHRlciB1c2VkIGluIHRoZSBmaXJzdCBzdGVwLlxuICogQHBhcmFtIHBvaW50d2lzZUZpbHRlciBUaGUgcG9pbnR3aXNlIGZpbHRlciB0ZW5zb3IsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgWzEsIDEsIGluQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllciwgb3V0Q2hhbm5lbHNdYC4gVGhpcyBpc1xuICogICAgIHRoZSBmaWx0ZXIgdXNlZCBpbiB0aGUgc2Vjb25kIHN0ZXAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC4gSWYgc3RyaWRlcyBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PVxuICogc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYHJhdGVgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5IV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0NvbnZvbHV0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc2VwYXJhYmxlQ29udjJkXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgZGVwdGh3aXNlRmlsdGVyOiBUZW5zb3I0RHxUZW5zb3JMaWtlLFxuICAgIHBvaW50d2lzZUZpbHRlcjogVGVuc29yNER8VGVuc29yTGlrZSwgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJywgZGlsYXRpb246IFtudW1iZXIsIG51bWJlcl18bnVtYmVyID0gWzEsIDFdLFxuICAgIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVycgPSAnTkhXQycpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2VwYXJhYmxlQ29udjJkJyk7XG4gIGNvbnN0ICRkZXB0aHdpc2VGaWx0ZXIgPVxuICAgICAgY29udmVydFRvVGVuc29yKGRlcHRod2lzZUZpbHRlciwgJ2RlcHRod2lzZUZpbHRlcicsICdzZXBhcmFibGVDb252MmQnKTtcbiAgY29uc3QgJHBvaW50d2lzZUZpbHRlciA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IocG9pbnR3aXNlRmlsdGVyLCAncG9pbnR3aXNlRmlsdGVyJywgJ3NlcGFyYWJsZUNvbnYyZCcpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuXG4gIGlmIChkYXRhRm9ybWF0ID09PSAnTkNIVycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzZXBhcmFibGVDb252MmQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgZGF0YUZvcm1hdCBOQ0hXOyBvbmx5ICcgK1xuICAgICAgICAnTkhXQyBpcyBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke3g0RC5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkZGVwdGh3aXNlRmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBkZXB0aHdpc2UgZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgYCArXG4gICAgICAgICAgYGdvdCByYW5rICR7JGRlcHRod2lzZUZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiBwb2ludHdpc2UgZmlsdGVyIG11c3QgYmUgcmFuayA0LCBidXQgYCArXG4gICAgICAgICAgYGdvdCByYW5rICR7JGRlcHRod2lzZUZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzBdID09PSAxLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgRXJyb3IgaW4gc2VwYXJhYmxlQ29udjJkOiB0aGUgZmlyc3QgZGltZW5zaW9uIG9mIHBvaW50d2lzZSBmaWx0ZXIgYCArXG4gICAgICAgICAgYCBtdXN0IGJlIDEsIGJ1dCBnb3QgJHskcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzBdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzFdID09PSAxLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHNlcGFyYWJsZUNvbnYyZDogdGhlIHNlY29uZCBkaW1lbnNpb24gb2YgcG9pbnR3aXNlIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgbXVzdCBiZSAxLCBidXQgZ290ICR7JHBvaW50d2lzZUZpbHRlci5zaGFwZVsxXX0uYCk7XG5cbiAgY29uc3QgaW5DaGFubmVscyA9ICRkZXB0aHdpc2VGaWx0ZXIuc2hhcGVbMl07XG4gIGNvbnN0IGNoYW5uZWxNdWx0aXBsaWVyID0gJGRlcHRod2lzZUZpbHRlci5zaGFwZVszXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkcG9pbnR3aXNlRmlsdGVyLnNoYXBlWzJdID09PSBpbkNoYW5uZWxzICogY2hhbm5lbE11bHRpcGxpZXIsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBFcnJvciBpbiBzZXBhcmFibGVDb252MmQ6IHRoZSB0aGlyZCBkaW1lbnNpb24gb2YgcG9pbnR3aXNlIGZpbHRlciBgICtcbiAgICAgICAgICBgbXVzdCBiZSAke2luQ2hhbm5lbHMgKiBjaGFubmVsTXVsdGlwbGllcn0sIGAgK1xuICAgICAgICAgIGBidXQgZ290ICR7JHBvaW50d2lzZUZpbHRlci5zaGFwZVsyXX0uYCk7XG5cbiAgY29uc3QgZGVwdGh3aXNlID0gZGVwdGh3aXNlQ29udjJkKFxuICAgICAgeDRELCAkZGVwdGh3aXNlRmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9uKTtcbiAgY29uc3QgcG9pbnR3aXNlU3RyaWRlID0gMTtcbiAgY29uc3QgcmVzID1cbiAgICAgIGNvbnYyZChkZXB0aHdpc2UsICRwb2ludHdpc2VGaWx0ZXIsIHBvaW50d2lzZVN0cmlkZSwgJ3ZhbGlkJywgZGF0YUZvcm1hdCk7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXMgYXMgVDtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcGFyYWJsZUNvbnYyZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2VwYXJhYmxlQ29udjJkX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\n/**\n * Computes the difference between two lists of numbers.\n *\n * Given a Tensor `x` and a Tensor `y`, this operation returns a Tensor `out`\n * that represents all values that are in `x` but not in `y`. The returned\n * Tensor `out` is sorted in the same order that the numbers appear in `x`\n * (duplicates are preserved). This operation also returns a Tensor indices that\n * represents the position of each out element in `x`. In other words:\n *\n * `out[i] = x[idx[i]] for i in [0, 1, ..., out.length - 1]`\n *\n * ```js\n * const x = [1, 2, 3, 4, 5, 6];\n * const y = [1, 3, 5];\n *\n * const [out, indices] = await tf.setdiff1dAsync(x, y);\n * out.print(); // [2, 4, 6]\n * indices.print(); // [1, 3, 5]\n * ```\n *\n * @param x 1-D Tensor. Values to keep.\n * @param y 1-D Tensor. Must have the same type as x. Values to exclude in the\n * output.\n * @returns Promise of Tensor tuple [out, indices].\n * out: Tensor with the same type as x.\n * indices: A Tensor of type int32.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nasync function setdiff1dAsync_(x, y) {\n const $x = convertToTensor(x, 'x', 'setdiff1d');\n const $y = convertToTensor(y, 'y', 'setdiff1d');\n util.assert($x.dtype === $y.dtype, () => `x and y should have the same dtype, but got x (${$x.dtype}) and y (${$y.dtype}).`);\n util.assert($x.rank === 1, () => `x should be 1D tensor, but got x (${$x.shape}).`);\n util.assert($y.rank === 1, () => `y should be 1D tensor, but got y (${$y.shape}).`);\n const xVals = await $x.data();\n const yVals = await $y.data();\n const ySet = new Set(yVals);\n let outputSize = 0;\n for (let i = 0; i < xVals.length; i++) {\n if (!ySet.has(xVals[i])) {\n outputSize++;\n }\n }\n const buffer = new TensorBuffer([outputSize], $x.dtype);\n const indices = new TensorBuffer([outputSize], 'int32');\n for (let i = 0, p = 0; i < xVals.length; i++) {\n if (!ySet.has(xVals[i])) {\n buffer.values[p] = xVals[i];\n indices.values[p] = i;\n p++;\n }\n }\n return [buffer.toTensor(), indices.toTensor()];\n}\nexport const setdiff1dAsync = setdiff1dAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0ZGlmZjFkX2FzeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2V0ZGlmZjFkX2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBUyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsS0FBSyxVQUFVLGVBQWUsQ0FDMUIsQ0FBb0IsRUFBRSxDQUFvQjtJQUM1QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVoRCxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssRUFDckIsR0FBRyxFQUFFLENBQUMsa0RBQ0YsRUFBRSxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUUxQyxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU1RSxJQUFJLENBQUMsTUFBTSxDQUNQLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU1RSxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsVUFBVSxFQUFFLENBQUM7U0FDZDtLQUNGO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsRUFBRSxDQUFDO1NBQ0w7S0FDRjtJQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvciwgVGVuc29yQnVmZmVyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbGlzdHMgb2YgbnVtYmVycy5cbiAqXG4gKiBHaXZlbiBhIFRlbnNvciBgeGAgYW5kIGEgVGVuc29yIGB5YCwgdGhpcyBvcGVyYXRpb24gcmV0dXJucyBhIFRlbnNvciBgb3V0YFxuICogdGhhdCByZXByZXNlbnRzIGFsbCB2YWx1ZXMgdGhhdCBhcmUgaW4gYHhgIGJ1dCBub3QgaW4gYHlgLiBUaGUgcmV0dXJuZWRcbiAqIFRlbnNvciBgb3V0YCBpcyBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGUgbnVtYmVycyBhcHBlYXIgaW4gYHhgXG4gKiAoZHVwbGljYXRlcyBhcmUgcHJlc2VydmVkKS4gVGhpcyBvcGVyYXRpb24gYWxzbyByZXR1cm5zIGEgVGVuc29yIGluZGljZXMgdGhhdFxuICogcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgZWFjaCBvdXQgZWxlbWVudCBpbiBgeGAuIEluIG90aGVyIHdvcmRzOlxuICpcbiAqIGBvdXRbaV0gPSB4W2lkeFtpXV0gZm9yIGkgaW4gWzAsIDEsIC4uLiwgb3V0Lmxlbmd0aCAtIDFdYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gWzEsIDIsIDMsIDQsIDUsIDZdO1xuICogY29uc3QgeSA9IFsxLCAzLCA1XTtcbiAqXG4gKiBjb25zdCBbb3V0LCBpbmRpY2VzXSA9IGF3YWl0IHRmLnNldGRpZmYxZEFzeW5jKHgsIHkpO1xuICogb3V0LnByaW50KCk7IC8vIFsyLCA0LCA2XVxuICogaW5kaWNlcy5wcmludCgpOyAvLyBbMSwgMywgNV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IDEtRCBUZW5zb3IuIFZhbHVlcyB0byBrZWVwLlxuICogQHBhcmFtIHkgMS1EIFRlbnNvci4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgeC4gVmFsdWVzIHRvIGV4Y2x1ZGUgaW4gdGhlXG4gKiAgICAgb3V0cHV0LlxuICogQHJldHVybnMgUHJvbWlzZSBvZiBUZW5zb3IgdHVwbGUgW291dCwgaW5kaWNlc10uXG4gKiAgb3V0OiBUZW5zb3Igd2l0aCB0aGUgc2FtZSB0eXBlIGFzIHguXG4gKiAgaW5kaWNlczogQSBUZW5zb3Igb2YgdHlwZSBpbnQzMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdUcmFuc2Zvcm1hdGlvbnMnfVxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRkaWZmMWRBc3luY18oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIHk6IFRlbnNvcnxUZW5zb3JMaWtlKTogUHJvbWlzZTxbVGVuc29yLCBUZW5zb3JdPiB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NldGRpZmYxZCcpO1xuICBjb25zdCAkeSA9IGNvbnZlcnRUb1RlbnNvcih5LCAneScsICdzZXRkaWZmMWQnKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICR4LmR0eXBlID09PSAkeS5kdHlwZSxcbiAgICAgICgpID0+IGB4IGFuZCB5IHNob3VsZCBoYXZlIHRoZSBzYW1lIGR0eXBlLCBidXQgZ290IHggKCR7XG4gICAgICAgICAgJHguZHR5cGV9KSBhbmQgeSAoJHskeS5kdHlwZX0pLmApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMSwgKCkgPT4gYHggc2hvdWxkIGJlIDFEIHRlbnNvciwgYnV0IGdvdCB4ICgkeyR4LnNoYXBlfSkuYCk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeS5yYW5rID09PSAxLCAoKSA9PiBgeSBzaG91bGQgYmUgMUQgdGVuc29yLCBidXQgZ290IHkgKCR7JHkuc2hhcGV9KS5gKTtcblxuICBjb25zdCB4VmFscyA9IGF3YWl0ICR4LmRhdGEoKTtcbiAgY29uc3QgeVZhbHMgPSBhd2FpdCAkeS5kYXRhKCk7XG4gIGNvbnN0IHlTZXQgPSBuZXcgU2V0KHlWYWxzKTtcblxuICBsZXQgb3V0cHV0U2l6ZSA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIXlTZXQuaGFzKHhWYWxzW2ldKSkge1xuICAgICAgb3V0cHV0U2l6ZSsrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBUZW5zb3JCdWZmZXIoW291dHB1dFNpemVdLCAkeC5kdHlwZSk7XG4gIGNvbnN0IGluZGljZXMgPSBuZXcgVGVuc29yQnVmZmVyKFtvdXRwdXRTaXplXSwgJ2ludDMyJyk7XG4gIGZvciAobGV0IGkgPSAwLCBwID0gMDsgaSA8IHhWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCF5U2V0Lmhhcyh4VmFsc1tpXSkpIHtcbiAgICAgIGJ1ZmZlci52YWx1ZXNbcF0gPSB4VmFsc1tpXTtcbiAgICAgIGluZGljZXMudmFsdWVzW3BdID0gaTtcbiAgICAgIHArKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtidWZmZXIudG9UZW5zb3IoKSwgaW5kaWNlcy50b1RlbnNvcigpXTtcbn1cbmV4cG9ydCBjb25zdCBzZXRkaWZmMWRBc3luYyA9IHNldGRpZmYxZEFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sign } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Returns an element-wise indication of the sign of a number.\n *\n * ```js\n * const x = tf.tensor1d([.6, 1.1, -3.3, NaN, 0]);\n *\n * x.sign().print(); // or tf.sign(x)\n * ```\n * @param x The input Tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sign_(x) {\n const $x = convertToTensor(x, 'x', 'sign');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sign, inputs);\n}\nexport const sign = /* @__PURE__ */ op({ sign_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2lnbiwgU2lnbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGVsZW1lbnQtd2lzZSBpbmRpY2F0aW9uIG9mIHRoZSBzaWduIG9mIGEgbnVtYmVyLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWy42LCAxLjEsIC0zLjMsIE5hTiwgMF0pO1xuICpcbiAqIHguc2lnbigpLnByaW50KCk7ICAvLyBvciB0Zi5zaWduKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCBUZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHNpZ25fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaWduJyk7XG4gIGNvbnN0IGlucHV0czogU2lnbklucHV0cyA9IHt4OiAkeH07XG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpZ24sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaWduID0gLyogQF9fUFVSRV9fICovIG9wKHtzaWduX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sin } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes sin of the input Tensor element-wise: `sin(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.sin().print(); // or tf.sin(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sin_(x) {\n const $x = convertToTensor(x, 'x', 'sin', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sin, inputs);\n}\nexport const sin = /* @__PURE__ */ op({ sin_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTaW4sIFNpbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBzaW4gb2YgdGhlIGlucHV0IFRlbnNvciBlbGVtZW50LXdpc2U6IGBzaW4oeClgXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IxZChbMCwgTWF0aC5QSSAvIDIsIE1hdGguUEkgKiAzIC8gNF0pO1xuICpcbiAqIHguc2luKCkucHJpbnQoKTsgIC8vIG9yIHRmLnNpbih4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBzaW5fPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzaW4nLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGlucHV0czogU2luSW5wdXRzID0ge3g6ICR4fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTaW4sIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaW4gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Npbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Sinh } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes hyperbolic sin of the input `tf.Tensor` element-wise: `sinh(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, 1, -1, .7]);\n *\n * x.sinh().print(); // or tf.sinh(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction sinh_(x) {\n const $x = convertToTensor(x, 'x', 'sinh');\n const inputs = { x: $x };\n return ENGINE.runKernel(Sinh, inputs);\n}\nexport const sinh = /* @__PURE__ */ op({ sinh_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLEtBQUssQ0FBbUIsQ0FBZTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBZSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztJQUVuQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQW1DLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U2luaCwgU2luaElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyBoeXBlcmJvbGljIHNpbiBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAgZWxlbWVudC13aXNlOiBgc2luaCh4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCAxLCAtMSwgLjddKTtcbiAqXG4gKiB4LnNpbmgoKS5wcmludCgpOyAgLy8gb3IgdGYuc2luaCh4KVxuICogYGBgXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0Jhc2ljIG1hdGgnfVxuICovXG5mdW5jdGlvbiBzaW5oXzxUIGV4dGVuZHMgVGVuc29yPih4OiBUfFRlbnNvckxpa2UpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2luaCcpO1xuICBjb25zdCBpbnB1dHM6IFNpbmhJbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFNpbmgsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cbmV4cG9ydCBjb25zdCBzaW5oID0gLyogQF9fUFVSRV9fICovIG9wKHtzaW5oX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 1D slice from 1D array starting at coordinates `begin` and is\n * of length `size`. See `slice` for details.\n */\nfunction slice1d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice1d');\n util.assert($x.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, [begin], [size]);\n}\nexport const slice1d = /* @__PURE__ */ op({ slice1d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UxZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlMWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQWEsRUFBRSxJQUFZO0lBQ3JELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vc2xpY2UnO1xuXG4vKipcbiAqIEV4dHJhY3RzIGEgMUQgc2xpY2UgZnJvbSAxRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZCBpc1xuICogb2YgbGVuZ3RoIGBzaXplYC4gU2VlIGBzbGljZWAgZm9yIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIHNsaWNlMWRfKFxuICAgIHg6IFRlbnNvcjFEfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXIsIHNpemU6IG51bWJlcik6IFRlbnNvcjFEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UxZCcpO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDEsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBzbGljZTFkIGV4cGVjdHMgYSByYW5rLTEgdGVuc29yLCBidXQgZ290IGEgcmFuay0keyR4LnJhbmt9IHRlbnNvcmApO1xuICByZXR1cm4gc2xpY2UoJHgsIFtiZWdpbl0sIFtzaXplXSk7XG59XG5leHBvcnQgY29uc3Qgc2xpY2UxZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2xpY2UxZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 2D slice from a 2D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice2d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice2d');\n util.assert($x.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice2d = /* @__PURE__ */ op({ slice2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlMmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQXVCLEVBQy9DLElBQXNCO0lBQ3hCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDJEIHNsaWNlIGZyb20gYSAyRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTJkXyhcbiAgICB4OiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyXSxcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdKTogVGVuc29yMkQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzbGljZTJkJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gMixcbiAgICAgICgpID0+XG4gICAgICAgICAgYHNsaWNlMmQgZXhwZWN0cyBhIHJhbmstMiB0ZW5zb3IsIGJ1dCBnb3QgYSByYW5rLSR7JHgucmFua30gdGVuc29yYCk7XG4gIHJldHVybiBzbGljZSgkeCwgYmVnaW4sIHNpemUpO1xufVxuZXhwb3J0IGNvbnN0IHNsaWNlMmQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NsaWNlMmRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 3D slice from a 3D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice3d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice3d');\n util.assert($x.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice3d = /* @__PURE__ */ op({ slice3d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UzZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlM2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQStCLEVBQ3ZELElBQThCO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDNEIHNsaWNlIGZyb20gYSAzRCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTNkXyhcbiAgICB4OiBUZW5zb3IzRHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIHNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IFRlbnNvcjNEIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc2xpY2UzZCcpO1xuICB1dGlsLmFzc2VydChcbiAgICAgICR4LnJhbmsgPT09IDMsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBzbGljZTNkIGV4cGVjdHMgYSByYW5rLTMgdGVuc29yLCBidXQgZ290IGEgcmFuay0keyR4LnJhbmt9IHRlbnNvcmApO1xuICByZXR1cm4gc2xpY2UoJHgsIGJlZ2luLCBzaXplKTtcbn1cbmV4cG9ydCBjb25zdCBzbGljZTNkID0gLyogQF9fUFVSRV9fICovIG9wKHtzbGljZTNkX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\nimport { slice } from './slice';\n/**\n * Extracts a 4D slice from a 4D array starting at coordinates `begin` and\n * is of size `size`. See `slice` for details.\n */\nfunction slice4d_(x, begin, size) {\n const $x = convertToTensor(x, 'x', 'slice4d');\n util.assert($x.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${$x.rank} tensor`);\n return slice($x, begin, size);\n}\nexport const slice4d = /* @__PURE__ */ op({ slice4d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2U0ZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlNGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5Qjs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FDYixDQUFzQixFQUFFLEtBQXVDLEVBQy9ELElBQXNDO0lBQ3hDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2IsR0FBRyxFQUFFLENBQ0QsbURBQW1ELEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcblxuLyoqXG4gKiBFeHRyYWN0cyBhIDREIHNsaWNlIGZyb20gYSA0RCBhcnJheSBzdGFydGluZyBhdCBjb29yZGluYXRlcyBgYmVnaW5gIGFuZFxuICogaXMgb2Ygc2l6ZSBgc2l6ZWAuIFNlZSBgc2xpY2VgIGZvciBkZXRhaWxzLlxuICovXG5mdW5jdGlvbiBzbGljZTRkXyhcbiAgICB4OiBUZW5zb3I0RHxUZW5zb3JMaWtlLCBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3NsaWNlNGQnKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkeC5yYW5rID09PSA0LFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgc2xpY2U0ZCBleHBlY3RzIGEgcmFuay00IHRlbnNvciwgYnV0IGdvdCBhIHJhbmstJHskeC5yYW5rfSB0ZW5zb3JgKTtcbiAgcmV0dXJuIHNsaWNlKCR4LCBiZWdpbiwgc2l6ZSk7XG59XG5leHBvcnQgY29uc3Qgc2xpY2U0ZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2xpY2U0ZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Softmax } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the softmax normalized vector given the logits.\n *\n * ```js\n * const a = tf.tensor1d([1, 2, 3]);\n *\n * a.softmax().print(); // or tf.softmax(a)\n * ```\n *\n * ```js\n * const a = tf.tensor2d([2, 4, 6, 1, 2, 3], [2, 3]);\n *\n * a.softmax().print(); // or tf.softmax(a)\n * ```\n *\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction softmax_(logits, dim = -1) {\n const $logits = convertToTensor(logits, 'logits', 'softmax', 'float32');\n if (dim === -1) {\n dim = $logits.rank - 1;\n }\n if (dim !== $logits.rank - 1) {\n throw Error('Softmax along a non-last dimension is not yet supported. ' +\n `Logits was rank ${$logits.rank} and dim was ${dim}`);\n }\n const inputs = { logits: $logits };\n const attrs = { dim };\n return ENGINE.runKernel(Softmax, inputs, attrs);\n}\nexport const softmax = /* @__PURE__ */ op({ softmax_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdG1heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NvZnRtYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUE4QixNQUFNLGlCQUFpQixDQUFDO0FBSXJFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILFNBQVMsUUFBUSxDQUFtQixNQUFvQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXhFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2QsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDNUIsTUFBTSxLQUFLLENBQ1AsMkRBQTJEO1lBQzNELG1CQUFtQixPQUFPLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sTUFBTSxHQUFrQixFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUNoRCxNQUFNLEtBQUssR0FBaUIsRUFBQyxHQUFHLEVBQUMsQ0FBQztJQUVsQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLE9BQU8sRUFBRSxNQUFtQyxFQUM1QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1NvZnRtYXgsIFNvZnRtYXhBdHRycywgU29mdG1heElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzb2Z0bWF4IG5vcm1hbGl6ZWQgdmVjdG9yIGdpdmVuIHRoZSBsb2dpdHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICpcbiAqIGEuc29mdG1heCgpLnByaW50KCk7ICAvLyBvciB0Zi5zb2Z0bWF4KGEpXG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFsyLCA0LCA2LCAxLCAyLCAzXSwgWzIsIDNdKTtcbiAqXG4gKiBhLnNvZnRtYXgoKS5wcmludCgpOyAgLy8gb3IgdGYuc29mdG1heChhKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGxvZ2l0cyBUaGUgbG9naXRzIGFycmF5LlxuICogQHBhcmFtIGRpbSBUaGUgZGltZW5zaW9uIHNvZnRtYXggd291bGQgYmUgcGVyZm9ybWVkIG9uLiBEZWZhdWx0cyB0byBgLTFgXG4gKiAgICAgd2hpY2ggaW5kaWNhdGVzIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdOb3JtYWxpemF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gc29mdG1heF88VCBleHRlbmRzIFRlbnNvcj4obG9naXRzOiBUfFRlbnNvckxpa2UsIGRpbSA9IC0xKTogVCB7XG4gIGNvbnN0ICRsb2dpdHMgPSBjb252ZXJ0VG9UZW5zb3IobG9naXRzLCAnbG9naXRzJywgJ3NvZnRtYXgnLCAnZmxvYXQzMicpO1xuXG4gIGlmIChkaW0gPT09IC0xKSB7XG4gICAgZGltID0gJGxvZ2l0cy5yYW5rIC0gMTtcbiAgfVxuICBpZiAoZGltICE9PSAkbG9naXRzLnJhbmsgLSAxKSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdTb2Z0bWF4IGFsb25nIGEgbm9uLWxhc3QgZGltZW5zaW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAnICtcbiAgICAgICAgYExvZ2l0cyB3YXMgcmFuayAkeyRsb2dpdHMucmFua30gYW5kIGRpbSB3YXMgJHtkaW19YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNvZnRtYXhJbnB1dHMgPSB7bG9naXRzOiAkbG9naXRzfTtcbiAgY29uc3QgYXR0cnM6IFNvZnRtYXhBdHRycyA9IHtkaW19O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU29mdG1heCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBzb2Z0bWF4ID0gLyogQF9fUFVSRV9fICovIG9wKHtzb2Z0bWF4X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { FFT } from '../../kernel_names';\nimport { assert } from '../../util';\nimport { op } from '../operation';\n/**\n * Fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the inner-most\n * dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.fft().print(); // tf.spectral.fft(x).print();\n * ```\n * @param input The complex input to compute an fft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction fft_(input) {\n assert(input.dtype === 'complex64', () => `The dtype for tf.spectral.fft() must be complex64 ` +\n `but got ${input.dtype}.`);\n const inputs = { input };\n return ENGINE.runKernel(FFT, inputs);\n}\nexport const fft = /* @__PURE__ */ op({ fft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BlY3RyYWwvZmZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQVMsSUFBSSxDQUFDLEtBQWE7SUFDekIsTUFBTSxDQUNGLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUMzQixHQUFHLEVBQUUsQ0FBQyxvREFBb0Q7UUFDdEQsV0FBVyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBYyxFQUFDLEtBQUssRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtGRlQsIEZGVElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogRmFzdCBGb3VyaWVyIHRyYW5zZm9ybS5cbiAqXG4gKiBDb21wdXRlcyB0aGUgMS1kaW1lbnNpb25hbCBkaXNjcmV0ZSBGb3VyaWVyIHRyYW5zZm9ybSBvdmVyIHRoZSBpbm5lci1tb3N0XG4gKiBkaW1lbnNpb24gb2YgaW5wdXQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlYWwgPSB0Zi50ZW5zb3IxZChbMSwgMiwgM10pO1xuICogY29uc3QgaW1hZyA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCB4ID0gdGYuY29tcGxleChyZWFsLCBpbWFnKTtcbiAqXG4gKiB4LmZmdCgpLnByaW50KCk7ICAvLyB0Zi5zcGVjdHJhbC5mZnQoeCkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIGlucHV0IFRoZSBjb21wbGV4IGlucHV0IHRvIGNvbXB1dGUgYW4gZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIGZmdF8oaW5wdXQ6IFRlbnNvcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnY29tcGxleDY0JyxcbiAgICAgICgpID0+IGBUaGUgZHR5cGUgZm9yIHRmLnNwZWN0cmFsLmZmdCgpIG11c3QgYmUgY29tcGxleDY0IGAgK1xuICAgICAgICAgIGBidXQgZ290ICR7aW5wdXQuZHR5cGV9LmApO1xuXG4gIGNvbnN0IGlucHV0czogRkZUSW5wdXRzID0ge2lucHV0fTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChGRlQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZmZ0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { IFFT } from '../../kernel_names';\nimport { assert } from '../../util';\nimport { op } from '../operation';\n/**\n * Inverse fast Fourier transform.\n *\n * Computes the inverse 1-dimensional discrete Fourier transform over the\n * inner-most dimension of input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([1, 2, 3]);\n * const x = tf.complex(real, imag);\n *\n * x.ifft().print(); // tf.spectral.ifft(x).print();\n * ```\n * @param input The complex input to compute an ifft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction ifft_(input) {\n assert(input.dtype === 'complex64', () => `The dtype for tf.spectral.ifft() must be complex64 ` +\n `but got ${input.dtype}.`);\n const inputs = { input };\n return ENGINE.runKernel(IFFT, inputs);\n}\nexport const ifft = /* @__PURE__ */ op({ ifft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwZWN0cmFsL2lmZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsSUFBSSxFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFHcEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxLQUFLLENBQUMsS0FBYTtJQUMxQixNQUFNLENBQ0YsS0FBSyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQzNCLEdBQUcsRUFBRSxDQUFDLHFEQUFxRDtRQUN2RCxXQUFXLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLE1BQU0sTUFBTSxHQUFlLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFbkMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFtQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge0lGRlQsIElGRlRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEludmVyc2UgZmFzdCBGb3VyaWVyIHRyYW5zZm9ybS5cbiAqXG4gKiBDb21wdXRlcyB0aGUgaW52ZXJzZSAxLWRpbWVuc2lvbmFsIGRpc2NyZXRlIEZvdXJpZXIgdHJhbnNmb3JtIG92ZXIgdGhlXG4gKiBpbm5lci1tb3N0IGRpbWVuc2lvbiBvZiBpbnB1dC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVhbCA9IHRmLnRlbnNvcjFkKFsxLCAyLCAzXSk7XG4gKiBjb25zdCBpbWFnID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IHggPSB0Zi5jb21wbGV4KHJlYWwsIGltYWcpO1xuICpcbiAqIHguaWZmdCgpLnByaW50KCk7ICAvLyB0Zi5zcGVjdHJhbC5pZmZ0KHgpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dCBUaGUgY29tcGxleCBpbnB1dCB0byBjb21wdXRlIGFuIGlmZnQgb3Zlci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGVjdHJhbCcsIG5hbWVzcGFjZTogJ3NwZWN0cmFsJ31cbiAqL1xuZnVuY3Rpb24gaWZmdF8oaW5wdXQ6IFRlbnNvcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnY29tcGxleDY0JyxcbiAgICAgICgpID0+IGBUaGUgZHR5cGUgZm9yIHRmLnNwZWN0cmFsLmlmZnQoKSBtdXN0IGJlIGNvbXBsZXg2NCBgICtcbiAgICAgICAgICBgYnV0IGdvdCAke2lucHV0LmR0eXBlfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IElGRlRJbnB1dHMgPSB7aW5wdXR9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKElGRlQsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlmZnQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2lmZnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { complex } from '../complex';\nimport { concat } from '../concat';\nimport { imag } from '../imag';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { real } from '../real';\nimport { reshape } from '../reshape';\nimport { reverse } from '../reverse';\nimport { scalar } from '../scalar';\nimport { slice } from '../slice';\nimport { ifft } from './ifft';\n/**\n * Inversed real value input fast Fourier transform.\n *\n * Computes the 1-dimensional inversed discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n * const imag = tf.tensor1d([0, 0, 0]);\n * const x = tf.complex(real, imag);\n *\n * x.irfft().print();\n * ```\n * @param input The real value input to compute an irfft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction irfft_(input) {\n const innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = input.size / innerDimensionSize;\n let ret;\n if (innerDimensionSize <= 2) {\n const complexInput = reshape(input, [batch, innerDimensionSize]);\n ret = ifft(complexInput);\n }\n else {\n // The length of unique components of the DFT of a real-valued signal\n // is 2 * (input_len - 1)\n const outputShape = [batch, 2 * (innerDimensionSize - 1)];\n const realInput = reshape(real(input), [batch, innerDimensionSize]);\n const imagInput = reshape(imag(input), [batch, innerDimensionSize]);\n const realConjugate = reverse(slice(realInput, [0, 1], [batch, innerDimensionSize - 2]), 1);\n const imagConjugate = mul(reverse(slice(imagInput, [0, 1], [batch, innerDimensionSize - 2]), 1), scalar(-1));\n const r = concat([realInput, realConjugate], 1);\n const i = concat([imagInput, imagConjugate], 1);\n const complexInput = reshape(complex(r, i), [outputShape[0], outputShape[1]]);\n ret = ifft(complexInput);\n }\n ret = real(ret);\n // reshape the result if the input is 3D tensor.\n if (input.rank === 3 && input.shape[0] !== 0) {\n const temp = ret;\n const batch = input.shape[0];\n ret = reshape(ret, [batch, ret.shape[0] / batch, ret.shape[1]]);\n temp.dispose();\n }\n return ret;\n}\nexport const irfft = /* @__PURE__ */ op({ irfft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXJmZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGVjdHJhbC9pcmZmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxLQUFhO0lBQzNCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO0lBQzlDLElBQUksR0FBVyxDQUFDO0lBQ2hCLElBQUksa0JBQWtCLElBQUksQ0FBQyxFQUFFO1FBQzNCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDMUI7U0FBTTtRQUNMLHFFQUFxRTtRQUNyRSx5QkFBeUI7UUFDekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUVwRSxNQUFNLGFBQWEsR0FDZixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sYUFBYSxHQUFhLEdBQUcsQ0FDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUNkLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMxQjtJQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEIsZ0RBQWdEO0lBQ2hELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2NvbXBsZXgnO1xuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4uL2NvbmNhdCc7XG5pbXBvcnQge2ltYWd9IGZyb20gJy4uL2ltYWcnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuLi9yZWFsJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5pbXBvcnQge3JldmVyc2V9IGZyb20gJy4uL3JldmVyc2UnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuLi9zbGljZSc7XG5cbmltcG9ydCB7aWZmdH0gZnJvbSAnLi9pZmZ0JztcblxuLyoqXG4gKiBJbnZlcnNlZCByZWFsIHZhbHVlIGlucHV0IGZhc3QgRm91cmllciB0cmFuc2Zvcm0uXG4gKlxuICogQ29tcHV0ZXMgdGhlIDEtZGltZW5zaW9uYWwgaW52ZXJzZWQgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm0gb3ZlciB0aGVcbiAqIGlubmVyLW1vc3QgZGltZW5zaW9uIG9mIHRoZSByZWFsIGlucHV0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZWFsID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqIGNvbnN0IGltYWcgPSB0Zi50ZW5zb3IxZChbMCwgMCwgMF0pO1xuICogY29uc3QgeCA9IHRmLmNvbXBsZXgocmVhbCwgaW1hZyk7XG4gKlxuICogeC5pcmZmdCgpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dCBUaGUgcmVhbCB2YWx1ZSBpbnB1dCB0byBjb21wdXRlIGFuIGlyZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIGlyZmZ0XyhpbnB1dDogVGVuc29yKTogVGVuc29yIHtcbiAgY29uc3QgaW5uZXJEaW1lbnNpb25TaXplID0gaW5wdXQuc2hhcGVbaW5wdXQuc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXQuc2l6ZSAvIGlubmVyRGltZW5zaW9uU2l6ZTtcbiAgbGV0IHJldDogVGVuc29yO1xuICBpZiAoaW5uZXJEaW1lbnNpb25TaXplIDw9IDIpIHtcbiAgICBjb25zdCBjb21wbGV4SW5wdXQgPSByZXNoYXBlKGlucHV0LCBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZV0pO1xuICAgIHJldCA9IGlmZnQoY29tcGxleElucHV0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgbGVuZ3RoIG9mIHVuaXF1ZSBjb21wb25lbnRzIG9mIHRoZSBERlQgb2YgYSByZWFsLXZhbHVlZCBzaWduYWxcbiAgICAvLyBpcyAyICogKGlucHV0X2xlbiAtIDEpXG4gICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBbYmF0Y2gsIDIgKiAoaW5uZXJEaW1lbnNpb25TaXplIC0gMSldO1xuICAgIGNvbnN0IHJlYWxJbnB1dCA9IHJlc2hhcGUocmVhbChpbnB1dCksIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplXSk7XG4gICAgY29uc3QgaW1hZ0lucHV0ID0gcmVzaGFwZShpbWFnKGlucHV0KSwgW2JhdGNoLCBpbm5lckRpbWVuc2lvblNpemVdKTtcblxuICAgIGNvbnN0IHJlYWxDb25qdWdhdGUgPVxuICAgICAgICByZXZlcnNlKHNsaWNlKHJlYWxJbnB1dCwgWzAsIDFdLCBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZSAtIDJdKSwgMSk7XG4gICAgY29uc3QgaW1hZ0Nvbmp1Z2F0ZTogVGVuc29yMkQgPSBtdWwoXG4gICAgICAgIHJldmVyc2Uoc2xpY2UoaW1hZ0lucHV0LCBbMCwgMV0sIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplIC0gMl0pLCAxKSxcbiAgICAgICAgc2NhbGFyKC0xKSk7XG5cbiAgICBjb25zdCByID0gY29uY2F0KFtyZWFsSW5wdXQsIHJlYWxDb25qdWdhdGVdLCAxKTtcbiAgICBjb25zdCBpID0gY29uY2F0KFtpbWFnSW5wdXQsIGltYWdDb25qdWdhdGVdLCAxKTtcbiAgICBjb25zdCBjb21wbGV4SW5wdXQgPVxuICAgICAgICByZXNoYXBlKGNvbXBsZXgociwgaSksIFtvdXRwdXRTaGFwZVswXSwgb3V0cHV0U2hhcGVbMV1dKTtcbiAgICByZXQgPSBpZmZ0KGNvbXBsZXhJbnB1dCk7XG4gIH1cbiAgcmV0ID0gcmVhbChyZXQpO1xuICAvLyByZXNoYXBlIHRoZSByZXN1bHQgaWYgdGhlIGlucHV0IGlzIDNEIHRlbnNvci5cbiAgaWYgKGlucHV0LnJhbmsgPT09IDMgJiYgaW5wdXQuc2hhcGVbMF0gIT09IDApIHtcbiAgICBjb25zdCB0ZW1wID0gcmV0O1xuICAgIGNvbnN0IGJhdGNoID0gaW5wdXQuc2hhcGVbMF07XG4gICAgcmV0ID0gcmVzaGFwZShyZXQsIFtiYXRjaCwgcmV0LnNoYXBlWzBdIC8gYmF0Y2gsIHJldC5zaGFwZVsxXV0pO1xuICAgIHRlbXAuZGlzcG9zZSgpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBjb25zdCBpcmZmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aXJmZnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SplitV } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Splits a `tf.Tensor` into sub tensors.\n *\n * If `numOrSizeSplits` is a number, splits `x` along dimension `axis`\n * into `numOrSizeSplits` smaller tensors.\n * Requires that `numOrSizeSplits` evenly divides `x.shape[axis]`.\n *\n * If `numOrSizeSplits` is a number array, splits `x` into\n * `numOrSizeSplits.length` pieces. The shape of the `i`-th piece has the\n * same size as `x` except along dimension `axis` where the size is\n * `numOrSizeSplits[i]`.\n *\n * ```js\n * const x = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8], [2, 4]);\n * const [a, b] = tf.split(x, 2, 1);\n * a.print();\n * b.print();\n *\n * const [c, d, e] = tf.split(x, [1, 2, 1], 1);\n * c.print();\n * d.print();\n * e.print();\n * ```\n *\n * @param x The input tensor to split.\n * @param numOrSizeSplits Either an integer indicating the number of\n * splits along the axis or an array of integers containing the sizes of\n * each output tensor along the axis. If a number then it must evenly divide\n * `x.shape[axis]`; otherwise the sum of sizes must match `x.shape[axis]`.\n * Can contain one -1 indicating that dimension is to be inferred.\n * @param axis The dimension along which to split. Defaults to 0 (the first\n * dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction split_(x, numOrSizeSplits, axis = 0) {\n const $x = convertToTensor(x, 'x', 'split');\n const inputs = { x: $x };\n const attr = { numOrSizeSplits, axis };\n return ENGINE.runKernel(SplitV, inputs, attr);\n}\nexport const split = /* @__PURE__ */ op({ split_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQTRCLE1BQU0saUJBQWlCLENBQUM7QUFJbEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25ELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxTQUFTLE1BQU0sQ0FDWCxDQUFvQixFQUFFLGVBQWdDLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFnQixFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUVsRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ1osTUFBTSxFQUFFLE1BQW1DLEVBQzNDLElBQStCLENBQW1CLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGxpdFYsIFNwbGl0VkF0dHJzLCBTcGxpdFZJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBTcGxpdHMgYSBgdGYuVGVuc29yYCBpbnRvIHN1YiB0ZW5zb3JzLlxuICpcbiAqIElmIGBudW1PclNpemVTcGxpdHNgIGlzIGEgbnVtYmVyLCBzcGxpdHMgYHhgIGFsb25nIGRpbWVuc2lvbiBgYXhpc2BcbiAqIGludG8gYG51bU9yU2l6ZVNwbGl0c2Agc21hbGxlciB0ZW5zb3JzLlxuICogUmVxdWlyZXMgdGhhdCBgbnVtT3JTaXplU3BsaXRzYCBldmVubHkgZGl2aWRlcyBgeC5zaGFwZVtheGlzXWAuXG4gKlxuICogSWYgYG51bU9yU2l6ZVNwbGl0c2AgaXMgYSBudW1iZXIgYXJyYXksIHNwbGl0cyBgeGAgaW50b1xuICogYG51bU9yU2l6ZVNwbGl0cy5sZW5ndGhgIHBpZWNlcy4gVGhlIHNoYXBlIG9mIHRoZSBgaWAtdGggcGllY2UgaGFzIHRoZVxuICogc2FtZSBzaXplIGFzIGB4YCBleGNlcHQgYWxvbmcgZGltZW5zaW9uIGBheGlzYCB3aGVyZSB0aGUgc2l6ZSBpc1xuICogYG51bU9yU2l6ZVNwbGl0c1tpXWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFsyLCA0XSk7XG4gKiBjb25zdCBbYSwgYl0gPSB0Zi5zcGxpdCh4LCAyLCAxKTtcbiAqIGEucHJpbnQoKTtcbiAqIGIucHJpbnQoKTtcbiAqXG4gKiBjb25zdCBbYywgZCwgZV0gPSB0Zi5zcGxpdCh4LCBbMSwgMiwgMV0sIDEpO1xuICogYy5wcmludCgpO1xuICogZC5wcmludCgpO1xuICogZS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciB0byBzcGxpdC5cbiAqIEBwYXJhbSBudW1PclNpemVTcGxpdHMgRWl0aGVyIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mXG4gKiBzcGxpdHMgYWxvbmcgdGhlIGF4aXMgb3IgYW4gYXJyYXkgb2YgaW50ZWdlcnMgY29udGFpbmluZyB0aGUgc2l6ZXMgb2ZcbiAqIGVhY2ggb3V0cHV0IHRlbnNvciBhbG9uZyB0aGUgYXhpcy4gSWYgYSBudW1iZXIgdGhlbiBpdCBtdXN0IGV2ZW5seSBkaXZpZGVcbiAqIGB4LnNoYXBlW2F4aXNdYDsgb3RoZXJ3aXNlIHRoZSBzdW0gb2Ygc2l6ZXMgbXVzdCBtYXRjaCBgeC5zaGFwZVtheGlzXWAuXG4gKiBDYW4gY29udGFpbiBvbmUgLTEgaW5kaWNhdGluZyB0aGF0IGRpbWVuc2lvbiBpcyB0byBiZSBpbmZlcnJlZC5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24gYWxvbmcgd2hpY2ggdG8gc3BsaXQuIERlZmF1bHRzIHRvIDAgKHRoZSBmaXJzdFxuICogZGltKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdTbGljaW5nIGFuZCBKb2luaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3BsaXRfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBudW1PclNpemVTcGxpdHM6IG51bWJlcltdfG51bWJlciwgYXhpcyA9IDApOiBUW10ge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzcGxpdCcpO1xuXG4gIGNvbnN0IGlucHV0czogU3BsaXRWSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cjogU3BsaXRWQXR0cnMgPSB7bnVtT3JTaXplU3BsaXRzLCBheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICBTcGxpdFYsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHIgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIHVua25vd24gYXMgVFtdO1xufVxuXG5leHBvcnQgY29uc3Qgc3BsaXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3NwbGl0X30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../../util';\nimport { complex } from '../complex';\nimport { concat } from '../concat';\nimport { imag } from '../imag';\nimport { op } from '../operation';\nimport { real } from '../real';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { split } from '../split';\nimport { zeros } from '../zeros';\nimport { zerosLike } from '../zeros_like';\nimport { fft } from './fft';\n/**\n * Real value input fast Fourier transform.\n *\n * Computes the 1-dimensional discrete Fourier transform over the\n * inner-most dimension of the real input.\n *\n * ```js\n * const real = tf.tensor1d([1, 2, 3]);\n *\n * real.rfft().print();\n * ```\n * @param input The real value input to compute an rfft over.\n *\n * @doc {heading: 'Operations', subheading: 'Spectral', namespace: 'spectral'}\n */\nfunction rfft_(input, fftLength) {\n assert(input.dtype === 'float32', () => `The dtype for rfft() must be real value but got ${input.dtype}`);\n let innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = input.size / innerDimensionSize;\n let adjustedInput;\n if (fftLength != null && fftLength < innerDimensionSize) {\n // Need to crop\n const begin = input.shape.map(v => 0);\n const size = input.shape.map(v => v);\n size[input.shape.length - 1] = fftLength;\n adjustedInput = slice(input, begin, size);\n innerDimensionSize = fftLength;\n }\n else if (fftLength != null && fftLength > innerDimensionSize) {\n // Need to pad with zeros\n const zerosShape = input.shape.map(v => v);\n zerosShape[input.shape.length - 1] = fftLength - innerDimensionSize;\n adjustedInput = concat([input, zeros(zerosShape)], input.shape.length - 1);\n innerDimensionSize = fftLength;\n }\n else {\n adjustedInput = input;\n }\n // Complement the input with zero imaginary numbers.\n const zerosInput = zerosLike(adjustedInput);\n const complexInput = reshape(complex(adjustedInput, zerosInput), [batch, innerDimensionSize]);\n const ret = fft(complexInput);\n // Exclude complex conjugations. These conjugations are put symmetrically.\n const half = Math.floor(innerDimensionSize / 2) + 1;\n const realValues = real(ret);\n const imagValues = imag(ret);\n const realComplexConjugate = split(realValues, [half, innerDimensionSize - half], realValues.shape.length - 1);\n const imagComplexConjugate = split(imagValues, [half, innerDimensionSize - half], imagValues.shape.length - 1);\n const outputShape = adjustedInput.shape.slice();\n outputShape[adjustedInput.shape.length - 1] = half;\n return reshape(complex(realComplexConjugate[0], imagComplexConjugate[0]), outputShape);\n}\nexport const rfft = /* @__PURE__ */ op({ rfft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwZWN0cmFsL3JmZnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFMUI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsU0FBa0I7SUFDOUMsTUFBTSxDQUNGLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUN6QixHQUFHLEVBQUUsQ0FBQyxtREFBbUQsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFNUUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFD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QUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuLi9jb21wbGV4JztcbmltcG9ydCB7Y29uY2F0fSBmcm9tICcuLi9jb25jYXQnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuLi9pbWFnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlYWx9IGZyb20gJy4uL3JlYWwnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7c3BsaXR9IGZyb20gJy4uL3NwbGl0JztcbmltcG9ydCB7emVyb3N9IGZyb20gJy4uL3plcm9zJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuLi96ZXJvc19saWtlJztcblxuaW1wb3J0IHtmZnR9IGZyb20gJy4vZmZ0JztcblxuLyoqXG4gKiBSZWFsIHZhbHVlIGlucHV0IGZhc3QgRm91cmllciB0cmFuc2Zvcm0uXG4gKlxuICogQ29tcHV0ZXMgdGhlIDEtZGltZW5zaW9uYWwgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm0gb3ZlciB0aGVcbiAqIGlubmVyLW1vc3QgZGltZW5zaW9uIG9mIHRoZSByZWFsIGlucHV0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZWFsID0gdGYudGVuc29yMWQoWzEsIDIsIDNdKTtcbiAqXG4gKiByZWFsLnJmZnQoKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gaW5wdXQgVGhlIHJlYWwgdmFsdWUgaW5wdXQgdG8gY29tcHV0ZSBhbiByZmZ0IG92ZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3BlY3RyYWwnLCBuYW1lc3BhY2U6ICdzcGVjdHJhbCd9XG4gKi9cbmZ1bmN0aW9uIHJmZnRfKGlucHV0OiBUZW5zb3IsIGZmdExlbmd0aD86IG51bWJlcik6IFRlbnNvciB7XG4gIGFzc2VydChcbiAgICAgIGlucHV0LmR0eXBlID09PSAnZmxvYXQzMicsXG4gICAgICAoKSA9PiBgVGhlIGR0eXBlIGZvciByZmZ0KCkgbXVzdCBiZSByZWFsIHZhbHVlIGJ1dCBnb3QgJHtpbnB1dC5kdHlwZX1gKTtcblxuICBsZXQgaW5uZXJEaW1lbnNpb25TaXplID0gaW5wdXQuc2hhcGVbaW5wdXQuc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXQuc2l6ZSAvIGlubmVyRGltZW5zaW9uU2l6ZTtcblxuICBsZXQgYWRqdXN0ZWRJbnB1dDogVGVuc29yO1xuICBpZiAoZmZ0TGVuZ3RoICE9IG51bGwgJiYgZmZ0TGVuZ3RoIDwgaW5uZXJEaW1lbnNpb25TaXplKSB7XG4gICAgLy8gTmVlZCB0byBjcm9wXG4gICAgY29uc3QgYmVnaW4gPSBpbnB1dC5zaGFwZS5tYXAodiA9PiAwKTtcbiAgICBjb25zdCBzaXplID0gaW5wdXQuc2hhcGUubWFwKHYgPT4gdik7XG4gICAgc2l6ZVtpbnB1dC5zaGFwZS5sZW5ndGggLSAxXSA9IGZmdExlbmd0aDtcbiAgICBhZGp1c3RlZElucHV0ID0gc2xpY2UoaW5wdXQsIGJlZ2luLCBzaXplKTtcbiAgICBpbm5lckRpbWVuc2lvblNpemUgPSBmZnRMZW5ndGg7XG4gIH0gZWxzZSBpZiAoZmZ0TGVuZ3RoICE9IG51bGwgJiYgZmZ0TGVuZ3RoID4gaW5uZXJEaW1lbnNpb25TaXplKSB7XG4gICAgLy8gTmVlZCB0byBwYWQgd2l0aCB6ZXJvc1xuICAgIGNvbnN0IHplcm9zU2hhcGUgPSBpbnB1dC5zaGFwZS5tYXAodiA9PiB2KTtcbiAgICB6ZXJvc1NoYXBlW2lucHV0LnNoYXBlLmxlbmd0aCAtIDFdID0gZmZ0TGVuZ3RoIC0gaW5uZXJEaW1lbnNpb25TaXplO1xuICAgIGFkanVzdGVkSW5wdXQgPSBjb25jYXQoW2lucHV0LCB6ZXJvcyh6ZXJvc1NoYXBlKV0sIGlucHV0LnNoYXBlLmxlbmd0aCAtIDEpO1xuICAgIGlubmVyRGltZW5zaW9uU2l6ZSA9IGZmdExlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBhZGp1c3RlZElucHV0ID0gaW5wdXQ7XG4gIH1cblxuICAvLyBDb21wbGVtZW50IHRoZSBpbnB1dCB3aXRoIHplcm8gaW1hZ2luYXJ5IG51bWJlcnMuXG4gIGNvbnN0IHplcm9zSW5wdXQgPSB6ZXJvc0xpa2UoYWRqdXN0ZWRJbnB1dCk7XG4gIGNvbnN0IGNvbXBsZXhJbnB1dCA9XG4gICAgICByZXNoYXBlKGNvbXBsZXgoYWRqdXN0ZWRJbnB1dCwgemVyb3NJbnB1dCksIFtiYXRjaCwgaW5uZXJEaW1lbnNpb25TaXplXSk7XG5cbiAgY29uc3QgcmV0ID0gZmZ0KGNvbXBsZXhJbnB1dCk7XG5cbiAgLy8gRXhjbHVkZSBjb21wbGV4IGNvbmp1Z2F0aW9ucy4gVGhlc2UgY29uanVnYXRpb25zIGFyZSBwdXQgc3ltbWV0cmljYWxseS5cbiAgY29uc3QgaGFsZiA9IE1hdGguZmxvb3IoaW5uZXJEaW1lbnNpb25TaXplIC8gMikgKyAxO1xuICBjb25zdCByZWFsVmFsdWVzID0gcmVhbChyZXQpO1xuICBjb25zdCBpbWFnVmFsdWVzID0gaW1hZyhyZXQpO1xuICBjb25zdCByZWFsQ29tcGxleENvbmp1Z2F0ZSA9IHNwbGl0KFxuICAgICAgcmVhbFZhbHVlcywgW2hhbGYsIGlubmVyRGltZW5zaW9uU2l6ZSAtIGhhbGZdLFxuICAgICAgcmVhbFZhbHVlcy5zaGFwZS5sZW5ndGggLSAxKTtcbiAgY29uc3QgaW1hZ0NvbXBsZXhDb25qdWdhdGUgPSBzcGxpdChcbiAgICAgIGltYWdWYWx1ZXMsIFtoYWxmLCBpbm5lckRpbWVuc2lvblNpemUgLSBoYWxmXSxcbiAgICAgIGltYWdWYWx1ZXMuc2hhcGUubGVuZ3RoIC0gMSk7XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBhZGp1c3RlZElucHV0LnNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlW2FkanVzdGVkSW5wdXQuc2hhcGUubGVuZ3RoIC0gMV0gPSBoYWxmO1xuXG4gIHJldHVybiByZXNoYXBlKFxuICAgICAgY29tcGxleChyZWFsQ29tcGxleENvbmp1Z2F0ZVswXSwgaW1hZ0NvbXBsZXhDb25qdWdhdGVbMF0pLCBvdXRwdXRTaGFwZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZmZ0ID0gLyogQF9fUFVSRV9fICovIG9wKHtyZmZ0X30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SquaredDifference } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertAndGetBroadcastShape } from './broadcast_util';\nimport { op } from './operation';\n/**\n * Returns (a - b) * (a - b) element-wise.\n * Supports broadcasting.\n *\n * ```js\n * const a = tf.tensor1d([1, 4, 3, 16]);\n * const b = tf.tensor1d([1, 2, 9, 4]);\n *\n * a.squaredDifference(b).print(); // or tf.squaredDifference(a, b)\n * ```\n *\n * ```js\n * // Broadcast squared difference a with b.\n * const a = tf.tensor1d([2, 4, 6, 8]);\n * const b = tf.scalar(5);\n *\n * a.squaredDifference(b).print(); // or tf.squaredDifference(a, b)\n * ```\n *\n * @param a The first tensor.\n * @param b The second tensor. Must have the same type as `a`.\n *\n * @doc {heading: 'Operations', subheading: 'Arithmetic'}\n */\nfunction squaredDifference_(a, b) {\n let $a = convertToTensor(a, 'a', 'squaredDifference');\n let $b = convertToTensor(b, 'b', 'squaredDifference');\n [$a, $b] = makeTypesMatch($a, $b);\n assertAndGetBroadcastShape($a.shape, $b.shape);\n const inputs = { a: $a, b: $b };\n const attrs = {};\n return ENGINE.runKernel(SquaredDifference, inputs, attrs);\n}\nexport const squaredDifference = /* @__PURE__ */ op({ squaredDifference_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1YXJlZF9kaWZmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3F1YXJlZF9kaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGlCQUFpQixFQUEwQixNQUFNLGlCQUFpQixDQUFDO0FBRzNFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixDQUFvQixFQUFFLENBQW9CO0lBQzVDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDdEQsSUFBSSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN0RCxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRWxDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUE0QixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVqQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLGlCQUFpQixFQUFFLE1BQW1DLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxrQkFBa0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTcXVhcmVkRGlmZmVyZW5jZSwgU3F1YXJlZERpZmZlcmVuY2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Fzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlfSBmcm9tICcuL2Jyb2FkY2FzdF91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBSZXR1cm5zIChhIC0gYikgKiAoYSAtIGIpIGVsZW1lbnQtd2lzZS5cbiAqIFN1cHBvcnRzIGJyb2FkY2FzdGluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCA0LCAzLCAxNl0pO1xuICogY29uc3QgYiA9IHRmLnRlbnNvcjFkKFsxLCAyLCA5LCA0XSk7XG4gKlxuICogYS5zcXVhcmVkRGlmZmVyZW5jZShiKS5wcmludCgpOyAgLy8gb3IgdGYuc3F1YXJlZERpZmZlcmVuY2UoYSwgYilcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBCcm9hZGNhc3Qgc3F1YXJlZCBkaWZmZXJlbmNlICBhIHdpdGggYi5cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMiwgNCwgNiwgOF0pO1xuICogY29uc3QgYiA9IHRmLnNjYWxhcig1KTtcbiAqXG4gKiBhLnNxdWFyZWREaWZmZXJlbmNlKGIpLnByaW50KCk7ICAvLyBvciB0Zi5zcXVhcmVkRGlmZmVyZW5jZShhLCBiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHRlbnNvci5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdGVuc29yLiBNdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBgYWAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQXJpdGhtZXRpYyd9XG4gKi9cbmZ1bmN0aW9uIHNxdWFyZWREaWZmZXJlbmNlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUZW5zb3J8VGVuc29yTGlrZSwgYjogVGVuc29yfFRlbnNvckxpa2UpOiBUIHtcbiAgbGV0ICRhID0gY29udmVydFRvVGVuc29yKGEsICdhJywgJ3NxdWFyZWREaWZmZXJlbmNlJyk7XG4gIGxldCAkYiA9IGNvbnZlcnRUb1RlbnNvcihiLCAnYicsICdzcXVhcmVkRGlmZmVyZW5jZScpO1xuICBbJGEsICRiXSA9IG1ha2VUeXBlc01hdGNoKCRhLCAkYik7XG5cbiAgYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoJGEuc2hhcGUsICRiLnNoYXBlKTtcblxuICBjb25zdCBpbnB1dHM6IFNxdWFyZWREaWZmZXJlbmNlSW5wdXRzID0ge2E6ICRhLCBiOiAkYn07XG4gIGNvbnN0IGF0dHJzID0ge307XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBTcXVhcmVkRGlmZmVyZW5jZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsIGF0dHJzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNxdWFyZWREaWZmZXJlbmNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzcXVhcmVkRGlmZmVyZW5jZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { squeezeShape } from '../util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Removes dimensions of size 1 from the shape of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor([1, 2, 3, 4], [1, 1, 4]);\n * x.squeeze().print();\n * ```\n *\n * @param x The input tensor to be squeezed.\n * @param axis An optional list of numbers. If specified, only\n * squeezes the dimensions listed. The dimension index starts at 0. It\n * is an error to squeeze a dimension that is not 1.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction squeeze_(x, axis) {\n const $x = convertToTensor(x, 'x', 'squeeze', 'string_or_numeric');\n return reshape($x, squeezeShape($x.shape, axis).newShape);\n}\nexport const squeeze = /* @__PURE__ */ op({ squeeze_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1ZWV6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NxdWVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFckMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxRQUFRLENBQW1CLENBQW9CLEVBQUUsSUFBZTtJQUN2RSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFNLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzcXVlZXplU2hhcGV9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbi8qKlxuICogUmVtb3ZlcyBkaW1lbnNpb25zIG9mIHNpemUgMSBmcm9tIHRoZSBzaGFwZSBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yKFsxLCAyLCAzLCA0XSwgWzEsIDEsIDRdKTtcbiAqIHguc3F1ZWV6ZSgpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIHNxdWVlemVkLlxuICogQHBhcmFtIGF4aXMgQW4gb3B0aW9uYWwgbGlzdCBvZiBudW1iZXJzLiBJZiBzcGVjaWZpZWQsIG9ubHlcbiAqICAgICBzcXVlZXplcyB0aGUgZGltZW5zaW9ucyBsaXN0ZWQuIFRoZSBkaW1lbnNpb24gaW5kZXggc3RhcnRzIGF0IDAuIEl0XG4gKiBpcyBhbiBlcnJvciB0byBzcXVlZXplIGEgZGltZW5zaW9uIHRoYXQgaXMgbm90IDEuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnVHJhbnNmb3JtYXRpb25zJ31cbiAqL1xuZnVuY3Rpb24gc3F1ZWV6ZV88VCBleHRlbmRzIFRlbnNvcj4oeDogVGVuc29yfFRlbnNvckxpa2UsIGF4aXM/OiBudW1iZXJbXSk6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdzcXVlZXplJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIHJldHVybiByZXNoYXBlKCR4LCBzcXVlZXplU2hhcGUoJHguc2hhcGUsIGF4aXMpLm5ld1NoYXBlKSBhcyBUO1xufVxuXG5leHBvcnQgY29uc3Qgc3F1ZWV6ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3F1ZWV6ZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Pack } from '../kernel_names';\nimport { convertToTensorArray } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Stacks a list of rank-`R` `tf.Tensor`s into one rank-`(R+1)` `tf.Tensor`.\n *\n * ```js\n * const a = tf.tensor1d([1, 2]);\n * const b = tf.tensor1d([3, 4]);\n * const c = tf.tensor1d([5, 6]);\n * tf.stack([a, b, c]).print();\n * ```\n *\n * @param tensors A list of tensor objects with the same shape and dtype.\n * @param axis The axis to stack along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction stack_(tensors, axis = 0) {\n const $tensors = convertToTensorArray(tensors, 'tensors', 'stack', 'string_or_numeric');\n util.assert($tensors.length >= 1, () => 'Pass at least one tensor to tf.stack');\n if ($tensors.length > 0) {\n util.assert(axis <= $tensors[0].rank, () => 'Axis must be <= rank of the tensor');\n }\n const inputs = $tensors;\n const attrs = { axis };\n return ENGINE.runKernel(Pack, inputs, attrs);\n}\nexport const stack = /* @__PURE__ */ op({ stack_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFJNUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQVMsTUFBTSxDQUNYLE9BQTRCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQ1Ysb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUUzRSxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFeEUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLE1BQU0sR0FBZSxRQUFRLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQWMsRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUVoQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1BhY2ssIFBhY2tBdHRycywgUGFja0lucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3JBcnJheX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFN0YWNrcyBhIGxpc3Qgb2YgcmFuay1gUmAgYHRmLlRlbnNvcmBzIGludG8gb25lIHJhbmstYChSKzEpYCBgdGYuVGVuc29yYC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjFkKFsxLCAyXSk7XG4gKiBjb25zdCBiID0gdGYudGVuc29yMWQoWzMsIDRdKTtcbiAqIGNvbnN0IGMgPSB0Zi50ZW5zb3IxZChbNSwgNl0pO1xuICogdGYuc3RhY2soW2EsIGIsIGNdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHRlbnNvcnMgQSBsaXN0IG9mIHRlbnNvciBvYmplY3RzIHdpdGggdGhlIHNhbWUgc2hhcGUgYW5kIGR0eXBlLlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gc3RhY2sgYWxvbmcuIERlZmF1bHRzIHRvIDAgKHRoZSBmaXJzdCBkaW0pLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBzdGFja188VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgdGVuc29yczogQXJyYXk8VHxUZW5zb3JMaWtlPiwgYXhpcyA9IDApOiBUZW5zb3Ige1xuICBjb25zdCAkdGVuc29ycyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3JBcnJheSh0ZW5zb3JzLCAndGVuc29ycycsICdzdGFjaycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHRlbnNvcnMubGVuZ3RoID49IDEsICgpID0+ICdQYXNzIGF0IGxlYXN0IG9uZSB0ZW5zb3IgdG8gdGYuc3RhY2snKTtcblxuICBpZiAoJHRlbnNvcnMubGVuZ3RoID4gMCkge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBheGlzIDw9ICR0ZW5zb3JzWzBdLnJhbmssICgpID0+ICdBeGlzIG11c3QgYmUgPD0gcmFuayBvZiB0aGUgdGVuc29yJyk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFBhY2tJbnB1dHMgPSAkdGVuc29ycztcbiAgY29uc3QgYXR0cnM6IFBhY2tBdHRycyA9IHtheGlzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFBhY2ssIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhY2sgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0YWNrX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Step } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes step of the input `tf.Tensor` element-wise: `x > 0 ? 1 : alpha`\n *\n * ```js\n * const x = tf.tensor1d([0, 2, -1, -3]);\n *\n * x.step(.5).print(); // or tf.step(x, .5)\n * ```\n * @param x The input tensor.\n * @param alpha The gradient when input is negative. Defaults to 0.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction step_(x, alpha = 0.0) {\n const $x = convertToTensor(x, 'x', 'step');\n const inputs = { x: $x };\n const attrs = { alpha };\n return ENGINE.runKernel(Step, inputs, attrs);\n}\nexport const step = /* @__PURE__ */ op({ step_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsS0FBSyxDQUFtQixDQUFlLEVBQUUsS0FBSyxHQUFHLEdBQUc7SUFDM0QsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQWUsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQWMsRUFBQyxLQUFLLEVBQUMsQ0FBQztJQUVqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLElBQUksRUFBRSxNQUFtQyxFQUN6QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N0ZXAsIFN0ZXBBdHRycywgU3RlcElucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHN0ZXAgb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZTogYHggPiAwID8gMSA6IGFscGhhYFxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzAsIDIsIC0xLCAtM10pO1xuICpcbiAqIHguc3RlcCguNSkucHJpbnQoKTsgIC8vIG9yIHRmLnN0ZXAoeCwgLjUpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gYWxwaGEgVGhlIGdyYWRpZW50IHdoZW4gaW5wdXQgaXMgbmVnYXRpdmUuIERlZmF1bHRzIHRvIDAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHN0ZXBfPFQgZXh0ZW5kcyBUZW5zb3I+KHg6IFR8VGVuc29yTGlrZSwgYWxwaGEgPSAwLjApOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3RlcCcpO1xuXG4gIGNvbnN0IGlucHV0czogU3RlcElucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBTdGVwQXR0cnMgPSB7YWxwaGF9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgU3RlcCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5leHBvcnQgY29uc3Qgc3RlcCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3RlcF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { StridedSlice } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Extracts a strided slice of a tensor.\n *\n * Roughly speaking, this op extracts a slice of size (end-begin)/stride from\n * the given input tensor (x). Starting at the location specified by begin the\n * slice continues by adding stride to the index until all dimensions are not\n * less than end. Note that a stride can be negative, which causes a reverse\n * slice.\n *\n * ```js\n * const t = tf.tensor3d([1, 1, 1 ,2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6],\n * [3, 2, 3]);\n * t.stridedSlice([1, 0, 0], [2, 1, 3], [1, 1, 1]).print() // [[[3, 3, 3]]]\n * t.stridedSlice([1, 0, 0], [2, 2, 3], [1, 1, 1]).print() // [[[3, 3, 3],\n * // [4, 4, 4]]]\n * t.stridedSlice([1, -1, 0], [2, -3, 3], [1, -1, 1]).print() // [[[4, 4, 4],\n * // [3, 3, 3]]]\n * ```\n *\n * @param x The tensor to stride slice.\n * @param begin The coordinates to start the slice from.\n * @param end: The coordinates to end the slice at.\n * @param strides: The size of the slice.\n * @param beginMask: If the ith bit of beginMask is set, begin[i] is ignored\n * and the fullest possible range in that dimension is used instead.\n * @param endMask: If the ith bit of endMask is set, end[i] is ignored\n * and the fullest possible range in that dimension is used instead.\n * @param shrinkAxisMask: a bitmask where bit i implies that\n * the ith specification should shrink the dimensionality. begin and end must\n * imply a slice of size 1 in the dimension.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction stridedSlice_(x, begin, end, strides, beginMask = 0, endMask = 0, ellipsisMask = 0, newAxisMask = 0, shrinkAxisMask = 0) {\n const $x = convertToTensor(x, 'x', 'stridedSlice', 'string_or_numeric');\n const inputs = { x: $x };\n const attrs = {\n begin,\n end,\n strides,\n beginMask,\n endMask,\n ellipsisMask,\n newAxisMask,\n shrinkAxisMask\n };\n return ENGINE.runKernel(StridedSlice, inputs, attrs);\n}\nexport const stridedSlice = /* @__PURE__ */ op({ stridedSlice_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaWRlZF9zbGljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3N0cmlkZWRfc2xpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBSXBGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUNILFNBQVMsYUFBYSxDQUNsQixDQUFvQixFQUFFLEtBQWUsRUFBRSxHQUFhLEVBQUUsT0FBa0IsRUFDeEUsU0FBUyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFDN0QsY0FBYyxHQUFHLENBQUM7SUFDcEIsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFFeEUsTUFBTSxNQUFNLEdBQXVCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFzQjtRQUMvQixLQUFLO1FBQ0wsR0FBRztRQUNILE9BQU87UUFDUCxTQUFTO1FBQ1QsT0FBTztRQUNQLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztLQUNmLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1N0cmlkZWRTbGljZSwgU3RyaWRlZFNsaWNlQXR0cnMsIFN0cmlkZWRTbGljZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEV4dHJhY3RzIGEgc3RyaWRlZCBzbGljZSBvZiBhIHRlbnNvci5cbiAqXG4gKiBSb3VnaGx5IHNwZWFraW5nLCB0aGlzIG9wIGV4dHJhY3RzIGEgc2xpY2Ugb2Ygc2l6ZSAoZW5kLWJlZ2luKS9zdHJpZGUgZnJvbVxuICogdGhlIGdpdmVuIGlucHV0IHRlbnNvciAoeCkuIFN0YXJ0aW5nIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgYmVnaW4gdGhlXG4gKiBzbGljZSBjb250aW51ZXMgYnkgYWRkaW5nIHN0cmlkZSB0byB0aGUgaW5kZXggdW50aWwgYWxsIGRpbWVuc2lvbnMgYXJlIG5vdFxuICogbGVzcyB0aGFuIGVuZC4gTm90ZSB0aGF0IGEgc3RyaWRlIGNhbiBiZSBuZWdhdGl2ZSwgd2hpY2ggY2F1c2VzIGEgcmV2ZXJzZVxuICogc2xpY2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHQgPSB0Zi50ZW5zb3IzZChbMSwgMSwgMSAsMiwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNiwgNiwgNl0sXG4gKiAgICBbMywgMiwgM10pO1xuICogdC5zdHJpZGVkU2xpY2UoWzEsIDAsIDBdLCBbMiwgMSwgM10sIFsxLCAxLCAxXSkucHJpbnQoKSAgLy8gW1tbMywgMywgM11dXVxuICogdC5zdHJpZGVkU2xpY2UoWzEsIDAsIDBdLCBbMiwgMiwgM10sIFsxLCAxLCAxXSkucHJpbnQoKSAgLy8gW1tbMywgMywgM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzQsIDQsIDRdXV1cbiAqIHQuc3RyaWRlZFNsaWNlKFsxLCAtMSwgMF0sIFsyLCAtMywgM10sIFsxLCAtMSwgMV0pLnByaW50KCkgLy8gW1tbNCwgNCwgNF0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWzMsIDMsIDNdXV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgdG8gc3RyaWRlIHNsaWNlLlxuICogQHBhcmFtIGJlZ2luIFRoZSBjb29yZGluYXRlcyB0byBzdGFydCB0aGUgc2xpY2UgZnJvbS5cbiAqIEBwYXJhbSBlbmQ6IFRoZSBjb29yZGluYXRlcyB0byBlbmQgdGhlIHNsaWNlIGF0LlxuICogQHBhcmFtIHN0cmlkZXM6IFRoZSBzaXplIG9mIHRoZSBzbGljZS5cbiAqIEBwYXJhbSBiZWdpbk1hc2s6IElmIHRoZSBpdGggYml0IG9mIGJlZ2luTWFzayBpcyBzZXQsIGJlZ2luW2ldIGlzIGlnbm9yZWRcbiAqICAgICAgYW5kIHRoZSBmdWxsZXN0IHBvc3NpYmxlIHJhbmdlIGluIHRoYXQgZGltZW5zaW9uIGlzIHVzZWQgaW5zdGVhZC5cbiAqIEBwYXJhbSBlbmRNYXNrOiBJZiB0aGUgaXRoIGJpdCBvZiBlbmRNYXNrIGlzIHNldCwgZW5kW2ldIGlzIGlnbm9yZWRcbiAqICAgICAgYW5kIHRoZSBmdWxsZXN0IHBvc3NpYmxlIHJhbmdlIGluIHRoYXQgZGltZW5zaW9uIGlzIHVzZWQgaW5zdGVhZC5cbiAqIEBwYXJhbSBzaHJpbmtBeGlzTWFzazogYSBiaXRtYXNrIHdoZXJlIGJpdCBpIGltcGxpZXMgdGhhdFxuICogdGhlIGl0aCBzcGVjaWZpY2F0aW9uIHNob3VsZCBzaHJpbmsgdGhlIGRpbWVuc2lvbmFsaXR5LiBiZWdpbiBhbmQgZW5kIG11c3RcbiAqIGltcGx5IGEgc2xpY2Ugb2Ygc2l6ZSAxIGluIHRoZSBkaW1lbnNpb24uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlkZWRTbGljZV8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIGJlZ2luOiBudW1iZXJbXSwgZW5kOiBudW1iZXJbXSwgc3RyaWRlcz86IG51bWJlcltdLFxuICAgIGJlZ2luTWFzayA9IDAsIGVuZE1hc2sgPSAwLCBlbGxpcHNpc01hc2sgPSAwLCBuZXdBeGlzTWFzayA9IDAsXG4gICAgc2hyaW5rQXhpc01hc2sgPSAwKTogVGVuc29yIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnc3RyaWRlZFNsaWNlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBTdHJpZGVkU2xpY2VJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogU3RyaWRlZFNsaWNlQXR0cnMgPSB7XG4gICAgYmVnaW4sXG4gICAgZW5kLFxuICAgIHN0cmlkZXMsXG4gICAgYmVnaW5NYXNrLFxuICAgIGVuZE1hc2ssXG4gICAgZWxsaXBzaXNNYXNrLFxuICAgIG5ld0F4aXNNYXNrLFxuICAgIHNocmlua0F4aXNNYXNrXG4gIH07XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBTdHJpZGVkU2xpY2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaWRlZFNsaWNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzdHJpZGVkU2xpY2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Tan } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes tan of the input `tf.Tensor` element-wise, `tan(x)`\n *\n * ```js\n * const x = tf.tensor1d([0, Math.PI / 2, Math.PI * 3 / 4]);\n *\n * x.tan().print(); // or tf.tan(x)\n * ```\n * @param x The input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Basic math'}\n */\nfunction tan_(x) {\n const $x = convertToTensor(x, 'x', 'tan', 'float32');\n const inputs = { x: $x };\n return ENGINE.runKernel(Tan, inputs);\n}\nexport const tan = /* @__PURE__ */ op({ tan_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyxJQUFJLENBQW1CLENBQWU7SUFDN0MsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFjLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBRWxDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUYW4sIFRhbklucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb21wdXRlcyB0YW4gb2YgdGhlIGlucHV0IGB0Zi5UZW5zb3JgIGVsZW1lbnQtd2lzZSwgYHRhbih4KWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjFkKFswLCBNYXRoLlBJIC8gMiwgTWF0aC5QSSAqIDMgLyA0XSk7XG4gKlxuICogeC50YW4oKS5wcmludCgpOyAgLy8gb3IgdGYudGFuKHgpXG4gKiBgYGBcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnQmFzaWMgbWF0aCd9XG4gKi9cbmZ1bmN0aW9uIHRhbl88VCBleHRlbmRzIFRlbnNvcj4oeDogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3RhbicsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzOiBUYW5JbnB1dHMgPSB7eDogJHh9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFRhbiwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXApO1xufVxuZXhwb3J0IGNvbnN0IHRhbiA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dGFuX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-1 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor1d` as it makes the code more readable.\n *\n * ```js\n * tf.tensor1d([1, 2, 3]).print();\n * ```\n *\n * @param values The values of the tensor. Can be array of numbers,\n * or a `TypedArray`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor1d(values, dtype) {\n assertNonNull(values);\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 1) {\n throw new Error('tensor1d() requires values to be a flat/TypedArray');\n }\n const shape = null;\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yMWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IxZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxNQUFvQixFQUFFLEtBQWdCO0lBQzdELGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsTUFBTSxLQUFLLEdBQWEsSUFBSSxDQUFDO0lBQzdCLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBYSxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2luZmVyU2hhcGV9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2UxRH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OdWxsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay0xIGB0Zi5UZW5zb3JgIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlcywgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIFRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjaGlldmVkIHdpdGggYHRmLnRlbnNvcmAsIGJ1dCBpbiBnZW5lcmFsXG4gKiB3ZSByZWNvbW1lbmQgdXNpbmcgYHRmLnRlbnNvcjFkYCBhcyBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLlxuICpcbiAqIGBgYGpzXG4gKiB0Zi50ZW5zb3IxZChbMSwgMiwgM10pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBgVHlwZWRBcnJheWAuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IxZCh2YWx1ZXM6IFRlbnNvckxpa2UxRCwgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjFEIHtcbiAgYXNzZXJ0Tm9uTnVsbCh2YWx1ZXMpO1xuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3IxZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSBhIGZsYXQvVHlwZWRBcnJheScpO1xuICB9XG4gIGNvbnN0IHNoYXBlOiBudW1iZXJbXSA9IG51bGw7XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3IxRDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-2 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor2d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor2d([[1, 2], [3, 4]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n * `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor2d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 2) {\n throw new Error('tensor2d() requires shape to have two numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 2 && inferredShape.length !== 1) {\n throw new Error('tensor2d() requires values to be number[][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor2d() requires shape to be provided when `values` ' +\n 'are a flat/TypedArray');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yMmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQXdCLEVBQzlDLEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0VBQWdFLENBQUMsQ0FBQztLQUN2RTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCx1QkFBdUIsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTJEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTIgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yMmRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIC8vIFBhc3MgYSBmbGF0IGFycmF5IGFuZCBzcGVjaWZ5IGEgc2hhcGUuXG4gKiB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBvZiB0aGUgdGVuc29yLiBDYW4gYmUgbmVzdGVkIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBmbGF0IGFycmF5LCBvciBhIGBUeXBlZEFycmF5YC5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIHRlbnNvci4gSWYgbm90IHByb3ZpZGVkLCBpdCBpcyBpbmZlcnJlZCBmcm9tXG4gKiAgICAgYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IyZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2UyRCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3IyRCB7XG4gIGFzc2VydE5vbk51bGwodmFsdWVzKTtcbiAgaWYgKHNoYXBlICE9IG51bGwgJiYgc2hhcGUubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3IyZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGhhdmUgdHdvIG51bWJlcnMnKTtcbiAgfVxuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAyICYmIGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGVuc29yMmQoKSByZXF1aXJlcyB2YWx1ZXMgdG8gYmUgbnVtYmVyW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjJkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQvVHlwZWRBcnJheScpO1xuICB9XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3IyRDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-3 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor3d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor3d([[[1], [2]], [[3], [4]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor3d([1, 2, 3, 4], [2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n * `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor3d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 3) {\n throw new Error('tensor3d() requires shape to have three numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 3 && inferredShape.length !== 1) {\n throw new Error('tensor3d() requires values to be number[][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor3d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3IzZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQWdDLEVBQ3RELEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsa0VBQWtFLENBQUMsQ0FBQztLQUN6RTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTNEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTMgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yM2RgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yM2QoW1tbMV0sIFsyXV0sIFtbM10sIFs0XV1dKS5wcmludCgpO1xuICogYGBgXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZS5cbiAqIHRmLnRlbnNvcjNkKFsxLCAyLCAzLCA0XSwgWzIsIDIsIDFdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3IuIENhbiBiZSBuZXN0ZWQgYXJyYXkgb2YgbnVtYmVycyxcbiAqICAgICBvciBhIGZsYXQgYXJyYXksIG9yIGEgYFR5cGVkQXJyYXlgLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiBJZiBub3QgcHJvdmlkZWQsICBpdCBpcyBpbmZlcnJlZCBmcm9tXG4gKiAgICAgYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3IzZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2UzRCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvcjNEIHtcbiAgYXNzZXJ0Tm9uTnVsbCh2YWx1ZXMpO1xuICBpZiAoc2hhcGUgIT0gbnVsbCAmJiBzaGFwZS5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RlbnNvcjNkKCkgcmVxdWlyZXMgc2hhcGUgdG8gaGF2ZSB0aHJlZSBudW1iZXJzJyk7XG4gIH1cbiAgY29uc3QgaW5mZXJyZWRTaGFwZSA9IGluZmVyU2hhcGUodmFsdWVzLCBkdHlwZSk7XG4gIGlmIChpbmZlcnJlZFNoYXBlLmxlbmd0aCAhPT0gMyAmJiBpbmZlcnJlZFNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjNkKCkgcmVxdWlyZXMgdmFsdWVzIHRvIGJlIG51bWJlcltdW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjNkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQgYXJyYXknKTtcbiAgfVxuICByZXR1cm4gbWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgVGVuc29yM0Q7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-4 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor4d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor4d([[[[1], [2]], [[3], [4]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor4d([1, 2, 3, 4], [1, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor4d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 4) {\n throw new Error('tensor4d() requires shape to have four numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 4 && inferredShape.length !== 1) {\n throw new Error('tensor4d() requires values to be number[][][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor4d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQXdDLEVBQzlELEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FLENBQUMsQ0FBQztLQUMzRTtJQUNELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTREfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTQgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yNGRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yNGQoW1tbWzFdLCBbMl1dLCBbWzNdLCBbNF1dXV0pLnByaW50KCk7XG4gKiBgYGBcbiAqIGBgYGpzXG4gKiAvLyBQYXNzIGEgZmxhdCBhcnJheSBhbmQgc3BlY2lmeSBhIHNoYXBlLlxuICogdGYudGVuc29yNGQoWzEsIDIsIDMsIDRdLCBbMSwgMiwgMiwgMV0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgb2YgdGhlIHRlbnNvci4gQ2FuIGJlIG5lc3RlZCBhcnJheSBvZiBudW1iZXJzLFxuICogICAgIG9yIGEgZmxhdCBhcnJheSwgb3IgYSBgVHlwZWRBcnJheWAuXG4gKiBAcGFyYW0gc2hhcGUgVGhlIHNoYXBlIG9mIHRoZSB0ZW5zb3IuIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsXG4gKiAgIGl0IGlzIGluZmVycmVkIGZyb20gYHZhbHVlc2AuXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW5zb3I0ZChcbiAgICB2YWx1ZXM6IFRlbnNvckxpa2U0RCwgc2hhcGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yNEQge1xuICBhc3NlcnROb25OdWxsKHZhbHVlcyk7XG4gIGlmIChzaGFwZSAhPSBudWxsICYmIHNoYXBlLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGVuc29yNGQoKSByZXF1aXJlcyBzaGFwZSB0byBoYXZlIGZvdXIgbnVtYmVycycpO1xuICB9XG4gIGNvbnN0IGluZmVycmVkU2hhcGUgPSBpbmZlclNoYXBlKHZhbHVlcywgZHR5cGUpO1xuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDQgJiYgaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I0ZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSBudW1iZXJbXVtdW11bXSBvciBmbGF0L1R5cGVkQXJyYXknKTtcbiAgfVxuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggPT09IDEgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RlbnNvcjRkKCkgcmVxdWlyZXMgc2hhcGUgdG8gYmUgcHJvdmlkZWQgd2hlbiBgdmFsdWVzYCAnICtcbiAgICAgICAgJ2FyZSBhIGZsYXQgYXJyYXknKTtcbiAgfVxuICByZXR1cm4gbWFrZVRlbnNvcih2YWx1ZXMsIHNoYXBlLCBpbmZlcnJlZFNoYXBlLCBkdHlwZSkgYXMgVGVuc29yNEQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-5 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor5d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor5d([[[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor5d([1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor5d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 5) {\n throw new Error('tensor5d() requires shape to have five numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 5 && inferredShape.length !== 1) {\n throw new Error('tensor5d() requires values to be ' +\n 'number[][][][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor5d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I1ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUFFLEtBQWdELEVBQ3RFLEtBQWdCO0lBQ2xCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUNBQW1DO1lBQ25DLHFDQUFxQyxDQUFDLENBQUM7S0FDNUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCx5REFBeUQ7WUFDekQsa0JBQWtCLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBYSxDQUFDO0FBQ3JFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yNUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2luZmVyU2hhcGV9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2U1RH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OdWxsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7bWFrZVRlbnNvcn0gZnJvbSAnLi90ZW5zb3Jfb3BzX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgcmFuay01IGB0Zi5UZW5zb3JgIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlcywgc2hhcGUgYW5kIGR0eXBlLlxuICpcbiAqIFRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGFjaGlldmVkIHdpdGggYHRmLnRlbnNvcmAsIGJ1dCBpbiBnZW5lcmFsXG4gKiB3ZSByZWNvbW1lbmQgdXNpbmcgYHRmLnRlbnNvcjVkYCBhcyBpdCBtYWtlcyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLlxuICpcbiAqICBgYGBqc1xuICogLy8gUGFzcyBhIG5lc3RlZCBhcnJheS5cbiAqIHRmLnRlbnNvcjVkKFtbW1tbMV0sWzJdXSxbWzNdLFs0XV1dLFtbWzVdLFs2XV0sW1s3XSxbOF1dXV1dKS5wcmludCgpO1xuICogYGBgXG4gKiBgYGBqc1xuICogLy8gUGFzcyBhIGZsYXQgYXJyYXkgYW5kIHNwZWNpZnkgYSBzaGFwZS5cbiAqIHRmLnRlbnNvcjVkKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwgWzEsIDIsIDIsIDIsIDFdKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3IuIENhbiBiZSBuZXN0ZWQgYXJyYXkgb2YgbnVtYmVycyxcbiAqICAgICBvciBhIGZsYXQgYXJyYXksIG9yIGEgYFR5cGVkQXJyYXlgLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgdGVuc29yLiBPcHRpb25hbC4gSWYgbm90IHByb3ZpZGVkLFxuICogICBpdCBpcyBpbmZlcnJlZCBmcm9tIGB2YWx1ZXNgLlxuICogQHBhcmFtIGR0eXBlIFRoZSBkYXRhIHR5cGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVuc29yNWQoXG4gICAgdmFsdWVzOiBUZW5zb3JMaWtlNUQsIHNoYXBlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBkdHlwZT86IERhdGFUeXBlKTogVGVuc29yNUQge1xuICBhc3NlcnROb25OdWxsKHZhbHVlcyk7XG4gIGlmIChzaGFwZSAhPSBudWxsICYmIHNoYXBlLmxlbmd0aCAhPT0gNSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGVuc29yNWQoKSByZXF1aXJlcyBzaGFwZSB0byBoYXZlIGZpdmUgbnVtYmVycycpO1xuICB9XG4gIGNvbnN0IGluZmVycmVkU2hhcGUgPSBpbmZlclNoYXBlKHZhbHVlcywgZHR5cGUpO1xuICBpZiAoaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDUgJiYgaW5mZXJyZWRTaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I1ZCgpIHJlcXVpcmVzIHZhbHVlcyB0byBiZSAnICtcbiAgICAgICAgJ251bWJlcltdW11bXVtdW10gb3IgZmxhdC9UeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoID09PSAxICYmIHNoYXBlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I1ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGJlIHByb3ZpZGVkIHdoZW4gYHZhbHVlc2AgJyArXG4gICAgICAgICdhcmUgYSBmbGF0IGFycmF5Jyk7XG4gIH1cbiAgcmV0dXJuIG1ha2VUZW5zb3IodmFsdWVzLCBzaGFwZSwgaW5mZXJyZWRTaGFwZSwgZHR5cGUpIGFzIFRlbnNvcjVEO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-6 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor6d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor6d([[[[[[1],[2]],[[3],[4]]],[[[5],[6]],[[7],[8]]]]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor6d([1, 2, 3, 4, 5, 6, 7, 8], [1, 1, 2, 2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor6d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 6) {\n throw new Error('tensor6d() requires shape to have six numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 6 && inferredShape.length !== 1) {\n throw new Error('tensor6d() requires values to be number[][][][][][] or ' +\n 'flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor6d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n shape = shape ||\n inferredShape;\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yNmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy90ZW5zb3I2ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFvQixFQUNwQixLQUF3RCxFQUN4RCxLQUFnQjtJQUNsQixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtJQUNELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1RCxNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ1gseURBQXlEO1lBQ3pELGtCQUFrQixDQUFDLENBQUM7S0FDekI7SUFDRCxLQUFLLEdBQUcsS0FBSztRQUNULGFBQWlFLENBQUM7SUFDdEUsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFhLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3I2RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7aW5mZXJTaGFwZX0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZTZEfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0RhdGFUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk51bGx9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHttYWtlVGVuc29yfSBmcm9tICcuL3RlbnNvcl9vcHNfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyByYW5rLTYgYHRmLlRlbnNvcmAgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWVzLCBzaGFwZSBhbmQgZHR5cGUuXG4gKlxuICogVGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBgdGYudGVuc29yYCwgYnV0IGluIGdlbmVyYWxcbiAqIHdlIHJlY29tbWVuZCB1c2luZyBgdGYudGVuc29yNmRgIGFzIGl0IG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuXG4gKlxuICogIGBgYGpzXG4gKiAvLyBQYXNzIGEgbmVzdGVkIGFycmF5LlxuICogdGYudGVuc29yNmQoW1tbW1tbMV0sWzJdXSxbWzNdLFs0XV1dLFtbWzVdLFs2XV0sW1s3XSxbOF1dXV1dXSkucHJpbnQoKTtcbiAqIGBgYFxuICogYGBganNcbiAqIC8vIFBhc3MgYSBmbGF0IGFycmF5IGFuZCBzcGVjaWZ5IGEgc2hhcGUuXG4gKiB0Zi50ZW5zb3I2ZChbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0sIFsxLCAxLCAyLCAyLCAyLCAxXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBvZiB0aGUgdGVuc29yLiBDYW4gYmUgbmVzdGVkIGFycmF5IG9mIG51bWJlcnMsXG4gKiAgICAgb3IgYSBmbGF0IGFycmF5LCBvciBhIGBUeXBlZEFycmF5YC5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIHRlbnNvci4gT3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCxcbiAqICAgaXQgaXMgaW5mZXJyZWQgZnJvbSBgdmFsdWVzYC5cbiAqIEBwYXJhbSBkdHlwZSBUaGUgZGF0YSB0eXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ0NyZWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRlbnNvcjZkKFxuICAgIHZhbHVlczogVGVuc29yTGlrZTZELFxuICAgIHNoYXBlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3I2RCB7XG4gIGFzc2VydE5vbk51bGwodmFsdWVzKTtcbiAgaWYgKHNoYXBlICE9IG51bGwgJiYgc2hhcGUubGVuZ3RoICE9PSA2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0ZW5zb3I2ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGhhdmUgc2l4IG51bWJlcnMnKTtcbiAgfVxuICBjb25zdCBpbmZlcnJlZFNoYXBlID0gaW5mZXJTaGFwZSh2YWx1ZXMsIGR0eXBlKTtcbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSA2ICYmIGluZmVycmVkU2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGVuc29yNmQoKSByZXF1aXJlcyB2YWx1ZXMgdG8gYmUgbnVtYmVyW11bXVtdW11bXVtdIG9yICcgK1xuICAgICAgICAnZmxhdC9UeXBlZEFycmF5Jyk7XG4gIH1cbiAgaWYgKGluZmVycmVkU2hhcGUubGVuZ3RoID09PSAxICYmIHNoYXBlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0ZW5zb3I2ZCgpIHJlcXVpcmVzIHNoYXBlIHRvIGJlIHByb3ZpZGVkIHdoZW4gYHZhbHVlc2AgJyArXG4gICAgICAgICdhcmUgYSBmbGF0IGFycmF5Jyk7XG4gIH1cbiAgc2hhcGUgPSBzaGFwZSB8fFxuICAgICAgaW5mZXJyZWRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHJldHVybiBtYWtlVGVuc29yKHZhbHVlcywgc2hhcGUsIGluZmVycmVkU2hhcGUsIGR0eXBlKSBhcyBUZW5zb3I2RDtcbn1cbiJdfQ==","import { computeStrides, sizeFromShape } from '../util';\n/**\n * Check whether updates.shape = indices.shape[:batchDim] +\n * shape[sliceDim:]\n *\n * @param x The input tensor.\n */\nexport function validateUpdateShape(shape, indices, updates) {\n const sliceDim = (indices.rank > 1) ? indices.shape[indices.rank - 1] : 1;\n const batchDim = (indices.rank > 1) ? indices.rank - 1 : 1;\n const shapeError = 'Must have updates.shape = indices.shape[:batchDim] + ' +\n `shape[sliceDim:], got updates.shape: ${updates.shape}` +\n `, indices.shape: ${indices.shape}, shape: ${shape}` +\n `, sliceDim: ${sliceDim}, and batchDim: ${batchDim}.`;\n if (updates.rank < batchDim) {\n throw new Error(shapeError + ` update.rank < ${batchDim}. `);\n }\n if (shape.length < sliceDim + (updates.rank - batchDim)) {\n throw new Error(shapeError +\n ` Output shape length < ${sliceDim + (updates.rank - batchDim)}`);\n }\n if (updates.rank !== batchDim + shape.length - sliceDim) {\n throw new Error(shapeError + ` update.rank != ${batchDim + shape.length - sliceDim}`);\n }\n for (let d = 0; d < batchDim; ++d) {\n if (updates.shape[d] !== indices.shape[d]) {\n throw new Error(shapeError +\n ` updates.shape[${d}] (${updates.shape[d]}) != indices.shape[${d}] (${indices.shape[d]}).`);\n }\n }\n for (let d = 0; d < updates.rank - batchDim; ++d) {\n if (updates.shape[d + batchDim] !== shape[d + sliceDim]) {\n throw new Error(shapeError +\n ` updates.shape[${d + batchDim}] (${updates.shape[d + batchDim]}) != shape[${d + batchDim}] (${shape[d + batchDim]})`);\n }\n }\n}\n/**\n * Validate scatter nd inputs.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n */\nexport function validateInput(updates, indices, shape) {\n if (indices.rank < 1) {\n throw new Error('tf.scatterND() expects the indices to be rank 1 or higher,' +\n ` but the rank was ${indices.rank}.`);\n }\n if (updates.rank < 1) {\n throw new Error('tf.scatterND() expects the updates to be rank 1 or higher,' +\n ` but the rank was ${updates.rank}.`);\n }\n if (indices.dtype !== 'int32') {\n throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${indices.dtype}`);\n }\n if (shape.length < 1) {\n throw new Error(`Output rank must be greater or equal to 1, but got shape: ${shape}`);\n }\n if (shape.length === 0) {\n if (indices.size === 0) {\n throw new Error(`Indices specified for empty output. indices shape: ${indices.shape}`);\n }\n if (updates.size === 0) {\n throw new Error(`Updates specified for empty output. updates shape: ${updates.shape}`);\n }\n }\n validateUpdateShape(shape, indices, updates);\n}\n/**\n * Calculate the shape information for the output.\n *\n * @param update The tensor contains the update values.\n * @param indices The tensor contains the indices for the update values.\n * @param shape The shape of the output tensor.\n *\n * @returns ScatterShapeInfo\n */\nexport function calculateShapes(updates, indices, shape) {\n // Calculate the number of dimensions in indices\n const indicesRank = indices.shape.length;\n const sliceRank = (indicesRank > 1) ? indices.shape[indicesRank - 1] : 1;\n // Calculate the number of elements that make up each slice of our updated\n // tensor. This allows us to work with flattened tensors and copy over whole\n // slices at a time.\n const totalNd = shape.length;\n let sliceSize = 1;\n for (let i = sliceRank; i < totalNd; ++i) {\n sliceSize *= shape[i];\n }\n const safeSliceDim = (sliceRank < 1) ? 1 : sliceRank;\n const numUpdates = sizeFromShape(indices.shape) / safeSliceDim;\n const strides = [...computeStrides(shape.slice(0, sliceRank)), 1];\n const outputSize = sizeFromShape(shape);\n return { sliceRank, numUpdates, sliceSize, strides, outputSize };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9uZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2NhdHRlcl9uZF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0RDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsS0FBZSxFQUFFLE9BQWUsRUFBRSxPQUFlO0lBQ25ELE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNELE1BQU0sVUFBVSxHQUFHLHVEQUF1RDtRQUN0RSx3Q0FBd0MsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUN2RCxvQkFBb0IsT0FBTyxDQUFDLEtBQUssWUFBWSxLQUFLLEVBQUU7UUFDcEQsZUFBZSxRQUFRLG1CQUFtQixRQUFRLEdBQUcsQ0FBQztJQUUxRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLGtCQUFrQixRQUFRLElBQUksQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEVBQUU7UUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDWCxVQUFVO1lB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cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQgeyBUZW5zb3JJbmZvIH0gZnJvbSAnLi4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHVwZGF0ZXMuc2hhcGUgPSBpbmRpY2VzLnNoYXBlWzpiYXRjaERpbV0gK1xuICogc2hhcGVbc2xpY2VEaW06XVxuICpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVVwZGF0ZVNoYXBlKFxuICAgIHNoYXBlOiBudW1iZXJbXSwgaW5kaWNlczogVGVuc29yLCB1cGRhdGVzOiBUZW5zb3IpIHtcbiAgY29uc3Qgc2xpY2VEaW0gPSAoaW5kaWNlcy5yYW5rID4gMSkgPyBpbmRpY2VzLnNoYXBlW2luZGljZXMucmFuayAtIDFdIDogMTtcbiAgY29uc3QgYmF0Y2hEaW0gPSAoaW5kaWNlcy5yYW5rID4gMSkgPyBpbmRpY2VzLnJhbmsgLSAxIDogMTtcblxuICBjb25zdCBzaGFwZUVycm9yID0gJ011c3QgaGF2ZSB1cGRhdGVzLnNoYXBlID0gaW5kaWNlcy5zaGFwZVs6YmF0Y2hEaW1dICsgJyArXG4gICAgICBgc2hhcGVbc2xpY2VEaW06XSwgZ290IHVwZGF0ZXMuc2hhcGU6ICR7dXBkYXRlcy5zaGFwZX1gICtcbiAgICAgIGAsIGluZGljZXMuc2hhcGU6ICR7aW5kaWNlcy5zaGFwZX0sIHNoYXBlOiAke3NoYXBlfWAgK1xuICAgICAgYCwgc2xpY2VEaW06ICR7c2xpY2VEaW19LCBhbmQgYmF0Y2hEaW06ICR7YmF0Y2hEaW19LmA7XG5cbiAgaWYgKHVwZGF0ZXMucmFuayA8IGJhdGNoRGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHNoYXBlRXJyb3IgKyBgIHVwZGF0ZS5yYW5rIDwgJHtiYXRjaERpbX0uIGApO1xuICB9XG4gIGlmIChzaGFwZS5sZW5ndGggPCBzbGljZURpbSArICh1cGRhdGVzLnJhbmsgLSBiYXRjaERpbSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHNoYXBlRXJyb3IgK1xuICAgICAgICBgIE91dHB1dCBzaGFwZSBsZW5ndGggPCAke3NsaWNlRGltICsgKHVwZGF0ZXMucmFuayAtIGJhdGNoRGltKX1gKTtcbiAgfVxuICBpZiAodXBkYXRlcy5yYW5rICE9PSBiYXRjaERpbSArIHNoYXBlLmxlbmd0aCAtIHNsaWNlRGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBzaGFwZUVycm9yICsgYCB1cGRhdGUucmFuayAhPSAke2JhdGNoRGltICsgc2hhcGUubGVuZ3RoIC0gc2xpY2VEaW19YCk7XG4gIH1cbiAgZm9yIChsZXQgZCA9IDA7IGQgPCBiYXRjaERpbTsgKytkKSB7XG4gICAgaWYgKHVwZGF0ZXMuc2hhcGVbZF0gIT09IGluZGljZXMuc2hhcGVbZF0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBzaGFwZUVycm9yICtcbiAgICAgICAgICBgIHVwZGF0ZXMuc2hhcGVbJHtkfV0gKCR7dXBkYXRlcy5zaGFwZVtkXX0pICE9IGluZGljZXMuc2hhcGVbJHtkfV0gKCR7XG4gICAgICAgICAgICAgIGluZGljZXMuc2hhcGVbZF19KS5gKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgZCA9IDA7IGQgPCB1cGRhdGVzLnJhbmsgLSBiYXRjaERpbTsgKytkKSB7XG4gICAgaWYgKHVwZGF0ZXMuc2hhcGVbZCArIGJhdGNoRGltXSAhPT0gc2hhcGVbZCArIHNsaWNlRGltXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIHNoYXBlRXJyb3IgK1xuICAgICAgICAgIGAgdXBkYXRlcy5zaGFwZVske2QgKyBiYXRjaERpbX1dICgke1xuICAgICAgICAgICAgICB1cGRhdGVzLnNoYXBlW2QgKyBiYXRjaERpbV19KSAhPSBzaGFwZVske2QgKyBiYXRjaERpbX1dICgke1xuICAgICAgICAgICAgICBzaGFwZVtkICsgYmF0Y2hEaW1dfSlgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2F0dGVyU2hhcGVJbmZvIHtcbiAgc2xpY2VSYW5rOiBudW1iZXI7XG4gIG51bVVwZGF0ZXM6IG51bWJlcjtcbiAgc2xpY2VTaXplOiBudW1iZXI7XG4gIHN0cmlkZXM6IG51bWJlcltdO1xuICBvdXRwdXRTaXplOiBudW1iZXI7XG59XG4vKipcbiAqIFZhbGlkYXRlIHNjYXR0ZXIgbmQgaW5wdXRzLlxuICpcbiAqIEBwYXJhbSB1cGRhdGUgVGhlIHRlbnNvciBjb250YWlucyB0aGUgdXBkYXRlIHZhbHVlcy5cbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgZm9yIHRoZSB1cGRhdGUgdmFsdWVzLlxuICogQHBhcmFtIHNoYXBlIFRoZSBzaGFwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQoXG4gICAgdXBkYXRlczogVGVuc29yLCBpbmRpY2VzOiBUZW5zb3IsIHNoYXBlOiBudW1iZXJbXSkge1xuICBpZiAoaW5kaWNlcy5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RmLnNjYXR0ZXJORCgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7aW5kaWNlcy5yYW5rfS5gKTtcbiAgfVxuICBpZiAodXBkYXRlcy5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RmLnNjYXR0ZXJORCgpIGV4cGVjdHMgdGhlIHVwZGF0ZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7dXBkYXRlcy5yYW5rfS5gKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5kdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGR0eXBlIG9mICdpbmRpY2VzJyBzaG91bGQgYmUgaW50MzIsIGJ1dCBnb3QgZHR5cGU6ICR7XG4gICAgICAgIGluZGljZXMuZHR5cGV9YCk7XG4gIH1cbiAgaWYgKHNoYXBlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBPdXRwdXQgcmFuayBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMSwgYnV0IGdvdCBzaGFwZTogJHtzaGFwZX1gKTtcbiAgfVxuXG4gIGlmIChzaGFwZS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaW5kaWNlcy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgc3BlY2lmaWVkIGZvciBlbXB0eSBvdXRwdXQuIGluZGljZXMgc2hhcGU6ICR7XG4gICAgICAgICAgaW5kaWNlcy5zaGFwZX1gKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVcGRhdGVzIHNwZWNpZmllZCBmb3IgZW1wdHkgb3V0cHV0LiB1cGRhdGVzIHNoYXBlOiAke1xuICAgICAgICAgIHVwZGF0ZXMuc2hhcGV9YCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVVcGRhdGVTaGFwZShzaGFwZSwgaW5kaWNlcywgdXBkYXRlcyk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzaGFwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gdXBkYXRlIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIHVwZGF0ZSB2YWx1ZXMuXG4gKiBAcGFyYW0gaW5kaWNlcyBUaGUgdGVuc29yIGNvbnRhaW5zIHRoZSBpbmRpY2VzIGZvciB0aGUgdXBkYXRlIHZhbHVlcy5cbiAqIEBwYXJhbSBzaGFwZSBUaGUgc2hhcGUgb2YgdGhlIG91dHB1dCB0ZW5zb3IuXG4gKlxuICogQHJldHVybnMgU2NhdHRlclNoYXBlSW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2hhcGVzKFxuICAgIHVwZGF0ZXM6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8sXG4gICAgc2hhcGU6IG51bWJlcltdKTogU2NhdHRlclNoYXBlSW5mbyB7XG4gIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgaW4gaW5kaWNlc1xuICBjb25zdCBpbmRpY2VzUmFuayA9IGluZGljZXMuc2hhcGUubGVuZ3RoO1xuICBjb25zdCBzbGljZVJhbmsgPSAoaW5kaWNlc1JhbmsgPiAxKSA/IGluZGljZXMuc2hhcGVbaW5kaWNlc1JhbmsgLSAxXSA6IDE7XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwIGVhY2ggc2xpY2Ugb2Ygb3VyIHVwZGF0ZWRcbiAgLy8gdGVuc29yLiBUaGlzIGFsbG93cyB1cyB0byB3b3JrIHdpdGggZmxhdHRlbmVkIHRlbnNvcnMgYW5kIGNvcHkgb3ZlciB3aG9sZVxuICAvLyBzbGljZXMgYXQgYSB0aW1lLlxuICBjb25zdCB0b3RhbE5kID0gc2hhcGUubGVuZ3RoO1xuXG4gIGxldCBzbGljZVNpemUgPSAxO1xuICBmb3IgKGxldCBpID0gc2xpY2VSYW5rOyBpIDwgdG90YWxOZDsgKytpKSB7XG4gICAgc2xpY2VTaXplICo9IHNoYXBlW2ldO1xuICB9XG5cbiAgY29uc3Qgc2FmZVNsaWNlRGltID0gKHNsaWNlUmFuayA8IDEpID8gMSA6IHNsaWNlUmFuaztcbiAgY29uc3QgbnVtVXBkYXRlcyA9IHNpemVGcm9tU2hhcGUoaW5kaWNlcy5zaGFwZSkgLyBzYWZlU2xpY2VEaW07XG5cbiAgY29uc3Qgc3RyaWRlcyA9IFsuLi5jb21wdXRlU3RyaWRlcyhzaGFwZS5zbGljZSgwLCBzbGljZVJhbmspKSwgMV07XG4gIGNvbnN0IG91dHB1dFNpemUgPSBzaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgcmV0dXJuIHtzbGljZVJhbmssIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlcywgb3V0cHV0U2l6ZX07XG59XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { TensorScatterUpdate } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\nimport * as scatter_nd_util from './scatter_nd_util';\n/**\n * Creates a new tensor by applying sparse updates to individual\n * values or slices to the passed in tensor according to\n * indices. This operator is the similar to scatterNd op, except that the\n * udpates are scattered on an existing tensor (as opposed to a zero-tensor).\n *\n * If indices contains duplicates, then we pick the last update for the index.\n *\n * If an out of bound index is found on CPU, an error is returned.\n *\n * Warning: There are some GPU specific semantics for this operation.\n * - If an out of bound index is found, the index is ignored.\n * - The order in which updates are applied is nondeterministic, so the output\n * will be nondeterministic if indices contains duplicates.\n * ```js\n * const shape = [8];\n * const tensor = tf.ones(shape);\n * const indices = tf.tensor2d([4, 3, 1, 7], [4, 1], 'int32');\n * const updates = tf.tensor1d([9, 10, 11, 12]);\n *\n * tf.tensorScatterUpdate(tensor, indices, updates).print();\n * //[1, 11, 1, 10, 9, 1, 1, 12]\n * ```\n *\n * @param tensor A Tensor. Tensor to copy/update.\n * @param indices The tensor contains the indices into the output tensor, must\n * have at least 2 axes: (num_updates, index_depth).\n * @param updates The tensor contains the value for the indices.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction tensorScatterUpdate_(tensor, indices, updates) {\n const $tensor = convertToTensor(tensor, 'tensor', 'tensorScatterupdate');\n const $indices = convertToTensor(indices, 'indices', 'tensorScatterupdate', 'int32');\n const $updates = convertToTensor(updates, 'updates', 'tensorScatterupdate');\n scatter_nd_util.validateInput($updates, $indices, $tensor.shape);\n if ($tensor.dtype !== $updates.dtype) {\n throw new Error(`tensor and updates must have the same dtype, instead they are ${$tensor.dtype} and ${$updates.dtype}.`);\n }\n const inputs = {\n tensor: $tensor,\n indices: $indices,\n updates: $updates\n };\n const attrs = {};\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(TensorScatterUpdate, inputs, attrs);\n}\nexport const tensorScatterUpdate = op({ tensorScatterUpdate_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3NjYXR0ZXJfdXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdGVuc29yX3NjYXR0ZXJfdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLGlCQUFpQixDQUFDO0FBSXpHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQVMsb0JBQW9CLENBQ3pCLE1BQTRCLEVBQUUsT0FBMEIsRUFDeEQsT0FBMEI7SUFDNUIsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN6RSxNQUFNLFFBQVEsR0FDVixlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FDWCxpRUFDSSxPQUFPLENBQUMsS0FBSyxRQUFRLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0lBRUQsTUFBTSxNQUFNLEdBQThCO1FBQ3hDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsT0FBTyxFQUFFLFFBQVE7UUFDakIsT0FBTyxFQUFFLFFBQVE7S0FDbEIsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUE2QixFQUFFLENBQUM7SUFFM0MsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixtQkFBbUIsRUFBRSxNQUFtQyxFQUN4RCxLQUFnQyxDQUFjLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvclNjYXR0ZXJVcGRhdGUsIFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRycywgVGVuc29yU2NhdHRlclVwZGF0ZUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFRlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0ICogYXMgc2NhdHRlcl9uZF91dGlsIGZyb20gJy4vc2NhdHRlcl9uZF91dGlsJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRlbnNvciBieSBhcHBseWluZyBzcGFyc2UgdXBkYXRlcyB0byBpbmRpdmlkdWFsXG4gKiB2YWx1ZXMgb3Igc2xpY2VzIHRvIHRoZSBwYXNzZWQgaW4gdGVuc29yIGFjY29yZGluZyB0b1xuICogaW5kaWNlcy4gVGhpcyBvcGVyYXRvciBpcyB0aGUgc2ltaWxhciB0byBzY2F0dGVyTmQgb3AsIGV4Y2VwdCB0aGF0IHRoZVxuICogdWRwYXRlcyBhcmUgc2NhdHRlcmVkIG9uIGFuIGV4aXN0aW5nIHRlbnNvciAoYXMgb3Bwb3NlZCB0byBhIHplcm8tdGVuc29yKS5cbiAqXG4gKiBJZiBpbmRpY2VzIGNvbnRhaW5zIGR1cGxpY2F0ZXMsIHRoZW4gd2UgcGljayB0aGUgbGFzdCB1cGRhdGUgZm9yIHRoZSBpbmRleC5cbiAqXG4gKiBJZiBhbiBvdXQgb2YgYm91bmQgaW5kZXggaXMgZm91bmQgb24gQ1BVLCBhbiBlcnJvciBpcyByZXR1cm5lZC5cbiAqXG4gKiBXYXJuaW5nOiBUaGVyZSBhcmUgc29tZSBHUFUgc3BlY2lmaWMgc2VtYW50aWNzIGZvciB0aGlzIG9wZXJhdGlvbi5cbiAqICAtIElmIGFuIG91dCBvZiBib3VuZCBpbmRleCBpcyBmb3VuZCwgdGhlIGluZGV4IGlzIGlnbm9yZWQuXG4gKiAgLSBUaGUgb3JkZXIgaW4gd2hpY2ggdXBkYXRlcyBhcmUgYXBwbGllZCBpcyBub25kZXRlcm1pbmlzdGljLCBzbyB0aGUgb3V0cHV0XG4gKiB3aWxsIGJlIG5vbmRldGVybWluaXN0aWMgaWYgaW5kaWNlcyBjb250YWlucyBkdXBsaWNhdGVzLlxuICogYGBganNcbiAqIGNvbnN0IHNoYXBlID0gWzhdO1xuICogY29uc3QgdGVuc29yID0gdGYub25lcyhzaGFwZSk7XG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMmQoWzQsIDMsIDEsIDddLCBbNCwgMV0sICdpbnQzMicpO1xuICogY29uc3QgdXBkYXRlcyA9IHRmLnRlbnNvcjFkKFs5LCAxMCwgMTEsIDEyXSk7XG4gKlxuICogdGYudGVuc29yU2NhdHRlclVwZGF0ZSh0ZW5zb3IsIGluZGljZXMsIHVwZGF0ZXMpLnByaW50KCk7XG4gKiAgICAvL1sxLCAxMSwgMSwgMTAsIDksIDEsIDEsIDEyXVxuICogYGBgXG4gKlxuICogQHBhcmFtIHRlbnNvciBBIFRlbnNvci4gVGVuc29yIHRvIGNvcHkvdXBkYXRlLlxuICogQHBhcmFtIGluZGljZXMgVGhlIHRlbnNvciBjb250YWlucyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBvdXRwdXQgdGVuc29yLCBtdXN0XG4gKiAgICAgaGF2ZSBhdCBsZWFzdCAyIGF4ZXM6IChudW1fdXBkYXRlcywgaW5kZXhfZGVwdGgpLlxuICogQHBhcmFtIHVwZGF0ZXMgVGhlIHRlbnNvciBjb250YWlucyB0aGUgdmFsdWUgZm9yIHRoZSBpbmRpY2VzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiB0ZW5zb3JTY2F0dGVyVXBkYXRlXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgdGVuc29yOiBUZW5zb3I8Uj58VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgdXBkYXRlczogVGVuc29yfFRlbnNvckxpa2UpOiBUZW5zb3I8Uj4ge1xuICBjb25zdCAkdGVuc29yID0gY29udmVydFRvVGVuc29yKHRlbnNvciwgJ3RlbnNvcicsICd0ZW5zb3JTY2F0dGVydXBkYXRlJyk7XG4gIGNvbnN0ICRpbmRpY2VzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICd0ZW5zb3JTY2F0dGVydXBkYXRlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICR1cGRhdGVzID0gY29udmVydFRvVGVuc29yKHVwZGF0ZXMsICd1cGRhdGVzJywgJ3RlbnNvclNjYXR0ZXJ1cGRhdGUnKTtcbiAgc2NhdHRlcl9uZF91dGlsLnZhbGlkYXRlSW5wdXQoJHVwZGF0ZXMsICRpbmRpY2VzLCAkdGVuc29yLnNoYXBlKTtcbiAgaWYgKCR0ZW5zb3IuZHR5cGUgIT09ICR1cGRhdGVzLmR0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdGVuc29yIGFuZCB1cGRhdGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSwgaW5zdGVhZCB0aGV5IGFyZSAke1xuICAgICAgICAgICAgJHRlbnNvci5kdHlwZX0gYW5kICR7JHVwZGF0ZXMuZHR5cGV9LmApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBUZW5zb3JTY2F0dGVyVXBkYXRlSW5wdXRzID0ge1xuICAgIHRlbnNvcjogJHRlbnNvcixcbiAgICBpbmRpY2VzOiAkaW5kaWNlcyxcbiAgICB1cGRhdGVzOiAkdXBkYXRlc1xuICB9O1xuICBjb25zdCBhdHRyczogVGVuc29yU2NhdHRlclVwZGF0ZUF0dHJzID0ge307XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICBUZW5zb3JTY2F0dGVyVXBkYXRlLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yPFI+O1xufVxuXG5leHBvcnQgY29uc3QgdGVuc29yU2NhdHRlclVwZGF0ZSA9IG9wKHt0ZW5zb3JTY2F0dGVyVXBkYXRlX30pO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { TopK } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Finds the values and indices of the `k` largest entries along the last\n * dimension.\n *\n * If the input is a vector (rank=1), finds the k largest entries in the vector\n * and outputs their values and indices as vectors. Thus values[j] is the j-th\n * largest entry in input, and its index is indices[j].\n * For higher rank inputs, computes the top k entries along the last dimension.\n *\n * If two elements are equal, the lower-index element appears first.\n *\n * ```js\n * const a = tf.tensor2d([[1, 5], [4, 3]]);\n * const {values, indices} = tf.topk(a);\n * values.print();\n * indices.print();\n * ```\n * @param x 1-D or higher `tf.Tensor` with last dimension being at least `k`.\n * @param k Number of top elements to look for along the last dimension.\n * @param sorted If true, the resulting `k` elements will be sorted by the\n * values in descending order.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction topk_(x, k = 1, sorted = true) {\n const $x = convertToTensor(x, 'x', 'topk');\n if ($x.rank === 0) {\n throw new Error('topk() expects the input to be of rank 1 or higher');\n }\n const lastDim = $x.shape[$x.shape.length - 1];\n if (k < 0) {\n throw new Error(`'k' passed to topk() must be >= 0 but got ${k}`);\n }\n if (k > lastDim) {\n throw new Error(`'k' passed to topk() must be <= the last dimension (${lastDim}) ` +\n `but got ${k}`);\n }\n const inputs = { x: $x };\n const attrs = { k, sorted };\n const [values, indices] = ENGINE.runKernel(TopK, inputs, attrs);\n return { values, indices };\n}\nexport const topk = /* @__PURE__ */ op({ topk_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9way5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RvcGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUF3QixNQUFNLGlCQUFpQixDQUFDO0FBSTVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUduRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQVMsS0FBSyxDQUNWLENBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDWCx1REFBdUQsT0FBTyxJQUFJO1lBQ2xFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNyQjtJQUVELE1BQU0sTUFBTSxHQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFjLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRXJDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDdEMsSUFBSSxFQUFFLE1BQW1DLEVBQ3pDLEtBQWdDLENBQVcsQ0FBQztJQUVoRCxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtUb3BLLCBUb3BLQXR0cnMsIFRvcEtJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBGaW5kcyB0aGUgdmFsdWVzIGFuZCBpbmRpY2VzIG9mIHRoZSBga2AgbGFyZ2VzdCBlbnRyaWVzIGFsb25nIHRoZSBsYXN0XG4gKiBkaW1lbnNpb24uXG4gKlxuICogSWYgdGhlIGlucHV0IGlzIGEgdmVjdG9yIChyYW5rPTEpLCBmaW5kcyB0aGUgayBsYXJnZXN0IGVudHJpZXMgaW4gdGhlIHZlY3RvclxuICogYW5kIG91dHB1dHMgdGhlaXIgdmFsdWVzIGFuZCBpbmRpY2VzIGFzIHZlY3RvcnMuIFRodXMgdmFsdWVzW2pdIGlzIHRoZSBqLXRoXG4gKiBsYXJnZXN0IGVudHJ5IGluIGlucHV0LCBhbmQgaXRzIGluZGV4IGlzIGluZGljZXNbal0uXG4gKiBGb3IgaGlnaGVyIHJhbmsgaW5wdXRzLCBjb21wdXRlcyB0aGUgdG9wIGsgZW50cmllcyBhbG9uZyB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKlxuICogSWYgdHdvIGVsZW1lbnRzIGFyZSBlcXVhbCwgdGhlIGxvd2VyLWluZGV4IGVsZW1lbnQgYXBwZWFycyBmaXJzdC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYSA9IHRmLnRlbnNvcjJkKFtbMSwgNV0sIFs0LCAzXV0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi50b3BrKGEpO1xuICogdmFsdWVzLnByaW50KCk7XG4gKiBpbmRpY2VzLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSB4IDEtRCBvciBoaWdoZXIgYHRmLlRlbnNvcmAgd2l0aCBsYXN0IGRpbWVuc2lvbiBiZWluZyBhdCBsZWFzdCBga2AuXG4gKiBAcGFyYW0gayBOdW1iZXIgb2YgdG9wIGVsZW1lbnRzIHRvIGxvb2sgZm9yIGFsb25nIHRoZSBsYXN0IGRpbWVuc2lvbi5cbiAqIEBwYXJhbSBzb3J0ZWQgSWYgdHJ1ZSwgdGhlIHJlc3VsdGluZyBga2AgZWxlbWVudHMgd2lsbCBiZSBzb3J0ZWQgYnkgdGhlXG4gKiAgICAgdmFsdWVzIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnRXZhbHVhdGlvbid9XG4gKi9cbmZ1bmN0aW9uIHRvcGtfPFQgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHg6IFR8VGVuc29yTGlrZSwgayA9IDEsIHNvcnRlZCA9IHRydWUpOiB7dmFsdWVzOiBULCBpbmRpY2VzOiBUfSB7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ3RvcGsnKTtcbiAgaWYgKCR4LnJhbmsgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvcGsoKSBleHBlY3RzIHRoZSBpbnB1dCB0byBiZSBvZiByYW5rIDEgb3IgaGlnaGVyJyk7XG4gIH1cbiAgY29uc3QgbGFzdERpbSA9ICR4LnNoYXBlWyR4LnNoYXBlLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChrIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJ2snIHBhc3NlZCB0byB0b3BrKCkgbXVzdCBiZSA+PSAwIGJ1dCBnb3QgJHtrfWApO1xuICB9XG5cbiAgaWYgKGsgPiBsYXN0RGltKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJ2snIHBhc3NlZCB0byB0b3BrKCkgbXVzdCBiZSA8PSB0aGUgbGFzdCBkaW1lbnNpb24gKCR7bGFzdERpbX0pIGAgK1xuICAgICAgICBgYnV0IGdvdCAke2t9YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFRvcEtJbnB1dHMgPSB7eDogJHh9O1xuICBjb25zdCBhdHRyczogVG9wS0F0dHJzID0ge2ssIHNvcnRlZH07XG5cbiAgY29uc3QgW3ZhbHVlcywgaW5kaWNlc10gPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVG9wSywgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgW1QsIFRdO1xuXG4gIHJldHVybiB7dmFsdWVzLCBpbmRpY2VzfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvcGsgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3RvcGtffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { buffer } from './buffer';\nimport { op } from './operation';\nimport { MPRandGauss } from './rand_util';\n/**\n * Creates a `tf.Tensor` with values sampled from a truncated normal\n * distribution.\n *\n * ```js\n * tf.truncatedNormal([2, 2]).print();\n * ```\n *\n * The generated values follow a normal distribution with specified mean and\n * standard deviation, except that values whose magnitude is more than 2\n * standard deviations from the mean are dropped and re-picked.\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param mean The mean of the normal distribution.\n * @param stdDev The standard deviation of the normal distribution.\n * @param dtype The data type of the output tensor.\n * @param seed The seed for the random number generator.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction truncatedNormal_(shape, mean = 0, stdDev = 1, dtype, seed) {\n assertNonNegativeIntegerDimensions(shape);\n if (dtype != null && dtype === 'bool') {\n throw new Error(`Unsupported data type $ { dtype }`);\n }\n const randGauss = new MPRandGauss(mean, stdDev, dtype, true /* truncated */, seed);\n const res = buffer(shape, dtype);\n for (let i = 0; i < res.values.length; i++) {\n res.values[i] = randGauss.nextValue();\n }\n return res.toTensor();\n}\nexport const truncatedNormal = /* @__PURE__ */ op({ truncatedNormal_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGVkX25vcm1hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3RydW5jYXRlZF9ub3JtYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDckIsS0FBa0IsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBeUIsRUFDbkUsSUFBYTtJQUNmLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSyxLQUFrQixLQUFLLE1BQU0sRUFBRTtRQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDdEQ7SUFDRCxNQUFNLFNBQVMsR0FDWCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ3ZDO0lBQ0QsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7RGF0YVR5cGUsIFJhbmssIFNoYXBlTWFwfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7YnVmZmVyfSBmcm9tICcuL2J1ZmZlcic7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge01QUmFuZEdhdXNzfSBmcm9tICcuL3JhbmRfdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIHdpdGggdmFsdWVzIHNhbXBsZWQgZnJvbSBhIHRydW5jYXRlZCBub3JtYWxcbiAqIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBgYGBqc1xuICogdGYudHJ1bmNhdGVkTm9ybWFsKFsyLCAyXSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgdmFsdWVzIGZvbGxvdyBhIG5vcm1hbCBkaXN0cmlidXRpb24gd2l0aCBzcGVjaWZpZWQgbWVhbiBhbmRcbiAqIHN0YW5kYXJkIGRldmlhdGlvbiwgZXhjZXB0IHRoYXQgdmFsdWVzIHdob3NlIG1hZ25pdHVkZSBpcyBtb3JlIHRoYW4gMlxuICogc3RhbmRhcmQgZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuIGFyZSBkcm9wcGVkIGFuZCByZS1waWNrZWQuXG4gKlxuICogQHBhcmFtIHNoYXBlIEFuIGFycmF5IG9mIGludGVnZXJzIGRlZmluaW5nIHRoZSBvdXRwdXQgdGVuc29yIHNoYXBlLlxuICogQHBhcmFtIG1lYW4gVGhlIG1lYW4gb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gc3RkRGV2IFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24uXG4gKiBAcGFyYW0gZHR5cGUgVGhlIGRhdGEgdHlwZSBvZiB0aGUgb3V0cHV0IHRlbnNvci5cbiAqIEBwYXJhbSBzZWVkIFRoZSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnQ3JlYXRpb24nfVxuICovXG5mdW5jdGlvbiB0cnVuY2F0ZWROb3JtYWxfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBzaGFwZTogU2hhcGVNYXBbUl0sIG1lYW4gPSAwLCBzdGREZXYgPSAxLCBkdHlwZT86ICdmbG9hdDMyJ3wnaW50MzInLFxuICAgIHNlZWQ/OiBudW1iZXIpOiBUZW5zb3I8Uj4ge1xuICBhc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zKHNoYXBlKTtcbiAgaWYgKGR0eXBlICE9IG51bGwgJiYgKGR0eXBlIGFzIERhdGFUeXBlKSA9PT0gJ2Jvb2wnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgJCB7IGR0eXBlIH1gKTtcbiAgfVxuICBjb25zdCByYW5kR2F1c3MgPVxuICAgICAgbmV3IE1QUmFuZEdhdXNzKG1lYW4sIHN0ZERldiwgZHR5cGUsIHRydWUgLyogdHJ1bmNhdGVkICovLCBzZWVkKTtcbiAgY29uc3QgcmVzID0gYnVmZmVyKHNoYXBlLCBkdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy52YWx1ZXNbaV0gPSByYW5kR2F1c3MubmV4dFZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcy50b1RlbnNvcigpO1xufVxuXG5leHBvcnQgY29uc3QgdHJ1bmNhdGVkTm9ybWFsID0gLyogQF9fUFVSRV9fICovIG9wKHt0cnVuY2F0ZWROb3JtYWxffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Unique } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert } from '../util';\nimport { op } from './operation';\n/**\n * Finds unique elements along an axis of a tensor.\n *\n * It returns a tensor `values` containing all of the unique elements along the\n * `axis` of the given tensor `x` in the same order that they occur along the\n * `axis` in `x`; `x` does not need to be sorted. It also returns a tensor\n * `indices` the same size as the number of the elements in `x` along the `axis`\n * dimension. It contains the index in the unique output `values`.\n *\n * ```js\n * // A 1-D tensor\n * const a = tf.tensor1d([1, 1, 2, 4, 4, 4, 7, 8, 8]);\n * const {values, indices} = tf.unique(a);\n * values.print(); // [1, 2, 4, 7, 8,]\n * indices.print(); // [0, 0, 1, 2, 2, 2, 3, 4, 4]\n * ```\n *\n * ```js\n * // A 2-D tensor with axis=0\n * //\n * // 'a' is: [[1, 0, 0],\n * // [1, 0, 0],\n * // [2, 0, 0]]\n * const a = tf.tensor2d([[1, 0, 0], [1, 0, 0], [2, 0, 0]]);\n * const {values, indices} = tf.unique(a, 0)\n * values.print(); // [[1, 0, 0],\n * // [2, 0, 0]]\n * indices.print(); // [0, 0, 1]\n * ```\n *\n * ```js\n * // A 2-D tensor with axis=1\n * //\n * // 'a' is: [[1, 0, 0],\n * // [1, 0, 0],\n * // [2, 0, 0]]\n * const a = tf.tensor2d([[1, 0, 0], [1, 0, 0], [2, 0, 0]]);\n * const {values, indices} = tf.unique(a, 1)\n * values.print(); // [[1, 0],\n * // [1, 0],\n * // [2, 0]]\n * indices.print(); // [0, 1, 1]\n * ```\n * @param x A tensor (int32, string, bool).\n * @param axis The axis of the tensor to find the unique elements.\n * @returns [uniqueElements, indices] (see above for details)\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nfunction unique_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'unique', 'string_or_numeric');\n assert($x.rank > 0, () => 'The input tensor must be at least 1D');\n const inputs = { x: $x };\n const attrs = { axis };\n const [values, indices] = ENGINE.runKernel(Unique, inputs, attrs);\n return { values, indices };\n}\nexport const unique = /* @__PURE__ */ op({ unique_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUUvQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnREc7QUFDSCxTQUFTLE9BQU8sQ0FDWixDQUFlLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFFbEUsTUFBTSxNQUFNLEdBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFnQixFQUFDLElBQUksRUFBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDdEMsTUFBTSxFQUFFLE1BQW1DLEVBQzNDLEtBQWdDLENBQWtCLENBQUM7SUFDdkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7VW5pcXVlLCBVbmlxdWVBdHRycywgVW5pcXVlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEZpbmRzIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyBhbiBheGlzIG9mIGEgdGVuc29yLlxuICpcbiAqIEl0IHJldHVybnMgYSB0ZW5zb3IgYHZhbHVlc2AgY29udGFpbmluZyBhbGwgb2YgdGhlIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyB0aGVcbiAqIGBheGlzYCBvZiB0aGUgZ2l2ZW4gdGVuc29yIGB4YCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgb2NjdXIgYWxvbmcgdGhlXG4gKiBgYXhpc2AgaW4gYHhgOyBgeGAgZG9lcyBub3QgbmVlZCB0byBiZSBzb3J0ZWQuIEl0IGFsc28gcmV0dXJucyBhIHRlbnNvclxuICogYGluZGljZXNgIHRoZSBzYW1lIHNpemUgYXMgdGhlIG51bWJlciBvZiB0aGUgZWxlbWVudHMgaW4gYHhgIGFsb25nIHRoZSBgYXhpc2BcbiAqIGRpbWVuc2lvbi4gSXQgY29udGFpbnMgdGhlIGluZGV4IGluIHRoZSB1bmlxdWUgb3V0cHV0IGB2YWx1ZXNgLlxuICpcbiAqIGBgYGpzXG4gKiAvLyBBIDEtRCB0ZW5zb3JcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IxZChbMSwgMSwgMiwgNCwgNCwgNCwgNywgOCwgOF0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi51bmlxdWUoYSk7XG4gKiB2YWx1ZXMucHJpbnQoKTsgICAvLyBbMSwgMiwgNCwgNywgOCxdXG4gKiBpbmRpY2VzLnByaW50KCk7ICAvLyBbMCwgMCwgMSwgMiwgMiwgMiwgMywgNCwgNF1cbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBBIDItRCB0ZW5zb3Igd2l0aCBheGlzPTBcbiAqIC8vXG4gKiAvLyAnYScgaXM6IFtbMSwgMCwgMF0sXG4gKiAvLyAgICAgICAgICBbMSwgMCwgMF0sXG4gKiAvLyAgICAgICAgICBbMiwgMCwgMF1dXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoW1sxLCAwLCAwXSwgWzEsIDAsIDBdLCBbMiwgMCwgMF1dKTtcbiAqIGNvbnN0IHt2YWx1ZXMsIGluZGljZXN9ID0gdGYudW5pcXVlKGEsIDApXG4gKiB2YWx1ZXMucHJpbnQoKTsgICAvLyBbWzEsIDAsIDBdLFxuICogICAgICAgICAgICAgICAgICAgLy8gIFsyLCAwLCAwXV1cbiAqIGluZGljZXMucHJpbnQoKTsgIC8vIFswLCAwLCAxXVxuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIEEgMi1EIHRlbnNvciB3aXRoIGF4aXM9MVxuICogLy9cbiAqIC8vICdhJyBpczogW1sxLCAwLCAwXSxcbiAqIC8vICAgICAgICAgIFsxLCAwLCAwXSxcbiAqIC8vICAgICAgICAgIFsyLCAwLCAwXV1cbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbWzEsIDAsIDBdLCBbMSwgMCwgMF0sIFsyLCAwLCAwXV0pO1xuICogY29uc3Qge3ZhbHVlcywgaW5kaWNlc30gPSB0Zi51bmlxdWUoYSwgMSlcbiAqIHZhbHVlcy5wcmludCgpOyAgIC8vIFtbMSwgMF0sXG4gKiAgICAgICAgICAgICAgICAgICAvLyAgWzEsIDBdLFxuICogICAgICAgICAgICAgICAgICAgLy8gIFsyLCAwXV1cbiAqIGluZGljZXMucHJpbnQoKTsgIC8vIFswLCAxLCAxXVxuICogYGBgXG4gKiBAcGFyYW0geCBBIHRlbnNvciAoaW50MzIsIHN0cmluZywgYm9vbCkuXG4gKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyBvZiB0aGUgdGVuc29yIHRvIGZpbmQgdGhlIHVuaXF1ZSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFt1bmlxdWVFbGVtZW50cywgaW5kaWNlc10gKHNlZSBhYm92ZSBmb3IgZGV0YWlscylcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuZnVuY3Rpb24gdW5pcXVlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIGF4aXMgPSAwKToge3ZhbHVlczogVCwgaW5kaWNlczogVGVuc29yMUR9IHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5pcXVlJywgJ3N0cmluZ19vcl9udW1lcmljJyk7XG4gIGFzc2VydCgkeC5yYW5rID4gMCwgKCkgPT4gJ1RoZSBpbnB1dCB0ZW5zb3IgbXVzdCBiZSBhdCBsZWFzdCAxRCcpO1xuXG4gIGNvbnN0IGlucHV0czogVW5pcXVlSW5wdXRzID0ge3g6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFVuaXF1ZUF0dHJzID0ge2F4aXN9O1xuICBjb25zdCBbdmFsdWVzLCBpbmRpY2VzXSA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBVbmlxdWUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFtULCBUZW5zb3IxRF07XG4gIHJldHVybiB7dmFsdWVzLCBpbmRpY2VzfTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuaXF1ZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dW5pcXVlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { UnsortedSegmentSum } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert, isInt } from '../util';\nimport { op } from './operation';\n/**\n * Computes the sum along segments of a `tf.Tensor`.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 3, 4]);\n * const segmentIds = tf.tensor1d([1, 2, 0, 1], 'int32');\n * const numSegments = 3;\n *\n * x.unsortedSegmentSum(segmentIds, numSegments).print()\n * //or tf.unsortedSegmentSum(x, segmentIds, numSegments)\n * ```\n * @param x The `tf.Tensor` that will be summed along its segments.\n * @param segmentIds A `tf.Tensor1D` whose rank is equal to the rank of `x`'s\n * dimension along the `axis`. Maps each element of `x` to a segment.\n * @param numSegments The number of distinct `segmentIds`.\n *\n * @doc {heading: 'Operations', subheading: 'Segment'}\n */\nfunction unsortedSegmentSum_(x, segmentIds, numSegments) {\n const $x = convertToTensor(x, 'x', 'unsortedSegmentSum');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'unsortedSegmentSum', 'int32');\n assert(isInt(numSegments), () => 'numSegments must be of dtype int');\n const inputs = { x: $x, segmentIds: $segmentIds };\n const attrs = { numSegments };\n return ENGINE.runKernel(UnsortedSegmentSum, inputs, attrs);\n}\nexport const unsortedSegmentSum = /* @__PURE__ */ op({ unsortedSegmentSum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zb3J0ZWRfc2VnbWVudF9zdW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy91bnNvcnRlZF9zZWdtZW50X3N1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxrQkFBa0IsRUFBb0QsTUFBTSxpQkFBaUIsQ0FBQztBQUl0RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLG1CQUFtQixDQUN4QixDQUFlLEVBQUUsVUFBK0IsRUFBRSxXQUFtQjtJQUN2RSxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUVyRSxNQUFNLE1BQU0sR0FBNkIsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUMxRSxNQUFNLEtBQUssR0FBNEIsRUFBQyxXQUFXLEVBQUMsQ0FBQztJQUVyRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLGtCQUFrQixFQUFFLE1BQW1DLEVBQ3ZELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG1CQUFtQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1Vuc29ydGVkU2VnbWVudFN1bSwgVW5zb3J0ZWRTZWdtZW50U3VtQXR0cnMsIFVuc29ydGVkU2VnbWVudFN1bUlucHV0c30gZnJvbSAnLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydCwgaXNJbnR9IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHN1bSBhbG9uZyBzZWdtZW50cyBvZiBhIGB0Zi5UZW5zb3JgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDMsIDRdKTtcbiAqIGNvbnN0IHNlZ21lbnRJZHMgPSB0Zi50ZW5zb3IxZChbMSwgMiwgMCwgMV0sICdpbnQzMicpO1xuICogY29uc3QgbnVtU2VnbWVudHMgPSAzO1xuICpcbiAqIHgudW5zb3J0ZWRTZWdtZW50U3VtKHNlZ21lbnRJZHMsIG51bVNlZ21lbnRzKS5wcmludCgpXG4gKiAvL29yIHRmLnVuc29ydGVkU2VnbWVudFN1bSh4LCBzZWdtZW50SWRzLCBudW1TZWdtZW50cylcbiAqIGBgYFxuICogQHBhcmFtIHggVGhlIGB0Zi5UZW5zb3JgIHRoYXQgd2lsbCBiZSBzdW1tZWQgYWxvbmcgaXRzIHNlZ21lbnRzLlxuICogQHBhcmFtIHNlZ21lbnRJZHMgQSBgdGYuVGVuc29yMURgIHdob3NlIHJhbmsgaXMgZXF1YWwgdG8gdGhlIHJhbmsgb2YgYHhgJ3NcbiAqIGRpbWVuc2lvbiBhbG9uZyB0aGUgYGF4aXNgLiAgTWFwcyBlYWNoIGVsZW1lbnQgb2YgYHhgIHRvIGEgc2VnbWVudC5cbiAqIEBwYXJhbSBudW1TZWdtZW50cyBUaGUgbnVtYmVyIG9mIGRpc3RpbmN0IGBzZWdtZW50SWRzYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTZWdtZW50J31cbiAqL1xuZnVuY3Rpb24gdW5zb3J0ZWRTZWdtZW50U3VtXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIHNlZ21lbnRJZHM6IFRlbnNvcjFEfFRlbnNvckxpa2UsIG51bVNlZ21lbnRzOiBudW1iZXIpOiBUIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5zb3J0ZWRTZWdtZW50U3VtJyk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzZWdtZW50SWRzLCAnc2VnbWVudElkcycsICd1bnNvcnRlZFNlZ21lbnRTdW0nLCAnaW50MzInKTtcbiAgYXNzZXJ0KGlzSW50KG51bVNlZ21lbnRzKSwgKCkgPT4gJ251bVNlZ21lbnRzIG11c3QgYmUgb2YgZHR5cGUgaW50Jyk7XG5cbiAgY29uc3QgaW5wdXRzOiBVbnNvcnRlZFNlZ21lbnRTdW1JbnB1dHMgPSB7eDogJHgsIHNlZ21lbnRJZHM6ICRzZWdtZW50SWRzfTtcbiAgY29uc3QgYXR0cnM6IFVuc29ydGVkU2VnbWVudFN1bUF0dHJzID0ge251bVNlZ21lbnRzfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFVuc29ydGVkU2VnbWVudFN1bSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCB1bnNvcnRlZFNlZ21lbnRTdW0gPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Vuc29ydGVkU2VnbWVudFN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Unpack } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Unstacks a `tf.Tensor` of rank-`R` into a list of rank-`(R-1)` `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * tf.unstack(a).forEach(tensor => tensor.print());\n * ```\n *\n * @param x A tensor object.\n * @param axis The axis to unstack along. Defaults to 0 (the first dim).\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nfunction unstack_(x, axis = 0) {\n const $x = convertToTensor(x, 'x', 'unstack', 'string_or_numeric');\n util.assert(axis >= -$x.shape.length && axis < $x.shape.length, () => `Axis = ${axis} is not in [-${$x.shape.length}, ${$x.shape.length})`);\n const inputs = { value: $x };\n const attrs = { axis };\n return ENGINE.runKernel(Unpack, inputs, attrs);\n}\nexport const unstack = /* @__PURE__ */ op({ unstack_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3Vuc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUE0QixNQUFNLGlCQUFpQixDQUFDO0FBSWxFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxDQUFvQixFQUFFLElBQUksR0FBRyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxNQUFNLENBQ1AsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNsRCxHQUFHLEVBQUUsQ0FDRCxVQUFVLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUU5RSxNQUFNLE1BQU0sR0FBaUIsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWdCLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixNQUFNLEVBQUUsTUFBbUMsRUFDM0MsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtVbnBhY2ssIFVucGFja0F0dHJzLCBVbnBhY2tJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5cbi8qKlxuICogVW5zdGFja3MgYSBgdGYuVGVuc29yYCBvZiByYW5rLWBSYCBpbnRvIGEgbGlzdCBvZiByYW5rLWAoUi0xKWAgYHRmLlRlbnNvcmBzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDRdLCBbMiwgMl0pO1xuICpcbiAqIHRmLnVuc3RhY2soYSkuZm9yRWFjaCh0ZW5zb3IgPT4gdGVuc29yLnByaW50KCkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggQSB0ZW5zb3Igb2JqZWN0LlxuICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gdW5zdGFjayBhbG9uZy4gRGVmYXVsdHMgdG8gMCAodGhlIGZpcnN0IGRpbSkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RlbnNvcnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIHVuc3RhY2tfKHg6IFRlbnNvcnxUZW5zb3JMaWtlLCBheGlzID0gMCk6IFRlbnNvcltdIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAndW5zdGFjaycsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGF4aXMgPj0gLSR4LnNoYXBlLmxlbmd0aCAmJiBheGlzIDwgJHguc2hhcGUubGVuZ3RoLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgQXhpcyA9ICR7YXhpc30gaXMgbm90IGluIFstJHskeC5zaGFwZS5sZW5ndGh9LCAkeyR4LnNoYXBlLmxlbmd0aH0pYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBVbnBhY2tJbnB1dHMgPSB7dmFsdWU6ICR4fTtcbiAgY29uc3QgYXR0cnM6IFVucGFja0F0dHJzID0ge2F4aXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVW5wYWNrLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVuc3RhY2sgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Vuc3RhY2tffSk7XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { searchSorted } from './search_sorted';\n/**\n * Searches for where a value would go in a sorted sequence.\n *\n * This is not a method for checking containment (like javascript in).\n *\n * The typical use case for this operation is \"binning\", \"bucketing\", or\n * \"discretizing\". The values are assigned to bucket-indices based on the edges\n * listed in 'sortedSequence'. This operation returns the bucket-index for each\n * value.\n *\n * The index returned corresponds to the first edge greater than the value.\n *\n * The axis is not settable for this operation. It always operates on the\n * innermost dimension (axis=-1). The operation will accept any number of outer\n * dimensions.\n *\n * Note: This operation assumes that 'upperBound' is sorted along the\n * innermost axis, maybe using 'sort(..., axis=-1)'. If the sequence is not\n * sorted no error is raised and the content of the returned tensor is not well\n * defined.\n *\n * ```js\n * const seq = tf.tensor1d([0, 3, 9, 10, 10]);\n * const values = tf.tensor1d([0, 4, 10]);\n * const result = tf.upperBound(seq, values);\n * result.print(); // [1, 2, 5]\n * ```\n * @param sortedSequence: N-D. Sorted sequence.\n * @param values: N-D. Search values.\n * @return An N-D int32 tensor the size of values containing the result of\n * applying upper bound to each value. The result is not a global index to\n * the entire Tensor, but the index in the last dimension.\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function upperBound(sortedSequence, values) {\n return searchSorted(sortedSequence, values, 'right');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBwZXJfYm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy91cHBlcl9ib3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3RCLGNBQWlDLEVBQUUsTUFBeUI7SUFDOUQsT0FBTyxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtzZWFyY2hTb3J0ZWR9IGZyb20gJy4vc2VhcmNoX3NvcnRlZCc7XG5cbi8qKlxuICogU2VhcmNoZXMgZm9yIHdoZXJlIGEgdmFsdWUgd291bGQgZ28gaW4gYSBzb3J0ZWQgc2VxdWVuY2UuXG4gKlxuICogVGhpcyBpcyBub3QgYSBtZXRob2QgZm9yIGNoZWNraW5nIGNvbnRhaW5tZW50IChsaWtlIGphdmFzY3JpcHQgaW4pLlxuICpcbiAqIFRoZSB0eXBpY2FsIHVzZSBjYXNlIGZvciB0aGlzIG9wZXJhdGlvbiBpcyBcImJpbm5pbmdcIiwgXCJidWNrZXRpbmdcIiwgb3JcbiAqIFwiZGlzY3JldGl6aW5nXCIuIFRoZSB2YWx1ZXMgYXJlIGFzc2lnbmVkIHRvIGJ1Y2tldC1pbmRpY2VzIGJhc2VkIG9uIHRoZSBlZGdlc1xuICogbGlzdGVkIGluICdzb3J0ZWRTZXF1ZW5jZScuIFRoaXMgb3BlcmF0aW9uIHJldHVybnMgdGhlIGJ1Y2tldC1pbmRleCBmb3IgZWFjaFxuICogdmFsdWUuXG4gKlxuICogVGhlIGluZGV4IHJldHVybmVkIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBlZGdlIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUuXG4gKlxuICogVGhlIGF4aXMgaXMgbm90IHNldHRhYmxlIGZvciB0aGlzIG9wZXJhdGlvbi4gSXQgYWx3YXlzIG9wZXJhdGVzIG9uIHRoZVxuICogaW5uZXJtb3N0IGRpbWVuc2lvbiAoYXhpcz0tMSkuIFRoZSBvcGVyYXRpb24gd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBvdXRlclxuICogZGltZW5zaW9ucy5cbiAqXG4gKiBOb3RlOiBUaGlzIG9wZXJhdGlvbiBhc3N1bWVzIHRoYXQgJ3VwcGVyQm91bmQnIGlzIHNvcnRlZCBhbG9uZyB0aGVcbiAqIGlubmVybW9zdCBheGlzLCBtYXliZSB1c2luZyAnc29ydCguLi4sIGF4aXM9LTEpJy4gSWYgdGhlIHNlcXVlbmNlIGlzIG5vdFxuICogc29ydGVkIG5vIGVycm9yIGlzIHJhaXNlZCBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIHJldHVybmVkIHRlbnNvciBpcyBub3Qgd2VsbFxuICogZGVmaW5lZC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3Qgc2VxID0gdGYudGVuc29yMWQoWzAsIDMsIDksIDEwLCAxMF0pO1xuICogY29uc3QgdmFsdWVzID0gdGYudGVuc29yMWQoWzAsIDQsIDEwXSk7XG4gKiBjb25zdCByZXN1bHQgPSB0Zi51cHBlckJvdW5kKHNlcSwgdmFsdWVzKTtcbiAqIHJlc3VsdC5wcmludCgpOyAvLyBbMSwgMiwgNV1cbiAqIGBgYFxuICogQHBhcmFtIHNvcnRlZFNlcXVlbmNlOiBOLUQuIFNvcnRlZCBzZXF1ZW5jZS5cbiAqIEBwYXJhbSB2YWx1ZXM6IE4tRC4gU2VhcmNoIHZhbHVlcy5cbiAqIEByZXR1cm4gQW4gTi1EIGludDMyIHRlbnNvciB0aGUgc2l6ZSBvZiB2YWx1ZXMgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mXG4gKiAgICAgYXBwbHlpbmcgdXBwZXIgYm91bmQgdG8gZWFjaCB2YWx1ZS4gVGhlIHJlc3VsdCBpcyBub3QgYSBnbG9iYWwgaW5kZXggdG9cbiAqICAgICB0aGUgZW50aXJlIFRlbnNvciwgYnV0IHRoZSBpbmRleCBpbiB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwcGVyQm91bmQoXG4gICAgc29ydGVkU2VxdWVuY2U6IFRlbnNvcnxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcnxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgcmV0dXJuIHNlYXJjaFNvcnRlZChzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzLCAncmlnaHQnKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\n/**\n * Creates a new variable with the provided initial value.\n * ```js\n * const x = tf.variable(tf.tensor([1, 2, 3]));\n * x.assign(tf.tensor([4, 5, 6]));\n *\n * x.print();\n * ```\n *\n * @param initialValue Initial value for the tensor.\n * @param trainable If true, optimizers are allowed to update it.\n * @param name Name of the variable. Defaults to a unique id.\n * @param dtype If set, initialValue will be converted to the given type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function variable(initialValue, trainable = true, name, dtype) {\n return ENGINE.makeVariable(initialValue, trainable, name, dtype);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy92YXJpYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBSWpDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3BCLFlBQXVCLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFhLEVBQ3hELEtBQWdCO0lBQ2xCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQ2hELENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge1RlbnNvciwgVmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge0RhdGFUeXBlLCBSYW5rfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2YXJpYWJsZSB3aXRoIHRoZSBwcm92aWRlZCBpbml0aWFsIHZhbHVlLlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi52YXJpYWJsZSh0Zi50ZW5zb3IoWzEsIDIsIDNdKSk7XG4gKiB4LmFzc2lnbih0Zi50ZW5zb3IoWzQsIDUsIDZdKSk7XG4gKlxuICogeC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSBJbml0aWFsIHZhbHVlIGZvciB0aGUgdGVuc29yLlxuICogQHBhcmFtIHRyYWluYWJsZSBJZiB0cnVlLCBvcHRpbWl6ZXJzIGFyZSBhbGxvd2VkIHRvIHVwZGF0ZSBpdC5cbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHZhcmlhYmxlLiBEZWZhdWx0cyB0byBhIHVuaXF1ZSBpZC5cbiAqIEBwYXJhbSBkdHlwZSBJZiBzZXQsIGluaXRpYWxWYWx1ZSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgZ2l2ZW4gdHlwZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVGVuc29ycycsIHN1YmhlYWRpbmc6ICdDcmVhdGlvbid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZTxSIGV4dGVuZHMgUmFuaz4oXG4gICAgaW5pdGlhbFZhbHVlOiBUZW5zb3I8Uj4sIHRyYWluYWJsZSA9IHRydWUsIG5hbWU/OiBzdHJpbmcsXG4gICAgZHR5cGU/OiBEYXRhVHlwZSk6IFZhcmlhYmxlPFI+IHtcbiAgcmV0dXJuIEVOR0lORS5tYWtlVmFyaWFibGUoaW5pdGlhbFZhbHVlLCB0cmFpbmFibGUsIG5hbWUsIGR0eXBlKSBhc1xuICAgICAgVmFyaWFibGU8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/** An implementation of the Where kernel shared between cpu and webgl */\nimport { buffer } from '../ops/buffer';\nexport function whereImpl(condShape, condVals) {\n const indices = [];\n for (let i = 0; i < condVals.length; i++) {\n if (condVals[i]) {\n indices.push(i);\n }\n }\n const inBuffer = buffer(condShape, 'int32');\n const out = buffer([indices.length, condShape.length], 'int32');\n for (let i = 0; i < indices.length; i++) {\n const loc = inBuffer.indexToLoc(indices[i]);\n const offset = i * condShape.length;\n out.values.set(loc, offset);\n }\n return out.toTensor();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmVfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvYmFja2VuZHMvd2hlcmVfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCx5RUFBeUU7QUFFekUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlyQyxNQUFNLFVBQVUsU0FBUyxDQUFDLFNBQW1CLEVBQUUsUUFBb0I7SUFDakUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQjtLQUNGO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBYyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2hlcmUga2VybmVsIHNoYXJlZCBiZXR3ZWVuIGNwdSBhbmQgd2ViZ2wgKi9cblxuaW1wb3J0IHtidWZmZXJ9IGZyb20gJy4uL29wcy9idWZmZXInO1xuaW1wb3J0IHtUZW5zb3IyRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd2hlcmVJbXBsKGNvbmRTaGFwZTogbnVtYmVyW10sIGNvbmRWYWxzOiBUeXBlZEFycmF5KTogVGVuc29yMkQge1xuICBjb25zdCBpbmRpY2VzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uZFZhbHNbaV0pIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBpbkJ1ZmZlciA9IGJ1ZmZlcihjb25kU2hhcGUsICdpbnQzMicpO1xuXG4gIGNvbnN0IG91dCA9IGJ1ZmZlcihbaW5kaWNlcy5sZW5ndGgsIGNvbmRTaGFwZS5sZW5ndGhdLCAnaW50MzInKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbG9jID0gaW5CdWZmZXIuaW5kZXhUb0xvYyhpbmRpY2VzW2ldKTtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogY29uZFNoYXBlLmxlbmd0aDtcbiAgICBvdXQudmFsdWVzLnNldChsb2MsIG9mZnNldCk7XG4gIH1cbiAgcmV0dXJuIG91dC50b1RlbnNvcigpIGFzIFRlbnNvcjJEO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { whereImpl } from '../backends/where_impl';\nimport { convertToTensor } from '../tensor_util_env';\n/**\n * Returns the coordinates of true elements of condition.\n *\n * The coordinates are returned in a 2-D tensor where the first dimension (rows)\n * represents the number of true elements, and the second dimension (columns)\n * represents the coordinates of the true elements. Keep in mind, the shape of\n * the output tensor can vary depending on how many true values there are in\n * input. Indices are output in row-major order. The resulting tensor has the\n * shape `[numTrueElems, condition.rank]`.\n *\n * This is analogous to calling the python `tf.where(cond)` without an x or y.\n *\n * ```js\n * const cond = tf.tensor1d([false, false, true], 'bool');\n * const result = await tf.whereAsync(cond);\n * result.print();\n * ```\n *\n * @doc {heading: 'Operations', subheading: 'Logical'}\n */\nasync function whereAsync_(condition) {\n const $condition = convertToTensor(condition, 'condition', 'whereAsync', 'bool');\n const vals = await $condition.data();\n const res = whereImpl($condition.shape, vals);\n if (condition !== $condition) {\n $condition.dispose();\n }\n return res;\n}\nexport const whereAsync = whereAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmVfYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy93aGVyZV9hc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR25EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxTQUE0QjtJQUNyRCxNQUFNLFVBQVUsR0FDWixlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFO1FBQzVCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN0QjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge3doZXJlSW1wbH0gZnJvbSAnLi4vYmFja2VuZHMvd2hlcmVfaW1wbCc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIG9mIHRydWUgZWxlbWVudHMgb2YgY29uZGl0aW9uLlxuICpcbiAqIFRoZSBjb29yZGluYXRlcyBhcmUgcmV0dXJuZWQgaW4gYSAyLUQgdGVuc29yIHdoZXJlIHRoZSBmaXJzdCBkaW1lbnNpb24gKHJvd3MpXG4gKiByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgdHJ1ZSBlbGVtZW50cywgYW5kIHRoZSBzZWNvbmQgZGltZW5zaW9uIChjb2x1bW5zKVxuICogcmVwcmVzZW50cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRydWUgZWxlbWVudHMuIEtlZXAgaW4gbWluZCwgdGhlIHNoYXBlIG9mXG4gKiB0aGUgb3V0cHV0IHRlbnNvciBjYW4gdmFyeSBkZXBlbmRpbmcgb24gaG93IG1hbnkgdHJ1ZSB2YWx1ZXMgdGhlcmUgYXJlIGluXG4gKiBpbnB1dC4gSW5kaWNlcyBhcmUgb3V0cHV0IGluIHJvdy1tYWpvciBvcmRlci4gVGhlIHJlc3VsdGluZyB0ZW5zb3IgaGFzIHRoZVxuICogc2hhcGUgYFtudW1UcnVlRWxlbXMsIGNvbmRpdGlvbi5yYW5rXWAuXG4gKlxuICogVGhpcyBpcyBhbmFsb2dvdXMgdG8gY2FsbGluZyB0aGUgcHl0aG9uIGB0Zi53aGVyZShjb25kKWAgd2l0aG91dCBhbiB4IG9yIHkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGNvbmQgPSB0Zi50ZW5zb3IxZChbZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Jvb2wnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRmLndoZXJlQXN5bmMoY29uZCk7XG4gKiByZXN1bHQucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0xvZ2ljYWwnfVxuICovXG5hc3luYyBmdW5jdGlvbiB3aGVyZUFzeW5jXyhjb25kaXRpb246IFRlbnNvcnxUZW5zb3JMaWtlKTogUHJvbWlzZTxUZW5zb3IyRD4ge1xuICBjb25zdCAkY29uZGl0aW9uID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihjb25kaXRpb24sICdjb25kaXRpb24nLCAnd2hlcmVBc3luYycsICdib29sJyk7XG4gIGNvbnN0IHZhbHMgPSBhd2FpdCAkY29uZGl0aW9uLmRhdGEoKTtcbiAgY29uc3QgcmVzID0gd2hlcmVJbXBsKCRjb25kaXRpb24uc2hhcGUsIHZhbHMpO1xuICBpZiAoY29uZGl0aW9uICE9PSAkY29uZGl0aW9uKSB7XG4gICAgJGNvbmRpdGlvbi5kaXNwb3NlKCk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IHdoZXJlQXN5bmMgPSB3aGVyZUFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { gather } from './gather';\nimport { reshape } from './reshape';\nimport { squeeze } from './squeeze';\nimport { whereAsync } from './where_async';\n/**\n * Apply boolean mask to tensor.\n *\n * ```js\n * const tensor = tf.tensor2d([1, 2, 3, 4, 5, 6], [3, 2]);\n * const mask = tf.tensor1d([1, 0, 1], 'bool');\n * const result = await tf.booleanMaskAsync(tensor, mask);\n * result.print();\n * ```\n *\n * @param tensor N-D tensor.\n * @param mask K-D boolean tensor, K <= N and K must be known statically.\n * @param axis A 0-D int Tensor representing the axis in tensor to mask from.\n * By default, axis is 0 which will mask from the first dimension.\n * Otherwise K + axis <= N.\n *\n * @doc {heading: 'Tensors', subheading: 'Slicing and Joining'}\n */\nasync function booleanMaskAsync_(tensor, mask, axis) {\n const $tensor = convertToTensor(tensor, 'tensor', 'boolMask');\n const $mask = convertToTensor(mask, 'mask', 'boolMask', 'bool');\n const axisFrom = axis == null ? 0 : axis;\n const maskDim = $mask.rank;\n const tensorShape = $tensor.shape;\n util.assert(maskDim > 0, () => 'mask cannot be scalar');\n util.assertShapesMatch(tensorShape.slice(axisFrom, axisFrom + maskDim), $mask.shape, `mask's shape must match the first K dimensions of tensor's shape,`);\n let leadingSize = 1;\n for (let i = axisFrom; i < axisFrom + maskDim; i++) {\n leadingSize *= tensorShape[i];\n }\n const targetTensorShape = tensorShape.slice(0, axisFrom)\n .concat([leadingSize], tensorShape.slice(axisFrom + maskDim));\n const reshapedTensor = reshape($tensor, targetTensorShape);\n const reshapedMask = reshape($mask, [-1]);\n const positivePositions = await whereAsync(reshapedMask);\n const indices = squeeze(positivePositions, [1]);\n const res = gather(reshapedTensor, indices, axisFrom);\n // Ensure no memory leak.\n if (tensor !== $tensor) {\n $tensor.dispose();\n }\n if (mask !== $mask) {\n $mask.dispose();\n }\n indices.dispose();\n reshapedTensor.dispose();\n reshapedMask.dispose();\n positivePositions.dispose();\n return res;\n}\nexport const booleanMaskAsync = booleanMaskAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbl9tYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvYm9vbGVhbl9tYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FDNUIsTUFBeUIsRUFBRSxJQUF1QixFQUNsRCxJQUFhO0lBQ2YsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWhFLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsaUJBQWlCLENBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsR0FBRyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUM1RCxtRUFBbUUsQ0FBQyxDQUFDO0lBRXpFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsRCxXQUFXLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsTUFBTSxpQkFBaUIsR0FDbkIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO1NBQ3pCLE1BQU0sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXRELHlCQUF5QjtJQUN6QixJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNqQjtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTVCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2dhdGhlcn0gZnJvbSAnLi9nYXRoZXInO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzcXVlZXplfSBmcm9tICcuL3NxdWVlemUnO1xuaW1wb3J0IHt3aGVyZUFzeW5jfSBmcm9tICcuL3doZXJlX2FzeW5jJztcblxuLyoqXG4gKiBBcHBseSBib29sZWFuIG1hc2sgdG8gdGVuc29yLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB0ZW5zb3IgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNCwgNSwgNl0sIFszLCAyXSk7XG4gKiBjb25zdCBtYXNrID0gdGYudGVuc29yMWQoWzEsIDAsIDFdLCAnYm9vbCcpO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgdGYuYm9vbGVhbk1hc2tBc3luYyh0ZW5zb3IsIG1hc2spO1xuICogcmVzdWx0LnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdGVuc29yIE4tRCB0ZW5zb3IuXG4gKiBAcGFyYW0gbWFzayBLLUQgYm9vbGVhbiB0ZW5zb3IsIEsgPD0gTiBhbmQgSyBtdXN0IGJlIGtub3duIHN0YXRpY2FsbHkuXG4gKiBAcGFyYW0gYXhpcyBBIDAtRCBpbnQgVGVuc29yIHJlcHJlc2VudGluZyB0aGUgYXhpcyBpbiB0ZW5zb3IgdG8gbWFzayBmcm9tLlxuICogICAgIEJ5IGRlZmF1bHQsIGF4aXMgaXMgMCB3aGljaCB3aWxsIG1hc2sgZnJvbSB0aGUgZmlyc3QgZGltZW5zaW9uLlxuICogICAgIE90aGVyd2lzZSBLICsgYXhpcyA8PSBOLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUZW5zb3JzJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5hc3luYyBmdW5jdGlvbiBib29sZWFuTWFza0FzeW5jXyhcbiAgICB0ZW5zb3I6IFRlbnNvcnxUZW5zb3JMaWtlLCBtYXNrOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICBheGlzPzogbnVtYmVyKTogUHJvbWlzZTxUZW5zb3I+IHtcbiAgY29uc3QgJHRlbnNvciA9IGNvbnZlcnRUb1RlbnNvcih0ZW5zb3IsICd0ZW5zb3InLCAnYm9vbE1hc2snKTtcbiAgY29uc3QgJG1hc2sgPSBjb252ZXJ0VG9UZW5zb3IobWFzaywgJ21hc2snLCAnYm9vbE1hc2snLCAnYm9vbCcpO1xuXG4gIGNvbnN0IGF4aXNGcm9tID0gYXhpcyA9PSBudWxsID8gMCA6IGF4aXM7XG4gIGNvbnN0IG1hc2tEaW0gPSAkbWFzay5yYW5rO1xuICBjb25zdCB0ZW5zb3JTaGFwZSA9ICR0ZW5zb3Iuc2hhcGU7XG5cbiAgdXRpbC5hc3NlcnQobWFza0RpbSA+IDAsICgpID0+ICdtYXNrIGNhbm5vdCBiZSBzY2FsYXInKTtcbiAgdXRpbC5hc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgIHRlbnNvclNoYXBlLnNsaWNlKGF4aXNGcm9tLCBheGlzRnJvbSArIG1hc2tEaW0pLCAkbWFzay5zaGFwZSxcbiAgICAgIGBtYXNrJ3Mgc2hhcGUgbXVzdCBtYXRjaCB0aGUgZmlyc3QgSyBkaW1lbnNpb25zIG9mIHRlbnNvcidzIHNoYXBlLGApO1xuXG4gIGxldCBsZWFkaW5nU2l6ZSA9IDE7XG4gIGZvciAobGV0IGkgPSBheGlzRnJvbTsgaSA8IGF4aXNGcm9tICsgbWFza0RpbTsgaSsrKSB7XG4gICAgbGVhZGluZ1NpemUgKj0gdGVuc29yU2hhcGVbaV07XG4gIH1cbiAgY29uc3QgdGFyZ2V0VGVuc29yU2hhcGUgPVxuICAgICAgdGVuc29yU2hhcGUuc2xpY2UoMCwgYXhpc0Zyb20pXG4gICAgICAgICAgLmNvbmNhdChbbGVhZGluZ1NpemVdLCB0ZW5zb3JTaGFwZS5zbGljZShheGlzRnJvbSArIG1hc2tEaW0pKTtcbiAgY29uc3QgcmVzaGFwZWRUZW5zb3IgPSByZXNoYXBlKCR0ZW5zb3IsIHRhcmdldFRlbnNvclNoYXBlKTtcbiAgY29uc3QgcmVzaGFwZWRNYXNrID0gcmVzaGFwZSgkbWFzaywgWy0xXSk7XG4gIGNvbnN0IHBvc2l0aXZlUG9zaXRpb25zID0gYXdhaXQgd2hlcmVBc3luYyhyZXNoYXBlZE1hc2spO1xuICBjb25zdCBpbmRpY2VzID0gc3F1ZWV6ZShwb3NpdGl2ZVBvc2l0aW9ucywgWzFdKTtcblxuICBjb25zdCByZXMgPSBnYXRoZXIocmVzaGFwZWRUZW5zb3IsIGluZGljZXMsIGF4aXNGcm9tKTtcblxuICAvLyBFbnN1cmUgbm8gbWVtb3J5IGxlYWsuXG4gIGlmICh0ZW5zb3IgIT09ICR0ZW5zb3IpIHtcbiAgICAkdGVuc29yLmRpc3Bvc2UoKTtcbiAgfVxuICBpZiAobWFzayAhPT0gJG1hc2spIHtcbiAgICAkbWFzay5kaXNwb3NlKCk7XG4gIH1cbiAgaW5kaWNlcy5kaXNwb3NlKCk7XG4gIHJlc2hhcGVkVGVuc29yLmRpc3Bvc2UoKTtcbiAgcmVzaGFwZWRNYXNrLmRpc3Bvc2UoKTtcbiAgcG9zaXRpdmVQb3NpdGlvbnMuZGlzcG9zZSgpO1xuXG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBib29sZWFuTWFza0FzeW5jID0gYm9vbGVhbk1hc2tBc3luY187XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { tidy } from '../globals';\nimport { Transpose } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { complex } from './complex';\nimport { imag } from './imag';\nimport { neg } from './neg';\nimport { op } from './operation';\nimport { real } from './real';\n/**\n * Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.\n *\n * The returned `tf.Tensor`'s dimension `i` will correspond to the input\n * dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,\n * where `n` is the rank of the input `tf.Tensor`. Hence by default, this\n * operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);\n *\n * a.transpose().print(); // or tf.transpose(a)\n * ```\n *\n * @param x The tensor to transpose.\n * @param perm The permutation of the dimensions of a.\n * @param conjugate Will conjugate complex input if true.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction transpose_(x, perm, conjugate) {\n const $x = convertToTensor(x, 'x', 'transpose');\n if (perm == null) {\n perm = $x.shape.map((s, i) => i).reverse();\n }\n util.assert($x.rank === perm.length, () => `Error in transpose: rank of input ${$x.rank} ` +\n `must match length of perm ${perm}.`);\n perm.forEach(axis => {\n util.assert(axis >= 0 && axis < $x.rank, () => `All entries in 'perm' must be between 0 and ${$x.rank - 1}` +\n ` but got ${perm}`);\n });\n if ($x.rank <= 1) {\n return $x.clone();\n }\n const inputs = { x: $x };\n const attrs = { perm };\n if ($x.dtype === 'complex64') {\n return tidy(() => {\n let $real = real($x);\n let $imag = imag($x);\n $real = ENGINE.runKernel(Transpose, { x: $real }, attrs);\n $imag = ENGINE.runKernel(Transpose, { x: $imag }, attrs);\n if (conjugate) {\n $imag = neg($imag);\n }\n return complex($real, $imag);\n });\n }\n return ENGINE.runKernel(Transpose, inputs, attrs);\n}\nexport const transpose = /* @__PURE__ */ op({ transpose_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvdHJhbnNwb3NlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixDQUFlLEVBQUUsSUFBZSxFQUFFLFNBQW1CO0lBQ3ZELE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWhELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtRQUNoQixJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUM1QztJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxFQUN2QixHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLElBQUksR0FBRztRQUNqRCw2QkFBNkIsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDM0IsR0FBRyxFQUFFLENBQUMsK0NBQStDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQzlELFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7UUFDaEIsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDbkI7SUFFRCxNQUFNLE1BQU0sR0FBb0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQW1CLEVBQUMsSUFBSSxFQUFDLENBQUM7SUFFckMsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNwQixTQUFTLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUE4QixFQUNsRCxLQUFnQyxDQUFDLENBQUM7WUFDdEMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3BCLFNBQVMsRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQThCLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztZQUN0QyxJQUFJLFNBQVMsRUFBRTtnQkFDYixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQ25CLFNBQVMsRUFBRSxNQUFtQyxFQUM5QyxLQUFnQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge3RpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHtUcmFuc3Bvc2UsIFRyYW5zcG9zZUF0dHJzLCBUcmFuc3Bvc2VJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL2NvbXBsZXgnO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuL2ltYWcnO1xuaW1wb3J0IHtuZWd9IGZyb20gJy4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVhbH0gZnJvbSAnLi9yZWFsJztcblxuLyoqXG4gKiBUcmFuc3Bvc2VzIHRoZSBgdGYuVGVuc29yYC4gUGVybXV0ZXMgdGhlIGRpbWVuc2lvbnMgYWNjb3JkaW5nIHRvIGBwZXJtYC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYHRmLlRlbnNvcmAncyBkaW1lbnNpb24gYGlgIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgaW5wdXRcbiAqIGRpbWVuc2lvbiBgcGVybVtpXWAuIElmIGBwZXJtYCBpcyBub3QgZ2l2ZW4sIGl0IGlzIHNldCB0byBgW24tMS4uLjBdYCxcbiAqIHdoZXJlIGBuYCBpcyB0aGUgcmFuayBvZiB0aGUgaW5wdXQgYHRmLlRlbnNvcmAuIEhlbmNlIGJ5IGRlZmF1bHQsIHRoaXNcbiAqIG9wZXJhdGlvbiBwZXJmb3JtcyBhIHJlZ3VsYXIgbWF0cml4IHRyYW5zcG9zZSBvbiAyLUQgaW5wdXQgYHRmLlRlbnNvcmBzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoWzEsIDIsIDMsIDQsIDUsIDZdLCBbMiwgM10pO1xuICpcbiAqIGEudHJhbnNwb3NlKCkucHJpbnQoKTsgIC8vIG9yIHRmLnRyYW5zcG9zZShhKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggVGhlIHRlbnNvciB0byB0cmFuc3Bvc2UuXG4gKiBAcGFyYW0gcGVybSBUaGUgcGVybXV0YXRpb24gb2YgdGhlIGRpbWVuc2lvbnMgb2YgYS5cbiAqIEBwYXJhbSBjb25qdWdhdGUgV2lsbCBjb25qdWdhdGUgY29tcGxleCBpbnB1dCBpZiB0cnVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01hdHJpY2VzJ31cbiAqL1xuZnVuY3Rpb24gdHJhbnNwb3NlXzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICB4OiBUfFRlbnNvckxpa2UsIHBlcm0/OiBudW1iZXJbXSwgY29uanVnYXRlPzogYm9vbGVhbik6IFQge1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICd0cmFuc3Bvc2UnKTtcblxuICBpZiAocGVybSA9PSBudWxsKSB7XG4gICAgcGVybSA9ICR4LnNoYXBlLm1hcCgocywgaSkgPT4gaSkucmV2ZXJzZSgpO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHgucmFuayA9PT0gcGVybS5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gdHJhbnNwb3NlOiByYW5rIG9mIGlucHV0ICR7JHgucmFua30gYCArXG4gICAgICAgICAgYG11c3QgbWF0Y2ggbGVuZ3RoIG9mIHBlcm0gJHtwZXJtfS5gKTtcbiAgcGVybS5mb3JFYWNoKGF4aXMgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBheGlzID49IDAgJiYgYXhpcyA8ICR4LnJhbmssXG4gICAgICAgICgpID0+IGBBbGwgZW50cmllcyBpbiAncGVybScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICR7JHgucmFuayAtIDF9YCArXG4gICAgICAgICAgICBgIGJ1dCBnb3QgJHtwZXJtfWApO1xuICB9KTtcblxuICBpZiAoJHgucmFuayA8PSAxKSB7XG4gICAgcmV0dXJuICR4LmNsb25lKCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFRyYW5zcG9zZUlucHV0cyA9IHt4OiAkeH07XG4gIGNvbnN0IGF0dHJzOiBUcmFuc3Bvc2VBdHRycyA9IHtwZXJtfTtcblxuICBpZiAoJHguZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgbGV0ICRyZWFsID0gcmVhbCgkeCk7XG4gICAgICBsZXQgJGltYWcgPSBpbWFnKCR4KTtcbiAgICAgICRyZWFsID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICBUcmFuc3Bvc2UsIHt4OiAkcmVhbH0gYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gICAgICAkaW1hZyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgVHJhbnNwb3NlLCB7eDogJGltYWd9IGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuICAgICAgaWYgKGNvbmp1Z2F0ZSkge1xuICAgICAgICAkaW1hZyA9IG5lZygkaW1hZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcGxleCgkcmVhbCwgJGltYWcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBUcmFuc3Bvc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3QgdHJhbnNwb3NlID0gLyogQF9fUFVSRV9fICovIG9wKHt0cmFuc3Bvc2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assertTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { add } from './add';\nimport { div } from './div';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { pow } from './pow';\nimport { scalar } from './scalar';\nimport { sub } from './sub';\n/**\n * Compute the moving average of a variable.\n *\n * Without zeroDebias, the moving average operation is defined by:\n * `v += delta`\n * where\n * `delta = (1 - decay) * (x - v)`\n *\n * With zeroDebias (default), the `delta` term is scaled to debias the\n * effect of the (assumed) zero-initialization of `v`.\n * `delta /= (1 - decay ^ step)`\n *\n * For more details on the zero-debiasing algorithm, see:\n * https://arxiv.org/abs/1412.6980\n *\n * Note that this function is completely stateless and does not keep track of\n * step count. The step count needs to be maintained by the caller and passed\n * in as `step`.\n *\n * @param v The current moving average value.\n * @param x New input value, must have the same shape and dtype as `v`.\n * @param decay The decay factor. Typical values are 0.95 and 0.99.\n * @param step Step count.\n * @param zeroDebias: Whether zeroDebias is to be performed (default: `true`).\n * @returns The new moving average value.\n *\n * @doc {heading: 'Operations', subheading: 'Moving Average'}\n */\nfunction movingAverage_(v, x, decay, step, zeroDebias = true) {\n const $v = convertToTensor(v, 'v', 'movingAverage');\n const $x = convertToTensor(x, 'x', 'movingAverage');\n const $decay = convertToTensor(decay, 'decay', 'movingAverage');\n assertTypesMatch($v, $x);\n util.assert(util.arraysEqual($v.shape, $x.shape), () => 'Shape mismatch in v and x');\n const one = scalar(1);\n const oneMinusDecay = sub(one, $decay);\n let update = mul(sub($x, $v), oneMinusDecay);\n if (zeroDebias) {\n util.assert(step != null, () => 'When using zeroDebias: true, step is required.');\n const $step = convertToTensor(step, 'step', 'movingAverage');\n update = div(update, sub(one, pow($decay, $step)));\n }\n return add($v, update);\n}\nexport const movingAverage = /* @__PURE__ */ op({ movingAverage_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nX2F2ZXJhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9tb3ZpbmdfYXZlcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBUyxjQUFjLENBQ25CLENBQWUsRUFBRSxDQUFlLEVBQUUsS0FBb0IsRUFDdEQsSUFBb0IsRUFBRSxVQUFVLEdBQUcsSUFBSTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVoRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFFN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFdkMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0MsSUFBSSxVQUFVLEVBQUU7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BEO0lBQ0QsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge2Fzc2VydFR5cGVzTWF0Y2h9IGZyb20gJy4uL3RlbnNvcl91dGlsJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2FkZH0gZnJvbSAnLi9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4vZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Bvd30gZnJvbSAnLi9wb3cnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4vc2NhbGFyJztcbmltcG9ydCB7c3VifSBmcm9tICcuL3N1Yic7XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbW92aW5nIGF2ZXJhZ2Ugb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBXaXRob3V0IHplcm9EZWJpYXMsIHRoZSBtb3ZpbmcgYXZlcmFnZSBvcGVyYXRpb24gaXMgZGVmaW5lZCBieTpcbiAqICAgYHYgKz0gZGVsdGFgXG4gKiB3aGVyZVxuICogICBgZGVsdGEgPSAoMSAtIGRlY2F5KSAqICh4IC0gdilgXG4gKlxuICogV2l0aCB6ZXJvRGViaWFzIChkZWZhdWx0KSwgdGhlIGBkZWx0YWAgdGVybSBpcyBzY2FsZWQgdG8gZGViaWFzIHRoZVxuICogZWZmZWN0IG9mIHRoZSAoYXNzdW1lZCkgemVyby1pbml0aWFsaXphdGlvbiBvZiBgdmAuXG4gKiAgIGBkZWx0YSAvPSAoMSAtIGRlY2F5IF4gc3RlcClgXG4gKlxuICogRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgemVyby1kZWJpYXNpbmcgYWxnb3JpdGhtLCBzZWU6XG4gKiAgIGh0dHBzOi8vYXJ4aXYub3JnL2Ficy8xNDEyLjY5ODBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHN0YXRlbGVzcyBhbmQgZG9lcyBub3Qga2VlcCB0cmFjayBvZlxuICogc3RlcCBjb3VudC4gVGhlIHN0ZXAgY291bnQgbmVlZHMgdG8gYmUgbWFpbnRhaW5lZCBieSB0aGUgY2FsbGVyIGFuZCBwYXNzZWRcbiAqIGluIGFzIGBzdGVwYC5cbiAqXG4gKiBAcGFyYW0gdiBUaGUgY3VycmVudCBtb3ZpbmcgYXZlcmFnZSB2YWx1ZS5cbiAqIEBwYXJhbSB4IE5ldyBpbnB1dCB2YWx1ZSwgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlIGFuZCBkdHlwZSBhcyBgdmAuXG4gKiBAcGFyYW0gZGVjYXkgVGhlIGRlY2F5IGZhY3Rvci4gVHlwaWNhbCB2YWx1ZXMgYXJlIDAuOTUgYW5kIDAuOTkuXG4gKiBAcGFyYW0gc3RlcCBTdGVwIGNvdW50LlxuICogQHBhcmFtIHplcm9EZWJpYXM6IFdoZXRoZXIgemVyb0RlYmlhcyBpcyB0byBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGB0cnVlYCkuXG4gKiBAcmV0dXJucyBUaGUgbmV3IG1vdmluZyBhdmVyYWdlIHZhbHVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ01vdmluZyBBdmVyYWdlJ31cbiAqL1xuZnVuY3Rpb24gbW92aW5nQXZlcmFnZV88VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgdjogVHxUZW5zb3JMaWtlLCB4OiBUfFRlbnNvckxpa2UsIGRlY2F5OiBudW1iZXJ8U2NhbGFyLFxuICAgIHN0ZXA/OiBudW1iZXJ8U2NhbGFyLCB6ZXJvRGViaWFzID0gdHJ1ZSk6IFQge1xuICBjb25zdCAkdiA9IGNvbnZlcnRUb1RlbnNvcih2LCAndicsICdtb3ZpbmdBdmVyYWdlJyk7XG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ21vdmluZ0F2ZXJhZ2UnKTtcbiAgY29uc3QgJGRlY2F5ID0gY29udmVydFRvVGVuc29yKGRlY2F5LCAnZGVjYXknLCAnbW92aW5nQXZlcmFnZScpO1xuXG4gIGFzc2VydFR5cGVzTWF0Y2goJHYsICR4KTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB1dGlsLmFycmF5c0VxdWFsKCR2LnNoYXBlLCAkeC5zaGFwZSksICgpID0+ICdTaGFwZSBtaXNtYXRjaCBpbiB2IGFuZCB4Jyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBvbmVNaW51c0RlY2F5ID0gc3ViKG9uZSwgJGRlY2F5KTtcblxuICBsZXQgdXBkYXRlID0gbXVsKHN1YigkeCwgJHYpLCBvbmVNaW51c0RlY2F5KTtcbiAgaWYgKHplcm9EZWJpYXMpIHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgc3RlcCAhPSBudWxsLCAoKSA9PiAnV2hlbiB1c2luZyB6ZXJvRGViaWFzOiB0cnVlLCBzdGVwIGlzIHJlcXVpcmVkLicpO1xuICAgIGNvbnN0ICRzdGVwID0gY29udmVydFRvVGVuc29yKHN0ZXAsICdzdGVwJywgJ21vdmluZ0F2ZXJhZ2UnKTtcbiAgICB1cGRhdGUgPSBkaXYodXBkYXRlLCBzdWIob25lLCBwb3coJGRlY2F5LCAkc3RlcCkpKTtcbiAgfVxuICByZXR1cm4gYWRkKCR2LCB1cGRhdGUpO1xufVxuXG5leHBvcnQgY29uc3QgbW92aW5nQXZlcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bW92aW5nQXZlcmFnZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { ScatterNd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\nimport * as scatter_nd_util from './scatter_nd_util';\n/**\n * Creates a new tensor by applying sparse updates to individual\n * values or slices within a zero tensor of the given shape tensor according to\n * indices. This operator is the inverse of the `tf.gatherND` operator which\n * extracts values or slices from a given tensor.\n *\n * ```js\n * const indices = tf.tensor2d([4, 3, 1, 7], [4, 1], 'int32');\n * const updates = tf.tensor1d([9, 10, 11, 12]);\n * const shape = [8];\n * tf.scatterND(indices, updates, shape).print() //[0, 11, 0, 10, 9, 0, 0, 12]\n * ```\n *\n * @param indices The tensor contains the indices into the output tensor.\n * @param updates The tensor contains the value for the indices.\n * @param shape: The shape of the output tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction scatterND_(indices, updates, shape) {\n assertNonNegativeIntegerDimensions(shape);\n const $indices = convertToTensor(indices, 'indices', 'scatterND', 'int32');\n const $updates = convertToTensor(updates, 'updates', 'scatterND');\n scatter_nd_util.validateInput($updates, $indices, shape);\n const inputs = { indices: $indices, updates: $updates };\n const attrs = { shape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(ScatterNd, inputs, attrs);\n}\nexport const scatterND = /* @__PURE__ */ op({ scatterND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhdHRlcl9uZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NjYXR0ZXJfbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDO0FBSTNFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEtBQUssZUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixPQUEwQixFQUFFLE9BQTBCLEVBQ3RELEtBQWtCO0lBQ3BCLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNsRSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFekQsTUFBTSxNQUFNLEdBQW9CLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUM7SUFDdkUsTUFBTSxLQUFLLEdBQW1CLEVBQUMsS0FBSyxFQUFDLENBQUM7SUFFdEMsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixTQUFTLEVBQUUsTUFBbUMsRUFDOUMsS0FBZ0MsQ0FBYyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtTY2F0dGVyTmQsIFNjYXR0ZXJOZEF0dHJzLCBTY2F0dGVyTmRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtSYW5rLCBTaGFwZU1hcCwgVGVuc29yTGlrZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnROb25OZWdhdGl2ZUludGVnZXJEaW1lbnNpb25zfSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQgKiBhcyBzY2F0dGVyX25kX3V0aWwgZnJvbSAnLi9zY2F0dGVyX25kX3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdGVuc29yIGJ5IGFwcGx5aW5nIHNwYXJzZSB1cGRhdGVzIHRvIGluZGl2aWR1YWxcbiAqIHZhbHVlcyBvciBzbGljZXMgd2l0aGluIGEgemVybyB0ZW5zb3Igb2YgdGhlIGdpdmVuIHNoYXBlIHRlbnNvciBhY2NvcmRpbmcgdG9cbiAqIGluZGljZXMuIFRoaXMgb3BlcmF0b3IgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGB0Zi5nYXRoZXJORGAgb3BlcmF0b3Igd2hpY2hcbiAqIGV4dHJhY3RzIHZhbHVlcyBvciBzbGljZXMgZnJvbSBhIGdpdmVuIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgaW5kaWNlcyA9IHRmLnRlbnNvcjJkKFs0LCAzLCAxLCA3XSwgWzQsIDFdLCAnaW50MzInKTtcbiAqIGNvbnN0IHVwZGF0ZXMgPSB0Zi50ZW5zb3IxZChbOSwgMTAsIDExLCAxMl0pO1xuICogY29uc3Qgc2hhcGUgPSBbOF07XG4gKiB0Zi5zY2F0dGVyTkQoaW5kaWNlcywgdXBkYXRlcywgc2hhcGUpLnByaW50KCkgLy9bMCwgMTEsIDAsIDEwLCA5LCAwLCAwLCAxMl1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgaW50byB0aGUgb3V0cHV0IHRlbnNvci5cbiAqIEBwYXJhbSB1cGRhdGVzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgaW5kaWNlcy5cbiAqIEBwYXJhbSBzaGFwZTogVGhlIHNoYXBlIG9mIHRoZSBvdXRwdXQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NsaWNpbmcgYW5kIEpvaW5pbmcnfVxuICovXG5mdW5jdGlvbiBzY2F0dGVyTkRfPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBpbmRpY2VzOiBUZW5zb3J8VGVuc29yTGlrZSwgdXBkYXRlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgc2hhcGU6IFNoYXBlTWFwW1JdKTogVGVuc29yPFI+IHtcbiAgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyRGltZW5zaW9ucyhzaGFwZSk7XG4gIGNvbnN0ICRpbmRpY2VzID0gY29udmVydFRvVGVuc29yKGluZGljZXMsICdpbmRpY2VzJywgJ3NjYXR0ZXJORCcsICdpbnQzMicpO1xuICBjb25zdCAkdXBkYXRlcyA9IGNvbnZlcnRUb1RlbnNvcih1cGRhdGVzLCAndXBkYXRlcycsICdzY2F0dGVyTkQnKTtcbiAgc2NhdHRlcl9uZF91dGlsLnZhbGlkYXRlSW5wdXQoJHVwZGF0ZXMsICRpbmRpY2VzLCBzaGFwZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTY2F0dGVyTmRJbnB1dHMgPSB7aW5kaWNlczogJGluZGljZXMsIHVwZGF0ZXM6ICR1cGRhdGVzfTtcbiAgY29uc3QgYXR0cnM6IFNjYXR0ZXJOZEF0dHJzID0ge3NoYXBlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgIFNjYXR0ZXJOZCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcjxSPjtcbn1cblxuZXhwb3J0IGNvbnN0IHNjYXR0ZXJORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2NhdHRlck5EX30pO1xuIl19","/**\n * Validate sparseToDense inputs.\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape number[]. Shape of the dense output tensor.\n * @param validateIndices boolean. indice validation is not supported, error\n * will be thrown if it is set.\n */\nexport function validateInput(sparseIndices, sparseValues, outputShape, defaultValues) {\n if (sparseIndices.dtype !== 'int32') {\n throw new Error('tf.sparseToDense() expects the indices to be int32 type,' +\n ` but the dtype was ${sparseIndices.dtype}.`);\n }\n if (sparseIndices.rank > 2) {\n throw new Error('sparseIndices should be a scalar, vector, or matrix,' +\n ` but got shape ${sparseIndices.shape}.`);\n }\n const numElems = sparseIndices.rank > 0 ? sparseIndices.shape[0] : 1;\n const numDims = sparseIndices.rank > 1 ? sparseIndices.shape[1] : 1;\n if (outputShape.length !== numDims) {\n throw new Error('outputShape has incorrect number of elements:,' +\n ` ${outputShape.length}, should be: ${numDims}.`);\n }\n const numValues = sparseValues.size;\n if (!(sparseValues.rank === 0 ||\n sparseValues.rank === 1 && numValues === numElems)) {\n throw new Error('sparseValues has incorrect shape ' +\n `${sparseValues.shape}, should be [] or [${numElems}]`);\n }\n if (sparseValues.dtype !== defaultValues.dtype) {\n throw new Error('sparseValues.dtype must match defaultValues.dtype');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3RvX2RlbnNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2VfdG9fZGVuc2VfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDekIsYUFBcUIsRUFBRSxZQUFvQixFQUFFLFdBQXFCLEVBQ2xFLGFBQXFCO0lBQ3ZCLElBQUksYUFBYSxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FDWCwwREFBMEQ7WUFDMUQsc0JBQXNCLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ25EO0lBQ0QsSUFBSSxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUNYLHNEQUFzRDtZQUN0RCxrQkFBa0IsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDL0M7SUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNYLGdEQUFnRDtZQUNoRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLGdCQUFnQixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNwQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkIsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxFQUFFO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUNBQW1DO1lBQ25DLEdBQUcsWUFBWSxDQUFDLEtBQUssc0JBQXNCLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRTtRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7S0FDdEU7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbi8qKlxuICogVmFsaWRhdGUgc3BhcnNlVG9EZW5zZSBpbnB1dHMuXG4gKlxuICogQHBhcmFtIHNwYXJzZUluZGljZXMgQSAwLUQsIDEtRCwgb3IgMi1EIFRlbnNvciBvZiB0eXBlIGludDMyLlxuICogc3BhcnNlSW5kaWNlc1tpXSBjb250YWlucyB0aGUgY29tcGxldGUgaW5kZXggd2hlcmUgc3BhcnNlVmFsdWVzW2ldIHdpbGwgYmVcbiAqIHBsYWNlZC5cbiAqIEBwYXJhbSBzcGFyc2VWYWx1ZXMgQSAwLUQgb3IgMS1EIFRlbnNvci4gVmFsdWVzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcm93IG9mIHNwYXJzZUluZGljZXMsIG9yIGEgc2NhbGFyIHZhbHVlIHRvIGJlIHVzZWQgZm9yXG4gKiBhbGwgc3BhcnNlIGluZGljZXMuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgbnVtYmVyW10uIFNoYXBlIG9mIHRoZSBkZW5zZSBvdXRwdXQgdGVuc29yLlxuICogQHBhcmFtIHZhbGlkYXRlSW5kaWNlcyBib29sZWFuLiBpbmRpY2UgdmFsaWRhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBlcnJvclxuICogd2lsbCBiZSB0aHJvd24gaWYgaXQgaXMgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dChcbiAgICBzcGFyc2VJbmRpY2VzOiBUZW5zb3IsIHNwYXJzZVZhbHVlczogVGVuc29yLCBvdXRwdXRTaGFwZTogbnVtYmVyW10sXG4gICAgZGVmYXVsdFZhbHVlczogVGVuc29yKSB7XG4gIGlmIChzcGFyc2VJbmRpY2VzLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGYuc3BhcnNlVG9EZW5zZSgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgaW50MzIgdHlwZSwnICtcbiAgICAgICAgYCBidXQgdGhlIGR0eXBlIHdhcyAke3NwYXJzZUluZGljZXMuZHR5cGV9LmApO1xuICB9XG4gIGlmIChzcGFyc2VJbmRpY2VzLnJhbmsgPiAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnc3BhcnNlSW5kaWNlcyBzaG91bGQgYmUgYSBzY2FsYXIsIHZlY3Rvciwgb3IgbWF0cml4LCcgK1xuICAgICAgICBgIGJ1dCBnb3Qgc2hhcGUgJHtzcGFyc2VJbmRpY2VzLnNoYXBlfS5gKTtcbiAgfVxuXG4gIGNvbnN0IG51bUVsZW1zID0gc3BhcnNlSW5kaWNlcy5yYW5rID4gMCA/IHNwYXJzZUluZGljZXMuc2hhcGVbMF0gOiAxO1xuICBjb25zdCBudW1EaW1zID0gc3BhcnNlSW5kaWNlcy5yYW5rID4gMSA/IHNwYXJzZUluZGljZXMuc2hhcGVbMV0gOiAxO1xuXG4gIGlmIChvdXRwdXRTaGFwZS5sZW5ndGggIT09IG51bURpbXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdvdXRwdXRTaGFwZSBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBlbGVtZW50czosJyArXG4gICAgICAgIGAgJHtvdXRwdXRTaGFwZS5sZW5ndGh9LCBzaG91bGQgYmU6ICR7bnVtRGltc30uYCk7XG4gIH1cblxuICBjb25zdCBudW1WYWx1ZXMgPSBzcGFyc2VWYWx1ZXMuc2l6ZTtcbiAgaWYgKCEoc3BhcnNlVmFsdWVzLnJhbmsgPT09IDAgfHxcbiAgICAgICAgc3BhcnNlVmFsdWVzLnJhbmsgPT09IDEgJiYgbnVtVmFsdWVzID09PSBudW1FbGVtcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdzcGFyc2VWYWx1ZXMgaGFzIGluY29ycmVjdCBzaGFwZSAnICtcbiAgICAgICAgYCR7c3BhcnNlVmFsdWVzLnNoYXBlfSwgc2hvdWxkIGJlIFtdIG9yIFske251bUVsZW1zfV1gKTtcbiAgfVxuXG4gIGlmIChzcGFyc2VWYWx1ZXMuZHR5cGUgIT09IGRlZmF1bHRWYWx1ZXMuZHR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NwYXJzZVZhbHVlcy5kdHlwZSBtdXN0IG1hdGNoIGRlZmF1bHRWYWx1ZXMuZHR5cGUnKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { SparseToDense } from '../kernel_names';\nimport * as sparse_to_dense from '../ops/sparse_to_dense_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { assertNonNegativeIntegerDimensions } from '../util_base';\nimport { op } from './operation';\n/**\n * Converts a sparse representation into a dense tensor.\n *\n * Builds an array dense with shape outputShape such that:\n *\n * // If sparseIndices is scalar\n * dense[i] = (i == sparseIndices ? sparseValues : defaultValue)\n *\n * // If sparseIndices is a vector, then for each i\n * dense[sparseIndices[i]] = sparseValues[i]\n *\n * // If sparseIndices is an n by d matrix, then for each i in [0, n)\n * dense[sparseIndices[i][0], ..., sparseIndices[i][d-1]] = sparseValues[i]\n * All other values in dense are set to defaultValue. If sparseValues is a\n * scalar, all sparse indices are set to this single value.\n *\n * If indices are repeated the final value is summed over all values for those\n * indices.\n *\n * ```js\n * const indices = tf.tensor1d([4, 5, 6, 1, 2, 3], 'int32');\n * const values = tf.tensor1d([10, 11, 12, 13, 14, 15], 'float32');\n * const shape = [8];\n * tf.sparseToDense(indices, values, shape).print();\n * ```\n *\n * @param sparseIndices A 0-D, 1-D, or 2-D Tensor of type int32.\n * sparseIndices[i] contains the complete index where sparseValues[i] will be\n * placed.\n * @param sparseValues A 0-D or 1-D Tensor. Values\n * corresponding to each row of sparseIndices, or a scalar value to be used for\n * all sparse indices.\n * @param outputShape Shape of the dense output tensor. The type is inferred.\n * @param defaultValue Scalar. Value to set for indices not specified in\n * sparseIndices. Defaults to zero.\n *\n * @doc {heading: 'Operations', subheading: 'Normalization'}\n */\nfunction sparseToDense_(sparseIndices, sparseValues, outputShape, defaultValue = 0) {\n assertNonNegativeIntegerDimensions(outputShape);\n const $sparseIndices = convertToTensor(sparseIndices, 'sparseIndices', 'sparseToDense', 'int32');\n const $sparseValues = convertToTensor(sparseValues, 'sparseValues', 'sparseToDense', 'string_or_numeric');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'sparseToDense', $sparseValues.dtype);\n sparse_to_dense.validateInput($sparseIndices, $sparseValues, outputShape, $defaultValue);\n const inputs = {\n sparseIndices: $sparseIndices,\n sparseValues: $sparseValues,\n defaultValue: $defaultValue\n };\n const attrs = { outputShape };\n return ENGINE.runKernel(SparseToDense, inputs, attrs);\n}\nexport const sparseToDense = /* @__PURE__ */ op({ sparseToDense_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3RvX2RlbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlX3RvX2RlbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLGFBQWEsRUFBMEMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RixPQUFPLEtBQUssZUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBRy9ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsY0FBYyxDQUNuQixhQUFnQyxFQUFFLFlBQStCLEVBQ2pFLFdBQXdCLEVBQUUsZUFBa0MsQ0FBQztJQUMvRCxrQ0FBa0MsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVoRCxNQUFNLGNBQWMsR0FDaEIsZUFBZSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FDakMsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQ2pDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RSxlQUFlLENBQUMsYUFBYSxDQUN6QixjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUUvRCxNQUFNLE1BQU0sR0FBd0I7UUFDbEMsYUFBYSxFQUFFLGNBQWM7UUFDN0IsWUFBWSxFQUFFLGFBQWE7UUFDM0IsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUF1QixFQUFDLFdBQVcsRUFBQyxDQUFDO0lBRWhELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsYUFBYSxFQUFFLE1BQW1DLEVBQ2xELEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlVG9EZW5zZSwgU3BhcnNlVG9EZW5zZUF0dHJzLCBTcGFyc2VUb0RlbnNlSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQgKiBhcyBzcGFyc2VfdG9fZGVuc2UgZnJvbSAnLi4vb3BzL3NwYXJzZV90b19kZW5zZV91dGlsJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1JhbmssIFNjYWxhckxpa2UsIFNoYXBlTWFwLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnN9IGZyb20gJy4uL3V0aWxfYmFzZSc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNwYXJzZSByZXByZXNlbnRhdGlvbiBpbnRvIGEgZGVuc2UgdGVuc29yLlxuICpcbiAqIEJ1aWxkcyBhbiBhcnJheSBkZW5zZSB3aXRoIHNoYXBlIG91dHB1dFNoYXBlIHN1Y2ggdGhhdDpcbiAqXG4gKiAvLyBJZiBzcGFyc2VJbmRpY2VzIGlzIHNjYWxhclxuICogZGVuc2VbaV0gPSAoaSA9PSBzcGFyc2VJbmRpY2VzID8gc3BhcnNlVmFsdWVzIDogZGVmYXVsdFZhbHVlKVxuICpcbiAqIC8vIElmIHNwYXJzZUluZGljZXMgaXMgYSB2ZWN0b3IsIHRoZW4gZm9yIGVhY2ggaVxuICogZGVuc2Vbc3BhcnNlSW5kaWNlc1tpXV0gPSBzcGFyc2VWYWx1ZXNbaV1cbiAqXG4gKiAvLyBJZiBzcGFyc2VJbmRpY2VzIGlzIGFuIG4gYnkgZCBtYXRyaXgsIHRoZW4gZm9yIGVhY2ggaSBpbiBbMCwgbilcbiAqIGRlbnNlW3NwYXJzZUluZGljZXNbaV1bMF0sIC4uLiwgc3BhcnNlSW5kaWNlc1tpXVtkLTFdXSA9IHNwYXJzZVZhbHVlc1tpXVxuICogQWxsIG90aGVyIHZhbHVlcyBpbiBkZW5zZSBhcmUgc2V0IHRvIGRlZmF1bHRWYWx1ZS4gSWYgc3BhcnNlVmFsdWVzIGlzIGFcbiAqIHNjYWxhciwgYWxsIHNwYXJzZSBpbmRpY2VzIGFyZSBzZXQgdG8gdGhpcyBzaW5nbGUgdmFsdWUuXG4gKlxuICogSWYgaW5kaWNlcyBhcmUgcmVwZWF0ZWQgdGhlIGZpbmFsIHZhbHVlIGlzIHN1bW1lZCBvdmVyIGFsbCB2YWx1ZXMgZm9yIHRob3NlXG4gKiBpbmRpY2VzLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBpbmRpY2VzID0gdGYudGVuc29yMWQoWzQsIDUsIDYsIDEsIDIsIDNdLCAnaW50MzInKTtcbiAqIGNvbnN0IHZhbHVlcyA9IHRmLnRlbnNvcjFkKFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1XSwgJ2Zsb2F0MzInKTtcbiAqIGNvbnN0IHNoYXBlID0gWzhdO1xuICogdGYuc3BhcnNlVG9EZW5zZShpbmRpY2VzLCB2YWx1ZXMsIHNoYXBlKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNwYXJzZUluZGljZXMgQSAwLUQsIDEtRCwgb3IgMi1EIFRlbnNvciBvZiB0eXBlIGludDMyLlxuICogc3BhcnNlSW5kaWNlc1tpXSBjb250YWlucyB0aGUgY29tcGxldGUgaW5kZXggd2hlcmUgc3BhcnNlVmFsdWVzW2ldIHdpbGwgYmVcbiAqIHBsYWNlZC5cbiAqIEBwYXJhbSBzcGFyc2VWYWx1ZXMgQSAwLUQgb3IgMS1EIFRlbnNvci4gVmFsdWVzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcm93IG9mIHNwYXJzZUluZGljZXMsIG9yIGEgc2NhbGFyIHZhbHVlIHRvIGJlIHVzZWQgZm9yXG4gKiBhbGwgc3BhcnNlIGluZGljZXMuXG4gKiBAcGFyYW0gb3V0cHV0U2hhcGUgU2hhcGUgb2YgdGhlIGRlbnNlIG91dHB1dCB0ZW5zb3IuIFRoZSB0eXBlIGlzIGluZmVycmVkLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBTY2FsYXIuIFZhbHVlIHRvIHNldCBmb3IgaW5kaWNlcyBub3Qgc3BlY2lmaWVkIGluXG4gKiBzcGFyc2VJbmRpY2VzLiBEZWZhdWx0cyB0byB6ZXJvLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ05vcm1hbGl6YXRpb24nfVxuICovXG5mdW5jdGlvbiBzcGFyc2VUb0RlbnNlXzxSIGV4dGVuZHMgUmFuaz4oXG4gICAgc3BhcnNlSW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UsIHNwYXJzZVZhbHVlczogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgb3V0cHV0U2hhcGU6IFNoYXBlTWFwW1JdLCBkZWZhdWx0VmFsdWU6IFNjYWxhcnxTY2FsYXJMaWtlID0gMCk6IFRlbnNvcjxSPiB7XG4gIGFzc2VydE5vbk5lZ2F0aXZlSW50ZWdlckRpbWVuc2lvbnMob3V0cHV0U2hhcGUpO1xuXG4gIGNvbnN0ICRzcGFyc2VJbmRpY2VzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzcGFyc2VJbmRpY2VzLCAnc3BhcnNlSW5kaWNlcycsICdzcGFyc2VUb0RlbnNlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRzcGFyc2VWYWx1ZXMgPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICBzcGFyc2VWYWx1ZXMsICdzcGFyc2VWYWx1ZXMnLCAnc3BhcnNlVG9EZW5zZScsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID0gY29udmVydFRvVGVuc29yKFxuICAgICAgZGVmYXVsdFZhbHVlLCAnZGVmYXVsdFZhbHVlJywgJ3NwYXJzZVRvRGVuc2UnLCAkc3BhcnNlVmFsdWVzLmR0eXBlKTtcblxuICBzcGFyc2VfdG9fZGVuc2UudmFsaWRhdGVJbnB1dChcbiAgICAgICRzcGFyc2VJbmRpY2VzLCAkc3BhcnNlVmFsdWVzLCBvdXRwdXRTaGFwZSwgJGRlZmF1bHRWYWx1ZSk7XG5cbiAgY29uc3QgaW5wdXRzOiBTcGFyc2VUb0RlbnNlSW5wdXRzID0ge1xuICAgIHNwYXJzZUluZGljZXM6ICRzcGFyc2VJbmRpY2VzLFxuICAgIHNwYXJzZVZhbHVlczogJHNwYXJzZVZhbHVlcyxcbiAgICBkZWZhdWx0VmFsdWU6ICRkZWZhdWx0VmFsdWVcbiAgfTtcblxuICBjb25zdCBhdHRyczogU3BhcnNlVG9EZW5zZUF0dHJzID0ge291dHB1dFNoYXBlfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgIFNwYXJzZVRvRGVuc2UsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlVG9EZW5zZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3BhcnNlVG9EZW5zZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { GatherNd } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Gather slices from input tensor into a Tensor with shape specified by\n * `indices`.\n *\n * `indices` is a K-dimensional integer tensor, best thought of as a\n * (K-1)-dimensional tensor of indices into input, where each element defines a\n * slice of input:\n * output[\\\\(i_0, ..., i_{K-2}\\\\)] = input[indices[\\\\(i_0, ..., i_{K-2}\\\\)]]\n *\n * Whereas in `tf.gather`, `indices` defines slices into the first dimension of\n * input, in `tf.gatherND`, `indices` defines slices into the first N dimensions\n * of input, where N = indices.shape[-1].\n *\n * The last dimension of indices can be at most the rank of input:\n * indices.shape[-1] <= input.rank\n *\n * The last dimension of `indices` corresponds to elements\n * (if indices.shape[-1] == input.rank) or slices\n * (if indices.shape[-1] < input.rank) along dimension indices.shape[-1] of\n * input.\n * The output tensor has shape\n * indices.shape[:-1] + input.shape[indices.shape[-1]:]\n *\n * Note that on CPU, if an out of bound index is found, an error is returned. On\n * GPU, if an out of bound index is found, a 0 is stored in the corresponding\n * output value.\n *\n * ```js\n * const indices = tf.tensor2d([0, 1, 1, 0], [2,2], 'int32');\n * const input = tf.tensor2d([9, 10, 11, 12], [2, 2]);\n * tf.gatherND(input, indices).print() // [10, 11]\n * ```\n *\n * @param x The tensor from which to gather values.\n * @param indices Index tensor, must be of type int32.\n *\n * @doc {heading: 'Operations', subheading: 'Slicing and Joining'}\n */\nfunction gatherND_(x, indices) {\n const $indices = convertToTensor(indices, 'indices', 'gatherND', 'int32');\n const $x = convertToTensor(x, 'x', 'gatherND', 'string_or_numeric');\n const inputs = { params: $x, indices: $indices };\n return ENGINE.runKernel(GatherNd, inputs);\n}\nexport const gatherND = /* @__PURE__ */ op({ gatherND_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX25kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZ2F0aGVyX25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLFFBQVEsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILFNBQVMsU0FBUyxDQUFDLENBQW9CLEVBQUUsT0FBMEI7SUFDakUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sTUFBTSxHQUFtQixFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBRS9ELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBbUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7R2F0aGVyTmQsIEdhdGhlck5kSW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBHYXRoZXIgc2xpY2VzIGZyb20gaW5wdXQgdGVuc29yIGludG8gYSBUZW5zb3Igd2l0aCBzaGFwZSBzcGVjaWZpZWQgYnlcbiAqIGBpbmRpY2VzYC5cbiAqXG4gKiBgaW5kaWNlc2AgaXMgYSBLLWRpbWVuc2lvbmFsIGludGVnZXIgdGVuc29yLCBiZXN0IHRob3VnaHQgb2YgYXMgYVxuICogKEstMSktZGltZW5zaW9uYWwgdGVuc29yIG9mIGluZGljZXMgaW50byBpbnB1dCwgd2hlcmUgZWFjaCBlbGVtZW50IGRlZmluZXMgYVxuICogc2xpY2Ugb2YgaW5wdXQ6XG4gKiBvdXRwdXRbXFxcXChpXzAsIC4uLiwgaV97Sy0yfVxcXFwpXSA9IGlucHV0W2luZGljZXNbXFxcXChpXzAsIC4uLiwgaV97Sy0yfVxcXFwpXV1cbiAqXG4gKiBXaGVyZWFzIGluIGB0Zi5nYXRoZXJgLCBgaW5kaWNlc2AgZGVmaW5lcyBzbGljZXMgaW50byB0aGUgZmlyc3QgZGltZW5zaW9uIG9mXG4gKiBpbnB1dCwgaW4gYHRmLmdhdGhlck5EYCwgYGluZGljZXNgIGRlZmluZXMgc2xpY2VzIGludG8gdGhlIGZpcnN0IE4gZGltZW5zaW9uc1xuICogb2YgaW5wdXQsIHdoZXJlIE4gPSBpbmRpY2VzLnNoYXBlWy0xXS5cbiAqXG4gKiBUaGUgbGFzdCBkaW1lbnNpb24gb2YgaW5kaWNlcyBjYW4gYmUgYXQgbW9zdCB0aGUgcmFuayBvZiBpbnB1dDpcbiAqIGluZGljZXMuc2hhcGVbLTFdIDw9IGlucHV0LnJhbmtcbiAqXG4gKiBUaGUgbGFzdCBkaW1lbnNpb24gb2YgYGluZGljZXNgIGNvcnJlc3BvbmRzIHRvIGVsZW1lbnRzXG4gKiAoaWYgaW5kaWNlcy5zaGFwZVstMV0gPT0gaW5wdXQucmFuaykgb3Igc2xpY2VzXG4gKiAoaWYgaW5kaWNlcy5zaGFwZVstMV0gPCBpbnB1dC5yYW5rKSBhbG9uZyBkaW1lbnNpb24gaW5kaWNlcy5zaGFwZVstMV0gb2ZcbiAqIGlucHV0LlxuICogVGhlIG91dHB1dCB0ZW5zb3IgaGFzIHNoYXBlXG4gKiBpbmRpY2VzLnNoYXBlWzotMV0gKyBpbnB1dC5zaGFwZVtpbmRpY2VzLnNoYXBlWy0xXTpdXG4gKlxuICogTm90ZSB0aGF0IG9uIENQVSwgaWYgYW4gb3V0IG9mIGJvdW5kIGluZGV4IGlzIGZvdW5kLCBhbiBlcnJvciBpcyByZXR1cm5lZC4gT25cbiAqIEdQVSwgaWYgYW4gb3V0IG9mIGJvdW5kIGluZGV4IGlzIGZvdW5kLCBhIDAgaXMgc3RvcmVkIGluIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvdXRwdXQgdmFsdWUuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGluZGljZXMgPSB0Zi50ZW5zb3IyZChbMCwgMSwgMSwgMF0sIFsyLDJdLCAnaW50MzInKTtcbiAqIGNvbnN0IGlucHV0ID0gdGYudGVuc29yMmQoWzksIDEwLCAxMSwgMTJdLCBbMiwgMl0pO1xuICogdGYuZ2F0aGVyTkQoaW5wdXQsIGluZGljZXMpLnByaW50KCkgLy8gWzEwLCAxMV1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB4IFRoZSB0ZW5zb3IgZnJvbSB3aGljaCB0byBnYXRoZXIgdmFsdWVzLlxuICogQHBhcmFtIGluZGljZXMgSW5kZXggdGVuc29yLCBtdXN0IGJlIG9mIHR5cGUgaW50MzIuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2xpY2luZyBhbmQgSm9pbmluZyd9XG4gKi9cbmZ1bmN0aW9uIGdhdGhlck5EXyh4OiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yfFRlbnNvckxpa2UpOiBUZW5zb3Ige1xuICBjb25zdCAkaW5kaWNlcyA9IGNvbnZlcnRUb1RlbnNvcihpbmRpY2VzLCAnaW5kaWNlcycsICdnYXRoZXJORCcsICdpbnQzMicpO1xuICBjb25zdCAkeCA9IGNvbnZlcnRUb1RlbnNvcih4LCAneCcsICdnYXRoZXJORCcsICdzdHJpbmdfb3JfbnVtZXJpYycpO1xuXG4gIGNvbnN0IGlucHV0czogR2F0aGVyTmRJbnB1dHMgPSB7cGFyYW1zOiAkeCwgaW5kaWNlczogJGluZGljZXN9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKEdhdGhlck5kLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCk7XG59XG5cbmV4cG9ydCBjb25zdCBnYXRoZXJORCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z2F0aGVyTkRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\n/**\n * Normalize noise shape based on provided tensor and noise shape.\n *\n * @param x Tensor.\n * @param noiseShape The shape for the randomly generated keep/drop flags, as\n * an array of numbers. Optional.\n * @returns Normalized noise shape.\n */\nexport function getNoiseShape(x, noiseShape) {\n if (noiseShape == null) {\n return x.shape.slice();\n }\n if (util.arraysEqual(x.shape, noiseShape)) {\n return noiseShape;\n }\n if (x.shape.length === noiseShape.length) {\n const newDimension = [];\n for (let i = 0; i < x.shape.length; i++) {\n if (noiseShape[i] == null && x.shape[i] != null) {\n newDimension.push(x.shape[i]);\n }\n else {\n newDimension.push(noiseShape[i]);\n }\n }\n return newDimension;\n }\n return noiseShape;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG91dF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZHJvcG91dF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVMsRUFBRSxVQUFxQjtJQUM1RCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDekMsT0FBTyxVQUFVLENBQUM7S0FDbkI7SUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDeEMsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQy9DLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9CO2lCQUFNO2dCQUNMLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBub2lzZSBzaGFwZSBiYXNlZCBvbiBwcm92aWRlZCB0ZW5zb3IgYW5kIG5vaXNlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB4IFRlbnNvci5cbiAqIEBwYXJhbSBub2lzZVNoYXBlIFRoZSBzaGFwZSBmb3IgdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCBrZWVwL2Ryb3AgZmxhZ3MsIGFzXG4gKiAgIGFuIGFycmF5IG9mIG51bWJlcnMuIE9wdGlvbmFsLlxuICogQHJldHVybnMgTm9ybWFsaXplZCBub2lzZSBzaGFwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vaXNlU2hhcGUoeDogVGVuc29yLCBub2lzZVNoYXBlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGlmIChub2lzZVNoYXBlID09IG51bGwpIHtcbiAgICByZXR1cm4geC5zaGFwZS5zbGljZSgpO1xuICB9XG4gIGlmICh1dGlsLmFycmF5c0VxdWFsKHguc2hhcGUsIG5vaXNlU2hhcGUpKSB7XG4gICAgcmV0dXJuIG5vaXNlU2hhcGU7XG4gIH1cbiAgaWYgKHguc2hhcGUubGVuZ3RoID09PSBub2lzZVNoYXBlLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0RpbWVuc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHguc2hhcGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2lzZVNoYXBlW2ldID09IG51bGwgJiYgeC5zaGFwZVtpXSAhPSBudWxsKSB7XG4gICAgICAgIG5ld0RpbWVuc2lvbi5wdXNoKHguc2hhcGVbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RGltZW5zaW9uLnB1c2gobm9pc2VTaGFwZVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdEaW1lbnNpb247XG4gIH1cblxuICByZXR1cm4gbm9pc2VTaGFwZTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { add } from './add';\nimport { div } from './div';\nimport { getNoiseShape } from './dropout_util';\nimport { floor } from './floor';\nimport { mul } from './mul';\nimport { op } from './operation';\nimport { randomUniform } from './random_uniform';\n/**\n * Computes dropout.\n *\n * ```js\n * const x = tf.tensor1d([1, 2, 2, 1]);\n * const rate = 0.75;\n * const output = tf.dropout(x, rate);\n * output.print();\n * ```\n *\n * @param x A floating point Tensor or TensorLike.\n * @param rate A float in the range [0, 1). The probability that each element\n * of x is discarded.\n * @param noiseShape An array of numbers of type int32, representing the\n * shape for randomly generated keep/drop flags. If the noiseShape has null\n * value, it will be automatically replaced with the x's relative dimension\n * size. Optional.\n * @param seed Used to create random seeds. Optional.\n * @returns A Tensor of the same shape of x.\n *\n * @doc {heading: 'Operations', subheading: 'Dropout'}\n */\nfunction dropout_(x, rate, noiseShape, seed) {\n const $x = convertToTensor(x, 'x', 'dropout');\n util.assert($x.dtype === 'float32', () => `x has to be a floating point tensor since it's going to be ` +\n `scaled, but got a ${$x.dtype} tensor instead.`);\n util.assert(rate >= 0 && rate < 1, () => `rate must be a float in the range [0, 1), but got ${rate}.`);\n if (rate === 0) {\n return x instanceof Tensor ? $x.clone() : $x;\n }\n const $noiseShape = getNoiseShape($x, noiseShape);\n const keepProb = 1 - rate;\n const multiplier = div(floor(add(randomUniform($noiseShape, 0, 1, 'float32', seed), keepProb)), keepProb);\n return mul($x, multiplier);\n}\nexport const dropout = /* @__PURE__ */ op({ dropout_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcG91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Ryb3BvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILFNBQVMsUUFBUSxDQUNiLENBQW9CLEVBQUUsSUFBWSxFQUFFLFVBQXFCLEVBQ3pELElBQW9CO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxNQUFNLENBQ1AsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQ3RCLEdBQUcsRUFBRSxDQUFDLDZEQUE2RDtRQUMvRCxxQkFBcUIsRUFBRSxDQUFDLEtBQUssa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMscURBQXFELElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEUsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM5QztJQUVELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUN2RSxRQUFRLENBQUMsQ0FBQztJQUVkLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQge2FkZH0gZnJvbSAnLi9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4vZGl2JztcbmltcG9ydCB7Z2V0Tm9pc2VTaGFwZX0gZnJvbSAnLi9kcm9wb3V0X3V0aWwnO1xuaW1wb3J0IHtmbG9vcn0gZnJvbSAnLi9mbG9vcic7XG5pbXBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyYW5kb21Vbmlmb3JtfSBmcm9tICcuL3JhbmRvbV91bmlmb3JtJztcblxuLyoqXG4gKiBDb21wdXRlcyBkcm9wb3V0LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCB4ID0gdGYudGVuc29yMWQoWzEsIDIsIDIsIDFdKTtcbiAqIGNvbnN0IHJhdGUgPSAwLjc1O1xuICogY29uc3Qgb3V0cHV0ID0gdGYuZHJvcG91dCh4LCByYXRlKTtcbiAqIG91dHB1dC5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHggQSBmbG9hdGluZyBwb2ludCBUZW5zb3Igb3IgVGVuc29yTGlrZS5cbiAqIEBwYXJhbSByYXRlIEEgZmxvYXQgaW4gdGhlIHJhbmdlIFswLCAxKS4gVGhlIHByb2JhYmlsaXR5IHRoYXQgZWFjaCBlbGVtZW50XG4gKiAgIG9mIHggaXMgZGlzY2FyZGVkLlxuICogQHBhcmFtIG5vaXNlU2hhcGUgQW4gYXJyYXkgb2YgbnVtYmVycyBvZiB0eXBlIGludDMyLCByZXByZXNlbnRpbmcgdGhlXG4gKiBzaGFwZSBmb3IgcmFuZG9tbHkgZ2VuZXJhdGVkIGtlZXAvZHJvcCBmbGFncy4gSWYgdGhlIG5vaXNlU2hhcGUgaGFzIG51bGxcbiAqIHZhbHVlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgeCdzIHJlbGF0aXZlIGRpbWVuc2lvblxuICogc2l6ZS4gT3B0aW9uYWwuXG4gKiBAcGFyYW0gc2VlZCBVc2VkIHRvIGNyZWF0ZSByYW5kb20gc2VlZHMuIE9wdGlvbmFsLlxuICogQHJldHVybnMgQSBUZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgb2YgeC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdEcm9wb3V0J31cbiAqL1xuZnVuY3Rpb24gZHJvcG91dF8oXG4gICAgeDogVGVuc29yfFRlbnNvckxpa2UsIHJhdGU6IG51bWJlciwgbm9pc2VTaGFwZT86IG51bWJlcltdLFxuICAgIHNlZWQ/OiBudW1iZXJ8c3RyaW5nKTogVGVuc29yIHtcbiAgY29uc3QgJHggPSBjb252ZXJ0VG9UZW5zb3IoeCwgJ3gnLCAnZHJvcG91dCcpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHguZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+IGB4IGhhcyB0byBiZSBhIGZsb2F0aW5nIHBvaW50IHRlbnNvciBzaW5jZSBpdCdzIGdvaW5nIHRvIGJlIGAgK1xuICAgICAgICAgIGBzY2FsZWQsIGJ1dCBnb3QgYSAkeyR4LmR0eXBlfSB0ZW5zb3IgaW5zdGVhZC5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICByYXRlID49IDAgJiYgcmF0ZSA8IDEsXG4gICAgICAoKSA9PiBgcmF0ZSBtdXN0IGJlIGEgZmxvYXQgaW4gdGhlIHJhbmdlIFswLCAxKSwgYnV0IGdvdCAke3JhdGV9LmApO1xuXG4gIGlmIChyYXRlID09PSAwKSB7XG4gICAgcmV0dXJuIHggaW5zdGFuY2VvZiBUZW5zb3IgPyAkeC5jbG9uZSgpIDogJHg7XG4gIH1cblxuICBjb25zdCAkbm9pc2VTaGFwZSA9IGdldE5vaXNlU2hhcGUoJHgsIG5vaXNlU2hhcGUpO1xuICBjb25zdCBrZWVwUHJvYiA9IDEgLSByYXRlO1xuICBjb25zdCBtdWx0aXBsaWVyID0gZGl2KFxuICAgICAgZmxvb3IoYWRkKHJhbmRvbVVuaWZvcm0oJG5vaXNlU2hhcGUsIDAsIDEsICdmbG9hdDMyJywgc2VlZCksIGtlZXBQcm9iKSksXG4gICAgICBrZWVwUHJvYik7XG5cbiAgcmV0dXJuIG11bCgkeCwgbXVsdGlwbGllcik7XG59XG5cbmV4cG9ydCBjb25zdCBkcm9wb3V0ID0gLyogQF9fUFVSRV9fICovIG9wKHtkcm9wb3V0X30pO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tensor1d } from './tensor1d';\nexport function enclosingPowerOfTwo(value) {\n // Return 2**N for integer N such that 2**N >= value.\n return Math.floor(Math.pow(2, Math.ceil(Math.log(value) / Math.log(2.0))));\n}\nexport function cosineWindow(windowLength, a, b) {\n const even = 1 - windowLength % 2;\n const newValues = new Float32Array(windowLength);\n for (let i = 0; i < windowLength; ++i) {\n const cosArg = (2.0 * Math.PI * i) / (windowLength + even - 1);\n newValues[i] = a - b * Math.cos(cosArg);\n }\n return tensor1d(newValues, 'float32');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsX29wc191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2lnbmFsX29wc191dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWE7SUFDL0MscURBQXFEO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDeEIsWUFBb0IsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUM1QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ELFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IxRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7dGVuc29yMWR9IGZyb20gJy4vdGVuc29yMWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW5jbG9zaW5nUG93ZXJPZlR3byh2YWx1ZTogbnVtYmVyKSB7XG4gIC8vIFJldHVybiAyKipOIGZvciBpbnRlZ2VyIE4gc3VjaCB0aGF0IDIqKk4gPj0gdmFsdWUuXG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucG93KDIsIE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLmxvZygyLjApKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29zaW5lV2luZG93KFxuICAgIHdpbmRvd0xlbmd0aDogbnVtYmVyLCBhOiBudW1iZXIsIGI6IG51bWJlcik6IFRlbnNvcjFEIHtcbiAgY29uc3QgZXZlbiA9IDEgLSB3aW5kb3dMZW5ndGggJSAyO1xuICBjb25zdCBuZXdWYWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHdpbmRvd0xlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93TGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb3NBcmcgPSAoMi4wICogTWF0aC5QSSAqIGkpIC8gKHdpbmRvd0xlbmd0aCArIGV2ZW4gLSAxKTtcbiAgICBuZXdWYWx1ZXNbaV0gPSBhIC0gYiAqIE1hdGguY29zKGNvc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHRlbnNvcjFkKG5ld1ZhbHVlcywgJ2Zsb2F0MzInKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport { assert, assertShapesMatch, getTypedArrayFromDType } from '../util';\nimport { tensor } from './tensor';\n/**\n * Returns whether the targets are in the top K predictions.\n *\n * ```js\n * const predictions = tf.tensor2d([[20, 10, 40, 30], [30, 50, -20, 10]]);\n * const targets = tf.tensor1d([2, 0]);\n * const precision = await tf.inTopKAsync(predictions, targets);\n * precision.print();\n * ```\n * @param predictions 2-D or higher `tf.Tensor` with last dimension being\n * at least `k`.\n * @param targets 1-D or higher `tf.Tensor`.\n * @param k Optional Number of top elements to look at for computing precision,\n * default to 1.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nasync function inTopKAsync_(predictions, targets, k = 1) {\n const $predictions = convertToTensor(predictions, 'predictions', 'inTopK');\n const $targets = convertToTensor(targets, 'targets', 'inTopK');\n assert($predictions.rank > 1, () => 'inTopK() expects the predictions to be of rank 2 or higher, ' +\n `but got ${$predictions.rank}`);\n assert($predictions.rank - 1 === $targets.rank, () => `predictions rank should be 1 larger than ` +\n `targets rank, but got predictions rank ` +\n `${$predictions.rank} and targets rank ${$targets.rank}`);\n assertShapesMatch($predictions.shape.slice(0, $predictions.shape.length - 1), $targets.shape, `predictions's shape should be align with the targets' shape, ` +\n 'except the last dimension.');\n const lastDim = $predictions.shape[$predictions.shape.length - 1];\n assert(k > 0 && k <= lastDim, () => `'k' passed to inTopK() must be > 0 && <= the predictions last ` +\n `dimension (${lastDim}), but got ${k}`);\n const predictionsVals = await $predictions.data();\n const targetsVals = await $targets.data();\n // Reshape predictionsVals into a 2d tensor [batch, lastDim]\n // and look up topK along lastDim.\n const [batch, size] = [predictionsVals.length / lastDim, lastDim];\n const precision = getTypedArrayFromDType('bool', batch);\n for (let b = 0; b < batch; b++) {\n const offset = b * size;\n const vals = predictionsVals.subarray(offset, offset + size);\n const valAndInd = [];\n for (let i = 0; i < vals.length; i++) {\n valAndInd.push({ value: vals[i], index: i });\n }\n valAndInd.sort((a, b) => b.value - a.value);\n precision[b] = 0;\n for (let i = 0; i < k; i++) {\n if (valAndInd[i].index === targetsVals[b]) {\n precision[b] = 1;\n break;\n }\n }\n }\n if (predictions !== $predictions) {\n $predictions.dispose();\n }\n if (targets !== $targets) {\n $targets.dispose();\n }\n // Output precision has the same shape as targets.\n return tensor(precision, $targets.shape, 'bool');\n}\nexport const inTopKAsync = inTopKAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5fdG9wX2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbl90b3Bfay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsS0FBSyxVQUFVLFlBQVksQ0FDdkIsV0FBeUIsRUFBRSxPQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3pELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sQ0FDRixZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsOERBQThEO1FBQ2hFLFdBQVcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUNGLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQ3ZDLEdBQUcsRUFBRSxDQUFDLDJDQUEyQztRQUM3Qyx5Q0FBeUM7UUFDekMsR0FBRyxZQUFZLENBQUMsSUFBSSxxQkFBcUIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEUsaUJBQWlCLENBQ2IsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUMxRCxRQUFRLENBQUMsS0FBSyxFQUNkLCtEQUErRDtRQUMzRCw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxDQUNGLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFDckIsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLGNBQWMsT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUMsNERBQTREO0lBQzVELGtDQUFrQztJQUNsQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0QsTUFBTSxTQUFTLEdBQTBDLEVBQUUsQ0FBQztRQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsTUFBTTthQUNQO1NBQ0Y7S0FDRjtJQUVELElBQUksV0FBVyxLQUFLLFlBQVksRUFBRTtRQUNoQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDeEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDeEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3BCO0lBRUQsa0RBQWtEO0lBQ2xELE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBTSxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydCwgYXNzZXJ0U2hhcGVzTWF0Y2gsIGdldFR5cGVkQXJyYXlGcm9tRFR5cGV9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHt0ZW5zb3J9IGZyb20gJy4vdGVuc29yJztcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHRhcmdldHMgYXJlIGluIHRoZSB0b3AgSyBwcmVkaWN0aW9ucy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcHJlZGljdGlvbnMgPSB0Zi50ZW5zb3IyZChbWzIwLCAxMCwgNDAsIDMwXSwgWzMwLCA1MCwgLTIwLCAxMF1dKTtcbiAqIGNvbnN0IHRhcmdldHMgPSB0Zi50ZW5zb3IxZChbMiwgMF0pO1xuICogY29uc3QgcHJlY2lzaW9uID0gYXdhaXQgdGYuaW5Ub3BLQXN5bmMocHJlZGljdGlvbnMsIHRhcmdldHMpO1xuICogcHJlY2lzaW9uLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyAyLUQgb3IgaGlnaGVyIGB0Zi5UZW5zb3JgIHdpdGggbGFzdCBkaW1lbnNpb24gYmVpbmdcbiAqICAgICBhdCBsZWFzdCBga2AuXG4gKiBAcGFyYW0gdGFyZ2V0cyAxLUQgb3IgaGlnaGVyIGB0Zi5UZW5zb3JgLlxuICogQHBhcmFtIGsgT3B0aW9uYWwgTnVtYmVyIG9mIHRvcCBlbGVtZW50cyB0byBsb29rIGF0IGZvciBjb21wdXRpbmcgcHJlY2lzaW9uLFxuICogICAgIGRlZmF1bHQgdG8gMS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdFdmFsdWF0aW9uJ31cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5Ub3BLQXN5bmNfPFQgZXh0ZW5kcyBUZW5zb3IsIFUgZXh0ZW5kcyBUZW5zb3I+KFxuICAgIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsIHRhcmdldHM6IFV8VGVuc29yTGlrZSwgayA9IDEpOiBQcm9taXNlPFU+IHtcbiAgY29uc3QgJHByZWRpY3Rpb25zID0gY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnaW5Ub3BLJyk7XG4gIGNvbnN0ICR0YXJnZXRzID0gY29udmVydFRvVGVuc29yKHRhcmdldHMsICd0YXJnZXRzJywgJ2luVG9wSycpO1xuXG4gIGFzc2VydChcbiAgICAgICRwcmVkaWN0aW9ucy5yYW5rID4gMSxcbiAgICAgICgpID0+ICdpblRvcEsoKSBleHBlY3RzIHRoZSBwcmVkaWN0aW9ucyB0byBiZSBvZiByYW5rIDIgb3IgaGlnaGVyLCAnICtcbiAgICAgICAgICBgYnV0IGdvdCAkeyRwcmVkaWN0aW9ucy5yYW5rfWApO1xuICBhc3NlcnQoXG4gICAgICAkcHJlZGljdGlvbnMucmFuayAtIDEgPT09ICR0YXJnZXRzLnJhbmssXG4gICAgICAoKSA9PiBgcHJlZGljdGlvbnMgcmFuayBzaG91bGQgYmUgMSBsYXJnZXIgdGhhbiBgICtcbiAgICAgICAgICBgdGFyZ2V0cyByYW5rLCBidXQgZ290IHByZWRpY3Rpb25zIHJhbmsgYCArXG4gICAgICAgICAgYCR7JHByZWRpY3Rpb25zLnJhbmt9IGFuZCB0YXJnZXRzIHJhbmsgJHskdGFyZ2V0cy5yYW5rfWApO1xuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRwcmVkaWN0aW9ucy5zaGFwZS5zbGljZSgwLCAkcHJlZGljdGlvbnMuc2hhcGUubGVuZ3RoIC0gMSksXG4gICAgICAkdGFyZ2V0cy5zaGFwZSxcbiAgICAgIGBwcmVkaWN0aW9ucydzIHNoYXBlIHNob3VsZCBiZSBhbGlnbiB3aXRoIHRoZSB0YXJnZXRzJyBzaGFwZSwgYCArXG4gICAgICAgICAgJ2V4Y2VwdCB0aGUgbGFzdCBkaW1lbnNpb24uJyk7XG4gIGNvbnN0IGxhc3REaW0gPSAkcHJlZGljdGlvbnMuc2hhcGVbJHByZWRpY3Rpb25zLnNoYXBlLmxlbmd0aCAtIDFdO1xuICBhc3NlcnQoXG4gICAgICBrID4gMCAmJiBrIDw9IGxhc3REaW0sXG4gICAgICAoKSA9PiBgJ2snIHBhc3NlZCB0byBpblRvcEsoKSBtdXN0IGJlID4gMCAmJiA8PSB0aGUgcHJlZGljdGlvbnMgbGFzdCBgICtcbiAgICAgICAgICBgZGltZW5zaW9uICgke2xhc3REaW19KSwgYnV0IGdvdCAke2t9YCk7XG5cbiAgY29uc3QgcHJlZGljdGlvbnNWYWxzID0gYXdhaXQgJHByZWRpY3Rpb25zLmRhdGEoKTtcbiAgY29uc3QgdGFyZ2V0c1ZhbHMgPSBhd2FpdCAkdGFyZ2V0cy5kYXRhKCk7XG5cbiAgLy8gUmVzaGFwZSBwcmVkaWN0aW9uc1ZhbHMgaW50byBhIDJkIHRlbnNvciBbYmF0Y2gsIGxhc3REaW1dXG4gIC8vIGFuZCBsb29rIHVwIHRvcEsgYWxvbmcgbGFzdERpbS5cbiAgY29uc3QgW2JhdGNoLCBzaXplXSA9IFtwcmVkaWN0aW9uc1ZhbHMubGVuZ3RoIC8gbGFzdERpbSwgbGFzdERpbV07XG4gIGNvbnN0IHByZWNpc2lvbiA9IGdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2Jvb2wnLCBiYXRjaCk7XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaDsgYisrKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gYiAqIHNpemU7XG4gICAgY29uc3QgdmFscyA9IHByZWRpY3Rpb25zVmFscy5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIHNpemUpO1xuICAgIGNvbnN0IHZhbEFuZEluZDogQXJyYXk8e3ZhbHVlOiBudW1iZXIsIGluZGV4OiBudW1iZXJ9PiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsQW5kSW5kLnB1c2goe3ZhbHVlOiB2YWxzW2ldLCBpbmRleDogaX0pO1xuICAgIH1cbiAgICB2YWxBbmRJbmQuc29ydCgoYSwgYikgPT4gYi52YWx1ZSAtIGEudmFsdWUpO1xuXG4gICAgcHJlY2lzaW9uW2JdID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGs7IGkrKykge1xuICAgICAgaWYgKHZhbEFuZEluZFtpXS5pbmRleCA9PT0gdGFyZ2V0c1ZhbHNbYl0pIHtcbiAgICAgICAgcHJlY2lzaW9uW2JdID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZWRpY3Rpb25zICE9PSAkcHJlZGljdGlvbnMpIHtcbiAgICAkcHJlZGljdGlvbnMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICh0YXJnZXRzICE9PSAkdGFyZ2V0cykge1xuICAgICR0YXJnZXRzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIE91dHB1dCBwcmVjaXNpb24gaGFzIHRoZSBzYW1lIHNoYXBlIGFzIHRhcmdldHMuXG4gIHJldHVybiB0ZW5zb3IocHJlY2lzaW9uLCAkdGFyZ2V0cy5zaGFwZSwgJ2Jvb2wnKSBhcyBVO1xufVxuXG5leHBvcnQgY29uc3QgaW5Ub3BLQXN5bmMgPSBpblRvcEtBc3luY187XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Conv2DBackpropFilter } from '../kernel_names';\nimport * as util from '../util';\nimport * as conv_util from './conv_util';\nimport { op } from './operation';\nimport { reshape } from './reshape';\n/**\n * Computes the derivative of the filter of a 2D convolution.\n *\n * @param x The input tensor, of rank 4 or rank 3 of shape\n * [batch, height, width, inChannels]. If rank 3, batch of 1 is assumed.\n * @param dy The dy image, of rank 4 or rank 3, of shape\n * [batch, height, width, outDepth]. If rank 3, batch of 1 is assumed.\n * @param filterShape The shape of the filter, length 4,\n * [filterHeight, filterWidth, inDepth, outDepth].\n * @param strides The strides of the convolution: [strideHeight,\n * strideWidth].\n * @param pad A string from: 'same', 'valid'. The type of padding algorithm\n * used in the forward prop of the op.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels].\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n */\nfunction conv2DBackpropFilter_(x, dy, filterShape, strides, pad, dataFormat = 'NHWC', dimRoundingMode) {\n let x4D = x;\n if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n let dy4D = dy;\n if (dy4D.rank === 3) {\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ` +\n `${x4D.shape}.`);\n util.assert(dy4D.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ` +\n `${dy4D.shape}.`);\n util.assert(filterShape.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ` +\n `${filterShape}.`);\n const inDepth = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n const outDepth = dataFormat === 'NHWC' ? dy4D.shape[3] : dy4D.shape[1];\n util.assert(inDepth === filterShape[2], () => `Error in conv2dDerFilter: depth of input ${inDepth}) must ` +\n `match input depth in filter (${filterShape[2]}.`);\n util.assert(outDepth === filterShape[3], () => `Error in conv2dDerFilter: depth of dy (${outDepth}) must ` +\n `match output depth for filter (${filterShape[3]}).`);\n conv_util.checkPadOnDimRoundingMode('conv2dDerFilter', pad, dimRoundingMode);\n const inputs = { x: x4D, dy: dy4D };\n const attrs = { strides, pad, dataFormat, dimRoundingMode, filterShape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(Conv2DBackpropFilter, inputs, attrs);\n}\nexport const conv2DBackpropFilter = /* @__PURE__ */ op({ conv2DBackpropFilter_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkX2JhY2twcm9wX2ZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2NvbnYyZF9iYWNrcHJvcF9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsb0JBQW9CLEVBQXdELE1BQU0saUJBQWlCLENBQUM7QUFJNUcsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDMUIsQ0FBSSxFQUFFLEVBQUssRUFBRSxXQUE2QyxFQUMxRCxPQUFnQyxFQUNoQyxHQUFvRCxFQUNwRCxhQUE0QixNQUFNLEVBQ2xDLGVBQXdDO0lBQzFDLElBQUksR0FBRyxHQUFHLENBQWEsQ0FBQztJQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzRDtJQUNELElBQUksSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRTtJQUNELElBQUksQ0FBQyxNQUFNLENBQ1AsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDZixHQUFHLEVBQUUsQ0FBQyw2REFBNkQ7UUFDL0QsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsTUFBTSxDQUNQLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUN4QixHQUFHLEVBQUUsQ0FBQyxrRUFBa0U7UUFDcEUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQzFCLEdBQUcsRUFBRSxDQUFDLDRDQUE0QyxPQUFPLFNBQVM7UUFDOUQsZ0NBQWdDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUMzQixHQUFHLEVBQUUsQ0FBQywwQ0FBMEMsUUFBUSxTQUFTO1FBQzdELGtDQUFrQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlELFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0UsTUFBTSxNQUFNLEdBQStCLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQ1AsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFDLENBQUM7SUFFN0QsMERBQTBEO0lBQzFELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDWixvQkFBb0IsRUFBRSxNQUFtQyxFQUN6RCxLQUFnQyxDQUFhLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7Q29udjJEQmFja3Byb3BGaWx0ZXIsIENvbnYyREJhY2twcm9wRmlsdGVyQXR0cnMsIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBjb252X3V0aWwgZnJvbSAnLi9jb252X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBkZXJpdmF0aXZlIG9mIHRoZSBmaWx0ZXIgb2YgYSAyRCBjb252b2x1dGlvbi5cbiAqXG4gKiBAcGFyYW0geCBUaGUgaW5wdXQgdGVuc29yLCBvZiByYW5rIDQgb3IgcmFuayAzIG9mIHNoYXBlXG4gKiAgICAgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXS4gSWYgcmFuayAzLCBiYXRjaCBvZiAxIGlzIGFzc3VtZWQuXG4gKiBAcGFyYW0gZHkgVGhlIGR5IGltYWdlLCBvZiByYW5rIDQgb3IgcmFuayAzLCBvZiBzaGFwZVxuICogICAgIFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgb3V0RGVwdGhdLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXMgYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXJTaGFwZSBUaGUgc2hhcGUgb2YgdGhlIGZpbHRlciwgbGVuZ3RoIDQsXG4gKiAgICAgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXS5cbiAqIEBwYXJhbSBzdHJpZGVzIFRoZSBzdHJpZGVzIG9mIHRoZSBjb252b2x1dGlvbjogW3N0cmlkZUhlaWdodCxcbiAqIHN0cmlkZVdpZHRoXS5cbiAqIEBwYXJhbSBwYWQgQSBzdHJpbmcgZnJvbTogJ3NhbWUnLCAndmFsaWQnLiBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobVxuICogICAgIHVzZWQgaW4gdGhlIGZvcndhcmQgcHJvcCBvZiB0aGUgb3AuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqL1xuZnVuY3Rpb24gY29udjJEQmFja3Byb3BGaWx0ZXJfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oXG4gICAgeDogVCwgZHk6IFQsIGZpbHRlclNoYXBlOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICAgIGRhdGFGb3JtYXQ6ICdOSFdDJ3wnTkNIVycgPSAnTkhXQycsXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFRlbnNvcjREIHtcbiAgbGV0IHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIGlmICh4LnJhbmsgPT09IDMpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdLCB4LnNoYXBlWzJdXSk7XG4gIH1cbiAgbGV0IGR5NEQgPSBkeSBhcyBUZW5zb3I0RDtcbiAgaWYgKGR5NEQucmFuayA9PT0gMykge1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeDRELnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVyRmlsdGVyOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCBzaGFwZSBgICtcbiAgICAgICAgICBgJHt4NEQuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGR5NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJGaWx0ZXI6IGR5IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHNoYXBlIGAgK1xuICAgICAgICAgIGAke2R5NEQuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGZpbHRlclNoYXBlLmxlbmd0aCA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmREZXJGaWx0ZXI6IGZpbHRlclNoYXBlIG11c3QgYmUgbGVuZ3RoIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYCR7ZmlsdGVyU2hhcGV9LmApO1xuICBjb25zdCBpbkRlcHRoID0gZGF0YUZvcm1hdCA9PT0gJ05IV0MnID8geDRELnNoYXBlWzNdIDogeDRELnNoYXBlWzFdO1xuICBjb25zdCBvdXREZXB0aCA9IGRhdGFGb3JtYXQgPT09ICdOSFdDJyA/IGR5NEQuc2hhcGVbM10gOiBkeTRELnNoYXBlWzFdO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGluRGVwdGggPT09IGZpbHRlclNoYXBlWzJdLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbnYyZERlckZpbHRlcjogZGVwdGggb2YgaW5wdXQgJHtpbkRlcHRofSkgbXVzdCBgICtcbiAgICAgICAgICBgbWF0Y2ggaW5wdXQgZGVwdGggaW4gZmlsdGVyICgke2ZpbHRlclNoYXBlWzJdfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBvdXREZXB0aCA9PT0gZmlsdGVyU2hhcGVbM10sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gY29udjJkRGVyRmlsdGVyOiBkZXB0aCBvZiBkeSAoJHtvdXREZXB0aH0pIG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIG91dHB1dCBkZXB0aCBmb3IgZmlsdGVyICgke2ZpbHRlclNoYXBlWzNdfSkuYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdjb252MmREZXJGaWx0ZXInLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0czogQ29udjJEQmFja3Byb3BGaWx0ZXJJbnB1dHMgPSB7eDogeDRELCBkeTogZHk0RH07XG4gIGNvbnN0IGF0dHJzOiBDb252MkRCYWNrcHJvcEZpbHRlckF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZSwgZmlsdGVyU2hhcGV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgQ29udjJEQmFja3Byb3BGaWx0ZXIsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyREJhY2twcm9wRmlsdGVyID0gLyogQF9fUFVSRV9fICovIG9wKHtjb252MkRCYWNrcHJvcEZpbHRlcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as broadcast_util from './broadcast_util';\nimport { elu } from './elu';\nimport { leakyRelu } from './leaky_relu';\nimport { mul } from './mul';\nimport { prelu } from './prelu';\nimport { relu } from './relu';\nimport { relu6 } from './relu6';\nimport { reshape } from './reshape';\nimport { sigmoid } from './sigmoid';\nimport { step } from './step';\nimport { sum } from './sum';\n// Returns gradient for fused activation.\nexport function getFusedDyActivation(dy, y, activation) {\n if (activation == null || activation === 'linear') {\n return dy;\n }\n if (activation === 'relu') {\n return mul(dy, step(y));\n }\n throw new Error(`Cannot compute gradient for fused activation ${activation}.`);\n}\n// Returns gradient for fused bias.\nexport function getFusedBiasGradient(bias, dyActivation) {\n let res = dyActivation;\n const reduceAxes = broadcast_util.getReductionAxes(bias.shape, dyActivation.shape);\n if (reduceAxes.length > 0) {\n res = sum(res, reduceAxes);\n }\n return reshape(res, bias.shape);\n}\nexport function applyActivation(x, activation, preluActivationWeights, leakyreluAlpha) {\n if (activation === 'linear') {\n return x;\n }\n else if (activation === 'relu') {\n return relu(x);\n }\n else if (activation === 'elu') {\n return elu(x);\n }\n else if (activation === 'relu6') {\n return relu6(x);\n }\n else if (activation === 'prelu') {\n return prelu(x, preluActivationWeights);\n }\n else if (activation === 'leakyrelu') {\n return leakyRelu(x, leakyreluAlpha);\n }\n else if (activation === 'sigmoid') {\n return sigmoid(x);\n }\n throw new Error(`Unknown fused activation ${activation}.`);\n}\n// Whether we should call fused ops.\nexport const shouldFuse = (gradientDepth, activation) => {\n const gradientMode = gradientDepth > 0;\n return !gradientMode || activation === 'linear';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzZWRfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsT0FBTyxLQUFLLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLEVBQVUsRUFBRSxDQUFTLEVBQUUsVUFBc0I7SUFDL0MsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7UUFDakQsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUNELElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtRQUN6QixPQUFPLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFDRCxNQUFNLElBQUksS0FBSyxDQUNYLGdEQUFnRCxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxJQUFZLEVBQUUsWUFBb0I7SUFDcEMsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDO0lBQ3ZCLE1BQU0sVUFBVSxHQUNaLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsQ0FBUyxFQUFFLFVBQXNCLEVBQUUsc0JBQStCLEVBQ2xFLGNBQXVCO0lBQ3pCLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPLENBQUMsQ0FBQztLQUNWO1NBQU0sSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hCO1NBQU0sSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO1FBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Y7U0FBTSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7U0FBTSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUU7UUFDakMsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUM7S0FDekM7U0FBTSxJQUFJLFVBQVUsS0FBSyxXQUFXLEVBQUU7UUFDckMsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ3JDO1NBQU0sSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQ25DLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQXFCLEVBQUUsVUFBc0IsRUFBRSxFQUFFO0lBQzFFLE1BQU0sWUFBWSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLFlBQVksSUFBSSxVQUFVLEtBQUssUUFBUSxDQUFDO0FBQ2xELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uL3RlbnNvcic7XG5cbmltcG9ydCAqIGFzIGJyb2FkY2FzdF91dGlsIGZyb20gJy4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtlbHV9IGZyb20gJy4vZWx1JztcbmltcG9ydCB7QWN0aXZhdGlvbn0gZnJvbSAnLi9mdXNlZF90eXBlcyc7XG5pbXBvcnQge2xlYWt5UmVsdX0gZnJvbSAnLi9sZWFreV9yZWx1JztcbmltcG9ydCB7bXVsfSBmcm9tICcuL211bCc7XG5pbXBvcnQge3ByZWx1fSBmcm9tICcuL3ByZWx1JztcbmltcG9ydCB7cmVsdX0gZnJvbSAnLi9yZWx1JztcbmltcG9ydCB7cmVsdTZ9IGZyb20gJy4vcmVsdTYnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL3Jlc2hhcGUnO1xuaW1wb3J0IHtzaWdtb2lkfSBmcm9tICcuL3NpZ21vaWQnO1xuaW1wb3J0IHtzdGVwfSBmcm9tICcuL3N0ZXAnO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vc3VtJztcblxuLy8gUmV0dXJucyBncmFkaWVudCBmb3IgZnVzZWQgYWN0aXZhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXNlZER5QWN0aXZhdGlvbihcbiAgICBkeTogVGVuc29yLCB5OiBUZW5zb3IsIGFjdGl2YXRpb246IEFjdGl2YXRpb24pOiBUZW5zb3Ige1xuICBpZiAoYWN0aXZhdGlvbiA9PSBudWxsIHx8IGFjdGl2YXRpb24gPT09ICdsaW5lYXInKSB7XG4gICAgcmV0dXJuIGR5O1xuICB9XG4gIGlmIChhY3RpdmF0aW9uID09PSAncmVsdScpIHtcbiAgICByZXR1cm4gbXVsKGR5LCBzdGVwKHkpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGNvbXB1dGUgZ3JhZGllbnQgZm9yIGZ1c2VkIGFjdGl2YXRpb24gJHthY3RpdmF0aW9ufS5gKTtcbn1cblxuLy8gUmV0dXJucyBncmFkaWVudCBmb3IgZnVzZWQgYmlhcy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXNlZEJpYXNHcmFkaWVudChcbiAgICBiaWFzOiBUZW5zb3IsIGR5QWN0aXZhdGlvbjogVGVuc29yKTogVGVuc29yIHtcbiAgbGV0IHJlcyA9IGR5QWN0aXZhdGlvbjtcbiAgY29uc3QgcmVkdWNlQXhlcyA9XG4gICAgICBicm9hZGNhc3RfdXRpbC5nZXRSZWR1Y3Rpb25BeGVzKGJpYXMuc2hhcGUsIGR5QWN0aXZhdGlvbi5zaGFwZSk7XG4gIGlmIChyZWR1Y2VBeGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXMgPSBzdW0ocmVzLCByZWR1Y2VBeGVzKTtcbiAgfVxuICByZXR1cm4gcmVzaGFwZShyZXMsIGJpYXMuc2hhcGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlBY3RpdmF0aW9uKFxuICAgIHg6IFRlbnNvciwgYWN0aXZhdGlvbjogQWN0aXZhdGlvbiwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cz86IFRlbnNvcixcbiAgICBsZWFreXJlbHVBbHBoYT86IG51bWJlcik6IFRlbnNvciB7XG4gIGlmIChhY3RpdmF0aW9uID09PSAnbGluZWFyJykge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdyZWx1Jykge1xuICAgIHJldHVybiByZWx1KHgpO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdlbHUnKSB7XG4gICAgcmV0dXJuIGVsdSh4KTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncmVsdTYnKSB7XG4gICAgcmV0dXJuIHJlbHU2KHgpO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdwcmVsdScpIHtcbiAgICByZXR1cm4gcHJlbHUoeCwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyk7XG4gIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiA9PT0gJ2xlYWt5cmVsdScpIHtcbiAgICByZXR1cm4gbGVha3lSZWx1KHgsIGxlYWt5cmVsdUFscGhhKTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnc2lnbW9pZCcpIHtcbiAgICByZXR1cm4gc2lnbW9pZCh4KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnVzZWQgYWN0aXZhdGlvbiAke2FjdGl2YXRpb259LmApO1xufVxuXG4vLyBXaGV0aGVyIHdlIHNob3VsZCBjYWxsIGZ1c2VkIG9wcy5cbmV4cG9ydCBjb25zdCBzaG91bGRGdXNlID0gKGdyYWRpZW50RGVwdGg6IG51bWJlciwgYWN0aXZhdGlvbjogQWN0aXZhdGlvbikgPT4ge1xuICBjb25zdCBncmFkaWVudE1vZGUgPSBncmFkaWVudERlcHRoID4gMDtcbiAgcmV0dXJuICFncmFkaWVudE1vZGUgfHwgYWN0aXZhdGlvbiA9PT0gJ2xpbmVhcic7XG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { FusedConv2D } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport { conv2d as unfusedConv2d } from '../conv2d';\nimport { conv2DBackpropFilter } from '../conv2d_backprop_filter';\nimport { conv2DBackpropInput } from '../conv2d_backprop_input';\nimport * as conv_util from '../conv_util';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes a 2D convolution over the input x, optionally fused with adding a\n * bias and applying an activation.\n *\n * ```js\n * const inputDepth = 2;\n * const inShape = [2, 2, 2, inputDepth];\n * const outputDepth = 2;\n * const fSize = 1;\n * const pad = 0;\n * const strides = 1;\n *\n * const x = tf.tensor4d( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n * 16], inShape);\n * const w = tf.tensor4d([-1, 1, -2, 0.5], [fSize, fSize, inputDepth,\n * outputDepth]);\n *\n * tf.fused.conv2d({ x, filter: w, strides, pad, dataFormat: 'NHWC',\n * dilations: [1, 1], bias: tf.scalar(5), activation: 'relu' }).print();\n * ```\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter, rank 4, of shape\n * `[filterHeight, filterWidth, inDepth, outDepth]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid` output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dataFormat An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `dilations` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`) to be\n * applied\n * after biasAdd.\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n * of a `prelu` activation, typically the same shape as `x`.\n * @param leakyreluAlpha Optional. Alpha to be applied as part of a `leakyrelu`\n * activation.\n */\nfunction fusedConv2d_({ x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha }) {\n activation = activation || 'linear';\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n // TODO: Transpose bias and preluActivationWeights properly for NCHW\n // format before computation.\n util.assert(dataFormat === 'NHWC', () => `Error in fused conv2d: got dataFormat of ${dataFormat} but ` +\n `only NHWC is currently supported for the case of gradient depth ` +\n `is 0 and the activation is not linear.`);\n let result = unfusedConv2d(x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n const $x = convertToTensor(x, 'x', 'conv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'conv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ` +\n `${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ` +\n `${$filter.rank}.`);\n conv_util.checkPadOnDimRoundingMode('fused conv2d', pad, dimRoundingMode);\n const inputChannels = dataFormat === 'NHWC' ? x4D.shape[3] : x4D.shape[1];\n util.assert($filter.shape[2] === inputChannels, () => `Error in conv2d: depth of input (${inputChannels}) must match ` +\n `input depth for filter ${$filter.shape[2]}.`);\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in conv2D: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = conv_util.computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n [$bias] = makeTypesMatch($bias, $x);\n // According to TensorFlow, the bias is supposed be a 1-D tensor or a\n // scalar.\n //\n // 3-D or 4-D bias is not disabled for NHWC format, because they are\n // currently being used in some cases. For examplem in our code base,\n // https://github.com/tensorflow/tfjs/blob/b53bd47e880367ae57493f0ea628abaf08db2d5d/tfjs-core/src/ops/fused/fused_conv2d_test.ts#L1972.\n if (dataFormat === 'NHWC') {\n broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n }\n else {\n util.assert($bias.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor ` +\n `bias for NCHW format but got the bias of ` +\n `rank-${$bias.shape.length}.`);\n util.assert($bias.shape.length === 0 || $bias.shape[0] === convInfo.outChannels ||\n $bias.shape[0] === 1, () => `Error in fused conv2d: bias shape (${$bias.shape}) is not ` +\n `compatible with the number of output channels ` +\n `(${convInfo.outChannels})`);\n }\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n // PReLU's activation weights could be a scalar, a 1-D tensor or a 3-D\n // tensor.\n const alphaShape = preluActivationWeights.shape;\n util.assert(alphaShape.length <= 1 || alphaShape.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or ` +\n `3-D Tensor PReLU activation weights but got a tensor of ` +\n `rank-${alphaShape.length}.`);\n if (alphaShape.length === 1) {\n // Whether the data format is NCHW or NHWC, the 1-D PReLU activation\n // weights tensor should be aligned with the output channels of conv2d\n // result.\n util.assert(alphaShape[0] === 1 || alphaShape[0] === convInfo.outChannels, () => `Error in fused conv2d: PReLU activation weights ` +\n `(${alphaShape}) is not compatible with the number of output ` +\n `channels (${convInfo.outChannels}).`);\n }\n else if (alphaShape.length === 3) {\n // Whether the data format is NCHW or NHWC, the PReLU activation weights\n // tensor should has the compatible shape with the result of conv2d.\n try {\n broadcast_util.assertAndGetBroadcastShape(alphaShape, convInfo.outShape);\n }\n catch (e) {\n const errMsg = `Error in fused conv2d: PReLU activation weights (${alphaShape}) ` +\n `is not compatible with the output shape of the conv2d ` +\n `(${convInfo.outShape}).`;\n throw Error(errMsg);\n }\n }\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused conv2d');\n }\n const grad = (dy, saved) => {\n util.assert(dataFormat === 'NHWC', () => `Error in gradient of fused conv2D: got dataFormat of ${dataFormat} but only NHWC is currently supported.`);\n const [$filter, x4D, y, $bias] = saved;\n const dyActivation = getFusedDyActivation(dy, y, activation);\n util.assert(conv_util.tupleValuesAreOne(dilations), () => 'Error in gradient of fused conv2D: ' +\n `dilation rates greater than 1 ` +\n `are not yet supported in gradients. Got dilations '${dilations}'`);\n const xDer = conv2DBackpropInput(x4D.shape, dyActivation, $filter, strides, pad);\n const filterDer = conv2DBackpropFilter(x4D, dyActivation, $filter.shape, strides, pad);\n const der = [xDer, filterDer];\n if ($bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n der.push(biasDer);\n }\n return der;\n };\n const inputs = {\n x: x4D,\n filter: $filter,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = {\n strides,\n pad,\n dataFormat,\n dilations,\n dimRoundingMode,\n activation,\n leakyreluAlpha\n };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((x4D, filter, save) => {\n let res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(FusedConv2D, inputs, attrs);\n save([filter, x4D, res]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOp(x4D, $filter);\n }\n else {\n const customOpWithBias = customGrad((x4D, filter, bias, save) => {\n let res = ENGINE.runKernel(FusedConv2D, inputs, attrs);\n save([filter, x4D, res, bias]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOpWithBias(x4D, $filter, $bias);\n }\n}\nexport const conv2d = /* @__PURE__ */ op({ fusedConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udjJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZnVzZWQvY29udjJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFJcEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sS0FBSyxjQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLE1BQU0sSUFBSSxhQUFhLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxLQUFLLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdERztBQUNILFNB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LENBQUM7S0FDcEM7U0FBTTtRQUNMLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUMvQixDQUFDLEdBQWEsRUFBRSxNQUFnQixFQUFFLElBQVksRUFBRSxJQUFrQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxHQUFHLEdBQXNCLE1BQU0sQ0FBQyxTQUFTLENBQ3pDLFdBQVcsRUFBRSxNQUFtQyxFQUNoRCxLQUFnQyxDQUFDLENBQUM7WUFFdEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUvQixJQUFJLFlBQVksRUFBRTtnQkFDaEIsMERBQTBEO2dCQUMxRCxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pELENBQUM7YUFDZDtZQUVELE9BQU8sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVQLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQU0sQ0FBQztLQUNuRDtBQUNILENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi8uLi9ncmFkaWVudHMnO1xuaW1wb3J0IHtGdXNlZENvbnYyRCwgRnVzZWRDb252MkRBdHRycywgRnVzZWRDb252MkRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtjb252MmQgYXMgdW5mdXNlZENvbnYyZH0gZnJvbSAnLi4vY29udjJkJztcbmltcG9ydCB7Y29udjJEQmFja3Byb3BGaWx0ZXJ9IGZyb20gJy4uL2NvbnYyZF9iYWNrcHJvcF9maWx0ZXInO1xuaW1wb3J0IHtjb252MkRCYWNrcHJvcElucHV0fSBmcm9tICcuLi9jb252MmRfYmFja3Byb3BfaW5wdXQnO1xuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4uL2NvbnZfdXRpbCc7XG5pbXBvcnQge0FjdGl2YXRpb259IGZyb20gJy4uL2Z1c2VkX3R5cGVzJztcbmltcG9ydCB7YXBwbHlBY3RpdmF0aW9uLCBnZXRGdXNlZEJpYXNHcmFkaWVudCwgZ2V0RnVzZWREeUFjdGl2YXRpb24sIHNob3VsZEZ1c2V9IGZyb20gJy4uL2Z1c2VkX3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYSAyRCBjb252b2x1dGlvbiBvdmVyIHRoZSBpbnB1dCB4LCBvcHRpb25hbGx5IGZ1c2VkIHdpdGggYWRkaW5nIGFcbiAqIGJpYXMgYW5kIGFwcGx5aW5nIGFuIGFjdGl2YXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGlucHV0RGVwdGggPSAyO1xuICogY29uc3QgaW5TaGFwZSA9IFsyLCAyLCAyLCBpbnB1dERlcHRoXTtcbiAqIGNvbnN0IG91dHB1dERlcHRoID0gMjtcbiAqIGNvbnN0IGZTaXplID0gMTtcbiAqIGNvbnN0IHBhZCA9IDA7XG4gKiBjb25zdCBzdHJpZGVzID0gMTtcbiAqXG4gKiBjb25zdCB4ID0gdGYudGVuc29yNGQoIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICogMTZdLCBpblNoYXBlKTtcbiAqIGNvbnN0IHcgPSB0Zi50ZW5zb3I0ZChbLTEsIDEsIC0yLCAwLjVdLCBbZlNpemUsIGZTaXplLCBpbnB1dERlcHRoLFxuICogb3V0cHV0RGVwdGhdKTtcbiAqXG4gKiB0Zi5mdXNlZC5jb252MmQoeyB4LCBmaWx0ZXI6IHcsIHN0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdDogJ05IV0MnLFxuICogZGlsYXRpb25zOiBbMSwgMV0sIGJpYXM6IHRmLnNjYWxhcig1KSwgYWN0aXZhdGlvbjogJ3JlbHUnIH0pLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb2JqIEFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqIEBwYXJhbSB4IFRoZSBpbnB1dCB0ZW5zb3IsIG9mIHJhbmsgNCBvciByYW5rIDMsIG9mIHNoYXBlXG4gKiAgICAgYFtiYXRjaCwgaGVpZ2h0LCB3aWR0aCwgaW5DaGFubmVsc11gLiBJZiByYW5rIDMsIGJhdGNoIG9mIDEgaXNcbiAqIGFzc3VtZWQuXG4gKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluRGVwdGgsIG91dERlcHRoXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC5cbiAqIEBwYXJhbSBwYWQgVGhlIHR5cGUgb2YgcGFkZGluZyBhbGdvcml0aG0uXG4gKiAgIC0gYHNhbWVgIGFuZCBzdHJpZGUgMTogb3V0cHV0IHdpbGwgYmUgb2Ygc2FtZSBzaXplIGFzIGlucHV0LFxuICogICAgICAgcmVnYXJkbGVzcyBvZiBmaWx0ZXIgc2l6ZS5cbiAqICAgLSBgdmFsaWRgIG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkYXRhRm9ybWF0IEFuIG9wdGlvbmFsIHN0cmluZyBmcm9tOiBcIk5IV0NcIiwgXCJOQ0hXXCIuIERlZmF1bHRzIHRvXG4gKiAgICAgXCJOSFdDXCIuIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEuIFdpdGggdGhlXG4gKiAgICAgZGVmYXVsdCBmb3JtYXQgXCJOSFdDXCIsIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgb3JkZXIgb2Y6IFtiYXRjaCxcbiAqICAgICBoZWlnaHQsIHdpZHRoLCBjaGFubmVsc10uIE9ubHkgXCJOSFdDXCIgaXMgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYGRpbGF0aW9uc2AgaXMgYSBzaW5nbGVcbiAqICAgICBudW1iZXIsIHRoZW4gYGRpbGF0aW9uSGVpZ2h0ID09IGRpbGF0aW9uV2lkdGhgLiBJZiBpdCBpcyBncmVhdGVyIHRoYW5cbiAqICAgICAxLCB0aGVuIGFsbCB2YWx1ZXMgb2YgYHN0cmlkZXNgIG11c3QgYmUgMS5cbiAqIEBwYXJhbSBkaW1Sb3VuZGluZ01vZGUgQSBzdHJpbmcgZnJvbTogJ2NlaWwnLCAncm91bmQnLCAnZmxvb3InLiBJZiBub25lIGlzXG4gKiAgICAgcHJvdmlkZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0cnVuY2F0ZS5cbiAqIEBwYXJhbSBiaWFzIFRlbnNvciB0byBiZSBhZGRlZCB0byB0aGUgcmVzdWx0LlxuICogQHBhcmFtIGFjdGl2YXRpb24gTmFtZSBvZiBhY3RpdmF0aW9uIGtlcm5lbCAoZGVmYXVsdHMgdG8gYGxpbmVhcmApIHRvIGJlXG4gKiAgICAgYXBwbGllZFxuICogICAgICBhZnRlciBiaWFzQWRkLlxuICogQHBhcmFtIHByZWx1QWN0aXZhdGlvbldlaWdodHMgVGVuc29yIG9mIHByZWx1IHdlaWdodHMgdG8gYmUgYXBwbGllZCBhcyBwYXJ0XG4gKiAgICAgb2YgYSBgcHJlbHVgIGFjdGl2YXRpb24sIHR5cGljYWxseSB0aGUgc2FtZSBzaGFwZSBhcyBgeGAuXG4gKiBAcGFyYW0gbGVha3lyZWx1QWxwaGEgT3B0aW9uYWwuIEFscGhhIHRvIGJlIGFwcGxpZWQgYXMgcGFydCBvZiBhIGBsZWFreXJlbHVgXG4gKiAgICAgYWN0aXZhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZnVzZWRDb252MmRfPFQgZXh0ZW5kcyBUZW5zb3IzRHxUZW5zb3I0RD4oe1xuICB4LFxuICBmaWx0ZXIsXG4gIHN0cmlkZXMsXG4gIHBhZCxcbiAgZGF0YUZvcm1hdCA9ICdOSFdDJyxcbiAgZGlsYXRpb25zID0gWzEsIDFdLFxuICBkaW1Sb3VuZGluZ01vZGUsXG4gIGJpYXMsXG4gIGFjdGl2YXRpb24gPSAnbGluZWFyJyxcbiAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyxcbiAgbGVha3lyZWx1QWxwaGFcbn06IHtcbiAgeDogVHxUZW5zb3JMaWtlLFxuICBmaWx0ZXI6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gIHN0cmlkZXM6IFtudW1iZXIsIG51bWJlcl18bnVtYmVyLFxuICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxjb252X3V0aWwuRXhwbGljaXRQYWRkaW5nLFxuICBkYXRhRm9ybWF0PzogJ05IV0MnfCdOQ0hXJyxcbiAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gIGJpYXM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYWN0aXZhdGlvbj86IEFjdGl2YXRpb24sXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3IsXG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyXG59KTogVCB7XG4gIGFjdGl2YXRpb24gPSBhY3RpdmF0aW9uIHx8ICdsaW5lYXInO1xuXG4gIGlmIChzaG91bGRGdXNlKEVOR0lORS5zdGF0ZS5ncmFkaWVudERlcHRoLCBhY3RpdmF0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICAvLyBUT0RPOiBUcmFuc3Bvc2UgYmlhcyBhbmQgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyBwcm9wZXJseSBmb3IgTkNIV1xuICAgIC8vIGZvcm1hdCBiZWZvcmUgY29tcHV0YXRpb24uXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGRhdGFGb3JtYXQgPT09ICdOSFdDJyxcbiAgICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGNvbnYyZDogZ290IGRhdGFGb3JtYXQgb2YgJHtkYXRhRm9ybWF0fSBidXQgYCArXG4gICAgICAgICAgICBgb25seSBOSFdDIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBjYXNlIG9mIGdyYWRpZW50IGRlcHRoIGAgK1xuICAgICAgICAgICAgYGlzIDAgYW5kIHRoZSBhY3RpdmF0aW9uIGlzIG5vdCBsaW5lYXIuYCk7XG5cbiAgICBsZXQgcmVzdWx0ID0gdW5mdXNlZENvbnYyZChcbiAgICAgICAgeCwgZmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlKTtcbiAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCBiaWFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgcmVzdWx0LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2NvbnYyZCcsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPSBjb252ZXJ0VG9UZW5zb3IoZmlsdGVyLCAnZmlsdGVyJywgJ2NvbnYyZCcsICdmbG9hdDMyJyk7XG5cbiAgbGV0IHg0RCA9ICR4IGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG5cbiAgaWYgKCR4LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIHg0RCA9IHJlc2hhcGUoJHgsIFsxLCAkeC5zaGFwZVswXSwgJHguc2hhcGVbMV0sICR4LnNoYXBlWzJdXSk7XG4gIH1cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGlucHV0IG11c3QgYmUgcmFuayA0LCBidXQgZ290IHJhbmsgYCArXG4gICAgICAgICAgYCR7eDRELnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRmaWx0ZXIucmFuayA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGZpbHRlciBtdXN0IGJlIHJhbmsgNCwgYnV0IGdvdCByYW5rIGAgK1xuICAgICAgICAgIGAkeyRmaWx0ZXIucmFua30uYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKCdmdXNlZCBjb252MmQnLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG4gIGNvbnN0IGlucHV0Q2hhbm5lbHMgPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyB4NEQuc2hhcGVbM10gOiB4NEQuc2hhcGVbMV07XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5zaGFwZVsyXSA9PT0gaW5wdXRDaGFubmVscyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjb252MmQ6IGRlcHRoIG9mIGlucHV0ICgke2lucHV0Q2hhbm5lbHN9KSBtdXN0IG1hdGNoIGAgK1xuICAgICAgICAgIGBpbnB1dCBkZXB0aCBmb3IgZmlsdGVyICR7JGZpbHRlci5zaGFwZVsyXX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGNvbnYyRDogRWl0aGVyIHN0cmlkZXMgb3IgZGlsYXRpb25zIG11c3QgYmUgMS4gJyArXG4gICAgICAgICAgYEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHtkaWxhdGlvbnN9J2ApO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gY29udl91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgeDRELnNoYXBlLCAkZmlsdGVyLnNoYXBlLCBzdHJpZGVzLCBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBsZXQgJGJpYXM6IFRlbnNvcjtcbiAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICRiaWFzID0gY29udmVydFRvVGVuc29yKGJpYXMsICdiaWFzJywgJ2Z1c2VkIGNvbnYyZCcpO1xuICAgIFskYmlhc10gPSBtYWtlVHlwZXNNYXRjaCgkYmlhcywgJHgpO1xuXG4gICAgLy8gQWNjb3JkaW5nIHRvIFRlbnNvckZsb3csIHRoZSBiaWFzIGlzIHN1cHBvc2VkIGJlIGEgMS1EIHRlbnNvciBvciBhXG4gICAgLy8gc2NhbGFyLlxuICAgIC8vXG4gICAgLy8gMy1EIG9yIDQtRCBiaWFzIGlzIG5vdCBkaXNhYmxlZCBmb3IgTkhXQyBmb3JtYXQsIGJlY2F1c2UgdGhleSBhcmVcbiAgICAvLyBjdXJyZW50bHkgYmVpbmcgdXNlZCBpbiBzb21lIGNhc2VzLiBGb3IgZXhhbXBsZW0gaW4gb3VyIGNvZGUgYmFzZSxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2Jsb2IvYjUzYmQ0N2U4ODAzNjdhZTU3NDkzZjBlYTYyOGFiYWYwOGRiMmQ1ZC90ZmpzLWNvcmUvc3JjL29wcy9mdXNlZC9mdXNlZF9jb252MmRfdGVzdC50cyNMMTk3Mi5cbiAgICBpZiAoZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSB7XG4gICAgICBicm9hZGNhc3RfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShjb252SW5mby5vdXRTaGFwZSwgJGJpYXMuc2hhcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAkYmlhcy5zaGFwZS5sZW5ndGggPD0gMSxcbiAgICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgY29udjJkOiBvbmx5IHN1cHBvcnRzIHNjYWxhciBvciAxLUQgVGVuc29yIGAgK1xuICAgICAgICAgICAgICBgYmlhcyBmb3IgTkNIVyBmb3JtYXQgYnV0IGdvdCB0aGUgYmlhcyBvZiBgICtcbiAgICAgICAgICAgICAgYHJhbmstJHskYmlhcy5zaGFwZS5sZW5ndGh9LmApO1xuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAkYmlhcy5zaGFwZS5sZW5ndGggPT09IDAgfHwgJGJpYXMuc2hhcGVbMF0gPT09IGNvbnZJbmZvLm91dENoYW5uZWxzIHx8XG4gICAgICAgICAgICAgICRiaWFzLnNoYXBlWzBdID09PSAxLFxuICAgICAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IGJpYXMgc2hhcGUgKCR7JGJpYXMuc2hhcGV9KSBpcyBub3QgYCArXG4gICAgICAgICAgICAgIGBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMgYCArXG4gICAgICAgICAgICAgIGAoJHtjb252SW5mby5vdXRDaGFubmVsc30pYCk7XG4gICAgfVxuICB9XG5cbiAgbGV0ICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzOiBUZW5zb3I7XG4gIGlmIChwcmVsdUFjdGl2YXRpb25XZWlnaHRzICE9IG51bGwpIHtcbiAgICAvLyBQUmVMVSdzIGFjdGl2YXRpb24gd2VpZ2h0cyBjb3VsZCBiZSBhIHNjYWxhciwgYSAxLUQgdGVuc29yIG9yIGEgMy1EXG4gICAgLy8gdGVuc29yLlxuICAgIGNvbnN0IGFscGhhU2hhcGUgPSBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLnNoYXBlO1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBhbHBoYVNoYXBlLmxlbmd0aCA8PSAxIHx8IGFscGhhU2hhcGUubGVuZ3RoID09PSAzLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgY29udjJkOiBvbmx5IHN1cHBvcnRzIHNjYWxhciwgMS1EIFRlbnNvciBvciBgICtcbiAgICAgICAgICAgIGAzLUQgVGVuc29yIFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyBidXQgZ290IGEgdGVuc29yIG9mIGAgK1xuICAgICAgICAgICAgYHJhbmstJHthbHBoYVNoYXBlLmxlbmd0aH0uYCk7XG5cbiAgICBpZiAoYWxwaGFTaGFwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIFdoZXRoZXIgdGhlIGRhdGEgZm9ybWF0IGlzIE5DSFcgb3IgTkhXQywgdGhlIDEtRCBQUmVMVSBhY3RpdmF0aW9uXG4gICAgICAvLyB3ZWlnaHRzIHRlbnNvciBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBvdXRwdXQgY2hhbm5lbHMgb2YgY29udjJkXG4gICAgICAvLyByZXN1bHQuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBhbHBoYVNoYXBlWzBdID09PSAxIHx8IGFscGhhU2hhcGVbMF0gPT09IGNvbnZJbmZvLm91dENoYW5uZWxzLFxuICAgICAgICAgICgpID0+IGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyBgICtcbiAgICAgICAgICAgICAgYCgke2FscGhhU2hhcGV9KSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGAgK1xuICAgICAgICAgICAgICBgY2hhbm5lbHMgKCR7Y29udkluZm8ub3V0Q2hhbm5lbHN9KS5gKTtcbiAgICB9IGVsc2UgaWYgKGFscGhhU2hhcGUubGVuZ3RoID09PSAzKSB7XG4gICAgICAvLyBXaGV0aGVyIHRoZSBkYXRhIGZvcm1hdCBpcyBOQ0hXIG9yIE5IV0MsIHRoZSBQUmVMVSBhY3RpdmF0aW9uIHdlaWdodHNcbiAgICAgIC8vIHRlbnNvciBzaG91bGQgaGFzIHRoZSBjb21wYXRpYmxlIHNoYXBlIHdpdGggdGhlIHJlc3VsdCBvZiBjb252MmQuXG4gICAgICB0cnkge1xuICAgICAgICBicm9hZGNhc3RfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShcbiAgICAgICAgICAgIGFscGhhU2hhcGUsIGNvbnZJbmZvLm91dFNoYXBlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID1cbiAgICAgICAgICAgIGBFcnJvciBpbiBmdXNlZCBjb252MmQ6IFBSZUxVIGFjdGl2YXRpb24gd2VpZ2h0cyAoJHthbHBoYVNoYXBlfSkgYCArXG4gICAgICAgICAgICBgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgb3V0cHV0IHNoYXBlIG9mIHRoZSBjb252MmQgYCArXG4gICAgICAgICAgICBgKCR7Y29udkluZm8ub3V0U2hhcGV9KS5gO1xuICAgICAgICB0aHJvdyBFcnJvcihlcnJNc2cpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBjb252MmQnKTtcbiAgfVxuXG4gIGNvbnN0IGdyYWQgPSAoZHk6IFRlbnNvcjRELCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgZGF0YUZvcm1hdCA9PT0gJ05IV0MnLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZ3JhZGllbnQgb2YgZnVzZWQgY29udjJEOiBnb3QgZGF0YUZvcm1hdCBvZiAke1xuICAgICAgICAgICAgZGF0YUZvcm1hdH0gYnV0IG9ubHkgTkhXQyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLmApO1xuXG4gICAgY29uc3QgWyRmaWx0ZXIsIHg0RCwgeSwgJGJpYXNdID1cbiAgICAgICAgc2F2ZWQgYXMgW1RlbnNvcjRELCBUZW5zb3I0RCwgVGVuc29yNEQsIFRlbnNvcl07XG5cbiAgICBjb25zdCBkeUFjdGl2YXRpb24gPSBnZXRGdXNlZER5QWN0aXZhdGlvbihkeSwgeSwgYWN0aXZhdGlvbikgYXMgVGVuc29yNEQ7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgY29udl91dGlsLnR1cGxlVmFsdWVzQXJlT25lKGRpbGF0aW9ucyksXG4gICAgICAgICgpID0+ICdFcnJvciBpbiBncmFkaWVudCBvZiBmdXNlZCBjb252MkQ6ICcgK1xuICAgICAgICAgICAgYGRpbGF0aW9uIHJhdGVzIGdyZWF0ZXIgdGhhbiAxIGAgK1xuICAgICAgICAgICAgYGFyZSBub3QgeWV0IHN1cHBvcnRlZCBpbiBncmFkaWVudHMuIEdvdCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICAgIGNvbnN0IHhEZXIgPVxuICAgICAgICBjb252MkRCYWNrcHJvcElucHV0KHg0RC5zaGFwZSwgZHlBY3RpdmF0aW9uLCAkZmlsdGVyLCBzdHJpZGVzLCBwYWQpO1xuICAgIGNvbnN0IGZpbHRlckRlciA9XG4gICAgICAgIGNvbnYyREJhY2twcm9wRmlsdGVyKHg0RCwgZHlBY3RpdmF0aW9uLCAkZmlsdGVyLnNoYXBlLCBzdHJpZGVzLCBwYWQpO1xuICAgIGNvbnN0IGRlcjogVGVuc29yW10gPSBbeERlciwgZmlsdGVyRGVyXTtcblxuICAgIGlmICgkYmlhcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBiaWFzRGVyID0gZ2V0RnVzZWRCaWFzR3JhZGllbnQoJGJpYXMsIGR5QWN0aXZhdGlvbik7XG4gICAgICBkZXIucHVzaChiaWFzRGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlcjtcbiAgfTtcblxuICBjb25zdCBpbnB1dHM6IEZ1c2VkQ29udjJESW5wdXRzID0ge1xuICAgIHg6IHg0RCxcbiAgICBmaWx0ZXI6ICRmaWx0ZXIsXG4gICAgYmlhczogJGJpYXMsXG4gICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogJHByZWx1QWN0aXZhdGlvbldlaWdodHNcbiAgfTtcblxuICBjb25zdCBhdHRyczogRnVzZWRDb252MkRBdHRycyA9IHtcbiAgICBzdHJpZGVzLFxuICAgIHBhZCxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBkaW1Sb3VuZGluZ01vZGUsXG4gICAgYWN0aXZhdGlvbixcbiAgICBsZWFreXJlbHVBbHBoYVxuICB9O1xuXG4gIC8vIERlcGVuZGluZyBvbiB0aGUgdGhlIHBhcmFtcyBwYXNzZWQgaW4gd2Ugd2lsbCBoYXZlIGRpZmZlcmVudCBudW1iZXIgb2ZcbiAgLy8gaW5wdXRzIGFuZCB0aHVzIGEgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBncmFkaWVudC5cbiAgaWYgKGJpYXMgPT0gbnVsbCkge1xuICAgIGNvbnN0IGN1c3RvbU9wID1cbiAgICAgICAgY3VzdG9tR3JhZCgoeDREOiBUZW5zb3I0RCwgZmlsdGVyOiBUZW5zb3I0RCwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgICAgbGV0IHJlczogVGVuc29yNER8VGVuc29yM0QgPVxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBGdXNlZENvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG5cbiAgICAgICAgICBzYXZlKFtmaWx0ZXIsIHg0RCwgcmVzXSk7XG5cbiAgICAgICAgICBpZiAocmVzaGFwZWRUbzREKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgICByZXMgPSByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhc1xuICAgICAgICAgICAgICAgIFRlbnNvcjNEO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlcywgZ3JhZEZ1bmM6IGdyYWR9O1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gY3VzdG9tT3AoeDRELCAkZmlsdGVyKSBhcyBUO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGN1c3RvbU9wV2l0aEJpYXMgPSBjdXN0b21HcmFkKFxuICAgICAgICAoeDREOiBUZW5zb3I0RCwgZmlsdGVyOiBUZW5zb3I0RCwgYmlhczogVGVuc29yLCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICBsZXQgcmVzOiBUZW5zb3I0RHxUZW5zb3IzRCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgIEZ1c2VkQ29udjJELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuXG4gICAgICAgICAgc2F2ZShbZmlsdGVyLCB4NEQsIHJlcywgYmlhc10pO1xuXG4gICAgICAgICAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgcmVzID0gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3IzRDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge3ZhbHVlOiByZXMsIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY3VzdG9tT3BXaXRoQmlhcyh4NEQsICRmaWx0ZXIsICRiaWFzKSBhcyBUO1xuICB9XG59XG5leHBvcnQgY29uc3QgY29udjJkID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZENvbnYyZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNativeBackpropFilter } from '../kernel_names';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nfunction depthwiseConv2dNativeBackpropFilter_(x, dy, filterShape, strides, pad, dilations = [1, 1], dimRoundingMode) {\n let x4D = x;\n if (x.rank === 3) {\n x4D = reshape(x, [1, x.shape[0], x.shape[1], x.shape[2]]);\n }\n let dy4D = dy;\n if (dy4D.rank === 3) {\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n const inputs = { x: x4D, dy: dy4D };\n const attrs = { strides, pad, dimRoundingMode, dilations, filterShape };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n return ENGINE.runKernel(DepthwiseConv2dNativeBackpropFilter, inputs, attrs);\n}\nexport const depthwiseConv2dNativeBackpropFilter = op({ depthwiseConv2dNativeBackpropFilter_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLG1DQUFtQyxFQUFzRixNQUFNLGlCQUFpQixDQUFDO0FBTXpKLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxTQUFTLG9DQUFvQyxDQUN6QyxDQUFJLEVBQUUsRUFBSyxFQUFFLFdBQTZDLEVBQzFELE9BQWdDLEVBQ2hDLEdBQTBDLEVBQzFDLFlBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMzQyxlQUF3QztJQUMxQyxJQUFJLEdBQUcsR0FBRyxDQUFhLENBQUM7SUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNoQixHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxJQUFJLElBQUksR0FBRyxFQUFjLENBQUM7SUFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEU7SUFFRCxNQUFNLE1BQU0sR0FBOEMsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUM3RSxNQUFNLEtBQUssR0FDUCxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUU1RCwwREFBMEQ7SUFDMUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNaLG1DQUFtQyxFQUNuQyxNQUFtQyxFQUNuQyxLQUFnQyxDQUFhLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUM1QyxFQUFFLENBQUMsRUFBQyxvQ0FBb0MsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7RGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVySW5wdXRzfSBmcm9tICcuLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7RXhwbGljaXRQYWRkaW5nfSBmcm9tICcuL2NvbnZfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vcmVzaGFwZSc7XG5cbmZ1bmN0aW9uIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIHg6IFQsIGR5OiBULCBmaWx0ZXJTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gICAgcGFkOiAndmFsaWQnfCdzYW1lJ3xudW1iZXJ8RXhwbGljaXRQYWRkaW5nLFxuICAgIGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXXxudW1iZXIgPSBbMSwgMV0sXG4gICAgZGltUm91bmRpbmdNb2RlPzogJ2Zsb29yJ3wncm91bmQnfCdjZWlsJyk6IFRlbnNvcjREIHtcbiAgbGV0IHg0RCA9IHggYXMgVGVuc29yNEQ7XG4gIGlmICh4LnJhbmsgPT09IDMpIHtcbiAgICB4NEQgPSByZXNoYXBlKHgsIFsxLCB4LnNoYXBlWzBdLCB4LnNoYXBlWzFdLCB4LnNoYXBlWzJdXSk7XG4gIH1cbiAgbGV0IGR5NEQgPSBkeSBhcyBUZW5zb3I0RDtcbiAgaWYgKGR5NEQucmFuayA9PT0gMykge1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlcklucHV0cyA9IHt4OiB4NEQsIGR5OiBkeTREfTtcbiAgY29uc3QgYXR0cnM6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMgPVxuICAgICAge3N0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlLCBkaWxhdGlvbnMsIGZpbHRlclNoYXBlfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyLFxuICAgICAgICAgICAgIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyID1cbiAgICBvcCh7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { DepthwiseConv2dNativeBackpropInput } from '../kernel_names';\nimport { op } from './operation';\nimport { reshape } from './reshape';\nfunction depthwiseConv2dNativeBackpropInput_(xShape, dy, filter, strides, pad, dilations = [1, 1], dimRoundingMode) {\n let dy4D = dy;\n let reshapedTo4D = false;\n if (dy.rank === 3) {\n reshapedTo4D = true;\n dy4D = reshape(dy, [1, dy.shape[0], dy.shape[1], dy.shape[2]]);\n }\n const inputs = { dy: dy4D, filter };\n const attrs = { strides, pad, dimRoundingMode, dilations, inputShape: xShape };\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(DepthwiseConv2dNativeBackpropInput, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const depthwiseConv2dNativeBackpropInput = op({ depthwiseConv2dNativeBackpropInput_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZF9uYXRpdmVfYmFja3Byb3BfaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9kZXB0aHdpc2VfY29udjJkX25hdGl2ZV9iYWNrcHJvcF9pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxrQ0FBa0MsRUFBb0YsTUFBTSxpQkFBaUIsQ0FBQztBQU10SixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsU0FBUyxtQ0FBbUMsQ0FDeEMsTUFBd0MsRUFBRSxFQUFLLEVBQUUsTUFBZ0IsRUFDakUsT0FBZ0MsRUFDaEMsR0FBMEMsRUFDMUMsWUFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzNDLGVBQXdDO0lBQzFDLElBQUksSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUMxQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUNqQixZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoRTtJQUVELE1BQU0sTUFBTSxHQUE2QyxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDNUUsTUFBTSxLQUFLLEdBQ1AsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBRW5FLE1BQU0sR0FBRztJQUNMLDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsU0FBUyxDQUNaLGtDQUFrQyxFQUNsQyxNQUFtQyxFQUNuQyxLQUFnQyxDQUFNLENBQUM7SUFFL0MsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQzNDLEVBQUUsQ0FBQyxFQUFDLG1DQUFtQyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0LCBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0QXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtFeHBsaWNpdFBhZGRpbmd9IGZyb20gJy4vY29udl91dGlsJztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcblxuZnVuY3Rpb24gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICB4U2hhcGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBkeTogVCwgZmlsdGVyOiBUZW5zb3I0RCxcbiAgICBzdHJpZGVzOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlcixcbiAgICBwYWQ6ICd2YWxpZCd8J3NhbWUnfG51bWJlcnxFeHBsaWNpdFBhZGRpbmcsXG4gICAgZGlsYXRpb25zOiBbbnVtYmVyLCBudW1iZXJdfG51bWJlciA9IFsxLCAxXSxcbiAgICBkaW1Sb3VuZGluZ01vZGU/OiAnZmxvb3InfCdyb3VuZCd8J2NlaWwnKTogVCB7XG4gIGxldCBkeTREID0gZHkgYXMgVGVuc29yNEQ7XG4gIGxldCByZXNoYXBlZFRvNEQgPSBmYWxzZTtcbiAgaWYgKGR5LnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGR5NEQgPSByZXNoYXBlKGR5LCBbMSwgZHkuc2hhcGVbMF0sIGR5LnNoYXBlWzFdLCBkeS5zaGFwZVsyXV0pO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0SW5wdXRzID0ge2R5OiBkeTRELCBmaWx0ZXJ9O1xuICBjb25zdCBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dEF0dHJzID1cbiAgICAgIHtzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGlsYXRpb25zLCBpbnB1dFNoYXBlOiB4U2hhcGV9O1xuXG4gIGNvbnN0IHJlcyA9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQsXG4gICAgICAgICAgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0ID1cbiAgICBvcCh7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { FusedDepthwiseConv2D } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport * as conv_util from '../conv_util';\nimport { depthwiseConv2d as unfusedDepthwiseConv2d } from '../depthwise_conv2d';\nimport { depthwiseConv2dNativeBackpropFilter } from '../depthwise_conv2d_native_backprop_filter';\nimport { depthwiseConv2dNativeBackpropInput } from '../depthwise_conv2d_native_backprop_input';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes depthwise 2D convolution, optionally fused with adding a\n * bias and applying an activation.\n *\n * Given a 4D `input` array and a `filter` array of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]` containing\n * `inChannels` convolutional filters of depth 1, this op applies a\n * different filter to each input channel (expanding from 1 channel to\n * `channelMultiplier` channels for each), then concatenates the results\n * together. The output has `inChannels * channelMultiplier` channels.\n *\n * See\n * [https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d](\n * https://www.tensorflow.org/api_docs/python/tf/nn/depthwise_conv2d)\n * for more details.\n *\n * @param obj An object with the following properties:\n * @param x The input tensor, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is\n * assumed.\n * @param filter The filter tensor, rank 4, of shape\n * `[filterHeight, filterWidth, inChannels, channelMultiplier]`.\n * @param strides The strides of the convolution: `[strideHeight,\n * strideWidth]`. If strides is a single number, then `strideHeight ==\n * strideWidth`.\n * @param pad The type of padding algorithm.\n * - `same` and stride 1: output will be of same size as input,\n * regardless of filter size.\n * - `valid`: output will be smaller than input if filter is larger\n * than 1x1.\n * - For more info, see this guide:\n * [https://www.tensorflow.org/api_docs/python/tf/nn/convolution](\n * https://www.tensorflow.org/api_docs/python/tf/nn/convolution)\n * @param dilations The dilation rates: `[dilationHeight, dilationWidth]`\n * in which we sample input values across the height and width dimensions\n * in atrous convolution. Defaults to `[1, 1]`. If `rate` is a single\n * number, then `dilationHeight == dilationWidth`. If it is greater than\n * 1, then all values of `strides` must be 1.\n * @param dataFormat: An optional string from: \"NHWC\", \"NCHW\". Defaults to\n * \"NHWC\". Specify the data format of the input and output data. With the\n * default format \"NHWC\", the data is stored in the order of: [batch,\n * height, width, channels]. Only \"NHWC\" is currently supported.\n * @param dimRoundingMode A string from: 'ceil', 'round', 'floor'. If none is\n * provided, it will default to truncate.\n * @param bias Tensor to be added to the result.\n * @param activation Name of activation kernel (defaults to `linear`).\n * @param preluActivationWeights Tensor of prelu weights to be applied as part\n * of a `prelu` activation, typically the same shape as `x`.\n * @param leakyreluAlpha Optional. Alpha to be applied as part of a `leakyrelu`\n * activation.\n */\nfunction fusedDepthwiseConv2d_({ x, filter, strides, pad, dataFormat = 'NHWC', dilations = [1, 1], dimRoundingMode, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha }) {\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n let result = unfusedDepthwiseConv2d(x, filter, strides, pad, dataFormat, dilations, dimRoundingMode);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n const $x = convertToTensor(x, 'x', 'depthwiseConv2d', 'float32');\n const $filter = convertToTensor(filter, 'filter', 'depthwiseConv2d', 'float32');\n let x4D = $x;\n let reshapedTo4D = false;\n if ($x.rank === 3) {\n reshapedTo4D = true;\n x4D = reshape($x, [1, $x.shape[0], $x.shape[1], $x.shape[2]]);\n }\n util.assert(x4D.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got ` +\n `rank ${x4D.rank}.`);\n util.assert($filter.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, ` +\n `but got rank ${$filter.rank}.`);\n util.assert(x4D.shape[3] === $filter.shape[2], () => `Error in fused depthwiseConv2d: number of input channels ` +\n `(${x4D.shape[3]}) must match the inChannels dimension in ` +\n `filter ${$filter.shape[2]}.`);\n if (dilations == null) {\n dilations = [1, 1];\n }\n util.assert(conv_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in fused depthwiseConv2d: Either strides or dilations must ' +\n `be 1. Got strides ${strides} and dilations '${dilations}'`);\n conv_util.checkPadOnDimRoundingMode('fused depthwiseConv2d', pad, dimRoundingMode);\n const convInfo = conv_util.computeConv2DInfo(x4D.shape, $filter.shape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused conv2d');\n [$bias] = makeTypesMatch($bias, $x);\n broadcast_util.assertAndGetBroadcastShape(convInfo.outShape, $bias.shape);\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused depthwiseConv2d');\n }\n const grad = (dy, saved) => {\n util.assert(conv_util.tupleValuesAreOne(dilations), () => 'Error in gradient of fused depthwiseConv2d: dilation rates ' +\n `greater than 1 are not yet supported. Got dilations ` +\n `'${dilations}'`);\n const [$filter, x4D, y, bias] = saved;\n const dyActivation = getFusedDyActivation(dy, y, activation);\n const xDer = depthwiseConv2dNativeBackpropInput(x4D.shape, dyActivation, $filter, strides, pad, dilations, dimRoundingMode);\n const filterDer = depthwiseConv2dNativeBackpropFilter(x4D, dyActivation, $filter.shape, strides, pad, dilations, dimRoundingMode);\n if (bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n return [xDer, filterDer, biasDer];\n }\n return [xDer, filterDer];\n };\n const inputs = {\n x: x4D,\n filter: $filter,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = {\n strides,\n pad,\n dataFormat,\n dilations,\n dimRoundingMode,\n activation,\n leakyreluAlpha\n };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((x4D, filter, save) => {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs);\n save([filter, x4D, res]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOp(x4D, $filter);\n }\n else {\n const customOpWithBias = customGrad((x4D, filter, bias, save) => {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n let res = ENGINE.runKernel(FusedDepthwiseConv2D, inputs, attrs);\n save([filter, x4D, res, bias]);\n if (reshapedTo4D) {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n res = reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return { value: res, gradFunc: grad };\n });\n return customOpWithBias(x4D, $filter, $bias);\n }\n}\nexport const depthwiseConv2d = /* @__PURE__ */ op({ fusedDepthwiseConv2d_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwdGh3aXNlX2NvbnYyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkL2RlcHRod2lzZV9jb252MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFDLG9CQUFvQixFQUF3RCxNQUFNLG9CQUFvQixDQUFDO0FBSS9HLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEtBQUssY0FBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLElBQUksc0JBQXNCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUMvRixPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RixPQUFPLEVBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O0FBQ0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtjdXN0b21HcmFkfSBmcm9tICcuLi8uLi9ncmFkaWVudHMnO1xuaW1wb3J0IHtGdXNlZERlcHRod2lzZUNvbnYyRCwgRnVzZWREZXB0aHdpc2VDb252MkRBdHRycywgRnVzZWREZXB0aHdpc2VDb252MkRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge0dyYWRTYXZlRnVuYywgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge21ha2VUeXBlc01hdGNofSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbCc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0ICogYXMgY29udl91dGlsIGZyb20gJy4uL2NvbnZfdXRpbCc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZCBhcyB1bmZ1c2VkRGVwdGh3aXNlQ29udjJkfSBmcm9tICcuLi9kZXB0aHdpc2VfY29udjJkJztcbmltcG9ydCB7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJ9IGZyb20gJy4uL2RlcHRod2lzZV9jb252MmRfbmF0aXZlX2JhY2twcm9wX2ZpbHRlcic7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXR9IGZyb20gJy4uL2RlcHRod2lzZV9jb252MmRfbmF0aXZlX2JhY2twcm9wX2lucHV0JztcbmltcG9ydCB7QWN0aXZhdGlvbn0gZnJvbSAnLi4vZnVzZWRfdHlwZXMnO1xuaW1wb3J0IHthcHBseUFjdGl2YXRpb24sIGdldEZ1c2VkQmlhc0dyYWRpZW50LCBnZXRGdXNlZER5QWN0aXZhdGlvbiwgc2hvdWxkRnVzZX0gZnJvbSAnLi4vZnVzZWRfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcblxuLyoqXG4gKiBDb21wdXRlcyBkZXB0aHdpc2UgMkQgY29udm9sdXRpb24sIG9wdGlvbmFsbHkgZnVzZWQgd2l0aCBhZGRpbmcgYVxuICogYmlhcyBhbmQgYXBwbHlpbmcgYW4gYWN0aXZhdGlvbi5cbiAqXG4gKiBHaXZlbiBhIDREIGBpbnB1dGAgYXJyYXkgYW5kIGEgYGZpbHRlcmAgYXJyYXkgb2Ygc2hhcGVcbiAqIGBbZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5DaGFubmVscywgY2hhbm5lbE11bHRpcGxpZXJdYCBjb250YWluaW5nXG4gKiBgaW5DaGFubmVsc2AgY29udm9sdXRpb25hbCBmaWx0ZXJzIG9mIGRlcHRoIDEsIHRoaXMgb3AgYXBwbGllcyBhXG4gKiBkaWZmZXJlbnQgZmlsdGVyIHRvIGVhY2ggaW5wdXQgY2hhbm5lbCAoZXhwYW5kaW5nIGZyb20gMSBjaGFubmVsIHRvXG4gKiBgY2hhbm5lbE11bHRpcGxpZXJgIGNoYW5uZWxzIGZvciBlYWNoKSwgdGhlbiBjb25jYXRlbmF0ZXMgdGhlIHJlc3VsdHNcbiAqIHRvZ2V0aGVyLiBUaGUgb3V0cHV0IGhhcyBgaW5DaGFubmVscyAqIGNoYW5uZWxNdWx0aXBsaWVyYCBjaGFubmVscy5cbiAqXG4gKiBTZWVcbiAqIFtodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvbm4vZGVwdGh3aXNlX2NvbnYyZF0oXG4gKiAgICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2RlcHRod2lzZV9jb252MmQpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogQHBhcmFtIHggVGhlIGlucHV0IHRlbnNvciwgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpc1xuICogYXNzdW1lZC5cbiAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0ZW5zb3IsIHJhbmsgNCwgb2Ygc2hhcGVcbiAqICAgICBgW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGluQ2hhbm5lbHMsIGNoYW5uZWxNdWx0aXBsaWVyXWAuXG4gKiBAcGFyYW0gc3RyaWRlcyBUaGUgc3RyaWRlcyBvZiB0aGUgY29udm9sdXRpb246IGBbc3RyaWRlSGVpZ2h0LFxuICogc3RyaWRlV2lkdGhdYC4gSWYgc3RyaWRlcyBpcyBhIHNpbmdsZSBudW1iZXIsIHRoZW4gYHN0cmlkZUhlaWdodCA9PVxuICogc3RyaWRlV2lkdGhgLlxuICogQHBhcmFtIHBhZCBUaGUgdHlwZSBvZiBwYWRkaW5nIGFsZ29yaXRobS5cbiAqICAgLSBgc2FtZWAgYW5kIHN0cmlkZSAxOiBvdXRwdXQgd2lsbCBiZSBvZiBzYW1lIHNpemUgYXMgaW5wdXQsXG4gKiAgICAgICByZWdhcmRsZXNzIG9mIGZpbHRlciBzaXplLlxuICogICAtIGB2YWxpZGA6IG91dHB1dCB3aWxsIGJlIHNtYWxsZXIgdGhhbiBpbnB1dCBpZiBmaWx0ZXIgaXMgbGFyZ2VyXG4gKiAgICAgICB0aGFuIDF4MS5cbiAqICAgLSBGb3IgbW9yZSBpbmZvLCBzZWUgdGhpcyBndWlkZTpcbiAqICAgICBbaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL25uL2NvbnZvbHV0aW9uXShcbiAqICAgICAgICAgIGh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9ubi9jb252b2x1dGlvbilcbiAqIEBwYXJhbSBkaWxhdGlvbnMgVGhlIGRpbGF0aW9uIHJhdGVzOiBgW2RpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoXWBcbiAqICAgICBpbiB3aGljaCB3ZSBzYW1wbGUgaW5wdXQgdmFsdWVzIGFjcm9zcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBkaW1lbnNpb25zXG4gKiAgICAgaW4gYXRyb3VzIGNvbnZvbHV0aW9uLiBEZWZhdWx0cyB0byBgWzEsIDFdYC4gSWYgYHJhdGVgIGlzIGEgc2luZ2xlXG4gKiAgICAgbnVtYmVyLCB0aGVuIGBkaWxhdGlvbkhlaWdodCA9PSBkaWxhdGlvbldpZHRoYC4gSWYgaXQgaXMgZ3JlYXRlciB0aGFuXG4gKiAgICAgMSwgdGhlbiBhbGwgdmFsdWVzIG9mIGBzdHJpZGVzYCBtdXN0IGJlIDEuXG4gKiBAcGFyYW0gZGF0YUZvcm1hdDogQW4gb3B0aW9uYWwgc3RyaW5nIGZyb206IFwiTkhXQ1wiLCBcIk5DSFdcIi4gRGVmYXVsdHMgdG9cbiAqICAgICBcIk5IV0NcIi4gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YS4gV2l0aCB0aGVcbiAqICAgICBkZWZhdWx0IGZvcm1hdCBcIk5IV0NcIiwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIHRoZSBvcmRlciBvZjogW2JhdGNoLFxuICogICAgIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxzXS4gT25seSBcIk5IV0NcIiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICogQHBhcmFtIGRpbVJvdW5kaW5nTW9kZSBBIHN0cmluZyBmcm9tOiAnY2VpbCcsICdyb3VuZCcsICdmbG9vcicuIElmIG5vbmUgaXNcbiAqICAgICBwcm92aWRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRydW5jYXRlLlxuICogQHBhcmFtIGJpYXMgVGVuc29yIHRvIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQuXG4gKiBAcGFyYW0gYWN0aXZhdGlvbiBOYW1lIG9mIGFjdGl2YXRpb24ga2VybmVsIChkZWZhdWx0cyB0byBgbGluZWFyYCkuXG4gKiBAcGFyYW0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyBUZW5zb3Igb2YgcHJlbHUgd2VpZ2h0cyB0byBiZSBhcHBsaWVkIGFzIHBhcnRcbiAqICAgICBvZiBhIGBwcmVsdWAgYWN0aXZhdGlvbiwgdHlwaWNhbGx5IHRoZSBzYW1lIHNoYXBlIGFzIGB4YC5cbiAqIEBwYXJhbSBsZWFreXJlbHVBbHBoYSBPcHRpb25hbC4gQWxwaGEgdG8gYmUgYXBwbGllZCBhcyBwYXJ0IG9mIGEgYGxlYWt5cmVsdWBcbiAqICAgICBhY3RpdmF0aW9uLlxuICovXG5mdW5jdGlvbiBmdXNlZERlcHRod2lzZUNvbnYyZF88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPih7XG4gIHgsXG4gIGZpbHRlcixcbiAgc3RyaWRlcyxcbiAgcGFkLFxuICBkYXRhRm9ybWF0ID0gJ05IV0MnLFxuICBkaWxhdGlvbnMgPSBbMSwgMV0sXG4gIGRpbVJvdW5kaW5nTW9kZSxcbiAgYmlhcyxcbiAgYWN0aXZhdGlvbiA9ICdsaW5lYXInLFxuICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLFxuICBsZWFreXJlbHVBbHBoYVxufToge1xuICB4OiBUfFRlbnNvckxpa2UsXG4gIGZpbHRlcjogVGVuc29yNER8VGVuc29yTGlrZSxcbiAgc3RyaWRlczogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIHBhZDogJ3ZhbGlkJ3wnc2FtZSd8bnVtYmVyLFxuICBkYXRhRm9ybWF0PzogJ05IV0MnfCdOQ0hXJyxcbiAgZGlsYXRpb25zPzogW251bWJlciwgbnVtYmVyXXxudW1iZXIsXG4gIGRpbVJvdW5kaW5nTW9kZT86ICdmbG9vcid8J3JvdW5kJ3wnY2VpbCcsXG4gIGJpYXM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYWN0aXZhdGlvbj86IEFjdGl2YXRpb24sXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHM/OiBUZW5zb3IsXG4gIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyXG59KTogVCB7XG4gIGlmIChzaG91bGRGdXNlKEVOR0lORS5zdGF0ZS5ncmFkaWVudERlcHRoLCBhY3RpdmF0aW9uKSA9PT0gZmFsc2UpIHtcbiAgICBsZXQgcmVzdWx0ID0gdW5mdXNlZERlcHRod2lzZUNvbnYyZChcbiAgICAgICAgeCwgZmlsdGVyLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlKTtcbiAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCBiaWFzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgcmVzdWx0LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSkgYXMgVDtcbiAgfVxuXG4gIGNvbnN0ICR4ID0gY29udmVydFRvVGVuc29yKHgsICd4JywgJ2RlcHRod2lzZUNvbnYyZCcsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRmaWx0ZXIgPVxuICAgICAgY29udmVydFRvVGVuc29yKGZpbHRlciwgJ2ZpbHRlcicsICdkZXB0aHdpc2VDb252MmQnLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4NEQgPSAkeCBhcyBUZW5zb3I0RDtcbiAgbGV0IHJlc2hhcGVkVG80RCA9IGZhbHNlO1xuICBpZiAoJHgucmFuayA9PT0gMykge1xuICAgIHJlc2hhcGVkVG80RCA9IHRydWU7XG4gICAgeDREID0gcmVzaGFwZSgkeCwgWzEsICR4LnNoYXBlWzBdLCAkeC5zaGFwZVsxXSwgJHguc2hhcGVbMl1dKTtcbiAgfVxuICB1dGlsLmFzc2VydChcbiAgICAgIHg0RC5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGRlcHRod2lzZUNvbnYyZDogaW5wdXQgbXVzdCBiZSByYW5rIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHt4NEQucmFua30uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGZpbHRlci5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIGZ1c2VkIGRlcHRod2lzZUNvbnYyZDogZmlsdGVyIG11c3QgYmUgcmFuayA0LCBgICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGZpbHRlci5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4NEQuc2hhcGVbM10gPT09ICRmaWx0ZXIuc2hhcGVbMl0sXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgZGVwdGh3aXNlQ29udjJkOiBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgYCArXG4gICAgICAgICAgYCgke3g0RC5zaGFwZVszXX0pIG11c3QgbWF0Y2ggdGhlIGluQ2hhbm5lbHMgZGltZW5zaW9uIGluIGAgK1xuICAgICAgICAgIGBmaWx0ZXIgJHskZmlsdGVyLnNoYXBlWzJdfS5gKTtcbiAgaWYgKGRpbGF0aW9ucyA9PSBudWxsKSB7XG4gICAgZGlsYXRpb25zID0gWzEsIDFdO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY29udl91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT5cbiAgICAgICAgICAnRXJyb3IgaW4gZnVzZWQgZGVwdGh3aXNlQ29udjJkOiBFaXRoZXIgc3RyaWRlcyBvciBkaWxhdGlvbnMgbXVzdCAnICtcbiAgICAgICAgICBgYmUgMS4gR290IHN0cmlkZXMgJHtzdHJpZGVzfSBhbmQgZGlsYXRpb25zICcke2RpbGF0aW9uc30nYCk7XG4gIGNvbnZfdXRpbC5jaGVja1BhZE9uRGltUm91bmRpbmdNb2RlKFxuICAgICAgJ2Z1c2VkIGRlcHRod2lzZUNvbnYyZCcsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgY29uc3QgY29udkluZm8gPSBjb252X3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICB4NEQuc2hhcGUsICRmaWx0ZXIuc2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsXG4gICAgICB0cnVlIC8qIGRlcHRod2lzZSAqLyk7XG5cbiAgbGV0ICRiaWFzOiBUZW5zb3I7XG4gIGlmIChiaWFzICE9IG51bGwpIHtcbiAgICAkYmlhcyA9IGNvbnZlcnRUb1RlbnNvcihiaWFzLCAnYmlhcycsICdmdXNlZCBjb252MmQnKTtcbiAgICBbJGJpYXNdID0gbWFrZVR5cGVzTWF0Y2goJGJpYXMsICR4KTtcblxuICAgIGJyb2FkY2FzdF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKGNvbnZJbmZvLm91dFNoYXBlLCAkYmlhcy5zaGFwZSk7XG4gIH1cblxuICBsZXQgJHByZWx1QWN0aXZhdGlvbldlaWdodHM6IFRlbnNvcjtcbiAgaWYgKHByZWx1QWN0aXZhdGlvbldlaWdodHMgIT0gbnVsbCkge1xuICAgICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBkZXB0aHdpc2VDb252MmQnKTtcbiAgfVxuXG4gIGNvbnN0IGdyYWQgPSAoZHk6IFRlbnNvcjRELCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgY29udl91dGlsLnR1cGxlVmFsdWVzQXJlT25lKGRpbGF0aW9ucyksXG4gICAgICAgICgpID0+ICdFcnJvciBpbiBncmFkaWVudCBvZiBmdXNlZCBkZXB0aHdpc2VDb252MmQ6IGRpbGF0aW9uIHJhdGVzICcgK1xuICAgICAgICAgICAgYGdyZWF0ZXIgdGhhbiAxIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4gR290IGRpbGF0aW9ucyBgICtcbiAgICAgICAgICAgIGAnJHtkaWxhdGlvbnN9J2ApO1xuICAgIGNvbnN0IFskZmlsdGVyLCB4NEQsIHksIGJpYXNdID0gc2F2ZWQ7XG5cbiAgICBjb25zdCBkeUFjdGl2YXRpb24gPSBnZXRGdXNlZER5QWN0aXZhdGlvbihkeSwgeSwgYWN0aXZhdGlvbikgYXMgVGVuc29yNEQ7XG5cbiAgICBjb25zdCB4RGVyID0gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dChcbiAgICAgICAgKHg0RCBhcyBUZW5zb3I0RCkuc2hhcGUsIGR5QWN0aXZhdGlvbiwgJGZpbHRlciBhcyBUZW5zb3I0RCwgc3RyaWRlcyxcbiAgICAgICAgcGFkLCBkaWxhdGlvbnMsIGRpbVJvdW5kaW5nTW9kZSk7XG4gICAgY29uc3QgZmlsdGVyRGVyID0gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIoXG4gICAgICAgIHg0RCBhcyBUZW5zb3I0RCwgZHlBY3RpdmF0aW9uLCAoJGZpbHRlciBhcyBUZW5zb3I0RCkuc2hhcGUsIHN0cmlkZXMsXG4gICAgICAgIHBhZCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGUpO1xuXG4gICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYmlhc0RlciA9IGdldEZ1c2VkQmlhc0dyYWRpZW50KCRiaWFzLCBkeUFjdGl2YXRpb24pO1xuICAgICAgcmV0dXJuIFt4RGVyLCBmaWx0ZXJEZXIsIGJpYXNEZXJdO1xuICAgIH1cbiAgICByZXR1cm4gW3hEZXIsIGZpbHRlckRlcl07XG4gIH07XG5cbiAgY29uc3QgaW5wdXRzOiBGdXNlZERlcHRod2lzZUNvbnYyRElucHV0cyA9IHtcbiAgICB4OiB4NEQsXG4gICAgZmlsdGVyOiAkZmlsdGVyLFxuICAgIGJpYXM6ICRiaWFzLFxuICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHM6ICRwcmVsdUFjdGl2YXRpb25XZWlnaHRzXG4gIH07XG4gIGNvbnN0IGF0dHJzOiBGdXNlZERlcHRod2lzZUNvbnYyREF0dHJzID0ge1xuICAgIHN0cmlkZXMsXG4gICAgcGFkLFxuICAgIGRhdGFGb3JtYXQsXG4gICAgZGlsYXRpb25zLFxuICAgIGRpbVJvdW5kaW5nTW9kZSxcbiAgICBhY3RpdmF0aW9uLFxuICAgIGxlYWt5cmVsdUFscGhhXG4gIH07XG5cbiAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0aGUgcGFyYW1zIHBhc3NlZCBpbiB3ZSB3aWxsIGhhdmUgZGlmZmVyZW50IG51bWJlciBvZlxuICAvLyBpbnB1dHMgYW5kIHRodXMgYSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdyYWRpZW50LlxuICBpZiAoYmlhcyA9PSBudWxsKSB7XG4gICAgY29uc3QgY3VzdG9tT3AgPVxuICAgICAgICBjdXN0b21HcmFkKCh4NEQ6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjRELCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgICAgICAgbGV0IHJlczogVGVuc29yNER8VGVuc29yM0QgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICBGdXNlZERlcHRod2lzZUNvbnYyRCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcblxuICAgICAgICAgIHNhdmUoW2ZpbHRlciwgeDRELCByZXNdKTtcblxuICAgICAgICAgIGlmIChyZXNoYXBlZFRvNEQpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICAgIHJlcyA9IHJlc2hhcGUocmVzLCBbcmVzLnNoYXBlWzFdLCByZXMuc2hhcGVbMl0sIHJlcy5zaGFwZVszXV0pIGFzXG4gICAgICAgICAgICAgICAgVGVuc29yM0Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHt2YWx1ZTogcmVzLCBncmFkRnVuYzogZ3JhZH07XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBjdXN0b21PcCh4NEQsICRmaWx0ZXIpIGFzIFQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY3VzdG9tT3BXaXRoQmlhcyA9IGN1c3RvbUdyYWQoXG4gICAgICAgICh4NEQ6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjRELCBiaWFzOiBUZW5zb3IsIHNhdmU6IEdyYWRTYXZlRnVuYykgPT4ge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICBsZXQgcmVzOiBUZW5zb3I0RHxUZW5zb3IzRCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgIEZ1c2VkRGVwdGh3aXNlQ29udjJELCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xuXG4gICAgICAgICAgc2F2ZShbZmlsdGVyLCB4NEQsIHJlcywgYmlhc10pO1xuXG4gICAgICAgICAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgcmVzID0gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3IzRDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge3ZhbHVlOiByZXMsIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY3VzdG9tT3BXaXRoQmlhcyh4NEQsICRmaWx0ZXIsICRiaWFzKSBhcyBUO1xuICB9XG59XG5leHBvcnQgY29uc3QgZGVwdGh3aXNlQ29udjJkID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZERlcHRod2lzZUNvbnYyZF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { customGrad } from '../../gradients';\nimport { _FusedMatMul } from '../../kernel_names';\nimport { makeTypesMatch } from '../../tensor_util';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { add } from '../add';\nimport * as broadcast_util from '../broadcast_util';\nimport { applyActivation, getFusedBiasGradient, getFusedDyActivation, shouldFuse } from '../fused_util';\nimport { matMul as unfusedMatMul } from '../mat_mul';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Computes the dot product of two matrices with optional activation and bias.\n *\n * ```js\n * const a = tf.tensor2d([-1, -2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n * const bias = tf.tensor2d([1, 2], [1, 2]);\n *\n * tf.fused.matMul({a, b, bias, activation: 'relu'}).print();\n * ```\n *\n * @param obj An object with the following properties:\n * - `a` First matrix in dot product operation.\n * - `b` Second matrix in dot product operation.\n * - `transposeA` If true, `a` is transposed before multiplication.\n * - `transposeB` If true, `b` is transposed before multiplication.\n * - `bias` Matrix to be added to the result.\n * - `activation` Name of activation kernel (defaults to `linear`).\n * - `preluActivationWeights` Tensor of prelu weights.\n * - `leakyreluAlpha` Alpha of leakyrelu.\n */\nfunction fusedMatMul_({ a, b, transposeA = false, transposeB = false, bias, activation = 'linear', preluActivationWeights, leakyreluAlpha = 0.2, }) {\n if (shouldFuse(ENGINE.state.gradientDepth, activation) === false) {\n let result = unfusedMatMul(a, b, transposeA, transposeB);\n if (bias != null) {\n result = add(result, bias);\n }\n return applyActivation(result, activation, preluActivationWeights, leakyreluAlpha);\n }\n let $a = convertToTensor(a, 'a', 'fused matMul');\n let $b = convertToTensor(b, 'b', 'fused matMul');\n [$a, $b] = makeTypesMatch($a, $b);\n const innerShapeA = transposeA ? $a.shape[$a.rank - 2] : $a.shape[$a.rank - 1];\n const innerShapeB = transposeB ? $b.shape[$b.rank - 1] : $b.shape[$b.rank - 2];\n const outerShapeA = transposeA ? $a.shape[$a.rank - 1] : $a.shape[$a.rank - 2];\n const outerShapeB = transposeB ? $b.shape[$b.rank - 2] : $b.shape[$b.rank - 1];\n const outerDimsA = $a.shape.slice(0, -2);\n const outerDimsB = $b.shape.slice(0, -2);\n const batchDimA = util.sizeFromShape(outerDimsA);\n const batchDimB = util.sizeFromShape(outerDimsB);\n util.assert(innerShapeA === innerShapeB, () => `Error in fused matMul: inner shapes (${innerShapeA}) and (` +\n `${innerShapeB}) of Tensors with shapes ${$a.shape} and ` +\n `${$b.shape} and transposeA=${transposeA}` +\n ` and transposeB=${transposeB} must match.`);\n const outShapeOuterDims = broadcast_util.assertAndGetBroadcastShape($a.shape.slice(0, -2), $b.shape.slice(0, -2));\n const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]);\n const a3D = transposeA ?\n reshape($a, [batchDimA, innerShapeA, outerShapeA]) :\n reshape($a, [batchDimA, outerShapeA, innerShapeA]);\n const b3D = transposeB ?\n reshape($b, [batchDimB, outerShapeB, innerShapeB]) :\n reshape($b, [batchDimB, innerShapeB, outerShapeB]);\n let $bias;\n if (bias != null) {\n $bias = convertToTensor(bias, 'bias', 'fused matMul');\n [$bias] = makeTypesMatch($bias, $a);\n broadcast_util.assertAndGetBroadcastShape(outShape, $bias.shape);\n }\n let $preluActivationWeights;\n if (preluActivationWeights != null) {\n $preluActivationWeights = convertToTensor(preluActivationWeights, 'prelu weights', 'fused matMul');\n }\n const grad = (dy, saved) => {\n const [a3D, b3D, y, $bias] = saved;\n // we reshape dy because the result of the forward is not\n // necessarily going to be a 3d tensor due to a reshape done at the end of\n // the customOp.\n const dyActivation = getFusedDyActivation(reshape(dy, y.shape), y, activation);\n let aDer;\n let bDer;\n if (!transposeA && !transposeB) {\n aDer = unfusedMatMul(dyActivation, b3D, false, true);\n bDer = unfusedMatMul(a3D, dyActivation, true, false);\n }\n else if (!transposeA && transposeB) {\n aDer = unfusedMatMul(dyActivation, b3D, false, false);\n bDer = unfusedMatMul(dyActivation, a3D, true, false);\n }\n else if (transposeA && !transposeB) {\n aDer = unfusedMatMul(b3D, dyActivation, false, true);\n bDer = unfusedMatMul(a3D, dyActivation, false, false);\n }\n else {\n aDer = unfusedMatMul(b3D, dyActivation, true, true);\n bDer = unfusedMatMul(dyActivation, a3D, true, true);\n }\n if (bias != null) {\n const biasDer = getFusedBiasGradient($bias, dyActivation);\n return [aDer, bDer, biasDer];\n }\n else {\n return [aDer, bDer];\n }\n };\n const inputs = {\n a: a3D,\n b: b3D,\n bias: $bias,\n preluActivationWeights: $preluActivationWeights\n };\n const attrs = { transposeA, transposeB, activation, leakyreluAlpha };\n // Depending on the the params passed in we will have different number of\n // inputs and thus a a different number of elements in the gradient.\n if (bias == null) {\n const customOp = customGrad((a3D, b3D, save) => {\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(_FusedMatMul, inputs, attrs);\n save([a3D, b3D, res]);\n return { value: reshape(res, outShape), gradFunc: grad };\n });\n return customOp(a3D, b3D);\n }\n else {\n const customOpWithBias = customGrad((a3D, b3D, $bias, save) => {\n const res = \n // tslint:disable-next-line: no-unnecessary-type-assertion\n ENGINE.runKernel(_FusedMatMul, inputs, attrs);\n save([a3D, b3D, res, $bias]);\n return { value: reshape(res, outShape), gradFunc: grad };\n });\n return customOpWithBias(a3D, b3D, $bias);\n }\n}\nexport const matMul = /* @__PURE__ */ op({ fusedMatMul_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0X211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Z1c2VkL21hdF9tdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBd0MsTUFBTSxvQkFBb0IsQ0FBQztBQUl2RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxLQUFLLGNBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsTUFBTSxJQUFJLGFBQWEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyxZQUFZLENBQUMsRUFDcEIsQ0FBQyxFQUNELENBQUMsRUFDRCxVQUFVLEdBQUcsS0FBSyxFQUNsQixVQUFVLEdBQUcsS0FBSyxFQUNsQixJQUFJLEVBQ0osVUFBVSxHQUFHLFFBQVEsRUFDckIsc0JBQXNCLEVBQ3RCLGNBQWMsR0FBRyxHQUFHLEdBVXJCO0lBQ0csSUFBSSxVQUFV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QUFFLEdBQWEsRUFBRSxLQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sR0FBRztZQUNMLDBEQUEwRDtZQUMxRCxNQUFNLENBQUMsU0FBUyxDQUNaLFlBQVksRUFBRSxNQUFtQyxFQUNqRCxLQUFnQyxDQUFXLENBQUM7WUFFcEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUU3QixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRVAsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge2N1c3RvbUdyYWR9IGZyb20gJy4uLy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge19GdXNlZE1hdE11bCwgX0Z1c2VkTWF0TXVsQXR0cnMsIF9GdXNlZE1hdE11bElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjNEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtHcmFkU2F2ZUZ1bmMsIE5hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHttYWtlVHlwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWwnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0ICogYXMgYnJvYWRjYXN0X3V0aWwgZnJvbSAnLi4vYnJvYWRjYXN0X3V0aWwnO1xuaW1wb3J0IHtBY3RpdmF0aW9ufSBmcm9tICcuLi9mdXNlZF90eXBlcyc7XG5pbXBvcnQge2FwcGx5QWN0aXZhdGlvbiwgZ2V0RnVzZWRCaWFzR3JhZGllbnQsIGdldEZ1c2VkRHlBY3RpdmF0aW9uLCBzaG91bGRGdXNlfSBmcm9tICcuLi9mdXNlZF91dGlsJztcbmltcG9ydCB7bWF0TXVsIGFzIHVuZnVzZWRNYXRNdWx9IGZyb20gJy4uL21hdF9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBtYXRyaWNlcyB3aXRoIG9wdGlvbmFsIGFjdGl2YXRpb24gYW5kIGJpYXMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGEgPSB0Zi50ZW5zb3IyZChbLTEsIC0yXSwgWzEsIDJdKTtcbiAqIGNvbnN0IGIgPSB0Zi50ZW5zb3IyZChbMSwgMiwgMywgNF0sIFsyLCAyXSk7XG4gKiBjb25zdCBiaWFzID0gdGYudGVuc29yMmQoWzEsIDJdLCBbMSwgMl0pO1xuICpcbiAqIHRmLmZ1c2VkLm1hdE11bCh7YSwgYiwgYmlhcywgYWN0aXZhdGlvbjogJ3JlbHUnfSkucHJpbnQoKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvYmogQW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBgYWAgRmlyc3QgbWF0cml4IGluIGRvdCBwcm9kdWN0IG9wZXJhdGlvbi5cbiAqIC0gYGJgIFNlY29uZCBtYXRyaXggaW4gZG90IHByb2R1Y3Qgb3BlcmF0aW9uLlxuICogLSBgdHJhbnNwb3NlQWAgSWYgdHJ1ZSwgYGFgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogLSBgdHJhbnNwb3NlQmAgSWYgdHJ1ZSwgYGJgIGlzIHRyYW5zcG9zZWQgYmVmb3JlIG11bHRpcGxpY2F0aW9uLlxuICogLSBgYmlhc2AgTWF0cml4IHRvIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQuXG4gKiAtIGBhY3RpdmF0aW9uYCBOYW1lIG9mIGFjdGl2YXRpb24ga2VybmVsIChkZWZhdWx0cyB0byBgbGluZWFyYCkuXG4gKiAtIGBwcmVsdUFjdGl2YXRpb25XZWlnaHRzYCBUZW5zb3Igb2YgcHJlbHUgd2VpZ2h0cy5cbiAqIC0gYGxlYWt5cmVsdUFscGhhYCBBbHBoYSBvZiBsZWFreXJlbHUuXG4gKi9cbmZ1bmN0aW9uIGZ1c2VkTWF0TXVsXyh7XG4gIGEsXG4gIGIsXG4gIHRyYW5zcG9zZUEgPSBmYWxzZSxcbiAgdHJhbnNwb3NlQiA9IGZhbHNlLFxuICBiaWFzLFxuICBhY3RpdmF0aW9uID0gJ2xpbmVhcicsXG4gIHByZWx1QWN0aXZhdGlvbldlaWdodHMsXG4gIGxlYWt5cmVsdUFscGhhID0gMC4yLFxufToge1xuICBhOiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgYjogVGVuc29yfFRlbnNvckxpa2UsXG4gIHRyYW5zcG9zZUE/OiBib29sZWFuLFxuICB0cmFuc3Bvc2VCPzogYm9vbGVhbixcbiAgYmlhcz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICBhY3RpdmF0aW9uPzogQWN0aXZhdGlvbixcbiAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cz86IFRlbnNvclxuICBsZWFreXJlbHVBbHBoYT86IG51bWJlclxufSk6IFRlbnNvciB7XG4gICAgaWYgKHNob3VsZEZ1c2UoRU5HSU5FLnN0YXRlLmdyYWRpZW50RGVwdGgsIGFjdGl2YXRpb24pID09PSBmYWxzZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHVuZnVzZWRNYXRNdWwoYSwgYiwgdHJhbnNwb3NlQSwgdHJhbnNwb3NlQik7XG4gICAgICBpZiAoYmlhcyAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZChyZXN1bHQsIGJpYXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgICAgICAgICByZXN1bHQsIGFjdGl2YXRpb24sIHByZWx1QWN0aXZhdGlvbldlaWdodHMsIGxlYWt5cmVsdUFscGhhKTtcbiAgICB9XG5cbiAgICBsZXQgJGEgPSBjb252ZXJ0VG9UZW5zb3IoYSwgJ2EnLCAnZnVzZWQgbWF0TXVsJyk7XG4gICAgbGV0ICRiID0gY29udmVydFRvVGVuc29yKGIsICdiJywgJ2Z1c2VkIG1hdE11bCcpO1xuICAgIFskYSwgJGJdID0gbWFrZVR5cGVzTWF0Y2goJGEsICRiKTtcblxuICAgIGNvbnN0IGlubmVyU2hhcGVBID1cbiAgICAgICAgdHJhbnNwb3NlQSA/ICRhLnNoYXBlWyRhLnJhbmsgLSAyXSA6ICRhLnNoYXBlWyRhLnJhbmsgLSAxXTtcbiAgICBjb25zdCBpbm5lclNoYXBlQiA9XG4gICAgICAgIHRyYW5zcG9zZUIgPyAkYi5zaGFwZVskYi5yYW5rIC0gMV0gOiAkYi5zaGFwZVskYi5yYW5rIC0gMl07XG5cbiAgICBjb25zdCBvdXRlclNoYXBlQSA9XG4gICAgICAgIHRyYW5zcG9zZUEgPyAkYS5zaGFwZVskYS5yYW5rIC0gMV0gOiAkYS5zaGFwZVskYS5yYW5rIC0gMl07XG4gICAgY29uc3Qgb3V0ZXJTaGFwZUIgPVxuICAgICAgICB0cmFuc3Bvc2VCID8gJGIuc2hhcGVbJGIucmFuayAtIDJdIDogJGIuc2hhcGVbJGIucmFuayAtIDFdO1xuXG4gICAgY29uc3Qgb3V0ZXJEaW1zQSA9ICRhLnNoYXBlLnNsaWNlKDAsIC0yKTtcbiAgICBjb25zdCBvdXRlckRpbXNCID0gJGIuc2hhcGUuc2xpY2UoMCwgLTIpO1xuICAgIGNvbnN0IGJhdGNoRGltQSA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRlckRpbXNBKTtcbiAgICBjb25zdCBiYXRjaERpbUIgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0ZXJEaW1zQik7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgaW5uZXJTaGFwZUEgPT09IGlubmVyU2hhcGVCLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gZnVzZWQgbWF0TXVsOiBpbm5lciBzaGFwZXMgKCR7aW5uZXJTaGFwZUF9KSBhbmQgKGAgK1xuICAgICAgICAgICAgYCR7aW5uZXJTaGFwZUJ9KSBvZiBUZW5zb3JzIHdpdGggc2hhcGVzICR7JGEuc2hhcGV9IGFuZCBgICtcbiAgICAgICAgICAgIGAkeyRiLnNoYXBlfSBhbmQgdHJhbnNwb3NlQT0ke3RyYW5zcG9zZUF9YCArXG4gICAgICAgICAgICBgIGFuZCB0cmFuc3Bvc2VCPSR7dHJhbnNwb3NlQn0gbXVzdCBtYXRjaC5gKTtcblxuICAgIGNvbnN0IG91dFNoYXBlT3V0ZXJEaW1zID0gYnJvYWRjYXN0X3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICAgICRhLnNoYXBlLnNsaWNlKDAsIC0yKSwgJGIuc2hhcGUuc2xpY2UoMCwgLTIpKTtcbiAgICBjb25zdCBvdXRTaGFwZSA9IG91dFNoYXBlT3V0ZXJEaW1zLmNvbmNhdChbb3V0ZXJTaGFwZUEsIG91dGVyU2hhcGVCXSk7XG5cbiAgICBjb25zdCBhM0Q6IFRlbnNvcjNEID0gdHJhbnNwb3NlQSA/XG4gICAgICAgIHJlc2hhcGUoJGEsIFtiYXRjaERpbUEsIGlubmVyU2hhcGVBLCBvdXRlclNoYXBlQV0pIDpcbiAgICAgICAgcmVzaGFwZSgkYSwgW2JhdGNoRGltQSwgb3V0ZXJTaGFwZUEsIGlubmVyU2hhcGVBXSk7XG4gICAgY29uc3QgYjNEOiBUZW5zb3IzRCA9IHRyYW5zcG9zZUIgP1xuICAgICAgICByZXNoYXBlKCRiLCBbYmF0Y2hEaW1CLCBvdXRlclNoYXBlQiwgaW5uZXJTaGFwZUJdKSA6XG4gICAgICAgIHJlc2hhcGUoJGIsIFtiYXRjaERpbUIsIGlubmVyU2hhcGVCLCBvdXRlclNoYXBlQl0pO1xuXG4gICAgbGV0ICRiaWFzOiBUZW5zb3I7XG4gICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgJGJpYXMgPSBjb252ZXJ0VG9UZW5zb3IoYmlhcywgJ2JpYXMnLCAnZnVzZWQgbWF0TXVsJyk7XG4gICAgICBbJGJpYXNdID0gbWFrZVR5cGVzTWF0Y2goJGJpYXMsICRhKTtcblxuICAgICAgYnJvYWRjYXN0X3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUob3V0U2hhcGUsICRiaWFzLnNoYXBlKTtcbiAgICB9XG5cbiAgICBsZXQgJHByZWx1QWN0aXZhdGlvbldlaWdodHM6IFRlbnNvcjtcbiAgICBpZiAocHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgICAkcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcihcbiAgICAgICAgICBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCAncHJlbHUgd2VpZ2h0cycsICdmdXNlZCBtYXRNdWwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBncmFkID0gKGR5OiBUZW5zb3IzRCwgc2F2ZWQ6IFRlbnNvcltdKSA9PiB7XG4gICAgICBjb25zdCBbYTNELCBiM0QsIHksICRiaWFzXSA9IHNhdmVkO1xuICAgICAgLy8gd2UgcmVzaGFwZSBkeSBiZWNhdXNlIHRoZSByZXN1bHQgb2YgdGhlIGZvcndhcmQgaXMgbm90XG4gICAgICAvLyBuZWNlc3NhcmlseSBnb2luZyB0byBiZSBhIDNkIHRlbnNvciBkdWUgdG8gYSByZXNoYXBlIGRvbmUgYXQgdGhlIGVuZCBvZlxuICAgICAgLy8gdGhlIGN1c3RvbU9wLlxuICAgICAgY29uc3QgZHlBY3RpdmF0aW9uID1cbiAgICAgICAgICBnZXRGdXNlZER5QWN0aXZhdGlvbihyZXNoYXBlKGR5LCB5LnNoYXBlKSwgeSwgYWN0aXZhdGlvbik7XG4gICAgICBsZXQgYURlcjogVGVuc29yO1xuICAgICAgbGV0IGJEZXI6IFRlbnNvcjtcblxuICAgICAgaWYgKCF0cmFuc3Bvc2VBICYmICF0cmFuc3Bvc2VCKSB7XG4gICAgICAgIGFEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYjNELCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGEzRCwgZHlBY3RpdmF0aW9uLCB0cnVlLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKCF0cmFuc3Bvc2VBICYmIHRyYW5zcG9zZUIpIHtcbiAgICAgICAgYURlciA9IHVuZnVzZWRNYXRNdWwoZHlBY3RpdmF0aW9uLCBiM0QsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYTNELCB0cnVlLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKHRyYW5zcG9zZUEgJiYgIXRyYW5zcG9zZUIpIHtcbiAgICAgICAgYURlciA9IHVuZnVzZWRNYXRNdWwoYjNELCBkeUFjdGl2YXRpb24sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgYkRlciA9IHVuZnVzZWRNYXRNdWwoYTNELCBkeUFjdGl2YXRpb24sIGZhbHNlLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhRGVyID0gdW5mdXNlZE1hdE11bChiM0QsIGR5QWN0aXZhdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGJEZXIgPSB1bmZ1c2VkTWF0TXVsKGR5QWN0aXZhdGlvbiwgYTNELCB0cnVlLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBiaWFzRGVyID0gZ2V0RnVzZWRCaWFzR3JhZGllbnQoJGJpYXMsIGR5QWN0aXZhdGlvbik7XG4gICAgICAgIHJldHVybiBbYURlciwgYkRlciwgYmlhc0Rlcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW2FEZXIsIGJEZXJdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dHM6IF9GdXNlZE1hdE11bElucHV0cyA9IHtcbiAgICAgIGE6IGEzRCxcbiAgICAgIGI6IGIzRCxcbiAgICAgIGJpYXM6ICRiaWFzLFxuICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogJHByZWx1QWN0aXZhdGlvbldlaWdodHNcbiAgICB9O1xuICAgIGNvbnN0IGF0dHJzOiBfRnVzZWRNYXRNdWxBdHRycyA9XG4gICAgICAgIHt0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBhY3RpdmF0aW9uLCBsZWFreXJlbHVBbHBoYX07XG5cbiAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHRoZSBwYXJhbXMgcGFzc2VkIGluIHdlIHdpbGwgaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mXG4gICAgLy8gaW5wdXRzIGFuZCB0aHVzIGEgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBncmFkaWVudC5cbiAgICBpZiAoYmlhcyA9PSBudWxsKSB7XG4gICAgICBjb25zdCBjdXN0b21PcCA9XG4gICAgICAgICAgY3VzdG9tR3JhZCgoYTNEOiBUZW5zb3IzRCwgYjNEOiBUZW5zb3IzRCwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPVxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgICAgICAgICAgICAgICBfRnVzZWRNYXRNdWwsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCkgYXMgVGVuc29yO1xuXG4gICAgICAgICAgICBzYXZlKFthM0QsIGIzRCwgcmVzXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlc2hhcGUocmVzLCBvdXRTaGFwZSksIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBjdXN0b21PcChhM0QsIGIzRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1c3RvbU9wV2l0aEJpYXMgPSBjdXN0b21HcmFkKFxuICAgICAgICAgIChhM0Q6IFRlbnNvcjNELCBiM0Q6IFRlbnNvcjNELCAkYmlhczogVGVuc29yLCBzYXZlOiBHcmFkU2F2ZUZ1bmMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgIF9GdXNlZE1hdE11bCwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3I7XG5cbiAgICAgICAgICAgIHNhdmUoW2EzRCwgYjNELCByZXMsICRiaWFzXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHJlc2hhcGUocmVzLCBvdXRTaGFwZSksIGdyYWRGdW5jOiBncmFkfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIGN1c3RvbU9wV2l0aEJpYXMoYTNELCBiM0QsICRiaWFzKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY29uc3QgbWF0TXVsID0gLyogQF9fUFVSRV9fICovIG9wKHtmdXNlZE1hdE11bF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { conv2d } from './fused/conv2d';\nimport { depthwiseConv2d } from './fused/depthwise_conv2d';\nimport { matMul } from './fused/mat_mul';\nexport { conv2d, depthwiseConv2d, matMul };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzZWRfb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvZnVzZWRfb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBR3ZDLE9BQU8sRUFBYSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbnYyZH0gZnJvbSAnLi9mdXNlZC9jb252MmQnO1xuaW1wb3J0IHtkZXB0aHdpc2VDb252MmR9IGZyb20gJy4vZnVzZWQvZGVwdGh3aXNlX2NvbnYyZCc7XG5pbXBvcnQge21hdE11bH0gZnJvbSAnLi9mdXNlZC9tYXRfbXVsJztcbmltcG9ydCB7QWN0aXZhdGlvbn0gZnJvbSAnLi9mdXNlZF90eXBlcyc7XG5cbmV4cG9ydCB7QWN0aXZhdGlvbiwgY29udjJkLCBkZXB0aHdpc2VDb252MmQsIG1hdE11bH07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from '../operation';\nimport { cosineWindow } from '../signal_ops_util';\n/**\n * Generate a hamming window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hammingWindow(10).print();\n * ```\n * @param The length of window\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hammingWindow_(windowLength) {\n return cosineWindow(windowLength, 0.54, 0.46);\n}\nexport const hammingWindow = /* @__PURE__ */ op({ hammingWindow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFtbWluZ193aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvaGFtbWluZ193aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxZQUFvQjtJQUMxQyxPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtjb3NpbmVXaW5kb3d9IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBoYW1taW5nIHdpbmRvdy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpbmRvd19mdW5jdGlvbiNIYW5uX2FuZF9IYW1taW5nX3dpbmRvd3NcbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmhhbW1pbmdXaW5kb3coMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBUaGUgbGVuZ3RoIG9mIHdpbmRvd1xuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGhhbW1pbmdXaW5kb3dfKHdpbmRvd0xlbmd0aDogbnVtYmVyKTogVGVuc29yMUQge1xuICByZXR1cm4gY29zaW5lV2luZG93KHdpbmRvd0xlbmd0aCwgMC41NCwgMC40Nik7XG59XG5leHBvcnQgY29uc3QgaGFtbWluZ1dpbmRvdyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGFtbWluZ1dpbmRvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { op } from '../operation';\nimport { cosineWindow } from '../signal_ops_util';\n/**\n * Generate a Hann window.\n *\n * See: https://en.wikipedia.org/wiki/Window_function#Hann_and_Hamming_windows\n *\n * ```js\n * tf.signal.hannWindow(10).print();\n * ```\n * @param The length of window\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction hannWindow_(windowLength) {\n return cosineWindow(windowLength, 0.5, 0.5);\n}\nexport const hannWindow = /* @__PURE__ */ op({ hannWindow_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFubl93aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvaGFubl93aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxZQUFvQjtJQUN2QyxPQUFPLFlBQVksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtjb3NpbmVXaW5kb3d9IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBIYW5uIHdpbmRvdy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dpbmRvd19mdW5jdGlvbiNIYW5uX2FuZF9IYW1taW5nX3dpbmRvd3NcbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmhhbm5XaW5kb3coMTApLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBUaGUgbGVuZ3RoIG9mIHdpbmRvd1xuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGhhbm5XaW5kb3dfKHdpbmRvd0xlbmd0aDogbnVtYmVyKTogVGVuc29yMUQge1xuICByZXR1cm4gY29zaW5lV2luZG93KHdpbmRvd0xlbmd0aCwgMC41LCAwLjUpO1xufVxuXG5leHBvcnQgY29uc3QgaGFubldpbmRvdyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGFubldpbmRvd199KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat } from '../concat';\nimport { fill } from '../fill';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { tensor2d } from '../tensor2d';\n/**\n * Expands input into frames of frameLength.\n * Slides a window size with frameStep.\n *\n * ```js\n * tf.signal.frame([1, 2, 3], 2, 1).print();\n * ```\n * @param signal The input tensor to be expanded\n * @param frameLength Length of each frame\n * @param frameStep The frame hop size in samples.\n * @param padEnd Whether to pad the end of signal with padValue.\n * @param padValue A number to use where the input signal does\n * not exist when padEnd is True.\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction frame_(signal, frameLength, frameStep, padEnd = false, padValue = 0) {\n let start = 0;\n const output = [];\n while (start + frameLength <= signal.size) {\n output.push(slice(signal, start, frameLength));\n start += frameStep;\n }\n if (padEnd) {\n while (start < signal.size) {\n const padLen = (start + frameLength) - signal.size;\n const pad = concat([\n slice(signal, start, frameLength - padLen), fill([padLen], padValue)\n ]);\n output.push(pad);\n start += frameStep;\n }\n }\n if (output.length === 0) {\n return tensor2d([], [0, frameLength]);\n }\n return reshape(concat(output), [output.length, frameLength]);\n}\nexport const frame = /* @__PURE__ */ op({ frame_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zaWduYWwvZnJhbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsU0FBUyxNQUFNLENBQ1gsTUFBZ0IsRUFBRSxXQUFtQixFQUFFLFNBQWlCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFDeEUsUUFBUSxHQUFHLENBQUM7SUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsT0FBTyxLQUFLLEdBQUcsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEtBQUssSUFBSSxTQUFTLENBQUM7S0FDcEI7SUFFRCxJQUFJLE1BQU0sRUFBRTtRQUNWLE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNuRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7YUFDckUsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixLQUFLLElBQUksU0FBUyxDQUFDO1NBQ3BCO0tBQ0Y7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29uY2F0fSBmcm9tICcuLi9jb25jYXQnO1xuaW1wb3J0IHtmaWxsfSBmcm9tICcuLi9maWxsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi4vc2xpY2UnO1xuaW1wb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi4vdGVuc29yMmQnO1xuXG4vKipcbiAqIEV4cGFuZHMgaW5wdXQgaW50byBmcmFtZXMgb2YgZnJhbWVMZW5ndGguXG4gKiBTbGlkZXMgYSB3aW5kb3cgc2l6ZSB3aXRoIGZyYW1lU3RlcC5cbiAqXG4gKiBgYGBqc1xuICogdGYuc2lnbmFsLmZyYW1lKFsxLCAyLCAzXSwgMiwgMSkucHJpbnQoKTtcbiAqIGBgYFxuICogQHBhcmFtIHNpZ25hbCBUaGUgaW5wdXQgdGVuc29yIHRvIGJlIGV4cGFuZGVkXG4gKiBAcGFyYW0gZnJhbWVMZW5ndGggTGVuZ3RoIG9mIGVhY2ggZnJhbWVcbiAqIEBwYXJhbSBmcmFtZVN0ZXAgVGhlIGZyYW1lIGhvcCBzaXplIGluIHNhbXBsZXMuXG4gKiBAcGFyYW0gcGFkRW5kIFdoZXRoZXIgdG8gcGFkIHRoZSBlbmQgb2Ygc2lnbmFsIHdpdGggcGFkVmFsdWUuXG4gKiBAcGFyYW0gcGFkVmFsdWUgQSBudW1iZXIgdG8gdXNlIHdoZXJlIHRoZSBpbnB1dCBzaWduYWwgZG9lc1xuICogICAgIG5vdCBleGlzdCB3aGVuIHBhZEVuZCBpcyBUcnVlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NpZ25hbCcsIG5hbWVzcGFjZTogJ3NpZ25hbCd9XG4gKi9cbmZ1bmN0aW9uIGZyYW1lXyhcbiAgICBzaWduYWw6IFRlbnNvcjFELCBmcmFtZUxlbmd0aDogbnVtYmVyLCBmcmFtZVN0ZXA6IG51bWJlciwgcGFkRW5kID0gZmFsc2UsXG4gICAgcGFkVmFsdWUgPSAwKTogVGVuc29yIHtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgY29uc3Qgb3V0cHV0OiBUZW5zb3JbXSA9IFtdO1xuICB3aGlsZSAoc3RhcnQgKyBmcmFtZUxlbmd0aCA8PSBzaWduYWwuc2l6ZSkge1xuICAgIG91dHB1dC5wdXNoKHNsaWNlKHNpZ25hbCwgc3RhcnQsIGZyYW1lTGVuZ3RoKSk7XG4gICAgc3RhcnQgKz0gZnJhbWVTdGVwO1xuICB9XG5cbiAgaWYgKHBhZEVuZCkge1xuICAgIHdoaWxlIChzdGFydCA8IHNpZ25hbC5zaXplKSB7XG4gICAgICBjb25zdCBwYWRMZW4gPSAoc3RhcnQgKyBmcmFtZUxlbmd0aCkgLSBzaWduYWwuc2l6ZTtcbiAgICAgIGNvbnN0IHBhZCA9IGNvbmNhdChbXG4gICAgICAgIHNsaWNlKHNpZ25hbCwgc3RhcnQsIGZyYW1lTGVuZ3RoIC0gcGFkTGVuKSwgZmlsbChbcGFkTGVuXSwgcGFkVmFsdWUpXG4gICAgICBdKTtcbiAgICAgIG91dHB1dC5wdXNoKHBhZCk7XG4gICAgICBzdGFydCArPSBmcmFtZVN0ZXA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG91dHB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdGVuc29yMmQoW10sIFswLCBmcmFtZUxlbmd0aF0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc2hhcGUoY29uY2F0KG91dHB1dCksIFtvdXRwdXQubGVuZ3RoLCBmcmFtZUxlbmd0aF0pO1xufVxuZXhwb3J0IGNvbnN0IGZyYW1lID0gLyogQF9fUFVSRV9fICovIG9wKHtmcmFtZV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { enclosingPowerOfTwo } from '../signal_ops_util';\nimport { rfft } from '../spectral/rfft';\nimport { frame } from './frame';\nimport { hannWindow } from './hann_window';\n/**\n * Computes the Short-time Fourier Transform of signals\n * See: https://en.wikipedia.org/wiki/Short-time_Fourier_transform\n *\n * ```js\n * const input = tf.tensor1d([1, 1, 1, 1, 1])\n * tf.signal.stft(input, 3, 1).print();\n * ```\n * @param signal 1-dimensional real value tensor.\n * @param frameLength The window length of samples.\n * @param frameStep The number of samples to step.\n * @param fftLength The size of the FFT to apply.\n * @param windowFn A callable that takes a window length and returns 1-d tensor.\n *\n * @doc {heading: 'Operations', subheading: 'Signal', namespace: 'signal'}\n */\nfunction stft_(signal, frameLength, frameStep, fftLength, windowFn = hannWindow) {\n if (fftLength == null) {\n fftLength = enclosingPowerOfTwo(frameLength);\n }\n const framedSignal = frame(signal, frameLength, frameStep);\n const windowedSignal = mul(framedSignal, windowFn(frameLength));\n return rfft(windowedSignal, fftLength);\n}\nexport const stft = /* @__PURE__ */ op({ stft_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RmdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NpZ25hbC9zdGZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFdEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsS0FBSyxDQUNWLE1BQWdCLEVBQUUsV0FBbUIsRUFBRSxTQUFpQixFQUN4RCxTQUFrQixFQUNsQixXQUF5QyxVQUFVO0lBQ3JELElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixTQUFTLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDOUM7SUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge2VuY2xvc2luZ1Bvd2VyT2ZUd299IGZyb20gJy4uL3NpZ25hbF9vcHNfdXRpbCc7XG5pbXBvcnQge3JmZnR9IGZyb20gJy4uL3NwZWN0cmFsL3JmZnQnO1xuXG5pbXBvcnQge2ZyYW1lfSBmcm9tICcuL2ZyYW1lJztcbmltcG9ydCB7aGFubldpbmRvd30gZnJvbSAnLi9oYW5uX3dpbmRvdyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIFNob3J0LXRpbWUgRm91cmllciBUcmFuc2Zvcm0gb2Ygc2lnbmFsc1xuICogU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaG9ydC10aW1lX0ZvdXJpZXJfdHJhbnNmb3JtXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGlucHV0ID0gdGYudGVuc29yMWQoWzEsIDEsIDEsIDEsIDFdKVxuICogdGYuc2lnbmFsLnN0ZnQoaW5wdXQsIDMsIDEpLnByaW50KCk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzaWduYWwgMS1kaW1lbnNpb25hbCByZWFsIHZhbHVlIHRlbnNvci5cbiAqIEBwYXJhbSBmcmFtZUxlbmd0aCBUaGUgd2luZG93IGxlbmd0aCBvZiBzYW1wbGVzLlxuICogQHBhcmFtIGZyYW1lU3RlcCBUaGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gc3RlcC5cbiAqIEBwYXJhbSBmZnRMZW5ndGggVGhlIHNpemUgb2YgdGhlIEZGVCB0byBhcHBseS5cbiAqIEBwYXJhbSB3aW5kb3dGbiBBIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSB3aW5kb3cgbGVuZ3RoIGFuZCByZXR1cm5zIDEtZCB0ZW5zb3IuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU2lnbmFsJywgbmFtZXNwYWNlOiAnc2lnbmFsJ31cbiAqL1xuZnVuY3Rpb24gc3RmdF8oXG4gICAgc2lnbmFsOiBUZW5zb3IxRCwgZnJhbWVMZW5ndGg6IG51bWJlciwgZnJhbWVTdGVwOiBudW1iZXIsXG4gICAgZmZ0TGVuZ3RoPzogbnVtYmVyLFxuICAgIHdpbmRvd0ZuOiAobGVuZ3RoOiBudW1iZXIpID0+IFRlbnNvcjFEID0gaGFubldpbmRvdyk6IFRlbnNvciB7XG4gIGlmIChmZnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGZmdExlbmd0aCA9IGVuY2xvc2luZ1Bvd2VyT2ZUd28oZnJhbWVMZW5ndGgpO1xuICB9XG4gIGNvbnN0IGZyYW1lZFNpZ25hbCA9IGZyYW1lKHNpZ25hbCwgZnJhbWVMZW5ndGgsIGZyYW1lU3RlcCk7XG4gIGNvbnN0IHdpbmRvd2VkU2lnbmFsID0gbXVsKGZyYW1lZFNpZ25hbCwgd2luZG93Rm4oZnJhbWVMZW5ndGgpKTtcbiAgcmV0dXJuIHJmZnQod2luZG93ZWRTaWduYWwsIGZmdExlbmd0aCk7XG59XG5leHBvcnQgY29uc3Qgc3RmdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3RmdF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { CropAndResize } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Extracts crops from the input image tensor and resizes them using bilinear\n * sampling or nearest neighbor sampling (possibly with aspect ratio change)\n * to a common output size specified by cropSize.\n *\n * @param image 4d tensor of shape `[batch,imageHeight,imageWidth, depth]`,\n * where imageHeight and imageWidth must be positive, specifying the\n * batch of images from which to take crops\n * @param boxes 2d float32 tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the normalized\n * coordinates of the box in the `boxInd[i]`th image in the batch\n * @param boxInd 1d int32 tensor of shape `[numBoxes]` with values in range\n * `[0, batch)` that specifies the image that the `i`-th box refers to.\n * @param cropSize 1d int32 tensor of 2 elements `[cropHeigh, cropWidth]`\n * specifying the size to which all crops are resized to.\n * @param method Optional string from `'bilinear' | 'nearest'`,\n * defaults to bilinear, which specifies the sampling method for resizing\n * @param extrapolationValue A threshold for deciding when to remove boxes based\n * on score. Defaults to 0.\n * @return A 4D tensor of the shape `[numBoxes,cropHeight,cropWidth,depth]`\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction cropAndResize_(image, boxes, boxInd, cropSize, method = 'bilinear', extrapolationValue = 0) {\n const $image = convertToTensor(image, 'image', 'cropAndResize');\n const $boxes = convertToTensor(boxes, 'boxes', 'cropAndResize', 'float32');\n const $boxInd = convertToTensor(boxInd, 'boxInd', 'cropAndResize', 'int32');\n const numBoxes = $boxes.shape[0];\n util.assert($image.rank === 4, () => 'Error in cropAndResize: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n util.assert($boxes.rank === 2 && $boxes.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${numBoxes},4] ` +\n `but had shape ${$boxes.shape}.`);\n util.assert($boxInd.rank === 1 && $boxInd.shape[0] === numBoxes, () => `Error in cropAndResize: boxInd must be have size [${numBoxes}] ` +\n `but had shape ${$boxes.shape}.`);\n util.assert(cropSize.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got ` +\n `length ${cropSize.length}.`);\n util.assert(cropSize[0] >= 1 && cropSize[1] >= 1, () => `cropSize must be atleast [1,1], but was ${cropSize}`);\n util.assert(method === 'bilinear' || method === 'nearest', () => `method must be bilinear or nearest, but was ${method}`);\n const inputs = { image: $image, boxes: $boxes, boxInd: $boxInd };\n const attrs = { method, extrapolationValue, cropSize };\n const res = ENGINE.runKernel(CropAndResize, inputs, attrs);\n return res;\n}\nexport const cropAndResize = /* @__PURE__ */ op({ cropAndResize_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcF9hbmRfcmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvY3JvcF9hbmRfcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBMEMsTUFBTSxvQkFBb0IsQ0FBQztBQUkxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsY0FBYyxDQUNuQixLQUEwQixFQUMxQixLQUEwQixFQUMxQixNQUEyQixFQUMzQixRQUEwQixFQUMxQixTQUErQixVQUFVLEVBQ3pDLGtCQUFrQixHQUFHLENBQUM7SUFFeEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLCtDQUErQztRQUNqRCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFDMUMsR0FBRyxFQUFFLENBQUMsb0RBQW9ELFFBQVEsTUFBTTtRQUNwRSxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFDbkQsR0FBRyxFQUFFLENBQUMscURBQXFELFFBQVEsSUFBSTtRQUNuRSxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLFVBQVUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ3BDLEdBQUcsRUFBRSxDQUFDLDJDQUEyQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUM3QyxHQUFHLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuRSxNQUFNLE1BQU0sR0FDYyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDMUUsTUFBTSxLQUFLLEdBQXVCLEVBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3pFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ3hCLGFBQWEsRUFBRSxNQUFtQyxFQUNsRCxLQUFnQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxHQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge0Nyb3BBbmRSZXNpemUsIENyb3BBbmRSZXNpemVBdHRycywgQ3JvcEFuZFJlc2l6ZUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IxRCwgVGVuc29yMkQsIFRlbnNvcjREfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEV4dHJhY3RzIGNyb3BzIGZyb20gdGhlIGlucHV0IGltYWdlIHRlbnNvciBhbmQgcmVzaXplcyB0aGVtIHVzaW5nIGJpbGluZWFyXG4gKiBzYW1wbGluZyBvciBuZWFyZXN0IG5laWdoYm9yIHNhbXBsaW5nIChwb3NzaWJseSB3aXRoIGFzcGVjdCByYXRpbyBjaGFuZ2UpXG4gKiB0byBhIGNvbW1vbiBvdXRwdXQgc2l6ZSBzcGVjaWZpZWQgYnkgY3JvcFNpemUuXG4gKlxuICogQHBhcmFtIGltYWdlIDRkIHRlbnNvciBvZiBzaGFwZSBgW2JhdGNoLGltYWdlSGVpZ2h0LGltYWdlV2lkdGgsIGRlcHRoXWAsXG4gKiAgICAgd2hlcmUgaW1hZ2VIZWlnaHQgYW5kIGltYWdlV2lkdGggbXVzdCBiZSBwb3NpdGl2ZSwgc3BlY2lmeWluZyB0aGVcbiAqICAgICBiYXRjaCBvZiBpbWFnZXMgZnJvbSB3aGljaCB0byB0YWtlIGNyb3BzXG4gKiBAcGFyYW0gYm94ZXMgMmQgZmxvYXQzMiB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgbm9ybWFsaXplZFxuICogICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBib3ggaW4gdGhlIGBib3hJbmRbaV1gdGggaW1hZ2UgaW4gdGhlIGJhdGNoXG4gKiBAcGFyYW0gYm94SW5kIDFkIGludDMyIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzXWAgd2l0aCB2YWx1ZXMgaW4gcmFuZ2VcbiAqICAgICBgWzAsIGJhdGNoKWAgdGhhdCBzcGVjaWZpZXMgdGhlIGltYWdlIHRoYXQgdGhlIGBpYC10aCBib3ggcmVmZXJzIHRvLlxuICogQHBhcmFtIGNyb3BTaXplIDFkIGludDMyIHRlbnNvciBvZiAyIGVsZW1lbnRzIGBbY3JvcEhlaWdoLCBjcm9wV2lkdGhdYFxuICogICAgIHNwZWNpZnlpbmcgdGhlIHNpemUgdG8gd2hpY2ggYWxsIGNyb3BzIGFyZSByZXNpemVkIHRvLlxuICogQHBhcmFtIG1ldGhvZCBPcHRpb25hbCBzdHJpbmcgZnJvbSBgJ2JpbGluZWFyJyB8ICduZWFyZXN0J2AsXG4gKiAgICAgZGVmYXVsdHMgdG8gYmlsaW5lYXIsIHdoaWNoIHNwZWNpZmllcyB0aGUgc2FtcGxpbmcgbWV0aG9kIGZvciByZXNpemluZ1xuICogQHBhcmFtIGV4dHJhcG9sYXRpb25WYWx1ZSBBIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hlbiB0byByZW1vdmUgYm94ZXMgYmFzZWRcbiAqICAgICBvbiBzY29yZS4gRGVmYXVsdHMgdG8gMC5cbiAqIEByZXR1cm4gQSA0RCB0ZW5zb3Igb2YgdGhlIHNoYXBlIGBbbnVtQm94ZXMsY3JvcEhlaWdodCxjcm9wV2lkdGgsZGVwdGhdYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gY3JvcEFuZFJlc2l6ZV8oXG4gICAgaW1hZ2U6IFRlbnNvcjREfFRlbnNvckxpa2UsXG4gICAgYm94ZXM6IFRlbnNvcjJEfFRlbnNvckxpa2UsXG4gICAgYm94SW5kOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIGNyb3BTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIG1ldGhvZDogJ2JpbGluZWFyJ3wnbmVhcmVzdCcgPSAnYmlsaW5lYXInLFxuICAgIGV4dHJhcG9sYXRpb25WYWx1ZSA9IDAsXG4gICAgKTogVGVuc29yNEQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdjcm9wQW5kUmVzaXplJyk7XG4gIGNvbnN0ICRib3hlcyA9IGNvbnZlcnRUb1RlbnNvcihib3hlcywgJ2JveGVzJywgJ2Nyb3BBbmRSZXNpemUnLCAnZmxvYXQzMicpO1xuICBjb25zdCAkYm94SW5kID0gY29udmVydFRvVGVuc29yKGJveEluZCwgJ2JveEluZCcsICdjcm9wQW5kUmVzaXplJywgJ2ludDMyJyk7XG5cbiAgY29uc3QgbnVtQm94ZXMgPSAkYm94ZXMuc2hhcGVbMF07XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA9PT0gNCxcbiAgICAgICgpID0+ICdFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRib3hlcy5yYW5rID09PSAyICYmICRib3hlcy5zaGFwZVsxXSA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBib3hlcyBtdXN0IGJlIGhhdmUgc2l6ZSBbJHtudW1Cb3hlc30sNF0gYCArXG4gICAgICAgICAgYGJ1dCBoYWQgc2hhcGUgJHskYm94ZXMuc2hhcGV9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgICRib3hJbmQucmFuayA9PT0gMSAmJiAkYm94SW5kLnNoYXBlWzBdID09PSBudW1Cb3hlcyxcbiAgICAgICgpID0+IGBFcnJvciBpbiBjcm9wQW5kUmVzaXplOiBib3hJbmQgbXVzdCBiZSBoYXZlIHNpemUgWyR7bnVtQm94ZXN9XSBgICtcbiAgICAgICAgICBgYnV0IGhhZCBzaGFwZSAkeyRib3hlcy5zaGFwZX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY3JvcFNpemUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNyb3BBbmRSZXNpemU6IGNyb3BTaXplIG11c3QgYmUgb2YgbGVuZ3RoIDIsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYGxlbmd0aCAke2Nyb3BTaXplLmxlbmd0aH0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgY3JvcFNpemVbMF0gPj0gMSAmJiBjcm9wU2l6ZVsxXSA+PSAxLFxuICAgICAgKCkgPT4gYGNyb3BTaXplIG11c3QgYmUgYXRsZWFzdCBbMSwxXSwgYnV0IHdhcyAke2Nyb3BTaXplfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIG1ldGhvZCA9PT0gJ2JpbGluZWFyJyB8fCBtZXRob2QgPT09ICduZWFyZXN0JyxcbiAgICAgICgpID0+IGBtZXRob2QgbXVzdCBiZSBiaWxpbmVhciBvciBuZWFyZXN0LCBidXQgd2FzICR7bWV0aG9kfWApO1xuXG4gIGNvbnN0IGlucHV0czpcbiAgICAgIENyb3BBbmRSZXNpemVJbnB1dHMgPSB7aW1hZ2U6ICRpbWFnZSwgYm94ZXM6ICRib3hlcywgYm94SW5kOiAkYm94SW5kfTtcbiAgY29uc3QgYXR0cnM6IENyb3BBbmRSZXNpemVBdHRycyA9IHttZXRob2QsIGV4dHJhcG9sYXRpb25WYWx1ZSwgY3JvcFNpemV9O1xuICBjb25zdCByZXMgPSBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgQ3JvcEFuZFJlc2l6ZSwgaW5wdXRzIGFzIHVua25vd24gYXMgTmFtZWRUZW5zb3JNYXAsXG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gIHJldHVybiByZXMgYXMgVGVuc29yNEQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcm9wQW5kUmVzaXplID0gLyogQF9fUFVSRV9fICovIG9wKHtjcm9wQW5kUmVzaXplX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { FlipLeftRight } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Flips the image left to right. Currently available in the CPU, WebGL, and\n * WASM backends.\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n */\n/** @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'} */\nfunction flipLeftRight_(image) {\n const $image = convertToTensor(image, 'image', 'flipLeftRight', 'float32');\n util.assert($image.rank === 4, () => 'Error in flipLeftRight: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n const inputs = { image: $image };\n const res = ENGINE.runKernel(FlipLeftRight, inputs, {});\n return res;\n}\nexport const flipLeftRight = /* @__PURE__ */ op({ flipLeftRight_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcF9sZWZ0X3JpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvZmxpcF9sZWZ0X3JpZ2h0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGFBQWEsRUFBc0IsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7R0FLRztBQUNILDZFQUE2RTtBQUM3RSxTQUFTLGNBQWMsQ0FBQyxLQUEwQjtJQUNoRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFM0UsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsK0NBQStDO1FBQ2pELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBd0IsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDcEQsTUFBTSxHQUFHLEdBQ0wsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBbUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxPQUFPLEdBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7RmxpcExlZnRSaWdodCwgRmxpcExlZnRSaWdodElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIEZsaXBzIHRoZSBpbWFnZSBsZWZ0IHRvIHJpZ2h0LiBDdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBDUFUsIFdlYkdMLCBhbmRcbiAqIFdBU00gYmFja2VuZHMuXG4gKlxuICogQHBhcmFtIGltYWdlIDRkIHRlbnNvciBvZiBzaGFwZSBgW2JhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgZGVwdGhdYC5cbiAqL1xuLyoqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ30gKi9cbmZ1bmN0aW9uIGZsaXBMZWZ0UmlnaHRfKGltYWdlOiBUZW5zb3I0RHxUZW5zb3JMaWtlKTogVGVuc29yNEQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdmbGlwTGVmdFJpZ2h0JywgJ2Zsb2F0MzInKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGZsaXBMZWZ0UmlnaHQ6IGltYWdlIG11c3QgYmUgcmFuayA0LCcgK1xuICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgY29uc3QgaW5wdXRzOiBGbGlwTGVmdFJpZ2h0SW5wdXRzID0ge2ltYWdlOiAkaW1hZ2V9O1xuICBjb25zdCByZXMgPVxuICAgICAgRU5HSU5FLnJ1bktlcm5lbChGbGlwTGVmdFJpZ2h0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCwge30pO1xuICByZXR1cm4gcmVzIGFzIFRlbnNvcjREO1xufVxuXG5leHBvcnQgY29uc3QgZmxpcExlZnRSaWdodCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7ZmxpcExlZnRSaWdodF99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { tile } from '../tile';\n/**\n * Converts images from grayscale to RGB format.\n *\n * @param image A grayscale tensor to convert. The `image`'s last dimension must\n * be size 1 with at least a two-dimensional shape.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction grayscaleToRGB_(image) {\n const $image = convertToTensor(image, 'image', 'grayscaleToRGB');\n const lastDimsIdx = $image.rank - 1;\n const lastDims = $image.shape[lastDimsIdx];\n util.assert($image.rank >= 2, () => 'Error in grayscaleToRGB: images must be at least rank 2, ' +\n `but got rank ${$image.rank}.`);\n util.assert(lastDims === 1, () => 'Error in grayscaleToRGB: last dimension of a grayscale image ' +\n `should be size 1, but got size ${lastDims}.`);\n const reps = new Array($image.rank);\n reps.fill(1, 0, lastDimsIdx);\n reps[lastDimsIdx] = 3;\n return tile($image, reps);\n}\nexport const grayscaleToRGB = /* @__PURE__ */ op({ grayscaleToRGB_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JheXNjYWxlX3RvX3JnYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL2dyYXlzY2FsZV90b19yZ2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU3Qjs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxlQUFlLENBQ1csS0FBbUI7SUFDcEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUVqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQ2hCLEdBQUcsRUFBRSxDQUFDLDJEQUEyRDtRQUM3RCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxRQUFRLEtBQUssQ0FBQyxFQUNkLEdBQUcsRUFBRSxDQUFDLCtEQUErRDtRQUNqRSxrQ0FBa0MsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUV2RCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yMkQsIFRlbnNvcjNELCBUZW5zb3I0RCwgVGVuc29yNUQsIFRlbnNvcjZEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3RpbGV9IGZyb20gJy4uL3RpbGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIGltYWdlcyBmcm9tIGdyYXlzY2FsZSB0byBSR0IgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBpbWFnZSBBIGdyYXlzY2FsZSB0ZW5zb3IgdG8gY29udmVydC4gVGhlIGBpbWFnZWAncyBsYXN0IGRpbWVuc2lvbiBtdXN0XG4gKiAgICAgYmUgc2l6ZSAxIHdpdGggYXQgbGVhc3QgYSB0d28tZGltZW5zaW9uYWwgc2hhcGUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiBncmF5c2NhbGVUb1JHQl88VCBleHRlbmRzIFRlbnNvcjJEfFRlbnNvcjNEfFRlbnNvcjREfFRlbnNvcjVEfFxuICAgICAgICAgICAgICAgICAgICAgICAgIFRlbnNvcjZEPihpbWFnZTogVHxUZW5zb3JMaWtlKTogVCB7XG4gIGNvbnN0ICRpbWFnZSA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltYWdlJywgJ2dyYXlzY2FsZVRvUkdCJyk7XG5cbiAgY29uc3QgbGFzdERpbXNJZHggPSAkaW1hZ2UucmFuayAtIDE7XG4gIGNvbnN0IGxhc3REaW1zID0gJGltYWdlLnNoYXBlW2xhc3REaW1zSWR4XTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5yYW5rID49IDIsXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gZ3JheXNjYWxlVG9SR0I6IGltYWdlcyBtdXN0IGJlIGF0IGxlYXN0IHJhbmsgMiwgJyArXG4gICAgICAgICAgYGJ1dCBnb3QgcmFuayAkeyRpbWFnZS5yYW5rfS5gKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGxhc3REaW1zID09PSAxLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGdyYXlzY2FsZVRvUkdCOiBsYXN0IGRpbWVuc2lvbiBvZiBhIGdyYXlzY2FsZSBpbWFnZSAnICtcbiAgICAgICAgICBgc2hvdWxkIGJlIHNpemUgMSwgYnV0IGdvdCBzaXplICR7bGFzdERpbXN9LmApO1xuXG4gIGNvbnN0IHJlcHMgPSBuZXcgQXJyYXkoJGltYWdlLnJhbmspO1xuXG4gIHJlcHMuZmlsbCgxLCAwLCBsYXN0RGltc0lkeCk7XG4gIHJlcHNbbGFzdERpbXNJZHhdID0gMztcblxuICByZXR1cm4gdGlsZSgkaW1hZ2UsIHJlcHMpO1xufVxuXG5leHBvcnQgY29uc3QgZ3JheXNjYWxlVG9SR0IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2dyYXlzY2FsZVRvUkdCX30pO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { cast } from '../cast';\nimport { einsum } from '../einsum';\nimport { expandDims } from '../expand_dims';\nimport { op } from '../operation';\nimport { tensor1d } from '../tensor1d';\n/**\n * Converts images from RGB format to grayscale.\n *\n * @param image A RGB tensor to convert. The `image`'s last dimension must\n * be size 3 with at least a two-dimensional shape.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction rgbToGrayscale_(image) {\n const $image = convertToTensor(image, 'image', 'RGBToGrayscale');\n const lastDimsIdx = $image.rank - 1;\n const lastDims = $image.shape[lastDimsIdx];\n util.assert($image.rank >= 2, () => 'Error in RGBToGrayscale: images must be at least rank 2, ' +\n `but got rank ${$image.rank}.`);\n util.assert(lastDims === 3, () => 'Error in RGBToGrayscale: last dimension of an RGB image ' +\n `should be size 3, but got size ${lastDims}.`);\n // Remember original dtype so we can convert back if needed\n const origDtype = $image.dtype;\n const fltImage = cast($image, 'float32');\n const rgbWeights = tensor1d([0.2989, 0.5870, 0.1140]);\n let grayFloat;\n switch ($image.rank) {\n case 2:\n grayFloat = einsum('ij,j->i', fltImage, rgbWeights);\n break;\n case 3:\n grayFloat = einsum('ijk,k->ij', fltImage, rgbWeights);\n break;\n case 4:\n grayFloat = einsum('ijkl,l->ijk', fltImage, rgbWeights);\n break;\n case 5:\n grayFloat = einsum('ijklm,m->ijkl', fltImage, rgbWeights);\n break;\n case 6:\n grayFloat = einsum('ijklmn,n->ijklm', fltImage, rgbWeights);\n break;\n default:\n throw new Error('Not a valid tensor rank.');\n }\n grayFloat = expandDims(grayFloat, -1);\n return cast(grayFloat, origDtype);\n}\nexport const rgbToGrayscale = /* @__PURE__ */ op({ rgbToGrayscale_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmdiX3RvX2dyYXlzY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL3JnYl90b19ncmF5c2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGVBQWUsQ0FDVyxLQUFtQjtJQUNwRCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRWpFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsRUFDaEIsR0FBRyxFQUFFLENBQUMsMkRBQTJEO1FBQzdELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsTUFBTSxDQUNQLFFBQVEsS0FBSyxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMsMERBQTBEO1FBQzVELGtDQUFrQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRXZELDJEQUEyRDtJQUMzRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFekMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXRELElBQUksU0FBUyxDQUFDO0lBQ2QsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1FBQ25CLEtBQUssQ0FBQztZQUNKLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNO1FBQ1IsS0FBSyxDQUFDO1lBQ0osU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELE1BQU07UUFDUixLQUFLLENBQUM7WUFDSixTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEQsTUFBTTtRQUNSLEtBQUssQ0FBQztZQUNKLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMxRCxNQUFNO1FBQ1IsS0FBSyxDQUFDO1lBQ0osU0FBUyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDNUQsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFNLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IyRCwgVGVuc29yM0QsIFRlbnNvcjRELCBUZW5zb3I1RCwgVGVuc29yNkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi4vY2FzdCc7XG5pbXBvcnQge2VpbnN1bX0gZnJvbSAnLi4vZWluc3VtJztcbmltcG9ydCB7ZXhwYW5kRGltc30gZnJvbSAnLi4vZXhwYW5kX2RpbXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7dGVuc29yMWR9IGZyb20gJy4uL3RlbnNvcjFkJztcblxuLyoqXG4gKiBDb252ZXJ0cyBpbWFnZXMgZnJvbSBSR0IgZm9ybWF0IHRvIGdyYXlzY2FsZS5cbiAqXG4gKiBAcGFyYW0gaW1hZ2UgQSBSR0IgdGVuc29yIHRvIGNvbnZlcnQuIFRoZSBgaW1hZ2VgJ3MgbGFzdCBkaW1lbnNpb24gbXVzdFxuICogICAgIGJlIHNpemUgMyB3aXRoIGF0IGxlYXN0IGEgdHdvLWRpbWVuc2lvbmFsIHNoYXBlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gcmdiVG9HcmF5c2NhbGVfPFQgZXh0ZW5kcyBUZW5zb3IyRHxUZW5zb3IzRHxUZW5zb3I0RHxUZW5zb3I1RHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBUZW5zb3I2RD4oaW1hZ2U6IFR8VGVuc29yTGlrZSk6IFQge1xuICBjb25zdCAkaW1hZ2UgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2UsICdpbWFnZScsICdSR0JUb0dyYXlzY2FsZScpO1xuXG4gIGNvbnN0IGxhc3REaW1zSWR4ID0gJGltYWdlLnJhbmsgLSAxO1xuICBjb25zdCBsYXN0RGltcyA9ICRpbWFnZS5zaGFwZVtsYXN0RGltc0lkeF07XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA+PSAyLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIFJHQlRvR3JheXNjYWxlOiBpbWFnZXMgbXVzdCBiZSBhdCBsZWFzdCByYW5rIDIsICcgK1xuICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBsYXN0RGltcyA9PT0gMyxcbiAgICAgICgpID0+ICdFcnJvciBpbiBSR0JUb0dyYXlzY2FsZTogbGFzdCBkaW1lbnNpb24gb2YgYW4gUkdCIGltYWdlICcgK1xuICAgICAgICAgIGBzaG91bGQgYmUgc2l6ZSAzLCBidXQgZ290IHNpemUgJHtsYXN0RGltc30uYCk7XG5cbiAgLy8gUmVtZW1iZXIgb3JpZ2luYWwgZHR5cGUgc28gd2UgY2FuIGNvbnZlcnQgYmFjayBpZiBuZWVkZWRcbiAgY29uc3Qgb3JpZ0R0eXBlID0gJGltYWdlLmR0eXBlO1xuICBjb25zdCBmbHRJbWFnZSA9IGNhc3QoJGltYWdlLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IHJnYldlaWdodHMgPSB0ZW5zb3IxZChbMC4yOTg5LCAwLjU4NzAsIDAuMTE0MF0pO1xuXG4gIGxldCBncmF5RmxvYXQ7XG4gIHN3aXRjaCAoJGltYWdlLnJhbmspIHtcbiAgICBjYXNlIDI6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqLGotPmknLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqayxrLT5paicsIGZsdEltYWdlLCByZ2JXZWlnaHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIGdyYXlGbG9hdCA9IGVpbnN1bSgnaWprbCxsLT5pamsnLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDU6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqa2xtLG0tPmlqa2wnLCBmbHRJbWFnZSwgcmdiV2VpZ2h0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICBncmF5RmxvYXQgPSBlaW5zdW0oJ2lqa2xtbixuLT5pamtsbScsIGZsdEltYWdlLCByZ2JXZWlnaHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHZhbGlkIHRlbnNvciByYW5rLicpO1xuICB9XG4gIGdyYXlGbG9hdCA9IGV4cGFuZERpbXMoZ3JheUZsb2F0LCAtMSk7XG5cbiAgcmV0dXJuIGNhc3QoZ3JheUZsb2F0LCBvcmlnRHR5cGUpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCByZ2JUb0dyYXlzY2FsZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7cmdiVG9HcmF5c2NhbGVffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { RotateWithOffset } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Rotates the input image tensor counter-clockwise with an optional offset\n * center of rotation. Currently available in the CPU, WebGL, and WASM backends.\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n * @param radians The amount of rotation.\n * @param fillValue The value to fill in the empty space leftover\n * after rotation. Can be either a single grayscale value (0-255), or an\n * array of three numbers `[red, green, blue]` specifying the red, green,\n * and blue channels. Defaults to `0` (black).\n * @param center The center of rotation. Can be either a single value (0-1), or\n * an array of two numbers `[centerX, centerY]`. Defaults to `0.5` (rotates\n * the image around its center).\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction rotateWithOffset_(image, radians, fillValue = 0, center = 0.5) {\n const $image = convertToTensor(image, 'image', 'rotateWithOffset', 'float32');\n util.assert($image.rank === 4, () => 'Error in rotateWithOffset: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n const inputs = { image: $image };\n const attrs = { radians, fillValue, center };\n const res = ENGINE.runKernel(RotateWithOffset, inputs, attrs);\n return res;\n}\nexport const rotateWithOffset = /* @__PURE__ */ op({ rotateWithOffset_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX3dpdGhfb2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvcm90YXRlX3dpdGhfb2Zmc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGdCQUFnQixFQUFnRCxNQUFNLG9CQUFvQixDQUFDO0FBSW5HLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksQ0FBQztBQUVuQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsaUJBQWlCLENBQ3RCLEtBQTBCLEVBQUUsT0FBZSxFQUMzQyxZQUE2QyxDQUFDLEVBQzlDLFNBQWtDLEdBQUc7SUFDdkMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsa0RBQWtEO1FBQ3BELGdCQUFnQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUV4QyxNQUFNLE1BQU0sR0FBMkIsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQTBCLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUNsRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUN4QixnQkFBZ0IsRUFBRSxNQUFtQyxFQUNyRCxLQUFnQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxHQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtSb3RhdGVXaXRoT2Zmc2V0LCBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMsIFJvdGF0ZVdpdGhPZmZzZXRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogUm90YXRlcyB0aGUgaW5wdXQgaW1hZ2UgdGVuc29yIGNvdW50ZXItY2xvY2t3aXNlIHdpdGggYW4gb3B0aW9uYWwgb2Zmc2V0XG4gKiBjZW50ZXIgb2Ygcm90YXRpb24uIEN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIENQVSwgV2ViR0wsIGFuZCBXQVNNIGJhY2tlbmRzLlxuICpcbiAqIEBwYXJhbSBpbWFnZSA0ZCB0ZW5zb3Igb2Ygc2hhcGUgYFtiYXRjaCwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGRlcHRoXWAuXG4gKiBAcGFyYW0gcmFkaWFucyBUaGUgYW1vdW50IG9mIHJvdGF0aW9uLlxuICogQHBhcmFtIGZpbGxWYWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBpbiB0aGUgZW1wdHkgc3BhY2UgbGVmdG92ZXJcbiAqICAgICBhZnRlciByb3RhdGlvbi4gQ2FuIGJlIGVpdGhlciBhIHNpbmdsZSBncmF5c2NhbGUgdmFsdWUgKDAtMjU1KSwgb3IgYW5cbiAqICAgICBhcnJheSBvZiB0aHJlZSBudW1iZXJzIGBbcmVkLCBncmVlbiwgYmx1ZV1gIHNwZWNpZnlpbmcgdGhlIHJlZCwgZ3JlZW4sXG4gKiAgICAgYW5kIGJsdWUgY2hhbm5lbHMuIERlZmF1bHRzIHRvIGAwYCAoYmxhY2spLlxuICogQHBhcmFtIGNlbnRlciBUaGUgY2VudGVyIG9mIHJvdGF0aW9uLiBDYW4gYmUgZWl0aGVyIGEgc2luZ2xlIHZhbHVlICgwLTEpLCBvclxuICogICAgIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIGBbY2VudGVyWCwgY2VudGVyWV1gLiBEZWZhdWx0cyB0byBgMC41YCAocm90YXRlc1xuICogICAgIHRoZSBpbWFnZSBhcm91bmQgaXRzIGNlbnRlcikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiByb3RhdGVXaXRoT2Zmc2V0XyhcbiAgICBpbWFnZTogVGVuc29yNER8VGVuc29yTGlrZSwgcmFkaWFuczogbnVtYmVyLFxuICAgIGZpbGxWYWx1ZTogbnVtYmVyfFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IDAsXG4gICAgY2VudGVyOiBudW1iZXJ8W251bWJlciwgbnVtYmVyXSA9IDAuNSk6IFRlbnNvcjREIHtcbiAgY29uc3QgJGltYWdlID0gY29udmVydFRvVGVuc29yKGltYWdlLCAnaW1hZ2UnLCAncm90YXRlV2l0aE9mZnNldCcsICdmbG9hdDMyJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2UucmFuayA9PT0gNCxcbiAgICAgICgpID0+ICdFcnJvciBpbiByb3RhdGVXaXRoT2Zmc2V0OiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuXG4gIGNvbnN0IGlucHV0czogUm90YXRlV2l0aE9mZnNldElucHV0cyA9IHtpbWFnZTogJGltYWdlfTtcbiAgY29uc3QgYXR0cnM6IFJvdGF0ZVdpdGhPZmZzZXRBdHRycyA9IHtyYWRpYW5zLCBmaWxsVmFsdWUsIGNlbnRlcn07XG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBSb3RhdGVXaXRoT2Zmc2V0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbiAgcmV0dXJuIHJlcyBhcyBUZW5zb3I0RDtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVdpdGhPZmZzZXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3JvdGF0ZVdpdGhPZmZzZXRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nfunction nonMaxSuppSanityCheck(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) {\n if (iouThreshold == null) {\n iouThreshold = 0.5;\n }\n if (scoreThreshold == null) {\n scoreThreshold = Number.NEGATIVE_INFINITY;\n }\n if (softNmsSigma == null) {\n softNmsSigma = 0.0;\n }\n const numBoxes = boxes.shape[0];\n maxOutputSize = Math.min(maxOutputSize, numBoxes);\n util.assert(0 <= iouThreshold && iouThreshold <= 1, () => `iouThreshold must be in [0, 1], but was '${iouThreshold}'`);\n util.assert(boxes.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${boxes.rank}'`);\n util.assert(boxes.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${boxes.shape[1]}`);\n util.assert(scores.rank === 1, () => 'scores must be a 1D tensor');\n util.assert(scores.shape[0] === numBoxes, () => `scores has incompatible shape with boxes. Expected ${numBoxes}, ` +\n `but was ${scores.shape[0]}`);\n util.assert(0 <= softNmsSigma && softNmsSigma <= 1, () => `softNmsSigma must be in [0, 1], but was '${softNmsSigma}'`);\n return { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma };\n}\nexport { nonMaxSuppSanityCheck };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ubWF4X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9ub25tYXhfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxTQUFTLHFCQUFxQixDQUMxQixLQUFlLEVBQUUsTUFBZ0IsRUFBRSxhQUFxQixFQUN4RCxZQUFvQixFQUFFLGNBQXNCLEVBQUUsWUFBcUI7SUFNckUsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO1FBQ3hCLFlBQVksR0FBRyxHQUFHLENBQUM7S0FDcEI7SUFDRCxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUU7UUFDMUIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztLQUMzQztJQUNELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixZQUFZLEdBQUcsR0FBRyxDQUFDO0tBQ3BCO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQ3RDLEdBQUcsRUFBRSxDQUFDLDRDQUE0QyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2hCLEdBQUcsRUFBRSxDQUFDLCtDQUErQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNwQixHQUFHLEVBQUUsQ0FDRCxvREFBb0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHNEQUFzRCxRQUFRLElBQUk7UUFDcEUsV0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLENBQUMsRUFDdEMsR0FBRyxFQUFFLENBQUMsNENBQTRDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDdkUsT0FBTyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgYm94ZXM6IFRlbnNvcjJELCBzY29yZXM6IFRlbnNvcjFELCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIsIHNvZnRObXNTaWdtYT86IG51bWJlcik6IHtcbiAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICBpb3VUaHJlc2hvbGQ6IG51bWJlcixcbiAgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcixcbiAgc29mdE5tc1NpZ21hOiBudW1iZXJcbn0ge1xuICBpZiAoaW91VGhyZXNob2xkID09IG51bGwpIHtcbiAgICBpb3VUaHJlc2hvbGQgPSAwLjU7XG4gIH1cbiAgaWYgKHNjb3JlVGhyZXNob2xkID09IG51bGwpIHtcbiAgICBzY29yZVRocmVzaG9sZCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgfVxuICBpZiAoc29mdE5tc1NpZ21hID09IG51bGwpIHtcbiAgICBzb2Z0Tm1zU2lnbWEgPSAwLjA7XG4gIH1cblxuICBjb25zdCBudW1Cb3hlcyA9IGJveGVzLnNoYXBlWzBdO1xuICBtYXhPdXRwdXRTaXplID0gTWF0aC5taW4obWF4T3V0cHV0U2l6ZSwgbnVtQm94ZXMpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgMCA8PSBpb3VUaHJlc2hvbGQgJiYgaW91VGhyZXNob2xkIDw9IDEsXG4gICAgICAoKSA9PiBgaW91VGhyZXNob2xkIG11c3QgYmUgaW4gWzAsIDFdLCBidXQgd2FzICcke2lvdVRocmVzaG9sZH0nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYm94ZXMucmFuayA9PT0gMixcbiAgICAgICgpID0+IGBib3hlcyBtdXN0IGJlIGEgMkQgdGVuc29yLCBidXQgd2FzIG9mIHJhbmsgJyR7Ym94ZXMucmFua30nYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYm94ZXMuc2hhcGVbMV0gPT09IDQsXG4gICAgICAoKSA9PlxuICAgICAgICAgIGBib3hlcyBtdXN0IGhhdmUgNCBjb2x1bW5zLCBidXQgMm5kIGRpbWVuc2lvbiB3YXMgJHtib3hlcy5zaGFwZVsxXX1gKTtcbiAgdXRpbC5hc3NlcnQoc2NvcmVzLnJhbmsgPT09IDEsICgpID0+ICdzY29yZXMgbXVzdCBiZSBhIDFEIHRlbnNvcicpO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHNjb3Jlcy5zaGFwZVswXSA9PT0gbnVtQm94ZXMsXG4gICAgICAoKSA9PiBgc2NvcmVzIGhhcyBpbmNvbXBhdGlibGUgc2hhcGUgd2l0aCBib3hlcy4gRXhwZWN0ZWQgJHtudW1Cb3hlc30sIGAgK1xuICAgICAgICAgIGBidXQgd2FzICR7c2NvcmVzLnNoYXBlWzBdfWApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIDAgPD0gc29mdE5tc1NpZ21hICYmIHNvZnRObXNTaWdtYSA8PSAxLFxuICAgICAgKCkgPT4gYHNvZnRObXNTaWdtYSBtdXN0IGJlIGluIFswLCAxXSwgYnV0IHdhcyAnJHtzb2Z0Tm1zU2lnbWF9J2ApO1xuICByZXR1cm4ge21heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsIHNvZnRObXNTaWdtYX07XG59XG5cbmV4cG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV3 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @return A 1D tensor with the selected box indices.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppression_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression', 'float32');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression', 'float32');\n const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n maxOutputSize = inputs.maxOutputSize;\n iouThreshold = inputs.iouThreshold;\n scoreThreshold = inputs.scoreThreshold;\n const attrs = { maxOutputSize, iouThreshold, scoreThreshold };\n return ENGINE.runKernel(NonMaxSuppressionV3, { boxes: $boxes, scores: $scores }, attrs);\n}\nexport const nonMaxSuppression = /* @__PURE__ */ op({ nonMaxSuppression_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUI7SUFDM0MsTUFBTSxNQUFNLEdBQ1IsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdEUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUV2QyxNQUFNLEtBQUssR0FBRyxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFDLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUNuQixtQkFBbUIsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7Tm9uTWF4U3VwcHJlc3Npb25WM30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBAcGFyYW0gYm94ZXMgYSAyZCB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgY29ybmVycyBvZlxuICogICAgIHRoZSBib3VuZGluZyBib3guXG4gKiBAcGFyYW0gc2NvcmVzIGEgMWQgdGVuc29yIHByb3ZpZGluZyB0aGUgYm94IHNjb3JlcyBvZiBzaGFwZSBgW251bUJveGVzXWAuXG4gKiBAcGFyYW0gbWF4T3V0cHV0U2l6ZSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gKiBAcGFyYW0gaW91VGhyZXNob2xkIEEgZmxvYXQgcmVwcmVzZW50aW5nIHRoZSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZXRoZXJcbiAqICAgICBib3hlcyBvdmVybGFwIHRvbyBtdWNoIHdpdGggcmVzcGVjdCB0byBJT1UuIE11c3QgYmUgYmV0d2VlbiBbMCwgMV0uXG4gKiAgICAgRGVmYXVsdHMgdG8gMC41ICg1MCUgYm94IG92ZXJsYXApLlxuICogQHBhcmFtIHNjb3JlVGhyZXNob2xkIEEgdGhyZXNob2xkIGZvciBkZWNpZGluZyB3aGVuIHRvIHJlbW92ZSBib3hlcyBiYXNlZFxuICogICAgIG9uIHNjb3JlLiBEZWZhdWx0cyB0byAtaW5mLCB3aGljaCBtZWFucyBhbnkgc2NvcmUgaXMgYWNjZXB0ZWQuXG4gKiBAcmV0dXJuIEEgMUQgdGVuc29yIHdpdGggdGhlIHNlbGVjdGVkIGJveCBpbmRpY2VzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25fKFxuICAgIGJveGVzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBzY29yZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLCBpb3VUaHJlc2hvbGQgPSAwLjUsXG4gICAgc2NvcmVUaHJlc2hvbGQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpOiBUZW5zb3IxRCB7XG4gIGNvbnN0ICRib3hlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbicsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICRzY29yZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKHNjb3JlcywgJ3Njb3JlcycsICdub25NYXhTdXBwcmVzc2lvbicsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgaW5wdXRzID0gbm9uTWF4U3VwcFNhbml0eUNoZWNrKFxuICAgICAgJGJveGVzLCAkc2NvcmVzLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkKTtcbiAgbWF4T3V0cHV0U2l6ZSA9IGlucHV0cy5tYXhPdXRwdXRTaXplO1xuICBpb3VUaHJlc2hvbGQgPSBpbnB1dHMuaW91VGhyZXNob2xkO1xuICBzY29yZVRocmVzaG9sZCA9IGlucHV0cy5zY29yZVRocmVzaG9sZDtcblxuICBjb25zdCBhdHRycyA9IHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBOb25NYXhTdXBwcmVzc2lvblYzLCB7Ym94ZXM6ICRib3hlcywgc2NvcmVzOiAkc2NvcmVzfSwgYXR0cnMpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb24gPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vbk1heFN1cHByZXNzaW9uX30pO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Inserts a value into a sorted array. This method allows duplicate, meaning it\n * allows inserting duplicate value, in which case, the element will be inserted\n * at the lowest index of the value.\n * @param arr The array to modify.\n * @param element The element to insert.\n * @param comparator Optional. If no comparator is specified, elements are\n * compared using array_util.defaultComparator, which is suitable for Strings\n * and Numbers in ascending arrays. If the array contains multiple instances of\n * the target value, the left-most instance will be returned. To provide a\n * comparator, it should take 2 arguments to compare and return a negative,\n * zero, or a positive number.\n */\nexport function binaryInsert(arr, element, comparator) {\n const index = binarySearch(arr, element, comparator);\n const insertionPoint = index < 0 ? -(index + 1) : index;\n arr.splice(insertionPoint, 0, element);\n}\n/**\n * Searches the array for the target using binary search, returns the index\n * of the found element, or position to insert if element not found. If no\n * comparator is specified, elements are compared using array_\n * util.defaultComparator, which is suitable for Strings and Numbers in\n * ascending arrays. If the array contains multiple instances of the target\n * value, the left-most instance will be returned.\n * @param arr The array to be searched in.\n * @param target The target to be searched for.\n * @param comparator Should take 2 arguments to compare and return a negative,\n * zero, or a positive number.\n * @return Lowest index of the target value if found, otherwise the insertion\n * point where the target should be inserted, in the form of\n * (-insertionPoint - 1).\n */\nexport function binarySearch(arr, target, comparator) {\n return binarySearch_(arr, target, comparator || defaultComparator);\n}\n/**\n * Compares its two arguments for order.\n * @param a The first element to be compared.\n * @param b The second element to be compared.\n * @return A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nfunction defaultComparator(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\nfunction binarySearch_(arr, target, comparator) {\n let left = 0;\n let right = arr.length;\n let middle = 0;\n let found = false;\n while (left < right) {\n middle = left + ((right - left) >>> 1);\n const compareResult = comparator(target, arr[middle]);\n if (compareResult > 0) {\n left = middle + 1;\n }\n else {\n right = middle;\n // If compareResult is 0, the value is found. We record it is found,\n // and then keep looking because there may be duplicate.\n found = !compareResult;\n }\n }\n return found ? left : -left - 1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9ub25fbWF4X3N1cHByZXNzaW9uX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDeEIsR0FBUSxFQUFFLE9BQVUsRUFBRSxVQUFtQztJQUMzRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDeEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQ3hCLEdBQVEsRUFBRSxNQUFTLEVBQUUsVUFBbUM7SUFDMUQsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksaUJBQWlCLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBSSxDQUFJLEVBQUUsQ0FBSTtJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLEdBQVEsRUFBRSxNQUFTLEVBQUUsVUFBa0M7SUFDekQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN2QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsT0FBTyxJQUFJLEdBQUcsS0FBSyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNuQjthQUFNO1lBQ0wsS0FBSyxHQUFHLE1BQU0sQ0FBQztZQUNmLG9FQUFvRTtZQUNwRSx3REFBd0Q7WUFDeEQsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJbnNlcnRzIGEgdmFsdWUgaW50byBhIHNvcnRlZCBhcnJheS4gVGhpcyBtZXRob2QgYWxsb3dzIGR1cGxpY2F0ZSwgbWVhbmluZyBpdFxuICogYWxsb3dzIGluc2VydGluZyBkdXBsaWNhdGUgdmFsdWUsIGluIHdoaWNoIGNhc2UsIHRoZSBlbGVtZW50IHdpbGwgYmUgaW5zZXJ0ZWRcbiAqIGF0IHRoZSBsb3dlc3QgaW5kZXggb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIGFyciBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gaW5zZXJ0LlxuICogQHBhcmFtIGNvbXBhcmF0b3IgT3B0aW9uYWwuIElmIG5vIGNvbXBhcmF0b3IgaXMgc3BlY2lmaWVkLCBlbGVtZW50cyBhcmVcbiAqIGNvbXBhcmVkIHVzaW5nIGFycmF5X3V0aWwuZGVmYXVsdENvbXBhcmF0b3IsIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBTdHJpbmdzXG4gKiBhbmQgTnVtYmVycyBpbiBhc2NlbmRpbmcgYXJyYXlzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mXG4gKiB0aGUgdGFyZ2V0IHZhbHVlLCB0aGUgbGVmdC1tb3N0IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuIFRvIHByb3ZpZGUgYVxuICogY29tcGFyYXRvciwgaXQgc2hvdWxkIHRha2UgMiBhcmd1bWVudHMgdG8gY29tcGFyZSBhbmQgcmV0dXJuIGEgbmVnYXRpdmUsXG4gKiB6ZXJvLCBvciBhIHBvc2l0aXZlIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmFyeUluc2VydDxUPihcbiAgICBhcnI6IFRbXSwgZWxlbWVudDogVCwgY29tcGFyYXRvcj86IChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHtcbiAgY29uc3QgaW5kZXggPSBiaW5hcnlTZWFyY2goYXJyLCBlbGVtZW50LCBjb21wYXJhdG9yKTtcbiAgY29uc3QgaW5zZXJ0aW9uUG9pbnQgPSBpbmRleCA8IDAgPyAtKGluZGV4ICsgMSkgOiBpbmRleDtcbiAgYXJyLnNwbGljZShpbnNlcnRpb25Qb2ludCwgMCwgZWxlbWVudCk7XG59XG5cbi8qKlxuICogU2VhcmNoZXMgdGhlIGFycmF5IGZvciB0aGUgdGFyZ2V0IHVzaW5nIGJpbmFyeSBzZWFyY2gsIHJldHVybnMgdGhlIGluZGV4XG4gKiBvZiB0aGUgZm91bmQgZWxlbWVudCwgb3IgcG9zaXRpb24gdG8gaW5zZXJ0IGlmIGVsZW1lbnQgbm90IGZvdW5kLiBJZiBub1xuICogY29tcGFyYXRvciBpcyBzcGVjaWZpZWQsIGVsZW1lbnRzIGFyZSBjb21wYXJlZCB1c2luZyBhcnJheV9cbiAqIHV0aWwuZGVmYXVsdENvbXBhcmF0b3IsIHdoaWNoIGlzIHN1aXRhYmxlIGZvciBTdHJpbmdzIGFuZCBOdW1iZXJzIGluXG4gKiBhc2NlbmRpbmcgYXJyYXlzLiBJZiB0aGUgYXJyYXkgY29udGFpbnMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSB0YXJnZXRcbiAqIHZhbHVlLCB0aGUgbGVmdC1tb3N0IGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYXJyIFRoZSBhcnJheSB0byBiZSBzZWFyY2hlZCBpbi5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCB0byBiZSBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gY29tcGFyYXRvciBTaG91bGQgdGFrZSAyIGFyZ3VtZW50cyB0byBjb21wYXJlIGFuZCByZXR1cm4gYSBuZWdhdGl2ZSxcbiAqICAgIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyLlxuICogQHJldHVybiBMb3dlc3QgaW5kZXggb2YgdGhlIHRhcmdldCB2YWx1ZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHRoZSBpbnNlcnRpb25cbiAqICAgIHBvaW50IHdoZXJlIHRoZSB0YXJnZXQgc2hvdWxkIGJlIGluc2VydGVkLCBpbiB0aGUgZm9ybSBvZlxuICogICAgKC1pbnNlcnRpb25Qb2ludCAtIDEpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5U2VhcmNoPFQ+KFxuICAgIGFycjogVFtdLCB0YXJnZXQ6IFQsIGNvbXBhcmF0b3I/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB7XG4gIHJldHVybiBiaW5hcnlTZWFyY2hfKGFyciwgdGFyZ2V0LCBjb21wYXJhdG9yIHx8IGRlZmF1bHRDb21wYXJhdG9yKTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBpdHMgdHdvIGFyZ3VtZW50cyBmb3Igb3JkZXIuXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgZWxlbWVudCB0byBiZSBjb21wYXJlZC5cbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgZWxlbWVudCB0byBiZSBjb21wYXJlZC5cbiAqIEByZXR1cm4gQSBuZWdhdGl2ZSBudW1iZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyIGFzIHRoZSBmaXJzdFxuICogICAgIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0Q29tcGFyYXRvcjxUPihhOiBULCBiOiBUKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgPiBiID8gMSA6IGEgPCBiID8gLTEgOiAwO1xufVxuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2hfPFQ+KFxuICAgIGFycjogVFtdLCB0YXJnZXQ6IFQsIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHtcbiAgbGV0IGxlZnQgPSAwO1xuICBsZXQgcmlnaHQgPSBhcnIubGVuZ3RoO1xuICBsZXQgbWlkZGxlID0gMDtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICBtaWRkbGUgPSBsZWZ0ICsgKChyaWdodCAtIGxlZnQpID4+PiAxKTtcbiAgICBjb25zdCBjb21wYXJlUmVzdWx0ID0gY29tcGFyYXRvcih0YXJnZXQsIGFyclttaWRkbGVdKTtcbiAgICBpZiAoY29tcGFyZVJlc3VsdCA+IDApIHtcbiAgICAgIGxlZnQgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IG1pZGRsZTtcbiAgICAgIC8vIElmIGNvbXBhcmVSZXN1bHQgaXMgMCwgdGhlIHZhbHVlIGlzIGZvdW5kLiBXZSByZWNvcmQgaXQgaXMgZm91bmQsXG4gICAgICAvLyBhbmQgdGhlbiBrZWVwIGxvb2tpbmcgYmVjYXVzZSB0aGVyZSBtYXkgYmUgZHVwbGljYXRlLlxuICAgICAgZm91bmQgPSAhY29tcGFyZVJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm91bmQgPyBsZWZ0IDogLWxlZnQgLSAxO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { binaryInsert } from './non_max_suppression_util';\nexport function nonMaxSuppressionV3Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0 /* softNmsSigma */);\n}\nexport function nonMaxSuppressionV4Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, 0 /* softNmsSigma */, false /* returnScoresTensor */, padToMaxOutputSize /* padToMaxOutputSize */, true\n /* returnValidOutputs */ );\n}\nexport function nonMaxSuppressionV5Impl(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma) {\n return nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, true /* returnScoresTensor */);\n}\nfunction nonMaxSuppressionImpl_(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma, returnScoresTensor = false, padToMaxOutputSize = false, returnValidOutputs = false) {\n // The list is sorted in ascending order, so that we can always pop the\n // candidate with the largest score in O(1) time.\n const candidates = [];\n for (let i = 0; i < scores.length; i++) {\n if (scores[i] > scoreThreshold) {\n candidates.push({ score: scores[i], boxIndex: i, suppressBeginIndex: 0 });\n }\n }\n candidates.sort(ascendingComparator);\n // If softNmsSigma is 0, the outcome of this algorithm is exactly same as\n // before.\n const scale = softNmsSigma > 0 ? (-0.5 / softNmsSigma) : 0.0;\n const selectedIndices = [];\n const selectedScores = [];\n while (selectedIndices.length < maxOutputSize && candidates.length > 0) {\n const candidate = candidates.pop();\n const { score: originalScore, boxIndex, suppressBeginIndex } = candidate;\n if (originalScore < scoreThreshold) {\n break;\n }\n // Overlapping boxes are likely to have similar scores, therefore we\n // iterate through the previously selected boxes backwards in order to\n // see if candidate's score should be suppressed. We use\n // suppressBeginIndex to track and ensure a candidate can be suppressed\n // by a selected box no more than once. Also, if the overlap exceeds\n // iouThreshold, we simply ignore the candidate.\n let ignoreCandidate = false;\n for (let j = selectedIndices.length - 1; j >= suppressBeginIndex; --j) {\n const iou = intersectionOverUnion(boxes, boxIndex, selectedIndices[j]);\n if (iou >= iouThreshold) {\n ignoreCandidate = true;\n break;\n }\n candidate.score =\n candidate.score * suppressWeight(iouThreshold, scale, iou);\n if (candidate.score <= scoreThreshold) {\n break;\n }\n }\n // At this point, if `candidate.score` has not dropped below\n // `scoreThreshold`, then we know that we went through all of the\n // previous selections and can safely update `suppressBeginIndex` to the\n // end of the selected array. Then we can re-insert the candidate with\n // the updated score and suppressBeginIndex back in the candidate list.\n // If on the other hand, `candidate.score` has dropped below the score\n // threshold, we will not add it back to the candidates list.\n candidate.suppressBeginIndex = selectedIndices.length;\n if (!ignoreCandidate) {\n // Candidate has passed all the tests, and is not suppressed, so\n // select the candidate.\n if (candidate.score === originalScore) {\n selectedIndices.push(boxIndex);\n selectedScores.push(candidate.score);\n }\n else if (candidate.score > scoreThreshold) {\n // Candidate's score is suppressed but is still high enough to be\n // considered, so add back to the candidates list.\n binaryInsert(candidates, candidate, ascendingComparator);\n }\n }\n }\n // NonMaxSuppressionV4 feature: padding output to maxOutputSize.\n const validOutputs = selectedIndices.length;\n const elemsToPad = maxOutputSize - validOutputs;\n if (padToMaxOutputSize && elemsToPad > 0) {\n selectedIndices.push(...new Array(elemsToPad).fill(0));\n selectedScores.push(...new Array(elemsToPad).fill(0.0));\n }\n const result = { selectedIndices };\n if (returnScoresTensor) {\n result['selectedScores'] = selectedScores;\n }\n if (returnValidOutputs) {\n result['validOutputs'] = validOutputs;\n }\n return result;\n}\nfunction intersectionOverUnion(boxes, i, j) {\n const iCoord = boxes.subarray(i * 4, i * 4 + 4);\n const jCoord = boxes.subarray(j * 4, j * 4 + 4);\n const yminI = Math.min(iCoord[0], iCoord[2]);\n const xminI = Math.min(iCoord[1], iCoord[3]);\n const ymaxI = Math.max(iCoord[0], iCoord[2]);\n const xmaxI = Math.max(iCoord[1], iCoord[3]);\n const yminJ = Math.min(jCoord[0], jCoord[2]);\n const xminJ = Math.min(jCoord[1], jCoord[3]);\n const ymaxJ = Math.max(jCoord[0], jCoord[2]);\n const xmaxJ = Math.max(jCoord[1], jCoord[3]);\n const areaI = (ymaxI - yminI) * (xmaxI - xminI);\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0;\n }\n const intersectionYmin = Math.max(yminI, yminJ);\n const intersectionXmin = Math.max(xminI, xminJ);\n const intersectionYmax = Math.min(ymaxI, ymaxJ);\n const intersectionXmax = Math.min(xmaxI, xmaxJ);\n const intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *\n Math.max(intersectionXmax - intersectionXmin, 0.0);\n return intersectionArea / (areaI + areaJ - intersectionArea);\n}\n// A Gaussian penalty function, this method always returns values in [0, 1].\n// The weight is a function of similarity, the more overlap two boxes are, the\n// smaller the weight is, meaning highly overlapping boxe will be significantly\n// penalized. On the other hand, a non-overlapping box will not be penalized.\nfunction suppressWeight(iouThreshold, scale, iou) {\n const weight = Math.exp(scale * iou * iou);\n return iou <= iouThreshold ? weight : 0.0;\n}\nfunction ascendingComparator(c1, c2) {\n // For objects with same scores, we make the object with the larger index go\n // first. In an array that pops from the end, this means that the object with\n // the smaller index will be popped first. This ensures the same output as\n // the TensorFlow python version.\n return (c1.score - c2.score) ||\n ((c1.score === c2.score) && (c2.boxIndex - c1.boxIndex));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9ub25fbWF4X3N1cHByZXNzaW9uX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBaUJ4RCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWlCLEVBQUUsTUFBa0IsRUFBRSxhQUFxQixFQUM1RCxZQUFvQixFQUFFLGNBQXNCO0lBQzlDLE9BQU8sc0JBQXNCLENBQ3pCLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQzFELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLEtBQWlCLEVBQUUsTUFBa0IsRUFBRSxhQUFxQixFQUM1RCxZQUFvQixFQUFFLGNBQXNCLEVBQzVDLGtCQUEyQjtJQUM3QixPQUFPLHNCQUFzQixDQUN6QixLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUMxRCxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixFQUNwRCxrQkFBa0IsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJO0lBQ2pELHdCQUF3QixFQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsS0FBaUIsRUFBRSxNQUFrQixFQUFFLGFBQXFCLEVBQzVELFlBQW9CLEVBQUUsY0FBc0IsRUFDNUMsWUFBb0I7SUFDdEIsT0FBTyxzQkFBc0IsQ0FDekIsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQ3hFLElBQUksQ0FBQyx3QkFBd0Is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QUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztRQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDZFQUE2RTtBQUM3RSxTQUFTLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxHQUFXO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEVBQWEsRUFBRSxFQUFhO0lBQ3ZELDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLGlDQUFpQztJQUNqQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUeXBlZEFycmF5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge2JpbmFyeUluc2VydH0gZnJvbSAnLi9ub25fbWF4X3N1cHByZXNzaW9uX3V0aWwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBOb25NYXhTdXBwcmVzc2lvbiBrZXJuZWwgc2hhcmVkIGJldHdlZW4gd2ViZ2wgYW5kIGNwdS5cbiAqL1xuaW50ZXJmYWNlIENhbmRpZGF0ZSB7XG4gIHNjb3JlOiBudW1iZXI7XG4gIGJveEluZGV4OiBudW1iZXI7XG4gIHN1cHByZXNzQmVnaW5JbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTm9uTWF4U3VwcHJlc3Npb25SZXN1bHQge1xuICBzZWxlY3RlZEluZGljZXM6IG51bWJlcltdO1xuICBzZWxlY3RlZFNjb3Jlcz86IG51bWJlcltdO1xuICB2YWxpZE91dHB1dHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblYzSW1wbChcbiAgICBib3hlczogVHlwZWRBcnJheSwgc2NvcmVzOiBUeXBlZEFycmF5LCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIpOiBOb25NYXhTdXBwcmVzc2lvblJlc3VsdCB7XG4gIHJldHVybiBub25NYXhTdXBwcmVzc2lvbkltcGxfKFxuICAgICAgYm94ZXMsIHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIDAgLyogc29mdE5tc1NpZ21hICovKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uVjRJbXBsKFxuICAgIGJveGVzOiBUeXBlZEFycmF5LCBzY29yZXM6IFR5cGVkQXJyYXksIG1heE91dHB1dFNpemU6IG51bWJlcixcbiAgICBpb3VUaHJlc2hvbGQ6IG51bWJlciwgc2NvcmVUaHJlc2hvbGQ6IG51bWJlcixcbiAgICBwYWRUb01heE91dHB1dFNpemU6IGJvb2xlYW4pOiBOb25NYXhTdXBwcmVzc2lvblJlc3VsdCB7XG4gIHJldHVybiBub25NYXhTdXBwcmVzc2lvbkltcGxfKFxuICAgICAgYm94ZXMsIHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIDAgLyogc29mdE5tc1NpZ21hICovLCBmYWxzZSAvKiByZXR1cm5TY29yZXNUZW5zb3IgKi8sXG4gICAgICBwYWRUb01heE91dHB1dFNpemUgLyogcGFkVG9NYXhPdXRwdXRTaXplICovLCB0cnVlXG4gICAgICAvKiByZXR1cm5WYWxpZE91dHB1dHMgKi8pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WNUltcGwoXG4gICAgYm94ZXM6IFR5cGVkQXJyYXksIHNjb3JlczogVHlwZWRBcnJheSwgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICAgIGlvdVRocmVzaG9sZDogbnVtYmVyLCBzY29yZVRocmVzaG9sZDogbnVtYmVyLFxuICAgIHNvZnRObXNTaWdtYTogbnVtYmVyKTogTm9uTWF4U3VwcHJlc3Npb25SZXN1bHQge1xuICByZXR1cm4gbm9uTWF4U3VwcHJlc3Npb25JbXBsXyhcbiAgICAgIGJveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsIHNvZnRObXNTaWdtYSxcbiAgICAgIHRydWUgLyogcmV0dXJuU2NvcmVzVGVuc29yICovKTtcbn1cblxuZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25JbXBsXyhcbiAgICBib3hlczogVHlwZWRBcnJheSwgc2NvcmVzOiBUeXBlZEFycmF5LCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIsIHNvZnRObXNTaWdtYTogbnVtYmVyLFxuICAgIHJldHVyblNjb3Jlc1RlbnNvciA9IGZhbHNlLCBwYWRUb01heE91dHB1dFNpemUgPSBmYWxzZSxcbiAgICByZXR1cm5WYWxpZE91dHB1dHMgPSBmYWxzZSk6IE5vbk1heFN1cHByZXNzaW9uUmVzdWx0IHtcbiAgLy8gVGhlIGxpc3QgaXMgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgc28gdGhhdCB3ZSBjYW4gYWx3YXlzIHBvcCB0aGVcbiAgLy8gY2FuZGlkYXRlIHdpdGggdGhlIGxhcmdlc3Qgc2NvcmUgaW4gTygxKSB0aW1lLlxuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY29yZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2NvcmVzW2ldID4gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7c2NvcmU6IHNjb3Jlc1tpXSwgYm94SW5kZXg6IGksIHN1cHByZXNzQmVnaW5JbmRleDogMH0pO1xuICAgIH1cbiAgfVxuXG4gIGNhbmRpZGF0ZXMuc29ydChhc2NlbmRpbmdDb21wYXJhdG9yKTtcblxuICAvLyBJZiBzb2Z0Tm1zU2lnbWEgaXMgMCwgdGhlIG91dGNvbWUgb2YgdGhpcyBhbGdvcml0aG0gaXMgZXhhY3RseSBzYW1lIGFzXG4gIC8vIGJlZm9yZS5cbiAgY29uc3Qgc2NhbGUgPSBzb2Z0Tm1zU2lnbWEgPiAwID8gKC0wLjUgLyBzb2Z0Tm1zU2lnbWEpIDogMC4wO1xuXG4gIGNvbnN0IHNlbGVjdGVkSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRTY29yZXM6IG51bWJlcltdID0gW107XG5cbiAgd2hpbGUgKHNlbGVjdGVkSW5kaWNlcy5sZW5ndGggPCBtYXhPdXRwdXRTaXplICYmIGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZXMucG9wKCk7XG4gICAgY29uc3Qge3Njb3JlOiBvcmlnaW5hbFNjb3JlLCBib3hJbmRleCwgc3VwcHJlc3NCZWdpbkluZGV4fSA9IGNhbmRpZGF0ZTtcblxuICAgIGlmIChvcmlnaW5hbFNjb3JlIDwgc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIE92ZXJsYXBwaW5nIGJveGVzIGFyZSBsaWtlbHkgdG8gaGF2ZSBzaW1pbGFyIHNjb3JlcywgdGhlcmVmb3JlIHdlXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIGJveGVzIGJhY2t3YXJkcyBpbiBvcmRlciB0b1xuICAgIC8vIHNlZSBpZiBjYW5kaWRhdGUncyBzY29yZSBzaG91bGQgYmUgc3VwcHJlc3NlZC4gV2UgdXNlXG4gICAgLy8gc3VwcHJlc3NCZWdpbkluZGV4IHRvIHRyYWNrIGFuZCBlbnN1cmUgYSBjYW5kaWRhdGUgY2FuIGJlIHN1cHByZXNzZWRcbiAgICAvLyBieSBhIHNlbGVjdGVkIGJveCBubyBtb3JlIHRoYW4gb25jZS4gQWxzbywgaWYgdGhlIG92ZXJsYXAgZXhjZWVkc1xuICAgIC8vIGlvdVRocmVzaG9sZCwgd2Ugc2ltcGx5IGlnbm9yZSB0aGUgY2FuZGlkYXRlLlxuICAgIGxldCBpZ25vcmVDYW5kaWRhdGUgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBqID0gc2VsZWN0ZWRJbmRpY2VzLmxlbmd0aCAtIDE7IGogPj0gc3VwcHJlc3NCZWdpbkluZGV4OyAtLWopIHtcbiAgICAgIGNvbnN0IGlvdSA9IGludGVyc2VjdGlvbk92ZXJVbmlvbihib3hlcywgYm94SW5kZXgsIHNlbGVjdGVkSW5kaWNlc1tqXSk7XG5cbiAgICAgIGlmIChpb3UgPj0gaW91VGhyZXNob2xkKSB7XG4gICAgICAgIGlnbm9yZUNhbmRpZGF0ZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYW5kaWRhdGUuc2NvcmUgPVxuICAgICAgICAgIGNhbmRpZGF0ZS5zY29yZSAqIHN1cHByZXNzV2VpZ2h0KGlvdVRocmVzaG9sZCwgc2NhbGUsIGlvdSk7XG5cbiAgICAgIGlmIChjYW5kaWRhdGUuc2NvcmUgPD0gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgaWYgYGNhbmRpZGF0ZS5zY29yZWAgaGFzIG5vdCBkcm9wcGVkIGJlbG93XG4gICAgLy8gYHNjb3JlVGhyZXNob2xkYCwgdGhlbiB3ZSBrbm93IHRoYXQgd2Ugd2VudCB0aHJvdWdoIGFsbCBvZiB0aGVcbiAgICAvLyBwcmV2aW91cyBzZWxlY3Rpb25zIGFuZCBjYW4gc2FmZWx5IHVwZGF0ZSBgc3VwcHJlc3NCZWdpbkluZGV4YCB0byB0aGVcbiAgICAvLyBlbmQgb2YgdGhlIHNlbGVjdGVkIGFycmF5LiBUaGVuIHdlIGNhbiByZS1pbnNlcnQgdGhlIGNhbmRpZGF0ZSB3aXRoXG4gICAgLy8gdGhlIHVwZGF0ZWQgc2NvcmUgYW5kIHN1cHByZXNzQmVnaW5JbmRleCBiYWNrIGluIHRoZSBjYW5kaWRhdGUgbGlzdC5cbiAgICAvLyBJZiBvbiB0aGUgb3RoZXIgaGFuZCwgYGNhbmRpZGF0ZS5zY29yZWAgaGFzIGRyb3BwZWQgYmVsb3cgdGhlIHNjb3JlXG4gICAgLy8gdGhyZXNob2xkLCB3ZSB3aWxsIG5vdCBhZGQgaXQgYmFjayB0byB0aGUgY2FuZGlkYXRlcyBsaXN0LlxuICAgIGNhbmRpZGF0ZS5zdXBwcmVzc0JlZ2luSW5kZXggPSBzZWxlY3RlZEluZGljZXMubGVuZ3RoO1xuXG4gICAgaWYgKCFpZ25vcmVDYW5kaWRhdGUpIHtcbiAgICAgIC8vIENhbmRpZGF0ZSBoYXMgcGFzc2VkIGFsbCB0aGUgdGVzdHMsIGFuZCBpcyBub3Qgc3VwcHJlc3NlZCwgc29cbiAgICAgIC8vIHNlbGVjdCB0aGUgY2FuZGlkYXRlLlxuICAgICAgaWYgKGNhbmRpZGF0ZS5zY29yZSA9PT0gb3JpZ2luYWxTY29yZSkge1xuICAgICAgICBzZWxlY3RlZEluZGljZXMucHVzaChib3hJbmRleCk7XG4gICAgICAgIHNlbGVjdGVkU2NvcmVzLnB1c2goY2FuZGlkYXRlLnNjb3JlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlLnNjb3JlID4gc2NvcmVUaHJlc2hvbGQpIHtcbiAgICAgICAgLy8gQ2FuZGlkYXRlJ3Mgc2NvcmUgaXMgc3VwcHJlc3NlZCBidXQgaXMgc3RpbGwgaGlnaCBlbm91Z2ggdG8gYmVcbiAgICAgICAgLy8gY29uc2lkZXJlZCwgc28gYWRkIGJhY2sgdG8gdGhlIGNhbmRpZGF0ZXMgbGlzdC5cbiAgICAgICAgYmluYXJ5SW5zZXJ0KGNhbmRpZGF0ZXMsIGNhbmRpZGF0ZSwgYXNjZW5kaW5nQ29tcGFyYXRvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm9uTWF4U3VwcHJlc3Npb25WNCBmZWF0dXJlOiBwYWRkaW5nIG91dHB1dCB0byBtYXhPdXRwdXRTaXplLlxuICBjb25zdCB2YWxpZE91dHB1dHMgPSBzZWxlY3RlZEluZGljZXMubGVuZ3RoO1xuICBjb25zdCBlbGVtc1RvUGFkID0gbWF4T3V0cHV0U2l6ZSAtIHZhbGlkT3V0cHV0cztcblxuICBpZiAocGFkVG9NYXhPdXRwdXRTaXplICYmIGVsZW1zVG9QYWQgPiAwKSB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzLnB1c2goLi4ubmV3IEFycmF5KGVsZW1zVG9QYWQpLmZpbGwoMCkpO1xuICAgIHNlbGVjdGVkU2NvcmVzLnB1c2goLi4ubmV3IEFycmF5KGVsZW1zVG9QYWQpLmZpbGwoMC4wKSk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IE5vbk1heFN1cHByZXNzaW9uUmVzdWx0ID0ge3NlbGVjdGVkSW5kaWNlc307XG5cbiAgaWYgKHJldHVyblNjb3Jlc1RlbnNvcikge1xuICAgIHJlc3VsdFsnc2VsZWN0ZWRTY29yZXMnXSA9IHNlbGVjdGVkU2NvcmVzO1xuICB9XG5cbiAgaWYgKHJldHVyblZhbGlkT3V0cHV0cykge1xuICAgIHJlc3VsdFsndmFsaWRPdXRwdXRzJ10gPSB2YWxpZE91dHB1dHM7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3Rpb25PdmVyVW5pb24oYm94ZXM6IFR5cGVkQXJyYXksIGk6IG51bWJlciwgajogbnVtYmVyKSB7XG4gIGNvbnN0IGlDb29yZCA9IGJveGVzLnN1YmFycmF5KGkgKiA0LCBpICogNCArIDQpO1xuICBjb25zdCBqQ29vcmQgPSBib3hlcy5zdWJhcnJheShqICogNCwgaiAqIDQgKyA0KTtcbiAgY29uc3QgeW1pbkkgPSBNYXRoLm1pbihpQ29vcmRbMF0sIGlDb29yZFsyXSk7XG4gIGNvbnN0IHhtaW5JID0gTWF0aC5taW4oaUNvb3JkWzFdLCBpQ29vcmRbM10pO1xuICBjb25zdCB5bWF4SSA9IE1hdGgubWF4KGlDb29yZFswXSwgaUNvb3JkWzJdKTtcbiAgY29uc3QgeG1heEkgPSBNYXRoLm1heChpQ29vcmRbMV0sIGlDb29yZFszXSk7XG4gIGNvbnN0IHltaW5KID0gTWF0aC5taW4oakNvb3JkWzBdLCBqQ29vcmRbMl0pO1xuICBjb25zdCB4bWluSiA9IE1hdGgubWluKGpDb29yZFsxXSwgakNvb3JkWzNdKTtcbiAgY29uc3QgeW1heEogPSBNYXRoLm1heChqQ29vcmRbMF0sIGpDb29yZFsyXSk7XG4gIGNvbnN0IHhtYXhKID0gTWF0aC5tYXgoakNvb3JkWzFdLCBqQ29vcmRbM10pO1xuICBjb25zdCBhcmVhSSA9ICh5bWF4SSAtIHltaW5JKSAqICh4bWF4SSAtIHhtaW5JKTtcbiAgY29uc3QgYXJlYUogPSAoeW1heEogLSB5bWluSikgKiAoeG1heEogLSB4bWluSik7XG4gIGlmIChhcmVhSSA8PSAwIHx8IGFyZWFKIDw9IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IGludGVyc2VjdGlvblltaW4gPSBNYXRoLm1heCh5bWluSSwgeW1pbkopO1xuICBjb25zdCBpbnRlcnNlY3Rpb25YbWluID0gTWF0aC5tYXgoeG1pbkksIHhtaW5KKTtcbiAgY29uc3QgaW50ZXJzZWN0aW9uWW1heCA9IE1hdGgubWluKHltYXhJLCB5bWF4Sik7XG4gIGNvbnN0IGludGVyc2VjdGlvblhtYXggPSBNYXRoLm1pbih4bWF4SSwgeG1heEopO1xuICBjb25zdCBpbnRlcnNlY3Rpb25BcmVhID0gTWF0aC5tYXgoaW50ZXJzZWN0aW9uWW1heCAtIGludGVyc2VjdGlvblltaW4sIDAuMCkgKlxuICAgICAgTWF0aC5tYXgoaW50ZXJzZWN0aW9uWG1heCAtIGludGVyc2VjdGlvblhtaW4sIDAuMCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gKGFyZWFJICsgYXJlYUogLSBpbnRlcnNlY3Rpb25BcmVhKTtcbn1cblxuLy8gQSBHYXVzc2lhbiBwZW5hbHR5IGZ1bmN0aW9uLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyB2YWx1ZXMgaW4gWzAsIDFdLlxuLy8gVGhlIHdlaWdodCBpcyBhIGZ1bmN0aW9uIG9mIHNpbWlsYXJpdHksIHRoZSBtb3JlIG92ZXJsYXAgdHdvIGJveGVzIGFyZSwgdGhlXG4vLyBzbWFsbGVyIHRoZSB3ZWlnaHQgaXMsIG1lYW5pbmcgaGlnaGx5IG92ZXJsYXBwaW5nIGJveGUgd2lsbCBiZSBzaWduaWZpY2FudGx5XG4vLyBwZW5hbGl6ZWQuIE9uIHRoZSBvdGhlciBoYW5kLCBhIG5vbi1vdmVybGFwcGluZyBib3ggd2lsbCBub3QgYmUgcGVuYWxpemVkLlxuZnVuY3Rpb24gc3VwcHJlc3NXZWlnaHQoaW91VGhyZXNob2xkOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGlvdTogbnVtYmVyKSB7XG4gIGNvbnN0IHdlaWdodCA9IE1hdGguZXhwKHNjYWxlICogaW91ICogaW91KTtcbiAgcmV0dXJuIGlvdSA8PSBpb3VUaHJlc2hvbGQgPyB3ZWlnaHQgOiAwLjA7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoYzE6IENhbmRpZGF0ZSwgYzI6IENhbmRpZGF0ZSkge1xuICAvLyBGb3Igb2JqZWN0cyB3aXRoIHNhbWUgc2NvcmVzLCB3ZSBtYWtlIHRoZSBvYmplY3Qgd2l0aCB0aGUgbGFyZ2VyIGluZGV4IGdvXG4gIC8vIGZpcnN0LiBJbiBhbiBhcnJheSB0aGF0IHBvcHMgZnJvbSB0aGUgZW5kLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCB3aXRoXG4gIC8vIHRoZSBzbWFsbGVyIGluZGV4IHdpbGwgYmUgcG9wcGVkIGZpcnN0LiBUaGlzIGVuc3VyZXMgdGhlIHNhbWUgb3V0cHV0IGFzXG4gIC8vIHRoZSBUZW5zb3JGbG93IHB5dGhvbiB2ZXJzaW9uLlxuICByZXR1cm4gKGMxLnNjb3JlIC0gYzIuc2NvcmUpIHx8XG4gICAgICAoKGMxLnNjb3JlID09PSBjMi5zY29yZSkgJiYgKGMyLmJveEluZGV4IC0gYzEuYm94SW5kZXgpKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV3Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { tensor1d } from '../tensor1d';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This is the async version of `nonMaxSuppression`\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @return A 1D tensor with the selected box indices.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const inputs = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold);\n maxOutputSize = inputs.maxOutputSize;\n iouThreshold = inputs.iouThreshold;\n scoreThreshold = inputs.scoreThreshold;\n const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n const boxesVals = boxesAndScores[0];\n const scoresVals = boxesAndScores[1];\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return tensor1d(selectedIndices, 'int32');\n}\nexport const nonMaxSuppressionAsync = nonMaxSuppressionAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9hc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFaEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQ2xDLEtBQTBCLEVBQUUsTUFBMkIsRUFDdkQsYUFBcUIsRUFBRSxZQUFZLEdBQUcsR0FBRyxFQUN6QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQjtJQUMzQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFFNUUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNsRSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUV2QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJDLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUMsR0FBRyx1QkFBdUIsQ0FDN0MsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBRUQsT0FBTyxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblYzSW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge3RlbnNvcjFkfSBmcm9tICcuLi90ZW5zb3IxZCc7XG5cbi8qKlxuICogUGVyZm9ybXMgbm9uIG1heGltdW0gc3VwcHJlc3Npb24gb2YgYm91bmRpbmcgYm94ZXMgYmFzZWQgb25cbiAqIGlvdSAoaW50ZXJzZWN0aW9uIG92ZXIgdW5pb24pLlxuICpcbiAqIFRoaXMgaXMgdGhlIGFzeW5jIHZlcnNpb24gb2YgYG5vbk1heFN1cHByZXNzaW9uYFxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEByZXR1cm4gQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5hc3luYyBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvbkFzeW5jXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTogUHJvbWlzZTxUZW5zb3IxRD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBpbnB1dHMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQpO1xuICBtYXhPdXRwdXRTaXplID0gaW5wdXRzLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IGlucHV0cy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gaW5wdXRzLnNjb3JlVGhyZXNob2xkO1xuXG4gIGNvbnN0IGJveGVzQW5kU2NvcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG4gIGNvbnN0IGJveGVzVmFscyA9IGJveGVzQW5kU2NvcmVzWzBdO1xuICBjb25zdCBzY29yZXNWYWxzID0gYm94ZXNBbmRTY29yZXNbMV07XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSAgaGVyZSByYXRoZXJcbiAgLy8gdGhhbiBhIGtlcm5lbCBiZWNhdXNlIGFsbCBrZXJuZWxzIGFyZSBzeW5jaHJvbm91cyAoYW5kIHRodXMgY2Fubm90IGF3YWl0XG4gIC8vIC5kYXRhKCkpLlxuICBjb25zdCB7c2VsZWN0ZWRJbmRpY2VzfSA9IG5vbk1heFN1cHByZXNzaW9uVjNJbXBsKFxuICAgICAgYm94ZXNWYWxzLCBzY29yZXNWYWxzLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkKTtcbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25Bc3luYyA9IG5vbk1heFN1cHByZXNzaW9uQXN5bmNfO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV5 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This op also supports a Soft-NMS mode (cf.\n * Bodla et al, https://arxiv.org/abs/1704.04503) where boxes reduce the score\n * of other overlapping boxes, therefore favoring different regions of the image\n * with high scores. To enable this Soft-NMS mode, set the `softNmsSigma`\n * parameter to be larger than 0.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param softNmsSigma A float representing the sigma parameter for Soft NMS.\n * When sigma is 0, it falls back to nonMaxSuppression.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - selectedScores: A 1D tensor with the corresponding scores for each\n * selected box.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppressionWithScore_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0.0) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n maxOutputSize = params.maxOutputSize;\n iouThreshold = params.iouThreshold;\n scoreThreshold = params.scoreThreshold;\n softNmsSigma = params.softNmsSigma;\n const inputs = { boxes: $boxes, scores: $scores };\n const attrs = { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(NonMaxSuppressionV5, inputs, attrs);\n return { selectedIndices: result[0], selectedScores: result[1] };\n}\nexport const nonMaxSuppressionWithScore = /* @__PURE__ */ op({ nonMaxSuppressionWithScore_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLG1CQUFtQixFQUFzRCxNQUFNLG9CQUFvQixDQUFDO0FBSTVHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsU0FBUywyQkFBMkIsQ0FDaEMsS0FBMEIsRUFBRSxNQUEyQixFQUN2RCxhQUFxQixFQUFFLFlBQVksR0FBRyxHQUFHLEVBQ3pDLGNBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQ3pDLFlBQVksR0FBRyxHQUFHO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUV2RSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFDNUQsWUFBWSxDQUFDLENBQUM7SUFDbEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDckMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbkMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdkMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFFbkMsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQ1AsRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUMsQ0FBQztJQUVoRSwwREFBMEQ7SUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDWixtQkFBbUIsRUFBRSxNQUFtQyxFQUN4RCxLQUFnQyxDQUFhLENBQUM7SUFFakUsT0FBTyxFQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsMkJBQTJCLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7Tm9uTWF4U3VwcHJlc3Npb25WNSwgTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzLCBOb25NYXhTdXBwcmVzc2lvblY1SW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7bm9uTWF4U3VwcFNhbml0eUNoZWNrfSBmcm9tICcuLi9ub25tYXhfdXRpbCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBUaGlzIG9wIGFsc28gc3VwcG9ydHMgYSBTb2Z0LU5NUyBtb2RlIChjZi5cbiAqIEJvZGxhIGV0IGFsLCBodHRwczovL2FyeGl2Lm9yZy9hYnMvMTcwNC4wNDUwMykgd2hlcmUgYm94ZXMgcmVkdWNlIHRoZSBzY29yZVxuICogb2Ygb3RoZXIgb3ZlcmxhcHBpbmcgYm94ZXMsIHRoZXJlZm9yZSBmYXZvcmluZyBkaWZmZXJlbnQgcmVnaW9ucyBvZiB0aGUgaW1hZ2VcbiAqIHdpdGggaGlnaCBzY29yZXMuIFRvIGVuYWJsZSB0aGlzIFNvZnQtTk1TIG1vZGUsIHNldCB0aGUgYHNvZnRObXNTaWdtYWBcbiAqIHBhcmFtZXRlciB0byBiZSBsYXJnZXIgdGhhbiAwLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBzb2Z0Tm1zU2lnbWEgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHNpZ21hIHBhcmFtZXRlciBmb3IgU29mdCBOTVMuXG4gKiAgICAgV2hlbiBzaWdtYSBpcyAwLCBpdCBmYWxscyBiYWNrIHRvIG5vbk1heFN1cHByZXNzaW9uLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSBzZWxlY3RlZFNjb3JlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzY29yZXMgZm9yIGVhY2hcbiAqICAgICAgIHNlbGVjdGVkIGJveC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHNvZnRObXNTaWdtYSA9IDAuMCk6IE5hbWVkVGVuc29yTWFwIHtcbiAgY29uc3QgJGJveGVzID0gY29udmVydFRvVGVuc29yKGJveGVzLCAnYm94ZXMnLCAnbm9uTWF4U3VwcHJlc3Npb24nKTtcbiAgY29uc3QgJHNjb3JlcyA9IGNvbnZlcnRUb1RlbnNvcihzY29yZXMsICdzY29yZXMnLCAnbm9uTWF4U3VwcHJlc3Npb24nKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBzb2Z0Tm1zU2lnbWEpO1xuICBtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gcGFyYW1zLnNjb3JlVGhyZXNob2xkO1xuICBzb2Z0Tm1zU2lnbWEgPSBwYXJhbXMuc29mdE5tc1NpZ21hO1xuXG4gIGNvbnN0IGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WNUlucHV0cyA9IHtib3hlczogJGJveGVzLCBzY29yZXM6ICRzY29yZXN9O1xuICBjb25zdCBhdHRyczogTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzID1cbiAgICAgIHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLCBzb2Z0Tm1zU2lnbWF9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzdWx0ID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgICAgIE5vbk1heFN1cHByZXNzaW9uVjUsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFRlbnNvcltdO1xuXG4gIHJldHVybiB7c2VsZWN0ZWRJbmRpY2VzOiByZXN1bHRbMF0sIHNlbGVjdGVkU2NvcmVzOiByZXN1bHRbMV19O1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25XaXRoU2NvcmUgPSAvKiBAX19QVVJFX18gKi8gb3Aoe25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV5Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { tensor1d } from '../tensor1d';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union).\n *\n * This op also supports a Soft-NMS mode (cf.\n * Bodla et al, https://arxiv.org/abs/1704.04503) where boxes reduce the score\n * of other overlapping boxes, therefore favoring different regions of the image\n * with high scores. To enable this Soft-NMS mode, set the `softNmsSigma`\n * parameter to be larger than 0.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param softNmsSigma A float representing the sigma parameter for Soft NMS.\n * When sigma is 0, it falls back to nonMaxSuppression.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - selectedScores: A 1D tensor with the corresponding scores for each\n * selected box.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionWithScoreAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, softNmsSigma = 0.0) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n maxOutputSize = params.maxOutputSize;\n iouThreshold = params.iouThreshold;\n scoreThreshold = params.scoreThreshold;\n softNmsSigma = params.softNmsSigma;\n const boxesAndScores = await Promise.all([$boxes.data(), $scores.data()]);\n const boxesVals = boxesAndScores[0];\n const scoresVals = boxesAndScores[1];\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return {\n selectedIndices: tensor1d(selectedIndices, 'int32'),\n selectedScores: tensor1d(selectedScores)\n };\n}\nexport const nonMaxSuppressionWithScoreAsync = nonMaxSuppressionWithScoreAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBR2hGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsS0FBSyxVQUFVLGdDQUFnQyxDQUMzQyxLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFDekMsWUFBWSxHQUFHLEdBQUc7SUFDcEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUN6RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUM1RCxZQUFZLENBQUMsQ0FBQztJQUNsQixhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN2QyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUVuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJDLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLEdBQUcsdUJBQXVCLENBQzdELFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQ2xFLFlBQVksQ0FBQyxDQUFDO0lBRWxCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtRQUNwQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEI7SUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBRUQsT0FBTztRQUNMLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztRQUNuRCxjQUFjLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY1SW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHt0ZW5zb3IxZH0gZnJvbSAnLi4vdGVuc29yMWQnO1xuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHBlcmZvcm1zIG5vbiBtYXhpbXVtIHN1cHByZXNzaW9uIG9mIGJvdW5kaW5nIGJveGVzIGJhc2VkIG9uXG4gKiBpb3UgKGludGVyc2VjdGlvbiBvdmVyIHVuaW9uKS5cbiAqXG4gKiBUaGlzIG9wIGFsc28gc3VwcG9ydHMgYSBTb2Z0LU5NUyBtb2RlIChjZi5cbiAqIEJvZGxhIGV0IGFsLCBodHRwczovL2FyeGl2Lm9yZy9hYnMvMTcwNC4wNDUwMykgd2hlcmUgYm94ZXMgcmVkdWNlIHRoZSBzY29yZVxuICogb2Ygb3RoZXIgb3ZlcmxhcHBpbmcgYm94ZXMsIHRoZXJlZm9yZSBmYXZvcmluZyBkaWZmZXJlbnQgcmVnaW9ucyBvZiB0aGUgaW1hZ2VcbiAqIHdpdGggaGlnaCBzY29yZXMuIFRvIGVuYWJsZSB0aGlzIFNvZnQtTk1TIG1vZGUsIHNldCB0aGUgYHNvZnRObXNTaWdtYWBcbiAqIHBhcmFtZXRlciB0byBiZSBsYXJnZXIgdGhhbiAwLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBzb2Z0Tm1zU2lnbWEgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHNpZ21hIHBhcmFtZXRlciBmb3IgU29mdCBOTVMuXG4gKiAgICAgV2hlbiBzaWdtYSBpcyAwLCBpdCBmYWxscyBiYWNrIHRvIG5vbk1heFN1cHByZXNzaW9uLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSBzZWxlY3RlZFNjb3JlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzY29yZXMgZm9yIGVhY2hcbiAqICAgICAgIHNlbGVjdGVkIGJveC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmNfKFxuICAgIGJveGVzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCBzY29yZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLCBpb3VUaHJlc2hvbGQgPSAwLjUsXG4gICAgc2NvcmVUaHJlc2hvbGQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksXG4gICAgc29mdE5tc1NpZ21hID0gMC4wKTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBzb2Z0Tm1zU2lnbWEpO1xuICBtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIHNjb3JlVGhyZXNob2xkID0gcGFyYW1zLnNjb3JlVGhyZXNob2xkO1xuICBzb2Z0Tm1zU2lnbWEgPSBwYXJhbXMuc29mdE5tc1NpZ21hO1xuXG4gIGNvbnN0IGJveGVzQW5kU2NvcmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG4gIGNvbnN0IGJveGVzVmFscyA9IGJveGVzQW5kU2NvcmVzWzBdO1xuICBjb25zdCBzY29yZXNWYWxzID0gYm94ZXNBbmRTY29yZXNbMV07XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSAgaGVyZSByYXRoZXJcbiAgLy8gdGhhbiBhIGtlcm5lbCBiZWNhdXNlIGFsbCBrZXJuZWxzIGFyZSBzeW5jaHJvbm91cyAoYW5kIHRodXMgY2Fubm90IGF3YWl0XG4gIC8vIC5kYXRhKCkpLlxuICBjb25zdCB7c2VsZWN0ZWRJbmRpY2VzLCBzZWxlY3RlZFNjb3Jlc30gPSBub25NYXhTdXBwcmVzc2lvblY1SW1wbChcbiAgICAgIGJveGVzVmFscywgc2NvcmVzVmFscywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIHNvZnRObXNTaWdtYSk7XG5cbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzOiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpLFxuICAgIHNlbGVjdGVkU2NvcmVzOiB0ZW5zb3IxZChzZWxlY3RlZFNjb3JlcylcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmMgPSBub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { NonMaxSuppressionV4 } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { op } from '../operation';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union), with an option to pad results.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param padToMaxOutputSize Defaults to false. If true, size of output\n * `selectedIndices` is padded to maxOutputSize.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - validOutputs: A scalar denoting how many elements in `selectedIndices`\n * are valid. Valid elements occur first, then padding.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction nonMaxSuppressionPadded_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppression');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppression');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null /* softNmsSigma */);\n const $maxOutputSize = params.maxOutputSize;\n const $iouThreshold = params.iouThreshold;\n const $scoreThreshold = params.scoreThreshold;\n const inputs = { boxes: $boxes, scores: $scores };\n const attrs = {\n maxOutputSize: $maxOutputSize,\n iouThreshold: $iouThreshold,\n scoreThreshold: $scoreThreshold,\n padToMaxOutputSize\n };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const result = ENGINE.runKernel(NonMaxSuppressionV4, inputs, attrs);\n return { selectedIndices: result[0], validOutputs: result[1] };\n}\nexport const nonMaxSuppressionPadded = /* @__PURE__ */ op({ nonMaxSuppressionPadded_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9ub25fbWF4X3N1cHByZXNzaW9uX3BhZGRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxtQkFBbUIsRUFBc0QsTUFBTSxvQkFBb0IsQ0FBQztBQUk1RyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILFNBQVMsd0JBQXdCLENBQzdCLEtBQTBCLEVBQUUsTUFBMkIsRUFDdkQsYUFBcUIsRUFBRSxZQUFZLEdBQUcsR0FBRyxFQUN6QyxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUN6QyxrQkFBa0IsR0FBRyxLQUFLO0lBQzVCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUV2RSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FDaEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0IsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQThCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0UsTUFBTSxLQUFLLEdBQTZCO1FBQ3RDLGFBQWEsRUFBRSxjQUFjO1FBQzdCLFlBQVksRUFBRSxhQUFhO1FBQzNCLGNBQWMsRUFBRSxlQUFlO1FBQy9CLGtCQUFrQjtLQUNuQixDQUFDO0lBRUYsMERBQTBEO0lBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1osbUJBQW1CLEVBQUUsTUFBbUMsRUFDeEQsS0FBZ0MsQ0FBYSxDQUFDO0lBRWpFLE9BQU8sRUFBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLHdCQUF3QixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge05vbk1heFN1cHByZXNzaW9uVjQsIE5vbk1heFN1cHByZXNzaW9uVjRBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WNElucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBwZXJmb3JtcyBub24gbWF4aW11bSBzdXBwcmVzc2lvbiBvZiBib3VuZGluZyBib3hlcyBiYXNlZCBvblxuICogaW91IChpbnRlcnNlY3Rpb24gb3ZlciB1bmlvbiksIHdpdGggYW4gb3B0aW9uIHRvIHBhZCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSBib3hlcyBhIDJkIHRlbnNvciBvZiBzaGFwZSBgW251bUJveGVzLCA0XWAuIEVhY2ggZW50cnkgaXNcbiAqICAgICBgW3kxLCB4MSwgeTIsIHgyXWAsIHdoZXJlIGAoeTEsIHgxKWAgYW5kIGAoeTIsIHgyKWAgYXJlIHRoZSBjb3JuZXJzIG9mXG4gKiAgICAgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSBzY29yZXMgYSAxZCB0ZW5zb3IgcHJvdmlkaW5nIHRoZSBib3ggc2NvcmVzIG9mIHNoYXBlIGBbbnVtQm94ZXNdYC5cbiAqIEBwYXJhbSBtYXhPdXRwdXRTaXplIFRoZSBtYXhpbXVtIG51bWJlciBvZiBib3hlcyB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSBpb3VUaHJlc2hvbGQgQSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIHRocmVzaG9sZCBmb3IgZGVjaWRpbmcgd2hldGhlclxuICogICAgIGJveGVzIG92ZXJsYXAgdG9vIG11Y2ggd2l0aCByZXNwZWN0IHRvIElPVS4gTXVzdCBiZSBiZXR3ZWVuIFswLCAxXS5cbiAqICAgICBEZWZhdWx0cyB0byAwLjUgKDUwJSBib3ggb3ZlcmxhcCkuXG4gKiBAcGFyYW0gc2NvcmVUaHJlc2hvbGQgQSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZW4gdG8gcmVtb3ZlIGJveGVzIGJhc2VkXG4gKiAgICAgb24gc2NvcmUuIERlZmF1bHRzIHRvIC1pbmYsIHdoaWNoIG1lYW5zIGFueSBzY29yZSBpcyBhY2NlcHRlZC5cbiAqIEBwYXJhbSBwYWRUb01heE91dHB1dFNpemUgRGVmYXVsdHMgdG8gZmFsc2UuIElmIHRydWUsIHNpemUgb2Ygb3V0cHV0XG4gKiAgICAgYHNlbGVjdGVkSW5kaWNlc2AgaXMgcGFkZGVkIHRvIG1heE91dHB1dFNpemUuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gc2VsZWN0ZWRJbmRpY2VzOiBBIDFEIHRlbnNvciB3aXRoIHRoZSBzZWxlY3RlZCBib3ggaW5kaWNlcy5cbiAqICAgICAtIHZhbGlkT3V0cHV0czogQSBzY2FsYXIgZGVub3RpbmcgaG93IG1hbnkgZWxlbWVudHMgaW4gYHNlbGVjdGVkSW5kaWNlc2BcbiAqICAgICAgIGFyZSB2YWxpZC4gVmFsaWQgZWxlbWVudHMgb2NjdXIgZmlyc3QsIHRoZW4gcGFkZGluZy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdJbWFnZXMnLCBuYW1lc3BhY2U6ICdpbWFnZSd9XG4gKi9cbmZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uUGFkZGVkXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSA9IGZhbHNlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbicpO1xuICBjb25zdCAkc2NvcmVzID0gY29udmVydFRvVGVuc29yKHNjb3JlcywgJ3Njb3JlcycsICdub25NYXhTdXBwcmVzc2lvbicpO1xuXG4gIGNvbnN0IHBhcmFtcyA9IG5vbk1heFN1cHBTYW5pdHlDaGVjayhcbiAgICAgICRib3hlcywgJHNjb3JlcywgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCxcbiAgICAgIG51bGwgLyogc29mdE5tc1NpZ21hICovKTtcbiAgY29uc3QgJG1heE91dHB1dFNpemUgPSBwYXJhbXMubWF4T3V0cHV0U2l6ZTtcbiAgY29uc3QgJGlvdVRocmVzaG9sZCA9IHBhcmFtcy5pb3VUaHJlc2hvbGQ7XG4gIGNvbnN0ICRzY29yZVRocmVzaG9sZCA9IHBhcmFtcy5zY29yZVRocmVzaG9sZDtcblxuICBjb25zdCBpbnB1dHM6IE5vbk1heFN1cHByZXNzaW9uVjRJbnB1dHMgPSB7Ym94ZXM6ICRib3hlcywgc2NvcmVzOiAkc2NvcmVzfTtcbiAgY29uc3QgYXR0cnM6IE5vbk1heFN1cHByZXNzaW9uVjRBdHRycyA9IHtcbiAgICBtYXhPdXRwdXRTaXplOiAkbWF4T3V0cHV0U2l6ZSxcbiAgICBpb3VUaHJlc2hvbGQ6ICRpb3VUaHJlc2hvbGQsXG4gICAgc2NvcmVUaHJlc2hvbGQ6ICRzY29yZVRocmVzaG9sZCxcbiAgICBwYWRUb01heE91dHB1dFNpemVcbiAgfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlc3VsdCA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICAgICBOb25NYXhTdXBwcmVzc2lvblY0LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUZW5zb3JbXTtcblxuICByZXR1cm4ge3NlbGVjdGVkSW5kaWNlczogcmVzdWx0WzBdLCB2YWxpZE91dHB1dHM6IHJlc3VsdFsxXX07XG59XG5cbmV4cG9ydCBjb25zdCBub25NYXhTdXBwcmVzc2lvblBhZGRlZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7bm9uTWF4U3VwcHJlc3Npb25QYWRkZWRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nonMaxSuppressionV4Impl } from '../../backends/non_max_suppression_impl';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { nonMaxSuppSanityCheck } from '../nonmax_util';\nimport { scalar } from '../scalar';\nimport { tensor1d } from '../tensor1d';\n/**\n * Asynchronously performs non maximum suppression of bounding boxes based on\n * iou (intersection over union), with an option to pad results.\n *\n * @param boxes a 2d tensor of shape `[numBoxes, 4]`. Each entry is\n * `[y1, x1, y2, x2]`, where `(y1, x1)` and `(y2, x2)` are the corners of\n * the bounding box.\n * @param scores a 1d tensor providing the box scores of shape `[numBoxes]`.\n * @param maxOutputSize The maximum number of boxes to be selected.\n * @param iouThreshold A float representing the threshold for deciding whether\n * boxes overlap too much with respect to IOU. Must be between [0, 1].\n * Defaults to 0.5 (50% box overlap).\n * @param scoreThreshold A threshold for deciding when to remove boxes based\n * on score. Defaults to -inf, which means any score is accepted.\n * @param padToMaxOutputSize Defaults to false. If true, size of output\n * `selectedIndices` is padded to maxOutputSize.\n * @return A map with the following properties:\n * - selectedIndices: A 1D tensor with the selected box indices.\n * - validOutputs: A scalar denoting how many elements in `selectedIndices`\n * are valid. Valid elements occur first, then padding.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nasync function nonMaxSuppressionPaddedAsync_(boxes, scores, maxOutputSize, iouThreshold = 0.5, scoreThreshold = Number.NEGATIVE_INFINITY, padToMaxOutputSize = false) {\n const $boxes = convertToTensor(boxes, 'boxes', 'nonMaxSuppressionAsync');\n const $scores = convertToTensor(scores, 'scores', 'nonMaxSuppressionAsync');\n const params = nonMaxSuppSanityCheck($boxes, $scores, maxOutputSize, iouThreshold, scoreThreshold, null /* softNmsSigma */);\n const $maxOutputSize = params.maxOutputSize;\n const $iouThreshold = params.iouThreshold;\n const $scoreThreshold = params.scoreThreshold;\n const [boxesVals, scoresVals] = await Promise.all([$boxes.data(), $scores.data()]);\n // We call a cpu based impl directly with the typedarray data here rather\n // than a kernel because all kernels are synchronous (and thus cannot await\n // .data()).\n const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, $maxOutputSize, $iouThreshold, $scoreThreshold, padToMaxOutputSize);\n if ($boxes !== boxes) {\n $boxes.dispose();\n }\n if ($scores !== scores) {\n $scores.dispose();\n }\n return {\n selectedIndices: tensor1d(selectedIndices, 'int32'),\n validOutputs: scalar(validOutputs, 'int32')\n };\n}\nexport const nonMaxSuppressionPaddedAsync = nonMaxSuppressionPaddedAsync_;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWRfYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9ub25fbWF4X3N1cHByZXNzaW9uX3BhZGRlZF9hc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsS0FBSyxVQUFVLDZCQUE2QixDQUN4QyxLQUEwQixFQUFFLE1BQTJCLEVBQ3ZELGFBQXFCLEVBQUUsWUFBWSxHQUFHLEdBQUcsRUFDekMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFDekMsa0JBQWtCLEdBQUcsS0FBSztJQUM1QixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFFNUUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUMxQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBRTlDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQ3pCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZELHlFQUF5RTtJQUN6RSwyRUFBMkU7SUFDM0UsWUFBWTtJQUNaLE1BQU0sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLEdBQUcsdUJBQXVCLENBQzNELFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQ3JFLGtCQUFrQixDQUFDLENBQUM7SUFFeEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQ3BCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNsQjtJQUNELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtRQUN0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbkI7SUFFRCxPQUFPO1FBQ0wsZUFBZSxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO1FBQ25ELFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY0SW1wbH0gZnJvbSAnLi4vLi4vYmFja2VuZHMvbm9uX21heF9zdXBwcmVzc2lvbl9pbXBsJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge25vbk1heFN1cHBTYW5pdHlDaGVja30gZnJvbSAnLi4vbm9ubWF4X3V0aWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3RlbnNvcjFkfSBmcm9tICcuLi90ZW5zb3IxZCc7XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcGVyZm9ybXMgbm9uIG1heGltdW0gc3VwcHJlc3Npb24gb2YgYm91bmRpbmcgYm94ZXMgYmFzZWQgb25cbiAqIGlvdSAoaW50ZXJzZWN0aW9uIG92ZXIgdW5pb24pLCB3aXRoIGFuIG9wdGlvbiB0byBwYWQgcmVzdWx0cy5cbiAqXG4gKiBAcGFyYW0gYm94ZXMgYSAyZCB0ZW5zb3Igb2Ygc2hhcGUgYFtudW1Cb3hlcywgNF1gLiBFYWNoIGVudHJ5IGlzXG4gKiAgICAgYFt5MSwgeDEsIHkyLCB4Ml1gLCB3aGVyZSBgKHkxLCB4MSlgIGFuZCBgKHkyLCB4MilgIGFyZSB0aGUgY29ybmVycyBvZlxuICogICAgIHRoZSBib3VuZGluZyBib3guXG4gKiBAcGFyYW0gc2NvcmVzIGEgMWQgdGVuc29yIHByb3ZpZGluZyB0aGUgYm94IHNjb3JlcyBvZiBzaGFwZSBgW251bUJveGVzXWAuXG4gKiBAcGFyYW0gbWF4T3V0cHV0U2l6ZSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gKiBAcGFyYW0gaW91VGhyZXNob2xkIEEgZmxvYXQgcmVwcmVzZW50aW5nIHRoZSB0aHJlc2hvbGQgZm9yIGRlY2lkaW5nIHdoZXRoZXJcbiAqICAgICBib3hlcyBvdmVybGFwIHRvbyBtdWNoIHdpdGggcmVzcGVjdCB0byBJT1UuIE11c3QgYmUgYmV0d2VlbiBbMCwgMV0uXG4gKiAgICAgRGVmYXVsdHMgdG8gMC41ICg1MCUgYm94IG92ZXJsYXApLlxuICogQHBhcmFtIHNjb3JlVGhyZXNob2xkIEEgdGhyZXNob2xkIGZvciBkZWNpZGluZyB3aGVuIHRvIHJlbW92ZSBib3hlcyBiYXNlZFxuICogICAgIG9uIHNjb3JlLiBEZWZhdWx0cyB0byAtaW5mLCB3aGljaCBtZWFucyBhbnkgc2NvcmUgaXMgYWNjZXB0ZWQuXG4gKiBAcGFyYW0gcGFkVG9NYXhPdXRwdXRTaXplIERlZmF1bHRzIHRvIGZhbHNlLiBJZiB0cnVlLCBzaXplIG9mIG91dHB1dFxuICogICAgIGBzZWxlY3RlZEluZGljZXNgIGlzIHBhZGRlZCB0byBtYXhPdXRwdXRTaXplLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIHNlbGVjdGVkSW5kaWNlczogQSAxRCB0ZW5zb3Igd2l0aCB0aGUgc2VsZWN0ZWQgYm94IGluZGljZXMuXG4gKiAgICAgLSB2YWxpZE91dHB1dHM6IEEgc2NhbGFyIGRlbm90aW5nIGhvdyBtYW55IGVsZW1lbnRzIGluIGBzZWxlY3RlZEluZGljZXNgXG4gKiAgICAgICBhcmUgdmFsaWQuIFZhbGlkIGVsZW1lbnRzIG9jY3VyIGZpcnN0LCB0aGVuIHBhZGRpbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5hc3luYyBmdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jXyhcbiAgICBib3hlczogVGVuc29yMkR8VGVuc29yTGlrZSwgc2NvcmVzOiBUZW5zb3IxRHxUZW5zb3JMaWtlLFxuICAgIG1heE91dHB1dFNpemU6IG51bWJlciwgaW91VGhyZXNob2xkID0gMC41LFxuICAgIHNjb3JlVGhyZXNob2xkID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFxuICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSA9IGZhbHNlKTogUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICBjb25zdCAkYm94ZXMgPSBjb252ZXJ0VG9UZW5zb3IoYm94ZXMsICdib3hlcycsICdub25NYXhTdXBwcmVzc2lvbkFzeW5jJyk7XG4gIGNvbnN0ICRzY29yZXMgPSBjb252ZXJ0VG9UZW5zb3Ioc2NvcmVzLCAnc2NvcmVzJywgJ25vbk1heFN1cHByZXNzaW9uQXN5bmMnKTtcblxuICBjb25zdCBwYXJhbXMgPSBub25NYXhTdXBwU2FuaXR5Q2hlY2soXG4gICAgICAkYm94ZXMsICRzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQsXG4gICAgICBudWxsIC8qIHNvZnRObXNTaWdtYSAqLyk7XG4gIGNvbnN0ICRtYXhPdXRwdXRTaXplID0gcGFyYW1zLm1heE91dHB1dFNpemU7XG4gIGNvbnN0ICRpb3VUaHJlc2hvbGQgPSBwYXJhbXMuaW91VGhyZXNob2xkO1xuICBjb25zdCAkc2NvcmVUaHJlc2hvbGQgPSBwYXJhbXMuc2NvcmVUaHJlc2hvbGQ7XG5cbiAgY29uc3QgW2JveGVzVmFscywgc2NvcmVzVmFsc10gPVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWyRib3hlcy5kYXRhKCksICRzY29yZXMuZGF0YSgpXSk7XG5cbiAgLy8gV2UgY2FsbCBhIGNwdSBiYXNlZCBpbXBsIGRpcmVjdGx5IHdpdGggdGhlIHR5cGVkYXJyYXkgZGF0YSBoZXJlIHJhdGhlclxuICAvLyB0aGFuIGEga2VybmVsIGJlY2F1c2UgYWxsIGtlcm5lbHMgYXJlIHN5bmNocm9ub3VzIChhbmQgdGh1cyBjYW5ub3QgYXdhaXRcbiAgLy8gLmRhdGEoKSkuXG4gIGNvbnN0IHtzZWxlY3RlZEluZGljZXMsIHZhbGlkT3V0cHV0c30gPSBub25NYXhTdXBwcmVzc2lvblY0SW1wbChcbiAgICAgIGJveGVzVmFscywgc2NvcmVzVmFscywgJG1heE91dHB1dFNpemUsICRpb3VUaHJlc2hvbGQsICRzY29yZVRocmVzaG9sZCxcbiAgICAgIHBhZFRvTWF4T3V0cHV0U2l6ZSk7XG5cbiAgaWYgKCRib3hlcyAhPT0gYm94ZXMpIHtcbiAgICAkYm94ZXMuZGlzcG9zZSgpO1xuICB9XG4gIGlmICgkc2NvcmVzICE9PSBzY29yZXMpIHtcbiAgICAkc2NvcmVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0ZWRJbmRpY2VzOiB0ZW5zb3IxZChzZWxlY3RlZEluZGljZXMsICdpbnQzMicpLFxuICAgIHZhbGlkT3V0cHV0czogc2NhbGFyKHZhbGlkT3V0cHV0cywgJ2ludDMyJylcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uUGFkZGVkQXN5bmMgPSBub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jXztcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { ResizeBilinear } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * Bilinear resize a single 3D image or a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n * images to. Each channel is resized individually.\n * @param alignCorners Defaults to `false`. If true, rescale\n * input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n * corners of images and resized images. If false, rescale by\n * `new_height / height`. Treat similarly the width dimension.\n * @param halfPixelCenters Defaults to `false`. Whether to assume pixel centers\n * are at 0.5, which would make the floating point coordinates of the top\n * left pixel 0.5, 0.5.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction resizeBilinear_(images, size, alignCorners = false, halfPixelCenters = false) {\n const $images = convertToTensor(images, 'images', 'resizeBilinear');\n util.assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got ` +\n `rank ${$images.rank}.`);\n util.assert(size.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ` +\n `${size}.`);\n util.assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeBilinear: If halfPixelCenters is true, ` +\n `alignCorners must be false.`);\n let batchImages = $images;\n let reshapedTo4D = false;\n if ($images.rank === 3) {\n reshapedTo4D = true;\n batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]);\n }\n const [] = size;\n const inputs = { images: batchImages };\n const attrs = { alignCorners, halfPixelCenters, size };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(ResizeBilinear, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const resizeBilinear = /* @__PURE__ */ op({ resizeBilinear_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX2JpbGluZWFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvcmVzaXplX2JpbGluZWFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBNEMsTUFBTSxvQkFBb0IsQ0FBQztBQUk3RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxlQUFlLENBQ3BCLE1BQW9CLEVBQUUsSUFBc0IsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUNsRSxnQkFBZ0IsR0FBRyxLQUFLO0lBQzFCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFcEUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMsMERBQTBEO1FBQzVELFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQUMsNERBQTREO1FBQzlELEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsTUFBTSxDQUNQLGdCQUFnQixLQUFLLEtBQUssSUFBSSxZQUFZLEtBQUssS0FBSyxFQUNwRCxHQUFHLEVBQUUsQ0FBQyx3REFBd0Q7UUFDMUQsNkJBQTZCLENBQUMsQ0FBQztJQUV2QyxJQUFJLFdBQVcsR0FBRyxPQUFtQixDQUFDO0lBQ3RDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsV0FBVyxHQUFHLE9BQU8sQ0FDakIsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RTtJQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztJQUVoQixNQUFNLE1BQU0sR0FBeUIsRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQXdCLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBQyxDQUFDO0lBRTFFLDBEQUEwRDtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNaLGNBQWMsRUFBRSxNQUFtQyxFQUNuRCxLQUFnQyxDQUFNLENBQUM7SUFFdkQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7UmVzaXplQmlsaW5lYXIsIFJlc2l6ZUJpbGluZWFyQXR0cnMsIFJlc2l6ZUJpbGluZWFySW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi8uLi91dGlsJztcblxuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi4vcmVzaGFwZSc7XG5cbi8qKlxuICogQmlsaW5lYXIgcmVzaXplIGEgc2luZ2xlIDNEIGltYWdlIG9yIGEgYmF0Y2ggb2YgM0QgaW1hZ2VzIHRvIGEgbmV3IHNoYXBlLlxuICpcbiAqIEBwYXJhbSBpbWFnZXMgVGhlIGltYWdlcywgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaGFwZSBgW25ld0hlaWdodCwgbmV3V2lkdGhdYCB0byByZXNpemUgdGhlXG4gKiAgICAgaW1hZ2VzIHRvLiBFYWNoIGNoYW5uZWwgaXMgcmVzaXplZCBpbmRpdmlkdWFsbHkuXG4gKiBAcGFyYW0gYWxpZ25Db3JuZXJzIERlZmF1bHRzIHRvIGBmYWxzZWAuIElmIHRydWUsIHJlc2NhbGVcbiAqICAgICBpbnB1dCBieSBgKG5ld19oZWlnaHQgLSAxKSAvIChoZWlnaHQgLSAxKWAsIHdoaWNoIGV4YWN0bHkgYWxpZ25zIHRoZSA0XG4gKiAgICAgY29ybmVycyBvZiBpbWFnZXMgYW5kIHJlc2l6ZWQgaW1hZ2VzLiBJZiBmYWxzZSwgcmVzY2FsZSBieVxuICogICAgIGBuZXdfaGVpZ2h0IC8gaGVpZ2h0YC4gVHJlYXQgc2ltaWxhcmx5IHRoZSB3aWR0aCBkaW1lbnNpb24uXG4gKiBAcGFyYW0gaGFsZlBpeGVsQ2VudGVycyBEZWZhdWx0cyB0byBgZmFsc2VgLiBXaGV0aGVyIHRvIGFzc3VtZSBwaXhlbCBjZW50ZXJzXG4gKiAgICAgYXJlIGF0IDAuNSwgd2hpY2ggd291bGQgbWFrZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcFxuICogICAgIGxlZnQgcGl4ZWwgMC41LCAwLjUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiByZXNpemVCaWxpbmVhcl88VCBleHRlbmRzIFRlbnNvcjNEfFRlbnNvcjREPihcbiAgICBpbWFnZXM6IFR8VGVuc29yTGlrZSwgc2l6ZTogW251bWJlciwgbnVtYmVyXSwgYWxpZ25Db3JuZXJzID0gZmFsc2UsXG4gICAgaGFsZlBpeGVsQ2VudGVycyA9IGZhbHNlKTogVCB7XG4gIGNvbnN0ICRpbWFnZXMgPSBjb252ZXJ0VG9UZW5zb3IoaW1hZ2VzLCAnaW1hZ2VzJywgJ3Jlc2l6ZUJpbGluZWFyJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2VzLnJhbmsgPT09IDMgfHwgJGltYWdlcy5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiB4IG11c3QgYmUgcmFuayAzIG9yIDQsIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHskaW1hZ2VzLnJhbmt9LmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIHNpemUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiBuZXcgc2hhcGUgbXVzdCAyRCwgYnV0IGdvdCBzaGFwZSBgICtcbiAgICAgICAgICBgJHtzaXplfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBoYWxmUGl4ZWxDZW50ZXJzID09PSBmYWxzZSB8fCBhbGlnbkNvcm5lcnMgPT09IGZhbHNlLFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZUJpbGluZWFyOiBJZiBoYWxmUGl4ZWxDZW50ZXJzIGlzIHRydWUsIGAgK1xuICAgICAgICAgIGBhbGlnbkNvcm5lcnMgbXVzdCBiZSBmYWxzZS5gKTtcblxuICBsZXQgYmF0Y2hJbWFnZXMgPSAkaW1hZ2VzIGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkaW1hZ2VzLnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGJhdGNoSW1hZ2VzID0gcmVzaGFwZShcbiAgICAgICAgJGltYWdlcywgWzEsICRpbWFnZXMuc2hhcGVbMF0sICRpbWFnZXMuc2hhcGVbMV0sICRpbWFnZXMuc2hhcGVbMl1dKTtcbiAgfVxuXG4gIGNvbnN0IFtdID0gc2l6ZTtcblxuICBjb25zdCBpbnB1dHM6IFJlc2l6ZUJpbGluZWFySW5wdXRzID0ge2ltYWdlczogYmF0Y2hJbWFnZXN9O1xuICBjb25zdCBhdHRyczogUmVzaXplQmlsaW5lYXJBdHRycyA9IHthbGlnbkNvcm5lcnMsIGhhbGZQaXhlbENlbnRlcnMsIHNpemV9O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgY29uc3QgcmVzID0gRU5HSU5FLnJ1bktlcm5lbChcbiAgICAgICAgICAgICAgICAgIFJlc2l6ZUJpbGluZWFyLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKSBhcyBUO1xuXG4gIGlmIChyZXNoYXBlZFRvNEQpIHtcbiAgICByZXR1cm4gcmVzaGFwZShyZXMsIFtyZXMuc2hhcGVbMV0sIHJlcy5zaGFwZVsyXSwgcmVzLnNoYXBlWzNdXSkgYXMgVDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplQmlsaW5lYXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Jlc2l6ZUJpbGluZWFyX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { ResizeNearestNeighbor } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\n/**\n * NearestNeighbor resize a batch of 3D images to a new shape.\n *\n * @param images The images, of rank 4 or rank 3, of shape\n * `[batch, height, width, inChannels]`. If rank 3, batch of 1 is assumed.\n * @param size The new shape `[newHeight, newWidth]` to resize the\n * images to. Each channel is resized individually.\n * @param alignCorners Defaults to False. If true, rescale\n * input by `(new_height - 1) / (height - 1)`, which exactly aligns the 4\n * corners of images and resized images. If false, rescale by\n * `new_height / height`. Treat similarly the width dimension.\n * @param halfPixelCenters Defaults to `false`. Whether to assume pixels are of\n * half the actual dimensions, and yield more accurate resizes. This flag\n * would also make the floating point coordinates of the top left pixel\n * 0.5, 0.5.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction resizeNearestNeighbor_(images, size, alignCorners = false, halfPixelCenters = false) {\n const $images = convertToTensor(images, 'images', 'resizeNearestNeighbor');\n util.assert($images.rank === 3 || $images.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got ` +\n `rank ${$images.rank}.`);\n util.assert(size.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ` +\n `${size}.`);\n util.assert($images.dtype === 'float32' || $images.dtype === 'int32', () => '`images` must have `int32` or `float32` as dtype');\n util.assert(halfPixelCenters === false || alignCorners === false, () => `Error in resizeNearestNeighbor: If halfPixelCenters is true, ` +\n `alignCorners must be false.`);\n let batchImages = $images;\n let reshapedTo4D = false;\n if ($images.rank === 3) {\n reshapedTo4D = true;\n batchImages = reshape($images, [1, $images.shape[0], $images.shape[1], $images.shape[2]]);\n }\n const [] = size;\n const inputs = { images: batchImages };\n const attrs = { alignCorners, halfPixelCenters, size };\n // tslint:disable-next-line: no-unnecessary-type-assertion\n const res = ENGINE.runKernel(ResizeNearestNeighbor, inputs, attrs);\n if (reshapedTo4D) {\n return reshape(res, [res.shape[1], res.shape[2], res.shape[3]]);\n }\n return res;\n}\nexport const resizeNearestNeighbor = /* @__PURE__ */ op({ resizeNearestNeighbor_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplX25lYXJlc3RfbmVpZ2hib3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9pbWFnZS9yZXNpemVfbmVhcmVzdF9uZWlnaGJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxxQkFBcUIsRUFBMEQsTUFBTSxvQkFBb0IsQ0FBQztBQUlsSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQVMsc0JBQXNCLENBQzNCLE1BQW9CLEVBQUUsSUFBc0IsRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUNsRSxnQkFBZ0IsR0FBRyxLQUFLO0lBQzFCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFM0UsSUFBSSxDQUFDLE1BQU0sQ0FDUCxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDeEMsR0FBRyxFQUFFLENBQUMsaUVBQWlFO1FBQ25FLFFBQVEsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakIsR0FBRyxFQUFFLENBQ0QsbUVBQW1FO1FBQ25FLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUMsTUFBTSxDQUNQLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUN4RCxHQUFHLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxNQUFNLENBQ1AsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQ3BELEdBQUcsRUFBRSxDQUFDLCtEQUErRDtRQUNqRSw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksV0FBVyxHQUFHLE9BQW1CLENBQUM7SUFDdEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDdEIsWUFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixXQUFXLEdBQUcsT0FBTyxDQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pFO0lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRWhCLE1BQU0sTUFBTSxHQUFnQyxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUNsRSxNQUFNLEtBQUssR0FDc0IsRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFFeEUsMERBQTBEO0lBQzFELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQ1oscUJBQXFCLEVBQUUsTUFBbUMsRUFDMUQsS0FBZ0MsQ0FBTSxDQUFDO0lBRXZELElBQUksWUFBWSxFQUFFO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sQ0FBQztLQUN0RTtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxzQkFBc0IsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtSZXNpemVOZWFyZXN0TmVpZ2hib3IsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckF0dHJzLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge05hbWVkQXR0ck1hcH0gZnJvbSAnLi4vLi4va2VybmVsX3JlZ2lzdHJ5JztcbmltcG9ydCB7VGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vLi4vdGVuc29yX3R5cGVzJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcblxuLyoqXG4gKiBOZWFyZXN0TmVpZ2hib3IgcmVzaXplIGEgYmF0Y2ggb2YgM0QgaW1hZ2VzIHRvIGEgbmV3IHNoYXBlLlxuICpcbiAqIEBwYXJhbSBpbWFnZXMgVGhlIGltYWdlcywgb2YgcmFuayA0IG9yIHJhbmsgMywgb2Ygc2hhcGVcbiAqICAgICBgW2JhdGNoLCBoZWlnaHQsIHdpZHRoLCBpbkNoYW5uZWxzXWAuIElmIHJhbmsgMywgYmF0Y2ggb2YgMSBpcyBhc3N1bWVkLlxuICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaGFwZSBgW25ld0hlaWdodCwgbmV3V2lkdGhdYCB0byByZXNpemUgdGhlXG4gKiAgICAgaW1hZ2VzIHRvLiBFYWNoIGNoYW5uZWwgaXMgcmVzaXplZCBpbmRpdmlkdWFsbHkuXG4gKiBAcGFyYW0gYWxpZ25Db3JuZXJzIERlZmF1bHRzIHRvIEZhbHNlLiBJZiB0cnVlLCByZXNjYWxlXG4gKiAgICAgaW5wdXQgYnkgYChuZXdfaGVpZ2h0IC0gMSkgLyAoaGVpZ2h0IC0gMSlgLCB3aGljaCBleGFjdGx5IGFsaWducyB0aGUgNFxuICogICAgIGNvcm5lcnMgb2YgaW1hZ2VzIGFuZCByZXNpemVkIGltYWdlcy4gSWYgZmFsc2UsIHJlc2NhbGUgYnlcbiAqICAgICBgbmV3X2hlaWdodCAvIGhlaWdodGAuIFRyZWF0IHNpbWlsYXJseSB0aGUgd2lkdGggZGltZW5zaW9uLlxuICogQHBhcmFtIGhhbGZQaXhlbENlbnRlcnMgRGVmYXVsdHMgdG8gYGZhbHNlYC4gV2hldGhlciB0byBhc3N1bWUgcGl4ZWxzIGFyZSBvZlxuICogICAgICBoYWxmIHRoZSBhY3R1YWwgZGltZW5zaW9ucywgYW5kIHlpZWxkIG1vcmUgYWNjdXJhdGUgcmVzaXplcy4gVGhpcyBmbGFnXG4gKiAgICAgIHdvdWxkIGFsc28gbWFrZSB0aGUgZmxvYXRpbmcgcG9pbnQgY29vcmRpbmF0ZXMgb2YgdGhlIHRvcCBsZWZ0IHBpeGVsXG4gKiAgICAgIDAuNSwgMC41LlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ0ltYWdlcycsIG5hbWVzcGFjZTogJ2ltYWdlJ31cbiAqL1xuZnVuY3Rpb24gcmVzaXplTmVhcmVzdE5laWdoYm9yXzxUIGV4dGVuZHMgVGVuc29yM0R8VGVuc29yNEQ+KFxuICAgIGltYWdlczogVHxUZW5zb3JMaWtlLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBhbGlnbkNvcm5lcnMgPSBmYWxzZSxcbiAgICBoYWxmUGl4ZWxDZW50ZXJzID0gZmFsc2UpOiBUIHtcbiAgY29uc3QgJGltYWdlcyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZXMsICdpbWFnZXMnLCAncmVzaXplTmVhcmVzdE5laWdoYm9yJyk7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICAkaW1hZ2VzLnJhbmsgPT09IDMgfHwgJGltYWdlcy5yYW5rID09PSA0LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHJlc2l6ZU5lYXJlc3ROZWlnaGJvcjogeCBtdXN0IGJlIHJhbmsgMyBvciA0LCBidXQgZ290IGAgK1xuICAgICAgICAgIGByYW5rICR7JGltYWdlcy5yYW5rfS5gKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzaXplLmxlbmd0aCA9PT0gMixcbiAgICAgICgpID0+XG4gICAgICAgICAgYEVycm9yIGluIHJlc2l6ZU5lYXJlc3ROZWlnaGJvcjogbmV3IHNoYXBlIG11c3QgMkQsIGJ1dCBnb3Qgc2hhcGUgYCArXG4gICAgICAgICAgYCR7c2l6ZX0uYCk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGltYWdlcy5kdHlwZSA9PT0gJ2Zsb2F0MzInIHx8ICRpbWFnZXMuZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAoKSA9PiAnYGltYWdlc2AgbXVzdCBoYXZlIGBpbnQzMmAgb3IgYGZsb2F0MzJgIGFzIGR0eXBlJyk7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaGFsZlBpeGVsQ2VudGVycyA9PT0gZmFsc2UgfHwgYWxpZ25Db3JuZXJzID09PSBmYWxzZSxcbiAgICAgICgpID0+IGBFcnJvciBpbiByZXNpemVOZWFyZXN0TmVpZ2hib3I6IElmIGhhbGZQaXhlbENlbnRlcnMgaXMgdHJ1ZSwgYCArXG4gICAgICAgICAgYGFsaWduQ29ybmVycyBtdXN0IGJlIGZhbHNlLmApO1xuICBsZXQgYmF0Y2hJbWFnZXMgPSAkaW1hZ2VzIGFzIFRlbnNvcjREO1xuICBsZXQgcmVzaGFwZWRUbzREID0gZmFsc2U7XG4gIGlmICgkaW1hZ2VzLnJhbmsgPT09IDMpIHtcbiAgICByZXNoYXBlZFRvNEQgPSB0cnVlO1xuICAgIGJhdGNoSW1hZ2VzID0gcmVzaGFwZShcbiAgICAgICAgJGltYWdlcywgWzEsICRpbWFnZXMuc2hhcGVbMF0sICRpbWFnZXMuc2hhcGVbMV0sICRpbWFnZXMuc2hhcGVbMl1dKTtcbiAgfVxuICBjb25zdCBbXSA9IHNpemU7XG5cbiAgY29uc3QgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMgPSB7aW1hZ2VzOiBiYXRjaEltYWdlc307XG4gIGNvbnN0IGF0dHJzOlxuICAgICAgUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnMgPSB7YWxpZ25Db3JuZXJzLCBoYWxmUGl4ZWxDZW50ZXJzLCBzaXplfTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gIGNvbnN0IHJlcyA9IEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgICAgICAgICAgICBSZXNpemVOZWFyZXN0TmVpZ2hib3IsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApIGFzIFQ7XG5cbiAgaWYgKHJlc2hhcGVkVG80RCkge1xuICAgIHJldHVybiByZXNoYXBlKHJlcywgW3Jlcy5zaGFwZVsxXSwgcmVzLnNoYXBlWzJdLCByZXMuc2hhcGVbM11dKSBhcyBUO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBjb25zdCByZXNpemVOZWFyZXN0TmVpZ2hib3IgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3Jlc2l6ZU5lYXJlc3ROZWlnaGJvcl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tensor1d } from '../tensor1d';\nimport { op } from '../operation';\nimport { cast } from '../cast';\nimport { split } from '../split';\nimport { bincount } from '../bincount';\nimport { lessEqual } from '../less_equal';\nimport { greater } from '../greater';\nimport { sum } from '../sum';\nimport { add } from '../add';\nimport { mul } from '../mul';\nimport { div } from '../div';\nimport { sub } from '../sub';\nimport { round } from '../round';\nimport { where } from '../where';\nimport { fill } from '../fill';\nimport { slice } from '../slice';\nimport { range } from '../range';\nimport { tensor } from '../tensor';\nimport * as util from '../../util';\nimport { convertToTensor } from '../../tensor_util_env';\n/**\n * Performs image binarization with corresponding threshold\n * (depends on the method)value, which creates a binary image from a grayscale.\n * @param image 3d tensor of shape [imageHeight,imageWidth, depth],\n * where imageHeight and imageWidth must be positive.The image color\n * range should be [0, 255].\n * @param method Optional string from `'binary' | 'otsu'`\n * which specifies the method for thresholding. Defaults to 'binary'.\n * @param inverted Optional boolean whichspecifies\n * if colours should be inverted. Defaults to false.\n * @param threshValue Optional number which defines threshold value from 0 to 1.\n * Defaults to 0.5.\n * @return A 3d tensor of shape [imageHeight,imageWidth, depth], which\n * contains binarized image.\n */\nfunction threshold_(image, method = 'binary', inverted = false, threshValue = 0.5) {\n const $image = convertToTensor(image, 'image', 'threshold');\n /* 0.2989, 0.5870, 0.1140 are represent luma coefficients in CCIR601.\n Reference for converting between RGB and grayscale: https://en.wikipedia.org/wiki/Luma_%28video%29 */\n const RED_INTENCITY_COEF = 0.2989;\n const GREEN_INTENCITY_COEF = 0.5870;\n const BLUE_INTENCITY_COEF = 0.1140;\n const totalPixelsInImage = $image.shape[0] * $image.shape[1];\n let $threshold = mul(tensor1d([threshValue]), 255);\n let r, g, b, grayscale;\n util.assert($image.rank === 3, () => 'Error in threshold: image must be rank 3,' +\n `but got rank ${$image.rank}.`);\n util.assert($image.shape[2] === 3 || $image.shape[2] === 1, () => 'Error in threshold: ' +\n 'image color channel must be equal to 3 or 1' +\n `but got ${$image.shape[2]}.`);\n util.assert($image.dtype === 'int32' || $image.dtype === 'float32', () => 'Error in dtype: image dtype must be int32 or float32,' +\n `but got dtype ${$image.dtype}.`);\n util.assert(method === 'otsu' || method === 'binary', () => `Method must be binary or otsu, but was ${method}`);\n if ($image.shape[2] === 3) {\n [r, g, b] = split($image, [1, 1, 1], -1);\n const $r = mul(r, RED_INTENCITY_COEF);\n const $g = mul(g, GREEN_INTENCITY_COEF);\n const $b = mul(b, BLUE_INTENCITY_COEF);\n grayscale = add(add($r, $g), $b);\n }\n else {\n grayscale = image;\n }\n if (method === 'otsu') {\n const $histogram = bincount(cast(round(grayscale), 'int32'), tensor([]), 256);\n $threshold = otsu($histogram, totalPixelsInImage);\n }\n const invCondition = inverted ?\n lessEqual(grayscale, $threshold) : greater(grayscale, $threshold);\n const result = cast(mul(invCondition, 255), 'int32');\n return result;\n}\nfunction otsu(histogram, total) {\n let bestThresh = tensor1d([-1]);\n let bestInBetVar = tensor1d([0]);\n let cInBetVar = tensor1d([0]);\n let classFirst, classSecond, meanFirst, meanSec, weightForeground, weightBack;\n for (let index = 0; index < histogram.size - 1; index++) {\n classFirst = slice(histogram, 0, index + 1);\n classSecond = slice(histogram, index + 1);\n weightForeground = div(sum(classFirst), total);\n weightBack = div(sum(classSecond), total);\n const meanFirstDivA = sum(mul(classFirst, range(0, classFirst.size)));\n meanFirst = div(meanFirstDivA, sum(classFirst));\n const meanSecFill = fill(classSecond.shape, classFirst.size);\n const meanSecAdd = add(range(0, classSecond.size), meanSecFill);\n const meanSecMul = mul(classSecond, (meanSecAdd));\n meanSec = div(sum(meanSecMul), sum(classSecond));\n const cInBetVarSubA = sub(meanFirst, meanSec);\n const cInBetVarSubB = sub(meanFirst, meanSec);\n const cInBetVarMul = mul(weightForeground, weightBack);\n cInBetVar = mul(mul(cInBetVarMul, cInBetVarSubA), cInBetVarSubB);\n const condition = greater(cInBetVar, bestInBetVar);\n bestInBetVar = where(condition, cInBetVar, bestInBetVar);\n bestThresh = where(condition, tensor1d([index]), bestThresh);\n }\n return bestThresh;\n}\nexport const threshold = /* @__PURE__ */ op({ threshold_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvdGhyZXNob2xkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILFNBQVMsVUFBVSxDQUNmLEtBQTRCLEVBQzVCLE1BQU0sR0FBRyxRQUFRLEVBQ2pCLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLFdBQVcsR0FBRyxHQUFHO0lBRWpCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTVEOzBHQUNtRztJQUVuRyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztJQUNsQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztJQUNwQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztJQUNuQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3RCxJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUV2QixJQUFJLENBQUMsTUFBTSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUNqQixHQUFHLEVBQUUsQ0FBQywyQ0FBMkM7UUFDN0MsZ0JBQWdCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLEVBQzdDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQjtRQUN4Qiw2Q0FBNkM7UUFDN0MsV0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QyxJQUFJLENBQUMsTUFBTSxDQUNULE1BQU0sQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUN0RCxHQUFHLEVBQUUsQ0FBQyx1REFBdUQ7UUFDekQsaUJBQWlCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFNLENBQ1QsTUFBTSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssUUFBUSxFQUN4QyxHQUFHLEVBQUUsQ0FBQywwQ0FBMEMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU1RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RDLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNwQztTQUFNO1FBQ0gsU0FBUyxHQUFHLEtBQUssQ0FBQztLQUNyQjtJQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtRQUNuQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQWEsRUFDbkUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztLQUNyRDtJQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFdEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFcEQsT0FBTyxNQUFrQixDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxTQUFtQixFQUFFLEtBQWE7SUFFNUMsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixJQUFJLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO0lBRTFDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUVuRCxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVDLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV6QyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDLFVBQVUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RSxTQUFTLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUUsQ0FBQztRQUVqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRWpELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdkQsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbkQsWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpELFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FFaEU7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHsgVGVuc29yMUQsIFRlbnNvcjNEIH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7IHRlbnNvcjFkIH0gZnJvbSAnLi4vdGVuc29yMWQnO1xuaW1wb3J0IHsgVGVuc29yTGlrZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IG9wIH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7IGNhc3QgfSBmcm9tICcuLi9jYXN0JztcbmltcG9ydCB7IHNwbGl0IH0gZnJvbSAnLi4vc3BsaXQnO1xuaW1wb3J0IHsgYmluY291bnQgfSBmcm9tICcuLi9iaW5jb3VudCc7XG5pbXBvcnQgeyBsZXNzRXF1YWwgfSBmcm9tICcuLi9sZXNzX2VxdWFsJztcbmltcG9ydCB7IGdyZWF0ZXIgfSBmcm9tICcuLi9ncmVhdGVyJztcbmltcG9ydCB7IHN1bSB9IGZyb20gJy4uL3N1bSc7XG5pbXBvcnQgeyBhZGQgfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0IHsgbXVsIH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7IGRpdiB9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQgeyBzdWIgfSBmcm9tICcuLi9zdWInO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tICcuLi9yb3VuZCc7XG5pbXBvcnQgeyB3aGVyZSB9IGZyb20gJy4uL3doZXJlJztcbmltcG9ydCB7IGZpbGwgfSBmcm9tICcuLi9maWxsJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7IHJhbmdlIH0gZnJvbSAnLi4vcmFuZ2UnO1xuaW1wb3J0IHsgdGVuc29yIH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0VG9UZW5zb3IgfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGltYWdlIGJpbmFyaXphdGlvbiB3aXRoIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkXG4gKiAoZGVwZW5kcyBvbiB0aGUgbWV0aG9kKXZhbHVlLCB3aGljaCBjcmVhdGVzIGEgYmluYXJ5IGltYWdlIGZyb20gYSBncmF5c2NhbGUuXG4gKiBAcGFyYW0gaW1hZ2UgM2QgdGVuc29yIG9mIHNoYXBlIFtpbWFnZUhlaWdodCxpbWFnZVdpZHRoLCBkZXB0aF0sXG4gKiB3aGVyZSBpbWFnZUhlaWdodCBhbmQgaW1hZ2VXaWR0aCBtdXN0IGJlIHBvc2l0aXZlLlRoZSBpbWFnZSBjb2xvclxuICogcmFuZ2Ugc2hvdWxkIGJlIFswLCAyNTVdLlxuICogQHBhcmFtIG1ldGhvZCBPcHRpb25hbCBzdHJpbmcgZnJvbSBgJ2JpbmFyeScgfCAnb3RzdSdgXG4gKiB3aGljaCBzcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgdGhyZXNob2xkaW5nLiBEZWZhdWx0cyB0byAnYmluYXJ5Jy5cbiAqIEBwYXJhbSBpbnZlcnRlZCBPcHRpb25hbCBib29sZWFuIHdoaWNoc3BlY2lmaWVzXG4gKiBpZiBjb2xvdXJzIHNob3VsZCBiZSBpbnZlcnRlZC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcGFyYW0gdGhyZXNoVmFsdWUgT3B0aW9uYWwgbnVtYmVyIHdoaWNoIGRlZmluZXMgdGhyZXNob2xkIHZhbHVlIGZyb20gMCB0byAxLlxuICogRGVmYXVsdHMgdG8gMC41LlxuICogQHJldHVybiBBIDNkIHRlbnNvciBvZiBzaGFwZSBbaW1hZ2VIZWlnaHQsaW1hZ2VXaWR0aCwgZGVwdGhdLCB3aGljaFxuICogY29udGFpbnMgYmluYXJpemVkIGltYWdlLlxuICovXG5cbmZ1bmN0aW9uIHRocmVzaG9sZF8oXG4gICAgaW1hZ2U6IFRlbnNvcjNEIHwgVGVuc29yTGlrZSxcbiAgICBtZXRob2QgPSAnYmluYXJ5JyxcbiAgICBpbnZlcnRlZCA9IGZhbHNlLFxuICAgIHRocmVzaFZhbHVlID0gMC41XG4pOiBUZW5zb3IzRCB7XG4gICAgY29uc3QgJGltYWdlID0gY29udmVydFRvVGVuc29yKGltYWdlLCAnaW1hZ2UnLCAndGhyZXNob2xkJyk7XG5cbiAgICAvKiAwLjI5ODksIDAuNTg3MCwgMC4xMTQwIGFyZSByZXByZXNlbnQgbHVtYSBjb2VmZmljaWVudHMgaW4gQ0NJUjYwMS5cblx0UmVmZXJlbmNlIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gUkdCIGFuZCBncmF5c2NhbGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0x1bWFfJTI4dmlkZW8lMjkgICovXG5cbiAgICBjb25zdCBSRURfSU5URU5DSVRZX0NPRUYgPSAwLjI5ODk7XG4gICAgY29uc3QgR1JFRU5fSU5URU5DSVRZX0NPRUYgPSAwLjU4NzA7XG4gICAgY29uc3QgQkxVRV9JTlRFTkNJVFlfQ09FRiA9IDAuMTE0MDtcbiAgICBjb25zdCB0b3RhbFBpeGVsc0luSW1hZ2UgPSAkaW1hZ2Uuc2hhcGVbMF0gKiAkaW1hZ2Uuc2hhcGVbMV07XG5cbiAgICBsZXQgJHRocmVzaG9sZCA9IG11bCh0ZW5zb3IxZChbdGhyZXNoVmFsdWVdKSwgMjU1KTtcbiAgICBsZXQgciwgZywgYiwgZ3JheXNjYWxlO1xuXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICRpbWFnZS5yYW5rID09PSAzLFxuICAgICAgICAoKSA9PiAnRXJyb3IgaW4gdGhyZXNob2xkOiBpbWFnZSBtdXN0IGJlIHJhbmsgMywnICtcbiAgICAgICAgICAgIGBidXQgZ290IHJhbmsgJHskaW1hZ2UucmFua30uYCk7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgJGltYWdlLnNoYXBlWzJdID09PSAzIHx8ICRpbWFnZS5zaGFwZVsyXT09PSAxLFxuICAgICAgICAoKSA9PiAnRXJyb3IgaW4gdGhyZXNob2xkOiAnICtcbiAgICAgICAgICAgICdpbWFnZSBjb2xvciBjaGFubmVsIG11c3QgYmUgZXF1YWwgdG8gMyBvciAxJyArXG4gICAgICAgICAgICBgYnV0IGdvdCAkeyRpbWFnZS5zaGFwZVsyXX0uYCk7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICRpbWFnZS5kdHlwZSA9PT0gJ2ludDMyJyB8fCAkaW1hZ2UuZHR5cGUgPT09ICdmbG9hdDMyJyxcbiAgICAgICgpID0+ICdFcnJvciBpbiBkdHlwZTogaW1hZ2UgZHR5cGUgbXVzdCBiZSBpbnQzMiBvciBmbG9hdDMyLCcgK1xuICAgICAgICAgIGBidXQgZ290IGR0eXBlICR7JGltYWdlLmR0eXBlfS5gKTtcblxuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgbWV0aG9kID09PSAnb3RzdScgfHwgbWV0aG9kID09PSAnYmluYXJ5JyxcbiAgICAgICgpID0+IGBNZXRob2QgbXVzdCBiZSBiaW5hcnkgb3Igb3RzdSwgYnV0IHdhcyAke21ldGhvZH1gKTtcblxuICAgIGlmICgkaW1hZ2Uuc2hhcGVbMl0gPT09IDMpIHtcbiAgICAgICAgW3IsIGcsIGJdID0gc3BsaXQoJGltYWdlLCBbMSwgMSwgMV0sIC0xKTtcbiAgICAgICAgY29uc3QgJHIgPSBtdWwocixSRURfSU5URU5DSVRZX0NPRUYpO1xuICAgICAgICBjb25zdCAkZyA9IG11bChnLEdSRUVOX0lOVEVOQ0lUWV9DT0VGKTtcbiAgICAgICAgY29uc3QgJGIgPSBtdWwoYixCTFVFX0lOVEVOQ0lUWV9DT0VGKTtcbiAgICAgICAgZ3JheXNjYWxlID0gYWRkKGFkZCgkciwgJGcpLCAkYik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ3JheXNjYWxlID0gaW1hZ2U7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ290c3UnKSB7XG4gICAgICAgIGNvbnN0ICRoaXN0b2dyYW0gPSBiaW5jb3VudChjYXN0KHJvdW5kKGdyYXlzY2FsZSksICdpbnQzMicpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgdGVuc29yKFtdKSxcbiAgICAgICAgICAgIDI1Nik7XG4gICAgICAgICR0aHJlc2hvbGQgPSBvdHN1KCRoaXN0b2dyYW0sIHRvdGFsUGl4ZWxzSW5JbWFnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52Q29uZGl0aW9uID0gaW52ZXJ0ZWQgP1xuICAgICAgICBsZXNzRXF1YWwoZ3JheXNjYWxlLCAkdGhyZXNob2xkKSA6IGdyZWF0ZXIoZ3JheXNjYWxlLCAkdGhyZXNob2xkKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhc3QobXVsKGludkNvbmRpdGlvbiwyNTUpLCAnaW50MzInKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgVGVuc29yM0Q7XG59XG5cbmZ1bmN0aW9uIG90c3UoaGlzdG9ncmFtOiBUZW5zb3IxRCwgdG90YWw6IG51bWJlcik6VGVuc29yMUQge1xuXG4gICAgbGV0IGJlc3RUaHJlc2ggPSB0ZW5zb3IxZChbLTFdKTtcbiAgICBsZXQgYmVzdEluQmV0VmFyID0gdGVuc29yMWQoWzBdKTtcbiAgICBsZXQgY0luQmV0VmFyID0gdGVuc29yMWQoWzBdKTtcbiAgICBsZXQgY2xhc3NGaXJzdCwgY2xhc3NTZWNvbmQsIG1lYW5GaXJzdCxcbiAgICAgICAgbWVhblNlYywgd2VpZ2h0Rm9yZWdyb3VuZCwgd2VpZ2h0QmFjaztcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBoaXN0b2dyYW0uc2l6ZS0xOyBpbmRleCsrKSB7XG5cbiAgICAgICAgY2xhc3NGaXJzdCA9IHNsaWNlKGhpc3RvZ3JhbSwgMCwgaW5kZXggKyAxKTtcblxuICAgICAgICBjbGFzc1NlY29uZCA9IHNsaWNlKGhpc3RvZ3JhbSxpbmRleCArIDEpO1xuXG4gICAgICAgIHdlaWdodEZvcmVncm91bmQgPSBkaXYoc3VtKGNsYXNzRmlyc3QpLHRvdGFsKTtcblxuICAgICAgICB3ZWlnaHRCYWNrID0gZGl2KHN1bShjbGFzc1NlY29uZCksdG90YWwpO1xuXG4gICAgICAgIGNvbnN0IG1lYW5GaXJzdERpdkEgPSBzdW0obXVsKGNsYXNzRmlyc3QsIHJhbmdlKDAsIGNsYXNzRmlyc3Quc2l6ZSkpKTtcblxuICAgICAgICBtZWFuRmlyc3QgPSBkaXYobWVhbkZpcnN0RGl2QSwgc3VtKGNsYXNzRmlyc3QpICk7XG5cbiAgICAgICAgY29uc3QgbWVhblNlY0ZpbGwgPSBmaWxsKGNsYXNzU2Vjb25kLnNoYXBlLCBjbGFzc0ZpcnN0LnNpemUpO1xuICAgICAgICBjb25zdCBtZWFuU2VjQWRkID0gYWRkKHJhbmdlKDAsY2xhc3NTZWNvbmQuc2l6ZSksbWVhblNlY0ZpbGwpO1xuICAgICAgICBjb25zdCBtZWFuU2VjTXVsID0gbXVsKGNsYXNzU2Vjb25kLCAobWVhblNlY0FkZCkpO1xuICAgICAgICBtZWFuU2VjID0gZGl2KHN1bShtZWFuU2VjTXVsKSwgc3VtKGNsYXNzU2Vjb25kKSk7XG5cbiAgICAgICAgY29uc3QgY0luQmV0VmFyU3ViQSA9IHN1YihtZWFuRmlyc3QsIG1lYW5TZWMpO1xuICAgICAgICBjb25zdCBjSW5CZXRWYXJTdWJCID0gc3ViKG1lYW5GaXJzdCwgbWVhblNlYyk7XG4gICAgICAgIGNvbnN0IGNJbkJldFZhck11bCA9IG11bCh3ZWlnaHRGb3JlZ3JvdW5kLCB3ZWlnaHRCYWNrKTtcbiAgICAgICAgY0luQmV0VmFyID0gbXVsKG11bChjSW5CZXRWYXJNdWwsY0luQmV0VmFyU3ViQSksIGNJbkJldFZhclN1YkIpO1xuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdyZWF0ZXIoY0luQmV0VmFyLCBiZXN0SW5CZXRWYXIpO1xuXG4gICAgICAgIGJlc3RJbkJldFZhciA9IHdoZXJlKGNvbmRpdGlvbiwgY0luQmV0VmFyLCBiZXN0SW5CZXRWYXIpO1xuXG4gICAgICAgIGJlc3RUaHJlc2ggPSB3aGVyZShjb25kaXRpb24sIHRlbnNvcjFkKFtpbmRleF0pLCBiZXN0VGhyZXNoKTtcblxuICAgIH1cbiAgICByZXR1cm4gYmVzdFRocmVzaDtcbn1cblxuZXhwb3J0IGNvbnN0IHRocmVzaG9sZCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7IHRocmVzaG9sZF8gfSk7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { Transform } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport * as util from '../../util';\nimport { op } from '../operation';\n/**\n * Applies the given transform(s) to the image(s).\n *\n * @param image 4d tensor of shape `[batch, imageHeight, imageWidth, depth]`.\n * @param transforms Projective transform matrix/matrices. A tensor1d of length\n * 8 or tensor of size N x 8. If one row of transforms is [a0, a1, a2, b0,\n * b1, b2, c0, c1], then it maps the output point (x, y) to a transformed\n * input point (x', y') = ((a0 x + a1 y + a2) / k, (b0 x + b1 y + b2) / k),\n * where k = c0 x + c1 y + 1. The transforms are inverted compared to the\n * transform mapping input points to output points.\n * @param interpolation Interpolation mode.\n * Supported values: 'nearest', 'bilinear'. Default to 'nearest'.\n * @param fillMode Points outside the boundaries of the input are filled\n * according to the given mode, one of 'constant', 'reflect', 'wrap',\n * 'nearest'. Default to 'constant'.\n * 'reflect': (d c b a | a b c d | d c b a ) The input is extended by\n * reflecting about the edge of the last pixel.\n * 'constant': (k k k k | a b c d | k k k k) The input is extended by\n * filling all values beyond the edge with the same constant value k.\n * 'wrap': (a b c d | a b c d | a b c d) The input is extended by\n * wrapping around to the opposite edge.\n * 'nearest': (a a a a | a b c d | d d d d) The input is extended by\n * the nearest pixel.\n * @param fillValue A float represents the value to be filled outside the\n * boundaries when fillMode is 'constant'.\n * @param Output dimension after the transform, [height, width]. If undefined,\n * output is the same size as input image.\n *\n * @doc {heading: 'Operations', subheading: 'Images', namespace: 'image'}\n */\nfunction transform_(image, transforms, interpolation = 'nearest', fillMode = 'constant', fillValue = 0, outputShape) {\n const $image = convertToTensor(image, 'image', 'transform', 'float32');\n const $transforms = convertToTensor(transforms, 'transforms', 'transform', 'float32');\n util.assert($image.rank === 4, () => 'Error in transform: image must be rank 4,' +\n `but got rank ${$image.rank}.`);\n util.assert($transforms.rank === 2 &&\n ($transforms.shape[0] === $image.shape[0] ||\n $transforms.shape[0] === 1) &&\n $transforms.shape[1] === 8, () => `Error in transform: Input transform should be batch x 8 or 1 x 8`);\n util.assert(outputShape == null || outputShape.length === 2, () => 'Error in transform: outputShape must be [height, width] or null, ' +\n `but got ${outputShape}.`);\n const inputs = { image: $image, transforms: $transforms };\n const attrs = { interpolation, fillMode, fillValue, outputShape };\n return ENGINE.runKernel(Transform, inputs, attrs);\n}\nexport const transform = /* @__PURE__ */ op({ transform_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvaW1hZ2UvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLFNBQVMsRUFBa0MsTUFBTSxvQkFBb0IsQ0FBQztBQUk5RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxLQUFLLElBQUksTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxTQUFTLFVBQVUsQ0FDZixLQUEwQixFQUFFLFVBQStCLEVBQzNELGdCQUFzQyxTQUFTLEVBQy9DLFdBQWtELFVBQVUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUMzRSxXQUE4QjtJQUNoQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLDJDQUEyQztRQUM3QyxnQkFBZ0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDbEIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUM5QixHQUFHLEVBQUUsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO0lBRTlFLElBQUksQ0FBQyxNQUFNLENBQ1AsV0FBVyxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDL0MsR0FBRyxFQUFFLENBQ0QsbUVBQW1FO1FBQ25FLFdBQVcsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUVuQyxNQUFNLE1BQU0sR0FBb0IsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FDVSxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDO0lBRXZFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FDbkIsU0FBUyxFQUFFLE1BQW1DLEVBQzlDLEtBQWdDLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge1RyYW5zZm9ybSwgVHJhbnNmb3JtQXR0cnMsIFRyYW5zZm9ybUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7TmFtZWRBdHRyTWFwfSBmcm9tICcuLi8uLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IyRCwgVGVuc29yNER9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZ2l2ZW4gdHJhbnNmb3JtKHMpIHRvIHRoZSBpbWFnZShzKS5cbiAqXG4gKiBAcGFyYW0gaW1hZ2UgNGQgdGVuc29yIG9mIHNoYXBlIGBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBkZXB0aF1gLlxuICogQHBhcmFtIHRyYW5zZm9ybXMgUHJvamVjdGl2ZSB0cmFuc2Zvcm0gbWF0cml4L21hdHJpY2VzLiBBIHRlbnNvcjFkIG9mIGxlbmd0aFxuICogICAgIDggb3IgdGVuc29yIG9mIHNpemUgTiB4IDguIElmIG9uZSByb3cgb2YgdHJhbnNmb3JtcyBpcyBbYTAsIGExLCBhMiwgYjAsXG4gKiAgICAgYjEsIGIyLCBjMCwgYzFdLCB0aGVuIGl0IG1hcHMgdGhlIG91dHB1dCBwb2ludCAoeCwgeSkgdG8gYSB0cmFuc2Zvcm1lZFxuICogICAgIGlucHV0IHBvaW50ICh4JywgeScpID0gKChhMCB4ICsgYTEgeSArIGEyKSAvIGssIChiMCB4ICsgYjEgeSArIGIyKSAvIGspLFxuICogICAgIHdoZXJlIGsgPSBjMCB4ICsgYzEgeSArIDEuIFRoZSB0cmFuc2Zvcm1zIGFyZSBpbnZlcnRlZCBjb21wYXJlZCB0byB0aGVcbiAqICAgICB0cmFuc2Zvcm0gbWFwcGluZyBpbnB1dCBwb2ludHMgdG8gb3V0cHV0IHBvaW50cy5cbiAqIEBwYXJhbSBpbnRlcnBvbGF0aW9uIEludGVycG9sYXRpb24gbW9kZS5cbiAqICAgICBTdXBwb3J0ZWQgdmFsdWVzOiAnbmVhcmVzdCcsICdiaWxpbmVhcicuIERlZmF1bHQgdG8gJ25lYXJlc3QnLlxuICogQHBhcmFtIGZpbGxNb2RlIFBvaW50cyBvdXRzaWRlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBpbnB1dCBhcmUgZmlsbGVkXG4gKiAgICAgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBtb2RlLCBvbmUgb2YgJ2NvbnN0YW50JywgJ3JlZmxlY3QnLCAnd3JhcCcsXG4gKiAgICAgJ25lYXJlc3QnLiBEZWZhdWx0IHRvICdjb25zdGFudCcuXG4gKiAgICAgJ3JlZmxlY3QnOiAoZCBjIGIgYSB8IGEgYiBjIGQgfCBkIGMgYiBhICkgVGhlIGlucHV0IGlzIGV4dGVuZGVkIGJ5XG4gKiAgICAgcmVmbGVjdGluZyBhYm91dCB0aGUgZWRnZSBvZiB0aGUgbGFzdCBwaXhlbC5cbiAqICAgICAnY29uc3RhbnQnOiAoayBrIGsgayB8IGEgYiBjIGQgfCBrIGsgayBrKSBUaGUgaW5wdXQgaXMgZXh0ZW5kZWQgYnlcbiAqICAgICBmaWxsaW5nIGFsbCB2YWx1ZXMgYmV5b25kIHRoZSBlZGdlIHdpdGggdGhlIHNhbWUgY29uc3RhbnQgdmFsdWUgay5cbiAqICAgICAnd3JhcCc6IChhIGIgYyBkIHwgYSBiIGMgZCB8IGEgYiBjIGQpIFRoZSBpbnB1dCBpcyBleHRlbmRlZCBieVxuICogICAgIHdyYXBwaW5nIGFyb3VuZCB0byB0aGUgb3Bwb3NpdGUgZWRnZS5cbiAqICAgICAnbmVhcmVzdCc6IChhIGEgYSBhIHwgYSBiIGMgZCB8IGQgZCBkIGQpIFRoZSBpbnB1dCBpcyBleHRlbmRlZCBieVxuICogICAgIHRoZSBuZWFyZXN0IHBpeGVsLlxuICogQHBhcmFtIGZpbGxWYWx1ZSBBIGZsb2F0IHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIGZpbGxlZCBvdXRzaWRlIHRoZVxuICogICAgIGJvdW5kYXJpZXMgd2hlbiBmaWxsTW9kZSBpcyAnY29uc3RhbnQnLlxuICogQHBhcmFtIE91dHB1dCBkaW1lbnNpb24gYWZ0ZXIgdGhlIHRyYW5zZm9ybSwgW2hlaWdodCwgd2lkdGhdLiBJZiB1bmRlZmluZWQsXG4gKiAgICAgb3V0cHV0IGlzIHRoZSBzYW1lIHNpemUgYXMgaW5wdXQgaW1hZ2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnSW1hZ2VzJywgbmFtZXNwYWNlOiAnaW1hZ2UnfVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1fKFxuICAgIGltYWdlOiBUZW5zb3I0RHxUZW5zb3JMaWtlLCB0cmFuc2Zvcm1zOiBUZW5zb3IyRHxUZW5zb3JMaWtlLFxuICAgIGludGVycG9sYXRpb246ICduZWFyZXN0J3wnYmlsaW5lYXInID0gJ25lYXJlc3QnLFxuICAgIGZpbGxNb2RlOiAnY29uc3RhbnQnfCdyZWZsZWN0J3wnd3JhcCd8J25lYXJlc3QnID0gJ2NvbnN0YW50JywgZmlsbFZhbHVlID0gMCxcbiAgICBvdXRwdXRTaGFwZT86IFtudW1iZXIsIG51bWJlcl0pOiBUZW5zb3I0RCB7XG4gIGNvbnN0ICRpbWFnZSA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltYWdlJywgJ3RyYW5zZm9ybScsICdmbG9hdDMyJyk7XG4gIGNvbnN0ICR0cmFuc2Zvcm1zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcih0cmFuc2Zvcm1zLCAndHJhbnNmb3JtcycsICd0cmFuc2Zvcm0nLCAnZmxvYXQzMicpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJGltYWdlLnJhbmsgPT09IDQsXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gdHJhbnNmb3JtOiBpbWFnZSBtdXN0IGJlIHJhbmsgNCwnICtcbiAgICAgICAgICBgYnV0IGdvdCByYW5rICR7JGltYWdlLnJhbmt9LmApO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgJHRyYW5zZm9ybXMucmFuayA9PT0gMiAmJlxuICAgICAgICAgICgkdHJhbnNmb3Jtcy5zaGFwZVswXSA9PT0gJGltYWdlLnNoYXBlWzBdIHx8XG4gICAgICAgICAgICR0cmFuc2Zvcm1zLnNoYXBlWzBdID09PSAxKSAmJlxuICAgICAgICAgICR0cmFuc2Zvcm1zLnNoYXBlWzFdID09PSA4LFxuICAgICAgKCkgPT4gYEVycm9yIGluIHRyYW5zZm9ybTogSW5wdXQgdHJhbnNmb3JtIHNob3VsZCBiZSBiYXRjaCB4IDggb3IgMSB4IDhgKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIG91dHB1dFNoYXBlID09IG51bGwgfHwgb3V0cHV0U2hhcGUubGVuZ3RoID09PSAyLFxuICAgICAgKCkgPT5cbiAgICAgICAgICAnRXJyb3IgaW4gdHJhbnNmb3JtOiBvdXRwdXRTaGFwZSBtdXN0IGJlIFtoZWlnaHQsIHdpZHRoXSBvciBudWxsLCAnICtcbiAgICAgICAgICBgYnV0IGdvdCAke291dHB1dFNoYXBlfS5gKTtcblxuICBjb25zdCBpbnB1dHM6IFRyYW5zZm9ybUlucHV0cyA9IHtpbWFnZTogJGltYWdlLCB0cmFuc2Zvcm1zOiAkdHJhbnNmb3Jtc307XG4gIGNvbnN0IGF0dHJzOlxuICAgICAgVHJhbnNmb3JtQXR0cnMgPSB7aW50ZXJwb2xhdGlvbiwgZmlsbE1vZGUsIGZpbGxWYWx1ZSwgb3V0cHV0U2hhcGV9O1xuXG4gIHJldHVybiBFTkdJTkUucnVuS2VybmVsKFxuICAgICAgVHJhbnNmb3JtLCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7dHJhbnNmb3JtX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assert } from '../../util';\nimport { greaterEqual } from '../greater_equal';\nimport { less } from '../less';\nimport { lessEqual } from '../less_equal';\nimport { logicalAnd } from '../logical_and';\nimport { minimum } from '../minimum';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { range } from '../range';\nimport { reshape } from '../reshape';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { unstack } from '../unstack';\nimport { where } from '../where';\nimport { zeros } from '../zeros';\n/**\n * Copy a tensor setting everything outside a central band in each innermost\n * matrix to zero.\n *\n * The band part is computed as follows: Assume input has `k` dimensions\n * `[I, J, K, ..., M, N]`, then the output is a tensor with the same shape where\n * `band[i, j, k, ..., m, n] = in_band(m, n) * input[i, j, k, ..., m, n]`.\n * The indicator function\n * `in_band(m, n) = (num_lower < 0 || (m-n) <= num_lower)`\n * `&& (num_upper < 0 || (n-m) <= num_upper)`\n *\n * ```js\n * const x = tf.tensor2d([[ 0, 1, 2, 3],\n * [-1, 0, 1, 2],\n * [-2, -1, 0, 1],\n * [-3, -2, -1, 0]]);\n * let y = tf.linalg.bandPart(x, 1, -1);\n * y.print(); // [[ 0, 1, 2, 3],\n * // [-1, 0, 1, 2],\n * // [ 0, -1, 0, 1],\n * // [ 0, 0 , -1, 0]]\n * let z = tf.linalg.bandPart(x, 2, 1);\n * z.print(); // [[ 0, 1, 0, 0],\n * // [-1, 0, 1, 0],\n * // [-2, -1, 0, 1],\n * // [ 0, -2, -1, 0]]\n * ```\n *\n * @param x Rank `k` tensor\n * @param numLower Number of subdiagonals to keep.\n * If negative, keep entire lower triangle.\n * @param numUpper Number of subdiagonals to keep.\n * If negative, keep entire upper triangle.\n * @returns Rank `k` tensor of the same shape as input.\n * The extracted banded tensor.\n *\n * @doc {heading:'Operations', subheading:'Linear Algebra', namespace:'linalg'}\n */\nfunction bandPart_(a, numLower, numUpper) {\n const $a = convertToTensor(a, 'a', 'bandPart');\n assert($a.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${$a.rank}.`);\n const shape = $a.shape;\n const [M, N] = $a.shape.slice(-2);\n let $numLower;\n let $numUpper;\n if (typeof numLower === 'number') {\n assert(numLower % 1 === 0, () => `bandPart(): numLower must be an integer, got ${numLower}.`);\n assert(numLower <= M, () => `bandPart(): numLower (${numLower})` +\n ` must not be greater than the number of rows (${M}).`);\n $numLower =\n convertToTensor(numLower < 0 ? M : numLower, 'numLower', 'bandPart');\n }\n else {\n assert(numLower.dtype === 'int32', () => `bandPart(): numLower's dtype must be an int32.`);\n // If numLower is a Scalar, checking `numLower <= M` could hurt performance,\n // but minimum(numLower, M) could avoid unexpected results.\n $numLower = where(less(numLower, 0), M, minimum(numLower, M));\n }\n if (typeof numUpper === 'number') {\n assert(numUpper % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${numUpper}.`);\n assert(numUpper <= N, () => `bandPart(): numUpper (${numUpper})` +\n ` must not be greater than the number of columns (${N}).`);\n $numUpper =\n convertToTensor(numUpper < 0 ? N : numUpper, 'numUpper', 'bandPart');\n }\n else {\n assert(numUpper.dtype === 'int32', () => `bandPart(): numUpper's dtype must be an int32.`);\n $numUpper = where(less(numUpper, 0), N, minimum(numUpper, N));\n }\n const i = reshape(range(0, M, 1, 'int32'), [-1, 1]);\n const j = range(0, N, 1, 'int32');\n const ij = sub(i, j);\n const inBand = logicalAnd(lessEqual(ij, $numLower), greaterEqual(ij, neg($numUpper)));\n const zero = zeros([M, N], $a.dtype);\n return reshape(stack(unstack(reshape($a, [-1, M, N]))\n .map(mat => where(inBand, mat, zero))), shape);\n}\nexport const bandPart = /* @__PURE__ */ op({ bandPart_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuZF9wYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbGluYWxnL2JhbmRfcGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsU0FBUyxTQUFTLENBQ2Qs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LFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLE9BQU8sT0FBTyxDQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDaEQsS0FBSyxDQUFNLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtTY2FsYXIsIFRlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmltcG9ydCB7Z3JlYXRlckVxdWFsfSBmcm9tICcuLi9ncmVhdGVyX2VxdWFsJztcbmltcG9ydCB7bGVzc30gZnJvbSAnLi4vbGVzcyc7XG5pbXBvcnQge2xlc3NFcXVhbH0gZnJvbSAnLi4vbGVzc19lcXVhbCc7XG5pbXBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4uL2xvZ2ljYWxfYW5kJztcbmltcG9ydCB7bWluaW11bX0gZnJvbSAnLi4vbWluaW11bSc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JhbmdlfSBmcm9tICcuLi9yYW5nZSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzdGFja30gZnJvbSAnLi4vc3RhY2snO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL3N1Yic7XG5pbXBvcnQge3Vuc3RhY2t9IGZyb20gJy4uL3Vuc3RhY2snO1xuaW1wb3J0IHt3aGVyZX0gZnJvbSAnLi4vd2hlcmUnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi4vemVyb3MnO1xuXG4vKipcbiAqIENvcHkgYSB0ZW5zb3Igc2V0dGluZyBldmVyeXRoaW5nIG91dHNpZGUgYSBjZW50cmFsIGJhbmQgaW4gZWFjaCBpbm5lcm1vc3RcbiAqIG1hdHJpeCB0byB6ZXJvLlxuICpcbiAqIFRoZSBiYW5kIHBhcnQgaXMgY29tcHV0ZWQgYXMgZm9sbG93czogQXNzdW1lIGlucHV0IGhhcyBga2AgZGltZW5zaW9uc1xuICogYFtJLCBKLCBLLCAuLi4sIE0sIE5dYCwgdGhlbiB0aGUgb3V0cHV0IGlzIGEgdGVuc29yIHdpdGggdGhlIHNhbWUgc2hhcGUgd2hlcmVcbiAqIGBiYW5kW2ksIGosIGssIC4uLiwgbSwgbl0gPSBpbl9iYW5kKG0sIG4pICogaW5wdXRbaSwgaiwgaywgLi4uLCBtLCBuXWAuXG4gKiBUaGUgaW5kaWNhdG9yIGZ1bmN0aW9uXG4gKiBgaW5fYmFuZChtLCBuKSA9IChudW1fbG93ZXIgPCAwIHx8IChtLW4pIDw9IG51bV9sb3dlcilgXG4gKiBgJiYgKG51bV91cHBlciA8IDAgfHwgKG4tbSkgPD0gbnVtX3VwcGVyKWBcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgeCA9IHRmLnRlbnNvcjJkKFtbIDAsICAxLCAgMiwgM10sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFstMSwgIDAsICAxLCAyXSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgWy0yLCAtMSwgIDAsIDFdLFxuICogICAgICAgICAgICAgICAgICAgICAgICBbLTMsIC0yLCAtMSwgMF1dKTtcbiAqIGxldCB5ID0gdGYubGluYWxnLmJhbmRQYXJ0KHgsIDEsIC0xKTtcbiAqIHkucHJpbnQoKTsgLy8gW1sgMCwgIDEsICAyLCAzXSxcbiAqICAgICAgICAgICAgLy8gIFstMSwgIDAsICAxLCAyXSxcbiAqICAgICAgICAgICAgLy8gIFsgMCwgLTEsICAwLCAxXSxcbiAqICAgICAgICAgICAgLy8gIFsgMCwgMCAsIC0xLCAwXV1cbiAqIGxldCB6ID0gdGYubGluYWxnLmJhbmRQYXJ0KHgsIDIsIDEpO1xuICogei5wcmludCgpOyAvLyBbWyAwLCAgMSwgIDAsIDBdLFxuICogICAgICAgICAgICAvLyAgWy0xLCAgMCwgIDEsIDBdLFxuICogICAgICAgICAgICAvLyAgWy0yLCAtMSwgIDAsIDFdLFxuICogICAgICAgICAgICAvLyAgWyAwLCAtMiwgLTEsIDBdXVxuICogYGBgXG4gKlxuICogQHBhcmFtIHggUmFuayBga2AgdGVuc29yXG4gKiBAcGFyYW0gbnVtTG93ZXIgTnVtYmVyIG9mIHN1YmRpYWdvbmFscyB0byBrZWVwLlxuICogICBJZiBuZWdhdGl2ZSwga2VlcCBlbnRpcmUgbG93ZXIgdHJpYW5nbGUuXG4gKiBAcGFyYW0gbnVtVXBwZXIgTnVtYmVyIG9mIHN1YmRpYWdvbmFscyB0byBrZWVwLlxuICogICBJZiBuZWdhdGl2ZSwga2VlcCBlbnRpcmUgdXBwZXIgdHJpYW5nbGUuXG4gKiBAcmV0dXJucyBSYW5rIGBrYCB0ZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgYXMgaW5wdXQuXG4gKiAgIFRoZSBleHRyYWN0ZWQgYmFuZGVkIHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJywgc3ViaGVhZGluZzonTGluZWFyIEFsZ2VicmEnLCBuYW1lc3BhY2U6J2xpbmFsZyd9XG4gKi9cbmZ1bmN0aW9uIGJhbmRQYXJ0XzxUIGV4dGVuZHMgVGVuc29yPihcbiAgICBhOiBUfFRlbnNvckxpa2UsIG51bUxvd2VyOiBudW1iZXJ8U2NhbGFyLCBudW1VcHBlcjogbnVtYmVyfFNjYWxhcik6IFQge1xuICBjb25zdCAkYSA9IGNvbnZlcnRUb1RlbnNvcihhLCAnYScsICdiYW5kUGFydCcpO1xuICBhc3NlcnQoXG4gICAgICAkYS5yYW5rID49IDIsXG4gICAgICAoKSA9PiBgYmFuZFBhcnQoKTogUmFuayBtdXN0IGJlIGF0IGxlYXN0IDIsIGdvdCAkeyRhLnJhbmt9LmApO1xuXG4gIGNvbnN0IHNoYXBlID0gJGEuc2hhcGU7XG4gIGNvbnN0IFtNLCBOXSA9ICRhLnNoYXBlLnNsaWNlKC0yKTtcblxuICBsZXQgJG51bUxvd2VyOiBTY2FsYXI7XG4gIGxldCAkbnVtVXBwZXI6IFNjYWxhcjtcbiAgaWYgKHR5cGVvZiBudW1Mb3dlciA9PT0gJ251bWJlcicpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIG51bUxvd2VyICUgMSA9PT0gMCxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bUxvd2VyIG11c3QgYmUgYW4gaW50ZWdlciwgZ290ICR7bnVtTG93ZXJ9LmApO1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtTG93ZXIgPD0gTSxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bUxvd2VyICgke251bUxvd2VyfSlgICtcbiAgICAgICAgICAgIGAgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2Ygcm93cyAoJHtNfSkuYCk7XG4gICAgJG51bUxvd2VyID1cbiAgICAgICAgY29udmVydFRvVGVuc29yKG51bUxvd2VyIDwgMCA/IE0gOiBudW1Mb3dlciwgJ251bUxvd2VyJywgJ2JhbmRQYXJ0JykgYXNcbiAgICAgICAgU2NhbGFyO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtTG93ZXIuZHR5cGUgPT09ICdpbnQzMicsXG4gICAgICAgICgpID0+IGBiYW5kUGFydCgpOiBudW1Mb3dlcidzIGR0eXBlIG11c3QgYmUgYW4gaW50MzIuYCk7XG4gICAgLy8gSWYgbnVtTG93ZXIgaXMgYSBTY2FsYXIsIGNoZWNraW5nIGBudW1Mb3dlciA8PSBNYCBjb3VsZCBodXJ0IHBlcmZvcm1hbmNlLFxuICAgIC8vIGJ1dCBtaW5pbXVtKG51bUxvd2VyLCBNKSBjb3VsZCBhdm9pZCB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gICAgJG51bUxvd2VyID0gd2hlcmUobGVzcyhudW1Mb3dlciwgMCksIE0sIG1pbmltdW0obnVtTG93ZXIsIE0pKSBhcyBTY2FsYXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG51bVVwcGVyID09PSAnbnVtYmVyJykge1xuICAgIGFzc2VydChcbiAgICAgICAgbnVtVXBwZXIgJSAxID09PSAwLFxuICAgICAgICAoKSA9PiBgYmFuZFBhcnQoKTogbnVtVXBwZXIgbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3QgJHtudW1VcHBlcn0uYCk7XG4gICAgYXNzZXJ0KFxuICAgICAgICBudW1VcHBlciA8PSBOLFxuICAgICAgICAoKSA9PiBgYmFuZFBhcnQoKTogbnVtVXBwZXIgKCR7bnVtVXBwZXJ9KWAgK1xuICAgICAgICAgICAgYCBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjb2x1bW5zICgke059KS5gKTtcbiAgICAkbnVtVXBwZXIgPVxuICAgICAgICBjb252ZXJ0VG9UZW5zb3IobnVtVXBwZXIgPCAwID8gTiA6IG51bVVwcGVyLCAnbnVtVXBwZXInLCAnYmFuZFBhcnQnKSBhc1xuICAgICAgICBTY2FsYXI7XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBudW1VcHBlci5kdHlwZSA9PT0gJ2ludDMyJyxcbiAgICAgICAgKCkgPT4gYGJhbmRQYXJ0KCk6IG51bVVwcGVyJ3MgZHR5cGUgbXVzdCBiZSBhbiBpbnQzMi5gKTtcbiAgICAkbnVtVXBwZXIgPSB3aGVyZShsZXNzKG51bVVwcGVyLCAwKSwgTiwgbWluaW11bShudW1VcHBlciwgTikpIGFzIFNjYWxhcjtcbiAgfVxuXG4gIGNvbnN0IGkgPSByZXNoYXBlKHJhbmdlKDAsIE0sIDEsICdpbnQzMicpLCBbLTEsIDFdKTtcbiAgY29uc3QgaiA9IHJhbmdlKDAsIE4sIDEsICdpbnQzMicpO1xuICBjb25zdCBpaiA9IHN1YihpLCBqKTtcblxuICBjb25zdCBpbkJhbmQgPVxuICAgICAgbG9naWNhbEFuZChsZXNzRXF1YWwoaWosICRudW1Mb3dlciksIGdyZWF0ZXJFcXVhbChpaiwgbmVnKCRudW1VcHBlcikpKTtcblxuICBjb25zdCB6ZXJvID0gemVyb3MoW00sIE5dLCAkYS5kdHlwZSk7XG5cbiAgcmV0dXJuIHJlc2hhcGUoXG4gICAgICAgICAgICAgc3RhY2sodW5zdGFjayhyZXNoYXBlKCRhLCBbLTEsIE0sIE5dKSlcbiAgICAgICAgICAgICAgICAgICAgICAgLm1hcChtYXQgPT4gd2hlcmUoaW5CYW5kLCBtYXQsIHplcm8pKSksXG4gICAgICAgICAgICAgc2hhcGUpIGFzIFQ7XG59XG5cbmV4cG9ydCBjb25zdCBiYW5kUGFydCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7YmFuZFBhcnRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { assert } from '../../util';\nimport { div } from '../div';\nimport { mul } from '../mul';\nimport { norm } from '../norm';\nimport { op } from '../operation';\nimport { split } from '../split';\nimport { squeeze } from '../squeeze';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\n/**\n * Gram-Schmidt orthogonalization.\n *\n * ```js\n * const x = tf.tensor2d([[1, 2], [3, 4]]);\n * let y = tf.linalg.gramSchmidt(x);\n * y.print();\n * console.log('Orthogonalized:');\n * y.dot(y.transpose()).print(); // should be nearly the identity matrix.\n * console.log('First row direction maintained:');\n * const data = await y.array();\n * console.log(data[0][1] / data[0][0]); // should be nearly 2.\n * ```\n *\n * @param xs The vectors to be orthogonalized, in one of the two following\n * formats:\n * - An Array of `tf.Tensor1D`.\n * - A `tf.Tensor2D`, i.e., a matrix, in which case the vectors are the rows\n * of `xs`.\n * In each case, all the vectors must have the same length and the length\n * must be greater than or equal to the number of vectors.\n * @returns The orthogonalized and normalized vectors or matrix.\n * Orthogonalization means that the vectors or the rows of the matrix\n * are orthogonal (zero inner products). Normalization means that each\n * vector or each row of the matrix has an L2 norm that equals `1`.\n *\n * @doc {heading:'Operations', subheading:'Linear Algebra', namespace:'linalg'}\n */\nfunction gramSchmidt_(xs) {\n let inputIsTensor2D;\n if (Array.isArray(xs)) {\n inputIsTensor2D = false;\n assert(xs != null && xs.length > 0, () => 'Gram-Schmidt process: input must not be null, undefined, or ' +\n 'empty');\n const dim = xs[0].shape[0];\n for (let i = 1; i < xs.length; ++i) {\n assert(xs[i].shape[0] === dim, () => 'Gram-Schmidt: Non-unique lengths found in the input vectors: ' +\n `(${xs[i].shape[0]} vs. ${dim})`);\n }\n }\n else {\n inputIsTensor2D = true;\n xs = split(xs, xs.shape[0], 0).map(x => squeeze(x, [0]));\n }\n assert(xs.length <= xs[0].shape[0], () => `Gram-Schmidt: Number of vectors (${xs.length}) exceeds ` +\n `number of dimensions (${xs[0].shape[0]}).`);\n const ys = [];\n const xs1d = xs;\n for (let i = 0; i < xs.length; ++i) {\n ys.push(ENGINE.tidy(() => {\n let x = xs1d[i];\n if (i > 0) {\n for (let j = 0; j < i; ++j) {\n const proj = mul(sum(mul(ys[j], x)), ys[j]);\n x = sub(x, proj);\n }\n }\n return div(x, norm(x, 'euclidean'));\n }));\n }\n if (inputIsTensor2D) {\n return stack(ys, 0);\n }\n else {\n return ys;\n }\n}\nexport const gramSchmidt = /* @__PURE__ */ op({ gramSchmidt_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhbV9zY2htaWR0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbGluYWxnL2dyYW1fc2NobWlkdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXBDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILFNBQVMsWUFBWSxDQUFDLEVBQXVCO0lBQzNDLElBQUksZUFBd0IsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDckIsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixNQUFNLENBQ0YsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0IsR0FBRyxFQUFFLENBQUMsOERBQThEO1lBQ2hFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxDQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUN0QixHQUFHLEVBQUUsQ0FDRCwrREFBK0Q7Z0JBQy9ELElBQUssRUFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUMzRDtLQUNGO1NBQU07UUFDTCxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxRDtJQUVELE1BQU0sQ0FDRixFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzNCLEdBQUcsRUFBRSxDQUFDLG9DQUNLLEVBQWlCLENBQUMsTUFBTSxZQUFZO1FBQzNDLHlCQUEwQixFQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckUsTUFBTSxFQUFFLEdBQWUsRUFBRSxDQUFDO0lBQzFCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtvQkFDMUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsQjthQUNGO1lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ0w7SUFFRCxJQUFJLGVBQWUsRUFBRTtRQUNuQixPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFhLENBQUM7S0FDakM7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7VGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge2Rpdn0gZnJvbSAnLi4vZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtub3JtfSBmcm9tICcuLi9ub3JtJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3NwbGl0fSBmcm9tICcuLi9zcGxpdCc7XG5pbXBvcnQge3NxdWVlemV9IGZyb20gJy4uL3NxdWVlemUnO1xuaW1wb3J0IHtzdGFja30gZnJvbSAnLi4vc3RhY2snO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL3N1Yic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi4vc3VtJztcblxuLyoqXG4gKiBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6YXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHggPSB0Zi50ZW5zb3IyZChbWzEsIDJdLCBbMywgNF1dKTtcbiAqIGxldCB5ID0gdGYubGluYWxnLmdyYW1TY2htaWR0KHgpO1xuICogeS5wcmludCgpO1xuICogY29uc29sZS5sb2coJ09ydGhvZ29uYWxpemVkOicpO1xuICogeS5kb3QoeS50cmFuc3Bvc2UoKSkucHJpbnQoKTsgIC8vIHNob3VsZCBiZSBuZWFybHkgdGhlIGlkZW50aXR5IG1hdHJpeC5cbiAqIGNvbnNvbGUubG9nKCdGaXJzdCByb3cgZGlyZWN0aW9uIG1haW50YWluZWQ6Jyk7XG4gKiBjb25zdCBkYXRhID0gYXdhaXQgeS5hcnJheSgpO1xuICogY29uc29sZS5sb2coZGF0YVswXVsxXSAvIGRhdGFbMF1bMF0pOyAgLy8gc2hvdWxkIGJlIG5lYXJseSAyLlxuICogYGBgXG4gKlxuICogQHBhcmFtIHhzIFRoZSB2ZWN0b3JzIHRvIGJlIG9ydGhvZ29uYWxpemVkLCBpbiBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmdcbiAqICAgZm9ybWF0czpcbiAqICAgLSBBbiBBcnJheSBvZiBgdGYuVGVuc29yMURgLlxuICogICAtIEEgYHRmLlRlbnNvcjJEYCwgaS5lLiwgYSBtYXRyaXgsIGluIHdoaWNoIGNhc2UgdGhlIHZlY3RvcnMgYXJlIHRoZSByb3dzXG4gKiAgICAgb2YgYHhzYC5cbiAqICAgSW4gZWFjaCBjYXNlLCBhbGwgdGhlIHZlY3RvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgdGhlIGxlbmd0aFxuICogICBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHZlY3RvcnMuXG4gKiBAcmV0dXJucyBUaGUgb3J0aG9nb25hbGl6ZWQgYW5kIG5vcm1hbGl6ZWQgdmVjdG9ycyBvciBtYXRyaXguXG4gKiAgIE9ydGhvZ29uYWxpemF0aW9uIG1lYW5zIHRoYXQgdGhlIHZlY3RvcnMgb3IgdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeFxuICogICBhcmUgb3J0aG9nb25hbCAoemVybyBpbm5lciBwcm9kdWN0cykuIE5vcm1hbGl6YXRpb24gbWVhbnMgdGhhdCBlYWNoXG4gKiAgIHZlY3RvciBvciBlYWNoIHJvdyBvZiB0aGUgbWF0cml4IGhhcyBhbiBMMiBub3JtIHRoYXQgZXF1YWxzIGAxYC5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJywgc3ViaGVhZGluZzonTGluZWFyIEFsZ2VicmEnLCBuYW1lc3BhY2U6J2xpbmFsZyd9XG4gKi9cbmZ1bmN0aW9uIGdyYW1TY2htaWR0Xyh4czogVGVuc29yMURbXXxUZW5zb3IyRCk6IFRlbnNvcjFEW118VGVuc29yMkQge1xuICBsZXQgaW5wdXRJc1RlbnNvcjJEOiBib29sZWFuO1xuICBpZiAoQXJyYXkuaXNBcnJheSh4cykpIHtcbiAgICBpbnB1dElzVGVuc29yMkQgPSBmYWxzZTtcbiAgICBhc3NlcnQoXG4gICAgICAgIHhzICE9IG51bGwgJiYgeHMubGVuZ3RoID4gMCxcbiAgICAgICAgKCkgPT4gJ0dyYW0tU2NobWlkdCBwcm9jZXNzOiBpbnB1dCBtdXN0IG5vdCBiZSBudWxsLCB1bmRlZmluZWQsIG9yICcgK1xuICAgICAgICAgICAgJ2VtcHR5Jyk7XG4gICAgY29uc3QgZGltID0geHNbMF0uc2hhcGVbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHhzW2ldLnNoYXBlWzBdID09PSBkaW0sXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgJ0dyYW0tU2NobWlkdDogTm9uLXVuaXF1ZSBsZW5ndGhzIGZvdW5kIGluIHRoZSBpbnB1dCB2ZWN0b3JzOiAnICtcbiAgICAgICAgICAgICAgYCgkeyh4cyBhcyBUZW5zb3IxRFtdKVtpXS5zaGFwZVswXX0gdnMuICR7ZGltfSlgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRJc1RlbnNvcjJEID0gdHJ1ZTtcbiAgICB4cyA9IHNwbGl0KHhzLCB4cy5zaGFwZVswXSwgMCkubWFwKHggPT4gc3F1ZWV6ZSh4LCBbMF0pKTtcbiAgfVxuXG4gIGFzc2VydChcbiAgICAgIHhzLmxlbmd0aCA8PSB4c1swXS5zaGFwZVswXSxcbiAgICAgICgpID0+IGBHcmFtLVNjaG1pZHQ6IE51bWJlciBvZiB2ZWN0b3JzICgke1xuICAgICAgICAgICAgICAgICh4cyBhcyBUZW5zb3IxRFtdKS5sZW5ndGh9KSBleGNlZWRzIGAgK1xuICAgICAgICAgIGBudW1iZXIgb2YgZGltZW5zaW9ucyAoJHsoeHMgYXMgVGVuc29yMURbXSlbMF0uc2hhcGVbMF19KS5gKTtcblxuICBjb25zdCB5czogVGVuc29yMURbXSA9IFtdO1xuICBjb25zdCB4czFkID0geHM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeHMubGVuZ3RoOyArK2kpIHtcbiAgICB5cy5wdXNoKEVOR0lORS50aWR5KCgpID0+IHtcbiAgICAgIGxldCB4ID0geHMxZFtpXTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGk7ICsraikge1xuICAgICAgICAgIGNvbnN0IHByb2ogPSBtdWwoc3VtKG11bCh5c1tqXSwgeCkpLCB5c1tqXSk7XG4gICAgICAgICAgeCA9IHN1Yih4LCBwcm9qKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpdih4LCBub3JtKHgsICdldWNsaWRlYW4nKSk7XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGlucHV0SXNUZW5zb3IyRCkge1xuICAgIHJldHVybiBzdGFjayh5cywgMCkgYXMgVGVuc29yMkQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHlzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBncmFtU2NobWlkdCA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Z3JhbVNjaG1pZHRffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { dispose } from '../../globals';\nimport { assert } from '../../util';\nimport { clone } from '../clone';\nimport { concat } from '../concat';\nimport { div } from '../div';\nimport { eye } from '../eye';\nimport { greater } from '../greater';\nimport { matMul } from '../mat_mul';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { norm } from '../norm';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { slice } from '../slice';\nimport { stack } from '../stack';\nimport { sub } from '../sub';\nimport { tensor2d } from '../tensor2d';\nimport { transpose } from '../transpose';\nimport { unstack } from '../unstack';\nimport { where } from '../where';\n/**\n * Compute QR decomposition of m-by-n matrix using Householder transformation.\n *\n * Implementation based on\n * [http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf]\n * (http://www.cs.cornell.edu/~bindel/class/cs6210-f09/lec18.pdf)\n *\n * ```js\n * const a = tf.tensor2d([[1, 2], [3, 4]]);\n * let [q, r] = tf.linalg.qr(a);\n * console.log('Q');\n * q.print();\n * console.log('R');\n * r.print();\n * console.log('Orthogonalized');\n * q.dot(q.transpose()).print() // should be nearly the identity matrix.\n * console.log('Reconstructed');\n * q.dot(r).print(); // should be nearly [[1, 2], [3, 4]];\n * ```\n *\n * @param x The `tf.Tensor` to be QR-decomposed. Must have rank >= 2. Suppose\n * it has the shape `[..., M, N]`.\n * @param fullMatrices An optional boolean parameter. Defaults to `false`.\n * If `true`, compute full-sized `Q`. If `false` (the default),\n * compute only the leading N columns of `Q` and `R`.\n * @returns An `Array` of two `tf.Tensor`s: `[Q, R]`. `Q` is a unitary matrix,\n * i.e., its columns all have unit norm and are mutually orthogonal.\n * If `M >= N`,\n * If `fullMatrices` is `false` (default),\n * - `Q` has a shape of `[..., M, N]`,\n * - `R` has a shape of `[..., N, N]`.\n * If `fullMatrices` is `true` (default),\n * - `Q` has a shape of `[..., M, M]`,\n * - `R` has a shape of `[..., M, N]`.\n * If `M < N`,\n * - `Q` has a shape of `[..., M, M]`,\n * - `R` has a shape of `[..., M, N]`.\n * @throws If the rank of `x` is less than 2.\n *\n * @doc {heading:'Operations',\n * subheading:'Linear Algebra',\n * namespace:'linalg'}\n */\nfunction qr_(x, fullMatrices = false) {\n assert(x.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${x.rank}`);\n if (x.rank === 2) {\n return qr2d(x, fullMatrices);\n }\n else {\n // Rank > 2.\n // TODO(cais): Below we split the input into individual 2D tensors,\n // perform QR decomposition on them and then stack the results back\n // together. We should explore whether this can be parallelized.\n const outerDimsProd = x.shape.slice(0, x.shape.length - 2)\n .reduce((value, prev) => value * prev);\n const x2ds = unstack(reshape(x, [\n outerDimsProd, x.shape[x.shape.length - 2],\n x.shape[x.shape.length - 1]\n ]), 0);\n const q2ds = [];\n const r2ds = [];\n x2ds.forEach(x2d => {\n const [q2d, r2d] = qr2d(x2d, fullMatrices);\n q2ds.push(q2d);\n r2ds.push(r2d);\n });\n const q = reshape(stack(q2ds, 0), x.shape);\n const r = reshape(stack(r2ds, 0), x.shape);\n return [q, r];\n }\n}\nfunction qr2d(x, fullMatrices = false) {\n return ENGINE.tidy(() => {\n assert(x.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${x.shape.length}D Tensor.`);\n const m = x.shape[0];\n const n = x.shape[1];\n let q = eye(m); // Orthogonal transform so far.\n let r = clone(x); // Transformed matrix so far.\n const one2D = tensor2d([[1]], [1, 1]);\n let w = clone(one2D);\n const iters = m >= n ? n : m;\n for (let j = 0; j < iters; ++j) {\n // This tidy within the for-loop ensures we clean up temporary\n // tensors as soon as they are no longer needed.\n const rTemp = r;\n const wTemp = w;\n const qTemp = q;\n [w, r, q] = ENGINE.tidy(() => {\n // Find H = I - tau * w * w', to put zeros below R(j, j).\n const rjEnd1 = slice(r, [j, j], [m - j, 1]);\n const normX = norm(rjEnd1);\n const rjj = slice(r, [j, j], [1, 1]);\n // The sign() function returns 0 on 0, which causes division by zero.\n const s = where(greater(rjj, 0), tensor2d([[-1]]), tensor2d([[1]]));\n const u1 = sub(rjj, mul(s, normX));\n const wPre = div(rjEnd1, u1);\n if (wPre.shape[0] === 1) {\n w = clone(one2D);\n }\n else {\n w = concat([\n one2D,\n slice(wPre, [1, 0], [wPre.shape[0] - 1, wPre.shape[1]])\n ], 0);\n }\n const tau = neg(div(matMul(s, u1), normX));\n // -- R := HR, Q := QH.\n const rjEndAll = slice(r, [j, 0], [m - j, n]);\n const tauTimesW = mul(tau, w);\n const wT = transpose(w);\n if (j === 0) {\n r = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));\n }\n else {\n const rTimesTau = sub(rjEndAll, matMul(tauTimesW, matMul(wT, rjEndAll)));\n r = concat([slice(r, [0, 0], [j, n]), rTimesTau], 0);\n }\n const tawTimesWT = transpose(tauTimesW);\n const qAllJEnd = slice(q, [0, j], [m, q.shape[1] - j]);\n if (j === 0) {\n q = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT));\n }\n else {\n const qTimesTau = sub(qAllJEnd, matMul(matMul(qAllJEnd, w), tawTimesWT));\n q = concat([slice(q, [0, 0], [m, j]), qTimesTau], 1);\n }\n return [w, r, q];\n });\n dispose([rTemp, wTemp, qTemp]);\n }\n if (!fullMatrices && m > n) {\n q = slice(q, [0, 0], [m, n]);\n r = slice(r, [0, 0], [n, n]);\n }\n return [q, r];\n });\n}\nexport const qr = /* @__PURE__ */ op({ qr_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9saW5hbGcvcXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMs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Q0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQ1gsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxNQUFNLFVBQVUsR0FBYSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ1gsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxTQUFTLEdBQ1gsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBeUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2V9IGZyb20gJy4uLy4uL2dsb2JhbHMnO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjJEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbXBvcnQge2Nsb25lfSBmcm9tICcuLi9jbG9uZSc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi4vY29uY2F0JztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9kaXYnO1xuaW1wb3J0IHtleWV9IGZyb20gJy4uL2V5ZSc7XG5pbXBvcnQge2dyZWF0ZXJ9IGZyb20gJy4uL2dyZWF0ZXInO1xuaW1wb3J0IHttYXRNdWx9IGZyb20gJy4uL21hdF9tdWwnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7bm9ybX0gZnJvbSAnLi4vbm9ybSc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuLi9yZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4uL3NsaWNlJztcbmltcG9ydCB7c3RhY2t9IGZyb20gJy4uL3N0YWNrJztcbmltcG9ydCB7c3VifSBmcm9tICcuLi9zdWInO1xuaW1wb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi4vdGVuc29yMmQnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4uL3RyYW5zcG9zZSc7XG5pbXBvcnQge3Vuc3RhY2t9IGZyb20gJy4uL3Vuc3RhY2snO1xuaW1wb3J0IHt3aGVyZX0gZnJvbSAnLi4vd2hlcmUnO1xuXG4vKipcbiAqIENvbXB1dGUgUVIgZGVjb21wb3NpdGlvbiBvZiBtLWJ5LW4gbWF0cml4IHVzaW5nIEhvdXNlaG9sZGVyIHRyYW5zZm9ybWF0aW9uLlxuICpcbiAqIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gKiAgIFtodHRwOi8vd3d3LmNzLmNvcm5lbGwuZWR1L35iaW5kZWwvY2xhc3MvY3M2MjEwLWYwOS9sZWMxOC5wZGZdXG4gKiAoaHR0cDovL3d3dy5jcy5jb3JuZWxsLmVkdS9+YmluZGVsL2NsYXNzL2NzNjIxMC1mMDkvbGVjMTgucGRmKVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhID0gdGYudGVuc29yMmQoW1sxLCAyXSwgWzMsIDRdXSk7XG4gKiBsZXQgW3EsIHJdID0gdGYubGluYWxnLnFyKGEpO1xuICogY29uc29sZS5sb2coJ1EnKTtcbiAqIHEucHJpbnQoKTtcbiAqIGNvbnNvbGUubG9nKCdSJyk7XG4gKiByLnByaW50KCk7XG4gKiBjb25zb2xlLmxvZygnT3J0aG9nb25hbGl6ZWQnKTtcbiAqIHEuZG90KHEudHJhbnNwb3NlKCkpLnByaW50KCkgIC8vIHNob3VsZCBiZSBuZWFybHkgdGhlIGlkZW50aXR5IG1hdHJpeC5cbiAqIGNvbnNvbGUubG9nKCdSZWNvbnN0cnVjdGVkJyk7XG4gKiBxLmRvdChyKS5wcmludCgpOyAvLyBzaG91bGQgYmUgbmVhcmx5IFtbMSwgMl0sIFszLCA0XV07XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geCBUaGUgYHRmLlRlbnNvcmAgdG8gYmUgUVItZGVjb21wb3NlZC4gTXVzdCBoYXZlIHJhbmsgPj0gMi4gU3VwcG9zZVxuICogICBpdCBoYXMgdGhlIHNoYXBlIGBbLi4uLCBNLCBOXWAuXG4gKiBAcGFyYW0gZnVsbE1hdHJpY2VzIEFuIG9wdGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICogICBJZiBgdHJ1ZWAsIGNvbXB1dGUgZnVsbC1zaXplZCBgUWAuIElmIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSxcbiAqICAgY29tcHV0ZSBvbmx5IHRoZSBsZWFkaW5nIE4gY29sdW1ucyBvZiBgUWAgYW5kIGBSYC5cbiAqIEByZXR1cm5zIEFuIGBBcnJheWAgb2YgdHdvIGB0Zi5UZW5zb3JgczogYFtRLCBSXWAuIGBRYCBpcyBhIHVuaXRhcnkgbWF0cml4LFxuICogICBpLmUuLCBpdHMgY29sdW1ucyBhbGwgaGF2ZSB1bml0IG5vcm0gYW5kIGFyZSBtdXR1YWxseSBvcnRob2dvbmFsLlxuICogICBJZiBgTSA+PSBOYCxcbiAqICAgICBJZiBgZnVsbE1hdHJpY2VzYCBpcyBgZmFsc2VgIChkZWZhdWx0KSxcbiAqICAgICAgIC0gYFFgIGhhcyBhIHNoYXBlIG9mIGBbLi4uLCBNLCBOXWAsXG4gKiAgICAgICAtIGBSYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTiwgTl1gLlxuICogICAgIElmIGBmdWxsTWF0cmljZXNgIGlzIGB0cnVlYCAoZGVmYXVsdCksXG4gKiAgICAgICAtIGBRYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTSwgTV1gLFxuICogICAgICAgLSBgUmAgaGFzIGEgc2hhcGUgb2YgYFsuLi4sIE0sIE5dYC5cbiAqICAgSWYgYE0gPCBOYCxcbiAqICAgICAtIGBRYCBoYXMgYSBzaGFwZSBvZiBgWy4uLiwgTSwgTV1gLFxuICogICAgIC0gYFJgIGhhcyBhIHNoYXBlIG9mIGBbLi4uLCBNLCBOXWAuXG4gKiBAdGhyb3dzIElmIHRoZSByYW5rIG9mIGB4YCBpcyBsZXNzIHRoYW4gMi5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOidPcGVyYXRpb25zJyxcbiAqICAgICAgIHN1YmhlYWRpbmc6J0xpbmVhciBBbGdlYnJhJyxcbiAqICAgICAgIG5hbWVzcGFjZTonbGluYWxnJ31cbiAqL1xuZnVuY3Rpb24gcXJfKHg6IFRlbnNvciwgZnVsbE1hdHJpY2VzID0gZmFsc2UpOiBbVGVuc29yLCBUZW5zb3JdIHtcbiAgYXNzZXJ0KFxuICAgICAgeC5yYW5rID49IDIsXG4gICAgICAoKSA9PiBgcXIoKSByZXF1aXJlcyBpbnB1dCB0ZW5zb3IgdG8gaGF2ZSBhIHJhbmsgPj0gMiwgYnV0IGdvdCByYW5rICR7XG4gICAgICAgICAgeC5yYW5rfWApO1xuXG4gIGlmICh4LnJhbmsgPT09IDIpIHtcbiAgICByZXR1cm4gcXIyZCh4IGFzIFRlbnNvcjJELCBmdWxsTWF0cmljZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFJhbmsgPiAyLlxuICAgIC8vIFRPRE8oY2Fpcyk6IEJlbG93IHdlIHNwbGl0IHRoZSBpbnB1dCBpbnRvIGluZGl2aWR1YWwgMkQgdGVuc29ycyxcbiAgICAvLyAgIHBlcmZvcm0gUVIgZGVjb21wb3NpdGlvbiBvbiB0aGVtIGFuZCB0aGVuIHN0YWNrIHRoZSByZXN1bHRzIGJhY2tcbiAgICAvLyAgIHRvZ2V0aGVyLiBXZSBzaG91bGQgZXhwbG9yZSB3aGV0aGVyIHRoaXMgY2FuIGJlIHBhcmFsbGVsaXplZC5cbiAgICBjb25zdCBvdXRlckRpbXNQcm9kID0geC5zaGFwZS5zbGljZSgwLCB4LnNoYXBlLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKCh2YWx1ZSwgcHJldikgPT4gdmFsdWUgKiBwcmV2KTtcbiAgICBjb25zdCB4MmRzID0gdW5zdGFjayhcbiAgICAgICAgcmVzaGFwZShcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIG91dGVyRGltc1Byb2QsIHguc2hhcGVbeC5zaGFwZS5sZW5ndGggLSAyXSxcbiAgICAgICAgICAgICAgeC5zaGFwZVt4LnNoYXBlLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgMCk7XG4gICAgY29uc3QgcTJkczogVGVuc29yMkRbXSA9IFtdO1xuICAgIGNvbnN0IHIyZHM6IFRlbnNvcjJEW10gPSBbXTtcbiAgICB4MmRzLmZvckVhY2goeDJkID0+IHtcbiAgICAgIGNvbnN0IFtxMmQsIHIyZF0gPSBxcjJkKHgyZCBhcyBUZW5zb3IyRCwgZnVsbE1hdHJpY2VzKTtcbiAgICAgIHEyZHMucHVzaChxMmQpO1xuICAgICAgcjJkcy5wdXNoKHIyZCk7XG4gICAgfSk7XG4gICAgY29uc3QgcSA9IHJlc2hhcGUoc3RhY2socTJkcywgMCksIHguc2hhcGUpO1xuICAgIGNvbnN0IHIgPSByZXNoYXBlKHN0YWNrKHIyZHMsIDApLCB4LnNoYXBlKTtcbiAgICByZXR1cm4gW3EsIHJdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHFyMmQoeDogVGVuc29yMkQsIGZ1bGxNYXRyaWNlcyA9IGZhbHNlKTogW1RlbnNvcjJELCBUZW5zb3IyRF0ge1xuICByZXR1cm4gRU5HSU5FLnRpZHkoKCkgPT4ge1xuICAgIGFzc2VydChcbiAgICAgICAgeC5zaGFwZS5sZW5ndGggPT09IDIsXG4gICAgICAgICgpID0+IGBxcjJkKCkgcmVxdWlyZXMgYSAyRCBUZW5zb3IsIGJ1dCBnb3QgYSAke1xuICAgICAgICAgICAgeC5zaGFwZS5sZW5ndGh9RCBUZW5zb3IuYCk7XG5cbiAgICBjb25zdCBtID0geC5zaGFwZVswXTtcbiAgICBjb25zdCBuID0geC5zaGFwZVsxXTtcblxuICAgIGxldCBxID0gZXllKG0pOyAgICAvLyBPcnRob2dvbmFsIHRyYW5zZm9ybSBzbyBmYXIuXG4gICAgbGV0IHIgPSBjbG9uZSh4KTsgIC8vIFRyYW5zZm9ybWVkIG1hdHJpeCBzbyBmYXIuXG5cbiAgICBjb25zdCBvbmUyRCA9IHRlbnNvcjJkKFtbMV1dLCBbMSwgMV0pO1xuICAgIGxldCB3OiBUZW5zb3IyRCA9IGNsb25lKG9uZTJEKTtcblxuICAgIGNvbnN0IGl0ZXJzID0gbSA+PSBuID8gbiA6IG07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpdGVyczsgKytqKSB7XG4gICAgICAvLyBUaGlzIHRpZHkgd2l0aGluIHRoZSBmb3ItbG9vcCBlbnN1cmVzIHdlIGNsZWFuIHVwIHRlbXBvcmFyeVxuICAgICAgLy8gdGVuc29ycyBhcyBzb29uIGFzIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuXG4gICAgICBjb25zdCByVGVtcCA9IHI7XG4gICAgICBjb25zdCB3VGVtcCA9IHc7XG4gICAgICBjb25zdCBxVGVtcCA9IHE7XG4gICAgICBbdywgciwgcV0gPSBFTkdJTkUudGlkeSgoKTogW1RlbnNvcjJELCBUZW5zb3IyRCwgVGVuc29yMkRdID0+IHtcbiAgICAgICAgLy8gRmluZCBIID0gSSAtIHRhdSAqIHcgKiB3JywgdG8gcHV0IHplcm9zIGJlbG93IFIoaiwgaikuXG4gICAgICAgIGNvbnN0IHJqRW5kMSA9IHNsaWNlKHIsIFtqLCBqXSwgW20gLSBqLCAxXSk7XG4gICAgICAgIGNvbnN0IG5vcm1YID0gbm9ybShyakVuZDEpO1xuICAgICAgICBjb25zdCByamogPSBzbGljZShyLCBbaiwgal0sIFsxLCAxXSk7XG5cbiAgICAgICAgLy8gVGhlIHNpZ24oKSBmdW5jdGlvbiByZXR1cm5zIDAgb24gMCwgd2hpY2ggY2F1c2VzIGRpdmlzaW9uIGJ5IHplcm8uXG4gICAgICAgIGNvbnN0IHMgPSB3aGVyZShncmVhdGVyKHJqaiwgMCksIHRlbnNvcjJkKFtbLTFdXSksIHRlbnNvcjJkKFtbMV1dKSk7XG5cbiAgICAgICAgY29uc3QgdTEgPSBzdWIocmpqLCBtdWwocywgbm9ybVgpKTtcbiAgICAgICAgY29uc3Qgd1ByZSA9IGRpdihyakVuZDEsIHUxKTtcbiAgICAgICAgaWYgKHdQcmUuc2hhcGVbMF0gPT09IDEpIHtcbiAgICAgICAgICB3ID0gY2xvbmUob25lMkQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHcgPSBjb25jYXQoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBvbmUyRCxcbiAgICAgICAgICAgICAgICBzbGljZSh3UHJlLCBbMSwgMF0sIFt3UHJlLnNoYXBlWzBdIC0gMSwgd1ByZS5zaGFwZVsxXV0pIGFzXG4gICAgICAgICAgICAgICAgICAgIFRlbnNvcjJEXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhdSA9IG5lZyhkaXYobWF0TXVsKHMsIHUxKSwgbm9ybVgpKSBhcyBUZW5zb3IyRDtcblxuICAgICAgICAvLyAtLSBSIDo9IEhSLCBRIDo9IFFILlxuICAgICAgICBjb25zdCByakVuZEFsbCA9IHNsaWNlKHIsIFtqLCAwXSwgW20gLSBqLCBuXSk7XG4gICAgICAgIGNvbnN0IHRhdVRpbWVzVzogVGVuc29yMkQgPSBtdWwodGF1LCB3KTtcbiAgICAgICAgY29uc3Qgd1Q6IFRlbnNvcjJEID0gdHJhbnNwb3NlKHcpO1xuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIHIgPSBzdWIocmpFbmRBbGwsIG1hdE11bCh0YXVUaW1lc1csIG1hdE11bCh3VCwgcmpFbmRBbGwpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgclRpbWVzVGF1OiBUZW5zb3IyRCA9XG4gICAgICAgICAgICAgIHN1YihyakVuZEFsbCwgbWF0TXVsKHRhdVRpbWVzVywgbWF0TXVsKHdULCByakVuZEFsbCkpKTtcbiAgICAgICAgICByID0gY29uY2F0KFtzbGljZShyLCBbMCwgMF0sIFtqLCBuXSksIHJUaW1lc1RhdV0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhd1RpbWVzV1Q6IFRlbnNvcjJEID0gdHJhbnNwb3NlKHRhdVRpbWVzVyk7XG4gICAgICAgIGNvbnN0IHFBbGxKRW5kID0gc2xpY2UocSwgWzAsIGpdLCBbbSwgcS5zaGFwZVsxXSAtIGpdKTtcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICBxID0gc3ViKHFBbGxKRW5kLCBtYXRNdWwobWF0TXVsKHFBbGxKRW5kLCB3KSwgdGF3VGltZXNXVCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHFUaW1lc1RhdTogVGVuc29yMkQgPVxuICAgICAgICAgICAgICBzdWIocUFsbEpFbmQsIG1hdE11bChtYXRNdWwocUFsbEpFbmQsIHcpLCB0YXdUaW1lc1dUKSk7XG4gICAgICAgICAgcSA9IGNvbmNhdChbc2xpY2UocSwgWzAsIDBdLCBbbSwgal0pLCBxVGltZXNUYXVdLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3csIHIsIHFdO1xuICAgICAgfSk7XG4gICAgICBkaXNwb3NlKFtyVGVtcCwgd1RlbXAsIHFUZW1wXSk7XG4gICAgfVxuXG4gICAgaWYgKCFmdWxsTWF0cmljZXMgJiYgbSA+IG4pIHtcbiAgICAgIHEgPSBzbGljZShxLCBbMCwgMF0sIFttLCBuXSk7XG4gICAgICByID0gc2xpY2UociwgWzAsIDBdLCBbbiwgbl0pO1xuICAgIH1cblxuICAgIHJldHVybiBbcSwgcl07XG4gIH0pIGFzIFtUZW5zb3IyRCwgVGVuc29yMkRdO1xufVxuXG5leHBvcnQgY29uc3QgcXIgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3FyX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var Reduction;\n(function (Reduction) {\n Reduction[Reduction[\"NONE\"] = 0] = \"NONE\";\n Reduction[Reduction[\"MEAN\"] = 1] = \"MEAN\";\n Reduction[Reduction[\"SUM\"] = 2] = \"SUM\";\n Reduction[Reduction[\"SUM_BY_NONZERO_WEIGHTS\"] = 3] = \"SUM_BY_NONZERO_WEIGHTS\";\n})(Reduction || (Reduction = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9zc19vcHNfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3NzX29wc191dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQU4sSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLHlDQUFJLENBQUE7SUFDSix5Q0FBSSxDQUFBO0lBQ0osdUNBQUcsQ0FBQTtJQUNILDZFQUFzQixDQUFBO0FBQ3hCLENBQUMsRUFMVyxTQUFTLEtBQVQsU0FBUyxRQUtwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuZXhwb3J0IGVudW0gUmVkdWN0aW9uIHtcbiAgTk9ORSxcbiAgTUVBTixcbiAgU1VNLFxuICBTVU1fQllfTk9OWkVST19XRUlHSFRTXG59XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { cast } from '../cast';\nimport { div } from '../div';\nimport { Reduction } from '../loss_ops_utils';\nimport { mean } from '../mean';\nimport { mul } from '../mul';\nimport { notEqual } from '../not_equal';\nimport { ones } from '../ones';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sum } from '../sum';\n/**\n * Computes the weighted loss between two tensors.\n *\n * @param losses Tensor of shape `[batch_size, d1, ..., dN]`.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `losses`, and must be broadcastable to `losses` (i.e., all\n * dimensions must be either `1`, or the same as the corresponding\n * `losses` dimension).\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction computeWeightedLoss_(losses, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $losses = convertToTensor(losses, 'losses', 'computeWeightedLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'computeWeightedLoss');\n }\n const weightedLoss = ($weights == null) ? $losses : mul($losses, $weights);\n if (reduction === Reduction.NONE) {\n return weightedLoss;\n }\n if (reduction === Reduction.SUM) {\n return sum(weightedLoss);\n }\n if (reduction === Reduction.MEAN) {\n if ($weights == null) {\n return mean(weightedLoss);\n }\n else {\n const broadcastFactor = $losses.size / $weights.size;\n const result = div(sum(weightedLoss), sum($weights));\n return broadcastFactor > 1 ? div(result, scalar(broadcastFactor)) :\n result;\n }\n }\n if (reduction === Reduction.SUM_BY_NONZERO_WEIGHTS) {\n if ($weights == null) {\n return div(sum(weightedLoss), scalar($losses.size));\n }\n else {\n const broadcastedWeights = mul($weights, ones($losses.shape));\n const numNonZeros = cast(sum(notEqual(broadcastedWeights, scalar(0))), 'float32');\n return div(sum(weightedLoss), numNonZeros);\n }\n }\n throw Error(`Unknown reduction: ${reduction}`);\n}\nexport const computeWeightedLoss = /* @__PURE__ */ op({ computeWeightedLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZV93ZWlnaHRlZF9sb3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQjs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDekIsTUFBb0IsRUFBRSxPQUEyQixFQUNqRCxTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pFLElBQUksUUFBUSxHQUFXLElBQUksQ0FBQztJQUM1QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDdkU7SUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTNFLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFDaEMsT0FBTyxZQUFpQixDQUFDO0tBQzFCO0lBQ0QsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMxQjtJQUNELElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7UUFDaEMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDckQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRCxPQUFPLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBVyxDQUFDO1NBQzFDO0tBQ0Y7SUFDRCxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7UUFDbEQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFOUQsTUFBTSxXQUFXLEdBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUM7S0FDRjtJQUVELE1BQU0sS0FBSyxDQUFDLHNCQUFzQixTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsb0JBQW9CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2Nhc3QnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttZWFufSBmcm9tICcuLi9tZWFuJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtub3RFcXVhbH0gZnJvbSAnLi4vbm90X2VxdWFsJztcbmltcG9ydCB7b25lc30gZnJvbSAnLi4vb25lcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi4vc3VtJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgd2VpZ2h0ZWQgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIEBwYXJhbSBsb3NzZXMgVGVuc29yIG9mIHNoYXBlIGBbYmF0Y2hfc2l6ZSwgZDEsIC4uLiwgZE5dYC5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbG9zc2VzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbG9zc2VzYCAoaS5lLiwgYWxsXG4gKiAgICBkaW1lbnNpb25zIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqICAgIGBsb3NzZXNgIGRpbWVuc2lvbikuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ0xvc3NlcycsIG5hbWVzcGFjZTogJ2xvc3Nlcyd9XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVXZWlnaHRlZExvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxvc3NlczogVHxUZW5zb3JMaWtlLCB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxvc3NlcyA9IGNvbnZlcnRUb1RlbnNvcihsb3NzZXMsICdsb3NzZXMnLCAnY29tcHV0ZVdlaWdodGVkTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdjb21wdXRlV2VpZ2h0ZWRMb3NzJyk7XG4gIH1cblxuICBjb25zdCB3ZWlnaHRlZExvc3MgPSAoJHdlaWdodHMgPT0gbnVsbCkgPyAkbG9zc2VzIDogbXVsKCRsb3NzZXMsICR3ZWlnaHRzKTtcblxuICBpZiAocmVkdWN0aW9uID09PSBSZWR1Y3Rpb24uTk9ORSkge1xuICAgIHJldHVybiB3ZWlnaHRlZExvc3MgYXMgTztcbiAgfVxuICBpZiAocmVkdWN0aW9uID09PSBSZWR1Y3Rpb24uU1VNKSB7XG4gICAgcmV0dXJuIHN1bSh3ZWlnaHRlZExvc3MpO1xuICB9XG4gIGlmIChyZWR1Y3Rpb24gPT09IFJlZHVjdGlvbi5NRUFOKSB7XG4gICAgaWYgKCR3ZWlnaHRzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBtZWFuKHdlaWdodGVkTG9zcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdEZhY3RvciA9ICRsb3NzZXMuc2l6ZSAvICR3ZWlnaHRzLnNpemU7XG4gICAgICBjb25zdCByZXN1bHQgPSBkaXYoc3VtKHdlaWdodGVkTG9zcyksIHN1bSgkd2VpZ2h0cykpO1xuICAgICAgcmV0dXJuIGJyb2FkY2FzdEZhY3RvciA+IDEgPyBkaXYocmVzdWx0LCBzY2FsYXIoYnJvYWRjYXN0RmFjdG9yKSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgYXMgTztcbiAgICB9XG4gIH1cbiAgaWYgKHJlZHVjdGlvbiA9PT0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpIHtcbiAgICBpZiAoJHdlaWdodHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRpdihzdW0od2VpZ2h0ZWRMb3NzKSwgc2NhbGFyKCRsb3NzZXMuc2l6ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RlZFdlaWdodHMgPSBtdWwoJHdlaWdodHMsIG9uZXMoJGxvc3Nlcy5zaGFwZSkpO1xuXG4gICAgICBjb25zdCBudW1Ob25aZXJvcyA9XG4gICAgICAgICAgY2FzdChzdW0obm90RXF1YWwoYnJvYWRjYXN0ZWRXZWlnaHRzLCBzY2FsYXIoMCkpKSwgJ2Zsb2F0MzInKTtcbiAgICAgIHJldHVybiBkaXYoc3VtKHdlaWdodGVkTG9zcyksIG51bU5vblplcm9zKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBFcnJvcihgVW5rbm93biByZWR1Y3Rpb246ICR7cmVkdWN0aW9ufWApO1xufVxuZXhwb3J0IGNvbnN0IGNvbXB1dGVXZWlnaHRlZExvc3MgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2NvbXB1dGVXZWlnaHRlZExvc3NffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { Reduction } from '../loss_ops_utils';\nimport { op } from '../operation';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the absolute difference loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction absoluteDifference_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'absoluteDifference');\n const $predictions = convertToTensor(predictions, 'predictions', 'absoluteDifference');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'absoluteDifference');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in absoluteDifference: ');\n const losses = abs(sub($labels, $predictions));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const absoluteDifference = /* @__PURE__ */ op({ absoluteDifference_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzb2x1dGVfZGlmZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9hYnNvbHV0ZV9kaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDeEIsTUFBb0IsRUFBRSxXQUF5QixFQUMvQyxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztLQUN0RTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBRXhFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0MsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsbUJBQW1CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9hYnMnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIEBwYXJhbSBsYWJlbHMgVGhlIGdyb3VuZCB0cnV0aCBvdXRwdXQgdGVuc29yLCBzYW1lIGRpbWVuc2lvbnMgYXNcbiAqICAgICdwcmVkaWN0aW9ucycuXG4gKiBAcGFyYW0gcHJlZGljdGlvbnMgVGhlIHByZWRpY3RlZCBvdXRwdXRzLlxuICogQHBhcmFtIHdlaWdodHMgVGVuc29yIHdob3NlIHJhbmsgaXMgZWl0aGVyIDAsIG9yIHRoZSBzYW1lIHJhbmsgYXNcbiAqICAgIGBsYWJlbHNgLCBhbmQgbXVzdCBiZSBicm9hZGNhc3RhYmxlIHRvIGBsYWJlbHNgIChpLmUuLCBhbGwgZGltZW5zaW9uc1xuICogICAgbXVzdCBiZSBlaXRoZXIgYDFgLCBvciB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBgbG9zc2VzYFxuICogICAgZGltZW5zaW9uKS5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ0xvc3NlcycsIG5hbWVzcGFjZTogJ2xvc3Nlcyd9XG4gKi9cbmZ1bmN0aW9uIGFic29sdXRlRGlmZmVyZW5jZV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ2Fic29sdXRlRGlmZmVyZW5jZScpO1xuICBjb25zdCAkcHJlZGljdGlvbnMgPVxuICAgICAgY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnYWJzb2x1dGVEaWZmZXJlbmNlJyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2Fic29sdXRlRGlmZmVyZW5jZScpO1xuICB9XG4gIGFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gYWJzb2x1dGVEaWZmZXJlbmNlOiAnKTtcblxuICBjb25zdCBsb3NzZXMgPSBhYnMoc3ViKCRsYWJlbHMsICRwcmVkaWN0aW9ucykpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3QgYWJzb2x1dGVEaWZmZXJlbmNlID0gLyogQF9fUFVSRV9fICovIG9wKHthYnNvbHV0ZURpZmZlcmVuY2VffSk7XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the cosine distance loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param axis The dimension along which the cosine distance is computed.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction cosineDistance_(labels, predictions, axis, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'cosineDistance');\n const $predictions = convertToTensor(predictions, 'predictions', 'cosineDistance');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'cosineDistance');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in cosineDistance: ');\n const one = scalar(1);\n const losses = sub(one, sum(mul($labels, $predictions), axis, true));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const cosineDistance = /* @__PURE__ */ op({ cosineDistance_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zaW5lX2Rpc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL2Nvc2luZV9kaXN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQVMsZUFBZSxDQUNwQixNQUFvQixFQUFFLFdBQXlCLEVBQUUsSUFBWSxFQUM3RCxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztLQUNsRTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcbmltcG9ydCB7c3VtfSBmcm9tICcuLi9zdW0nO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgY29zaW5lIGRpc3RhbmNlIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSBheGlzIFRoZSBkaW1lbnNpb24gYWxvbmcgd2hpY2ggdGhlIGNvc2luZSBkaXN0YW5jZSBpcyBjb21wdXRlZC5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBjb3NpbmVEaXN0YW5jZV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsIGF4aXM6IG51bWJlcixcbiAgICB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnY29zaW5lRGlzdGFuY2UnKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2Nvc2luZURpc3RhbmNlJyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ2Nvc2luZURpc3RhbmNlJyk7XG4gIH1cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBjb3NpbmVEaXN0YW5jZTogJyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBsb3NzZXMgPSBzdWIob25lLCBzdW0obXVsKCRsYWJlbHMsICRwcmVkaWN0aW9ucyksIGF4aXMsIHRydWUpKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBjb3NpbmVEaXN0YW5jZSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7Y29zaW5lRGlzdGFuY2VffSk7XG4iXX0=","import { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { relu } from '../relu';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the Hinge loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction hingeLoss_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $labels = convertToTensor(labels, 'labels', 'hingeLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'hingeLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'hingeLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in hingeLoss: ');\n const one = scalar(1);\n // Convert binary labels to (-1, 1)\n $labels = sub(mul(scalar(2), $labels), one);\n const losses = relu(sub(one, mul($labels, $predictions)));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const hingeLoss = /* @__PURE__ */ op({ hingeLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGluZ2VfbG9zcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9oaW5nZV9sb3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDaEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFM0IsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLFVBQVUsQ0FDZixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQzNCLFNBQVMsR0FBRyxTQUFTLENBQUMsc0JBQXNCO0lBQzlDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlFLElBQUksUUFBUSxHQUFXLElBQUksQ0FBQztJQUM1QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsUUFBUSxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFFN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLG1DQUFtQztJQUNuQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFDRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7UmVkdWN0aW9ufSBmcm9tICcuLi9sb3NzX29wc191dGlscyc7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vbXVsJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlbHV9IGZyb20gJy4uL3JlbHUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIEhpbmdlIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBoaW5nZUxvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxhYmVsczogVHxUZW5zb3JMaWtlLCBwcmVkaWN0aW9uczogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSxcbiAgICByZWR1Y3Rpb24gPSBSZWR1Y3Rpb24uU1VNX0JZX05PTlpFUk9fV0VJR0hUUyk6IE8ge1xuICBsZXQgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnaGluZ2VMb3NzJyk7XG4gIGNvbnN0ICRwcmVkaWN0aW9ucyA9IGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2hpbmdlTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdoaW5nZUxvc3MnKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaCgkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBoaW5nZUxvc3M6ICcpO1xuXG4gIGNvbnN0IG9uZSA9IHNjYWxhcigxKTtcbiAgLy8gQ29udmVydCBiaW5hcnkgbGFiZWxzIHRvICgtMSwgMSlcbiAgJGxhYmVscyA9IHN1YihtdWwoc2NhbGFyKDIpLCAkbGFiZWxzKSwgb25lKTtcbiAgY29uc3QgbG9zc2VzID0gcmVsdShzdWIob25lLCBtdWwoJGxhYmVscywgJHByZWRpY3Rpb25zKSkpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IGhpbmdlTG9zcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aGluZ2VMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { add } from '../add';\nimport { Reduction } from '../loss_ops_utils';\nimport { minimum } from '../minimum';\nimport { mul } from '../mul';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { square } from '../square';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the Huber loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param delta Point where Huber loss changes from quadratic to linear.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`.\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction huberLoss_(labels, predictions, weights, delta = 1.0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'huberLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'huberLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'huberLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in huberLoss: ');\n const deltaScalar = scalar(delta);\n const error = abs(sub($predictions, $labels));\n const quadratic = minimum(error, deltaScalar);\n const linear = sub(error, quadratic);\n const losses = add(mul(scalar(0.5), square(quadratic)), mul(deltaScalar, linear));\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const huberLoss = /* @__PURE__ */ op({ huberLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHViZXJfbG9zcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2xvc3Nlcy9odWJlcl9sb3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFVBQVUsQ0FDZixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFDeEMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDL0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDN0Q7SUFDRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge2Fzc2VydFNoYXBlc01hdGNofSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9hYnMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL2FkZCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttaW5pbXVtfSBmcm9tICcuLi9taW5pbXVtJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcbmltcG9ydCB7c2NhbGFyfSBmcm9tICcuLi9zY2FsYXInO1xuaW1wb3J0IHtzcXVhcmV9IGZyb20gJy4uL3NxdWFyZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIEh1YmVyIGxvc3MgYmV0d2VlbiB0d28gdGVuc29ycy5cbiAqXG4gKiBAcGFyYW0gbGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciwgc2FtZSBkaW1lbnNpb25zIGFzXG4gKiAgICAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIHByZWRpY3Rpb25zIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gZGVsdGEgUG9pbnQgd2hlcmUgSHViZXIgbG9zcyBjaGFuZ2VzIGZyb20gcXVhZHJhdGljIHRvIGxpbmVhci5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBodWJlckxvc3NfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIGxhYmVsczogVHxUZW5zb3JMaWtlLCBwcmVkaWN0aW9uczogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSwgZGVsdGEgPSAxLjAsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9IGNvbnZlcnRUb1RlbnNvcihsYWJlbHMsICdsYWJlbHMnLCAnaHViZXJMb3NzJyk7XG4gIGNvbnN0ICRwcmVkaWN0aW9ucyA9IGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ2h1YmVyTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdodWJlckxvc3MnKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaCgkbGFiZWxzLnNoYXBlLCAkcHJlZGljdGlvbnMuc2hhcGUsICdFcnJvciBpbiBodWJlckxvc3M6ICcpO1xuXG4gIGNvbnN0IGRlbHRhU2NhbGFyID0gc2NhbGFyKGRlbHRhKTtcbiAgY29uc3QgZXJyb3IgPSBhYnMoc3ViKCRwcmVkaWN0aW9ucywgJGxhYmVscykpO1xuICBjb25zdCBxdWFkcmF0aWMgPSBtaW5pbXVtKGVycm9yLCBkZWx0YVNjYWxhcik7XG4gIGNvbnN0IGxpbmVhciA9IHN1YihlcnJvciwgcXVhZHJhdGljKTtcblxuICBjb25zdCBsb3NzZXMgPVxuICAgICAgYWRkKG11bChzY2FsYXIoMC41KSwgc3F1YXJlKHF1YWRyYXRpYykpLCBtdWwoZGVsdGFTY2FsYXIsIGxpbmVhcikpO1xuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuZXhwb3J0IGNvbnN0IGh1YmVyTG9zcyA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7aHViZXJMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { add } from '../add';\nimport { log } from '../log';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the log loss between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param epsilon A small increment to avoid taking log of zero\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction logLoss_(labels, predictions, weights, epsilon = 1e-7, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'logLoss');\n const $predictions = convertToTensor(predictions, 'predictions', 'logLoss');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'logLoss');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in logLoss: ');\n const one = scalar(1);\n const epsilonScalar = scalar(epsilon);\n const l1 = neg(mul($labels, log(add($predictions, epsilonScalar))));\n const l2 = mul(sub(one, $labels), log(add(sub(one, $predictions), epsilonScalar)));\n const losses = sub(l1, l2);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const logLoss = /* @__PURE__ */ op({ logLoss_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX2xvc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9sb3NzZXMvbG9nX2xvc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUzQixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFTLFFBQVEsQ0FDYixNQUFvQixFQUFFLFdBQXlCLEVBQy9DLE9BQTJCLEVBQUUsT0FBTyxHQUFHLElBQUksRUFDM0MsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUUzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sRUFBRSxHQUNKLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vYWRkJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi9sb2cnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9tdWwnO1xuaW1wb3J0IHtuZWd9IGZyb20gJy4uL25lZyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGxvZyBsb3NzIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogQHBhcmFtIGxhYmVscyBUaGUgZ3JvdW5kIHRydXRoIG91dHB1dCB0ZW5zb3IsIHNhbWUgZGltZW5zaW9ucyBhc1xuICogICAgJ3ByZWRpY3Rpb25zJy5cbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgdGhlIHNhbWUgcmFuayBhc1xuICogICAgYGxhYmVsc2AsIGFuZCBtdXN0IGJlIGJyb2FkY2FzdGFibGUgdG8gYGxhYmVsc2AgKGkuZS4sIGFsbCBkaW1lbnNpb25zXG4gKiAgICBtdXN0IGJlIGVpdGhlciBgMWAsIG9yIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGBsb3NzZXNgXG4gKiAgICBkaW1lbnNpb24pLlxuICogQHBhcmFtIGVwc2lsb24gQSBzbWFsbCBpbmNyZW1lbnQgdG8gYXZvaWQgdGFraW5nIGxvZyBvZiB6ZXJvXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnfVxuICovXG5mdW5jdGlvbiBsb2dMb3NzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFR8VGVuc29yTGlrZSwgcHJlZGljdGlvbnM6IFR8VGVuc29yTGlrZSxcbiAgICB3ZWlnaHRzPzogVGVuc29yfFRlbnNvckxpa2UsIGVwc2lsb24gPSAxZS03LFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ2xvZ0xvc3MnKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID0gY29udmVydFRvVGVuc29yKHByZWRpY3Rpb25zLCAncHJlZGljdGlvbnMnLCAnbG9nTG9zcycpO1xuICBsZXQgJHdlaWdodHM6IFRlbnNvciA9IG51bGw7XG4gIGlmICh3ZWlnaHRzICE9IG51bGwpIHtcbiAgICAkd2VpZ2h0cyA9IGNvbnZlcnRUb1RlbnNvcih3ZWlnaHRzLCAnd2VpZ2h0cycsICdsb2dMb3NzJyk7XG4gIH1cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gbG9nTG9zczogJyk7XG5cbiAgY29uc3Qgb25lID0gc2NhbGFyKDEpO1xuICBjb25zdCBlcHNpbG9uU2NhbGFyID0gc2NhbGFyKGVwc2lsb24pO1xuXG4gIGNvbnN0IGwxID0gbmVnKG11bCgkbGFiZWxzLCBsb2coYWRkKCRwcmVkaWN0aW9ucywgZXBzaWxvblNjYWxhcikpKSk7XG4gIGNvbnN0IGwyID1cbiAgICAgIG11bChzdWIob25lLCAkbGFiZWxzKSwgbG9nKGFkZChzdWIob25lLCAkcHJlZGljdGlvbnMpLCBlcHNpbG9uU2NhbGFyKSkpO1xuICBjb25zdCBsb3NzZXMgPSBzdWIobDEsIGwyKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBsb2dMb3NzID0gLyogQF9fUFVSRV9fICovIG9wKHtsb2dMb3NzX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { Reduction } from '../loss_ops_utils';\nimport { op } from '../operation';\nimport { squaredDifference } from '../squared_difference';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes the mean squared error between two tensors.\n *\n * @param labels The ground truth output tensor, same dimensions as\n * 'predictions'.\n * @param predictions The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc {heading: 'Training', subheading: 'Losses', namespace: 'losses'}\n */\nfunction meanSquaredError_(labels, predictions, weights, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n const $labels = convertToTensor(labels, 'labels', 'meanSquaredError');\n const $predictions = convertToTensor(predictions, 'predictions', 'meanSquaredError');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'meanSquaredError');\n }\n assertShapesMatch($labels.shape, $predictions.shape, 'Error in meanSquaredError: ');\n const losses = squaredDifference($labels, $predictions);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const meanSquaredError = /* @__PURE__ */ op({ meanSquaredError_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhbl9zcXVhcmVkX2Vycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL21lYW5fc3F1YXJlZF9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDdEIsTUFBb0IsRUFBRSxXQUF5QixFQUMvQyxPQUEyQixFQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLHNCQUFzQjtJQUM5QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sWUFBWSxHQUNkLGVBQWUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDcEUsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQzVCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtRQUNuQixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztLQUNwRTtJQUNELGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7YXNzZXJ0U2hhcGVzTWF0Y2h9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHtSZWR1Y3Rpb259IGZyb20gJy4uL2xvc3Nfb3BzX3V0aWxzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3NxdWFyZWREaWZmZXJlbmNlfSBmcm9tICcuLi9zcXVhcmVkX2RpZmZlcmVuY2UnO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBzcXVhcmVkIGVycm9yIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogQHBhcmFtIGxhYmVscyBUaGUgZ3JvdW5kIHRydXRoIG91dHB1dCB0ZW5zb3IsIHNhbWUgZGltZW5zaW9ucyBhc1xuICogICAgJ3ByZWRpY3Rpb25zJy5cbiAqIEBwYXJhbSBwcmVkaWN0aW9ucyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgdGhlIHNhbWUgcmFuayBhc1xuICogICAgYGxhYmVsc2AsIGFuZCBtdXN0IGJlIGJyb2FkY2FzdGFibGUgdG8gYGxhYmVsc2AgKGkuZS4sIGFsbCBkaW1lbnNpb25zXG4gKiAgICBtdXN0IGJlIGVpdGhlciBgMWAsIG9yIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGBsb3NzZXNgXG4gKiAgICBkaW1lbnNpb24pLlxuICogQHBhcmFtIHJlZHVjdGlvbiBUeXBlIG9mIHJlZHVjdGlvbiB0byBhcHBseSB0byBsb3NzLiBTaG91bGQgYmUgb2YgdHlwZVxuICogICAgYFJlZHVjdGlvbmBcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnTG9zc2VzJywgbmFtZXNwYWNlOiAnbG9zc2VzJ31cbiAqL1xuZnVuY3Rpb24gbWVhblNxdWFyZWRFcnJvcl88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgbGFiZWxzOiBUfFRlbnNvckxpa2UsIHByZWRpY3Rpb25zOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGNvbnN0ICRsYWJlbHMgPSBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ21lYW5TcXVhcmVkRXJyb3InKTtcbiAgY29uc3QgJHByZWRpY3Rpb25zID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihwcmVkaWN0aW9ucywgJ3ByZWRpY3Rpb25zJywgJ21lYW5TcXVhcmVkRXJyb3InKTtcbiAgbGV0ICR3ZWlnaHRzOiBUZW5zb3IgPSBudWxsO1xuICBpZiAod2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgJHdlaWdodHMgPSBjb252ZXJ0VG9UZW5zb3Iod2VpZ2h0cywgJ3dlaWdodHMnLCAnbWVhblNxdWFyZWRFcnJvcicpO1xuICB9XG4gIGFzc2VydFNoYXBlc01hdGNoKFxuICAgICAgJGxhYmVscy5zaGFwZSwgJHByZWRpY3Rpb25zLnNoYXBlLCAnRXJyb3IgaW4gbWVhblNxdWFyZWRFcnJvcjogJyk7XG5cbiAgY29uc3QgbG9zc2VzID0gc3F1YXJlZERpZmZlcmVuY2UoJGxhYmVscywgJHByZWRpY3Rpb25zKTtcbiAgcmV0dXJuIGNvbXB1dGVXZWlnaHRlZExvc3MobG9zc2VzLCAkd2VpZ2h0cywgcmVkdWN0aW9uKTtcbn1cbmV4cG9ydCBjb25zdCBtZWFuU3F1YXJlZEVycm9yID0gLyogQF9fUFVSRV9fICovIG9wKHttZWFuU3F1YXJlZEVycm9yX30pO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { abs } from '../abs';\nimport { add } from '../add';\nimport { exp } from '../exp';\nimport { log1p } from '../log1p';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { relu } from '../relu';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { computeWeightedLoss } from './compute_weighted_loss';\nfunction sigmoidCrossEntropyWithLogits_(labels, logits) {\n const $labels = convertToTensor(labels, 'labels', 'sigmoidCrossEntropyWithLogits');\n const $logits = convertToTensor(logits, 'logits', 'sigmoidCrossEntropyWithLogits');\n assertShapesMatch($labels.shape, $logits.shape, 'Error in sigmoidCrossEntropyWithLogits: ');\n /**\n * Implementation Details:\n *\n * For brevity, let `x = logits`, `z = labels`. The logistic loss is\n * z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))\n * = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))\n * = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))\n * = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))\n * = (1 - z) * x + log(1 + exp(-x))\n * = x - x * z + log(1 + exp(-x))\n *\n * For x < 0, to avoid overflow in exp(-x), we reformulate the above\n * x - x * z + log(1 + exp(-x))\n * = log(exp(x)) - x * z + log(1 + exp(-x))\n * = - x * z + log(1 + exp(x))\n *\n * Hence, to ensure stability and avoid overflow, the implementation uses\n * this equivalent formulation:\n * max(x, 0) - x * z + log(1 + exp(-abs(x)))\n */\n const maxOutput = relu($logits);\n const outputXTarget = mul($logits, $labels);\n const sigmoidOutput = log1p(exp(neg(abs($logits))));\n return add(sub(maxOutput, outputXTarget), sigmoidOutput);\n}\n/**\n * Computes the sigmoid cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n * newMulticlassLabels = multiclassLabels * (1 - labelSmoothing)\n * + 0.5 * labelSmoothing\n *\n * @param multiClassLabels The ground truth output tensor of shape\n * [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or the same rank as\n * `labels`, and must be broadcastable to `labels` (i.e., all dimensions\n * must be either `1`, or the same as the corresponding `losses`\n * dimension).\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' }\n */\nfunction sigmoidCrossEntropy_(multiClassLabels, logits, weights, labelSmoothing = 0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $multiClassLabels = convertToTensor(multiClassLabels, 'multiClassLabels', 'sigmoidCrossEntropy');\n const $logits = convertToTensor(logits, 'logits', 'sigmoidCrossEntropy');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'sigmoidCrossEntropy');\n }\n assertShapesMatch($multiClassLabels.shape, $logits.shape, 'Error in sigmoidCrossEntropy: ');\n if (labelSmoothing > 0) {\n const labelSmoothingScalar = scalar(labelSmoothing);\n const one = scalar(1);\n const half = scalar(0.5);\n $multiClassLabels =\n add(mul($multiClassLabels, sub(one, labelSmoothingScalar)), mul(half, labelSmoothingScalar));\n }\n const losses = sigmoidCrossEntropyWithLogits_($multiClassLabels, $logits);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const sigmoidCrossEntropy = /* @__PURE__ */ op({ sigmoidCrossEntropy_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbW9pZF9jcm9zc19lbnRyb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL3NpZ21vaWRfY3Jvc3NfZW50cm9weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTVELFNBQVMsOEJBQThCLENBQ25DLE1BQW9CLEVBQUUsTUFBb0I7SUFDNUMsTUFBTSxPQUFPLEdBQ1QsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsK0JBQStCLENBQUMsQ0FBQztJQUN2RSxNQUFNLE9BQU8sR0FDVCxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQ3ZFLGlCQUFpQixDQUNiLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO0lBRTlFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILFNBQVMsb0JBQW9CLENBQ3pCLGdCQUE4QixFQUFFLE1BQW9CLEVBQ3BELE9BQTJCLEVBQUUsY0FBYyxHQUFHLENBQUMsRUFDL0MsU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0I7SUFDOUMsSUFBSSxpQkFBaUIsR0FBRyxlQUFlLENBQ25DLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN6RSxJQUFJLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDNUIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO1FBQ25CLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsaUJBQWlCLENBQ2IsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUU5RSxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixpQkFBaUI7WUFDYixHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxFQUN0RCxHQUFHLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE1BQU0sTUFBTSxHQUFHLDhCQUE4QixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2Fic30gZnJvbSAnLi4vYWJzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9hZGQnO1xuaW1wb3J0IHtleHB9IGZyb20gJy4uL2V4cCc7XG5pbXBvcnQge2xvZzFwfSBmcm9tICcuLi9sb2cxcCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3JlbHV9IGZyb20gJy4uL3JlbHUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcblxuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2NvbXB1dGVfd2VpZ2h0ZWRfbG9zcyc7XG5cbmZ1bmN0aW9uIHNpZ21vaWRDcm9zc0VudHJvcHlXaXRoTG9naXRzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFR8VGVuc29yTGlrZSwgbG9naXRzOiBUfFRlbnNvckxpa2UpOiBPIHtcbiAgY29uc3QgJGxhYmVscyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IobGFiZWxzLCAnbGFiZWxzJywgJ3NpZ21vaWRDcm9zc0VudHJvcHlXaXRoTG9naXRzJyk7XG4gIGNvbnN0ICRsb2dpdHMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzaWdtb2lkQ3Jvc3NFbnRyb3B5V2l0aExvZ2l0cycpO1xuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRsYWJlbHMuc2hhcGUsICRsb2dpdHMuc2hhcGUsICdFcnJvciBpbiBzaWdtb2lkQ3Jvc3NFbnRyb3B5V2l0aExvZ2l0czogJyk7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGF0aW9uIERldGFpbHM6XG4gICAqXG4gICAqIEZvciBicmV2aXR5LCBsZXQgYHggPSBsb2dpdHNgLCBgeiA9IGxhYmVsc2AuICBUaGUgbG9naXN0aWMgbG9zcyBpc1xuICAgKiAgICAgeiAqIC1sb2coc2lnbW9pZCh4KSkgKyAoMSAtIHopICogLWxvZygxIC0gc2lnbW9pZCh4KSlcbiAgICogICA9IHogKiAtbG9nKDEgLyAoMSArIGV4cCgteCkpKSArICgxIC0geikgKiAtbG9nKGV4cCgteCkgLyAoMSArIGV4cCgteCkpKVxuICAgKiAgID0geiAqIGxvZygxICsgZXhwKC14KSkgKyAoMSAtIHopICogKC1sb2coZXhwKC14KSkgKyBsb2coMSArIGV4cCgteCkpKVxuICAgKiAgID0geiAqIGxvZygxICsgZXhwKC14KSkgKyAoMSAtIHopICogKHggKyBsb2coMSArIGV4cCgteCkpXG4gICAqICAgPSAoMSAtIHopICogeCArIGxvZygxICsgZXhwKC14KSlcbiAgICogICA9IHggLSB4ICogeiArIGxvZygxICsgZXhwKC14KSlcbiAgICpcbiAgICogICBGb3IgeCA8IDAsIHRvIGF2b2lkIG92ZXJmbG93IGluIGV4cCgteCksIHdlIHJlZm9ybXVsYXRlIHRoZSBhYm92ZVxuICAgKiAgICAgeCAtIHggKiB6ICsgbG9nKDEgKyBleHAoLXgpKVxuICAgKiAgID0gbG9nKGV4cCh4KSkgLSB4ICogeiArIGxvZygxICsgZXhwKC14KSlcbiAgICogICA9IC0geCAqIHogKyBsb2coMSArIGV4cCh4KSlcbiAgICpcbiAgICogSGVuY2UsIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIGF2b2lkIG92ZXJmbG93LCB0aGUgaW1wbGVtZW50YXRpb24gdXNlc1xuICAgKiB0aGlzIGVxdWl2YWxlbnQgZm9ybXVsYXRpb246XG4gICAqICAgICBtYXgoeCwgMCkgLSB4ICogeiArIGxvZygxICsgZXhwKC1hYnMoeCkpKVxuICAgKi9cbiAgY29uc3QgbWF4T3V0cHV0ID0gcmVsdSgkbG9naXRzKTtcbiAgY29uc3Qgb3V0cHV0WFRhcmdldCA9IG11bCgkbG9naXRzLCAkbGFiZWxzKTtcbiAgY29uc3Qgc2lnbW9pZE91dHB1dCA9IGxvZzFwKGV4cChuZWcoYWJzKCRsb2dpdHMpKSkpO1xuXG4gIHJldHVybiBhZGQoc3ViKG1heE91dHB1dCwgb3V0cHV0WFRhcmdldCksIHNpZ21vaWRPdXRwdXQpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzaWdtb2lkIGNyb3NzIGVudHJvcHkgbG9zcyBiZXR3ZWVuIHR3byB0ZW5zb3JzLlxuICpcbiAqIElmIGxhYmVsU21vb3RoaW5nIGlzIG5vbnplcm8sIHNtb290aCB0aGUgbGFiZWxzIHRvd2FyZHMgMS8yOlxuICpcbiAqICAgbmV3TXVsdGljbGFzc0xhYmVscyA9IG11bHRpY2xhc3NMYWJlbHMgKiAoMSAtIGxhYmVsU21vb3RoaW5nKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgKyAwLjUgKiBsYWJlbFNtb290aGluZ1xuICpcbiAqIEBwYXJhbSBtdWx0aUNsYXNzTGFiZWxzIFRoZSBncm91bmQgdHJ1dGggb3V0cHV0IHRlbnNvciBvZiBzaGFwZVxuICogW2JhdGNoX3NpemUsIG51bV9jbGFzc2VzXSwgc2FtZSBkaW1lbnNpb25zIGFzICdwcmVkaWN0aW9ucycuXG4gKiBAcGFyYW0gbG9naXRzIFRoZSBwcmVkaWN0ZWQgb3V0cHV0cy5cbiAqIEBwYXJhbSB3ZWlnaHRzIFRlbnNvciB3aG9zZSByYW5rIGlzIGVpdGhlciAwLCBvciB0aGUgc2FtZSByYW5rIGFzXG4gKiAgICBgbGFiZWxzYCwgYW5kIG11c3QgYmUgYnJvYWRjYXN0YWJsZSB0byBgbGFiZWxzYCAoaS5lLiwgYWxsIGRpbWVuc2lvbnNcbiAqICAgIG11c3QgYmUgZWl0aGVyIGAxYCwgb3IgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYGxvc3Nlc2BcbiAqICAgIGRpbWVuc2lvbikuXG4gKiBAcGFyYW0gbGFiZWxTbW9vdGhpbmcgSWYgZ3JlYXRlciB0aGFuIDAsIHRoZW4gc21vb3RoIHRoZSBsYWJlbHMuXG4gKiBAcGFyYW0gcmVkdWN0aW9uIFR5cGUgb2YgcmVkdWN0aW9uIHRvIGFwcGx5IHRvIGxvc3MuIFNob3VsZCBiZSBvZiB0eXBlXG4gKiAgICBgUmVkdWN0aW9uYFxuICpcbiAqIEBkb2MgeyBoZWFkaW5nOiAnVHJhaW5pbmcnLCBzdWJoZWFkaW5nOiAnTG9zc2VzJywgbmFtZXNwYWNlOiAnbG9zc2VzJyB9XG4gKi9cbmZ1bmN0aW9uIHNpZ21vaWRDcm9zc0VudHJvcHlfPFQgZXh0ZW5kcyBUZW5zb3IsIE8gZXh0ZW5kcyBUZW5zb3I+KFxuICAgIG11bHRpQ2xhc3NMYWJlbHM6IFR8VGVuc29yTGlrZSwgbG9naXRzOiBUfFRlbnNvckxpa2UsXG4gICAgd2VpZ2h0cz86IFRlbnNvcnxUZW5zb3JMaWtlLCBsYWJlbFNtb290aGluZyA9IDAsXG4gICAgcmVkdWN0aW9uID0gUmVkdWN0aW9uLlNVTV9CWV9OT05aRVJPX1dFSUdIVFMpOiBPIHtcbiAgbGV0ICRtdWx0aUNsYXNzTGFiZWxzID0gY29udmVydFRvVGVuc29yKFxuICAgICAgbXVsdGlDbGFzc0xhYmVscywgJ211bHRpQ2xhc3NMYWJlbHMnLCAnc2lnbW9pZENyb3NzRW50cm9weScpO1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzaWdtb2lkQ3Jvc3NFbnRyb3B5Jyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcbiAgaWYgKHdlaWdodHMgIT0gbnVsbCkge1xuICAgICR3ZWlnaHRzID0gY29udmVydFRvVGVuc29yKHdlaWdodHMsICd3ZWlnaHRzJywgJ3NpZ21vaWRDcm9zc0VudHJvcHknKTtcbiAgfVxuICBhc3NlcnRTaGFwZXNNYXRjaChcbiAgICAgICRtdWx0aUNsYXNzTGFiZWxzLnNoYXBlLCAkbG9naXRzLnNoYXBlLCAnRXJyb3IgaW4gc2lnbW9pZENyb3NzRW50cm9weTogJyk7XG5cbiAgaWYgKGxhYmVsU21vb3RoaW5nID4gMCkge1xuICAgIGNvbnN0IGxhYmVsU21vb3RoaW5nU2NhbGFyID0gc2NhbGFyKGxhYmVsU21vb3RoaW5nKTtcbiAgICBjb25zdCBvbmUgPSBzY2FsYXIoMSk7XG4gICAgY29uc3QgaGFsZiA9IHNjYWxhcigwLjUpO1xuXG4gICAgJG11bHRpQ2xhc3NMYWJlbHMgPVxuICAgICAgICBhZGQobXVsKCRtdWx0aUNsYXNzTGFiZWxzLCBzdWIob25lLCBsYWJlbFNtb290aGluZ1NjYWxhcikpLFxuICAgICAgICAgICAgbXVsKGhhbGYsIGxhYmVsU21vb3RoaW5nU2NhbGFyKSk7XG4gIH1cbiAgY29uc3QgbG9zc2VzID0gc2lnbW9pZENyb3NzRW50cm9weVdpdGhMb2dpdHNfKCRtdWx0aUNsYXNzTGFiZWxzLCAkbG9naXRzKTtcblxuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbW9pZENyb3NzRW50cm9weSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c2lnbW9pZENyb3NzRW50cm9weV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { customGrad } from '../../gradients';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { assertShapesMatch } from '../../util';\nimport { add } from '../add';\nimport { expandShapeToKeepDim } from '../axis_util';\nimport { cast } from '../cast';\nimport { div } from '../div';\nimport { exp } from '../exp';\nimport { logSumExp } from '../log_sum_exp';\nimport { Reduction } from '../loss_ops_utils';\nimport { mul } from '../mul';\nimport { neg } from '../neg';\nimport { op } from '../operation';\nimport { reshape } from '../reshape';\nimport { scalar } from '../scalar';\nimport { sub } from '../sub';\nimport { sum } from '../sum';\nimport { computeWeightedLoss } from './compute_weighted_loss';\n/**\n * Computes softmax cross entropy between logits and labels.\n *\n * Measures the probability error in discrete classification tasks in which\n * the classes are mutually exclusive (each entry is in exactly one class).\n * For example, each CIFAR-10 image is labeled with one and only one label: an\n * image can be a dog or a truck, but not both.\n *\n * `NOTE`: While the classes are mutually exclusive, their probabilities need\n * not be. All that is required is that each row of labels is a valid\n * probability distribution. If they are not, the computation of the gradient\n * will be incorrect.\n *\n * `WARNING`: This op expects unscaled logits, since it performs a softmax on\n * logits internally for efficiency. Do not call this op with the output of\n * softmax, as it will produce incorrect results.\n *\n * logits and labels must have the same shape, e.g. [batch_size, num_classes]\n * and the same dtype.\n * @param labels The labels array.\n * @param logits The logits array.\n * @param dim The dimension softmax would be performed on. Defaults to `-1`\n * which indicates the last dimension.\n */\nfunction softmaxCrossEntropyWithLogits_(labels, logits, dim = -1) {\n if (dim === -1) {\n dim = logits.rank - 1;\n }\n if (dim !== logits.rank - 1) {\n throw Error(`Softmax cross entropy along a non-last dimension is not yet ` +\n `supported. Labels / logits was rank ${logits.rank} ` +\n `and dim was ${dim}`);\n }\n // Use a custom gradient for numerical stability.\n const customOp = customGrad((labels, logits, save) => {\n // Reference:\n // 1. http://cs231n.github.io/linear-classify/#softmax\n // 2. https://blog.feedly.com/tricks-of-the-trade-logsumexp/\n const keepDims = true;\n const lse = logSumExp(logits, [dim], keepDims);\n const logResult = sub(cast(logits, 'float32'), lse);\n save([labels, logResult]);\n const costVector = neg(mul(logResult, labels));\n const value = sum(costVector, [dim]);\n const gradFunc = (dy, saved) => {\n const [labels, logResult] = saved;\n const dyShape = expandShapeToKeepDim(dy.shape, [dim]);\n return [\n mul(reshape(dy, dyShape), sub(cast(labels, 'float32'), exp(logResult))),\n mul(reshape(dy, dyShape), sub(exp(logResult), cast(labels, 'float32'))),\n ];\n };\n return { value, gradFunc };\n });\n return customOp(labels, logits);\n}\n/**\n * Computes the softmax cross entropy loss between two tensors.\n *\n * If labelSmoothing is nonzero, smooth the labels towards 1/2:\n *\n * newOnehotLabels = onehotLabels * (1 - labelSmoothing)\n * + labelSmoothing / numClasses\n *\n * @param onehotLabels One hot encoded labels\n * [batch_size, num_classes], same dimensions as 'predictions'.\n * @param logits The predicted outputs.\n * @param weights Tensor whose rank is either 0, or 1, and must be\n * broadcastable to `loss` of shape [batch_size]\n * @param labelSmoothing If greater than 0, then smooth the labels.\n * @param reduction Type of reduction to apply to loss. Should be of type\n * `Reduction`\n *\n * @doc { heading: 'Training', subheading: 'Losses', namespace: 'losses' }\n */\nfunction softmaxCrossEntropy_(onehotLabels, logits, weights, labelSmoothing = 0, reduction = Reduction.SUM_BY_NONZERO_WEIGHTS) {\n let $onehotLabels = convertToTensor(onehotLabels, 'onehotLabels', 'softmaxCrossEntropy');\n const $logits = convertToTensor(logits, 'logits', 'softmaxCrossEntropy');\n let $weights = null;\n if (weights != null) {\n $weights = convertToTensor(weights, 'weights', 'softmaxCrossEntropy');\n }\n assertShapesMatch($onehotLabels.shape, $logits.shape, 'Error in softmaxCrossEntropy: ');\n if (labelSmoothing > 0) {\n const labelSmoothingScalar = scalar(labelSmoothing);\n const one = scalar(1);\n const numClasses = scalar($onehotLabels.shape[1]);\n $onehotLabels =\n add(mul($onehotLabels, sub(one, labelSmoothingScalar)), div(labelSmoothingScalar, numClasses));\n }\n const losses = softmaxCrossEntropyWithLogits_($onehotLabels, $logits);\n return computeWeightedLoss(losses, $weights, reduction);\n}\nexport const softmaxCrossEntropy = /* @__PURE__ */ op({ softmaxCrossEntropy_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdG1heF9jcm9zc19lbnRyb3B5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvbG9zc2VzL3NvZnRtYXhfY3Jvc3NfZW50cm9weS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFHM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDM0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxRQUFRLENB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QixRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUN2RTtJQUVELGlCQUFpQixDQUNiLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBRTFFLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtRQUN0QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxhQUFhO1lBQ1QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLEVBQ2xELEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsTUFBTSxNQUFNLEdBQUcsOEJBQThCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRFLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7Y3VzdG9tR3JhZH0gZnJvbSAnLi4vLi4vZ3JhZGllbnRzJztcbmltcG9ydCB7VGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtHcmFkU2F2ZUZ1bmN9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7VGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vYWRkJztcbmltcG9ydCB7ZXhwYW5kU2hhcGVUb0tlZXBEaW19IGZyb20gJy4uL2F4aXNfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2Nhc3QnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL2Rpdic7XG5pbXBvcnQge2V4cH0gZnJvbSAnLi4vZXhwJztcbmltcG9ydCB7bG9nU3VtRXhwfSBmcm9tICcuLi9sb2dfc3VtX2V4cCc7XG5pbXBvcnQge1JlZHVjdGlvbn0gZnJvbSAnLi4vbG9zc19vcHNfdXRpbHMnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL211bCc7XG5pbXBvcnQge25lZ30gZnJvbSAnLi4vbmVnJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4uL3Jlc2hhcGUnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL3NjYWxhcic7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vc3ViJztcbmltcG9ydCB7c3VtfSBmcm9tICcuLi9zdW0nO1xuXG5pbXBvcnQge2NvbXB1dGVXZWlnaHRlZExvc3N9IGZyb20gJy4vY29tcHV0ZV93ZWlnaHRlZF9sb3NzJztcblxuLyoqXG4gKiBDb21wdXRlcyBzb2Z0bWF4IGNyb3NzIGVudHJvcHkgYmV0d2VlbiBsb2dpdHMgYW5kIGxhYmVscy5cbiAqXG4gKiBNZWFzdXJlcyB0aGUgcHJvYmFiaWxpdHkgZXJyb3IgaW4gZGlzY3JldGUgY2xhc3NpZmljYXRpb24gdGFza3MgaW4gd2hpY2hcbiAqIHRoZSBjbGFzc2VzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKGVhY2ggZW50cnkgaXMgaW4gZXhhY3RseSBvbmUgY2xhc3MpLlxuICogRm9yIGV4YW1wbGUsIGVhY2ggQ0lGQVItMTAgaW1hZ2UgaXMgbGFiZWxlZCB3aXRoIG9uZSBhbmQgb25seSBvbmUgbGFiZWw6IGFuXG4gKiBpbWFnZSBjYW4gYmUgYSBkb2cgb3IgYSB0cnVjaywgYnV0IG5vdCBib3RoLlxuICpcbiAqIGBOT1RFYDogV2hpbGUgdGhlIGNsYXNzZXMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgdGhlaXIgcHJvYmFiaWxpdGllcyBuZWVkXG4gKiBub3QgYmUuIEFsbCB0aGF0IGlzIHJlcXVpcmVkIGlzIHRoYXQgZWFjaCByb3cgb2YgbGFiZWxzIGlzIGEgdmFsaWRcbiAqIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbi4gSWYgdGhleSBhcmUgbm90LCB0aGUgY29tcHV0YXRpb24gb2YgdGhlIGdyYWRpZW50XG4gKiB3aWxsIGJlIGluY29ycmVjdC5cbiAqXG4gKiBgV0FSTklOR2A6IFRoaXMgb3AgZXhwZWN0cyB1bnNjYWxlZCBsb2dpdHMsIHNpbmNlIGl0IHBlcmZvcm1zIGEgc29mdG1heCBvblxuICogbG9naXRzIGludGVybmFsbHkgZm9yIGVmZmljaWVuY3kuIERvIG5vdCBjYWxsIHRoaXMgb3Agd2l0aCB0aGUgb3V0cHV0IG9mXG4gKiBzb2Z0bWF4LCBhcyBpdCB3aWxsIHByb2R1Y2UgaW5jb3JyZWN0IHJlc3VsdHMuXG4gKlxuICogbG9naXRzIGFuZCBsYWJlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlLCBlLmcuIFtiYXRjaF9zaXplLCBudW1fY2xhc3Nlc11cbiAqIGFuZCB0aGUgc2FtZSBkdHlwZS5cbiAqIEBwYXJhbSBsYWJlbHMgVGhlIGxhYmVscyBhcnJheS5cbiAqIEBwYXJhbSBsb2dpdHMgVGhlIGxvZ2l0cyBhcnJheS5cbiAqIEBwYXJhbSBkaW0gVGhlIGRpbWVuc2lvbiBzb2Z0bWF4IHdvdWxkIGJlIHBlcmZvcm1lZCBvbi4gRGVmYXVsdHMgdG8gYC0xYFxuICogICAgIHdoaWNoIGluZGljYXRlcyB0aGUgbGFzdCBkaW1lbnNpb24uXG4gKi9cbmZ1bmN0aW9uIHNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzXzxUIGV4dGVuZHMgVGVuc29yLCBPIGV4dGVuZHMgVGVuc29yPihcbiAgICBsYWJlbHM6IFQsIGxvZ2l0czogVCwgZGltID0gLTEpOiBPIHtcbiAgaWYgKGRpbSA9PT0gLTEpIHtcbiAgICBkaW0gPSBsb2dpdHMucmFuayAtIDE7XG4gIH1cblxuICBpZiAoZGltICE9PSBsb2dpdHMucmFuayAtIDEpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFNvZnRtYXggY3Jvc3MgZW50cm9weSBhbG9uZyBhIG5vbi1sYXN0IGRpbWVuc2lvbiBpcyBub3QgeWV0IGAgK1xuICAgICAgICBgc3VwcG9ydGVkLiBMYWJlbHMgLyBsb2dpdHMgd2FzIHJhbmsgJHtsb2dpdHMucmFua30gYCArXG4gICAgICAgIGBhbmQgZGltIHdhcyAke2RpbX1gKTtcbiAgfVxuICAvLyBVc2UgYSBjdXN0b20gZ3JhZGllbnQgZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkuXG4gIGNvbnN0IGN1c3RvbU9wID1cbiAgICAgIGN1c3RvbUdyYWQoKGxhYmVsczogVGVuc29yLCBsb2dpdHM6IFRlbnNvciwgc2F2ZTogR3JhZFNhdmVGdW5jKSA9PiB7XG4gICAgICAgIC8vIFJlZmVyZW5jZTpcbiAgICAgICAgLy8gICAxLiBodHRwOi8vY3MyMzFuLmdpdGh1Yi5pby9saW5lYXItY2xhc3NpZnkvI3NvZnRtYXhcbiAgICAgICAgLy8gICAyLiBodHRwczovL2Jsb2cuZmVlZGx5LmNvbS90cmlja3Mtb2YtdGhlLXRyYWRlLWxvZ3N1bWV4cC9cbiAgICAgICAgY29uc3Qga2VlcERpbXMgPSB0cnVlO1xuICAgICAgICBjb25zdCBsc2UgPSBsb2dTdW1FeHAobG9naXRzLCBbZGltXSwga2VlcERpbXMpO1xuICAgICAgICBjb25zdCBsb2dSZXN1bHQgPSBzdWIoY2FzdChsb2dpdHMsICdmbG9hdDMyJyksIGxzZSk7XG4gICAgICAgIHNhdmUoW2xhYmVscywgbG9nUmVzdWx0XSk7XG5cbiAgICAgICAgY29uc3QgY29zdFZlY3RvciA9IG5lZyhtdWwobG9nUmVzdWx0LCBsYWJlbHMpKTtcbiAgICAgICAgY29uc3QgdmFsdWU6IE8gPSBzdW0oY29zdFZlY3RvciwgW2RpbV0pO1xuXG4gICAgICAgIGNvbnN0IGdyYWRGdW5jID0gKGR5OiBPLCBzYXZlZDogVGVuc29yW10pID0+IHtcbiAgICAgICAgICBjb25zdCBbbGFiZWxzLCBsb2dSZXN1bHRdID0gc2F2ZWQ7XG4gICAgICAgICAgY29uc3QgZHlTaGFwZSA9IGV4cGFuZFNoYXBlVG9LZWVwRGltKGR5LnNoYXBlLCBbZGltXSk7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG11bChyZXNoYXBlKGR5LCBkeVNoYXBlKSxcbiAgICAgICAgICAgICAgICBzdWIoY2FzdChsYWJlbHMsICdmbG9hdDMyJyksIGV4cChsb2dSZXN1bHQpKSksXG4gICAgICAgICAgICBtdWwocmVzaGFwZShkeSwgZHlTaGFwZSksXG4gICAgICAgICAgICAgICAgc3ViKGV4cChsb2dSZXN1bHQpLCBjYXN0KGxhYmVscywgJ2Zsb2F0MzInKSkpLFxuICAgICAgICAgIF07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7dmFsdWUsIGdyYWRGdW5jfTtcbiAgICAgIH0pO1xuXG4gIHJldHVybiBjdXN0b21PcChsYWJlbHMsIGxvZ2l0cyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHNvZnRtYXggY3Jvc3MgZW50cm9weSBsb3NzIGJldHdlZW4gdHdvIHRlbnNvcnMuXG4gKlxuICogSWYgbGFiZWxTbW9vdGhpbmcgaXMgbm9uemVybywgc21vb3RoIHRoZSBsYWJlbHMgdG93YXJkcyAxLzI6XG4gKlxuICogICBuZXdPbmVob3RMYWJlbHMgPSBvbmVob3RMYWJlbHMgKiAoMSAtIGxhYmVsU21vb3RoaW5nKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgKyBsYWJlbFNtb290aGluZyAvIG51bUNsYXNzZXNcbiAqXG4gKiBAcGFyYW0gb25laG90TGFiZWxzIE9uZSBob3QgZW5jb2RlZCBsYWJlbHNcbiAqICAgIFtiYXRjaF9zaXplLCBudW1fY2xhc3Nlc10sIHNhbWUgZGltZW5zaW9ucyBhcyAncHJlZGljdGlvbnMnLlxuICogQHBhcmFtIGxvZ2l0cyBUaGUgcHJlZGljdGVkIG91dHB1dHMuXG4gKiBAcGFyYW0gd2VpZ2h0cyBUZW5zb3Igd2hvc2UgcmFuayBpcyBlaXRoZXIgMCwgb3IgMSwgYW5kIG11c3QgYmVcbiAqICAgIGJyb2FkY2FzdGFibGUgdG8gYGxvc3NgICBvZiBzaGFwZSBbYmF0Y2hfc2l6ZV1cbiAqIEBwYXJhbSBsYWJlbFNtb290aGluZyBJZiBncmVhdGVyIHRoYW4gMCwgdGhlbiBzbW9vdGggdGhlIGxhYmVscy5cbiAqIEBwYXJhbSByZWR1Y3Rpb24gVHlwZSBvZiByZWR1Y3Rpb24gdG8gYXBwbHkgdG8gbG9zcy4gU2hvdWxkIGJlIG9mIHR5cGVcbiAqICAgIGBSZWR1Y3Rpb25gXG4gKlxuICogQGRvYyB7IGhlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdMb3NzZXMnLCBuYW1lc3BhY2U6ICdsb3NzZXMnIH1cbiAqL1xuZnVuY3Rpb24gc29mdG1heENyb3NzRW50cm9weV88VCBleHRlbmRzIFRlbnNvciwgTyBleHRlbmRzIFRlbnNvcj4oXG4gICAgb25laG90TGFiZWxzOiBUfFRlbnNvckxpa2UsIGxvZ2l0czogVHxUZW5zb3JMaWtlLFxuICAgIHdlaWdodHM/OiBUZW5zb3J8VGVuc29yTGlrZSwgbGFiZWxTbW9vdGhpbmcgPSAwLFxuICAgIHJlZHVjdGlvbiA9IFJlZHVjdGlvbi5TVU1fQllfTk9OWkVST19XRUlHSFRTKTogTyB7XG4gIGxldCAkb25laG90TGFiZWxzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihvbmVob3RMYWJlbHMsICdvbmVob3RMYWJlbHMnLCAnc29mdG1heENyb3NzRW50cm9weScpO1xuICBjb25zdCAkbG9naXRzID0gY29udmVydFRvVGVuc29yKGxvZ2l0cywgJ2xvZ2l0cycsICdzb2Z0bWF4Q3Jvc3NFbnRyb3B5Jyk7XG4gIGxldCAkd2VpZ2h0czogVGVuc29yID0gbnVsbDtcblxuICBpZiAod2VpZ2h0cyAhPSBudWxsKSB7XG4gICAgJHdlaWdodHMgPSBjb252ZXJ0VG9UZW5zb3Iod2VpZ2h0cywgJ3dlaWdodHMnLCAnc29mdG1heENyb3NzRW50cm9weScpO1xuICB9XG5cbiAgYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAkb25laG90TGFiZWxzLnNoYXBlLCAkbG9naXRzLnNoYXBlLCAnRXJyb3IgaW4gc29mdG1heENyb3NzRW50cm9weTogJyk7XG5cbiAgaWYgKGxhYmVsU21vb3RoaW5nID4gMCkge1xuICAgIGNvbnN0IGxhYmVsU21vb3RoaW5nU2NhbGFyID0gc2NhbGFyKGxhYmVsU21vb3RoaW5nKTtcbiAgICBjb25zdCBvbmUgPSBzY2FsYXIoMSk7XG4gICAgY29uc3QgbnVtQ2xhc3NlcyA9IHNjYWxhcigkb25laG90TGFiZWxzLnNoYXBlWzFdKTtcblxuICAgICRvbmVob3RMYWJlbHMgPVxuICAgICAgICBhZGQobXVsKCRvbmVob3RMYWJlbHMsIHN1YihvbmUsIGxhYmVsU21vb3RoaW5nU2NhbGFyKSksXG4gICAgICAgICAgICBkaXYobGFiZWxTbW9vdGhpbmdTY2FsYXIsIG51bUNsYXNzZXMpKTtcbiAgfVxuXG4gIGNvbnN0IGxvc3NlcyA9IHNvZnRtYXhDcm9zc0VudHJvcHlXaXRoTG9naXRzXygkb25laG90TGFiZWxzLCAkbG9naXRzKTtcblxuICByZXR1cm4gY29tcHV0ZVdlaWdodGVkTG9zcyhsb3NzZXMsICR3ZWlnaHRzLCByZWR1Y3Rpb24pO1xufVxuXG5leHBvcnQgY29uc3Qgc29mdG1heENyb3NzRW50cm9weSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c29mdG1heENyb3NzRW50cm9weV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseFillEmptyRows } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * The input SparseTensor is represented via the map of inputs {`indices`,\n * `values`, `denseShape`}. The output SparseTensor has the same `denseShape`\n * but with indices `outputIndices` and values `outputValues`. This op inserts a\n * single entry for every row that doesn't have any values. The index is created\n * as `[row, 0, ..., 0]` and the inserted value is `defaultValue`.\n *\n * For example, suppose `spInput` has shape [5, 6] and non-empty values:\n * [0, 1]: a\n * [0, 3]: b\n * [2, 0]: c\n * [3, 1]: d\n *\n * Rows 1 and 4 are empty, so the output will be of shape [5, 6] with values:\n * [0, 1]: a\n * [0, 3]: b\n * [1, 0]: `defaultValue`\n * [2, 0]: c\n * [3, 1]: d\n * [4, 0]: `defaultValue`\n *\n * The output SparseTensor will be in row-major order and will have the same\n * shape as the input.\n *\n * This op also returns an indicator vector shaped [dense_shape[0]] such that\n * emptyRowIndicator[i] = True iff row i was an empty row.\n *\n * And a reverse index map vector shaped [indices.shape[0]] that is used during\n * backpropagation, reverseIndexMap[i] = outi s.t. indices[i, j] ==\n * outputIndices[outi, j] for all j\n *\n * ```js\n * const result = tf.sparse.sparseFillEmptyRows(\n * [[0, 0], [1, 0], [1, 3], [1, 4], [3, 2], [3, 3]],\n * [0, 10, 13, 14, 32, 33], [5, 6], -1);\n * console.log(result);\n * result['outputIndices'].print(); // [[0, 0], [1, 0], [1, 3], [1, 4],\n * // [2, 0], [3, 2], [3, 3], [4, 0]]\n * result['outputValues'].print(); // [0, 10, 13, 14,-1, 32, 33, -1]\n * result['emptyRowIndicator'].print(); // [false, false, true, false, true]\n * result['reverseIndexMap'].print(); // [0, 1, 2, 3, 5, 6]\n * ```\n * @param indices: 2-D. The indices of the sparse tensor.\n * @param values: 1-D. The values of the sparse tensor.\n * @param denseShape: 1-D. The shape of the sparse tensor.\n * @param defaultValue: 0-D. Default value to insert into location [row, 0, ...,\n * 0] for rows missing from the input sparse tensor.\n * @return A map with the following properties:\n * - outputIndices\n * - outputValues: 1-D. The values of the filled sparse tensor.\n * - emptyRowIndicator: 1-D. Whether the dense row was missing in the input\n * sparse tensor.\n * - reverseIndexMap: 1-D. A map from the input indices to the output\n * indices.\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseFillEmptyRows_(indices, values, denseShape, defaultValue) {\n const $indices = convertToTensor(indices, 'indices', 'sparseFillEmptyRows', 'int32');\n const $values = convertToTensor(values, 'values', 'sparseFillEmptyRows');\n const $denseShape = convertToTensor(denseShape, 'denseShape', 'sparseFillEmptyRows', 'int32');\n const $defaultValue = convertToTensor(defaultValue, 'defaultValue', 'sparseFillEmptyRows', $values.dtype);\n if ($indices.rank !== 2) {\n throw new Error(`Indices should be Tensor2D but received shape\n ${$indices.shape}`);\n }\n if ($values.rank !== 1) {\n throw new Error(`Values should be Tensor1D but received shape ${$values.shape}`);\n }\n if ($denseShape.rank !== 1) {\n throw new Error(`Dense shape should be Tensor1D but received shape ${$denseShape.shape}`);\n }\n if ($defaultValue.rank !== 0) {\n throw new Error(`Default value should be a scalar but received shape ${$defaultValue.shape}`);\n }\n const inputs = {\n indices: $indices,\n values: $values,\n denseShape: $denseShape,\n defaultValue: $defaultValue\n };\n const result = ENGINE.runKernel(SparseFillEmptyRows, inputs);\n return {\n outputIndices: result[0],\n outputValues: result[1],\n emptyRowIndicator: result[2],\n reverseIndexMap: result[3]\n };\n}\nexport const sparseFillEmptyRows = /* @__PURE__ */ op({ sparseFillEmptyRows_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2ZpbGxfZW1wdHlfcm93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLG1CQUFtQixFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBR2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDekIsT0FBNEIsRUFBRSxNQUEyQixFQUN6RCxVQUErQixFQUMvQixZQUErQjtJQUNqQyxNQUFNLFFBQVEsR0FDVixlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FDakMsWUFBWSxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDO1VBQ1YsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekI7SUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0RBQWdELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUNaLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUNaLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVCO0lBRUQsTUFBTSxNQUFNLEdBQThCO1FBQ3hDLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsVUFBVSxFQUFFLFdBQVc7UUFDdkIsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsTUFBWSxDQUFDLENBQUM7SUFDN0UsT0FBTztRQUNMLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUMsb0JBQW9CLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlRmlsbEVtcHR5Um93cywgU3BhcnNlRmlsbEVtcHR5Um93c0lucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7U2NhbGFyTGlrZSwgVGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBUaGUgaW5wdXQgU3BhcnNlVGVuc29yIGlzIHJlcHJlc2VudGVkIHZpYSB0aGUgbWFwIG9mIGlucHV0cyB7YGluZGljZXNgLFxuICogYHZhbHVlc2AsIGBkZW5zZVNoYXBlYH0uIFRoZSBvdXRwdXQgU3BhcnNlVGVuc29yIGhhcyB0aGUgc2FtZSBgZGVuc2VTaGFwZWBcbiAqIGJ1dCB3aXRoIGluZGljZXMgYG91dHB1dEluZGljZXNgIGFuZCB2YWx1ZXMgYG91dHB1dFZhbHVlc2AuIFRoaXMgb3AgaW5zZXJ0cyBhXG4gKiBzaW5nbGUgZW50cnkgZm9yIGV2ZXJ5IHJvdyB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWVzLiBUaGUgaW5kZXggaXMgY3JlYXRlZFxuICogYXMgYFtyb3csIDAsIC4uLiwgMF1gIGFuZCB0aGUgaW5zZXJ0ZWQgdmFsdWUgaXMgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogRm9yIGV4YW1wbGUsIHN1cHBvc2UgYHNwSW5wdXRgIGhhcyBzaGFwZSBbNSwgNl0gYW5kIG5vbi1lbXB0eSB2YWx1ZXM6XG4gKiBbMCwgMV06IGFcbiAqIFswLCAzXTogYlxuICogWzIsIDBdOiBjXG4gKiBbMywgMV06IGRcbiAqXG4gKiBSb3dzIDEgYW5kIDQgYXJlIGVtcHR5LCBzbyB0aGUgb3V0cHV0IHdpbGwgYmUgb2Ygc2hhcGUgWzUsIDZdIHdpdGggdmFsdWVzOlxuICogWzAsIDFdOiBhXG4gKiBbMCwgM106IGJcbiAqIFsxLCAwXTogYGRlZmF1bHRWYWx1ZWBcbiAqIFsyLCAwXTogY1xuICogWzMsIDFdOiBkXG4gKiBbNCwgMF06IGBkZWZhdWx0VmFsdWVgXG4gKlxuICogVGhlIG91dHB1dCBTcGFyc2VUZW5zb3Igd2lsbCBiZSBpbiByb3ctbWFqb3Igb3JkZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZVxuICogc2hhcGUgYXMgdGhlIGlucHV0LlxuICpcbiAqIFRoaXMgb3AgYWxzbyByZXR1cm5zIGFuIGluZGljYXRvciB2ZWN0b3Igc2hhcGVkIFtkZW5zZV9zaGFwZVswXV0gc3VjaCB0aGF0XG4gKiBlbXB0eVJvd0luZGljYXRvcltpXSA9IFRydWUgaWZmIHJvdyBpIHdhcyBhbiBlbXB0eSByb3cuXG4gKlxuICogQW5kIGEgcmV2ZXJzZSBpbmRleCBtYXAgdmVjdG9yIHNoYXBlZCBbaW5kaWNlcy5zaGFwZVswXV0gdGhhdCBpcyB1c2VkIGR1cmluZ1xuICogYmFja3Byb3BhZ2F0aW9uLCByZXZlcnNlSW5kZXhNYXBbaV0gPSBvdXRpIHMudC4gaW5kaWNlc1tpLCBqXSA9PVxuICogb3V0cHV0SW5kaWNlc1tvdXRpLCBqXSBmb3IgYWxsIGpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3BhcnNlLnNwYXJzZUZpbGxFbXB0eVJvd3MoXG4gKiAgIFtbMCwgMF0sIFsxLCAwXSwgWzEsIDNdLCBbMSwgNF0sIFszLCAyXSwgWzMsIDNdXSxcbiAqICAgWzAsIDEwLCAxMywgMTQsIDMyLCAzM10sIFs1LCA2XSwgLTEpO1xuICogY29uc29sZS5sb2cocmVzdWx0KTtcbiAqIHJlc3VsdFsnb3V0cHV0SW5kaWNlcyddLnByaW50KCk7IC8vIFtbMCwgMF0sIFsxLCAwXSwgWzEsIDNdLCBbMSwgNF0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgWzIsIDBdLCBbMywgMl0sIFszLCAzXSwgWzQsIDBdXVxuICogcmVzdWx0WydvdXRwdXRWYWx1ZXMnXS5wcmludCgpOyAvLyBbMCwgMTAsIDEzLCAxNCwtMSwgMzIsIDMzLCAtMV1cbiAqIHJlc3VsdFsnZW1wdHlSb3dJbmRpY2F0b3InXS5wcmludCgpOyAvLyBbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAqIHJlc3VsdFsncmV2ZXJzZUluZGV4TWFwJ10ucHJpbnQoKTsgLy8gWzAsIDEsIDIsIDMsIDUsIDZdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbmRpY2VzOiAyLUQuIFRoZSBpbmRpY2VzIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIHZhbHVlczogMS1ELiBUaGUgdmFsdWVzIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIGRlbnNlU2hhcGU6IDEtRC4gVGhlIHNoYXBlIG9mIHRoZSBzcGFyc2UgdGVuc29yLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZTogMC1ELiBEZWZhdWx0IHZhbHVlIHRvIGluc2VydCBpbnRvIGxvY2F0aW9uIFtyb3csIDAsIC4uLixcbiAqICAgICAwXSBmb3Igcm93cyBtaXNzaW5nIGZyb20gdGhlIGlucHV0IHNwYXJzZSB0ZW5zb3IuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gb3V0cHV0SW5kaWNlc1xuICogICAgIC0gb3V0cHV0VmFsdWVzOiAxLUQuIFRoZSB2YWx1ZXMgb2YgdGhlIGZpbGxlZCBzcGFyc2UgdGVuc29yLlxuICogICAgIC0gZW1wdHlSb3dJbmRpY2F0b3I6IDEtRC4gV2hldGhlciB0aGUgZGVuc2Ugcm93IHdhcyBtaXNzaW5nIGluIHRoZSBpbnB1dFxuICogc3BhcnNlIHRlbnNvci5cbiAqICAgICAtIHJldmVyc2VJbmRleE1hcDogMS1ELiBBIG1hcCBmcm9tIHRoZSBpbnB1dCBpbmRpY2VzIHRvIHRoZSBvdXRwdXRcbiAqIGluZGljZXMuXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VGaWxsRW1wdHlSb3dzXyhcbiAgICBpbmRpY2VzOiBUZW5zb3IyRHxUZW5zb3JMaWtlLCB2YWx1ZXM6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgZGVuc2VTaGFwZTogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBkZWZhdWx0VmFsdWU6IFNjYWxhcnxTY2FsYXJMaWtlKTogTmFtZWRUZW5zb3JNYXAge1xuICBjb25zdCAkaW5kaWNlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAnc3BhcnNlRmlsbEVtcHR5Um93cycsICdpbnQzMicpO1xuICBjb25zdCAkdmFsdWVzID0gY29udmVydFRvVGVuc29yKHZhbHVlcywgJ3ZhbHVlcycsICdzcGFyc2VGaWxsRW1wdHlSb3dzJyk7XG4gIGNvbnN0ICRkZW5zZVNoYXBlID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZW5zZVNoYXBlLCAnZGVuc2VTaGFwZScsICdzcGFyc2VGaWxsRW1wdHlSb3dzJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRkZWZhdWx0VmFsdWUgPSBjb252ZXJ0VG9UZW5zb3IoXG4gICAgICBkZWZhdWx0VmFsdWUsICdkZWZhdWx0VmFsdWUnLCAnc3BhcnNlRmlsbEVtcHR5Um93cycsICR2YWx1ZXMuZHR5cGUpO1xuXG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IyRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgJHskaW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJHZhbHVlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmFsdWVzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGUgJHskdmFsdWVzLnNoYXBlfWApO1xuICB9XG4gIGlmICgkZGVuc2VTaGFwZS5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZW5zZSBzaGFwZSBzaG91bGQgYmUgVGVuc29yMUQgYnV0IHJlY2VpdmVkIHNoYXBlICR7XG4gICAgICAgICRkZW5zZVNoYXBlLnNoYXBlfWApO1xuICB9XG4gIGlmICgkZGVmYXVsdFZhbHVlLnJhbmsgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIGEgc2NhbGFyIGJ1dCByZWNlaXZlZCBzaGFwZSAke1xuICAgICAgICAkZGVmYXVsdFZhbHVlLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzID0ge1xuICAgIGluZGljZXM6ICRpbmRpY2VzLFxuICAgIHZhbHVlczogJHZhbHVlcyxcbiAgICBkZW5zZVNoYXBlOiAkZGVuc2VTaGFwZSxcbiAgICBkZWZhdWx0VmFsdWU6ICRkZWZhdWx0VmFsdWVcbiAgfTtcblxuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID0gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VGaWxsRW1wdHlSb3dzLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge1xuICAgIG91dHB1dEluZGljZXM6IHJlc3VsdFswXSxcbiAgICBvdXRwdXRWYWx1ZXM6IHJlc3VsdFsxXSxcbiAgICBlbXB0eVJvd0luZGljYXRvcjogcmVzdWx0WzJdLFxuICAgIHJldmVyc2VJbmRleE1hcDogcmVzdWx0WzNdXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VGaWxsRW1wdHlSb3dzID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VGaWxsRW1wdHlSb3dzX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseReshape } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * This operation has the same semantics as reshape on the represented dense\n * tensor. The `inputIndices` are recomputed based on the requested `newShape`.\n * If one component of `newShape` is the special value -1, the size of that\n * dimension is computed so that the total dense size remains constant. At most\n * one component of `newShape` can be -1. The number of dense elements implied\n * by `newShape` must be the same as the number of dense elements originally\n * implied by `inputShape`. Reshaping does not affect the order of values in the\n * SparseTensor. If the input tensor has rank R_in and N non-empty values, and\n * `newShape` has length R_out, then `inputIndices` has shape [N, R_in],\n * `inputShape` has length R_in, `outputIndices` has shape [N, R_out], and\n * `outputShape` has length R_out.\n *\n * ```js\n * const result = tf.sparse.sparseReshape(\n * [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 2, 3]],\n * [2, 3, 6], [9, -1]);\n * console.log(result);\n * result['outputIndices'].print(); //[[0, 0], [0, 1], [1, 2], [4, 2], [8, 1]]\n * result['outputShape'].print(); // [9, 4]\n * ```\n * @param inputIndices: 2-D. N x R_in matrix with the indices of non-empty\n * values in a SparseTensor.\n * @param inputShape: 1-D. R_in Tensor1D with the input SparseTensor's dense\n * shape.\n * @param newShape: 1-D. R_out Tensor1D with the requested new dense shape.\n * @return A map with the following properties:\n * - outputIndices: 2-D. N x R_out matrix with the updated indices of\n * non-empty values in the output SparseTensor.\n * - outputShape: 1-D. R_out vector with the full dense shape of the output\n * SparseTensor. This is the same as newShape but with any -1 dimensions\n * filled in.\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseReshape_(inputIndices, inputShape, newShape) {\n const $inputIndices = convertToTensor(inputIndices, 'inputIndices', 'sparseReshape', 'int32');\n const $inputShape = convertToTensor(inputShape, 'inputShape', 'sparseReshape', 'int32');\n const $newShape = convertToTensor(newShape, 'newShape', 'sparseReshape', 'int32');\n if ($inputIndices.rank !== 2) {\n throw new Error(`Input indices should be Tensor2D but received shape\n ${$inputIndices.shape}`);\n }\n if ($inputShape.rank !== 1) {\n throw new Error(`Input shape should be Tensor1D but received shape ${$inputShape.shape}`);\n }\n if ($newShape.rank !== 1) {\n throw new Error(`New shape should be Tensor1D but received shape ${$newShape.shape}`);\n }\n const inputs = {\n inputIndices: $inputIndices,\n inputShape: $inputShape,\n newShape: $newShape\n };\n const result = ENGINE.runKernel(SparseReshape, inputs);\n return { outputIndices: result[0], outputShape: result[1] };\n}\nexport const sparseReshape = /* @__PURE__ */ op({ sparseReshape_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3Jlc2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2Uvc3BhcnNlX3Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLG9CQUFvQixDQUFDO0FBR3RFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLGNBQWMsQ0FDbkIsWUFBaUMsRUFBRSxVQUErQixFQUNsRSxRQUE2QjtJQUMvQixNQUFNLGFBQWEsR0FDZixlQUFlLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUNYLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVwRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUM7VUFDVixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFDWixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMxQjtJQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDWCxtREFBbUQsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLE1BQU0sR0FBd0I7UUFDbEMsWUFBWSxFQUFFLGFBQWE7UUFDM0IsVUFBVSxFQUFFLFdBQVc7UUFDdkIsUUFBUSxFQUFFLFNBQVM7S0FDcEIsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFhLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLE1BQVksQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sRUFBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7U3BhcnNlUmVzaGFwZSwgU3BhcnNlUmVzaGFwZUlucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogVGhpcyBvcGVyYXRpb24gaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyByZXNoYXBlIG9uIHRoZSByZXByZXNlbnRlZCBkZW5zZVxuICogdGVuc29yLiBUaGUgYGlucHV0SW5kaWNlc2AgYXJlIHJlY29tcHV0ZWQgYmFzZWQgb24gdGhlIHJlcXVlc3RlZCBgbmV3U2hhcGVgLlxuICogSWYgb25lIGNvbXBvbmVudCBvZiBgbmV3U2hhcGVgIGlzIHRoZSBzcGVjaWFsIHZhbHVlIC0xLCB0aGUgc2l6ZSBvZiB0aGF0XG4gKiBkaW1lbnNpb24gaXMgY29tcHV0ZWQgc28gdGhhdCB0aGUgdG90YWwgZGVuc2Ugc2l6ZSByZW1haW5zIGNvbnN0YW50LiBBdCBtb3N0XG4gKiBvbmUgY29tcG9uZW50IG9mIGBuZXdTaGFwZWAgY2FuIGJlIC0xLiBUaGUgbnVtYmVyIG9mIGRlbnNlIGVsZW1lbnRzIGltcGxpZWRcbiAqIGJ5IGBuZXdTaGFwZWAgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGRlbnNlIGVsZW1lbnRzIG9yaWdpbmFsbHlcbiAqIGltcGxpZWQgYnkgYGlucHV0U2hhcGVgLiBSZXNoYXBpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBvcmRlciBvZiB2YWx1ZXMgaW4gdGhlXG4gKiBTcGFyc2VUZW5zb3IuIElmIHRoZSBpbnB1dCB0ZW5zb3IgaGFzIHJhbmsgUl9pbiBhbmQgTiBub24tZW1wdHkgdmFsdWVzLCBhbmRcbiAqIGBuZXdTaGFwZWAgaGFzIGxlbmd0aCBSX291dCwgdGhlbiBgaW5wdXRJbmRpY2VzYCBoYXMgc2hhcGUgW04sIFJfaW5dLFxuICogYGlucHV0U2hhcGVgIGhhcyBsZW5ndGggUl9pbiwgYG91dHB1dEluZGljZXNgIGhhcyBzaGFwZSBbTiwgUl9vdXRdLCBhbmRcbiAqIGBvdXRwdXRTaGFwZWAgaGFzIGxlbmd0aCBSX291dC5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3BhcnNlLnNwYXJzZVJlc2hhcGUoXG4gKiAgIFtbMCwgMCwgMF0sIFswLCAwLCAxXSwgWzAsIDEsIDBdLCBbMSwgMCwgMF0sIFsxLCAyLCAzXV0sXG4gKiAgIFsyLCAzLCA2XSwgWzksIC0xXSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICogcmVzdWx0WydvdXRwdXRJbmRpY2VzJ10ucHJpbnQoKTsgLy9bWzAsIDBdLCBbMCwgMV0sIFsxLCAyXSwgWzQsIDJdLCBbOCwgMV1dXG4gKiByZXN1bHRbJ291dHB1dFNoYXBlJ10ucHJpbnQoKTsgLy8gWzksIDRdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dEluZGljZXM6IDItRC4gTiB4IFJfaW4gbWF0cml4IHdpdGggdGhlIGluZGljZXMgb2Ygbm9uLWVtcHR5XG4gKiB2YWx1ZXMgaW4gYSBTcGFyc2VUZW5zb3IuXG4gKiBAcGFyYW0gaW5wdXRTaGFwZTogMS1ELiBSX2luIFRlbnNvcjFEIHdpdGggdGhlIGlucHV0IFNwYXJzZVRlbnNvcidzIGRlbnNlXG4gKiBzaGFwZS5cbiAqIEBwYXJhbSBuZXdTaGFwZTogMS1ELiBSX291dCBUZW5zb3IxRCB3aXRoIHRoZSByZXF1ZXN0ZWQgbmV3IGRlbnNlIHNoYXBlLlxuICogQHJldHVybiBBIG1hcCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgICAtIG91dHB1dEluZGljZXM6IDItRC4gTiB4IFJfb3V0IG1hdHJpeCB3aXRoIHRoZSB1cGRhdGVkIGluZGljZXMgb2ZcbiAqICAgICAgIG5vbi1lbXB0eSB2YWx1ZXMgaW4gdGhlIG91dHB1dCBTcGFyc2VUZW5zb3IuXG4gKiAgICAgLSBvdXRwdXRTaGFwZTogMS1ELiBSX291dCB2ZWN0b3Igd2l0aCB0aGUgZnVsbCBkZW5zZSBzaGFwZSBvZiB0aGUgb3V0cHV0XG4gKiAgICAgICBTcGFyc2VUZW5zb3IuIFRoaXMgaXMgdGhlIHNhbWUgYXMgbmV3U2hhcGUgYnV0IHdpdGggYW55IC0xIGRpbWVuc2lvbnNcbiAqICAgICAgICBmaWxsZWQgaW4uXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VSZXNoYXBlXyhcbiAgICBpbnB1dEluZGljZXM6IFRlbnNvcjJEfFRlbnNvckxpa2UsIGlucHV0U2hhcGU6IFRlbnNvcjFEfFRlbnNvckxpa2UsXG4gICAgbmV3U2hhcGU6IFRlbnNvcjFEfFRlbnNvckxpa2UpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRpbnB1dEluZGljZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGlucHV0SW5kaWNlcywgJ2lucHV0SW5kaWNlcycsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRpbnB1dFNoYXBlID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihpbnB1dFNoYXBlLCAnaW5wdXRTaGFwZScsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRuZXdTaGFwZSA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IobmV3U2hhcGUsICduZXdTaGFwZScsICdzcGFyc2VSZXNoYXBlJywgJ2ludDMyJyk7XG5cbiAgaWYgKCRpbnB1dEluZGljZXMucmFuayAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgaW5kaWNlcyBzaG91bGQgYmUgVGVuc29yMkQgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICR7JGlucHV0SW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJGlucHV0U2hhcGUucmFuayAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgc2hhcGUgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAke1xuICAgICAgICAkaW5wdXRTaGFwZS5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJG5ld1NoYXBlLnJhbmsgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBOZXcgc2hhcGUgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAkeyRuZXdTaGFwZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3BhcnNlUmVzaGFwZUlucHV0cyA9IHtcbiAgICBpbnB1dEluZGljZXM6ICRpbnB1dEluZGljZXMsXG4gICAgaW5wdXRTaGFwZTogJGlucHV0U2hhcGUsXG4gICAgbmV3U2hhcGU6ICRuZXdTaGFwZVxuICB9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID0gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VSZXNoYXBlLCBpbnB1dHMgYXMge30pO1xuICByZXR1cm4ge291dHB1dEluZGljZXM6IHJlc3VsdFswXSwgb3V0cHV0U2hhcGU6IHJlc3VsdFsxXX07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VSZXNoYXBlID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VSZXNoYXBlX30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseSegmentMean } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Computes the mean along sparse segments of a tensor.\n *\n * ```js\n * const c = tf.tensor2d([[1,2,3,4], [-1,-2,-3,-4], [6,7,8,9]]);\n * // Select two rows, one segment.\n * const result1 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 0], 'int32'));\n * result1.print(); // [[0, 0, 0, 0]]\n *\n * // Select two rows, two segments.\n * const result2 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 1], 'int32'));\n * result2.print(); // [[1, 2, 3, 4], [-1, -2, -3, -4]]\n *\n * // Select all rows, two segments.\n * const result3 = tf.sparse.sparseSegmentMean(c,\n * tf.tensor1d([0, 1, 2], 'int32'),\n * tf.tensor1d([0, 1, 1], 'int32'));\n * result3.print(); // [[1.0, 2.0, 3.0, 4.0], [2.5, 2.5, 2.5, 2.5]]\n * ```\n * @param data: A Tensor of at least one dimension with data that will be\n * assembled in the output.\n * @param indices: A 1-D Tensor with indices into data. Has same rank as\n * segmentIds.\n * @param segmentIds: A 1-D Tensor with indices into the output Tensor. Values\n * should be sorted and can be repeated.\n * @return Has same shape as data, except for dimension 0 which has equal to\n * the number of segments.\n *\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseSegmentMean_(data, indices, segmentIds) {\n const $data = convertToTensor(data, 'data', 'sparseSegmentMean');\n const $indices = convertToTensor(indices, 'indices', 'sparseSegmentMean', 'int32');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'sparseSegmentMean', 'int32');\n if ($data.rank < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if ($indices.rank !== 1) {\n throw new Error(`Indices should be Tensor1D but received shape\n ${$indices.shape}`);\n }\n if ($segmentIds.rank !== 1) {\n throw new Error(`Segment ids should be Tensor1D but received shape\n ${$segmentIds.shape}`);\n }\n const inputs = {\n data: $data,\n indices: $indices,\n segmentIds: $segmentIds\n };\n return ENGINE.runKernel(SparseSegmentMean, inputs);\n}\nexport const sparseSegmentMean = /* @__PURE__ */ op({ sparseSegmentMean_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfbWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2Vfc2VnbWVudF9tZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGlCQUFpQixFQUEwQixNQUFNLG9CQUFvQixDQUFDO0FBRTlFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixJQUF1QixFQUFFLE9BQTRCLEVBQ3JELFVBQStCO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQ1YsZUFBZSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsTUFBTSxXQUFXLEdBQ2IsZUFBZSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFNUUsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRCxDQUFDLENBQUM7S0FDbEU7SUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFDUixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzQjtJQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQztZQUNSLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsTUFBTSxNQUFNLEdBQTRCO1FBQ3RDLElBQUksRUFBRSxLQUFLO1FBQ1gsT0FBTyxFQUFFLFFBQVE7UUFDakIsVUFBVSxFQUFFLFdBQVc7S0FDeEIsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFZLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uLy4uL2VuZ2luZSc7XG5pbXBvcnQge1NwYXJzZVNlZ21lbnRNZWFuLCBTcGFyc2VTZWdtZW50TWVhbklucHV0c30gZnJvbSAnLi4vLi4va2VybmVsX25hbWVzJztcbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBtZWFuIGFsb25nIHNwYXJzZSBzZWdtZW50cyBvZiBhIHRlbnNvci5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYyA9IHRmLnRlbnNvcjJkKFtbMSwyLDMsNF0sIFstMSwtMiwtMywtNF0sIFs2LDcsOCw5XV0pO1xuICogLy8gU2VsZWN0IHR3byByb3dzLCBvbmUgc2VnbWVudC5cbiAqIGNvbnN0IHJlc3VsdDEgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudE1lYW4oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMF0sICdpbnQzMicpKTtcbiAqIHJlc3VsdDEucHJpbnQoKTsgLy8gW1swLCAwLCAwLCAwXV1cbiAqXG4gKiAvLyBTZWxlY3QgdHdvIHJvd3MsIHR3byBzZWdtZW50cy5cbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudE1lYW4oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSk7XG4gKiByZXN1bHQyLnByaW50KCk7IC8vIFtbMSwgMiwgMywgNF0sIFstMSwgLTIsIC0zLCAtNF1dXG4gKlxuICogLy8gU2VsZWN0IGFsbCByb3dzLCB0d28gc2VnbWVudHMuXG4gKiBjb25zdCByZXN1bHQzID0gdGYuc3BhcnNlLnNwYXJzZVNlZ21lbnRNZWFuKGMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxLCAyXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxLCAxXSwgJ2ludDMyJykpO1xuICogcmVzdWx0My5wcmludCgpOyAvLyBbWzEuMCwgMi4wLCAzLjAsIDQuMF0sIFsyLjUsIDIuNSwgMi41LCAyLjVdXVxuICogYGBgXG4gKiBAcGFyYW0gZGF0YTogQSBUZW5zb3Igb2YgYXQgbGVhc3Qgb25lIGRpbWVuc2lvbiB3aXRoIGRhdGEgdGhhdCB3aWxsIGJlXG4gKiAgICAgYXNzZW1ibGVkIGluIHRoZSBvdXRwdXQuXG4gKiBAcGFyYW0gaW5kaWNlczogQSAxLUQgVGVuc29yIHdpdGggaW5kaWNlcyBpbnRvIGRhdGEuIEhhcyBzYW1lIHJhbmsgYXNcbiAqICAgICBzZWdtZW50SWRzLlxuICogQHBhcmFtIHNlZ21lbnRJZHM6IEEgMS1EIFRlbnNvciB3aXRoIGluZGljZXMgaW50byB0aGUgb3V0cHV0IFRlbnNvci4gVmFsdWVzXG4gKiAgICAgc2hvdWxkIGJlIHNvcnRlZCBhbmQgY2FuIGJlIHJlcGVhdGVkLlxuICogQHJldHVybiBIYXMgc2FtZSBzaGFwZSBhcyBkYXRhLCBleGNlcHQgZm9yIGRpbWVuc2lvbiAwIHdoaWNoIGhhcyBlcXVhbCB0b1xuICogICAgICAgICB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1NwYXJzZSd9XG4gKi9cbmZ1bmN0aW9uIHNwYXJzZVNlZ21lbnRNZWFuXyhcbiAgICBkYXRhOiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBzZWdtZW50SWRzOiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnc3BhcnNlU2VnbWVudE1lYW4nKTtcbiAgY29uc3QgJGluZGljZXMgPVxuICAgICAgY29udmVydFRvVGVuc29yKGluZGljZXMsICdpbmRpY2VzJywgJ3NwYXJzZVNlZ21lbnRNZWFuJywgJ2ludDMyJyk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihzZWdtZW50SWRzLCAnc2VnbWVudElkcycsICdzcGFyc2VTZWdtZW50TWVhbicsICdpbnQzMicpO1xuXG4gIGlmICgkZGF0YS5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERhdGEgc2hvdWxkIGJlIGF0IGxlYXN0IDEgZGltZW5zaW9uYWwgYnV0IHJlY2VpdmVkIHNjYWxhcmApO1xuICB9XG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICAkeyRpbmRpY2VzLnNoYXBlfWApO1xuICB9XG4gIGlmICgkc2VnbWVudElkcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWdtZW50IGlkcyBzaG91bGQgYmUgVGVuc29yMUQgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICAgJHskc2VnbWVudElkcy5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGlucHV0czogU3BhcnNlU2VnbWVudE1lYW5JbnB1dHMgPSB7XG4gICAgZGF0YTogJGRhdGEsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gICAgc2VnbWVudElkczogJHNlZ21lbnRJZHNcbiAgfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VTZWdtZW50TWVhbiwgaW5wdXRzIGFzIHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZVNlZ21lbnRNZWFuID0gLyogQF9fUFVSRV9fICovIG9wKHtzcGFyc2VTZWdtZW50TWVhbl99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { SparseSegmentSum } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Computes the sum along sparse segments of a tensor.\n *\n * ```js\n * const c = tf.tensor2d([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]);\n * // Select two rows, one segment.\n * const result1 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 0], 'int32'));\n * result1.print(); // [[0, 0, 0, 0]]\n *\n * // Select two rows, two segments.\n * const result2 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1], 'int32'),\n * tf.tensor1d([0, 1], 'int32'));\n * result2.print(); // [[1, 2, 3, 4], [-1, -2, -3, -4]]\n *\n * // Select all rows, two segments.\n * const result3 = tf.sparse.sparseSegmentSum(c,\n * tf.tensor1d([0, 1, 2], 'int32'),\n * tf.tensor1d([0, 0, 1], 'int32'));\n * result3.print(); // [[0, 0, 0, 0], [5, 6, 7, 8]]\n * ```\n * @param data: A Tensor of at least one dimension with data that will be\n * assembled in the output.\n * @param indices: A 1-D Tensor with indices into data. Has same rank as\n * segmentIds.\n * @param segmentIds: A 1-D Tensor with indices into the output Tensor. Values\n * should be sorted and can be repeated.\n * @return Has same shape as data, except for dimension 0 which has equal to\n * the number of segments.\n *\n * @doc {heading: 'Operations', subheading: 'Sparse'}\n */\nfunction sparseSegmentSum_(data, indices, segmentIds) {\n const $data = convertToTensor(data, 'data', 'sparseSegmentSum');\n const $indices = convertToTensor(indices, 'indices', 'sparseSegmentSum', 'int32');\n const $segmentIds = convertToTensor(segmentIds, 'segmentIds', 'sparseSegmentSum', 'int32');\n if ($data.rank < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if ($indices.rank !== 1) {\n throw new Error(`Indices should be Tensor1D but received shape\n ${$indices.shape}`);\n }\n if ($segmentIds.rank !== 1) {\n throw new Error(`Segment ids should be Tensor1D but received shape\n ${$segmentIds.shape}`);\n }\n const inputs = {\n data: $data,\n indices: $indices,\n segmentIds: $segmentIds\n };\n return ENGINE.runKernel(SparseSegmentSum, inputs);\n}\nexport const sparseSegmentSum = /* @__PURE__ */ op({ sparseSegmentSum_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlL3NwYXJzZV9zZWdtZW50X3N1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDdEIsSUFBdUIsRUFBRSxPQUE0QixFQUNyRCxVQUErQjtJQUNqQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sUUFBUSxHQUNWLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTNFLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDO1dBQ1QsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUM7V0FDVCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM3QjtJQUVELE1BQU0sTUFBTSxHQUEyQjtRQUNyQyxJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFVBQVUsRUFBRSxXQUFXO0tBQ3hCLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBWSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTcGFyc2VTZWdtZW50U3VtLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICcuLi8uLi90ZW5zb3InO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHN1bSBhbG9uZyBzcGFyc2Ugc2VnbWVudHMgb2YgYSB0ZW5zb3IuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGMgPSB0Zi50ZW5zb3IyZChbWzEsMiwzLDRdLCBbLTEsLTIsLTMsLTRdLCBbNSw2LDcsOF1dKTtcbiAqIC8vIFNlbGVjdCB0d28gcm93cywgb25lIHNlZ21lbnQuXG4gKiBjb25zdCByZXN1bHQxID0gdGYuc3BhcnNlLnNwYXJzZVNlZ21lbnRTdW0oYyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJyksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMF0sICdpbnQzMicpKTtcbiAqIHJlc3VsdDEucHJpbnQoKTsgLy8gW1swLCAwLCAwLCAwXV1cbiAqXG4gKiAvLyBTZWxlY3QgdHdvIHJvd3MsIHR3byBzZWdtZW50cy5cbiAqIGNvbnN0IHJlc3VsdDIgPSB0Zi5zcGFyc2Uuc3BhcnNlU2VnbWVudFN1bShjLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDFdLCAnaW50MzInKSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmLnRlbnNvcjFkKFswLCAxXSwgJ2ludDMyJykpO1xuICogcmVzdWx0Mi5wcmludCgpOyAvLyBbWzEsIDIsIDMsIDRdLCBbLTEsIC0yLCAtMywgLTRdXVxuICpcbiAqIC8vIFNlbGVjdCBhbGwgcm93cywgdHdvIHNlZ21lbnRzLlxuICogY29uc3QgcmVzdWx0MyA9IHRmLnNwYXJzZS5zcGFyc2VTZWdtZW50U3VtKGMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Zi50ZW5zb3IxZChbMCwgMSwgMl0sICdpbnQzMicpLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGYudGVuc29yMWQoWzAsIDAsIDFdLCAnaW50MzInKSk7XG4gKiByZXN1bHQzLnByaW50KCk7IC8vIFtbMCwgMCwgMCwgMF0sIFs1LCA2LCA3LCA4XV1cbiAqIGBgYFxuICogQHBhcmFtIGRhdGE6IEEgVGVuc29yIG9mIGF0IGxlYXN0IG9uZSBkaW1lbnNpb24gd2l0aCBkYXRhIHRoYXQgd2lsbCBiZVxuICogICAgIGFzc2VtYmxlZCBpbiB0aGUgb3V0cHV0LlxuICogQHBhcmFtIGluZGljZXM6IEEgMS1EIFRlbnNvciB3aXRoIGluZGljZXMgaW50byBkYXRhLiBIYXMgc2FtZSByYW5rIGFzXG4gKiAgICAgc2VnbWVudElkcy5cbiAqIEBwYXJhbSBzZWdtZW50SWRzOiBBIDEtRCBUZW5zb3Igd2l0aCBpbmRpY2VzIGludG8gdGhlIG91dHB1dCBUZW5zb3IuIFZhbHVlc1xuICogICAgIHNob3VsZCBiZSBzb3J0ZWQgYW5kIGNhbiBiZSByZXBlYXRlZC5cbiAqIEByZXR1cm4gSGFzIHNhbWUgc2hhcGUgYXMgZGF0YSwgZXhjZXB0IGZvciBkaW1lbnNpb24gMCB3aGljaCBoYXMgZXF1YWwgdG9cbiAqICAgICAgICAgdGhlIG51bWJlciBvZiBzZWdtZW50cy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTcGFyc2UnfVxuICovXG5mdW5jdGlvbiBzcGFyc2VTZWdtZW50U3VtXyhcbiAgICBkYXRhOiBUZW5zb3J8VGVuc29yTGlrZSwgaW5kaWNlczogVGVuc29yMUR8VGVuc29yTGlrZSxcbiAgICBzZWdtZW50SWRzOiBUZW5zb3IxRHxUZW5zb3JMaWtlKTogVGVuc29yIHtcbiAgY29uc3QgJGRhdGEgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YSwgJ2RhdGEnLCAnc3BhcnNlU2VnbWVudFN1bScpO1xuICBjb25zdCAkaW5kaWNlcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5kaWNlcywgJ2luZGljZXMnLCAnc3BhcnNlU2VnbWVudFN1bScsICdpbnQzMicpO1xuICBjb25zdCAkc2VnbWVudElkcyA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3Ioc2VnbWVudElkcywgJ3NlZ21lbnRJZHMnLCAnc3BhcnNlU2VnbWVudFN1bScsICdpbnQzMicpO1xuXG4gIGlmICgkZGF0YS5yYW5rIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERhdGEgc2hvdWxkIGJlIGF0IGxlYXN0IDEgZGltZW5zaW9uYWwgYnV0IHJlY2VpdmVkIHNjYWxhcmApO1xuICB9XG4gIGlmICgkaW5kaWNlcy5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICR7JGluZGljZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKCRzZWdtZW50SWRzLnJhbmsgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlZ21lbnQgaWRzIHNob3VsZCBiZSBUZW5zb3IxRCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICR7JHNlZ21lbnRJZHMuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dHM6IFNwYXJzZVNlZ21lbnRTdW1JbnB1dHMgPSB7XG4gICAgZGF0YTogJGRhdGEsXG4gICAgaW5kaWNlczogJGluZGljZXMsXG4gICAgc2VnbWVudElkczogJHNlZ21lbnRJZHNcbiAgfTtcblxuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTcGFyc2VTZWdtZW50U3VtLCBpbnB1dHMgYXMge30pO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudFN1bSA9IC8qIEBfX1BVUkVfXyAqLyBvcCh7c3BhcnNlU2VnbWVudFN1bV99KTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringNGrams } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Creates ngrams from ragged string data.\n *\n * This op accepts a ragged tensor with 1 ragged dimension containing only\n * strings and outputs a ragged tensor with 1 ragged dimension containing ngrams\n * of that string, joined along the innermost axis.\n *\n * ```js\n * const result = tf.string.stringNGrams(\n * ['a', 'b', 'c', 'd'], tf.tensor1d([0, 2, 4], 'int32'),\n * '|', [1, 2], 'LP', 'RP', -1, false);\n * result['nGrams'].print(); // ['a', 'b', 'LP|a', 'a|b', 'b|RP',\n * // 'c', 'd', 'LP|c', 'c|d', 'd|RP']\n * result['nGramsSplits'].print(); // [0, 5, 10]\n * ```\n * @param data: The values tensor of the ragged string tensor to make ngrams out\n * of. Must be a 1D string tensor.\n * @param dataSplits: The splits tensor of the ragged string tensor to make\n * ngrams out of.\n * @param separator: The string to append between elements of the token. Use \"\"\n * for no separator.\n * @param nGramWidths: The sizes of the ngrams to create.\n * @param leftPad: The string to use to pad the left side of the ngram sequence.\n * Only used if pad_width !== 0.\n * @param rightPad: The string to use to pad the right side of the ngram\n * sequence. Only used if pad_width !== 0.\n * @param padWidth: The number of padding elements to add to each side of each\n * sequence. Note that padding will never be greater than `nGramWidths`-1\n * regardless of this value. If `padWidth`=-1, then add max(`nGramWidths`)-1\n * elements.\n * @param preserveShortSequences: If true, then ensure that at least one ngram\n * is generated for each input sequence. In particular, if an input sequence\n * is shorter than min(ngramWidth) + 2*padWidth, then generate a single\n * ngram containing the entire sequence. If false, then no ngrams are\n * generated for these short input sequences.\n * @return A map with the following properties:\n * - nGrams: The values tensor of the output ngrams ragged tensor.\n * - nGramsSplits: The splits tensor of the output ngrams ragged tensor.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringNGrams_(data, dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n const $data = convertToTensor(data, 'data', 'stringNGrams', 'string');\n if ($data.dtype !== 'string') {\n throw new Error('Data must be of datatype string');\n }\n if ($data.shape.length !== 1) {\n throw new Error(`Data must be a vector, saw: ${$data.shape}`);\n }\n const $dataSplits = convertToTensor(dataSplits, 'dataSplits', 'stringNGrams');\n if ($dataSplits.dtype !== 'int32') {\n throw new Error('Data splits must be of datatype int32');\n }\n const attrs = {\n separator,\n nGramWidths,\n leftPad,\n rightPad,\n padWidth,\n preserveShortSequences\n };\n const inputs = { data: $data, dataSplits: $dataSplits };\n const result = ENGINE.runKernel(StringNGrams, inputs, attrs);\n return { nGrams: result[0], nGramsSplits: result[1] };\n}\nexport const stringNGrams = /* @__PURE__ */ op({ stringNGrams_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX25fZ3JhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RyaW5nX25fZ3JhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUF3QyxNQUFNLG9CQUFvQixDQUFDO0FBR3ZGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLElBQXlCLEVBQUUsVUFBNkIsRUFBRSxTQUFpQixFQUMzRSxXQUFxQixFQUFFLE9BQWUsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQzFFLHNCQUErQjtJQUNqQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEUsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7S0FDcEQ7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMvRDtJQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlFLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxLQUFLLEdBQXNCO1FBQy9CLFNBQVM7UUFDVCxXQUFXO1FBQ1gsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1Isc0JBQXNCO0tBQ3ZCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBdUIsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FDUixNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFZLEVBQUUsS0FBVyxDQUFDLENBQUM7SUFDOUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdOR3JhbXMsIFN0cmluZ05HcmFtc0F0dHJzLCBTdHJpbmdOR3JhbXNJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUR9IGZyb20gJy4uLy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi8uLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0IHtjb252ZXJ0VG9UZW5zb3J9IGZyb20gJy4uLy4uL3RlbnNvcl91dGlsX2Vudic7XG5pbXBvcnQge1RlbnNvckxpa2V9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7b3B9IGZyb20gJy4uL29wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBuZ3JhbXMgZnJvbSByYWdnZWQgc3RyaW5nIGRhdGEuXG4gKlxuICogVGhpcyBvcCBhY2NlcHRzIGEgcmFnZ2VkIHRlbnNvciB3aXRoIDEgcmFnZ2VkIGRpbWVuc2lvbiBjb250YWluaW5nIG9ubHlcbiAqIHN0cmluZ3MgYW5kIG91dHB1dHMgYSByYWdnZWQgdGVuc29yIHdpdGggMSByYWdnZWQgZGltZW5zaW9uIGNvbnRhaW5pbmcgbmdyYW1zXG4gKiBvZiB0aGF0IHN0cmluZywgam9pbmVkIGFsb25nIHRoZSBpbm5lcm1vc3QgYXhpcy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVzdWx0ID0gdGYuc3RyaW5nLnN0cmluZ05HcmFtcyhcbiAqICAgWydhJywgJ2InLCAnYycsICdkJ10sIHRmLnRlbnNvcjFkKFswLCAyLCA0XSwgJ2ludDMyJyksXG4gKiAgICd8JywgWzEsIDJdLCAnTFAnLCAnUlAnLCAtMSwgZmFsc2UpO1xuICogcmVzdWx0WyduR3JhbXMnXS5wcmludCgpOyAvLyBbJ2EnLCAnYicsICdMUHxhJywgJ2F8YicsICdifFJQJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICdjJywgJ2QnLCAnTFB8YycsICdjfGQnLCAnZHxSUCddXG4gKiByZXN1bHRbJ25HcmFtc1NwbGl0cyddLnByaW50KCk7IC8vIFswLCA1LCAxMF1cbiAqIGBgYFxuICogQHBhcmFtIGRhdGE6IFRoZSB2YWx1ZXMgdGVuc29yIG9mIHRoZSByYWdnZWQgc3RyaW5nIHRlbnNvciB0byBtYWtlIG5ncmFtcyBvdXRcbiAqICAgICBvZi4gTXVzdCBiZSBhIDFEIHN0cmluZyB0ZW5zb3IuXG4gKiBAcGFyYW0gZGF0YVNwbGl0czogVGhlIHNwbGl0cyB0ZW5zb3Igb2YgdGhlIHJhZ2dlZCBzdHJpbmcgdGVuc29yIHRvIG1ha2VcbiAqICAgICBuZ3JhbXMgb3V0IG9mLlxuICogQHBhcmFtIHNlcGFyYXRvcjogVGhlIHN0cmluZyB0byBhcHBlbmQgYmV0d2VlbiBlbGVtZW50cyBvZiB0aGUgdG9rZW4uIFVzZSBcIlwiXG4gKiAgICAgZm9yIG5vIHNlcGFyYXRvci5cbiAqIEBwYXJhbSBuR3JhbVdpZHRoczogVGhlIHNpemVzIG9mIHRoZSBuZ3JhbXMgdG8gY3JlYXRlLlxuICogQHBhcmFtIGxlZnRQYWQ6IFRoZSBzdHJpbmcgdG8gdXNlIHRvIHBhZCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBuZ3JhbSBzZXF1ZW5jZS5cbiAqICAgICBPbmx5IHVzZWQgaWYgcGFkX3dpZHRoICE9PSAwLlxuICogQHBhcmFtIHJpZ2h0UGFkOiBUaGUgc3RyaW5nIHRvIHVzZSB0byBwYWQgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG5ncmFtXG4gKiAgICAgc2VxdWVuY2UuIE9ubHkgdXNlZCBpZiBwYWRfd2lkdGggIT09IDAuXG4gKiBAcGFyYW0gcGFkV2lkdGg6IFRoZSBudW1iZXIgb2YgcGFkZGluZyBlbGVtZW50cyB0byBhZGQgdG8gZWFjaCBzaWRlIG9mIGVhY2hcbiAqICAgICBzZXF1ZW5jZS4gTm90ZSB0aGF0IHBhZGRpbmcgd2lsbCBuZXZlciBiZSBncmVhdGVyIHRoYW4gYG5HcmFtV2lkdGhzYC0xXG4gKiAgICAgcmVnYXJkbGVzcyBvZiB0aGlzIHZhbHVlLiBJZiBgcGFkV2lkdGhgPS0xLCB0aGVuIGFkZCBtYXgoYG5HcmFtV2lkdGhzYCktMVxuICogICAgIGVsZW1lbnRzLlxuICogQHBhcmFtIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IElmIHRydWUsIHRoZW4gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG5ncmFtXG4gKiAgICAgaXMgZ2VuZXJhdGVkIGZvciBlYWNoIGlucHV0IHNlcXVlbmNlLiBJbiBwYXJ0aWN1bGFyLCBpZiBhbiBpbnB1dCBzZXF1ZW5jZVxuICogICAgIGlzIHNob3J0ZXIgdGhhbiBtaW4obmdyYW1XaWR0aCkgKyAyKnBhZFdpZHRoLCB0aGVuIGdlbmVyYXRlIGEgc2luZ2xlXG4gKiAgICAgbmdyYW0gY29udGFpbmluZyB0aGUgZW50aXJlIHNlcXVlbmNlLiBJZiBmYWxzZSwgdGhlbiBubyBuZ3JhbXMgYXJlXG4gKiAgICAgZ2VuZXJhdGVkIGZvciB0aGVzZSBzaG9ydCBpbnB1dCBzZXF1ZW5jZXMuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gbkdyYW1zOiBUaGUgdmFsdWVzIHRlbnNvciBvZiB0aGUgb3V0cHV0IG5ncmFtcyByYWdnZWQgdGVuc29yLlxuICogICAgIC0gbkdyYW1zU3BsaXRzOiBUaGUgc3BsaXRzIHRlbnNvciBvZiB0aGUgb3V0cHV0IG5ncmFtcyByYWdnZWQgdGVuc29yLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdPcGVyYXRpb25zJywgc3ViaGVhZGluZzogJ1N0cmluZyd9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ05HcmFtc18oXG4gICAgZGF0YTogVGVuc29yMUR8VGVuc29yTGlrZSwgZGF0YVNwbGl0czogVGVuc29yfFRlbnNvckxpa2UsIHNlcGFyYXRvcjogc3RyaW5nLFxuICAgIG5HcmFtV2lkdGhzOiBudW1iZXJbXSwgbGVmdFBhZDogc3RyaW5nLCByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IGJvb2xlYW4pOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRkYXRhID0gY29udmVydFRvVGVuc29yKGRhdGEsICdkYXRhJywgJ3N0cmluZ05HcmFtcycsICdzdHJpbmcnKTtcbiAgaWYgKCRkYXRhLmR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBtdXN0IGJlIG9mIGRhdGF0eXBlIHN0cmluZycpO1xuICB9XG4gIGlmICgkZGF0YS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgbXVzdCBiZSBhIHZlY3Rvciwgc2F3OiAkeyRkYXRhLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgJGRhdGFTcGxpdHMgPSBjb252ZXJ0VG9UZW5zb3IoZGF0YVNwbGl0cywgJ2RhdGFTcGxpdHMnLCAnc3RyaW5nTkdyYW1zJyk7XG4gIGlmICgkZGF0YVNwbGl0cy5kdHlwZSAhPT0gJ2ludDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRGF0YSBzcGxpdHMgbXVzdCBiZSBvZiBkYXRhdHlwZSBpbnQzMicpO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IFN0cmluZ05HcmFtc0F0dHJzID0ge1xuICAgIHNlcGFyYXRvcixcbiAgICBuR3JhbVdpZHRocyxcbiAgICBsZWZ0UGFkLFxuICAgIHJpZ2h0UGFkLFxuICAgIHBhZFdpZHRoLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXNcbiAgfTtcblxuICBjb25zdCBpbnB1dHM6IFN0cmluZ05HcmFtc0lucHV0cyA9IHtkYXRhOiAkZGF0YSwgZGF0YVNwbGl0czogJGRhdGFTcGxpdHN9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoU3RyaW5nTkdyYW1zLCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbiAgcmV0dXJuIHtuR3JhbXM6IHJlc3VsdFswXSwgbkdyYW1zU3BsaXRzOiByZXN1bHRbMV19O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nTkdyYW1zID0gLyogQF9fUFVSRV9fICovIG9wKHtzdHJpbmdOR3JhbXNffSk7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringSplit } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Split elements of `input` based on `delimiter` into a SparseTensor .\n *\n * Let N be the size of source (typically N will be the batch size). Split each\n * element of `input` based on `delimiter` and return a SparseTensor containing\n * the splitted tokens. Empty tokens are ignored if `skipEmpty` is set to True.\n *\n * `delimiter` can be empty, or a string of split characters. If `delimiter` is\n * an empty string, each element of `input` is split into individual\n * character strings. Otherwise every character of `delimiter` is a potential\n * split point.\n *\n * ```js\n * const result = tf.string.stringSplit(['hello world', 'a b c'], ' ');\n * result['indices'].print(); // [[0, 0], [0, 1], [1, 0], [1, 1], [1, 2]]\n * result['values'].print(); // ['hello', 'world', 'a', 'b', 'c']\n * result['shape'].print(); // [2, 3]\n * ```\n * @param input: 1-D. Strings to split.\n * @param delimiter: 0-D. Delimiter characters, or empty string.\n * @param skipEmpty: Optional. If true, skip the empty strings from the result.\n * Defaults to true.\n * @return A map with the following properties:\n * - indices: A dense matrix of int32 representing the indices of the sparse\n * tensor.\n * - values: A vector of strings corresponding to the splited values.\n * - shape: a length-2 vector of int32 representing the shape of the sparse\n * tensor, where the first value is N and the second value is the maximum number\n * of tokens in a single input entry.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringSplit_(input, delimiter, skipEmpty = true) {\n const $input = convertToTensor(input, 'input', 'stringSplit', 'string');\n const $delimiter = convertToTensor(delimiter, 'delimiter', 'stringSplit', 'string');\n if ($input.rank !== 1) {\n throw new Error(`Input should be Tensor1D but received shape ${$input.shape}`);\n }\n if ($delimiter.rank !== 0) {\n throw new Error(`Delimiter should be a scalar but received shape ${$delimiter.shape}`);\n }\n const attrs = { skipEmpty };\n const inputs = { input: $input, delimiter: $delimiter };\n const result = ENGINE.runKernel(StringSplit, inputs, attrs);\n return { indices: result[0], values: result[1], shape: result[2] };\n}\nexport const stringSplit = /* @__PURE__ */ op({ stringSplit_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX3NwbGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3RyaW5nL3N0cmluZ19zcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxXQUFXLEVBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFHcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxTQUFTLFlBQVksQ0FDakIsS0FBMEIsRUFBRSxTQUE0QixFQUN4RCxTQUFTLEdBQUcsSUFBSTtJQUNsQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEUsTUFBTSxVQUFVLEdBQ1osZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXJFLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDWCwrQ0FBK0MsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsbURBQW1ELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsTUFBTSxLQUFLLEdBQXFCLEVBQUMsU0FBUyxFQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQXNCLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLENBQUM7SUFDekUsTUFBTSxNQUFNLEdBQ1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBWSxFQUFFLEtBQVcsQ0FBQyxDQUFDO0lBQzdELE9BQU8sRUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdTcGxpdCwgU3RyaW5nU3BsaXRBdHRycywgU3RyaW5nU3BsaXRJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uLy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7U2NhbGFyTGlrZSwgVGVuc29yTGlrZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtvcH0gZnJvbSAnLi4vb3BlcmF0aW9uJztcblxuLyoqXG4gKiBTcGxpdCBlbGVtZW50cyBvZiBgaW5wdXRgIGJhc2VkIG9uIGBkZWxpbWl0ZXJgIGludG8gYSBTcGFyc2VUZW5zb3IgLlxuICpcbiAqIExldCBOIGJlIHRoZSBzaXplIG9mIHNvdXJjZSAodHlwaWNhbGx5IE4gd2lsbCBiZSB0aGUgYmF0Y2ggc2l6ZSkuIFNwbGl0IGVhY2hcbiAqIGVsZW1lbnQgb2YgYGlucHV0YCBiYXNlZCBvbiBgZGVsaW1pdGVyYCBhbmQgcmV0dXJuIGEgU3BhcnNlVGVuc29yIGNvbnRhaW5pbmdcbiAqIHRoZSBzcGxpdHRlZCB0b2tlbnMuIEVtcHR5IHRva2VucyBhcmUgaWdub3JlZCBpZiBgc2tpcEVtcHR5YCBpcyBzZXQgdG8gVHJ1ZS5cbiAqXG4gKiBgZGVsaW1pdGVyYCBjYW4gYmUgZW1wdHksIG9yIGEgc3RyaW5nIG9mIHNwbGl0IGNoYXJhY3RlcnMuIElmIGBkZWxpbWl0ZXJgIGlzXG4gKiBhbiBlbXB0eSBzdHJpbmcsIGVhY2ggZWxlbWVudCBvZiBgaW5wdXRgIGlzIHNwbGl0IGludG8gaW5kaXZpZHVhbFxuICogY2hhcmFjdGVyIHN0cmluZ3MuIE90aGVyd2lzZSBldmVyeSBjaGFyYWN0ZXIgb2YgYGRlbGltaXRlcmAgaXMgYSBwb3RlbnRpYWxcbiAqIHNwbGl0IHBvaW50LlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZXN1bHQgPSB0Zi5zdHJpbmcuc3RyaW5nU3BsaXQoWydoZWxsbyB3b3JsZCcsICAnYSBiIGMnXSwgJyAnKTtcbiAqIHJlc3VsdFsnaW5kaWNlcyddLnByaW50KCk7IC8vIFtbMCwgMF0sIFswLCAxXSwgWzEsIDBdLCBbMSwgMV0sIFsxLCAyXV1cbiAqIHJlc3VsdFsndmFsdWVzJ10ucHJpbnQoKTsgLy8gWydoZWxsbycsICd3b3JsZCcsICdhJywgJ2InLCAnYyddXG4gKiByZXN1bHRbJ3NoYXBlJ10ucHJpbnQoKTsgLy8gWzIsIDNdXG4gKiBgYGBcbiAqIEBwYXJhbSBpbnB1dDogMS1ELiBTdHJpbmdzIHRvIHNwbGl0LlxuICogQHBhcmFtIGRlbGltaXRlcjogMC1ELiBEZWxpbWl0ZXIgY2hhcmFjdGVycywgb3IgZW1wdHkgc3RyaW5nLlxuICogQHBhcmFtIHNraXBFbXB0eTogT3B0aW9uYWwuIElmIHRydWUsIHNraXAgdGhlIGVtcHR5IHN0cmluZ3MgZnJvbSB0aGUgcmVzdWx0LlxuICogICAgIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcmV0dXJuIEEgbWFwIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAgIC0gaW5kaWNlczogQSBkZW5zZSBtYXRyaXggb2YgaW50MzIgcmVwcmVzZW50aW5nIHRoZSBpbmRpY2VzIG9mIHRoZSBzcGFyc2VcbiAqICAgICAgIHRlbnNvci5cbiAqICAgICAtIHZhbHVlczogQSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGxpdGVkIHZhbHVlcy5cbiAqICAgICAtIHNoYXBlOiBhIGxlbmd0aC0yIHZlY3RvciBvZiBpbnQzMiByZXByZXNlbnRpbmcgdGhlIHNoYXBlIG9mIHRoZSBzcGFyc2VcbiAqIHRlbnNvciwgd2hlcmUgdGhlIGZpcnN0IHZhbHVlIGlzIE4gYW5kIHRoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIG1heGltdW0gbnVtYmVyXG4gKiBvZiB0b2tlbnMgaW4gYSBzaW5nbGUgaW5wdXQgZW50cnkuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3RyaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5nU3BsaXRfKFxuICAgIGlucHV0OiBUZW5zb3IxRHxUZW5zb3JMaWtlLCBkZWxpbWl0ZXI6IFNjYWxhcnxTY2FsYXJMaWtlLFxuICAgIHNraXBFbXB0eSA9IHRydWUpOiBOYW1lZFRlbnNvck1hcCB7XG4gIGNvbnN0ICRpbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ2lucHV0JywgJ3N0cmluZ1NwbGl0JywgJ3N0cmluZycpO1xuICBjb25zdCAkZGVsaW1pdGVyID1cbiAgICAgIGNvbnZlcnRUb1RlbnNvcihkZWxpbWl0ZXIsICdkZWxpbWl0ZXInLCAnc3RyaW5nU3BsaXQnLCAnc3RyaW5nJyk7XG5cbiAgaWYgKCRpbnB1dC5yYW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW5wdXQgc2hvdWxkIGJlIFRlbnNvcjFEIGJ1dCByZWNlaXZlZCBzaGFwZSAkeyRpbnB1dC5zaGFwZX1gKTtcbiAgfVxuICBpZiAoJGRlbGltaXRlci5yYW5rICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGVsaW1pdGVyIHNob3VsZCBiZSBhIHNjYWxhciBidXQgcmVjZWl2ZWQgc2hhcGUgJHskZGVsaW1pdGVyLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgYXR0cnM6IFN0cmluZ1NwbGl0QXR0cnMgPSB7c2tpcEVtcHR5fTtcbiAgY29uc3QgaW5wdXRzOiBTdHJpbmdTcGxpdElucHV0cyA9IHtpbnB1dDogJGlucHV0LCBkZWxpbWl0ZXI6ICRkZWxpbWl0ZXJ9O1xuICBjb25zdCByZXN1bHQ6IFRlbnNvcltdID1cbiAgICAgIEVOR0lORS5ydW5LZXJuZWwoU3RyaW5nU3BsaXQsIGlucHV0cyBhcyB7fSwgYXR0cnMgYXMge30pO1xuICByZXR1cm4ge2luZGljZXM6IHJlc3VsdFswXSwgdmFsdWVzOiByZXN1bHRbMV0sIHNoYXBlOiByZXN1bHRbMl19O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nU3BsaXQgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0cmluZ1NwbGl0X30pO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StringToHashBucketFast } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Converts each string in the input Tensor to its hash mod by a number of\n * buckets.\n *\n * The hash function is deterministic on the content of the string within the\n * process and will never change. However, it is not suitable for cryptography.\n * This function may be used when CPU time is scarce and inputs are trusted or\n * unimportant. There is a risk of adversaries constructing inputs that all hash\n * to the same bucket.\n *\n * ```js\n * const result = tf.string.stringToHashBucketFast(\n * ['Hello', 'TensorFlow', '2.x'], 3);\n * result.print(); // [0, 2, 2]\n * ```\n * @param input: The strings to assign a hash bucket.\n * @param numBuckets: The number of buckets.\n * @return A Tensor of the same shape as the input tensor.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction stringToHashBucketFast_(input, numBuckets) {\n const $input = convertToTensor(input, 'input', 'stringToHashBucketFast', 'string');\n const attrs = { numBuckets };\n if (numBuckets <= 0) {\n throw new Error(`Number of buckets must be at least 1`);\n }\n const inputs = { input: $input };\n return ENGINE.runKernel(StringToHashBucketFast, inputs, attrs);\n}\nexport const stringToHashBucketFast = /* @__PURE__ */ op({ stringToHashBucketFast_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsc0JBQXNCLEVBQTRELE1BQU0sb0JBQW9CLENBQUM7QUFFckgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDNUIsS0FBd0IsRUFBRSxVQUFrQjtJQUM5QyxNQUFNLE1BQU0sR0FDUixlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RSxNQUFNLEtBQUssR0FBZ0MsRUFBQyxVQUFVLEVBQUMsQ0FBQztJQUV4RCxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxNQUFNLEdBQWlDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxNQUFZLEVBQUUsS0FBVyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyx1QkFBdUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0QXR0cnMsIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHN9IGZyb20gJy4uLy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIENvbnZlcnRzIGVhY2ggc3RyaW5nIGluIHRoZSBpbnB1dCBUZW5zb3IgdG8gaXRzIGhhc2ggbW9kIGJ5IGEgbnVtYmVyIG9mXG4gKiBidWNrZXRzLlxuICpcbiAqIFRoZSBoYXNoIGZ1bmN0aW9uIGlzIGRldGVybWluaXN0aWMgb24gdGhlIGNvbnRlbnQgb2YgdGhlIHN0cmluZyB3aXRoaW4gdGhlXG4gKiBwcm9jZXNzIGFuZCB3aWxsIG5ldmVyIGNoYW5nZS4gSG93ZXZlciwgaXQgaXMgbm90IHN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaHkuXG4gKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHdoZW4gQ1BVIHRpbWUgaXMgc2NhcmNlIGFuZCBpbnB1dHMgYXJlIHRydXN0ZWQgb3JcbiAqIHVuaW1wb3J0YW50LiBUaGVyZSBpcyBhIHJpc2sgb2YgYWR2ZXJzYXJpZXMgY29uc3RydWN0aW5nIGlucHV0cyB0aGF0IGFsbCBoYXNoXG4gKiB0byB0aGUgc2FtZSBidWNrZXQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLnN0cmluZy5zdHJpbmdUb0hhc2hCdWNrZXRGYXN0KFxuICogICBbJ0hlbGxvJywgJ1RlbnNvckZsb3cnLCAnMi54J10sIDMpO1xuICogcmVzdWx0LnByaW50KCk7IC8vIFswLCAyLCAyXVxuICogYGBgXG4gKiBAcGFyYW0gaW5wdXQ6IFRoZSBzdHJpbmdzIHRvIGFzc2lnbiBhIGhhc2ggYnVja2V0LlxuICogQHBhcmFtIG51bUJ1Y2tldHM6IFRoZSBudW1iZXIgb2YgYnVja2V0cy5cbiAqIEByZXR1cm4gQSBUZW5zb3Igb2YgdGhlIHNhbWUgc2hhcGUgYXMgdGhlIGlucHV0IHRlbnNvci5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnT3BlcmF0aW9ucycsIHN1YmhlYWRpbmc6ICdTdHJpbmcnfVxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0XyhcbiAgICBpbnB1dDogVGVuc29yfFRlbnNvckxpa2UsIG51bUJ1Y2tldHM6IG51bWJlcik6IFRlbnNvciB7XG4gIGNvbnN0ICRpbnB1dCA9XG4gICAgICBjb252ZXJ0VG9UZW5zb3IoaW5wdXQsICdpbnB1dCcsICdzdHJpbmdUb0hhc2hCdWNrZXRGYXN0JywgJ3N0cmluZycpO1xuICBjb25zdCBhdHRyczogU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzID0ge251bUJ1Y2tldHN9O1xuXG4gIGlmIChudW1CdWNrZXRzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE51bWJlciBvZiBidWNrZXRzIG11c3QgYmUgYXQgbGVhc3QgMWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRzOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW5wdXRzID0ge2lucHV0OiAkaW5wdXR9O1xuICByZXR1cm4gRU5HSU5FLnJ1bktlcm5lbChTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LCBpbnB1dHMgYXMge30sIGF0dHJzIGFzIHt9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QgPSAvKiBAX19QVVJFX18gKi8gb3Aoe3N0cmluZ1RvSGFzaEJ1Y2tldEZhc3RffSk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../../engine';\nimport { StaticRegexReplace } from '../../kernel_names';\nimport { convertToTensor } from '../../tensor_util_env';\nimport { op } from '../operation';\n/**\n * Replace the match of a `pattern` in `input` with `rewrite`.\n *\n * ```js\n * const result = tf.string.staticRegexReplace(\n * ['format this spacing better'], ' +', ' ');\n * result.print(); // ['format this spacing better']\n * ```\n * @param input: A Tensor of type string. The text to be processed.\n * @param pattern: A string. The regular expression to match the input.\n * @param rewrite: A string. The rewrite to be applied to the matched\n * expression.\n * @param replaceGlobal: An optional bool. Defaults to True. If True, the\n * replacement is global, otherwise the replacement is done only on the\n * first match.\n * @return A Tensor of type string.\n *\n * @doc {heading: 'Operations', subheading: 'String'}\n */\nfunction staticRegexReplace_(input, pattern, rewrite, replaceGlobal = true) {\n const $input = convertToTensor(input, 'input', 'staticRegexReplace', 'string');\n const attrs = { pattern, rewrite, replaceGlobal };\n return ENGINE.runKernel(StaticRegexReplace, { x: $input }, attrs);\n}\nexport const staticRegexReplace = /* @__PURE__ */ op({ staticRegexReplace_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljX3JlZ2V4X3JlcGxhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zdHJpbmcvc3RhdGljX3JlZ2V4X3JlcGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsa0JBQWtCLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFHL0UsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBQyxFQUFFLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLEtBQTBCLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFDNUQsYUFBYSxHQUFDLElBQUk7SUFFbEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQ3BDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUE0QixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDekUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUMvQixLQUFnQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBQyxtQkFBbUIsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi8uLi9lbmdpbmUnO1xuaW1wb3J0IHtTdGF0aWNSZWdleFJlcGxhY2UsIFN0YXRpY1JlZ2V4UmVwbGFjZUF0dHJzfSBmcm9tICcuLi8uLi9rZXJuZWxfbmFtZXMnO1xuaW1wb3J0IHtOYW1lZEF0dHJNYXB9IGZyb20gJy4uLy4uL2tlcm5lbF9yZWdpc3RyeSc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vLi4vdGVuc29yJztcbmltcG9ydCB7Y29udmVydFRvVGVuc29yfSBmcm9tICcuLi8uLi90ZW5zb3JfdXRpbF9lbnYnO1xuaW1wb3J0IHtUZW5zb3JMaWtlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge29wfSBmcm9tICcuLi9vcGVyYXRpb24nO1xuXG4vKipcbiAqIFJlcGxhY2UgdGhlIG1hdGNoIG9mIGEgYHBhdHRlcm5gIGluIGBpbnB1dGAgd2l0aCBgcmV3cml0ZWAuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHJlc3VsdCA9IHRmLnN0cmluZy5zdGF0aWNSZWdleFJlcGxhY2UoXG4gKiAgICAgWydmb3JtYXQgICAgICAgdGhpcyAgIHNwYWNpbmcgICAgICBiZXR0ZXInXSwgJyArJywgJyAnKTtcbiAqIHJlc3VsdC5wcmludCgpOyAvLyBbJ2Zvcm1hdCB0aGlzIHNwYWNpbmcgYmV0dGVyJ11cbiAqIGBgYFxuICogQHBhcmFtIGlucHV0OiBBIFRlbnNvciBvZiB0eXBlIHN0cmluZy4gVGhlIHRleHQgdG8gYmUgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHBhdHRlcm46IEEgc3RyaW5nLiBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBpbnB1dC5cbiAqIEBwYXJhbSByZXdyaXRlOiBBIHN0cmluZy4gVGhlIHJld3JpdGUgdG8gYmUgYXBwbGllZCB0byB0aGUgbWF0Y2hlZFxuICogICAgIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gcmVwbGFjZUdsb2JhbDogQW4gb3B0aW9uYWwgYm9vbC4gRGVmYXVsdHMgdG8gVHJ1ZS4gSWYgVHJ1ZSwgdGhlXG4gKiAgICAgcmVwbGFjZW1lbnQgaXMgZ2xvYmFsLCBvdGhlcndpc2UgdGhlIHJlcGxhY2VtZW50IGlzIGRvbmUgb25seSBvbiB0aGVcbiAqICAgICBmaXJzdCBtYXRjaC5cbiAqIEByZXR1cm4gQSBUZW5zb3Igb2YgdHlwZSBzdHJpbmcuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ09wZXJhdGlvbnMnLCBzdWJoZWFkaW5nOiAnU3RyaW5nJ31cbiAqL1xuZnVuY3Rpb24gc3RhdGljUmVnZXhSZXBsYWNlXyhcbiAgaW5wdXQ6IFRlbnNvciB8IFRlbnNvckxpa2UsIHBhdHRlcm46IHN0cmluZywgcmV3cml0ZTogc3RyaW5nLFxuICByZXBsYWNlR2xvYmFsPXRydWUpOiBUZW5zb3Ige1xuXG4gIGNvbnN0ICRpbnB1dCA9IGNvbnZlcnRUb1RlbnNvcihpbnB1dCwgJ2lucHV0JywgJ3N0YXRpY1JlZ2V4UmVwbGFjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJyk7XG4gIGNvbnN0IGF0dHJzOiBTdGF0aWNSZWdleFJlcGxhY2VBdHRycyA9IHtwYXR0ZXJuLCByZXdyaXRlLCByZXBsYWNlR2xvYmFsfTtcbiAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoU3RhdGljUmVnZXhSZXBsYWNlLCB7eDogJGlucHV0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBOYW1lZEF0dHJNYXApO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhdGljUmVnZXhSZXBsYWNlID0gLyogQF9fUFVSRV9fICovIG9wKHtzdGF0aWNSZWdleFJlcGxhY2VffSk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Modularized ops.\nexport { abs } from './abs';\nexport { acos } from './acos';\nexport { acosh } from './acosh';\nexport { add } from './add';\nexport { addN } from './add_n';\nexport { all } from './all';\nexport { any } from './any';\nexport { argMax } from './arg_max';\nexport { argMin } from './arg_min';\nexport { asin } from './asin';\nexport { asinh } from './asinh';\nexport { atan } from './atan';\nexport { atan2 } from './atan2';\nexport { atanh } from './atanh';\nexport { avgPool } from './avg_pool';\nexport { avgPool3d } from './avg_pool_3d';\nexport { basicLSTMCell } from './basic_lstm_cell';\nexport { batchToSpaceND } from './batch_to_space_nd';\nexport { batchNorm } from './batchnorm';\nexport { batchNorm2d } from './batchnorm2d';\nexport { batchNorm3d } from './batchnorm3d';\nexport { batchNorm4d } from './batchnorm4d';\nexport { bincount } from './bincount';\nexport { bitwiseAnd } from './bitwise_and';\nexport { broadcastArgs } from './broadcast_args';\nexport { broadcastTo } from './broadcast_to';\nexport { buffer } from './buffer';\nexport { cast } from './cast';\nexport { ceil } from './ceil';\nexport { clipByValue } from './clip_by_value';\nexport { clone } from './clone';\nexport { complex } from './complex';\nexport { concat } from './concat';\nexport { concat1d } from './concat_1d';\nexport { concat2d } from './concat_2d';\nexport { concat3d } from './concat_3d';\nexport { concat4d } from './concat_4d';\nexport { conv1d } from './conv1d';\nexport { conv2d } from './conv2d';\nexport { conv2dTranspose } from './conv2d_transpose';\nexport { conv3d } from './conv3d';\nexport { conv3dTranspose } from './conv3d_transpose';\nexport { cos } from './cos';\nexport { cosh } from './cosh';\nexport { cumprod } from './cumprod';\nexport { cumsum } from './cumsum';\nexport { denseBincount } from './dense_bincount';\nexport { depthToSpace } from './depth_to_space';\nexport { depthwiseConv2d } from './depthwise_conv2d';\nexport { diag } from './diag';\nexport { dilation2d } from './dilation2d';\nexport { div } from './div';\nexport { divNoNan } from './div_no_nan';\nexport { dot } from './dot';\nexport { einsum } from './einsum';\nexport { elu } from './elu';\nexport { ensureShape } from './ensure_shape';\nexport { equal } from './equal';\nexport { erf } from './erf';\nexport { euclideanNorm } from './euclidean_norm';\nexport { exp } from './exp';\nexport { expandDims } from './expand_dims';\nexport { expm1 } from './expm1';\nexport { eye } from './eye';\nexport { fill } from './fill';\nexport { floor } from './floor';\nexport { floorDiv } from './floorDiv';\nexport { gather } from './gather';\nexport { greater } from './greater';\nexport { greaterEqual } from './greater_equal';\nexport { imag } from './imag';\nexport { isFinite } from './is_finite';\nexport { isInf } from './is_inf';\nexport { isNaN } from './is_nan';\nexport { leakyRelu } from './leaky_relu';\nexport { less } from './less';\nexport { lessEqual } from './less_equal';\nexport { linspace } from './linspace';\nexport { localResponseNormalization } from './local_response_normalization';\nexport { log } from './log';\nexport { log1p } from './log1p';\nexport { logSigmoid } from './log_sigmoid';\nexport { logSoftmax } from './log_softmax';\nexport { logSumExp } from './log_sum_exp';\nexport { logicalAnd } from './logical_and';\nexport { logicalNot } from './logical_not';\nexport { logicalOr } from './logical_or';\nexport { logicalXor } from './logical_xor';\nexport { lowerBound } from './lower_bound';\nexport { matMul } from './mat_mul';\nexport { max } from './max';\nexport { maxPool } from './max_pool';\nexport { maxPool3d } from './max_pool_3d';\nexport { maxPoolWithArgmax } from './max_pool_with_argmax';\nexport { maximum } from './maximum';\nexport { mean } from './mean';\nexport { meshgrid } from './meshgrid';\nexport { min } from './min';\nexport { minimum } from './minimum';\nexport { mirrorPad } from './mirror_pad';\nexport { mod } from './mod';\nexport { moments } from './moments';\nexport { mul } from './mul';\nexport { multiRNNCell } from './multi_rnn_cell';\nexport { multinomial } from './multinomial';\nexport { neg } from './neg';\nexport { notEqual } from './not_equal';\nexport { oneHot } from './one_hot';\nexport { ones } from './ones';\nexport { onesLike } from './ones_like';\nexport { outerProduct } from './outer_product';\nexport { pad } from './pad';\nexport { pad1d } from './pad1d';\nexport { pad2d } from './pad2d';\nexport { pad3d } from './pad3d';\nexport { pad4d } from './pad4d';\nexport { pool } from './pool';\nexport { pow } from './pow';\nexport { prelu } from './prelu';\nexport { print } from './print';\nexport { prod } from './prod';\nexport { raggedGather } from './ragged_gather';\nexport { raggedRange } from './ragged_range';\nexport { raggedTensorToTensor } from './ragged_tensor_to_tensor';\nexport { rand } from './rand';\nexport { randomGamma } from './random_gamma';\nexport { randomNormal } from './random_normal';\nexport { randomStandardNormal } from './random_standard_normal';\nexport { randomUniform } from './random_uniform';\nexport { randomUniformInt } from './random_uniform_int';\nexport { range } from './range';\nexport { real } from './real';\nexport { reciprocal } from './reciprocal';\nexport { relu } from './relu';\nexport { relu6 } from './relu6';\nexport { reshape } from './reshape';\nexport { reverse } from './reverse';\nexport { reverse1d } from './reverse_1d';\nexport { reverse2d } from './reverse_2d';\nexport { reverse3d } from './reverse_3d';\nexport { reverse4d } from './reverse_4d';\nexport { round } from './round';\nexport { rsqrt } from './rsqrt';\nexport { scalar } from './scalar';\nexport { selu } from './selu';\nexport { separableConv2d } from './separable_conv2d';\nexport { setdiff1dAsync } from './setdiff1d_async';\nexport { sigmoid } from './sigmoid';\nexport { sign } from './sign';\nexport { sin } from './sin';\nexport { sinh } from './sinh';\nexport { slice } from './slice';\nexport { slice1d } from './slice1d';\nexport { slice2d } from './slice2d';\nexport { slice3d } from './slice3d';\nexport { slice4d } from './slice4d';\nexport { softmax } from './softmax';\nexport { softplus } from './softplus';\nexport { spaceToBatchND } from './space_to_batch_nd';\nexport { fft } from './spectral/fft';\nexport { ifft } from './spectral/ifft';\nexport { irfft } from './spectral/irfft';\nexport { rfft } from './spectral/rfft';\nexport { split } from './split';\nexport { sqrt } from './sqrt';\nexport { square } from './square';\nexport { squaredDifference } from './squared_difference';\nexport { squeeze } from './squeeze';\nexport { stack } from './stack';\nexport { step } from './step';\nexport { stridedSlice } from './strided_slice';\nexport { sub } from './sub';\nexport { sum } from './sum';\nexport { tan } from './tan';\nexport { tanh } from './tanh';\nexport { tensor } from './tensor';\nexport { tensor1d } from './tensor1d';\nexport { tensor2d } from './tensor2d';\nexport { tensor3d } from './tensor3d';\nexport { tensor4d } from './tensor4d';\nexport { tensor5d } from './tensor5d';\nexport { tensor6d } from './tensor6d';\nexport { tensorScatterUpdate } from './tensor_scatter_update';\nexport { tile } from './tile';\nexport { topk } from './topk';\nexport { truncatedNormal } from './truncated_normal';\nexport { unique } from './unique';\nexport { unsortedSegmentSum } from './unsorted_segment_sum';\nexport { unstack } from './unstack';\nexport { upperBound } from './upper_bound';\nexport { variable } from './variable';\nexport { where } from './where';\nexport { whereAsync } from './where_async';\nexport { zeros } from './zeros';\nexport { zerosLike } from './zeros_like';\nexport * from './boolean_mask';\nexport * from './transpose';\nexport * from './norm';\nexport * from './moving_average';\nexport * from './scatter_nd';\nexport * from './search_sorted';\nexport * from './sparse_to_dense';\nexport * from './gather_nd';\nexport * from './dropout';\nexport * from './signal_ops_util';\nexport * from './in_top_k';\nexport { op, OP_SCOPE_SUFFIX } from './operation';\nimport { rfft } from './spectral/rfft';\nimport { fft } from './spectral/fft';\nimport { ifft } from './spectral/ifft';\nimport { irfft } from './spectral/irfft';\nconst spectral = {\n fft,\n ifft,\n rfft,\n irfft\n};\nimport * as fused from './fused_ops';\nimport { hammingWindow } from './signal/hamming_window';\nimport { hannWindow } from './signal/hann_window';\nimport { frame } from './signal/frame';\nimport { stft } from './signal/stft';\nconst signal = {\n hammingWindow,\n hannWindow,\n frame,\n stft,\n};\n// Image Ops namespace\nimport { cropAndResize } from './image/crop_and_resize';\nimport { flipLeftRight } from './image/flip_left_right';\nimport { grayscaleToRGB } from './image/grayscale_to_rgb';\nimport { rgbToGrayscale } from './image/rgb_to_grayscale';\nimport { rotateWithOffset } from './image/rotate_with_offset';\nimport { nonMaxSuppression } from './image/non_max_suppression';\nimport { nonMaxSuppressionAsync } from './image/non_max_suppression_async';\nimport { nonMaxSuppressionWithScore } from './image/non_max_suppression_with_score';\nimport { nonMaxSuppressionWithScoreAsync } from './image/non_max_suppression_with_score_async';\nimport { nonMaxSuppressionPadded } from './image/non_max_suppression_padded';\nimport { nonMaxSuppressionPaddedAsync } from './image/non_max_suppression_padded_async';\nimport { resizeBilinear } from './image/resize_bilinear';\nimport { resizeNearestNeighbor } from './image/resize_nearest_neighbor';\nimport { threshold } from './image/threshold';\nimport { transform } from './image/transform';\nconst image = {\n flipLeftRight,\n grayscaleToRGB,\n resizeNearestNeighbor,\n resizeBilinear,\n rgbToGrayscale,\n rotateWithOffset,\n cropAndResize,\n nonMaxSuppression,\n nonMaxSuppressionAsync,\n nonMaxSuppressionWithScore,\n nonMaxSuppressionWithScoreAsync,\n nonMaxSuppressionPadded,\n nonMaxSuppressionPaddedAsync,\n threshold,\n transform\n};\n// linalg namespace\nimport { bandPart } from './linalg/band_part';\nimport { gramSchmidt } from './linalg/gram_schmidt';\nimport { qr } from './linalg/qr';\nconst linalg = {\n bandPart,\n gramSchmidt,\n qr\n};\n// losses namespace;\nimport { absoluteDifference } from './losses/absolute_difference';\nimport { computeWeightedLoss } from './losses/compute_weighted_loss';\nimport { cosineDistance } from './losses/cosine_distance';\nimport { hingeLoss } from './losses/hinge_loss';\nimport { huberLoss } from './losses/huber_loss';\nimport { logLoss } from './losses/log_loss';\nimport { meanSquaredError } from './losses/mean_squared_error';\nimport { sigmoidCrossEntropy } from './losses/sigmoid_cross_entropy';\nimport { softmaxCrossEntropy } from './losses/softmax_cross_entropy';\nconst losses = {\n absoluteDifference,\n computeWeightedLoss,\n cosineDistance,\n hingeLoss,\n huberLoss,\n logLoss,\n meanSquaredError,\n sigmoidCrossEntropy,\n softmaxCrossEntropy\n};\nimport { sparseFillEmptyRows } from './sparse/sparse_fill_empty_rows';\nimport { sparseReshape } from './sparse/sparse_reshape';\nimport { sparseSegmentMean } from './sparse/sparse_segment_mean';\nimport { sparseSegmentSum } from './sparse/sparse_segment_sum';\nconst sparse = {\n sparseFillEmptyRows,\n sparseReshape,\n sparseSegmentMean,\n sparseSegmentSum\n};\nimport { stringNGrams } from './string/string_n_grams';\nimport { stringSplit } from './string/string_split';\nimport { stringToHashBucketFast } from './string/string_to_hash_bucket_fast';\nimport { staticRegexReplace } from './string/static_regex_replace';\n// tslint:disable-next-line:variable-name\nconst string = {\n stringNGrams,\n stringSplit,\n stringToHashBucketFast,\n staticRegexReplace,\n};\n// Second level exports.\nexport { image, linalg, losses, spectral, fused, signal, sparse, string };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILG1CQUFtQjtBQUNuQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUJBQXFCLENB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OEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsTUFBTSxNQUFNLEdBQUc7SUFDYixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixnQkFBZ0I7Q0FDakIsQ0FBQztBQUVGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUseUNBQXlDO0FBQ3pDLE1BQU0sTUFBTSxHQUFHO0lBQ2IsWUFBWTtJQUNaLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsa0JBQWtCO0NBQ25CLENBQUM7QUFFRix3QkFBd0I7QUFDeEIsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gTW9kdWxhcml6ZWQgb3BzLlxuZXhwb3J0IHthYnN9IGZyb20gJy4vYWJzJztcbmV4cG9ydCB7YWNvc30gZnJvbSAnLi9hY29zJztcbmV4cG9ydCB7YWNvc2h9IGZyb20gJy4vYWNvc2gnO1xuZXhwb3J0IHthZGR9IGZyb20gJy4vYWRkJztcbmV4cG9ydCB7YWRkTn0gZnJvbSAnLi9hZGRfbic7XG5leHBvcnQge2FsbH0gZnJvbSAnLi9hbGwnO1xuZXhwb3J0IHthbnl9IGZyb20gJy4vYW55JztcbmV4cG9ydCB7YXJnTWF4fSBmcm9tICcuL2FyZ19tYXgnO1xuZXhwb3J0IHthcmdNaW59IGZyb20gJy4vYXJnX21pbic7XG5leHBvcnQge2FzaW59IGZyb20gJy4vYXNpbic7XG5leHBvcnQge2FzaW5ofSBmcm9tICcuL2FzaW5oJztcbmV4cG9ydCB7YXRhbn0gZnJvbSAnLi9hdGFuJztcbmV4cG9ydCB7YXRhbjJ9IGZyb20gJy4vYXRhbjInO1xuZXhwb3J0IHthdGFuaH0gZnJvbSAnLi9hdGFuaCc7XG5leHBvcnQge2F2Z1Bvb2x9IGZyb20gJy4vYXZnX3Bvb2wnO1xuZXhwb3J0IHthdmdQb29sM2R9IGZyb20gJy4vYXZnX3Bvb2xfM2QnO1xuZXhwb3J0IHtiYXNpY0xTVE1DZWxsfSBmcm9tICcuL2Jhc2ljX2xzdG1fY2VsbCc7XG5leHBvcnQge2JhdGNoVG9TcGFjZU5EfSBmcm9tICcuL2JhdGNoX3RvX3NwYWNlX25kJztcbmV4cG9ydCB7YmF0Y2hOb3JtfSBmcm9tICcuL2JhdGNobm9ybSc7XG5leHBvcnQge2JhdGNoTm9ybTJkfSBmcm9tICcuL2JhdGNobm9ybTJkJztcbmV4cG9ydCB7YmF0Y2hOb3JtM2R9IGZyb20gJy4vYmF0Y2hub3JtM2QnO1xuZXhwb3J0IHtiYXRjaE5vcm00ZH0gZnJvbSAnLi9iYXRjaG5vcm00ZCc7XG5leHBvcnQge2JpbmNvdW50fSBmcm9tICcuL2JpbmNvdW50JztcbmV4cG9ydCB7Yml0d2lzZUFuZH0gZnJvbSAnLi9iaXR3aXNlX2FuZCc7XG5leHBvcnQge2Jyb2FkY2FzdEFyZ3N9IGZyb20gJy4vYnJvYWRjYXN0X2FyZ3MnO1xuZXhwb3J0IHticm9hZGNhc3RUb30gZnJvbSAnLi9icm9hZGNhc3RfdG8nO1xuZXhwb3J0IHtidWZmZXJ9IGZyb20gJy4vYnVmZmVyJztcbmV4cG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmV4cG9ydCB7Y2VpbH0gZnJvbSAnLi9jZWlsJztcbmV4cG9ydCB7Y2xpcEJ5VmFsdWV9IGZyb20gJy4vY2xpcF9ieV92YWx1ZSc7XG5leHBvcnQge2Nsb25lfSBmcm9tICcuL2Nsb25lJztcbmV4cG9ydCB7Y29tcGxleH0gZnJvbSAnLi9jb21wbGV4JztcbmV4cG9ydCB7Y29uY2F0fSBmcm9tICcuL2NvbmNhdCc7XG5leHBvcnQge2NvbmNhdDFkfSBmcm9tICcuL2NvbmNhdF8xZCc7XG5leHBvcnQge2NvbmNhdDJkfSBmcm9tICcuL2NvbmNhdF8yZCc7XG5leHBvcnQge2NvbmNhdDNkfSBmcm9tICcuL2NvbmNhdF8zZCc7XG5leHBvcnQge2NvbmNhdDRkfSBmcm9tICcuL2NvbmNhdF80ZCc7XG5leHBvcnQge2NvbnYxZH0gZnJvbSAnLi9jb252MWQnO1xuZXhwb3J0IHtjb252MmR9IGZyb20gJy4vY29udjJkJztcbmV4cG9ydCB7Y29udjJkVHJhbnNwb3NlfSBmcm9tICcuL2NvbnYyZF90cmFuc3Bvc2UnO1xuZXhwb3J0IHtjb252M2R9IGZyb20gJy4vY29udjNkJztcbmV4cG9ydCB7Y29udjNkVHJhbnNwb3NlfSBmcm9tICcuL2NvbnYzZF90cmFuc3Bvc2UnO1xuZXhwb3J0IHtjb3N9IGZyb20gJy4vY29zJztcbmV4cG9ydCB7Y29zaH0gZnJvbSAnLi9jb3NoJztcbmV4cG9ydCB7Y3VtcHJvZH0gZnJvbSAnLi9jdW1wcm9kJztcbmV4cG9ydCB7Y3Vtc3VtfSBmcm9tICcuL2N1bXN1bSc7XG5leHBvcnQge2RlbnNlQmluY291bnR9IGZyb20gJy4vZGVuc2VfYmluY291bnQnO1xuZXhwb3J0IHtkZXB0aFRvU3BhY2V9IGZyb20gJy4vZGVwdGhfdG9fc3BhY2UnO1xuZXhwb3J0IHtkZXB0aHdpc2VDb252MmR9IGZyb20gJy4vZGVwdGh3aXNlX2NvbnYyZCc7XG5leHBvcnQge2RpYWd9IGZyb20gJy4vZGlhZyc7XG5leHBvcnQge2RpbGF0aW9uMmR9IGZyb20gJy4vZGlsYXRpb24yZCc7XG5leHBvcnQge2Rpdn0gZnJvbSAnLi9kaXYnO1xuZXhwb3J0IHtkaXZOb05hbn0gZnJvbSAnLi9kaXZfbm9fbmFuJztcbmV4cG9ydCB7ZG90fSBmcm9tICcuL2RvdCc7XG5leHBvcnQge2VpbnN1bX0gZnJvbSAnLi9laW5zdW0nO1xuZXhwb3J0IHtlbHV9IGZyb20gJy4vZWx1JztcbmV4cG9ydCB7ZW5zdXJlU2hhcGV9IGZyb20gJy4vZW5zdXJlX3NoYXBlJztcbmV4cG9ydCB7ZXF1YWx9IGZyb20gJy4vZXF1YWwnO1xuZXhwb3J0IHtlcmZ9IGZyb20gJy4vZXJmJztcbmV4cG9ydCB7ZXVjbGlkZWFuTm9ybX0gZnJvbSAnLi9ldWNsaWRlYW5fbm9ybSc7XG5leHBvcnQge2V4cH0gZnJvbSAnLi9leHAnO1xuZXhwb3J0IHtleHBhbmREaW1zfSBmcm9tICcuL2V4cGFuZF9kaW1zJztcbmV4cG9ydCB7ZXhwbTF9IGZyb20gJy4vZXhwbTEnO1xuZXhwb3J0IHtleWV9IGZyb20gJy4vZXllJztcbmV4cG9ydCB7ZmlsbH0gZnJvbSAnLi9maWxsJztcbmV4cG9ydCB7Zmxvb3J9IGZyb20gJy4vZmxvb3InO1xuZXhwb3J0IHtmbG9vckRpdn0gZnJvbSAnLi9mbG9vckRpdic7XG5leHBvcnQge2dhdGhlcn0gZnJvbSAnLi9nYXRoZXInO1xuZXhwb3J0IHtncmVhdGVyfSBmcm9tICcuL2dyZWF0ZXInO1xuZXhwb3J0IHtncmVhdGVyRXF1YWx9IGZyb20gJy4vZ3JlYXRlcl9lcXVhbCc7XG5leHBvcnQge2ltYWd9IGZyb20gJy4vaW1hZyc7XG5leHBvcnQge2lzRmluaXRlfSBmcm9tICcuL2lzX2Zpbml0ZSc7XG5leHBvcnQge2lzSW5mfSBmcm9tICcuL2lzX2luZic7XG5leHBvcnQge2lzTmFOfSBmcm9tICcuL2lzX25hbic7XG5leHBvcnQge2xlYWt5UmVsdX0gZnJvbSAnLi9sZWFreV9yZWx1JztcbmV4cG9ydCB7bGVzc30gZnJvbSAnLi9sZXNzJztcbmV4cG9ydCB7bGVzc0VxdWFsfSBmcm9tICcuL2xlc3NfZXF1YWwnO1xuZXhwb3J0IHtsaW5zcGFjZX0gZnJvbSAnLi9saW5zcGFjZSc7XG5leHBvcnQge2xvY2FsUmVzcG9uc2VOb3JtYWxpemF0aW9ufSBmcm9tICcuL2xvY2FsX3Jlc3BvbnNlX25vcm1hbGl6YXRpb24nO1xuZXhwb3J0IHtsb2d9IGZyb20gJy4vbG9nJztcbmV4cG9ydCB7bG9nMXB9IGZyb20gJy4vbG9nMXAnO1xuZXhwb3J0IHtsb2dTaWdtb2lkfSBmcm9tICcuL2xvZ19zaWdtb2lkJztcbmV4cG9ydCB7bG9nU29mdG1heH0gZnJvbSAnLi9sb2dfc29mdG1heCc7XG5leHBvcnQge2xvZ1N1bUV4cH0gZnJvbSAnLi9sb2dfc3VtX2V4cCc7XG5leHBvcnQge2xvZ2ljYWxBbmR9IGZyb20gJy4vbG9naWNhbF9hbmQnO1xuZXhwb3J0IHtsb2dpY2FsTm90fSBmcm9tICcuL2xvZ2ljYWxfbm90JztcbmV4cG9ydCB7bG9naWNhbE9yfSBmcm9tICcuL2xvZ2ljYWxfb3InO1xuZXhwb3J0IHtsb2dpY2FsWG9yfSBmcm9tICcuL2xvZ2ljYWxfeG9yJztcbmV4cG9ydCB7bG93ZXJCb3VuZH0gZnJvbSAnLi9sb3dlcl9ib3VuZCc7XG5leHBvcnQge21hdE11bH0gZnJvbSAnLi9tYXRfbXVsJztcbmV4cG9ydCB7bWF4fSBmcm9tICcuL21heCc7XG5leHBvcnQge21heFBvb2x9IGZyb20gJy4vbWF4X3Bvb2wnO1xuZXhwb3J0IHttYXhQb29sM2R9IGZyb20gJy4vbWF4X3Bvb2xfM2QnO1xuZXhwb3J0IHttYXhQb29sV2l0aEFyZ21heH0gZnJvbSAnLi9tYXhfcG9vbF93aXRoX2FyZ21heCc7XG5leHBvcnQge21heGltdW19IGZyb20gJy4vbWF4aW11bSc7XG5leHBvcnQge21lYW59IGZyb20gJy4vbWVhbic7XG5leHBvcnQge21lc2hncmlkfSBmcm9tICcuL21lc2hncmlkJztcbmV4cG9ydCB7bWlufSBmcm9tICcuL21pbic7XG5leHBvcnQge21pbmltdW19IGZyb20gJy4vbWluaW11bSc7XG5leHBvcnQge21pcnJvclBhZH0gZnJvbSAnLi9taXJyb3JfcGFkJztcbmV4cG9ydCB7bW9kfSBmcm9tICcuL21vZCc7XG5leHBvcnQge21vbWVudHN9IGZyb20gJy4vbW9tZW50cyc7XG5leHBvcnQge211bH0gZnJvbSAnLi9tdWwnO1xuZXhwb3J0IHtMU1RNQ2VsbEZ1bmMsIG11bHRpUk5OQ2VsbH0gZnJvbSAnLi9tdWx0aV9ybm5fY2VsbCc7XG5leHBvcnQge211bHRpbm9taWFsfSBmcm9tICcuL211bHRpbm9taWFsJztcbmV4cG9ydCB7bmVnfSBmcm9tICcuL25lZyc7XG5leHBvcnQge25vdEVxdWFsfSBmcm9tICcuL25vdF9lcXVhbCc7XG5leHBvcnQge29uZUhvdH0gZnJvbSAnLi9vbmVfaG90JztcbmV4cG9ydCB7b25lc30gZnJvbSAnLi9vbmVzJztcbmV4cG9ydCB7b25lc0xpa2V9IGZyb20gJy4vb25lc19saWtlJztcbmV4cG9ydCB7b3V0ZXJQcm9kdWN0fSBmcm9tICcuL291dGVyX3Byb2R1Y3QnO1xuZXhwb3J0IHtwYWR9IGZyb20gJy4vcGFkJztcbmV4cG9ydCB7cGFkMWR9IGZyb20gJy4vcGFkMWQnO1xuZXhwb3J0IHtwYWQyZH0gZnJvbSAnLi9wYWQyZCc7XG5leHBvcnQge3BhZDNkfSBmcm9tICcuL3BhZDNkJztcbmV4cG9ydCB7cGFkNGR9IGZyb20gJy4vcGFkNGQnO1xuZXhwb3J0IHtwb29sfSBmcm9tICcuL3Bvb2wnO1xuZXhwb3J0IHtwb3d9IGZyb20gJy4vcG93JztcbmV4cG9ydCB7cHJlbHV9IGZyb20gJy4vcHJlbHUnO1xuZXhwb3J0IHtwcmludH0gZnJvbSAnLi9wcmludCc7XG5leHBvcnQge3Byb2R9IGZyb20gJy4vcHJvZCc7XG5leHBvcnQge3JhZ2dlZEdhdGhlcn0gZnJvbSAnLi9yYWdnZWRfZ2F0aGVyJztcbmV4cG9ydCB7cmFnZ2VkUmFuZ2V9IGZyb20gJy4vcmFnZ2VkX3JhbmdlJztcbmV4cG9ydCB7cmFnZ2VkVGVuc29yVG9UZW5zb3J9IGZyb20gJy4vcmFnZ2VkX3RlbnNvcl90b190ZW5zb3InO1xuZXhwb3J0IHtyYW5kfSBmcm9tICcuL3JhbmQnO1xuZXhwb3J0IHtyYW5kb21HYW1tYX0gZnJvbSAnLi9yYW5kb21fZ2FtbWEnO1xuZXhwb3J0IHtyYW5kb21Ob3JtYWx9IGZyb20gJy4vcmFuZG9tX25vcm1hbCc7XG5leHBvcnQge3JhbmRvbVN0YW5kYXJkTm9ybWFsfSBmcm9tICcuL3JhbmRvbV9zdGFuZGFyZF9ub3JtYWwnO1xuZXhwb3J0IHtyYW5kb21Vbmlmb3JtfSBmcm9tICcuL3JhbmRvbV91bmlmb3JtJztcbmV4cG9ydCB7cmFuZG9tVW5pZm9ybUludH0gZnJvbSAnLi9yYW5kb21fdW5pZm9ybV9pbnQnO1xuZXhwb3J0IHtyYW5nZX0gZnJvbSAnLi9yYW5nZSc7XG5leHBvcnQge3JlYWx9IGZyb20gJy4vcmVhbCc7XG5leHBvcnQge3JlY2lwcm9jYWx9IGZyb20gJy4vcmVjaXByb2NhbCc7XG5leHBvcnQge3JlbHV9IGZyb20gJy4vcmVsdSc7XG5leHBvcnQge3JlbHU2fSBmcm9tICcuL3JlbHU2JztcbmV4cG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9yZXNoYXBlJztcbmV4cG9ydCB7cmV2ZXJzZX0gZnJvbSAnLi9yZXZlcnNlJztcbmV4cG9ydCB7cmV2ZXJzZTFkfSBmcm9tICcuL3JldmVyc2VfMWQnO1xuZXhwb3J0IHtyZXZlcnNlMmR9IGZyb20gJy4vcmV2ZXJzZV8yZCc7XG5leHBvcnQge3JldmVyc2UzZH0gZnJvbSAnLi9yZXZlcnNlXzNkJztcbmV4cG9ydCB7cmV2ZXJzZTRkfSBmcm9tICcuL3JldmVyc2VfNGQnO1xuZXhwb3J0IHtyb3VuZH0gZnJvbSAnLi9yb3VuZCc7XG5leHBvcnQge3JzcXJ0fSBmcm9tICcuL3JzcXJ0JztcbmV4cG9ydCB7c2NhbGFyfSBmcm9tICcuL3NjYWxhcic7XG5leHBvcnQge3NlbHV9IGZyb20gJy4vc2VsdSc7XG5leHBvcnQge3NlcGFyYWJsZUNvbnYyZH0gZnJvbSAnLi9zZXBhcmFibGVfY29udjJkJztcbmV4cG9ydCB7c2V0ZGlmZjFkQXN5bmN9IGZyb20gJy4vc2V0ZGlmZjFkX2FzeW5jJztcbmV4cG9ydCB7c2lnbW9pZH0gZnJvbSAnLi9zaWdtb2lkJztcbmV4cG9ydCB7c2lnbn0gZnJvbSAnLi9zaWduJztcbmV4cG9ydCB7c2lufSBmcm9tICcuL3Npbic7XG5leHBvcnQge3Npbmh9IGZyb20gJy4vc2luaCc7XG5leHBvcnQge3NsaWNlfSBmcm9tICcuL3NsaWNlJztcbmV4cG9ydCB7c2xpY2UxZH0gZnJvbSAnLi9zbGljZTFkJztcbmV4cG9ydCB7c2xpY2UyZH0gZnJvbSAnLi9zbGljZTJkJztcbmV4cG9ydCB7c2xpY2UzZH0gZnJvbSAnLi9zbGljZTNkJztcbmV4cG9ydCB7c2xpY2U0ZH0gZnJvbSAnLi9zbGljZTRkJztcbmV4cG9ydCB7c29mdG1heH0gZnJvbSAnLi9zb2Z0bWF4JztcbmV4cG9ydCB7c29mdHBsdXN9IGZyb20gJy4vc29mdHBsdXMnO1xuZXhwb3J0IHtzcGFjZVRvQmF0Y2hORH0gZnJvbSAnLi9zcGFjZV90b19iYXRjaF9uZCc7XG5leHBvcnQge2ZmdH0gZnJvbSAnLi9zcGVjdHJhbC9mZnQnO1xuZXhwb3J0IHtpZmZ0fSBmcm9tICcuL3NwZWN0cmFsL2lmZnQnO1xuZXhwb3J0IHtpcmZmdH0gZnJvbSAnLi9zcGVjdHJhbC9pcmZmdCc7XG5leHBvcnQge3JmZnR9IGZyb20gJy4vc3BlY3RyYWwvcmZmdCc7XG5leHBvcnQge3NwbGl0fSBmcm9tICcuL3NwbGl0JztcbmV4cG9ydCB7c3FydH0gZnJvbSAnLi9zcXJ0JztcbmV4cG9ydCB7c3F1YXJlfSBmcm9tICcuL3NxdWFyZSc7XG5leHBvcnQge3NxdWFyZWREaWZmZXJlbmNlfSBmcm9tICcuL3NxdWFyZWRfZGlmZmVyZW5jZSc7XG5leHBvcnQge3NxdWVlemV9IGZyb20gJy4vc3F1ZWV6ZSc7XG5leHBvcnQge3N0YWNrfSBmcm9tICcuL3N0YWNrJztcbmV4cG9ydCB7c3RlcH0gZnJvbSAnLi9zdGVwJztcbmV4cG9ydCB7c3RyaWRlZFNsaWNlfSBmcm9tICcuL3N0cmlkZWRfc2xpY2UnO1xuZXhwb3J0IHtzdWJ9IGZyb20gJy4vc3ViJztcbmV4cG9ydCB7c3VtfSBmcm9tICcuL3N1bSc7XG5leHBvcnQge3Rhbn0gZnJvbSAnLi90YW4nO1xuZXhwb3J0IHt0YW5ofSBmcm9tICcuL3RhbmgnO1xuZXhwb3J0IHt0ZW5zb3J9IGZyb20gJy4vdGVuc29yJztcbmV4cG9ydCB7dGVuc29yMWR9IGZyb20gJy4vdGVuc29yMWQnO1xuZXhwb3J0IHt0ZW5zb3IyZH0gZnJvbSAnLi90ZW5zb3IyZCc7XG5leHBvcnQge3RlbnNvcjNkfSBmcm9tICcuL3RlbnNvcjNkJztcbmV4cG9ydCB7dGVuc29yNGR9IGZyb20gJy4vdGVuc29yNGQnO1xuZXhwb3J0IHt0ZW5zb3I1ZH0gZnJvbSAnLi90ZW5zb3I1ZCc7XG5leHBvcnQge3RlbnNvcjZkfSBmcm9tICcuL3RlbnNvcjZkJztcbmV4cG9ydCB7dGVuc29yU2NhdHRlclVwZGF0ZX0gZnJvbSAnLi90ZW5zb3Jfc2NhdHRlcl91cGRhdGUnO1xuZXhwb3J0IHt0aWxlfSBmcm9tICcuL3RpbGUnO1xuZXhwb3J0IHt0b3BrfSBmcm9tICcuL3RvcGsnO1xuZXhwb3J0IHt0cnVuY2F0ZWROb3JtYWx9IGZyb20gJy4vdHJ1bmNhdGVkX25vcm1hbCc7XG5leHBvcnQge3VuaXF1ZX0gZnJvbSAnLi91bmlxdWUnO1xuZXhwb3J0IHt1bnNvcnRlZFNlZ21lbnRTdW19IGZyb20gJy4vdW5zb3J0ZWRfc2VnbWVudF9zdW0nO1xuZXhwb3J0IHt1bnN0YWNrfSBmcm9tICcuL3Vuc3RhY2snO1xuZXhwb3J0IHt1cHBlckJvdW5kfSBmcm9tICcuL3VwcGVyX2JvdW5kJztcbmV4cG9ydCB7dmFyaWFibGV9IGZyb20gJy4vdmFyaWFibGUnO1xuZXhwb3J0IHt3aGVyZX0gZnJvbSAnLi93aGVyZSc7XG5leHBvcnQge3doZXJlQXN5bmN9IGZyb20gJy4vd2hlcmVfYXN5bmMnO1xuZXhwb3J0IHt6ZXJvc30gZnJvbSAnLi96ZXJvcyc7XG5leHBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi96ZXJvc19saWtlJztcblxuZXhwb3J0ICogZnJvbSAnLi9ib29sZWFuX21hc2snO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc3Bvc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nX2F2ZXJhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2F0dGVyX25kJztcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoX3NvcnRlZCc7XG5leHBvcnQgKiBmcm9tICcuL3NwYXJzZV90b19kZW5zZSc7XG5leHBvcnQgKiBmcm9tICcuL2dhdGhlcl9uZCc7XG5leHBvcnQgKiBmcm9tICcuL2Ryb3BvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWduYWxfb3BzX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9pbl90b3Bfayc7XG5cbmV4cG9ydCB7b3AsIE9QX1NDT1BFX1NVRkZJWH0gZnJvbSAnLi9vcGVyYXRpb24nO1xuXG5pbXBvcnQge3JmZnR9IGZyb20gJy4vc3BlY3RyYWwvcmZmdCc7XG5pbXBvcnQge2ZmdH0gZnJvbSAnLi9zcGVjdHJhbC9mZnQnO1xuaW1wb3J0IHtpZmZ0fSBmcm9tICcuL3NwZWN0cmFsL2lmZnQnO1xuaW1wb3J0IHtpcmZmdH0gZnJvbSAnLi9zcGVjdHJhbC9pcmZmdCc7XG5jb25zdCBzcGVjdHJhbCA9IHtcbiAgZmZ0LFxuICBpZmZ0LFxuICByZmZ0LFxuICBpcmZmdFxufTtcblxuaW1wb3J0ICogYXMgZnVzZWQgZnJvbSAnLi9mdXNlZF9vcHMnO1xuXG5pbXBvcnQge2hhbW1pbmdXaW5kb3d9IGZyb20gJy4vc2lnbmFsL2hhbW1pbmdfd2luZG93JztcbmltcG9ydCB7aGFubldpbmRvd30gZnJvbSAnLi9zaWduYWwvaGFubl93aW5kb3cnO1xuaW1wb3J0IHtmcmFtZX0gZnJvbSAnLi9zaWduYWwvZnJhbWUnO1xuaW1wb3J0IHtzdGZ0fSBmcm9tICcuL3NpZ25hbC9zdGZ0JztcbmNvbnN0IHNpZ25hbCA9IHtcbiAgaGFtbWluZ1dpbmRvdyxcbiAgaGFubldpbmRvdyxcbiAgZnJhbWUsXG4gIHN0ZnQsXG59O1xuXG4vLyBJbWFnZSBPcHMgbmFtZXNwYWNlXG5pbXBvcnQge2Nyb3BBbmRSZXNpemV9IGZyb20gJy4vaW1hZ2UvY3JvcF9hbmRfcmVzaXplJztcbmltcG9ydCB7ZmxpcExlZnRSaWdodH0gZnJvbSAnLi9pbWFnZS9mbGlwX2xlZnRfcmlnaHQnO1xuaW1wb3J0IHtncmF5c2NhbGVUb1JHQn0gZnJvbSAnLi9pbWFnZS9ncmF5c2NhbGVfdG9fcmdiJztcbmltcG9ydCB7cmdiVG9HcmF5c2NhbGV9IGZyb20gJy4vaW1hZ2UvcmdiX3RvX2dyYXlzY2FsZSc7XG5pbXBvcnQge3JvdGF0ZVdpdGhPZmZzZXR9IGZyb20gJy4vaW1hZ2Uvcm90YXRlX3dpdGhfb2Zmc2V0JztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb259IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbic7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uQXN5bmN9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl9hc3luYyc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlfSBmcm9tICcuL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fd2l0aF9zY29yZSc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlQXN5bmN9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl93aXRoX3Njb3JlX2FzeW5jJztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb25QYWRkZWR9IGZyb20gJy4vaW1hZ2Uvbm9uX21heF9zdXBwcmVzc2lvbl9wYWRkZWQnO1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblBhZGRlZEFzeW5jfSBmcm9tICcuL2ltYWdlL25vbl9tYXhfc3VwcHJlc3Npb25fcGFkZGVkX2FzeW5jJztcbmltcG9ydCB7cmVzaXplQmlsaW5lYXJ9IGZyb20gJy4vaW1hZ2UvcmVzaXplX2JpbGluZWFyJztcbmltcG9ydCB7cmVzaXplTmVhcmVzdE5laWdoYm9yfSBmcm9tICcuL2ltYWdlL3Jlc2l6ZV9uZWFyZXN0X25laWdoYm9yJztcbmltcG9ydCB7dGhyZXNob2xkfSBmcm9tICcuL2ltYWdlL3RocmVzaG9sZCc7XG5pbXBvcnQge3RyYW5zZm9ybX0gZnJvbSAnLi9pbWFnZS90cmFuc2Zvcm0nO1xuY29uc3QgaW1hZ2UgPSB7XG4gIGZsaXBMZWZ0UmlnaHQsXG4gIGdyYXlzY2FsZVRvUkdCLFxuICByZXNpemVOZWFyZXN0TmVpZ2hib3IsXG4gIHJlc2l6ZUJpbGluZWFyLFxuICByZ2JUb0dyYXlzY2FsZSxcbiAgcm90YXRlV2l0aE9mZnNldCxcbiAgY3JvcEFuZFJlc2l6ZSxcbiAgbm9uTWF4U3VwcHJlc3Npb24sXG4gIG5vbk1heFN1cHByZXNzaW9uQXN5bmMsXG4gIG5vbk1heFN1cHByZXNzaW9uV2l0aFNjb3JlLFxuICBub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jLFxuICBub25NYXhTdXBwcmVzc2lvblBhZGRlZCxcbiAgbm9uTWF4U3VwcHJlc3Npb25QYWRkZWRBc3luYyxcbiAgdGhyZXNob2xkLFxuICB0cmFuc2Zvcm1cbn07XG5cbi8vIGxpbmFsZyBuYW1lc3BhY2VcbmltcG9ydCB7YmFuZFBhcnR9IGZyb20gJy4vbGluYWxnL2JhbmRfcGFydCc7XG5pbXBvcnQge2dyYW1TY2htaWR0fSBmcm9tICcuL2xpbmFsZy9ncmFtX3NjaG1pZHQnO1xuaW1wb3J0IHtxcn0gZnJvbSAnLi9saW5hbGcvcXInO1xuY29uc3QgbGluYWxnID0ge1xuICBiYW5kUGFydCxcbiAgZ3JhbVNjaG1pZHQsXG4gIHFyXG59O1xuXG4vLyBsb3NzZXMgbmFtZXNwYWNlO1xuaW1wb3J0IHthYnNvbHV0ZURpZmZlcmVuY2V9IGZyb20gJy4vbG9zc2VzL2Fic29sdXRlX2RpZmZlcmVuY2UnO1xuaW1wb3J0IHtjb21wdXRlV2VpZ2h0ZWRMb3NzfSBmcm9tICcuL2xvc3Nlcy9jb21wdXRlX3dlaWdodGVkX2xvc3MnO1xuaW1wb3J0IHtjb3NpbmVEaXN0YW5jZX0gZnJvbSAnLi9sb3NzZXMvY29zaW5lX2Rpc3RhbmNlJztcbmltcG9ydCB7aGluZ2VMb3NzfSBmcm9tICcuL2xvc3Nlcy9oaW5nZV9sb3NzJztcbmltcG9ydCB7aHViZXJMb3NzfSBmcm9tICcuL2xvc3Nlcy9odWJlcl9sb3NzJztcbmltcG9ydCB7bG9nTG9zc30gZnJvbSAnLi9sb3NzZXMvbG9nX2xvc3MnO1xuaW1wb3J0IHttZWFuU3F1YXJlZEVycm9yfSBmcm9tICcuL2xvc3Nlcy9tZWFuX3NxdWFyZWRfZXJyb3InO1xuaW1wb3J0IHtzaWdtb2lkQ3Jvc3NFbnRyb3B5fSBmcm9tICcuL2xvc3Nlcy9zaWdtb2lkX2Nyb3NzX2VudHJvcHknO1xuaW1wb3J0IHtzb2Z0bWF4Q3Jvc3NFbnRyb3B5fSBmcm9tICcuL2xvc3Nlcy9zb2Z0bWF4X2Nyb3NzX2VudHJvcHknO1xuY29uc3QgbG9zc2VzID0ge1xuICBhYnNvbHV0ZURpZmZlcmVuY2UsXG4gIGNvbXB1dGVXZWlnaHRlZExvc3MsXG4gIGNvc2luZURpc3RhbmNlLFxuICBoaW5nZUxvc3MsXG4gIGh1YmVyTG9zcyxcbiAgbG9nTG9zcyxcbiAgbWVhblNxdWFyZWRFcnJvcixcbiAgc2lnbW9pZENyb3NzRW50cm9weSxcbiAgc29mdG1heENyb3NzRW50cm9weVxufTtcblxuaW1wb3J0IHtzcGFyc2VGaWxsRW1wdHlSb3dzfSBmcm9tICcuL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzJztcbmltcG9ydCB7c3BhcnNlUmVzaGFwZX0gZnJvbSAnLi9zcGFyc2Uvc3BhcnNlX3Jlc2hhcGUnO1xuaW1wb3J0IHtzcGFyc2VTZWdtZW50TWVhbn0gZnJvbSAnLi9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfbWVhbic7XG5pbXBvcnQge3NwYXJzZVNlZ21lbnRTdW19IGZyb20gJy4vc3BhcnNlL3NwYXJzZV9zZWdtZW50X3N1bSc7XG5jb25zdCBzcGFyc2UgPSB7XG4gIHNwYXJzZUZpbGxFbXB0eVJvd3MsXG4gIHNwYXJzZVJlc2hhcGUsXG4gIHNwYXJzZVNlZ21lbnRNZWFuLFxuICBzcGFyc2VTZWdtZW50U3VtXG59O1xuXG5pbXBvcnQge3N0cmluZ05HcmFtc30gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX25fZ3JhbXMnO1xuaW1wb3J0IHtzdHJpbmdTcGxpdH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX3NwbGl0JztcbmltcG9ydCB7c3RyaW5nVG9IYXNoQnVja2V0RmFzdH0gZnJvbSAnLi9zdHJpbmcvc3RyaW5nX3RvX2hhc2hfYnVja2V0X2Zhc3QnO1xuaW1wb3J0IHtzdGF0aWNSZWdleFJlcGxhY2V9IGZyb20gJy4vc3RyaW5nL3N0YXRpY19yZWdleF9yZXBsYWNlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG5jb25zdCBzdHJpbmcgPSB7XG4gIHN0cmluZ05HcmFtcyxcbiAgc3RyaW5nU3BsaXQsXG4gIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QsXG4gIHN0YXRpY1JlZ2V4UmVwbGFjZSxcbn07XG5cbi8vIFNlY29uZCBsZXZlbCBleHBvcnRzLlxuZXhwb3J0IHtpbWFnZSwgbGluYWxnLCBsb3NzZXMsIHNwZWN0cmFsLCBmdXNlZCwgc2lnbmFsLCBzcGFyc2UsIHN0cmluZ307XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from './util';\n/**\n * Maps to mapping between the custom object and its name.\n *\n * After registering a custom class, these two maps will add key-value pairs\n * for the class object and the registered name.\n *\n * Therefore we can get the relative registered name by calling\n * getRegisteredName() function.\n *\n * For example:\n * GLOBAL_CUSTOM_OBJECT: {key=registeredName: value=corresponding\n * CustomObjectClass}\n *\n * GLOBAL_CUSTOM_NAMES: {key=CustomObjectClass: value=corresponding\n * registeredName}\n *\n */\nconst GLOBAL_CUSTOM_OBJECT = new Map();\nconst GLOBAL_CUSTOM_NAMES = new Map();\n/**\n * Serializable defines the serialization contract.\n *\n * TFJS requires serializable classes to return their className when asked\n * to avoid issues with minification.\n */\nexport class Serializable {\n /**\n * Return the class name for this class to use in serialization contexts.\n *\n * Generally speaking this will be the same thing that constructor.name\n * would have returned. However, the class name needs to be robust\n * against minification for serialization/deserialization to work properly.\n *\n * There's also places such as initializers.VarianceScaling, where\n * implementation details between different languages led to different\n * class hierarchies and a non-leaf node is used for serialization purposes.\n */\n getClassName() {\n return this.constructor\n .className;\n }\n /**\n * Creates an instance of T from a ConfigDict.\n *\n * This works for most descendants of serializable. A few need to\n * provide special handling.\n * @param cls A Constructor for the class to instantiate.\n * @param config The Configuration for the object.\n */\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config);\n }\n}\n/**\n * Maps string keys to class constructors.\n *\n * Used during (de)serialization from the cross-language JSON format, which\n * requires the class name in the serialization format matches the class\n * names as used in Python, should it exist.\n */\nexport class SerializationMap {\n constructor() {\n this.classNameMap = {};\n }\n /**\n * Returns the singleton instance of the map.\n */\n static getMap() {\n if (SerializationMap.instance == null) {\n SerializationMap.instance = new SerializationMap();\n }\n return SerializationMap.instance;\n }\n /**\n * Registers the class as serializable.\n */\n static register(cls) {\n SerializationMap.getMap().classNameMap[cls.className] =\n [cls, cls.fromConfig];\n }\n}\n/**\n * Register a class with the serialization map of TensorFlow.js.\n *\n * This is often used for registering custom Layers, so they can be\n * serialized and deserialized.\n *\n * Example 1. Register the class without package name and specified name.\n *\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer);\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Custom>MyCustomLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 2. Register the class with package name: \"Package\" and specified\n * name: \"MyLayer\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, \"Package\", \"MyLayer\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Package>MyLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 3. Register the class with specified name: \"MyLayer\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, undefined, \"MyLayer\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT.get(\"Custom>MyLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES.get(MyCustomLayer));\n * ```\n *\n * Example 4. Register the class with specified package name: \"Package\".\n * ```js\n * class MyCustomLayer extends tf.layers.Layer {\n * static className = 'MyCustomLayer';\n *\n * constructor(config) {\n * super(config);\n * }\n * }\n * tf.serialization.registerClass(MyCustomLayer, \"Package\");\n * console.log(tf.serialization.GLOBALCUSTOMOBJECT\n * .get(\"Package>MyCustomLayer\"));\n * console.log(tf.serialization.GLOBALCUSTOMNAMES\n * .get(MyCustomLayer));\n * ```\n *\n * @param cls The class to be registered. It must have a public static member\n * called `className` defined and the value must be a non-empty string.\n * @param pkg The pakcage name that this class belongs to. This used to define\n * the key in GlobalCustomObject. If not defined, it defaults to `Custom`.\n * @param name The name that user specified. It defaults to the actual name of\n * the class as specified by its static `className` property.\n * @doc {heading: 'Models', subheading: 'Serialization', ignoreCI: true}\n */\nexport function registerClass(cls, pkg, name) {\n assert(cls.className != null, () => `Class being registered does not have the static className ` +\n `property defined.`);\n assert(typeof cls.className === 'string', () => `className is required to be a string, but got type ` +\n typeof cls.className);\n assert(cls.className.length > 0, () => `Class being registered has an empty-string as its className, ` +\n `which is disallowed.`);\n if (typeof pkg === 'undefined') {\n pkg = 'Custom';\n }\n if (typeof name === 'undefined') {\n name = cls.className;\n }\n const className = name;\n const registerName = pkg + '>' + className;\n SerializationMap.register(cls);\n GLOBAL_CUSTOM_OBJECT.set(registerName, cls);\n GLOBAL_CUSTOM_NAMES.set(cls, registerName);\n return cls;\n}\n/**\n * Get the registered name of a class. If the class has not been registered,\n * return the class name.\n *\n * @param cls The class we want to get register name for. It must have a public\n * static member called `className` defined.\n * @returns registered name or class name.\n */\nexport function getRegisteredName(cls) {\n if (GLOBAL_CUSTOM_NAMES.has(cls)) {\n return GLOBAL_CUSTOM_NAMES.get(cls);\n }\n else {\n return cls.className;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvc2VyaWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBdUM5Qjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sb0JBQW9CLEdBQ3RCLElBQUksR0FBRyxFQUFpRCxDQUFDO0FBRTdELE1BQU0sbUJBQW1CLEdBQ3JCLElBQUksR0FBRyxFQUFpRCxDQUFDO0FBRTdEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFnQixZQUFZO0lBQ2hDOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZO1FBQ1YsT0FBUSxJQUFJLENBQUMsV0FBcUQ7YUFDN0QsU0FBUyxDQUFDO0lBQ2pCLENBQUM7SUFPRDs7Ozs7OztPQU9HO0lBQ0gsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxVQUFVLENBQ2IsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFPM0I7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLElBQUksZ0JBQWdCLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUNyQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBeUIsR0FBK0I7UUFDckUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDakQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDekIsR0FBK0IsRUFBRSxHQUFZLEVBQUUsSUFBYTtJQUM5RCxNQUFNLENBQ0YsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQ3JCLEdBQUcsRUFBRSxDQUFDLDREQUE0RDtRQUM5RCxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FDRixPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxxREFBcUQ7UUFDdkQsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUIsTUFBTSxDQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDeEIsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLHNCQUFzQixDQUFDLENBQUM7SUFFaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXLEVBQUU7UUFDOUIsR0FBRyxHQUFHLFFBQVEsQ0FBQztLQUNoQjtJQUVELElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQy9CLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0tBQ3RCO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDO0lBRTNDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFM0MsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsR0FBK0I7SUFDakMsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDckM7U0FBTTtRQUNMLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztLQUN0QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFR5cGVzIHRvIHN1cHBvcnQgSlNPTi1lc3F1ZSBkYXRhIHN0cnVjdHVyZXMgaW50ZXJuYWxseS5cbiAqXG4gKiBJbnRlcm5hbGx5IENvbmZpZ0RpY3QncyB1c2UgY2FtZWxDYXNlIGtleXMgYW5kIHZhbHVlcyB3aGVyZSB0aGVcbiAqIHZhbHVlcyBhcmUgY2xhc3MgbmFtZXMgdG8gYmUgaW5zdGFudGlhdGVkLiAgT24gdGhlIHB5dGhvbiBzaWRlLCB0aGVzZVxuICogd2lsbCBiZSBzbmFrZV9jYXNlLiAgSW50ZXJuYWxseSB3ZSBhbGxvdyBFbnVtcyBpbnRvIHRoZSB2YWx1ZXMgZm9yIGJldHRlclxuICogdHlwZSBzYWZldHksIGJ1dCB0aGVzZSBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byByYXcgcHJpbWl0aXZlcyAodXN1YWxseVxuICogc3RyaW5ncykgZm9yIHJvdW5kLXRyaXBwaW5nIHdpdGggcHl0aG9uLlxuICpcbiAqIHRvQ29uZmlnIHJldHVybnMgdGhlIFRTLWZyaWVuZGx5IHJlcHJlc2VudGF0aW9uLiBtb2RlbC50b0pTT04oKSByZXR1cm5zXG4gKiB0aGUgcHl0aG9uaWMgdmVyc2lvbiBhcyB0aGF0J3MgdGhlIHBvcnRhYmxlIGZvcm1hdC4gIElmIHlvdSBuZWVkIHRvXG4gKiBweXRob24taWZ5IGEgbm9uLW1vZGVsIGxldmVsIHRvQ29uZmlnIG91dHB1dCwgeW91J2xsIG5lZWQgdG8gdXNlIGFcbiAqIGNvbnZlcnRUc1RvUHl0aG9uaWMgZnJvbSBzZXJpYWxpemF0aW9uX3V0aWxzIGluIC1MYXllcnMuXG4gKlxuICovXG5leHBvcnQgZGVjbGFyZSB0eXBlIENvbmZpZ0RpY3RWYWx1ZSA9XG4gICAgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCBDb25maWdEaWN0QXJyYXkgfCBDb25maWdEaWN0O1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENvbmZpZ0RpY3Qge1xuICBba2V5OiBzdHJpbmddOiBDb25maWdEaWN0VmFsdWU7XG59XG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29uZmlnRGljdEFycmF5IGV4dGVuZHMgQXJyYXk8Q29uZmlnRGljdFZhbHVlPiB7fVxuXG4vKipcbiAqIFR5cGUgdG8gcmVwcmVzZW50IHRoZSBjbGFzcy10eXBlIG9mIFNlcmlhbGl6YWJsZSBvYmplY3RzLlxuICpcbiAqIEllIHRoZSBjbGFzcyBwcm90b3R5cGUgd2l0aCBhY2Nlc3MgdG8gdGhlIGNvbnN0cnVjdG9yIGFuZCBhbnlcbiAqIHN0YXRpYyBtZW1iZXJzL21ldGhvZHMuIEluc3RhbmNlIG1ldGhvZHMgYXJlIG5vdCBsaXN0ZWQgaGVyZS5cbiAqXG4gKiBTb3VyY2UgZm9yIHRoaXMgaWRlYTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQzNjA3MjU1XG4gKi9cbmV4cG9ydCBkZWNsYXJlIHR5cGUgU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4gPSB7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7IGNsYXNzTmFtZTogc3RyaW5nOyBmcm9tQ29uZmlnOiBGcm9tQ29uZmlnTWV0aG9kPFQ+O1xufTtcbmV4cG9ydCBkZWNsYXJlIHR5cGUgRnJvbUNvbmZpZ01ldGhvZDxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPiA9XG4gICAgKGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCkgPT4gVDtcblxuLyoqXG4gKiBNYXBzIHRvIG1hcHBpbmcgYmV0d2VlbiB0aGUgY3VzdG9tIG9iamVjdCBhbmQgaXRzIG5hbWUuXG4gKlxuICogQWZ0ZXIgcmVnaXN0ZXJpbmcgYSBjdXN0b20gY2xhc3MsIHRoZXNlIHR3byBtYXBzIHdpbGwgYWRkIGtleS12YWx1ZSBwYWlyc1xuICogZm9yIHRoZSBjbGFzcyBvYmplY3QgYW5kIHRoZSByZWdpc3RlcmVkIG5hbWUuXG4gKlxuICogVGhlcmVmb3JlIHdlIGNhbiBnZXQgdGhlIHJlbGF0aXZlIHJlZ2lzdGVyZWQgbmFtZSBieSBjYWxsaW5nXG4gKiBnZXRSZWdpc3RlcmVkTmFtZSgpIGZ1bmN0aW9uLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICogR0xPQkFMX0NVU1RPTV9PQkpFQ1Q6IHtrZXk9cmVnaXN0ZXJlZE5hbWU6IHZhbHVlPWNvcnJlc3BvbmRpbmdcbiAqIEN1c3RvbU9iamVjdENsYXNzfVxuICpcbiAqIEdMT0JBTF9DVVNUT01fTkFNRVM6IHtrZXk9Q3VzdG9tT2JqZWN0Q2xhc3M6IHZhbHVlPWNvcnJlc3BvbmRpbmdcbiAqIHJlZ2lzdGVyZWROYW1lfVxuICpcbiAqL1xuY29uc3QgR0xPQkFMX0NVU1RPTV9PQkpFQ1QgPVxuICAgIG5ldyBNYXA8c3RyaW5nLCBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxTZXJpYWxpemFibGU+PigpO1xuXG5jb25zdCBHTE9CQUxfQ1VTVE9NX05BTUVTID1cbiAgICBuZXcgTWFwPFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFNlcmlhbGl6YWJsZT4sIHN0cmluZz4oKTtcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgZGVmaW5lcyB0aGUgc2VyaWFsaXphdGlvbiBjb250cmFjdC5cbiAqXG4gKiBURkpTIHJlcXVpcmVzIHNlcmlhbGl6YWJsZSBjbGFzc2VzIHRvIHJldHVybiB0aGVpciBjbGFzc05hbWUgd2hlbiBhc2tlZFxuICogdG8gYXZvaWQgaXNzdWVzIHdpdGggbWluaWZpY2F0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VyaWFsaXphYmxlIHtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY2xhc3MgbmFtZSBmb3IgdGhpcyBjbGFzcyB0byB1c2UgaW4gc2VyaWFsaXphdGlvbiBjb250ZXh0cy5cbiAgICpcbiAgICogR2VuZXJhbGx5IHNwZWFraW5nIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSB0aGluZyB0aGF0IGNvbnN0cnVjdG9yLm5hbWVcbiAgICogd291bGQgaGF2ZSByZXR1cm5lZC4gIEhvd2V2ZXIsIHRoZSBjbGFzcyBuYW1lIG5lZWRzIHRvIGJlIHJvYnVzdFxuICAgKiBhZ2FpbnN0IG1pbmlmaWNhdGlvbiBmb3Igc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gdG8gd29yayBwcm9wZXJseS5cbiAgICpcbiAgICogVGhlcmUncyBhbHNvIHBsYWNlcyBzdWNoIGFzIGluaXRpYWxpemVycy5WYXJpYW5jZVNjYWxpbmcsIHdoZXJlXG4gICAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYmV0d2VlbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzIGxlZCB0byBkaWZmZXJlbnRcbiAgICogY2xhc3MgaGllcmFyY2hpZXMgYW5kIGEgbm9uLWxlYWYgbm9kZSBpcyB1c2VkIGZvciBzZXJpYWxpemF0aW9uIHB1cnBvc2VzLlxuICAgKi9cbiAgZ2V0Q2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbnN0cnVjdG9yIGFzIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFNlcmlhbGl6YWJsZT4pXG4gICAgICAgIC5jbGFzc05hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCB0aGUgbm9uLXdlaWdodCBzdGF0ZSBuZWVkZWQgdG8gc2VyaWFsaXplIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q29uZmlnKCk6IENvbmZpZ0RpY3Q7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVCBmcm9tIGEgQ29uZmlnRGljdC5cbiAgICpcbiAgICogVGhpcyB3b3JrcyBmb3IgbW9zdCBkZXNjZW5kYW50cyBvZiBzZXJpYWxpemFibGUuICBBIGZldyBuZWVkIHRvXG4gICAqIHByb3ZpZGUgc3BlY2lhbCBoYW5kbGluZy5cbiAgICogQHBhcmFtIGNscyBBIENvbnN0cnVjdG9yIGZvciB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGUuXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBvYmplY3QuXG4gICAqL1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogTWFwcyBzdHJpbmcga2V5cyB0byBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gKlxuICogVXNlZCBkdXJpbmcgKGRlKXNlcmlhbGl6YXRpb24gZnJvbSB0aGUgY3Jvc3MtbGFuZ3VhZ2UgSlNPTiBmb3JtYXQsIHdoaWNoXG4gKiByZXF1aXJlcyB0aGUgY2xhc3MgbmFtZSBpbiB0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQgbWF0Y2hlcyB0aGUgY2xhc3NcbiAqIG5hbWVzIGFzIHVzZWQgaW4gUHl0aG9uLCBzaG91bGQgaXQgZXhpc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJpYWxpemF0aW9uTWFwIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFNlcmlhbGl6YXRpb25NYXA7XG4gIGNsYXNzTmFtZU1hcDoge1xuICAgIFtjbGFzc05hbWU6IHN0cmluZ106XG4gICAgICAgIFtTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxTZXJpYWxpemFibGU+LCBGcm9tQ29uZmlnTWV0aG9kPFNlcmlhbGl6YWJsZT5dXG4gIH07XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsYXNzTmFtZU1hcCA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFwLlxuICAgKi9cbiAgc3RhdGljIGdldE1hcCgpOiBTZXJpYWxpemF0aW9uTWFwIHtcbiAgICBpZiAoU2VyaWFsaXphdGlvbk1hcC5pbnN0YW5jZSA9PSBudWxsKSB7XG4gICAgICBTZXJpYWxpemF0aW9uTWFwLmluc3RhbmNlID0gbmV3IFNlcmlhbGl6YXRpb25NYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIFNlcmlhbGl6YXRpb25NYXAuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBjbGFzcyBhcyBzZXJpYWxpemFibGUuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oY2xzOiBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxUPikge1xuICAgIFNlcmlhbGl6YXRpb25NYXAuZ2V0TWFwKCkuY2xhc3NOYW1lTWFwW2Nscy5jbGFzc05hbWVdID1cbiAgICAgICAgW2NscywgY2xzLmZyb21Db25maWddO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjbGFzcyB3aXRoIHRoZSBzZXJpYWxpemF0aW9uIG1hcCBvZiBUZW5zb3JGbG93LmpzLlxuICpcbiAqIFRoaXMgaXMgb2Z0ZW4gdXNlZCBmb3IgcmVnaXN0ZXJpbmcgY3VzdG9tIExheWVycywgc28gdGhleSBjYW4gYmVcbiAqIHNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZC5cbiAqXG4gKiBFeGFtcGxlIDEuIFJlZ2lzdGVyIHRoZSBjbGFzcyB3aXRob3V0IHBhY2thZ2UgbmFtZSBhbmQgc3BlY2lmaWVkIG5hbWUuXG4gKlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01PQkpFQ1QuZ2V0KFwiQ3VzdG9tPk15Q3VzdG9tTGF5ZXJcIikpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01OQU1FUy5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogRXhhbXBsZSAyLiBSZWdpc3RlciB0aGUgY2xhc3Mgd2l0aCBwYWNrYWdlIG5hbWU6IFwiUGFja2FnZVwiIGFuZCBzcGVjaWZpZWRcbiAqIG5hbWU6IFwiTXlMYXllclwiLlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIsIFwiUGFja2FnZVwiLCBcIk15TGF5ZXJcIik7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU9CSkVDVC5nZXQoXCJQYWNrYWdlPk15TGF5ZXJcIikpO1xuICogY29uc29sZS5sb2codGYuc2VyaWFsaXphdGlvbi5HTE9CQUxDVVNUT01OQU1FUy5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogRXhhbXBsZSAzLiBSZWdpc3RlciB0aGUgY2xhc3Mgd2l0aCBzcGVjaWZpZWQgbmFtZTogXCJNeUxheWVyXCIuXG4gKiBgYGBqc1xuICogY2xhc3MgTXlDdXN0b21MYXllciBleHRlbmRzIHRmLmxheWVycy5MYXllciB7XG4gKiAgIHN0YXRpYyBjbGFzc05hbWUgPSAnTXlDdXN0b21MYXllcic7XG4gKlxuICogICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAqICAgICBzdXBlcihjb25maWcpO1xuICogICB9XG4gKiB9XG4gKiB0Zi5zZXJpYWxpemF0aW9uLnJlZ2lzdGVyQ2xhc3MoTXlDdXN0b21MYXllciwgdW5kZWZpbmVkLCBcIk15TGF5ZXJcIik7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU9CSkVDVC5nZXQoXCJDdXN0b20+TXlMYXllclwiKSk7XG4gKiBjb25zb2xlLmxvZyh0Zi5zZXJpYWxpemF0aW9uLkdMT0JBTENVU1RPTU5BTUVTLmdldChNeUN1c3RvbUxheWVyKSk7XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlIDQuIFJlZ2lzdGVyIHRoZSBjbGFzcyB3aXRoIHNwZWNpZmllZCBwYWNrYWdlIG5hbWU6IFwiUGFja2FnZVwiLlxuICogYGBganNcbiAqIGNsYXNzIE15Q3VzdG9tTGF5ZXIgZXh0ZW5kcyB0Zi5sYXllcnMuTGF5ZXIge1xuICogICBzdGF0aWMgY2xhc3NOYW1lID0gJ015Q3VzdG9tTGF5ZXInO1xuICpcbiAqICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gKiAgICAgc3VwZXIoY29uZmlnKTtcbiAqICAgfVxuICogfVxuICogdGYuc2VyaWFsaXphdGlvbi5yZWdpc3RlckNsYXNzKE15Q3VzdG9tTGF5ZXIsIFwiUGFja2FnZVwiKTtcbiAqIGNvbnNvbGUubG9nKHRmLnNlcmlhbGl6YXRpb24uR0xPQkFMQ1VTVE9NT0JKRUNUXG4gKiAuZ2V0KFwiUGFja2FnZT5NeUN1c3RvbUxheWVyXCIpKTtcbiAqIGNvbnNvbGUubG9nKHRmLnNlcmlhbGl6YXRpb24uR0xPQkFMQ1VTVE9NTkFNRVNcbiAqIC5nZXQoTXlDdXN0b21MYXllcikpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGNscyBUaGUgY2xhc3MgdG8gYmUgcmVnaXN0ZXJlZC4gSXQgbXVzdCBoYXZlIGEgcHVibGljIHN0YXRpYyBtZW1iZXJcbiAqICAgY2FsbGVkIGBjbGFzc05hbWVgIGRlZmluZWQgYW5kIHRoZSB2YWx1ZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqIEBwYXJhbSBwa2cgVGhlIHBha2NhZ2UgbmFtZSB0aGF0IHRoaXMgY2xhc3MgYmVsb25ncyB0by4gVGhpcyB1c2VkIHRvIGRlZmluZVxuICogICAgIHRoZSBrZXkgaW4gR2xvYmFsQ3VzdG9tT2JqZWN0LiBJZiBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gYEN1c3RvbWAuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0aGF0IHVzZXIgc3BlY2lmaWVkLiBJdCBkZWZhdWx0cyB0byB0aGUgYWN0dWFsIG5hbWUgb2ZcbiAqICAgICB0aGUgY2xhc3MgYXMgc3BlY2lmaWVkIGJ5IGl0cyBzdGF0aWMgYGNsYXNzTmFtZWAgcHJvcGVydHkuXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ1NlcmlhbGl6YXRpb24nLCBpZ25vcmVDSTogdHJ1ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ2xhc3M8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgY2xzOiBTZXJpYWxpemFibGVDb25zdHJ1Y3RvcjxUPiwgcGtnPzogc3RyaW5nLCBuYW1lPzogc3RyaW5nKSB7XG4gIGFzc2VydChcbiAgICAgIGNscy5jbGFzc05hbWUgIT0gbnVsbCxcbiAgICAgICgpID0+IGBDbGFzcyBiZWluZyByZWdpc3RlcmVkIGRvZXMgbm90IGhhdmUgdGhlIHN0YXRpYyBjbGFzc05hbWUgYCArXG4gICAgICAgICAgYHByb3BlcnR5IGRlZmluZWQuYCk7XG4gIGFzc2VydChcbiAgICAgIHR5cGVvZiBjbHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJyxcbiAgICAgICgpID0+IGBjbGFzc05hbWUgaXMgcmVxdWlyZWQgdG8gYmUgYSBzdHJpbmcsIGJ1dCBnb3QgdHlwZSBgICtcbiAgICAgICAgICB0eXBlb2YgY2xzLmNsYXNzTmFtZSk7XG4gIGFzc2VydChcbiAgICAgIGNscy5jbGFzc05hbWUubGVuZ3RoID4gMCxcbiAgICAgICgpID0+IGBDbGFzcyBiZWluZyByZWdpc3RlcmVkIGhhcyBhbiBlbXB0eS1zdHJpbmcgYXMgaXRzIGNsYXNzTmFtZSwgYCArXG4gICAgICAgICAgYHdoaWNoIGlzIGRpc2FsbG93ZWQuYCk7XG5cbiAgaWYgKHR5cGVvZiBwa2cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcGtnID0gJ0N1c3RvbSc7XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmFtZSA9IGNscy5jbGFzc05hbWU7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWUgPSBuYW1lO1xuICBjb25zdCByZWdpc3Rlck5hbWUgPSBwa2cgKyAnPicgKyBjbGFzc05hbWU7XG5cbiAgU2VyaWFsaXphdGlvbk1hcC5yZWdpc3RlcihjbHMpO1xuICBHTE9CQUxfQ1VTVE9NX09CSkVDVC5zZXQocmVnaXN0ZXJOYW1lLCBjbHMpO1xuICBHTE9CQUxfQ1VTVE9NX05BTUVTLnNldChjbHMsIHJlZ2lzdGVyTmFtZSk7XG5cbiAgcmV0dXJuIGNscztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJlZ2lzdGVyZWQgbmFtZSBvZiBhIGNsYXNzLiBJZiB0aGUgY2xhc3MgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQsXG4gKiByZXR1cm4gdGhlIGNsYXNzIG5hbWUuXG4gKlxuICogQHBhcmFtIGNscyBUaGUgY2xhc3Mgd2Ugd2FudCB0byBnZXQgcmVnaXN0ZXIgbmFtZSBmb3IuIEl0IG11c3QgaGF2ZSBhIHB1YmxpY1xuICogICAgIHN0YXRpYyBtZW1iZXIgY2FsbGVkIGBjbGFzc05hbWVgIGRlZmluZWQuXG4gKiBAcmV0dXJucyByZWdpc3RlcmVkIG5hbWUgb3IgY2xhc3MgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWROYW1lPFQgZXh0ZW5kcyBTZXJpYWxpemFibGU+KFxuICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4pIHtcbiAgaWYgKEdMT0JBTF9DVVNUT01fTkFNRVMuaGFzKGNscykpIHtcbiAgICByZXR1cm4gR0xPQkFMX0NVU1RPTV9OQU1FUy5nZXQoY2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2xzLmNsYXNzTmFtZTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { dispose } from '../globals';\nimport { variableGrads } from '../gradients';\nimport { scalar } from '../ops/ops';\nimport { Serializable } from '../serialization';\n/** @doc {heading: 'Training', subheading: 'Classes', namespace: 'train'} */\nexport class Optimizer extends Serializable {\n /**\n * Executes `f()` and minimizes the scalar output of `f()` by computing\n * gradients of y with respect to the list of trainable variables provided by\n * `varList`. If no list is provided, it defaults to all trainable variables.\n *\n * @param f The function to execute and whose output to minimize.\n * @param returnCost Whether to return the scalar cost value produced by\n * executing `f()`.\n * @param varList An optional list of variables to update. If specified, only\n * the trainable variables in varList will be updated by minimize. Defaults to\n * all trainable variables.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers'}\n */\n minimize(f, returnCost = false, varList) {\n const { value, grads } = this.computeGradients(f, varList);\n if (varList != null) {\n const gradArray = varList.map(v => ({ name: v.name, tensor: grads[v.name] }));\n this.applyGradients(gradArray);\n }\n else {\n this.applyGradients(grads);\n }\n // Dispose gradients.\n dispose(grads);\n if (returnCost) {\n return value;\n }\n else {\n value.dispose();\n return null;\n }\n }\n /**\n * The number of iterations that this optimizer instance has been invoked for.\n */\n get iterations() {\n if (this.iterations_ == null) {\n this.iterations_ = 0;\n }\n return this.iterations_;\n }\n incrementIterations() {\n this.iterations_ = this.iterations + 1;\n }\n /**\n * Executes f() and computes the gradient of the scalar output of f() with\n * respect to the list of trainable variables provided by `varList`. If no\n * list is provided, it defaults to all trainable variables.\n *\n * @param f The function to execute and whose output to use for computing\n * gradients with respect to variables.\n * @param varList An optional list of variables to compute gradients with\n * respect to. If specified, only the trainable variables in varList will have\n * gradients computed with respect to. Defaults to all trainable variables.\n *\n * @doc {heading: 'Training', subheading: 'Optimizers'}\n */\n computeGradients(f, varList) {\n return variableGrads(f, varList);\n }\n /**\n * Dispose the variables (if any) owned by this optimizer instance.\n */\n dispose() {\n if (this.iterations_ != null) {\n dispose(this.iterations_);\n }\n }\n async saveIterations() {\n if (this.iterations_ == null) {\n this.iterations_ = 0;\n }\n return {\n name: 'iter',\n // TODO(cais): Use 'int64' type when available.\n tensor: scalar(this.iterations_, 'int32')\n };\n }\n async getWeights() {\n throw new Error('getWeights() is not implemented for this optimizer yet.');\n }\n async setWeights(weightValues) {\n throw new Error(`setWeights() is not implemented for this optimizer class ` +\n `${this.getClassName()}`);\n }\n /**\n * Extract the first element of the weight values and set it\n * as the iterations counter variable of this instance of optimizer.\n *\n * @param weightValues\n * @returns Weight values with the first element consumed and excluded.\n */\n async extractIterations(weightValues) {\n this.iterations_ = (await weightValues[0].tensor.data())[0];\n return weightValues.slice(1);\n }\n}\nObject.defineProperty(Optimizer, Symbol.hasInstance, {\n value: (instance) => {\n return instance.minimize != null && instance.computeGradients != null &&\n instance.applyGradients != null;\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFvQjlDLDRFQUE0RTtBQUM1RSxNQUFNLE9BQWdCLFNBQVUsU0FBUSxZQUFZO0lBR2xEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxRQUFRLENBQUMsQ0FBZSxFQUFFLFVBQVUsR0FBRyxLQUFLLEVBQUUsT0FBb0I7UUFFaEUsTUFBTSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXpELElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCxxQkFBcUI7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWYsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxnQkFBZ0IsQ0FBQyxDQUFlLEVBQUUsT0FBb0I7UUFFcEQsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFZRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLCtDQUErQztZQUMvQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1NBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBMkI7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQ7WUFDM0QsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBMkI7UUFFM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFO0lBQ25ELEtBQUssRUFBRSxDQUFDLFFBQW1CLEVBQUUsRUFBRTtRQUM3QixPQUFPLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1lBQ2pFLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3RDLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7ZGlzcG9zZX0gZnJvbSAnLi4vZ2xvYmFscyc7XG5pbXBvcnQge3ZhcmlhYmxlR3JhZHN9IGZyb20gJy4uL2dyYWRpZW50cyc7XG5pbXBvcnQge3NjYWxhcn0gZnJvbSAnLi4vb3BzL29wcyc7XG5pbXBvcnQge1NlcmlhbGl6YWJsZX0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1NjYWxhciwgVmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yLCBOYW1lZFRlbnNvck1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuLyoqXG4gKiBBIHZhcmlhYmxlIHRoYXQgYmVsb25ncyB0byBhbiBvcHRpbWl6ZXIuXG4gKlxuICogVGhlIGBvcmlnaW5hbE5hbWVgIGZpZWxkIGlzIHJlcXVpcmVkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjYW5vbmljYWxcbiAqIG5hbWUgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBuYW1lIG9mIHRoZSBtb2RlbCB3ZWlnaHQgdGhhdFxuICogdGhlIHZhcmlhYmxlIGlzIHJlbGF0ZWQgdG8gcGx1cyBhIHN1ZmZpeCwgZS5nLiwgJ2RlbnNlMS9rZXJuZWwvbW9tZW50dW0nLlxuICogVGhlIG5hbWUgb2YgdGhlIGBWYXJpYWJsZWAgb2JqZWN0IGl0c2VsZiBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBkdWUgdG9cbiAqIHBvc3NpYmxlIGRlZHVwbGljYXRpb246IEV2ZXJ5IGBWYXJpYWJsZWAgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUgYnV0IG1vcmVcbiAqIHRoYW4gb25lIG9wdGltaXplciBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgbWF5IGJlIGNyZWF0ZWQgZm9yIHRoZSBzYW1lIG1vZGVsXG4gKiBvciB0aGUgc2FtZSBgVmFyaWFibGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wdGltaXplclZhcmlhYmxlIHtcbiAgb3JpZ2luYWxOYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlOiBWYXJpYWJsZTtcbn1cblxuLyoqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJywgbmFtZXNwYWNlOiAndHJhaW4nfSAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9wdGltaXplciBleHRlbmRzIFNlcmlhbGl6YWJsZSB7XG4gIHByb3RlY3RlZCBpdGVyYXRpb25zXzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZigpYCBhbmQgbWluaW1pemVzIHRoZSBzY2FsYXIgb3V0cHV0IG9mIGBmKClgIGJ5IGNvbXB1dGluZ1xuICAgKiBncmFkaWVudHMgb2YgeSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpc3Qgb2YgdHJhaW5hYmxlIHZhcmlhYmxlcyBwcm92aWRlZCBieVxuICAgKiBgdmFyTGlzdGAuIElmIG5vIGxpc3QgaXMgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIGFsbCB0cmFpbmFibGUgdmFyaWFibGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhbmQgd2hvc2Ugb3V0cHV0IHRvIG1pbmltaXplLlxuICAgKiBAcGFyYW0gcmV0dXJuQ29zdCBXaGV0aGVyIHRvIHJldHVybiB0aGUgc2NhbGFyIGNvc3QgdmFsdWUgcHJvZHVjZWQgYnlcbiAgICogZXhlY3V0aW5nIGBmKClgLlxuICAgKiBAcGFyYW0gdmFyTGlzdCBBbiBvcHRpb25hbCBsaXN0IG9mIHZhcmlhYmxlcyB0byB1cGRhdGUuIElmIHNwZWNpZmllZCwgb25seVxuICAgKiB0aGUgdHJhaW5hYmxlIHZhcmlhYmxlcyBpbiB2YXJMaXN0IHdpbGwgYmUgdXBkYXRlZCBieSBtaW5pbWl6ZS4gRGVmYXVsdHMgdG9cbiAgICogYWxsIHRyYWluYWJsZSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJ31cbiAgICovXG4gIG1pbmltaXplKGY6ICgpID0+IFNjYWxhciwgcmV0dXJuQ29zdCA9IGZhbHNlLCB2YXJMaXN0PzogVmFyaWFibGVbXSk6IFNjYWxhclxuICAgICAgfG51bGwge1xuICAgIGNvbnN0IHt2YWx1ZSwgZ3JhZHN9ID0gdGhpcy5jb21wdXRlR3JhZGllbnRzKGYsIHZhckxpc3QpO1xuXG4gICAgaWYgKHZhckxpc3QgIT0gbnVsbCkge1xuICAgICAgY29uc3QgZ3JhZEFycmF5OiBOYW1lZFRlbnNvcltdID1cbiAgICAgICAgICB2YXJMaXN0Lm1hcCh2ID0+ICh7bmFtZTogdi5uYW1lLCB0ZW5zb3I6IGdyYWRzW3YubmFtZV19KSk7XG4gICAgICB0aGlzLmFwcGx5R3JhZGllbnRzKGdyYWRBcnJheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwbHlHcmFkaWVudHMoZ3JhZHMpO1xuICAgIH1cblxuICAgIC8vIERpc3Bvc2UgZ3JhZGllbnRzLlxuICAgIGRpc3Bvc2UoZ3JhZHMpO1xuXG4gICAgaWYgKHJldHVybkNvc3QpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUuZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGF0IHRoaXMgb3B0aW1pemVyIGluc3RhbmNlIGhhcyBiZWVuIGludm9rZWQgZm9yLlxuICAgKi9cbiAgZ2V0IGl0ZXJhdGlvbnMoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyA9PSBudWxsKSB7XG4gICAgICB0aGlzLml0ZXJhdGlvbnNfID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXRlcmF0aW9uc187XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5jcmVtZW50SXRlcmF0aW9ucygpIHtcbiAgICB0aGlzLml0ZXJhdGlvbnNfID0gdGhpcy5pdGVyYXRpb25zICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBmKCkgYW5kIGNvbXB1dGVzIHRoZSBncmFkaWVudCBvZiB0aGUgc2NhbGFyIG91dHB1dCBvZiBmKCkgd2l0aFxuICAgKiByZXNwZWN0IHRvIHRoZSBsaXN0IG9mIHRyYWluYWJsZSB2YXJpYWJsZXMgcHJvdmlkZWQgYnkgYHZhckxpc3RgLiBJZiBub1xuICAgKiBsaXN0IGlzIHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byBhbGwgdHJhaW5hYmxlIHZhcmlhYmxlcy5cbiAgICpcbiAgICogQHBhcmFtIGYgVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYW5kIHdob3NlIG91dHB1dCB0byB1c2UgZm9yIGNvbXB1dGluZ1xuICAgKiBncmFkaWVudHMgd2l0aCByZXNwZWN0IHRvIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHZhckxpc3QgQW4gb3B0aW9uYWwgbGlzdCBvZiB2YXJpYWJsZXMgdG8gY29tcHV0ZSBncmFkaWVudHMgd2l0aFxuICAgKiByZXNwZWN0IHRvLiBJZiBzcGVjaWZpZWQsIG9ubHkgdGhlIHRyYWluYWJsZSB2YXJpYWJsZXMgaW4gdmFyTGlzdCB3aWxsIGhhdmVcbiAgICogZ3JhZGllbnRzIGNvbXB1dGVkIHdpdGggcmVzcGVjdCB0by4gRGVmYXVsdHMgdG8gYWxsIHRyYWluYWJsZSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdUcmFpbmluZycsIHN1YmhlYWRpbmc6ICdPcHRpbWl6ZXJzJ31cbiAgICovXG4gIGNvbXB1dGVHcmFkaWVudHMoZjogKCkgPT4gU2NhbGFyLCB2YXJMaXN0PzogVmFyaWFibGVbXSk6XG4gICAgICB7dmFsdWU6IFNjYWxhciwgZ3JhZHM6IE5hbWVkVGVuc29yTWFwfSB7XG4gICAgcmV0dXJuIHZhcmlhYmxlR3JhZHMoZiwgdmFyTGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB2YXJpYWJsZXMgYnkgdXNpbmcgdGhlIGNvbXB1dGVkIGdyYWRpZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHZhcmlhYmxlR3JhZGllbnRzIEEgbWFwcGluZyBvZiB2YXJpYWJsZSBuYW1lIHRvIGl0cyBncmFkaWVudCB2YWx1ZS5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ1RyYWluaW5nJywgc3ViaGVhZGluZzogJ09wdGltaXplcnMnfVxuICAgKi9cbiAgYWJzdHJhY3QgYXBwbHlHcmFkaWVudHModmFyaWFibGVHcmFkaWVudHM6IE5hbWVkVGVuc29yTWFwfFxuICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lZFRlbnNvcltdKTogdm9pZDtcblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdmFyaWFibGVzIChpZiBhbnkpIG93bmVkIGJ5IHRoaXMgb3B0aW1pemVyIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuaXRlcmF0aW9uc18pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVJdGVyYXRpb25zKCk6IFByb21pc2U8TmFtZWRUZW5zb3I+IHtcbiAgICBpZiAodGhpcy5pdGVyYXRpb25zXyA9PSBudWxsKSB7XG4gICAgICB0aGlzLml0ZXJhdGlvbnNfID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdpdGVyJywgIC8vIE5hbWVkIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAgIC8vIFRPRE8oY2Fpcyk6IFVzZSAnaW50NjQnIHR5cGUgd2hlbiBhdmFpbGFibGUuXG4gICAgICB0ZW5zb3I6IHNjYWxhcih0aGlzLml0ZXJhdGlvbnNfLCAnaW50MzInKVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0V2VpZ2h0cygpIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBvcHRpbWl6ZXIgeWV0LicpO1xuICB9XG5cbiAgYXN5bmMgc2V0V2VpZ2h0cyh3ZWlnaHRWYWx1ZXM6IE5hbWVkVGVuc29yW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBzZXRXZWlnaHRzKCkgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIG9wdGltaXplciBjbGFzcyBgICtcbiAgICAgICAgYCR7dGhpcy5nZXRDbGFzc05hbWUoKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB3ZWlnaHQgdmFsdWVzIGFuZCBzZXQgaXRcbiAgICogYXMgdGhlIGl0ZXJhdGlvbnMgY291bnRlciB2YXJpYWJsZSBvZiB0aGlzIGluc3RhbmNlIG9mIG9wdGltaXplci5cbiAgICpcbiAgICogQHBhcmFtIHdlaWdodFZhbHVlc1xuICAgKiBAcmV0dXJucyBXZWlnaHQgdmFsdWVzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgY29uc3VtZWQgYW5kIGV4Y2x1ZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGV4dHJhY3RJdGVyYXRpb25zKHdlaWdodFZhbHVlczogTmFtZWRUZW5zb3JbXSk6XG4gICAgICBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICB0aGlzLml0ZXJhdGlvbnNfID0gKGF3YWl0IHdlaWdodFZhbHVlc1swXS50ZW5zb3IuZGF0YSgpKVswXTtcbiAgICByZXR1cm4gd2VpZ2h0VmFsdWVzLnNsaWNlKDEpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcHRpbWl6ZXIsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICB2YWx1ZTogKGluc3RhbmNlOiBPcHRpbWl6ZXIpID0+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubWluaW1pemUgIT0gbnVsbCAmJiBpbnN0YW5jZS5jb21wdXRlR3JhZGllbnRzICE9IG51bGwgJiZcbiAgICAgICAgaW5zdGFuY2UuYXBwbHlHcmFkaWVudHMgIT0gbnVsbDtcbiAgfVxufSk7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/ops';\nimport { square } from '../ops/square';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class AdadeltaOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adadelta';\n }\n constructor(learningRate, rho, epsilon = null) {\n super();\n this.learningRate = learningRate;\n this.rho = rho;\n this.epsilon = epsilon;\n this.accumulatedGrads = [];\n this.accumulatedUpdates = [];\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedGrads[i] == null) {\n this.accumulatedGrads[i] = {\n originalName: `${name}/accum_grad`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedUpdates[i] == null) {\n this.accumulatedUpdates[i] = {\n originalName: `${name}/accum_var`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedGrad = this.accumulatedGrads[i].variable;\n const accumulatedUpdate = this.accumulatedUpdates[i].variable;\n tidy(() => {\n const newAccumulatedGrad = add(mul(accumulatedGrad, this.rho), mul(square(gradient), 1 - this.rho));\n const updates = mul(div(sqrt(add(accumulatedUpdate, this.epsilon)), sqrt(add(accumulatedGrad, this.epsilon))), gradient);\n const newAccumulatedUpdate = add(mul(accumulatedUpdate, this.rho), mul(square(updates), 1 - this.rho));\n accumulatedGrad.assign(newAccumulatedGrad);\n accumulatedUpdate.assign(newAccumulatedUpdate);\n const newValue = add(mul(updates, -this.learningRate), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedUpdates != null) {\n dispose(this.accumulatedGrads.map(v => v.variable));\n dispose(this.accumulatedUpdates.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedGrads, ...this.accumulatedUpdates];\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const variableCount = weightValues.length / 2;\n const trainable = false;\n this.accumulatedGrads =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedUpdates =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'rho': this.rho,\n 'epsilon': this.epsilon\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['rho'], config['epsilon']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhZGVsdGFfb3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL2FkYWRlbHRhX29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJNUMsT0FBTyxFQUFDLFNBQVMsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFekQseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxTQUFTO0lBQzlDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBSUQsWUFDYyxZQUFvQixFQUFZLEdBQVcsRUFDM0MsVUFBa0IsSUFBSTtRQUNsQyxLQUFLLEVBQUUsQ0FBQztRQUZJLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUMzQyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBTDVCLHFCQUFnQixHQUF3QixFQUFFLENBQUM7UUFDM0MsdUJBQWtC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QUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7bXVsfSBmcm9tICcuLi9vcHMvbXVsJztcbmltcG9ydCB7c3FydH0gZnJvbSAnLi4vb3BzL29wcyc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi4vb3BzL3plcm9zX2xpa2UnO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7TmFtZWRUZW5zb3IsIE5hbWVkVmFyaWFibGVNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyLCBPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuXG4vKiogQGRvY2xpbmsgT3B0aW1pemVyICovXG5leHBvcnQgY2xhc3MgQWRhZGVsdGFPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYWRlbHRhJztcbiAgfVxuICBwcml2YXRlIGFjY3VtdWxhdGVkR3JhZHM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFVwZGF0ZXM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBsZWFybmluZ1JhdGU6IG51bWJlciwgcHJvdGVjdGVkIHJobzogbnVtYmVyLFxuICAgICAgcHJvdGVjdGVkIGVwc2lsb246IG51bWJlciA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGVwc2lsb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5lcHNpbG9uID0gRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdmFyaWFibGVOYW1lcy5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgY29uc3QgdHJhaW5hYmxlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldID0ge1xuICAgICAgICAgIG9yaWdpbmFsTmFtZTogYCR7bmFtZX0vYWNjdW1fZ3JhZGAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFVwZGF0ZXNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9hY2N1bV92YXJgLFxuICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0ZWRHcmFkID0gdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldLnZhcmlhYmxlO1xuICAgICAgY29uc3QgYWNjdW11bGF0ZWRVcGRhdGUgPSB0aGlzLmFjY3VtdWxhdGVkVXBkYXRlc1tpXS52YXJpYWJsZTtcblxuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0FjY3VtdWxhdGVkR3JhZCA9XG4gICAgICAgICAgICBhZGQobXVsKGFjY3VtdWxhdGVkR3JhZCwgdGhpcy5yaG8pLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUoZ3JhZGllbnQpLCAxIC0gdGhpcy5yaG8pKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVzID1cbiAgICAgICAgICAgIG11bChkaXYoc3FydChhZGQoYWNjdW11bGF0ZWRVcGRhdGUsIHRoaXMuZXBzaWxvbikpLFxuICAgICAgICAgICAgICAgICAgICBzcXJ0KGFkZChhY2N1bXVsYXRlZEdyYWQsIHRoaXMuZXBzaWxvbikpKSxcbiAgICAgICAgICAgICAgICBncmFkaWVudCk7XG5cbiAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRVcGRhdGUgPVxuICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZFVwZGF0ZSwgdGhpcy5yaG8pLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUodXBkYXRlcyksIDEgLSB0aGlzLnJobykpO1xuXG4gICAgICAgIGFjY3VtdWxhdGVkR3JhZC5hc3NpZ24obmV3QWNjdW11bGF0ZWRHcmFkKTtcbiAgICAgICAgYWNjdW11bGF0ZWRVcGRhdGUuYXNzaWduKG5ld0FjY3VtdWxhdGVkVXBkYXRlKTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGFkZChtdWwodXBkYXRlcywgLXRoaXMubGVhcm5pbmdSYXRlKSwgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5pbmNyZW1lbnRJdGVyYXRpb25zKCk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkVXBkYXRlcyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIC8vIE9yZGVyIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIGNvbnN0IHZhcmlhYmxlczogT3B0aW1pemVyVmFyaWFibGVbXSA9XG4gICAgICAgIFsuLi50aGlzLmFjY3VtdWxhdGVkR3JhZHMsIC4uLnRoaXMuYWNjdW11bGF0ZWRVcGRhdGVzXTtcbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KFxuICAgICAgICB2YXJpYWJsZXMubWFwKHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHZhcmlhYmxlQ291bnQgPSB3ZWlnaHRWYWx1ZXMubGVuZ3RoIC8gMjtcbiAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmFjY3VtdWxhdGVkR3JhZHMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UoMCwgdmFyaWFibGVDb3VudCkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgdGhpcy5hY2N1bXVsYXRlZFVwZGF0ZXMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdyaG8nOiB0aGlzLnJobyxcbiAgICAgICdlcHNpbG9uJzogdGhpcy5lcHNpbG9uXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKGNvbmZpZ1snbGVhcm5pbmdSYXRlJ10sIGNvbmZpZ1sncmhvJ10sIGNvbmZpZ1snZXBzaWxvbiddKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { fill } from '../ops/fill';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class AdagradOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adagrad';\n }\n constructor(learningRate, initialAccumulatorValue = 0.1) {\n super();\n this.learningRate = learningRate;\n this.initialAccumulatorValue = initialAccumulatorValue;\n this.accumulatedGrads = [];\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n if (this.accumulatedGrads[i] == null) {\n const trainable = false;\n this.accumulatedGrads[i] = {\n originalName: `${name}/accumulator`,\n variable: tidy(() => fill(value.shape, this.initialAccumulatorValue)\n .variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedGrad = this.accumulatedGrads[i].variable;\n tidy(() => {\n const newAccumulatedGrad = add(accumulatedGrad, square(gradient));\n accumulatedGrad.assign(newAccumulatedGrad);\n const newValue = add(mul(div(gradient, sqrt(add(newAccumulatedGrad, ENGINE.backend.epsilon()))), -this.learningRate), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedGrads != null) {\n dispose(this.accumulatedGrads.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n return [await this.saveIterations()].concat(this.accumulatedGrads.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const trainable = false;\n this.accumulatedGrads = weightValues.map(v => ({ originalName: v.name, variable: v.tensor.variable(trainable) }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'initialAccumulatorValue': this.initialAccumulatorValue,\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['initialAccumulatorValue']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhZ3JhZF9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvYWRhZ3JhZF9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlyQyxPQUFPLEVBQUMsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUV6RCx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0Msa0JBQWtCO0lBQ2xCLE1BQU0sS0FBSyxTQUFTO1FBQ2xCLHlDQUF5QztRQUN6QywwRUFBMEU7UUFDMUUsb0RBQW9EO1FBQ3BELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFJRCxZQUNjLFlBQW9CLEVBQVUsMEJBQTBCLEdBQUc7UUFDdkUsS0FBSyxFQUFFLENBQUM7UUFESSxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFVLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBTTtRQUhqRSxxQkFBZ0IsR0FBd0IsRUFBRSxDQUFDO0lBS25ELENBQUM7SUFFRCxjQUFjLENBQUMsaUJBQWlEO1FBQzlELE1BQU0sYUFB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LFlBQVksQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTztZQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNqQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1NBQ3hELENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBVSxVQUFVLENBQ3RCLEdBQStCLEVBQUUsTUFBa0I7UUFDckQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi4vb3BzL2ZpbGwnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzcXJ0fSBmcm9tICcuLi9vcHMvc3FydCc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge0NvbmZpZ0RpY3QsIFNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlQ29uc3RydWN0b3J9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXIsIE9wdGltaXplclZhcmlhYmxlfSBmcm9tICcuL29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBBZGFncmFkT3B0aW1pemVyIGV4dGVuZHMgT3B0aW1pemVyIHtcbiAgLyoqIEBub2NvbGxhcHNlICovXG4gIHN0YXRpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgIC8vIE5hbWUgbWF0dGVycyBmb3IgUHl0aG9uIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gVGhpcyBpcyBhIGdldHRlciBpbnN0ZWFkIG9mIGEgcHJvcGVydHkgYmVjYXVzZSB3aGVuIGl0J3MgYSBwcm9wZXJ0eSwgaXRcbiAgICAvLyBwcmV2ZW50cyB0aGUgZW50aXJlIGNsYXNzIGZyb20gYmVpbmcgdHJlZS1zaGFrZW4uXG4gICAgcmV0dXJuICdBZGFncmFkJztcbiAgfVxuXG4gIHByaXZhdGUgYWNjdW11bGF0ZWRHcmFkczogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcml2YXRlIGluaXRpYWxBY2N1bXVsYXRvclZhbHVlID0gMC4xKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdmFyaWFibGVOYW1lcy5mb3JFYWNoKChuYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRHcmFkc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjY3VtdWxhdGVkR3JhZHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9hY2N1bXVsYXRvcmAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoXG4gICAgICAgICAgICAgICgpID0+IGZpbGwodmFsdWUuc2hhcGUsIHRoaXMuaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0ZWRHcmFkID0gdGhpcy5hY2N1bXVsYXRlZEdyYWRzW2ldLnZhcmlhYmxlO1xuXG4gICAgICB0aWR5KCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRHcmFkID0gYWRkKGFjY3VtdWxhdGVkR3JhZCwgc3F1YXJlKGdyYWRpZW50KSk7XG4gICAgICAgIGFjY3VtdWxhdGVkR3JhZC5hc3NpZ24obmV3QWNjdW11bGF0ZWRHcmFkKTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGFkZChcbiAgICAgICAgICAgIG11bChkaXYoZ3JhZGllbnQsXG4gICAgICAgICAgICAgICAgICAgIHNxcnQoYWRkKG5ld0FjY3VtdWxhdGVkR3JhZCwgRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpKSkpLFxuICAgICAgICAgICAgICAgIC10aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICB2YWx1ZSk7XG4gICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmluY3JlbWVudEl0ZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRHcmFkcyAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KHRoaXMuYWNjdW11bGF0ZWRHcmFkcy5tYXAoXG4gICAgICAgIHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWNjdW11bGF0ZWRHcmFkcyA9IHdlaWdodFZhbHVlcy5tYXAoXG4gICAgICAgIHYgPT4gKHtvcmlnaW5hbE5hbWU6IHYubmFtZSwgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKHRyYWluYWJsZSl9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdpbml0aWFsQWNjdW11bGF0b3JWYWx1ZSc6IHRoaXMuaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKGNvbmZpZ1snbGVhcm5pbmdSYXRlJ10sIGNvbmZpZ1snaW5pdGlhbEFjY3VtdWxhdG9yVmFsdWUnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { pow } from '../ops/pow';\nimport { scalar } from '../ops/scalar';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\nexport class AdamOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adam';\n }\n constructor(learningRate, beta1, beta2, epsilon = null) {\n super();\n this.learningRate = learningRate;\n this.beta1 = beta1;\n this.beta2 = beta2;\n this.epsilon = epsilon;\n this.accumulatedFirstMoment = [];\n this.accumulatedSecondMoment = [];\n tidy(() => {\n // accB* will be updated by batch.\n this.accBeta1 = scalar(beta1).variable();\n this.accBeta2 = scalar(beta2).variable();\n });\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const varNames = Array.isArray(variableGradients) ?\n variableGradients.map(v => v.name) :\n Object.keys(variableGradients);\n tidy(() => {\n const oneMinusAccBeta1 = sub(1, this.accBeta1);\n const oneMinusAccBeta2 = sub(1, this.accBeta2);\n varNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedFirstMoment[i] == null) {\n this.accumulatedFirstMoment[i] = {\n originalName: `${name}/m`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedSecondMoment[i] == null) {\n this.accumulatedSecondMoment[i] = {\n originalName: `${name}/v`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const firstMoment = this.accumulatedFirstMoment[i].variable;\n const secondMoment = this.accumulatedSecondMoment[i].variable;\n const newFirstMoment = add(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1));\n const newSecondMoment = add(mul(secondMoment, this.beta2), mul(square(gradient), 1 - this.beta2));\n const biasCorrectedFirstMoment = div(newFirstMoment, oneMinusAccBeta1);\n const biasCorrectedSecondMoment = div(newSecondMoment, oneMinusAccBeta2);\n firstMoment.assign(newFirstMoment);\n secondMoment.assign(newSecondMoment);\n const newValue = add(mul(div(biasCorrectedFirstMoment, add(sqrt(biasCorrectedSecondMoment), this.epsilon)), -this.learningRate), value);\n value.assign(newValue);\n });\n this.accBeta1.assign(mul(this.accBeta1, this.beta1));\n this.accBeta2.assign(mul(this.accBeta2, this.beta2));\n });\n this.incrementIterations();\n }\n dispose() {\n this.accBeta1.dispose();\n this.accBeta2.dispose();\n if (this.accumulatedFirstMoment != null) {\n dispose(this.accumulatedFirstMoment.map(v => v.variable));\n }\n if (this.accumulatedSecondMoment != null) {\n dispose(this.accumulatedSecondMoment.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment];\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n tidy(() => {\n this.accBeta1.assign(pow(this.beta1, this.iterations_ + 1));\n this.accBeta2.assign(pow(this.beta2, this.iterations_ + 1));\n });\n const variableCount = weightValues.length / 2;\n const trainable = false;\n this.accumulatedFirstMoment =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedSecondMoment =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'beta1': this.beta1,\n 'beta2': this.beta2,\n 'epsilon': this.epsilon,\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['beta1'], config['beta2'], config['epsilon']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhbV9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvYWRhbV9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSzVDLE9BQU8sRUFBQyxTQUFTLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBRXpELE1BQU0sT0FBTyxhQUFjLFNBQVEsU0FBUztJQUMxQyxrQkFBa0I7SUFDbEIsTUFBTSxLQUFLLFNBQVM7UUFDbEIseUNBQXlDO1FBQ3pDLDBFQUEwRTtRQUMxRSxvREFBb0Q7UUFDcEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQU9ELFlBQ2MsWUFBb0IsRUFBWSxLQUFhLEVBQzdDLEtBQWEsRUFBWSxVQUFrQixJQUFJO1FBQzNELEtBQUssRUFBRSxDQUFDO1FBRkksaUJB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LFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLENBQVUsVUFBVSxDQUN0QixHQUErQixFQUFFLE1BQWtCO1FBQ3JELE9BQU8sSUFBSSxHQUFHLENBQ1YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2UsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4uL29wcy9kaXYnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtwb3d9IGZyb20gJy4uL29wcy9wb3cnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtzcXJ0fSBmcm9tICcuLi9vcHMvc3FydCc7XG5pbXBvcnQge3NxdWFyZX0gZnJvbSAnLi4vb3BzL3NxdWFyZSc7XG5pbXBvcnQge3N1Yn0gZnJvbSAnLi4vb3BzL3N1Yic7XG5pbXBvcnQge3plcm9zTGlrZX0gZnJvbSAnLi4vb3BzL3plcm9zX2xpa2UnO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7VmFyaWFibGV9IGZyb20gJy4uL3RlbnNvcic7XG5pbXBvcnQge05hbWVkVGVuc29yLCBOYW1lZFZhcmlhYmxlTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuXG5pbXBvcnQge09wdGltaXplciwgT3B0aW1pemVyVmFyaWFibGV9IGZyb20gJy4vb3B0aW1pemVyJztcblxuZXhwb3J0IGNsYXNzIEFkYW1PcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYW0nO1xuICB9XG4gIHByaXZhdGUgYWNjQmV0YTE6IFZhcmlhYmxlO1xuICBwcml2YXRlIGFjY0JldGEyOiBWYXJpYWJsZTtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkRmlyc3RNb21lbnQ6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFNlY29uZE1vbWVudDogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgYmV0YTE6IG51bWJlcixcbiAgICAgIHByb3RlY3RlZCBiZXRhMjogbnVtYmVyLCBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICAvLyBhY2NCKiB3aWxsIGJlIHVwZGF0ZWQgYnkgYmF0Y2guXG4gICAgICB0aGlzLmFjY0JldGExID0gc2NhbGFyKGJldGExKS52YXJpYWJsZSgpO1xuICAgICAgdGhpcy5hY2NCZXRhMiA9IHNjYWxhcihiZXRhMikudmFyaWFibGUoKTtcbiAgICB9KTtcblxuICAgIGlmIChlcHNpbG9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuZXBzaWxvbiA9IEVOR0lORS5iYWNrZW5kLmVwc2lsb24oKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyTmFtZXMgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgIHZhcmlhYmxlR3JhZGllbnRzLm1hcCh2ID0+IHYubmFtZSkgOlxuICAgICAgICBPYmplY3Qua2V5cyh2YXJpYWJsZUdyYWRpZW50cyk7XG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCBvbmVNaW51c0FjY0JldGExID0gc3ViKDEsIHRoaXMuYWNjQmV0YTEpO1xuICAgICAgY29uc3Qgb25lTWludXNBY2NCZXRhMiA9IHN1YigxLCB0aGlzLmFjY0JldGEyKTtcblxuICAgICAgdmFyTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudFtpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tYCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkU2Vjb25kTW9tZW50W2ldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmFjY3VtdWxhdGVkU2Vjb25kTW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS92YCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNb21lbnQgPSB0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnRbaV0udmFyaWFibGU7XG4gICAgICAgIGNvbnN0IHNlY29uZE1vbWVudCA9IHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnRbaV0udmFyaWFibGU7XG5cbiAgICAgICAgY29uc3QgbmV3Rmlyc3RNb21lbnQgPVxuICAgICAgICAgICAgYWRkKG11bChmaXJzdE1vbWVudCwgdGhpcy5iZXRhMSksIG11bChncmFkaWVudCwgMSAtIHRoaXMuYmV0YTEpKTtcbiAgICAgICAgY29uc3QgbmV3U2Vjb25kTW9tZW50ID1cbiAgICAgICAgICAgIGFkZChtdWwoc2Vjb25kTW9tZW50LCB0aGlzLmJldGEyKSxcbiAgICAgICAgICAgICAgICBtdWwoc3F1YXJlKGdyYWRpZW50KSwgMSAtIHRoaXMuYmV0YTIpKTtcblxuICAgICAgICBjb25zdCBiaWFzQ29ycmVjdGVkRmlyc3RNb21lbnQgPSBkaXYobmV3Rmlyc3RNb21lbnQsIG9uZU1pbnVzQWNjQmV0YTEpO1xuICAgICAgICBjb25zdCBiaWFzQ29ycmVjdGVkU2Vjb25kTW9tZW50ID1cbiAgICAgICAgICAgIGRpdihuZXdTZWNvbmRNb21lbnQsIG9uZU1pbnVzQWNjQmV0YTIpO1xuXG4gICAgICAgIGZpcnN0TW9tZW50LmFzc2lnbihuZXdGaXJzdE1vbWVudCk7XG4gICAgICAgIHNlY29uZE1vbWVudC5hc3NpZ24obmV3U2Vjb25kTW9tZW50KTtcblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9XG4gICAgICAgICAgICBhZGQobXVsKGRpdihiaWFzQ29ycmVjdGVkRmlyc3RNb21lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGQoc3FydChiaWFzQ29ycmVjdGVkU2Vjb25kTW9tZW50KSwgdGhpcy5lcHNpbG9uKSksXG4gICAgICAgICAgICAgICAgICAgIC10aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWNjQmV0YTEuYXNzaWduKG11bCh0aGlzLmFjY0JldGExLCB0aGlzLmJldGExKSk7XG4gICAgICB0aGlzLmFjY0JldGEyLmFzc2lnbihtdWwodGhpcy5hY2NCZXRhMiwgdGhpcy5iZXRhMikpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY0JldGExLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmFjY0JldGEyLmRpc3Bvc2UoKTtcblxuICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnQgIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnQubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZFNlY29uZE1vbWVudCAhPSBudWxsKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnQubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFdlaWdodHMoKTogUHJvbWlzZTxOYW1lZFRlbnNvcltdPiB7XG4gICAgLy8gT3JkZXIgbWF0dGVycyBmb3IgUHl0aG9uIGNvbXBhdGliaWxpdHkuXG4gICAgY29uc3QgdmFyaWFibGVzOiBPcHRpbWl6ZXJWYXJpYWJsZVtdID1cbiAgICAgICAgWy4uLnRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudCwgLi4udGhpcy5hY2N1bXVsYXRlZFNlY29uZE1vbWVudF07XG4gICAgcmV0dXJuIFthd2FpdCB0aGlzLnNhdmVJdGVyYXRpb25zKCldLmNvbmNhdChcbiAgICAgICAgdmFyaWFibGVzLm1hcCh2ID0+ICh7bmFtZTogdi5vcmlnaW5hbE5hbWUsIHRlbnNvcjogdi52YXJpYWJsZX0pKSk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBzZXRXZWlnaHRzKHdlaWdodFZhbHVlczogTmFtZWRUZW5zb3JbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdlaWdodFZhbHVlcyA9IGF3YWl0IHRoaXMuZXh0cmFjdEl0ZXJhdGlvbnMod2VpZ2h0VmFsdWVzKTtcbiAgICB0aWR5KCgpID0+IHtcbiAgICAgIHRoaXMuYWNjQmV0YTEuYXNzaWduKHBvdyh0aGlzLmJldGExLCB0aGlzLml0ZXJhdGlvbnNfICsgMSkpO1xuICAgICAgdGhpcy5hY2NCZXRhMi5hc3NpZ24ocG93KHRoaXMuYmV0YTIsIHRoaXMuaXRlcmF0aW9uc18gKyAxKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB2YXJpYWJsZUNvdW50ID0gd2VpZ2h0VmFsdWVzLmxlbmd0aCAvIDI7XG4gICAgY29uc3QgdHJhaW5hYmxlID0gZmFsc2U7XG4gICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50ID1cbiAgICAgICAgd2VpZ2h0VmFsdWVzLnNsaWNlKDAsIHZhcmlhYmxlQ291bnQpLm1hcCh2ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOiB2LnRlbnNvci52YXJpYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbmFibGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgIHRoaXMuYWNjdW11bGF0ZWRTZWNvbmRNb21lbnQgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdiZXRhMSc6IHRoaXMuYmV0YTEsXG4gICAgICAnYmV0YTInOiB0aGlzLmJldGEyLFxuICAgICAgJ2Vwc2lsb24nOiB0aGlzLmVwc2lsb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ2JldGExJ10sIGNvbmZpZ1snYmV0YTInXSxcbiAgICAgICAgY29uZmlnWydlcHNpbG9uJ10pO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { abs } from '../ops/abs';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { maximum } from '../ops/maximum';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\nexport class AdamaxOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Adamax';\n }\n constructor(learningRate, beta1, beta2, epsilon = null, decay = 0.0) {\n super();\n this.learningRate = learningRate;\n this.beta1 = beta1;\n this.beta2 = beta2;\n this.epsilon = epsilon;\n this.decay = decay;\n this.accumulatedFirstMoment = [];\n this.accumulatedWeightedInfNorm = [];\n tidy(() => {\n this.iteration = scalar(0).variable();\n this.accBeta1 = scalar(beta1).variable();\n });\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n tidy(() => {\n const oneMinusAccBeta1 = sub(1, this.accBeta1);\n const lr = div(-this.learningRate, add(mul(this.iteration, this.decay), 1));\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedFirstMoment[i] == null) {\n this.accumulatedFirstMoment[i] = {\n originalName: `${name}/m`,\n variable: zerosLike(value).variable(trainable)\n };\n }\n if (this.accumulatedWeightedInfNorm[i] == null) {\n this.accumulatedWeightedInfNorm[i] = {\n originalName: `${name}/v`,\n variable: zerosLike(value).variable(trainable)\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const firstMoment = this.accumulatedFirstMoment[i].variable;\n const weightedInfNorm = this.accumulatedWeightedInfNorm[i].variable;\n const newFirstMoment = add(mul(firstMoment, this.beta1), mul(gradient, 1 - this.beta1));\n const ut0 = mul(weightedInfNorm, this.beta2);\n const ut1 = abs(gradient);\n const newWeightedInfNorm = maximum(ut0, ut1);\n firstMoment.assign(newFirstMoment);\n weightedInfNorm.assign(newWeightedInfNorm);\n const newValue = add(mul(div(lr, oneMinusAccBeta1), div(newFirstMoment, add(newWeightedInfNorm, this.epsilon))), value);\n value.assign(newValue);\n });\n this.iteration.assign(add(this.iteration, 1));\n this.accBeta1.assign(mul(this.accBeta1, this.beta1));\n });\n this.incrementIterations();\n }\n dispose() {\n this.accBeta1.dispose();\n this.iteration.dispose();\n if (this.accumulatedFirstMoment != null) {\n dispose(this.accumulatedFirstMoment.map(v => v.variable));\n }\n if (this.accumulatedWeightedInfNorm != null) {\n dispose(this.accumulatedWeightedInfNorm.map(v => v.variable));\n }\n }\n async getWeights() {\n throw new Error('getWeights() is not implemented for Adamax yet.');\n }\n async setWeights(weightValues) {\n throw new Error('setWeights() is not implemented for Adamax yet.');\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'beta1': this.beta1,\n 'beta2': this.beta2,\n 'epsilon': this.epsilon,\n 'decay': this.decay\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['beta1'], config['beta2'], config['epsilon'], config['decay']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhbWF4X29wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9hZGFtYXhfb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUs1QyxPQUFPLEVBQUMsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUV6RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxTQUFTO0lBQzVDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBT0QsWUFDYyxZQUFvQixFQUFZLEtBQWEsRUFDN0MsS0FBYSxFQUFZLFVBQWtCLElBQUksRUFDL0MsUUFBUSxHQUFHO1FBQ3ZCLEtBQUssRUFBRSxDQUFDO1FBSEksaUJBQVksR0FBWixZQUFZLENBQVE7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RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtkaXNwb3NlLCB0aWR5fSBmcm9tICcuLi9nbG9iYWxzJztcbmltcG9ydCB7YWJzfSBmcm9tICcuLi9vcHMvYWJzJztcbmltcG9ydCB7YWRkfSBmcm9tICcuLi9vcHMvYWRkJztcbmltcG9ydCB7ZGl2fSBmcm9tICcuLi9vcHMvZGl2JztcbmltcG9ydCB7bWF4aW11bX0gZnJvbSAnLi4vb3BzL21heGltdW0nO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtzdWJ9IGZyb20gJy4uL29wcy9zdWInO1xuaW1wb3J0IHt6ZXJvc0xpa2V9IGZyb20gJy4uL29wcy96ZXJvc19saWtlJztcbmltcG9ydCB7Q29uZmlnRGljdCwgU2VyaWFsaXphYmxlLCBTZXJpYWxpemFibGVDb25zdHJ1Y3Rvcn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1ZhcmlhYmxlfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXIsIE9wdGltaXplclZhcmlhYmxlfSBmcm9tICcuL29wdGltaXplcic7XG5cbmV4cG9ydCBjbGFzcyBBZGFtYXhPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ0FkYW1heCc7XG4gIH1cbiAgcHJpdmF0ZSBhY2NCZXRhMTogVmFyaWFibGU7XG4gIHByaXZhdGUgaXRlcmF0aW9uOiBWYXJpYWJsZTtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkRmlyc3RNb21lbnQ6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZFdlaWdodGVkSW5mTm9ybTogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgYmV0YTE6IG51bWJlcixcbiAgICAgIHByb3RlY3RlZCBiZXRhMjogbnVtYmVyLCBwcm90ZWN0ZWQgZXBzaWxvbjogbnVtYmVyID0gbnVsbCxcbiAgICAgIHByb3RlY3RlZCBkZWNheSA9IDAuMCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aWR5KCgpID0+IHtcbiAgICAgIHRoaXMuaXRlcmF0aW9uID0gc2NhbGFyKDApLnZhcmlhYmxlKCk7XG4gICAgICB0aGlzLmFjY0JldGExID0gc2NhbGFyKGJldGExKS52YXJpYWJsZSgpO1xuICAgIH0pO1xuXG4gICAgaWYgKGVwc2lsb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5lcHNpbG9uID0gRU5HSU5FLmJhY2tlbmQuZXBzaWxvbigpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFZhcmlhYmxlTWFwfE5hbWVkVGVuc29yW10pIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuXG4gICAgdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCBvbmVNaW51c0FjY0JldGExID0gc3ViKDEsIHRoaXMuYWNjQmV0YTEpO1xuICAgICAgY29uc3QgbHIgPVxuICAgICAgICAgIGRpdigtdGhpcy5sZWFybmluZ1JhdGUsIGFkZChtdWwodGhpcy5pdGVyYXRpb24sIHRoaXMuZGVjYXkpLCAxKSk7XG5cbiAgICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRGaXJzdE1vbWVudFtpXSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50W2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tYCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB6ZXJvc0xpa2UodmFsdWUpLnZhcmlhYmxlKHRyYWluYWJsZSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtW2ldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtW2ldID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS92YCxcbiAgICAgICAgICAgIHZhcmlhYmxlOiB6ZXJvc0xpa2UodmFsdWUpLnZhcmlhYmxlKHRyYWluYWJsZSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RNb21lbnQgPSB0aGlzLmFjY3VtdWxhdGVkRmlyc3RNb21lbnRbaV0udmFyaWFibGU7XG4gICAgICAgIGNvbnN0IHdlaWdodGVkSW5mTm9ybSA9IHRoaXMuYWNjdW11bGF0ZWRXZWlnaHRlZEluZk5vcm1baV0udmFyaWFibGU7XG5cbiAgICAgICAgY29uc3QgbmV3Rmlyc3RNb21lbnQgPVxuICAgICAgICAgICAgYWRkKG11bChmaXJzdE1vbWVudCwgdGhpcy5iZXRhMSksIG11bChncmFkaWVudCwgMSAtIHRoaXMuYmV0YTEpKTtcblxuICAgICAgICBjb25zdCB1dDAgPSBtdWwod2VpZ2h0ZWRJbmZOb3JtLCB0aGlzLmJldGEyKTtcbiAgICAgICAgY29uc3QgdXQxID0gYWJzKGdyYWRpZW50KTtcblxuICAgICAgICBjb25zdCBuZXdXZWlnaHRlZEluZk5vcm0gPSBtYXhpbXVtKHV0MCwgdXQxKTtcblxuICAgICAgICBmaXJzdE1vbWVudC5hc3NpZ24obmV3Rmlyc3RNb21lbnQpO1xuICAgICAgICB3ZWlnaHRlZEluZk5vcm0uYXNzaWduKG5ld1dlaWdodGVkSW5mTm9ybSk7XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPVxuICAgICAgICAgICAgYWRkKG11bChkaXYobHIsIG9uZU1pbnVzQWNjQmV0YTEpLFxuICAgICAgICAgICAgICAgICAgICBkaXYobmV3Rmlyc3RNb21lbnQsIGFkZChuZXdXZWlnaHRlZEluZk5vcm0sIHRoaXMuZXBzaWxvbikpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSk7XG5cbiAgICAgICAgdmFsdWUuYXNzaWduKG5ld1ZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLml0ZXJhdGlvbi5hc3NpZ24oYWRkKHRoaXMuaXRlcmF0aW9uLCAxKSk7XG4gICAgICB0aGlzLmFjY0JldGExLmFzc2lnbihtdWwodGhpcy5hY2NCZXRhMSwgdGhpcy5iZXRhMSkpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY0JldGExLmRpc3Bvc2UoKTtcbiAgICB0aGlzLml0ZXJhdGlvbi5kaXNwb3NlKCk7XG5cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50ICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRlZEZpcnN0TW9tZW50Lm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRXZWlnaHRlZEluZk5vcm0gIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkV2VpZ2h0ZWRJbmZOb3JtLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignZ2V0V2VpZ2h0cygpIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgQWRhbWF4IHlldC4nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRXZWlnaHRzKCkgaXMgbm90IGltcGxlbWVudGVkIGZvciBBZGFtYXggeWV0LicpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKCk6IENvbmZpZ0RpY3Qge1xuICAgIHJldHVybiB7XG4gICAgICAnbGVhcm5pbmdSYXRlJzogdGhpcy5sZWFybmluZ1JhdGUsXG4gICAgICAnYmV0YTEnOiB0aGlzLmJldGExLFxuICAgICAgJ2JldGEyJzogdGhpcy5iZXRhMixcbiAgICAgICdlcHNpbG9uJzogdGhpcy5lcHNpbG9uLFxuICAgICAgJ2RlY2F5JzogdGhpcy5kZWNheVxuICAgIH07XG4gIH1cblxuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhcbiAgICAgICAgY29uZmlnWydsZWFybmluZ1JhdGUnXSwgY29uZmlnWydiZXRhMSddLCBjb25maWdbJ2JldGEyJ10sXG4gICAgICAgIGNvbmZpZ1snZXBzaWxvbiddLCBjb25maWdbJ2RlY2F5J10pO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { keep, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class SGDOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'SGD';\n }\n constructor(learningRate) {\n super();\n this.learningRate = learningRate;\n this.setLearningRate(learningRate);\n }\n applyGradients(variableGradients) {\n const varNames = Array.isArray(variableGradients) ?\n variableGradients.map(v => v.name) :\n Object.keys(variableGradients);\n varNames.forEach((name, i) => {\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const value = ENGINE.registeredVariables[name];\n tidy(() => {\n const newValue = add(mul(this.c, gradient), value);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n /**\n * Sets the learning rate of the optimizer.\n */\n setLearningRate(learningRate) {\n this.learningRate = learningRate;\n if (this.c != null) {\n this.c.dispose();\n }\n this.c = keep(scalar(-learningRate));\n }\n dispose() {\n this.c.dispose();\n }\n async getWeights() {\n return [await this.saveIterations()];\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n if (weightValues.length !== 0) {\n throw new Error('SGD optimizer does not have settable weights.');\n }\n }\n getConfig() {\n return { 'learningRate': this.learningRate };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2dkX29wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9zZ2Rfb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLckMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qyx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBQ3pDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxZQUFzQixZQUFvQjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURZLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBRXhDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxpQkFBK0M7UUFDNUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDL0MsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLE9BQU87YUFDUjtZQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLFlBQW9CO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVRLE9BQU87UUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFUSxLQUFLLENBQUMsVUFBVTtRQUN2QixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUEyQjtRQUNuRCxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sRUFBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFVLFVBQVUsQ0FDdEIsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2tlZXAsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHtDb25maWdEaWN0LCBTZXJpYWxpemFibGUsIFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7U2NhbGFyfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyfSBmcm9tICcuL29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBTR0RPcHRpbWl6ZXIgZXh0ZW5kcyBPcHRpbWl6ZXIge1xuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgLy8gTmFtZSBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICAvLyBUaGlzIGlzIGEgZ2V0dGVyIGluc3RlYWQgb2YgYSBwcm9wZXJ0eSBiZWNhdXNlIHdoZW4gaXQncyBhIHByb3BlcnR5LCBpdFxuICAgIC8vIHByZXZlbnRzIHRoZSBlbnRpcmUgY2xhc3MgZnJvbSBiZWluZyB0cmVlLXNoYWtlbi5cbiAgICByZXR1cm4gJ1NHRCc7XG4gIH1cbiAgcHJvdGVjdGVkIGM6IFNjYWxhcjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbGVhcm5pbmdSYXRlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0TGVhcm5pbmdSYXRlKGxlYXJuaW5nUmF0ZSk7XG4gIH1cblxuICBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRUZW5zb3JNYXB8TmFtZWRUZW5zb3JbXSkge1xuICAgIGNvbnN0IHZhck5hbWVzID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICB2YXJpYWJsZUdyYWRpZW50cy5tYXAodiA9PiB2Lm5hbWUpIDpcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFibGVHcmFkaWVudHMpO1xuICAgIHZhck5hbWVzLmZvckVhY2goKG5hbWUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZUdyYWRpZW50cykgP1xuICAgICAgICAgIHZhcmlhYmxlR3JhZGllbnRzW2ldLnRlbnNvciA6XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbbmFtZV07XG4gICAgICBpZiAoZ3JhZGllbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IEVOR0lORS5yZWdpc3RlcmVkVmFyaWFibGVzW25hbWVdO1xuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gYWRkKG11bCh0aGlzLmMsIGdyYWRpZW50KSwgdmFsdWUpO1xuICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5pbmNyZW1lbnRJdGVyYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbGVhcm5pbmcgcmF0ZSBvZiB0aGUgb3B0aW1pemVyLlxuICAgKi9cbiAgc2V0TGVhcm5pbmdSYXRlKGxlYXJuaW5nUmF0ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWFybmluZ1JhdGUgPSBsZWFybmluZ1JhdGU7XG4gICAgaWYgKHRoaXMuYyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmMuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmMgPSBrZWVwKHNjYWxhcigtbGVhcm5pbmdSYXRlKSk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCkge1xuICAgIHRoaXMuYy5kaXNwb3NlKCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRXZWlnaHRzKCk6IFByb21pc2U8TmFtZWRUZW5zb3JbXT4ge1xuICAgIHJldHVybiBbYXdhaXQgdGhpcy5zYXZlSXRlcmF0aW9ucygpXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGlmICh3ZWlnaHRWYWx1ZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NHRCBvcHRpbWl6ZXIgZG9lcyBub3QgaGF2ZSBzZXR0YWJsZSB3ZWlnaHRzLicpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpZygpOiBDb25maWdEaWN0IHtcbiAgICByZXR1cm4geydsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZX07XG4gIH1cblxuICAvKiogQG5vY29sbGFwc2UgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGZyb21Db25maWc8VCBleHRlbmRzIFNlcmlhbGl6YWJsZT4oXG4gICAgICBjbHM6IFNlcmlhbGl6YWJsZUNvbnN0cnVjdG9yPFQ+LCBjb25maWc6IENvbmZpZ0RpY3QpOiBUIHtcbiAgICByZXR1cm4gbmV3IGNscyhjb25maWdbJ2xlYXJuaW5nUmF0ZSddKTtcbiAgfVxufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { mul } from '../ops/mul';\nimport { scalar } from '../ops/scalar';\nimport { zerosLike } from '../ops/zeros_like';\nimport { SGDOptimizer } from './sgd_optimizer';\n/** @doclink Optimizer */\nexport class MomentumOptimizer extends SGDOptimizer {\n /** @nocollapse */\n // Name matters for Python compatibility.\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'Momentum';\n }\n constructor(learningRate, momentum, useNesterov = false) {\n super(learningRate);\n this.learningRate = learningRate;\n this.momentum = momentum;\n this.useNesterov = useNesterov;\n this.accumulations = [];\n this.m = scalar(this.momentum);\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n if (this.accumulations[i] == null) {\n const trainable = false;\n this.accumulations[i] = {\n originalName: `${name}/momentum`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const accumulation = this.accumulations[i].variable;\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n tidy(() => {\n let newValue;\n const newAccumulation = add(mul(this.m, accumulation), gradient);\n if (this.useNesterov) {\n newValue = add(mul(this.c, add(gradient, mul(newAccumulation, this.m))), value);\n }\n else {\n newValue = add(mul(this.c, newAccumulation), value);\n }\n accumulation.assign(newAccumulation);\n value.assign(newValue);\n });\n });\n this.incrementIterations();\n }\n dispose() {\n this.m.dispose();\n if (this.accumulations != null) {\n dispose(this.accumulations.map(v => v.variable));\n }\n }\n /**\n * Sets the momentum of the optimizer.\n *\n * @param momentum\n */\n setMomentum(momentum) {\n this.momentum = momentum;\n }\n async getWeights() {\n // Order matters for Python compatibility.\n return [await this.saveIterations()].concat(this.accumulations.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const trainable = false;\n this.accumulations = weightValues.map(v => ({ originalName: v.name, variable: v.tensor.variable(trainable) }));\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'momentum': this.momentum,\n 'useNesterov': this.useNesterov\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['momentum'], config['useNesterov']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9tZW50dW1fb3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHRpbWl6ZXJzL21vbWVudHVtX29wdGltaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQU01QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBQ2pELGtCQUFrQjtJQUNsQix5Q0FBeUM7SUFDekMsTUFBTSxLQUFjLFNBQVM7UUFDM0IseUNBQXlDO1FBQ3pDLDBFQUEwRTtRQUMxRSxvREFBb0Q7UUFDcEQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUlELFlBQ3VCLFlBQW9CLEVBQVUsUUFBZ0IsRUFDekQsY0FBYyxLQUFLO1FBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUZDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN6RCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUp2QixrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFNOUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENB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RSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFUSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQTJCO1FBQ25ELFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVRLFNBQVM7UUFDaEIsT0FBTztZQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDekIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBVSxVQUFVLENBQ3RCLEdBQStCLEVBQUUsTUFBa0I7UUFDckQsT0FBTyxJQUFJLEdBQUcsQ0FDVixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFTkdJTkV9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQge2Rpc3Bvc2UsIHRpZHl9IGZyb20gJy4uL2dsb2JhbHMnO1xuaW1wb3J0IHthZGR9IGZyb20gJy4uL29wcy9hZGQnO1xuaW1wb3J0IHttdWx9IGZyb20gJy4uL29wcy9tdWwnO1xuaW1wb3J0IHtzY2FsYXJ9IGZyb20gJy4uL29wcy9zY2FsYXInO1xuaW1wb3J0IHt6ZXJvc0xpa2V9IGZyb20gJy4uL29wcy96ZXJvc19saWtlJztcbmltcG9ydCB7Q29uZmlnRGljdCwgU2VyaWFsaXphYmxlLCBTZXJpYWxpemFibGVDb25zdHJ1Y3Rvcn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQge1NjYWxhciwgVGVuc29yfSBmcm9tICcuLi90ZW5zb3InO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRWYXJpYWJsZU1hcH0gZnJvbSAnLi4vdGVuc29yX3R5cGVzJztcblxuaW1wb3J0IHtPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuaW1wb3J0IHtTR0RPcHRpbWl6ZXJ9IGZyb20gJy4vc2dkX29wdGltaXplcic7XG5cbi8qKiBAZG9jbGluayBPcHRpbWl6ZXIgKi9cbmV4cG9ydCBjbGFzcyBNb21lbnR1bU9wdGltaXplciBleHRlbmRzIFNHRE9wdGltaXplciB7XG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICBzdGF0aWMgb3ZlcnJpZGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIC8vIFRoaXMgaXMgYSBnZXR0ZXIgaW5zdGVhZCBvZiBhIHByb3BlcnR5IGJlY2F1c2Ugd2hlbiBpdCdzIGEgcHJvcGVydHksIGl0XG4gICAgLy8gcHJldmVudHMgdGhlIGVudGlyZSBjbGFzcyBmcm9tIGJlaW5nIHRyZWUtc2hha2VuLlxuICAgIHJldHVybiAnTW9tZW50dW0nO1xuICB9XG4gIHByaXZhdGUgbTogU2NhbGFyO1xuICBwcml2YXRlIGFjY3VtdWxhdGlvbnM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBsZWFybmluZ1JhdGU6IG51bWJlciwgcHJpdmF0ZSBtb21lbnR1bTogbnVtYmVyLFxuICAgICAgcHJpdmF0ZSB1c2VOZXN0ZXJvdiA9IGZhbHNlKSB7XG4gICAgc3VwZXIobGVhcm5pbmdSYXRlKTtcbiAgICB0aGlzLm0gPSBzY2FsYXIodGhpcy5tb21lbnR1bSk7XG4gIH1cblxuICBvdmVycmlkZSBhcHBseUdyYWRpZW50cyh2YXJpYWJsZUdyYWRpZW50czogTmFtZWRWYXJpYWJsZU1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lcyA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgdmFyaWFibGVHcmFkaWVudHMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSA6XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhYmxlR3JhZGllbnRzKTtcblxuICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1tuYW1lXTtcbiAgICAgIGlmICh0aGlzLmFjY3VtdWxhdGlvbnNbaV0gPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRpb25zW2ldID0ge1xuICAgICAgICAgIG9yaWdpbmFsTmFtZTogYCR7bmFtZX0vbW9tZW50dW1gLFxuICAgICAgICAgIHZhcmlhYmxlOiB0aWR5KCgpID0+IHplcm9zTGlrZSh2YWx1ZSkudmFyaWFibGUodHJhaW5hYmxlKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWNjdW11bGF0aW9uID0gdGhpcy5hY2N1bXVsYXRpb25zW2ldLnZhcmlhYmxlO1xuICAgICAgY29uc3QgZ3JhZGllbnQgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlR3JhZGllbnRzKSA/XG4gICAgICAgICAgdmFyaWFibGVHcmFkaWVudHNbaV0udGVuc29yIDpcbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tuYW1lXTtcbiAgICAgIGlmIChncmFkaWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGxldCBuZXdWYWx1ZTogVGVuc29yO1xuICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRpb24gPSBhZGQobXVsKHRoaXMubSwgYWNjdW11bGF0aW9uKSwgZ3JhZGllbnQpO1xuICAgICAgICBpZiAodGhpcy51c2VOZXN0ZXJvdikge1xuICAgICAgICAgIG5ld1ZhbHVlID0gYWRkKFxuICAgICAgICAgICAgICBtdWwodGhpcy5jLCBhZGQoZ3JhZGllbnQsIG11bChuZXdBY2N1bXVsYXRpb24sIHRoaXMubSkpKSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID0gYWRkKG11bCh0aGlzLmMsIG5ld0FjY3VtdWxhdGlvbiksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBhY2N1bXVsYXRpb24uYXNzaWduKG5ld0FjY3VtdWxhdGlvbik7XG4gICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmluY3JlbWVudEl0ZXJhdGlvbnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5tLmRpc3Bvc2UoKTtcbiAgICBpZiAodGhpcy5hY2N1bXVsYXRpb25zICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRpb25zLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbW9tZW50dW0gb2YgdGhlIG9wdGltaXplci5cbiAgICpcbiAgICogQHBhcmFtIG1vbWVudHVtXG4gICAqL1xuICBzZXRNb21lbnR1bShtb21lbnR1bTogbnVtYmVyKSB7XG4gICAgdGhpcy5tb21lbnR1bSA9IG1vbWVudHVtO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KHRoaXMuYWNjdW11bGF0aW9ucy5tYXAoXG4gICAgICAgIHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWNjdW11bGF0aW9ucyA9IHdlaWdodFZhbHVlcy5tYXAoXG4gICAgICAgIHYgPT4gKHtvcmlnaW5hbE5hbWU6IHYubmFtZSwgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKHRyYWluYWJsZSl9KSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdtb21lbnR1bSc6IHRoaXMubW9tZW50dW0sXG4gICAgICAndXNlTmVzdGVyb3YnOiB0aGlzLnVzZU5lc3Rlcm92XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ21vbWVudHVtJ10sIGNvbmZpZ1sndXNlTmVzdGVyb3YnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { dispose, tidy } from '../globals';\nimport { add } from '../ops/add';\nimport { div } from '../ops/div';\nimport { mul } from '../ops/mul';\nimport { sqrt } from '../ops/sqrt';\nimport { square } from '../ops/square';\nimport { sub } from '../ops/sub';\nimport { zerosLike } from '../ops/zeros_like';\nimport { Optimizer } from './optimizer';\n/** @doclink Optimizer */\nexport class RMSPropOptimizer extends Optimizer {\n /** @nocollapse */\n static get className() {\n // Name matters for Python compatibility.\n // This is a getter instead of a property because when it's a property, it\n // prevents the entire class from being tree-shaken.\n return 'RMSProp';\n }\n constructor(learningRate, decay = 0.9, momentum = 0.0, epsilon = null, centered = false) {\n super();\n this.learningRate = learningRate;\n this.decay = decay;\n this.momentum = momentum;\n this.epsilon = epsilon;\n this.accumulatedMeanSquares = [];\n this.accumulatedMoments = [];\n this.accumulatedMeanGrads = [];\n this.centered = centered;\n if (epsilon == null) {\n this.epsilon = ENGINE.backend.epsilon();\n }\n if (learningRate == null) {\n throw new Error(`learningRate for RMSPropOptimizer must be defined.`);\n }\n }\n applyGradients(variableGradients) {\n const variableNames = Array.isArray(variableGradients) ?\n variableGradients.map(item => item.name) :\n Object.keys(variableGradients);\n variableNames.forEach((name, i) => {\n const value = ENGINE.registeredVariables[name];\n const trainable = false;\n if (this.accumulatedMeanSquares[i] == null) {\n this.accumulatedMeanSquares[i] = {\n originalName: `${name}/rms`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedMoments[i] == null) {\n this.accumulatedMoments[i] = {\n originalName: `${name}/momentum`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n if (this.accumulatedMeanGrads[i] == null && this.centered) {\n this.accumulatedMeanGrads[i] = {\n originalName: `${name}/mg`,\n variable: tidy(() => zerosLike(value).variable(trainable))\n };\n }\n const gradient = Array.isArray(variableGradients) ?\n variableGradients[i].tensor :\n variableGradients[name];\n if (gradient == null) {\n return;\n }\n const accumulatedMeanSquare = this.accumulatedMeanSquares[i].variable;\n const accumulatedMoments = this.accumulatedMoments[i].variable;\n tidy(() => {\n const newAccumulatedMeanSquare = add(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay));\n if (this.centered) {\n const accumulatedMeanGrad = this.accumulatedMeanGrads[i].variable;\n // Centered gradient\n const newAccumulatedMeanGrad = add(mul(accumulatedMeanGrad, this.decay), mul(gradient, 1 - this.decay));\n const gradContribution = div(mul(gradient, this.learningRate), sqrt(sub(newAccumulatedMeanSquare, add(square(newAccumulatedMeanGrad), this.epsilon))));\n const newAccumulatedMoments = add(mul(accumulatedMoments, this.momentum), gradContribution);\n accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n accumulatedMeanGrad.assign(newAccumulatedMeanGrad);\n accumulatedMoments.assign(newAccumulatedMoments);\n const newValue = sub(value, newAccumulatedMoments);\n value.assign(newValue);\n }\n else {\n // Plain gradient\n const newAccumulatedMeanSquare = add(mul(accumulatedMeanSquare, this.decay), mul(square(gradient), 1 - this.decay));\n const newAccumulatedMoments = add(mul(accumulatedMoments, this.momentum), div(mul(gradient, this.learningRate), sqrt(add(newAccumulatedMeanSquare, this.epsilon))));\n accumulatedMeanSquare.assign(newAccumulatedMeanSquare);\n accumulatedMoments.assign(newAccumulatedMoments);\n const newValue = sub(value, newAccumulatedMoments);\n value.assign(newValue);\n }\n });\n });\n this.incrementIterations();\n }\n dispose() {\n if (this.accumulatedMeanSquares != null) {\n dispose(this.accumulatedMeanSquares.map(v => v.variable));\n }\n if (this.accumulatedMeanGrads != null && this.centered) {\n dispose(this.accumulatedMeanGrads.map(v => v.variable));\n }\n if (this.accumulatedMoments != null) {\n dispose(this.accumulatedMoments.map(v => v.variable));\n }\n }\n async getWeights() {\n // Order matters for Python compatibility.\n const variables = [...this.accumulatedMeanSquares, ...this.accumulatedMoments];\n if (this.centered) {\n variables.push(...this.accumulatedMeanGrads);\n }\n return [await this.saveIterations()].concat(variables.map(v => ({ name: v.originalName, tensor: v.variable })));\n }\n async setWeights(weightValues) {\n weightValues = await this.extractIterations(weightValues);\n const variableCount = this.centered ? weightValues.length / 3 : weightValues.length / 2;\n const trainable = false;\n this.accumulatedMeanSquares =\n weightValues.slice(0, variableCount).map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n this.accumulatedMoments =\n weightValues.slice(variableCount, variableCount * 2)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n if (this.centered) {\n this.accumulatedMeanGrads =\n weightValues.slice(variableCount * 2, variableCount * 3)\n .map(v => ({\n originalName: v.name,\n variable: v.tensor.variable(trainable)\n }));\n }\n }\n getConfig() {\n return {\n 'learningRate': this.learningRate,\n 'decay': this.decay,\n 'momentum': this.momentum,\n 'epsilon': this.epsilon,\n 'centered': this.centered\n };\n }\n /** @nocollapse */\n static fromConfig(cls, config) {\n return new cls(config['learningRate'], config['decay'], config['momentum'], config['epsilon'], config['centered']);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm1zcHJvcF9vcHRpbWl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wdGltaXplcnMvcm1zcHJvcF9vcHRpbWl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJNUMsT0FBTyxFQUFDLFNBQVMsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFFekQseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUFTO0lBQzdDLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssU0FBUztRQUNsQix5Q0FBeUM7UUFDekMsMEVBQTBFO1FBQzFFLG9EQUFvRDtRQUNwRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBT0QsWUFDYyxZQUFvQixFQUFZLFFBQVEsR0FBRyxFQUMzQyxXQUFXLEdBQUcsRUFBWSxVQUFrQixJQUFJLEVBQzFELFFBQVEsR0FBRyxLQUFLO1FBQ2xCLEtBQUssRUFBRSxDQUFDO1FBSEksaUJBQVksR0FBWixZQUFZLENBQVE7UUFBWSxVQUFLLEdB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LEtBQUs7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxDQUFVLFVBQVUsQ0FDdEIsR0FBK0IsRUFBRSxNQUFrQjtRQUNyRCxPQUFPLElBQUksR0FBRyxDQUNWLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUMzRCxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VOR0lORX0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7ZGlzcG9zZSwgdGlkeX0gZnJvbSAnLi4vZ2xvYmFscyc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4vb3BzL2FkZCc7XG5pbXBvcnQge2Rpdn0gZnJvbSAnLi4vb3BzL2Rpdic7XG5pbXBvcnQge211bH0gZnJvbSAnLi4vb3BzL211bCc7XG5pbXBvcnQge3NxcnR9IGZyb20gJy4uL29wcy9zcXJ0JztcbmltcG9ydCB7c3F1YXJlfSBmcm9tICcuLi9vcHMvc3F1YXJlJztcbmltcG9ydCB7c3VifSBmcm9tICcuLi9vcHMvc3ViJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuLi9vcHMvemVyb3NfbGlrZSc7XG5pbXBvcnQge0NvbmZpZ0RpY3QsIFNlcmlhbGl6YWJsZSwgU2VyaWFsaXphYmxlQ29uc3RydWN0b3J9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24nO1xuaW1wb3J0IHtOYW1lZFRlbnNvciwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5cbmltcG9ydCB7T3B0aW1pemVyLCBPcHRpbWl6ZXJWYXJpYWJsZX0gZnJvbSAnLi9vcHRpbWl6ZXInO1xuXG4vKiogQGRvY2xpbmsgT3B0aW1pemVyICovXG5leHBvcnQgY2xhc3MgUk1TUHJvcE9wdGltaXplciBleHRlbmRzIE9wdGltaXplciB7XG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAvLyBOYW1lIG1hdHRlcnMgZm9yIFB5dGhvbiBjb21wYXRpYmlsaXR5LlxuICAgIC8vIFRoaXMgaXMgYSBnZXR0ZXIgaW5zdGVhZCBvZiBhIHByb3BlcnR5IGJlY2F1c2Ugd2hlbiBpdCdzIGEgcHJvcGVydHksIGl0XG4gICAgLy8gcHJldmVudHMgdGhlIGVudGlyZSBjbGFzcyBmcm9tIGJlaW5nIHRyZWUtc2hha2VuLlxuICAgIHJldHVybiAnUk1TUHJvcCc7XG4gIH1cbiAgcHJpdmF0ZSBjZW50ZXJlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIGFjY3VtdWxhdGVkTWVhblNxdWFyZXM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZE1vbWVudHM6IE9wdGltaXplclZhcmlhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZE1lYW5HcmFkczogT3B0aW1pemVyVmFyaWFibGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGxlYXJuaW5nUmF0ZTogbnVtYmVyLCBwcm90ZWN0ZWQgZGVjYXkgPSAwLjksXG4gICAgICBwcm90ZWN0ZWQgbW9tZW50dW0gPSAwLjAsIHByb3RlY3RlZCBlcHNpbG9uOiBudW1iZXIgPSBudWxsLFxuICAgICAgY2VudGVyZWQgPSBmYWxzZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNlbnRlcmVkID0gY2VudGVyZWQ7XG5cbiAgICBpZiAoZXBzaWxvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLmVwc2lsb24gPSBFTkdJTkUuYmFja2VuZC5lcHNpbG9uKCk7XG4gICAgfVxuICAgIGlmIChsZWFybmluZ1JhdGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBsZWFybmluZ1JhdGUgZm9yIFJNU1Byb3BPcHRpbWl6ZXIgbXVzdCBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhZGllbnRzKHZhcmlhYmxlR3JhZGllbnRzOiBOYW1lZFRlbnNvck1hcHxOYW1lZFRlbnNvcltdKSB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lcyA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgdmFyaWFibGVHcmFkaWVudHMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSA6XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhYmxlR3JhZGllbnRzKTtcblxuICAgIHZhcmlhYmxlTmFtZXMuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBFTkdJTkUucmVnaXN0ZXJlZFZhcmlhYmxlc1tuYW1lXTtcbiAgICAgIGNvbnN0IHRyYWluYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuU3F1YXJlc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuU3F1YXJlc1tpXSA9IHtcbiAgICAgICAgICBvcmlnaW5hbE5hbWU6IGAke25hbWV9L3Jtc2AsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNb21lbnRzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZE1vbWVudHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tb21lbnR1bWAsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0gPT0gbnVsbCAmJiB0aGlzLmNlbnRlcmVkKSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0gPSB7XG4gICAgICAgICAgb3JpZ2luYWxOYW1lOiBgJHtuYW1lfS9tZ2AsXG4gICAgICAgICAgdmFyaWFibGU6IHRpZHkoKCkgPT4gemVyb3NMaWtlKHZhbHVlKS52YXJpYWJsZSh0cmFpbmFibGUpKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncmFkaWVudCA9IEFycmF5LmlzQXJyYXkodmFyaWFibGVHcmFkaWVudHMpID9cbiAgICAgICAgICB2YXJpYWJsZUdyYWRpZW50c1tpXS50ZW5zb3IgOlxuICAgICAgICAgIHZhcmlhYmxlR3JhZGllbnRzW25hbWVdO1xuICAgICAgaWYgKGdyYWRpZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY2N1bXVsYXRlZE1lYW5TcXVhcmUgPSB0aGlzLmFjY3VtdWxhdGVkTWVhblNxdWFyZXNbaV0udmFyaWFibGU7XG4gICAgICBjb25zdCBhY2N1bXVsYXRlZE1vbWVudHMgPSB0aGlzLmFjY3VtdWxhdGVkTW9tZW50c1tpXS52YXJpYWJsZTtcbiAgICAgIHRpZHkoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUgPVxuICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5TcXVhcmUsIHRoaXMuZGVjYXkpLFxuICAgICAgICAgICAgICAgIG11bChzcXVhcmUoZ3JhZGllbnQpLCAxIC0gdGhpcy5kZWNheSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmNlbnRlcmVkKSB7XG4gICAgICAgICAgY29uc3QgYWNjdW11bGF0ZWRNZWFuR3JhZCA9IHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHNbaV0udmFyaWFibGU7XG4gICAgICAgICAgLy8gQ2VudGVyZWQgZ3JhZGllbnRcbiAgICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1lYW5HcmFkID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5HcmFkLCB0aGlzLmRlY2F5KSxcbiAgICAgICAgICAgICAgICAgIG11bChncmFkaWVudCwgMSAtIHRoaXMuZGVjYXkpKTtcblxuICAgICAgICAgIGNvbnN0IGdyYWRDb250cmlidXRpb24gPVxuICAgICAgICAgICAgICBkaXYobXVsKGdyYWRpZW50LCB0aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgICBzcXJ0KFxuICAgICAgICAgICAgICAgICAgICAgIHN1YihuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZChzcXVhcmUobmV3QWNjdW11bGF0ZWRNZWFuR3JhZCksIHRoaXMuZXBzaWxvbikpKSk7XG4gICAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRNb21lbnRzID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1vbWVudHMsIHRoaXMubW9tZW50dW0pLCBncmFkQ29udHJpYnV0aW9uKTtcblxuICAgICAgICAgIGFjY3VtdWxhdGVkTWVhblNxdWFyZS5hc3NpZ24obmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlKTtcbiAgICAgICAgICBhY2N1bXVsYXRlZE1lYW5HcmFkLmFzc2lnbihuZXdBY2N1bXVsYXRlZE1lYW5HcmFkKTtcbiAgICAgICAgICBhY2N1bXVsYXRlZE1vbWVudHMuYXNzaWduKG5ld0FjY3VtdWxhdGVkTW9tZW50cyk7XG5cbiAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHN1Yih2YWx1ZSwgbmV3QWNjdW11bGF0ZWRNb21lbnRzKTtcbiAgICAgICAgICB2YWx1ZS5hc3NpZ24obmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBsYWluIGdyYWRpZW50XG4gICAgICAgICAgY29uc3QgbmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlID1cbiAgICAgICAgICAgICAgYWRkKG11bChhY2N1bXVsYXRlZE1lYW5TcXVhcmUsIHRoaXMuZGVjYXkpLFxuICAgICAgICAgICAgICAgICAgbXVsKHNxdWFyZShncmFkaWVudCksIDEgLSB0aGlzLmRlY2F5KSk7XG5cbiAgICAgICAgICBjb25zdCBuZXdBY2N1bXVsYXRlZE1vbWVudHMgPVxuICAgICAgICAgICAgICBhZGQobXVsKGFjY3VtdWxhdGVkTW9tZW50cywgdGhpcy5tb21lbnR1bSksXG4gICAgICAgICAgICAgICAgICBkaXYobXVsKGdyYWRpZW50LCB0aGlzLmxlYXJuaW5nUmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3FydChhZGQobmV3QWNjdW11bGF0ZWRNZWFuU3F1YXJlLCB0aGlzLmVwc2lsb24pKSkpO1xuXG4gICAgICAgICAgYWNjdW11bGF0ZWRNZWFuU3F1YXJlLmFzc2lnbihuZXdBY2N1bXVsYXRlZE1lYW5TcXVhcmUpO1xuICAgICAgICAgIGFjY3VtdWxhdGVkTW9tZW50cy5hc3NpZ24obmV3QWNjdW11bGF0ZWRNb21lbnRzKTtcblxuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3ViKHZhbHVlLCBuZXdBY2N1bXVsYXRlZE1vbWVudHMpO1xuICAgICAgICAgIHZhbHVlLmFzc2lnbihuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuaW5jcmVtZW50SXRlcmF0aW9ucygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzICE9IG51bGwpIHtcbiAgICAgIGRpc3Bvc2UodGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzLm1hcCh2ID0+IHYudmFyaWFibGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMgIT0gbnVsbCAmJiB0aGlzLmNlbnRlcmVkKSB7XG4gICAgICBkaXNwb3NlKHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMubWFwKHYgPT4gdi52YXJpYWJsZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY2N1bXVsYXRlZE1vbWVudHMgIT0gbnVsbCkge1xuICAgICAgZGlzcG9zZSh0aGlzLmFjY3VtdWxhdGVkTW9tZW50cy5tYXAodiA9PiB2LnZhcmlhYmxlKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0V2VpZ2h0cygpOiBQcm9taXNlPE5hbWVkVGVuc29yW10+IHtcbiAgICAvLyBPcmRlciBtYXR0ZXJzIGZvciBQeXRob24gY29tcGF0aWJpbGl0eS5cbiAgICBjb25zdCB2YXJpYWJsZXM6IE9wdGltaXplclZhcmlhYmxlW10gPVxuICAgICAgICBbLi4udGhpcy5hY2N1bXVsYXRlZE1lYW5TcXVhcmVzLCAuLi50aGlzLmFjY3VtdWxhdGVkTW9tZW50c107XG4gICAgaWYgKHRoaXMuY2VudGVyZWQpIHtcbiAgICAgIHZhcmlhYmxlcy5wdXNoKC4uLnRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMpO1xuICAgIH1cbiAgICByZXR1cm4gW2F3YWl0IHRoaXMuc2F2ZUl0ZXJhdGlvbnMoKV0uY29uY2F0KFxuICAgICAgICB2YXJpYWJsZXMubWFwKHYgPT4gKHtuYW1lOiB2Lm9yaWdpbmFsTmFtZSwgdGVuc29yOiB2LnZhcmlhYmxlfSkpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHNldFdlaWdodHMod2VpZ2h0VmFsdWVzOiBOYW1lZFRlbnNvcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2VpZ2h0VmFsdWVzID0gYXdhaXQgdGhpcy5leHRyYWN0SXRlcmF0aW9ucyh3ZWlnaHRWYWx1ZXMpO1xuICAgIGNvbnN0IHZhcmlhYmxlQ291bnQgPVxuICAgICAgICB0aGlzLmNlbnRlcmVkID8gd2VpZ2h0VmFsdWVzLmxlbmd0aCAvIDMgOiB3ZWlnaHRWYWx1ZXMubGVuZ3RoIC8gMjtcbiAgICBjb25zdCB0cmFpbmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmFjY3VtdWxhdGVkTWVhblNxdWFyZXMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UoMCwgdmFyaWFibGVDb3VudCkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6IHYudGVuc29yLnZhcmlhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgdGhpcy5hY2N1bXVsYXRlZE1vbWVudHMgPVxuICAgICAgICB3ZWlnaHRWYWx1ZXMuc2xpY2UodmFyaWFibGVDb3VudCwgdmFyaWFibGVDb3VudCAqIDIpXG4gICAgICAgICAgICAubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICB9KSk7XG4gICAgaWYgKHRoaXMuY2VudGVyZWQpIHtcbiAgICAgIHRoaXMuYWNjdW11bGF0ZWRNZWFuR3JhZHMgPVxuICAgICAgICAgIHdlaWdodFZhbHVlcy5zbGljZSh2YXJpYWJsZUNvdW50ICogMiwgdmFyaWFibGVDb3VudCAqIDMpXG4gICAgICAgICAgICAgIC5tYXAodiA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogdi50ZW5zb3IudmFyaWFibGUodHJhaW5hYmxlKVxuICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnRGljdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsZWFybmluZ1JhdGUnOiB0aGlzLmxlYXJuaW5nUmF0ZSxcbiAgICAgICdkZWNheSc6IHRoaXMuZGVjYXksXG4gICAgICAnbW9tZW50dW0nOiB0aGlzLm1vbWVudHVtLFxuICAgICAgJ2Vwc2lsb24nOiB0aGlzLmVwc2lsb24sXG4gICAgICAnY2VudGVyZWQnOiB0aGlzLmNlbnRlcmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAbm9jb2xsYXBzZSAqL1xuICBzdGF0aWMgb3ZlcnJpZGUgZnJvbUNvbmZpZzxUIGV4dGVuZHMgU2VyaWFsaXphYmxlPihcbiAgICAgIGNsczogU2VyaWFsaXphYmxlQ29uc3RydWN0b3I8VD4sIGNvbmZpZzogQ29uZmlnRGljdCk6IFQge1xuICAgIHJldHVybiBuZXcgY2xzKFxuICAgICAgICBjb25maWdbJ2xlYXJuaW5nUmF0ZSddLCBjb25maWdbJ2RlY2F5J10sIGNvbmZpZ1snbW9tZW50dW0nXSxcbiAgICAgICAgY29uZmlnWydlcHNpbG9uJ10sIGNvbmZpZ1snY2VudGVyZWQnXSk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AdadeltaOptimizer } from './adadelta_optimizer';\nimport { AdagradOptimizer } from './adagrad_optimizer';\nimport { AdamOptimizer } from './adam_optimizer';\nimport { AdamaxOptimizer } from './adamax_optimizer';\nimport { MomentumOptimizer } from './momentum_optimizer';\nimport { RMSPropOptimizer } from './rmsprop_optimizer';\nimport { SGDOptimizer } from './sgd_optimizer';\nimport { registerClass } from '../serialization';\nconst OPTIMIZERS = [\n AdadeltaOptimizer,\n AdagradOptimizer,\n AdamOptimizer,\n AdamaxOptimizer,\n MomentumOptimizer,\n RMSPropOptimizer,\n SGDOptimizer,\n];\nexport function registerOptimizers() {\n for (const optimizer of OPTIMIZERS) {\n registerClass(optimizer);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfb3B0aW1pemVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3B0aW1pemVycy9yZWdpc3Rlcl9vcHRpbWl6ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsR0FBRztJQUNqQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixZQUFZO0NBQ2IsQ0FBQztBQUVGLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzFCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBZGFkZWx0YU9wdGltaXplcn0gZnJvbSAnLi9hZGFkZWx0YV9vcHRpbWl6ZXInO1xuaW1wb3J0IHtBZGFncmFkT3B0aW1pemVyfSBmcm9tICcuL2FkYWdyYWRfb3B0aW1pemVyJztcbmltcG9ydCB7QWRhbU9wdGltaXplcn0gZnJvbSAnLi9hZGFtX29wdGltaXplcic7XG5pbXBvcnQge0FkYW1heE9wdGltaXplcn0gZnJvbSAnLi9hZGFtYXhfb3B0aW1pemVyJztcbmltcG9ydCB7TW9tZW50dW1PcHRpbWl6ZXJ9IGZyb20gJy4vbW9tZW50dW1fb3B0aW1pemVyJztcbmltcG9ydCB7Uk1TUHJvcE9wdGltaXplcn0gZnJvbSAnLi9ybXNwcm9wX29wdGltaXplcic7XG5pbXBvcnQge1NHRE9wdGltaXplcn0gZnJvbSAnLi9zZ2Rfb3B0aW1pemVyJztcbmltcG9ydCB7cmVnaXN0ZXJDbGFzc30gZnJvbSAnLi4vc2VyaWFsaXphdGlvbic7XG5cbmNvbnN0IE9QVElNSVpFUlMgPSBbXG4gIEFkYWRlbHRhT3B0aW1pemVyLFxuICBBZGFncmFkT3B0aW1pemVyLFxuICBBZGFtT3B0aW1pemVyLFxuICBBZGFtYXhPcHRpbWl6ZXIsXG4gIE1vbWVudHVtT3B0aW1pemVyLFxuICBSTVNQcm9wT3B0aW1pemVyLFxuICBTR0RPcHRpbWl6ZXIsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJPcHRpbWl6ZXJzKCkge1xuICBmb3IgKGNvbnN0IG9wdGltaXplciBvZiBPUFRJTUlaRVJTKSB7XG4gICAgcmVnaXN0ZXJDbGFzcyhvcHRpbWl6ZXIpO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandlers related to files, such as browser-triggered file downloads,\n * user-selected files in browser.\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { basename, getModelArtifactsForJSON, getModelArtifactsInfoForJSON, getModelJSONForModelArtifacts } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nconst DEFAULT_FILE_NAME_PREFIX = 'model';\nconst DEFAULT_JSON_EXTENSION_NAME = '.json';\nconst DEFAULT_WEIGHT_DATA_EXTENSION_NAME = '.weights.bin';\nfunction defer(f) {\n return new Promise(resolve => setTimeout(resolve)).then(f);\n}\nclass BrowserDownloads {\n constructor(fileNamePrefix) {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Provide info on what IOHandlers are available under the\n // current environment.\n throw new Error('browserDownloads() cannot proceed because the current environment ' +\n 'is not a browser.');\n }\n if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) {\n fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length);\n }\n if (fileNamePrefix == null || fileNamePrefix.length === 0) {\n fileNamePrefix = DEFAULT_FILE_NAME_PREFIX;\n }\n this.modelJsonFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME;\n this.weightDataFileName =\n fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME;\n }\n async save(modelArtifacts) {\n if (typeof (document) === 'undefined') {\n throw new Error('Browser downloads are not supported in ' +\n 'this environment since `document` is not present');\n }\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n const weightsURL = window.URL.createObjectURL(new Blob([weightBuffer], { type: 'application/octet-stream' }));\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserDownloads.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const weightsManifest = [{\n paths: ['./' + this.weightDataFileName],\n weights: modelArtifacts.weightSpecs\n }];\n const modelJSON = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest);\n const modelJsonURL = window.URL.createObjectURL(new Blob([JSON.stringify(modelJSON)], { type: 'application/json' }));\n // If anchor elements are not provided, create them without attaching them\n // to parents, so that the downloaded file names can be controlled.\n const jsonAnchor = this.modelJsonAnchor == null ?\n document.createElement('a') :\n this.modelJsonAnchor;\n jsonAnchor.download = this.modelJsonFileName;\n jsonAnchor.href = modelJsonURL;\n // Trigger downloads by evoking a click event on the download anchors.\n // When multiple downloads are started synchronously, Firefox will only\n // save the last one.\n await defer(() => jsonAnchor.dispatchEvent(new MouseEvent('click')));\n if (modelArtifacts.weightData != null) {\n const weightDataAnchor = this.weightDataAnchor == null ?\n document.createElement('a') :\n this.weightDataAnchor;\n weightDataAnchor.download = this.weightDataFileName;\n weightDataAnchor.href = weightsURL;\n await defer(() => weightDataAnchor.dispatchEvent(new MouseEvent('click')));\n }\n return { modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts) };\n }\n }\n}\nBrowserDownloads.URL_SCHEME = 'downloads://';\nexport { BrowserDownloads };\nclass BrowserFiles {\n constructor(files) {\n if (files == null || files.length < 1) {\n throw new Error(`When calling browserFiles, at least 1 file is required, ` +\n `but received ${files}`);\n }\n this.jsonFile = files[0];\n this.weightsFiles = files.slice(1);\n }\n async load() {\n return new Promise((resolve, reject) => {\n const jsonReader = new FileReader();\n jsonReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const modelJSON = JSON.parse(event.target.result);\n const modelTopology = modelJSON.modelTopology;\n if (modelTopology == null) {\n reject(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));\n return;\n }\n const weightsManifest = modelJSON.weightsManifest;\n if (weightsManifest == null) {\n reject(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));\n return;\n }\n if (this.weightsFiles.length === 0) {\n resolve({ modelTopology });\n return;\n }\n const modelArtifactsPromise = getModelArtifactsForJSON(modelJSON, (weightsManifest) => this.loadWeights(weightsManifest));\n resolve(modelArtifactsPromise);\n };\n jsonReader.onerror = error => reject(`Failed to read model topology and weights manifest JSON ` +\n `from file '${this.jsonFile.name}'. BrowserFiles supports loading ` +\n `Keras-style tf.Model artifacts only.`);\n jsonReader.readAsText(this.jsonFile);\n });\n }\n loadWeights(weightsManifest) {\n const weightSpecs = [];\n const paths = [];\n for (const entry of weightsManifest) {\n weightSpecs.push(...entry.weights);\n paths.push(...entry.paths);\n }\n const pathToFile = this.checkManifestAndWeightFiles(weightsManifest);\n const promises = paths.map(path => this.loadWeightsFile(path, pathToFile[path]));\n return Promise.all(promises).then(buffers => [weightSpecs, buffers]);\n }\n loadWeightsFile(path, file) {\n return new Promise((resolve, reject) => {\n const weightFileReader = new FileReader();\n weightFileReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const weightData = event.target.result;\n resolve(weightData);\n };\n weightFileReader.onerror = error => reject(`Failed to weights data from file of path '${path}'.`);\n weightFileReader.readAsArrayBuffer(file);\n });\n }\n /**\n * Check the compatibility between weights manifest and weight files.\n */\n checkManifestAndWeightFiles(manifest) {\n const basenames = [];\n const fileNames = this.weightsFiles.map(file => basename(file.name));\n const pathToFile = {};\n for (const group of manifest) {\n group.paths.forEach(path => {\n const pathBasename = basename(path);\n if (basenames.indexOf(pathBasename) !== -1) {\n throw new Error(`Duplicate file basename found in weights manifest: ` +\n `'${pathBasename}'`);\n }\n basenames.push(pathBasename);\n if (fileNames.indexOf(pathBasename) === -1) {\n throw new Error(`Weight file with basename '${pathBasename}' is not provided.`);\n }\n else {\n pathToFile[path] = this.weightsFiles[fileNames.indexOf(pathBasename)];\n }\n });\n }\n if (basenames.length !== this.weightsFiles.length) {\n throw new Error(`Mismatch in the number of files in weights manifest ` +\n `(${basenames.length}) and the number of weight files provided ` +\n `(${this.weightsFiles.length}).`);\n }\n return pathToFile;\n }\n}\nexport const browserDownloadsRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) {\n return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(browserDownloadsRouter);\n/**\n * Creates an IOHandler that triggers file downloads from the browser.\n *\n * The returned `IOHandler` instance can be used as model exporting methods such\n * as `tf.Model.save` and supports only saving.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * const saveResult = await model.save('downloads://mymodel');\n * // This will trigger downloading of two files:\n * // 'mymodel.json' and 'mymodel.weights.bin'.\n * console.log(saveResult);\n * ```\n *\n * @param fileNamePrefix Prefix name of the files to be downloaded. For use with\n * `tf.Model`, `fileNamePrefix` should follow either of the following two\n * formats:\n * 1. `null` or `undefined`, in which case the default file\n * names will be used:\n * - 'model.json' for the JSON file containing the model topology and\n * weights manifest.\n * - 'model.weights.bin' for the binary file containing the binary weight\n * values.\n * 2. A single string or an Array of a single string, as the file name prefix.\n * For example, if `'foo'` is provided, the downloaded JSON\n * file and binary weights file will be named 'foo.json' and\n * 'foo.weights.bin', respectively.\n * @param config Additional configuration for triggering downloads.\n * @returns An instance of `BrowserDownloads` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserDownloads(fileNamePrefix = 'model') {\n return new BrowserDownloads(fileNamePrefix);\n}\n/**\n * Creates an IOHandler that loads model artifacts from user-selected files.\n *\n * This method can be used for loading from files such as user-selected files\n * in the browser.\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * // Note: This code snippet won't run properly without the actual file input\n * // elements in the HTML DOM.\n *\n * // Suppose there are two HTML file input (``)\n * // elements.\n * const uploadJSONInput = document.getElementById('upload-json');\n * const uploadWeightsInput = document.getElementById('upload-weights');\n * const model = await tf.loadLayersModel(tf.io.browserFiles(\n * [uploadJSONInput.files[0], uploadWeightsInput.files[0]]));\n * ```\n *\n * @param files `File`s to load from. Currently, this function supports only\n * loading from files that contain Keras-style models (i.e., `tf.Model`s), for\n * which an `Array` of `File`s is expected (in that order):\n * - A JSON file containing the model topology and weight manifest.\n * - Optionally, one or more binary files containing the binary weights.\n * These files must have names that match the paths in the `weightsManifest`\n * contained by the aforementioned JSON file, or errors will be thrown\n * during loading. These weights files have the same format as the ones\n * generated by `tensorflowjs_converter` that comes with the `tensorflowjs`\n * Python PIP package. If no weights files are provided, only the model\n * topology will be loaded from the JSON file above.\n * @returns An instance of `Files` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserFiles(files) {\n return new BrowserFiles(files);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlcl9maWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vYnJvd3Nlcl9maWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7O0dBR0c7QUFFSCxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMzSCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztBQUN6QyxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQztBQUM1QyxNQUFNLGtDQUFrQyxHQUFHLGNBQWMsQ0FBQztBQUUxRCxTQUFTLEtBQUssQ0FBSSxDQUFVO0lBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQWEsZ0JBQWdCO0lBUTNCLFlBQVksY0FBdUI7UUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNoQyxzRUFBc0U7WUFDdEUseUJBQXlCO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsb0VBQW9FO2dCQUNwRSxtQkFBbUIsQ0FBQyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFELGNBQWMsR0FBRyxj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QyxZQUFZLENBQUMsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0FBQ0gsQ0FBQyxDQUFDO0FBQ0YsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLE9BQU87SUFDdkQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhO0lBQ3hDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBJT0hhbmRsZXJzIHJlbGF0ZWQgdG8gZmlsZXMsIHN1Y2ggYXMgYnJvd3Nlci10cmlnZ2VyZWQgZmlsZSBkb3dubG9hZHMsXG4gKiB1c2VyLXNlbGVjdGVkIGZpbGVzIGluIGJyb3dzZXIuXG4gKi9cblxuaW1wb3J0ICcuLi9mbGFncyc7XG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge2Jhc2VuYW1lLCBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04sIGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04sIGdldE1vZGVsSlNPTkZvck1vZGVsQXJ0aWZhY3RzfSBmcm9tICcuL2lvX3V0aWxzJztcbmltcG9ydCB7SU9Sb3V0ZXIsIElPUm91dGVyUmVnaXN0cnl9IGZyb20gJy4vcm91dGVyX3JlZ2lzdHJ5JztcbmltcG9ydCB7SU9IYW5kbGVyLCBNb2RlbEFydGlmYWN0cywgTW9kZWxKU09OLCBTYXZlUmVzdWx0LCBXZWlnaHREYXRhLCBXZWlnaHRzTWFuaWZlc3RDb25maWcsIFdlaWdodHNNYW5pZmVzdEVudHJ5fSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5cbmNvbnN0IERFRkFVTFRfRklMRV9OQU1FX1BSRUZJWCA9ICdtb2RlbCc7XG5jb25zdCBERUZBVUxUX0pTT05fRVhURU5TSU9OX05BTUUgPSAnLmpzb24nO1xuY29uc3QgREVGQVVMVF9XRUlHSFRfREFUQV9FWFRFTlNJT05fTkFNRSA9ICcud2VpZ2h0cy5iaW4nO1xuXG5mdW5jdGlvbiBkZWZlcjxUPihmOiAoKSA9PiBUKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSkpLnRoZW4oZik7XG59XG5cbmV4cG9ydCBjbGFzcyBCcm93c2VyRG93bmxvYWRzIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RlbEpzb25GaWxlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodERhdGFGaWxlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZGVsSnNvbkFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2VpZ2h0RGF0YUFuY2hvcjogSFRNTEFuY2hvckVsZW1lbnQ7XG5cbiAgc3RhdGljIHJlYWRvbmx5IFVSTF9TQ0hFTUUgPSAnZG93bmxvYWRzOi8vJztcblxuICBjb25zdHJ1Y3RvcihmaWxlTmFtZVByZWZpeD86IHN0cmluZykge1xuICAgIGlmICghZW52KCkuZ2V0Qm9vbCgnSVNfQlJPV1NFUicpKSB7XG4gICAgICAvLyBUT0RPKGNhaXMpOiBQcm92aWRlIGluZm8gb24gd2hhdCBJT0hhbmRsZXJzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlXG4gICAgICAvLyAgIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2Jyb3dzZXJEb3dubG9hZHMoKSBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50ICcgK1xuICAgICAgICAgICdpcyBub3QgYSBicm93c2VyLicpO1xuICAgIH1cblxuICAgIGlmIChmaWxlTmFtZVByZWZpeC5zdGFydHNXaXRoKEJyb3dzZXJEb3dubG9hZHMuVVJMX1NDSEVNRSkpIHtcbiAgICAgIGZpbGVOYW1lUHJlZml4ID0gZmlsZU5hbWVQcmVmaXguc2xpY2UoQnJvd3NlckRvd25sb2Fkcy5VUkxfU0NIRU1FLmxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChmaWxlTmFtZVByZWZpeCA9PSBudWxsIHx8IGZpbGVOYW1lUHJlZml4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsZU5hbWVQcmVmaXggPSBERUZBVUxUX0ZJTEVfTkFNRV9QUkVGSVg7XG4gICAgfVxuXG4gICAgdGhpcy5tb2RlbEpzb25GaWxlTmFtZSA9IGZpbGVOYW1lUHJlZml4ICsgREVGQVVMVF9KU09OX0VYVEVOU0lPTl9OQU1FO1xuICAgIHRoaXMud2VpZ2h0RGF0YUZpbGVOYW1lID1cbiAgICAgICAgZmlsZU5hbWVQcmVmaXggKyBERUZBVUxUX1dFSUdIVF9EQVRBX0VYVEVOU0lPTl9OQU1FO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpOiBQcm9taXNlPFNhdmVSZXN1bHQ+IHtcbiAgICBpZiAodHlwZW9mIChkb2N1bWVudCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Jyb3dzZXIgZG93bmxvYWRzIGFyZSBub3Qgc3VwcG9ydGVkIGluICcgK1xuICAgICAgICAgICd0aGlzIGVudmlyb25tZW50IHNpbmNlIGBkb2N1bWVudGAgaXMgbm90IHByZXNlbnQnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKG1hdHRzb3VsYW5pbGxlKTogU3VwcG9ydCBzYXZpbmcgbW9kZWxzIG92ZXIgMkdCIHRoYXQgZXhjZWVkXG4gICAgLy8gQ2hyb21lJ3MgQXJyYXlCdWZmZXIgc2l6ZSBsaW1pdC5cbiAgICBjb25zdCB3ZWlnaHRCdWZmZXIgPSBDb21wb3NpdGVBcnJheUJ1ZmZlci5qb2luKG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEpO1xuXG4gICAgY29uc3Qgd2VpZ2h0c1VSTCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFxuICAgICAgICBbd2VpZ2h0QnVmZmVyXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSkpO1xuXG4gICAgaWYgKG1vZGVsQXJ0aWZhY3RzLm1vZGVsVG9wb2xvZ3kgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdCcm93c2VyRG93bmxvYWRzLnNhdmUoKSBkb2VzIG5vdCBzdXBwb3J0IHNhdmluZyBtb2RlbCB0b3BvbG9neSAnICtcbiAgICAgICAgICAnaW4gYmluYXJ5IGZvcm1hdHMgeWV0LicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB3ZWlnaHRzTWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyA9IFt7XG4gICAgICAgIHBhdGhzOiBbJy4vJyArIHRoaXMud2VpZ2h0RGF0YUZpbGVOYW1lXSxcbiAgICAgICAgd2VpZ2h0czogbW9kZWxBcnRpZmFjdHMud2VpZ2h0U3BlY3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbW9kZWxKU09OOiBNb2RlbEpTT04gPVxuICAgICAgICAgIGdldE1vZGVsSlNPTkZvck1vZGVsQXJ0aWZhY3RzKG1vZGVsQXJ0aWZhY3RzLCB3ZWlnaHRzTWFuaWZlc3QpO1xuXG4gICAgICBjb25zdCBtb2RlbEpzb25VUkwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChcbiAgICAgICAgICBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkobW9kZWxKU09OKV0sIHt0eXBlOiAnYXBwbGljYXRpb24vanNvbid9KSk7XG5cbiAgICAgIC8vIElmIGFuY2hvciBlbGVtZW50cyBhcmUgbm90IHByb3ZpZGVkLCBjcmVhdGUgdGhlbSB3aXRob3V0IGF0dGFjaGluZyB0aGVtXG4gICAgICAvLyB0byBwYXJlbnRzLCBzbyB0aGF0IHRoZSBkb3dubG9hZGVkIGZpbGUgbmFtZXMgY2FuIGJlIGNvbnRyb2xsZWQuXG4gICAgICBjb25zdCBqc29uQW5jaG9yID0gdGhpcy5tb2RlbEpzb25BbmNob3IgPT0gbnVsbCA/XG4gICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpIDpcbiAgICAgICAgICB0aGlzLm1vZGVsSnNvbkFuY2hvcjtcbiAgICAgIGpzb25BbmNob3IuZG93bmxvYWQgPSB0aGlzLm1vZGVsSnNvbkZpbGVOYW1lO1xuICAgICAganNvbkFuY2hvci5ocmVmID0gbW9kZWxKc29uVVJMO1xuICAgICAgLy8gVHJpZ2dlciBkb3dubG9hZHMgYnkgZXZva2luZyBhIGNsaWNrIGV2ZW50IG9uIHRoZSBkb3dubG9hZCBhbmNob3JzLlxuICAgICAgLy8gV2hlbiBtdWx0aXBsZSBkb3dubG9hZHMgYXJlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSwgRmlyZWZveCB3aWxsIG9ubHlcbiAgICAgIC8vIHNhdmUgdGhlIGxhc3Qgb25lLlxuICAgICAgYXdhaXQgZGVmZXIoKCkgPT4ganNvbkFuY2hvci5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKSk7XG5cbiAgICAgIGlmIChtb2RlbEFydGlmYWN0cy53ZWlnaHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgd2VpZ2h0RGF0YUFuY2hvciA9IHRoaXMud2VpZ2h0RGF0YUFuY2hvciA9PSBudWxsID9cbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKSA6XG4gICAgICAgICAgICB0aGlzLndlaWdodERhdGFBbmNob3I7XG4gICAgICAgIHdlaWdodERhdGFBbmNob3IuZG93bmxvYWQgPSB0aGlzLndlaWdodERhdGFGaWxlTmFtZTtcbiAgICAgICAgd2VpZ2h0RGF0YUFuY2hvci5ocmVmID0gd2VpZ2h0c1VSTDtcbiAgICAgICAgYXdhaXQgZGVmZXIoXG4gICAgICAgICAgICAoKSA9PiB3ZWlnaHREYXRhQW5jaG9yLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHttb2RlbEFydGlmYWN0c0luZm86IGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04obW9kZWxBcnRpZmFjdHMpfTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgQnJvd3NlckZpbGVzIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBqc29uRmlsZTogRmlsZTtcbiAgcHJpdmF0ZSByZWFkb25seSB3ZWlnaHRzRmlsZXM6IEZpbGVbXTtcblxuICBjb25zdHJ1Y3RvcihmaWxlczogRmlsZVtdKSB7XG4gICAgaWYgKGZpbGVzID09IG51bGwgfHwgZmlsZXMubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBXaGVuIGNhbGxpbmcgYnJvd3NlckZpbGVzLCBhdCBsZWFzdCAxIGZpbGUgaXMgcmVxdWlyZWQsIGAgK1xuICAgICAgICAgIGBidXQgcmVjZWl2ZWQgJHtmaWxlc31gKTtcbiAgICB9XG4gICAgdGhpcy5qc29uRmlsZSA9IGZpbGVzWzBdO1xuICAgIHRoaXMud2VpZ2h0c0ZpbGVzID0gZmlsZXMuc2xpY2UoMSk7XG4gIH1cblxuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QganNvblJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICBqc29uUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBjb25zdCBtb2RlbEpTT04gPSBKU09OLnBhcnNlKChldmVudC50YXJnZXQgYXMgYW55KS5yZXN1bHQpIGFzIE1vZGVsSlNPTjtcblxuICAgICAgICBjb25zdCBtb2RlbFRvcG9sb2d5ID0gbW9kZWxKU09OLm1vZGVsVG9wb2xvZ3k7XG4gICAgICAgIGlmIChtb2RlbFRvcG9sb2d5ID09IG51bGwpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBtb2RlbFRvcG9sb2d5IGZpZWxkIGlzIG1pc3NpbmcgZnJvbSBmaWxlICR7XG4gICAgICAgICAgICAgIHRoaXMuanNvbkZpbGUubmFtZX1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2VpZ2h0c01hbmlmZXN0ID0gbW9kZWxKU09OLndlaWdodHNNYW5pZmVzdDtcbiAgICAgICAgaWYgKHdlaWdodHNNYW5pZmVzdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgd2VpZ2h0TWFuaWZlc3QgZmllbGQgaXMgbWlzc2luZyBmcm9tIGZpbGUgJHtcbiAgICAgICAgICAgICAgdGhpcy5qc29uRmlsZS5uYW1lfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7bW9kZWxUb3BvbG9neX0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsQXJ0aWZhY3RzUHJvbWlzZSA9IGdldE1vZGVsQXJ0aWZhY3RzRm9ySlNPTihcbiAgICAgICAgICAgIG1vZGVsSlNPTiwgKHdlaWdodHNNYW5pZmVzdCkgPT4gdGhpcy5sb2FkV2VpZ2h0cyh3ZWlnaHRzTWFuaWZlc3QpKTtcbiAgICAgICAgcmVzb2x2ZShtb2RlbEFydGlmYWN0c1Byb21pc2UpO1xuICAgICAgfTtcblxuICAgICAganNvblJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KFxuICAgICAgICAgIGBGYWlsZWQgdG8gcmVhZCBtb2RlbCB0b3BvbG9neSBhbmQgd2VpZ2h0cyBtYW5pZmVzdCBKU09OIGAgK1xuICAgICAgICAgIGBmcm9tIGZpbGUgJyR7dGhpcy5qc29uRmlsZS5uYW1lfScuIEJyb3dzZXJGaWxlcyBzdXBwb3J0cyBsb2FkaW5nIGAgK1xuICAgICAgICAgIGBLZXJhcy1zdHlsZSB0Zi5Nb2RlbCBhcnRpZmFjdHMgb25seS5gKTtcbiAgICAgIGpzb25SZWFkZXIucmVhZEFzVGV4dCh0aGlzLmpzb25GaWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFdlaWdodHMod2VpZ2h0c01hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcpOiBQcm9taXNlPFtcbiAgICAvKiB3ZWlnaHRTcGVjcyAqLyBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLCBXZWlnaHREYXRhLFxuICBdPiB7XG4gICAgY29uc3Qgd2VpZ2h0U3BlY3M6IFdlaWdodHNNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHdlaWdodHNNYW5pZmVzdCkge1xuICAgICAgd2VpZ2h0U3BlY3MucHVzaCguLi5lbnRyeS53ZWlnaHRzKTtcbiAgICAgIHBhdGhzLnB1c2goLi4uZW50cnkucGF0aHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGhUb0ZpbGU6IHtbcGF0aDogc3RyaW5nXTogRmlsZX0gPVxuICAgICAgICB0aGlzLmNoZWNrTWFuaWZlc3RBbmRXZWlnaHRGaWxlcyh3ZWlnaHRzTWFuaWZlc3QpO1xuXG4gICAgY29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2U8QXJyYXlCdWZmZXI+PiA9XG4gICAgICAgIHBhdGhzLm1hcChwYXRoID0+IHRoaXMubG9hZFdlaWdodHNGaWxlKHBhdGgsIHBhdGhUb0ZpbGVbcGF0aF0pKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcbiAgICAgICAgYnVmZmVycyA9PiBbd2VpZ2h0U3BlY3MsIGJ1ZmZlcnNdKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFdlaWdodHNGaWxlKHBhdGg6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgd2VpZ2h0RmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBjb25zdCB3ZWlnaHREYXRhID0gKGV2ZW50LnRhcmdldCBhcyBhbnkpLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcbiAgICAgICAgcmVzb2x2ZSh3ZWlnaHREYXRhKTtcbiAgICAgIH07XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PlxuICAgICAgICAgIHJlamVjdChgRmFpbGVkIHRvIHdlaWdodHMgZGF0YSBmcm9tIGZpbGUgb2YgcGF0aCAnJHtwYXRofScuYCk7XG4gICAgICB3ZWlnaHRGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gd2VpZ2h0cyBtYW5pZmVzdCBhbmQgd2VpZ2h0IGZpbGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja01hbmlmZXN0QW5kV2VpZ2h0RmlsZXMobWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZyk6XG4gICAgICB7W3BhdGg6IHN0cmluZ106IEZpbGV9IHtcbiAgICBjb25zdCBiYXNlbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZmlsZU5hbWVzID0gdGhpcy53ZWlnaHRzRmlsZXMubWFwKGZpbGUgPT4gYmFzZW5hbWUoZmlsZS5uYW1lKSk7XG4gICAgY29uc3QgcGF0aFRvRmlsZToge1twYXRoOiBzdHJpbmddOiBGaWxlfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgbWFuaWZlc3QpIHtcbiAgICAgIGdyb3VwLnBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhCYXNlbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICAgICAgICBpZiAoYmFzZW5hbWVzLmluZGV4T2YocGF0aEJhc2VuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBEdXBsaWNhdGUgZmlsZSBiYXNlbmFtZSBmb3VuZCBpbiB3ZWlnaHRzIG1hbmlmZXN0OiBgICtcbiAgICAgICAgICAgICAgYCcke3BhdGhCYXNlbmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgYmFzZW5hbWVzLnB1c2gocGF0aEJhc2VuYW1lKTtcbiAgICAgICAgaWYgKGZpbGVOYW1lcy5pbmRleE9mKHBhdGhCYXNlbmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgV2VpZ2h0IGZpbGUgd2l0aCBiYXNlbmFtZSAnJHtwYXRoQmFzZW5hbWV9JyBpcyBub3QgcHJvdmlkZWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aFRvRmlsZVtwYXRoXSA9IHRoaXMud2VpZ2h0c0ZpbGVzW2ZpbGVOYW1lcy5pbmRleE9mKHBhdGhCYXNlbmFtZSldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZW5hbWVzLmxlbmd0aCAhPT0gdGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1pc21hdGNoIGluIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gd2VpZ2h0cyBtYW5pZmVzdCBgICtcbiAgICAgICAgICBgKCR7YmFzZW5hbWVzLmxlbmd0aH0pIGFuZCB0aGUgbnVtYmVyIG9mIHdlaWdodCBmaWxlcyBwcm92aWRlZCBgICtcbiAgICAgICAgICBgKCR7dGhpcy53ZWlnaHRzRmlsZXMubGVuZ3RofSkuYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoVG9GaWxlO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBicm93c2VyRG93bmxvYWRzUm91dGVyOiBJT1JvdXRlciA9ICh1cmw6IHN0cmluZ3xzdHJpbmdbXSkgPT4ge1xuICBpZiAoIWVudigpLmdldEJvb2woJ0lTX0JST1dTRVInKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmwpICYmIHVybC5zdGFydHNXaXRoKEJyb3dzZXJEb3dubG9hZHMuVVJMX1NDSEVNRSkpIHtcbiAgICAgIHJldHVybiBicm93c2VyRG93bmxvYWRzKHVybC5zbGljZShCcm93c2VyRG93bmxvYWRzLlVSTF9TQ0hFTUUubGVuZ3RoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufTtcbklPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJTYXZlUm91dGVyKGJyb3dzZXJEb3dubG9hZHNSb3V0ZXIpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyIHRoYXQgdHJpZ2dlcnMgZmlsZSBkb3dubG9hZHMgZnJvbSB0aGUgYnJvd3Nlci5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYElPSGFuZGxlcmAgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYXMgbW9kZWwgZXhwb3J0aW5nIG1ldGhvZHMgc3VjaFxuICogYXMgYHRmLk1vZGVsLnNhdmVgIGFuZCBzdXBwb3J0cyBvbmx5IHNhdmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWwgPSB0Zi5zZXF1ZW50aWFsKCk7XG4gKiBtb2RlbC5hZGQodGYubGF5ZXJzLmRlbnNlKFxuICogICAgIHt1bml0czogMSwgaW5wdXRTaGFwZTogWzEwXSwgYWN0aXZhdGlvbjogJ3NpZ21vaWQnfSkpO1xuICogY29uc3Qgc2F2ZVJlc3VsdCA9IGF3YWl0IG1vZGVsLnNhdmUoJ2Rvd25sb2FkczovL215bW9kZWwnKTtcbiAqIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGRvd25sb2FkaW5nIG9mIHR3byBmaWxlczpcbiAqIC8vICAgJ215bW9kZWwuanNvbicgYW5kICdteW1vZGVsLndlaWdodHMuYmluJy5cbiAqIGNvbnNvbGUubG9nKHNhdmVSZXN1bHQpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZpbGVOYW1lUHJlZml4IFByZWZpeCBuYW1lIG9mIHRoZSBmaWxlcyB0byBiZSBkb3dubG9hZGVkLiBGb3IgdXNlIHdpdGhcbiAqICAgYHRmLk1vZGVsYCwgYGZpbGVOYW1lUHJlZml4YCBzaG91bGQgZm9sbG93IGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIHR3b1xuICogICBmb3JtYXRzOlxuICogICAxLiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgZmlsZVxuICogICAgICBuYW1lcyB3aWxsIGJlIHVzZWQ6XG4gKiAgICAgIC0gJ21vZGVsLmpzb24nIGZvciB0aGUgSlNPTiBmaWxlIGNvbnRhaW5pbmcgdGhlIG1vZGVsIHRvcG9sb2d5IGFuZFxuICogICAgICAgIHdlaWdodHMgbWFuaWZlc3QuXG4gKiAgICAgIC0gJ21vZGVsLndlaWdodHMuYmluJyBmb3IgdGhlIGJpbmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGJpbmFyeSB3ZWlnaHRcbiAqICAgICAgICB2YWx1ZXMuXG4gKiAgIDIuIEEgc2luZ2xlIHN0cmluZyBvciBhbiBBcnJheSBvZiBhIHNpbmdsZSBzdHJpbmcsIGFzIHRoZSBmaWxlIG5hbWUgcHJlZml4LlxuICogICAgICBGb3IgZXhhbXBsZSwgaWYgYCdmb28nYCBpcyBwcm92aWRlZCwgdGhlIGRvd25sb2FkZWQgSlNPTlxuICogICAgICBmaWxlIGFuZCBiaW5hcnkgd2VpZ2h0cyBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Zvby5qc29uJyBhbmRcbiAqICAgICAgJ2Zvby53ZWlnaHRzLmJpbicsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0cmlnZ2VyaW5nIGRvd25sb2Fkcy5cbiAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIGBCcm93c2VyRG93bmxvYWRzYCBgSU9IYW5kbGVyYC5cbiAqXG4gKiBAZG9jIHtcbiAqICAgaGVhZGluZzogJ01vZGVscycsXG4gKiAgIHN1YmhlYWRpbmc6ICdMb2FkaW5nJyxcbiAqICAgbmFtZXNwYWNlOiAnaW8nLFxuICogICBpZ25vcmVDSTogdHJ1ZVxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJvd3NlckRvd25sb2FkcyhmaWxlTmFtZVByZWZpeCA9ICdtb2RlbCcpOiBJT0hhbmRsZXIge1xuICByZXR1cm4gbmV3IEJyb3dzZXJEb3dubG9hZHMoZmlsZU5hbWVQcmVmaXgpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyIHRoYXQgbG9hZHMgbW9kZWwgYXJ0aWZhY3RzIGZyb20gdXNlci1zZWxlY3RlZCBmaWxlcy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBmb3IgbG9hZGluZyBmcm9tIGZpbGVzIHN1Y2ggYXMgdXNlci1zZWxlY3RlZCBmaWxlc1xuICogaW4gdGhlIGJyb3dzZXIuXG4gKiBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdGYubG9hZExheWVyc01vZGVsYCwgYW4gaW5zdGFuY2Ugb2ZcbiAqIGB0Zi5MYXllcnNNb2RlbGAgKEtlcmFzLXN0eWxlKSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgbG9hZGVkIGFydGlmYWN0cy5cbiAqXG4gKiBgYGBqc1xuICogLy8gTm90ZTogVGhpcyBjb2RlIHNuaXBwZXQgd29uJ3QgcnVuIHByb3Blcmx5IHdpdGhvdXQgdGhlIGFjdHVhbCBmaWxlIGlucHV0XG4gKiAvLyAgIGVsZW1lbnRzIGluIHRoZSBIVE1MIERPTS5cbiAqXG4gKiAvLyBTdXBwb3NlIHRoZXJlIGFyZSB0d28gSFRNTCBmaWxlIGlucHV0IChgPGlucHV0IHR5cGU9XCJmaWxlXCIgLi4uPmApXG4gKiAvLyBlbGVtZW50cy5cbiAqIGNvbnN0IHVwbG9hZEpTT05JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1cGxvYWQtanNvbicpO1xuICogY29uc3QgdXBsb2FkV2VpZ2h0c0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZC13ZWlnaHRzJyk7XG4gKiBjb25zdCBtb2RlbCA9IGF3YWl0IHRmLmxvYWRMYXllcnNNb2RlbCh0Zi5pby5icm93c2VyRmlsZXMoXG4gKiAgICAgW3VwbG9hZEpTT05JbnB1dC5maWxlc1swXSwgdXBsb2FkV2VpZ2h0c0lucHV0LmZpbGVzWzBdXSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGZpbGVzIGBGaWxlYHMgdG8gbG9hZCBmcm9tLiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgb25seVxuICogICBsb2FkaW5nIGZyb20gZmlsZXMgdGhhdCBjb250YWluIEtlcmFzLXN0eWxlIG1vZGVscyAoaS5lLiwgYHRmLk1vZGVsYHMpLCBmb3JcbiAqICAgd2hpY2ggYW4gYEFycmF5YCBvZiBgRmlsZWBzIGlzIGV4cGVjdGVkIChpbiB0aGF0IG9yZGVyKTpcbiAqICAgLSBBIEpTT04gZmlsZSBjb250YWluaW5nIHRoZSBtb2RlbCB0b3BvbG9neSBhbmQgd2VpZ2h0IG1hbmlmZXN0LlxuICogICAtIE9wdGlvbmFsbHksIG9uZSBvciBtb3JlIGJpbmFyeSBmaWxlcyBjb250YWluaW5nIHRoZSBiaW5hcnkgd2VpZ2h0cy5cbiAqICAgICBUaGVzZSBmaWxlcyBtdXN0IGhhdmUgbmFtZXMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgaW4gdGhlIGB3ZWlnaHRzTWFuaWZlc3RgXG4gKiAgICAgY29udGFpbmVkIGJ5IHRoZSBhZm9yZW1lbnRpb25lZCBKU09OIGZpbGUsIG9yIGVycm9ycyB3aWxsIGJlIHRocm93blxuICogICAgIGR1cmluZyBsb2FkaW5nLiBUaGVzZSB3ZWlnaHRzIGZpbGVzIGhhdmUgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBvbmVzXG4gKiAgICAgZ2VuZXJhdGVkIGJ5IGB0ZW5zb3JmbG93anNfY29udmVydGVyYCB0aGF0IGNvbWVzIHdpdGggdGhlIGB0ZW5zb3JmbG93anNgXG4gKiAgICAgUHl0aG9uIFBJUCBwYWNrYWdlLiBJZiBubyB3ZWlnaHRzIGZpbGVzIGFyZSBwcm92aWRlZCwgb25seSB0aGUgbW9kZWxcbiAqICAgICB0b3BvbG9neSB3aWxsIGJlIGxvYWRlZCBmcm9tIHRoZSBKU09OIGZpbGUgYWJvdmUuXG4gKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBgRmlsZXNgIGBJT0hhbmRsZXJgLlxuICpcbiAqIEBkb2Mge1xuICogICBoZWFkaW5nOiAnTW9kZWxzJyxcbiAqICAgc3ViaGVhZGluZzogJ0xvYWRpbmcnLFxuICogICBuYW1lc3BhY2U6ICdpbycsXG4gKiAgIGlnbm9yZUNJOiB0cnVlXG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyRmlsZXMoZmlsZXM6IEZpbGVbXSk6IElPSGFuZGxlciB7XG4gIHJldHVybiBuZXcgQnJvd3NlckZpbGVzKGZpbGVzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../util';\n/**\n * Monitor Promise.all progress, fire onProgress callback function.\n *\n * @param promises Promise list going to be monitored\n * @param onProgress Callback function. Fired when a promise resolved.\n * @param startFraction Optional fraction start. Default to 0.\n * @param endFraction Optional fraction end. Default to 1.\n */\nexport function monitorPromisesProgress(promises, onProgress, startFraction, endFraction) {\n checkPromises(promises);\n startFraction = startFraction == null ? 0 : startFraction;\n endFraction = endFraction == null ? 1 : endFraction;\n checkFraction(startFraction, endFraction);\n let resolvedPromise = 0;\n const registerMonitor = (promise) => {\n promise.then(value => {\n const fraction = startFraction +\n ++resolvedPromise / promises.length * (endFraction - startFraction);\n // pass fraction as parameter to callback function.\n onProgress(fraction);\n return value;\n });\n return promise;\n };\n function checkPromises(promises) {\n assert(promises != null && Array.isArray(promises) && promises.length > 0, () => 'promises must be a none empty array');\n }\n function checkFraction(startFraction, endFraction) {\n assert(startFraction >= 0 && startFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got startFraction ${startFraction}`);\n assert(endFraction >= 0 && endFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got endFraction ${endFraction}`);\n assert(endFraction >= startFraction, () => `startFraction must be no more than endFraction, but ` +\n `got startFraction ${startFraction} and endFraction ` +\n `${endFraction}`);\n }\n return Promise.all(promises.map(registerMonitor));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3Byb2dyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFJL0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDbkMsUUFBaUMsRUFBRSxVQUE4QixFQUNqRSxhQUFzQixFQUFFLFdBQW9CO0lBQzlDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QixhQUFhLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDMUQsV0FBVyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3BELGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRXhCLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsTUFBTSxRQUFRLEdBQUcsYUFBYTtnQkFDMUIsRUFBRSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUN4RSxtREFBbUQ7WUFDbkQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixTQUFTLGFBQWEsQ0FBQyxRQUFpQztRQUN0RCxNQUFNLENBQ0YsUUFBUSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNsRSxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBQyxhQUFxQixFQUFFLFdBQW1CO1FBQy9ELE1BQU0sQ0FDRixhQUFhLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLGlEQUFpRDtZQUNuRCxxQkFBcUIsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQ0YsV0FBVyxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUNwQyxHQUFHLEVBQUUsQ0FBQyxpREFBaUQ7WUFDbkQsbUJBQW1CLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUNGLFdBQVcsSUFBSSxhQUFhLEVBQzVCLEdBQUcsRUFBRSxDQUFDLHNEQUFzRDtZQUN4RCxxQkFBcUIsYUFBYSxtQkFBbUI7WUFDckQsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHtPblByb2dyZXNzQ2FsbGJhY2t9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE1vbml0b3IgUHJvbWlzZS5hbGwgcHJvZ3Jlc3MsIGZpcmUgb25Qcm9ncmVzcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZXMgUHJvbWlzZSBsaXN0IGdvaW5nIHRvIGJlIG1vbml0b3JlZFxuICogQHBhcmFtIG9uUHJvZ3Jlc3MgQ2FsbGJhY2sgZnVuY3Rpb24uIEZpcmVkIHdoZW4gYSBwcm9taXNlIHJlc29sdmVkLlxuICogQHBhcmFtIHN0YXJ0RnJhY3Rpb24gT3B0aW9uYWwgZnJhY3Rpb24gc3RhcnQuIERlZmF1bHQgdG8gMC5cbiAqIEBwYXJhbSBlbmRGcmFjdGlvbiBPcHRpb25hbCBmcmFjdGlvbiBlbmQuIERlZmF1bHQgdG8gMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbml0b3JQcm9taXNlc1Byb2dyZXNzKFxuICAgIHByb21pc2VzOiBBcnJheTxQcm9taXNlPHt9fHZvaWQ+Piwgb25Qcm9ncmVzczogT25Qcm9ncmVzc0NhbGxiYWNrLFxuICAgIHN0YXJ0RnJhY3Rpb24/OiBudW1iZXIsIGVuZEZyYWN0aW9uPzogbnVtYmVyKSB7XG4gIGNoZWNrUHJvbWlzZXMocHJvbWlzZXMpO1xuICBzdGFydEZyYWN0aW9uID0gc3RhcnRGcmFjdGlvbiA9PSBudWxsID8gMCA6IHN0YXJ0RnJhY3Rpb247XG4gIGVuZEZyYWN0aW9uID0gZW5kRnJhY3Rpb24gPT0gbnVsbCA/IDEgOiBlbmRGcmFjdGlvbjtcbiAgY2hlY2tGcmFjdGlvbihzdGFydEZyYWN0aW9uLCBlbmRGcmFjdGlvbik7XG4gIGxldCByZXNvbHZlZFByb21pc2UgPSAwO1xuXG4gIGNvbnN0IHJlZ2lzdGVyTW9uaXRvciA9IChwcm9taXNlOiBQcm9taXNlPHt9PikgPT4ge1xuICAgIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBmcmFjdGlvbiA9IHN0YXJ0RnJhY3Rpb24gK1xuICAgICAgICAgICsrcmVzb2x2ZWRQcm9taXNlIC8gcHJvbWlzZXMubGVuZ3RoICogKGVuZEZyYWN0aW9uIC0gc3RhcnRGcmFjdGlvbik7XG4gICAgICAvLyBwYXNzIGZyYWN0aW9uIGFzIHBhcmFtZXRlciB0byBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgIG9uUHJvZ3Jlc3MoZnJhY3Rpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNoZWNrUHJvbWlzZXMocHJvbWlzZXM6IEFycmF5PFByb21pc2U8e318dm9pZD4+KTogdm9pZCB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBwcm9taXNlcyAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkocHJvbWlzZXMpICYmIHByb21pc2VzLmxlbmd0aCA+IDAsXG4gICAgICAgICgpID0+ICdwcm9taXNlcyBtdXN0IGJlIGEgbm9uZSBlbXB0eSBhcnJheScpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tGcmFjdGlvbihzdGFydEZyYWN0aW9uOiBudW1iZXIsIGVuZEZyYWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIHN0YXJ0RnJhY3Rpb24gPj0gMCAmJiBzdGFydEZyYWN0aW9uIDw9IDEsXG4gICAgICAgICgpID0+IGBQcm9ncmVzcyBmcmFjdGlvbiBtdXN0IGJlIGluIHJhbmdlIFswLCAxXSwgYnV0IGAgK1xuICAgICAgICAgICAgYGdvdCBzdGFydEZyYWN0aW9uICR7c3RhcnRGcmFjdGlvbn1gKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIGVuZEZyYWN0aW9uID49IDAgJiYgZW5kRnJhY3Rpb24gPD0gMSxcbiAgICAgICAgKCkgPT4gYFByb2dyZXNzIGZyYWN0aW9uIG11c3QgYmUgaW4gcmFuZ2UgWzAsIDFdLCBidXQgYCArXG4gICAgICAgICAgICBgZ290IGVuZEZyYWN0aW9uICR7ZW5kRnJhY3Rpb259YCk7XG4gICAgYXNzZXJ0KFxuICAgICAgICBlbmRGcmFjdGlvbiA+PSBzdGFydEZyYWN0aW9uLFxuICAgICAgICAoKSA9PiBgc3RhcnRGcmFjdGlvbiBtdXN0IGJlIG5vIG1vcmUgdGhhbiBlbmRGcmFjdGlvbiwgYnV0IGAgK1xuICAgICAgICAgICAgYGdvdCBzdGFydEZyYWN0aW9uICR7c3RhcnRGcmFjdGlvbn0gYW5kIGVuZEZyYWN0aW9uIGAgK1xuICAgICAgICAgICAgYCR7ZW5kRnJhY3Rpb259YCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMubWFwKHJlZ2lzdGVyTW9uaXRvcikpO1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\nimport * as util from '../util';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { decodeWeights } from './io_utils';\nimport { monitorPromisesProgress } from './progress';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\n/**\n * Reads binary weights data from a number of URLs.\n *\n * @param fetchURLs URLs to send the HTTP requests at, using `fetch` calls.\n * @param requestOptions RequestInit (options) for the HTTP requests.\n * @param fetchFunc Optional overriding value for the `window.fetch` function.\n * @param onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns A `Promise` of an Array of `ArrayBuffer`. The Array has the same\n * length as `fetchURLs`.\n */\nexport async function loadWeightsAsArrayBuffer(fetchURLs, loadOptions) {\n if (loadOptions == null) {\n loadOptions = {};\n }\n const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch :\n loadOptions.fetchFunc;\n // Create the requests for all of the weights in parallel.\n const requests = fetchURLs.map(fetchURL => fetchFunc(fetchURL, loadOptions.requestInit, { isBinary: true }));\n const fetchStartFraction = 0;\n const fetchEndFraction = 0.5;\n const responses = loadOptions.onProgress == null ?\n await Promise.all(requests) :\n await monitorPromisesProgress(requests, loadOptions.onProgress, fetchStartFraction, fetchEndFraction);\n const bufferPromises = responses.map(response => response.arrayBuffer());\n const bufferStartFraction = 0.5;\n const bufferEndFraction = 1;\n const buffers = loadOptions.onProgress == null ?\n await Promise.all(bufferPromises) :\n await monitorPromisesProgress(bufferPromises, loadOptions.onProgress, bufferStartFraction, bufferEndFraction);\n return buffers;\n}\n/**\n * Reads a weights manifest JSON configuration, fetches the weights and\n * returns them as `Tensor`s.\n *\n * @param manifest The weights manifest JSON.\n * @param filePathPrefix The path prefix for filenames given in the manifest.\n * Defaults to the empty string.\n * @param weightNames The names of the weights to be fetched.\n */\nexport async function loadWeights(manifest, filePathPrefix = '', weightNames, requestInit) {\n // TODO(nsthorat): Groups are currently fetched atomically. If you need a\n // single weight from a group, the whole group will be fetched. At a future\n // date, we should support fetching only the individual shards within a\n // group that are needed to reconstruct the requested weight.\n // TODO(cais): Use `decodeWeights` for implementation.\n const fetchWeights = (fetchUrls) => loadWeightsAsArrayBuffer(fetchUrls, { requestInit });\n const loadWeights = weightsLoaderFactory(fetchWeights);\n return loadWeights(manifest, filePathPrefix, weightNames);\n}\n/**\n * Creates a function, which reads a weights manifest JSON configuration,\n * fetches the weight files using the specified function and returns them as\n * `Tensor`s.\n *\n * ```js\n * // example for creating a nodejs weight loader, which reads the weight files\n * // from disk using fs.readFileSync\n *\n * import * as fs from 'fs'\n *\n * const fetchWeightsFromDisk = (filePaths: string[]) =>\n * filePaths.map(filePath => fs.readFileSync(filePath).buffer)\n *\n * const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n *\n * const manifest = JSON.parse(\n * fs.readFileSync('./my_model-weights_manifest').toString()\n * )\n * const weightMap = await loadWeights(manifest, './')\n * ```\n * @param fetchWeightsFunction The function used for fetching the weight files.\n * @returns Weight loading function.\n */\nexport function weightsLoaderFactory(fetchWeightsFunction) {\n return async (manifest, filePathPrefix = '', weightNames) => {\n // Collect all the groups, weights, and their relative offsets to be\n // fetched.\n const groupIndicesToFetchMap = manifest.map(() => false);\n const groupWeightsToFetch = {};\n const weightsFound = weightNames != null ? weightNames.map(() => false) : [];\n const allManifestWeightNames = [];\n manifest.forEach((manifestGroupConfig, groupIndex) => {\n let groupOffset = 0;\n manifestGroupConfig.weights.forEach(weightsEntry => {\n const rawDtype = ('quantization' in weightsEntry) ?\n weightsEntry.quantization.dtype :\n weightsEntry.dtype;\n const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] *\n util.sizeFromShape(weightsEntry.shape);\n const enqueueWeightsForFetchingFn = () => {\n groupIndicesToFetchMap[groupIndex] = true;\n if (groupWeightsToFetch[groupIndex] == null) {\n groupWeightsToFetch[groupIndex] = [];\n }\n groupWeightsToFetch[groupIndex].push({\n manifestEntry: weightsEntry,\n groupOffset,\n sizeBytes: weightsBytes\n });\n };\n if (weightNames != null) {\n weightNames.forEach((weightName, weightIndex) => {\n if (weightName === weightsEntry.name) {\n enqueueWeightsForFetchingFn();\n weightsFound[weightIndex] = true;\n }\n });\n }\n else {\n enqueueWeightsForFetchingFn();\n }\n allManifestWeightNames.push(weightsEntry.name);\n groupOffset += weightsBytes;\n });\n });\n if (!weightsFound.every(found => found)) {\n const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]);\n throw new Error(`Could not find weights in manifest with names: ` +\n `${weightsNotFound.join(', ')}. \\n` +\n `Manifest JSON has weights with names: ` +\n `${allManifestWeightNames.join(', ')}.`);\n }\n // Convert the one-hot boolean groupId => shouldFetch map to a list of group\n // IDs.\n const groupIndicesToFetch = groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => {\n if (shouldFetch) {\n accumulator.push(i);\n }\n return accumulator;\n }, []);\n const fetchUrls = [];\n groupIndicesToFetch.forEach(i => {\n manifest[i].paths.forEach(filepath => {\n const fetchUrl = filePathPrefix +\n (!filePathPrefix.endsWith('/') ? '/' : '') + filepath;\n fetchUrls.push(fetchUrl);\n });\n });\n const buffers = await fetchWeightsFunction(fetchUrls);\n const weightsTensorMap = {};\n let bufferIndexOffset = 0;\n groupIndicesToFetch.forEach(i => {\n const numBuffers = manifest[i].paths.length;\n const weightsBuffer = new CompositeArrayBuffer(buffers.slice(bufferIndexOffset, bufferIndexOffset + numBuffers));\n const weightsEntries = groupWeightsToFetch[i];\n weightsEntries.forEach(weightsEntry => {\n const byteBuffer = weightsBuffer.slice(weightsEntry.groupOffset, weightsEntry.groupOffset + weightsEntry.sizeBytes);\n const nameToTensorMap = decodeWeights(byteBuffer, [weightsEntry.manifestEntry]);\n for (const name in nameToTensorMap) {\n weightsTensorMap[name] = nameToTensorMap[name];\n }\n });\n bufferIndexOffset += numBuffers;\n });\n return weightsTensorMap;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VpZ2h0c19sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3dlaWdodHNfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUduQyxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUMsb0JBQW9CLEVBQTJELE1BQU0sU0FBUyxDQUFDO0FBRXZHOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxTQUFtQixFQUFFLFdBQXlCO0lBQzlDLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ2xCO0lBRUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxXQUFXLENBQUMsU0FBUyxDQUFDO0lBRXhCLDBEQUEwRDtJQUMxRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUM1QixRQUFRLENBQUMsRUFBRSxDQUNULFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7SUFFN0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLHVCQUF1QixDQUMzQixRQUFRLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFDcEQsZ0JBQWdCLENBQUMsQ0FBQztJQUV0QixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFekUsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7SUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFNUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLHVCQUF1QixDQUMzQixjQUFjLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFDM0QsaUJBQWlCLENBQUMsQ0FBQztJQUN2QixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsUUFBK0IsRUFBRSxjQUFjLEdBQUcsRUFBRSxFQUNwRCxXQUFzQixFQUN0QixXQUF5QjtJQUN6Qix5RUFBeUU7SUFDekUsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSw2REFBNkQ7SUFDN0Qsc0RBQXNEO0lBRXRELE1BQU0sWUFBWSxHQUFHLENBQUMsU0FBbUIsRUFBRSxFQUFFLENBQzNDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdkQsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxvQkFBcUU7SUFHckUsT0FBTyxLQUFLLEVBQ1YsUUFBK0IsRUFBRSxjQUFjLEdBQUcsRUFBRSxFQUNwRCxXQUFzQixFQUEyQixFQUFFO1FBQ25ELG9FQUFvRTtRQUNwRSxXQUFXO1FBQ1gsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sbUJBQW1CLEdBS3JCLEVBQUUsQ0FBQztRQUNQLE1BQU0sWUFBWSxHQUNoQixXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxzQkFBc0IsR0FBYSxFQUFFLENBQUM7UUFDNUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQ25ELElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNwQixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFFBQVEsR0FBRyxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUVyQixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7b0JBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUV6QyxNQUFNLDJCQUEyQixHQUFHLEdBQUcsRUFBRTtvQkFDdkMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRTt3QkFDM0MsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUN0QztvQkFFRCxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ25DLGFBQWEsRUFBRSxZQUFZO3dCQUMzQixXQUFXO3dCQUNYLFNBQVMsRUFBRSxZQUFZO3FCQUN4QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUVGLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtvQkFDdkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRTt3QkFDOUMsSUFBSSxVQUFVLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRTs0QkFDcEMsMkJBQTJCLEVBQUUsQ0FBQzs0QkFDOUIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDbEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsMkJBQTJCLEVBQUUsQ0FBQztpQkFDL0I7Z0JBRUQsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsV0FBVyxJQUFJLFlBQVksQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2QyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxNQUFNLElBQUksS0FBSyxDQUNiLGlEQUFpRDtnQkFDakQsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUNuQyx3Q0FBd0M7Z0JBQ3hDLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QztRQUVELDRFQUE0RTtRQUM1RSxPQUFPO1FBQ1AsTUFBTSxtQkFBbUIsR0FDdkIsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JCO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVQsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUcsY0FBYztvQkFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUN4RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sZ0JBQWdCLEdBQW1CLEVBQUUsQ0FBQztRQUM1QyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMxQixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFFNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxvQkFBb0IsQ0FDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQ3BDLFlBQVksQ0FBQyxXQUFXLEVBQ3hCLFlBQVksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLGVBQWUsR0FDbkIsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsRUFBRTtvQkFDbEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNoRDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsaUJBQWlCLElBQUksVUFBVSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICcuLi90ZW5zb3JfdHlwZXMnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7Q29tcG9zaXRlQXJyYXlCdWZmZXJ9IGZyb20gJy4vY29tcG9zaXRlX2FycmF5X2J1ZmZlcic7XG5pbXBvcnQge2RlY29kZVdlaWdodHN9IGZyb20gJy4vaW9fdXRpbHMnO1xuaW1wb3J0IHttb25pdG9yUHJvbWlzZXNQcm9ncmVzc30gZnJvbSAnLi9wcm9ncmVzcyc7XG5pbXBvcnQge0RUWVBFX1ZBTFVFX1NJWkVfTUFQLCBMb2FkT3B0aW9ucywgV2VpZ2h0c01hbmlmZXN0Q29uZmlnLCBXZWlnaHRzTWFuaWZlc3RFbnRyeX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogUmVhZHMgYmluYXJ5IHdlaWdodHMgZGF0YSBmcm9tIGEgbnVtYmVyIG9mIFVSTHMuXG4gKlxuICogQHBhcmFtIGZldGNoVVJMcyBVUkxzIHRvIHNlbmQgdGhlIEhUVFAgcmVxdWVzdHMgYXQsIHVzaW5nIGBmZXRjaGAgY2FsbHMuXG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgUmVxdWVzdEluaXQgKG9wdGlvbnMpIGZvciB0aGUgSFRUUCByZXF1ZXN0cy5cbiAqIEBwYXJhbSBmZXRjaEZ1bmMgT3B0aW9uYWwgb3ZlcnJpZGluZyB2YWx1ZSBmb3IgdGhlIGB3aW5kb3cuZmV0Y2hgIGZ1bmN0aW9uLlxuICogQHBhcmFtIG9uUHJvZ3Jlc3MgT3B0aW9uYWwsIHByb2dyZXNzIGNhbGxiYWNrIGZ1bmN0aW9uLCBmaXJlZCBwZXJpb2RpY2FsbHlcbiAqICAgYmVmb3JlIHRoZSBsb2FkIGlzIGNvbXBsZXRlZC5cbiAqIEByZXR1cm5zIEEgYFByb21pc2VgIG9mIGFuIEFycmF5IG9mIGBBcnJheUJ1ZmZlcmAuIFRoZSBBcnJheSBoYXMgdGhlIHNhbWVcbiAqICAgbGVuZ3RoIGFzIGBmZXRjaFVSTHNgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdlaWdodHNBc0FycmF5QnVmZmVyKFxuICBmZXRjaFVSTHM6IHN0cmluZ1tdLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTogUHJvbWlzZTxBcnJheUJ1ZmZlcltdPiB7XG4gIGlmIChsb2FkT3B0aW9ucyA9PSBudWxsKSB7XG4gICAgbG9hZE9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IGZldGNoRnVuYyA9IGxvYWRPcHRpb25zLmZldGNoRnVuYyA9PSBudWxsID8gZW52KCkucGxhdGZvcm0uZmV0Y2ggOlxuICAgIGxvYWRPcHRpb25zLmZldGNoRnVuYztcblxuICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RzIGZvciBhbGwgb2YgdGhlIHdlaWdodHMgaW4gcGFyYWxsZWwuXG4gIGNvbnN0IHJlcXVlc3RzID0gZmV0Y2hVUkxzLm1hcChcbiAgICBmZXRjaFVSTCA9PlxuICAgICAgZmV0Y2hGdW5jKGZldGNoVVJMLCBsb2FkT3B0aW9ucy5yZXF1ZXN0SW5pdCwgeyBpc0JpbmFyeTogdHJ1ZSB9KSk7XG5cbiAgY29uc3QgZmV0Y2hTdGFydEZyYWN0aW9uID0gMDtcbiAgY29uc3QgZmV0Y2hFbmRGcmFjdGlvbiA9IDAuNTtcblxuICBjb25zdCByZXNwb25zZXMgPSBsb2FkT3B0aW9ucy5vblByb2dyZXNzID09IG51bGwgP1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlcXVlc3RzKSA6XG4gICAgYXdhaXQgbW9uaXRvclByb21pc2VzUHJvZ3Jlc3MoXG4gICAgICByZXF1ZXN0cywgbG9hZE9wdGlvbnMub25Qcm9ncmVzcywgZmV0Y2hTdGFydEZyYWN0aW9uLFxuICAgICAgZmV0Y2hFbmRGcmFjdGlvbik7XG5cbiAgY29uc3QgYnVmZmVyUHJvbWlzZXMgPSByZXNwb25zZXMubWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuXG4gIGNvbnN0IGJ1ZmZlclN0YXJ0RnJhY3Rpb24gPSAwLjU7XG4gIGNvbnN0IGJ1ZmZlckVuZEZyYWN0aW9uID0gMTtcblxuICBjb25zdCBidWZmZXJzID0gbG9hZE9wdGlvbnMub25Qcm9ncmVzcyA9PSBudWxsID9cbiAgICBhd2FpdCBQcm9taXNlLmFsbChidWZmZXJQcm9taXNlcykgOlxuICAgIGF3YWl0IG1vbml0b3JQcm9taXNlc1Byb2dyZXNzKFxuICAgICAgYnVmZmVyUHJvbWlzZXMsIGxvYWRPcHRpb25zLm9uUHJvZ3Jlc3MsIGJ1ZmZlclN0YXJ0RnJhY3Rpb24sXG4gICAgICBidWZmZXJFbmRGcmFjdGlvbik7XG4gIHJldHVybiBidWZmZXJzO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgd2VpZ2h0cyBtYW5pZmVzdCBKU09OIGNvbmZpZ3VyYXRpb24sIGZldGNoZXMgdGhlIHdlaWdodHMgYW5kXG4gKiByZXR1cm5zIHRoZW0gYXMgYFRlbnNvcmBzLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdCBUaGUgd2VpZ2h0cyBtYW5pZmVzdCBKU09OLlxuICogQHBhcmFtIGZpbGVQYXRoUHJlZml4IFRoZSBwYXRoIHByZWZpeCBmb3IgZmlsZW5hbWVzIGdpdmVuIGluIHRoZSBtYW5pZmVzdC5cbiAqICAgICBEZWZhdWx0cyB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICogQHBhcmFtIHdlaWdodE5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgd2VpZ2h0cyB0byBiZSBmZXRjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFdlaWdodHMoXG4gIG1hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcsIGZpbGVQYXRoUHJlZml4ID0gJycsXG4gIHdlaWdodE5hbWVzPzogc3RyaW5nW10sXG4gIHJlcXVlc3RJbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPE5hbWVkVGVuc29yTWFwPiB7XG4gIC8vIFRPRE8obnN0aG9yYXQpOiBHcm91cHMgYXJlIGN1cnJlbnRseSBmZXRjaGVkIGF0b21pY2FsbHkuIElmIHlvdSBuZWVkIGFcbiAgLy8gc2luZ2xlIHdlaWdodCBmcm9tIGEgZ3JvdXAsIHRoZSB3aG9sZSBncm91cCB3aWxsIGJlIGZldGNoZWQuIEF0IGEgZnV0dXJlXG4gIC8vIGRhdGUsIHdlIHNob3VsZCBzdXBwb3J0IGZldGNoaW5nIG9ubHkgdGhlIGluZGl2aWR1YWwgc2hhcmRzIHdpdGhpbiBhXG4gIC8vIGdyb3VwIHRoYXQgYXJlIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGUgcmVxdWVzdGVkIHdlaWdodC5cbiAgLy8gVE9ETyhjYWlzKTogVXNlIGBkZWNvZGVXZWlnaHRzYCBmb3IgaW1wbGVtZW50YXRpb24uXG5cbiAgY29uc3QgZmV0Y2hXZWlnaHRzID0gKGZldGNoVXJsczogc3RyaW5nW10pID0+XG4gICAgbG9hZFdlaWdodHNBc0FycmF5QnVmZmVyKGZldGNoVXJscywgeyByZXF1ZXN0SW5pdCB9KTtcbiAgY29uc3QgbG9hZFdlaWdodHMgPSB3ZWlnaHRzTG9hZGVyRmFjdG9yeShmZXRjaFdlaWdodHMpO1xuXG4gIHJldHVybiBsb2FkV2VpZ2h0cyhtYW5pZmVzdCwgZmlsZVBhdGhQcmVmaXgsIHdlaWdodE5hbWVzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24sIHdoaWNoIHJlYWRzIGEgd2VpZ2h0cyBtYW5pZmVzdCBKU09OIGNvbmZpZ3VyYXRpb24sXG4gKiBmZXRjaGVzIHRoZSB3ZWlnaHQgZmlsZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBhbmQgcmV0dXJucyB0aGVtIGFzXG4gKiBgVGVuc29yYHMuXG4gKlxuICogYGBganNcbiAqIC8vIGV4YW1wbGUgZm9yIGNyZWF0aW5nIGEgbm9kZWpzIHdlaWdodCBsb2FkZXIsIHdoaWNoIHJlYWRzIHRoZSB3ZWlnaHQgZmlsZXNcbiAqIC8vIGZyb20gZGlzayB1c2luZyBmcy5yZWFkRmlsZVN5bmNcbiAqXG4gKiBpbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbiAqXG4gKiBjb25zdCBmZXRjaFdlaWdodHNGcm9tRGlzayA9IChmaWxlUGF0aHM6IHN0cmluZ1tdKSA9PlxuICogICBmaWxlUGF0aHMubWFwKGZpbGVQYXRoID0+IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCkuYnVmZmVyKVxuICpcbiAqIGNvbnN0IGxvYWRXZWlnaHRzID0gdGYuaW8ud2VpZ2h0c0xvYWRlckZhY3RvcnkoZmV0Y2hXZWlnaHRzRnJvbURpc2spXG4gKlxuICogY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICogICBmcy5yZWFkRmlsZVN5bmMoJy4vbXlfbW9kZWwtd2VpZ2h0c19tYW5pZmVzdCcpLnRvU3RyaW5nKClcbiAqIClcbiAqIGNvbnN0IHdlaWdodE1hcCA9IGF3YWl0IGxvYWRXZWlnaHRzKG1hbmlmZXN0LCAnLi8nKVxuICogYGBgXG4gKiBAcGFyYW0gZmV0Y2hXZWlnaHRzRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHVzZWQgZm9yIGZldGNoaW5nIHRoZSB3ZWlnaHQgZmlsZXMuXG4gKiBAcmV0dXJucyBXZWlnaHQgbG9hZGluZyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlaWdodHNMb2FkZXJGYWN0b3J5KFxuICBmZXRjaFdlaWdodHNGdW5jdGlvbjogKGZldGNoVXJsczogc3RyaW5nW10pID0+IFByb21pc2U8QXJyYXlCdWZmZXJbXT4pOlxuICAobWFuaWZlc3Q6IFdlaWdodHNNYW5pZmVzdENvbmZpZywgZmlsZVBhdGhQcmVmaXg/OiBzdHJpbmcsXG4gICAgd2VpZ2h0TmFtZXM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxOYW1lZFRlbnNvck1hcD4ge1xuICByZXR1cm4gYXN5bmMgKFxuICAgIG1hbmlmZXN0OiBXZWlnaHRzTWFuaWZlc3RDb25maWcsIGZpbGVQYXRoUHJlZml4ID0gJycsXG4gICAgd2VpZ2h0TmFtZXM/OiBzdHJpbmdbXSk6IFByb21pc2U8TmFtZWRUZW5zb3JNYXA+ID0+IHtcbiAgICAvLyBDb2xsZWN0IGFsbCB0aGUgZ3JvdXBzLCB3ZWlnaHRzLCBhbmQgdGhlaXIgcmVsYXRpdmUgb2Zmc2V0cyB0byBiZVxuICAgIC8vIGZldGNoZWQuXG4gICAgY29uc3QgZ3JvdXBJbmRpY2VzVG9GZXRjaE1hcCA9IG1hbmlmZXN0Lm1hcCgoKSA9PiBmYWxzZSk7XG4gICAgY29uc3QgZ3JvdXBXZWlnaHRzVG9GZXRjaDoge1xuICAgICAgW2dyb3VwOiBudW1iZXJdOiBBcnJheTx7XG4gICAgICAgIG1hbmlmZXN0RW50cnk6IFdlaWdodHNNYW5pZmVzdEVudHJ5OyBncm91cE9mZnNldDogbnVtYmVyO1xuICAgICAgICBzaXplQnl0ZXM6IG51bWJlcjtcbiAgICAgIH0+XG4gICAgfSA9IHt9O1xuICAgIGNvbnN0IHdlaWdodHNGb3VuZCA9XG4gICAgICB3ZWlnaHROYW1lcyAhPSBudWxsID8gd2VpZ2h0TmFtZXMubWFwKCgpID0+IGZhbHNlKSA6IFtdO1xuICAgIGNvbnN0IGFsbE1hbmlmZXN0V2VpZ2h0TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgbWFuaWZlc3QuZm9yRWFjaCgobWFuaWZlc3RHcm91cENvbmZpZywgZ3JvdXBJbmRleCkgPT4ge1xuICAgICAgbGV0IGdyb3VwT2Zmc2V0ID0gMDtcbiAgICAgIG1hbmlmZXN0R3JvdXBDb25maWcud2VpZ2h0cy5mb3JFYWNoKHdlaWdodHNFbnRyeSA9PiB7XG4gICAgICAgIGNvbnN0IHJhd0R0eXBlID0gKCdxdWFudGl6YXRpb24nIGluIHdlaWdodHNFbnRyeSkgP1xuICAgICAgICAgIHdlaWdodHNFbnRyeS5xdWFudGl6YXRpb24uZHR5cGUgOlxuICAgICAgICAgIHdlaWdodHNFbnRyeS5kdHlwZTtcblxuICAgICAgICBjb25zdCB3ZWlnaHRzQnl0ZXMgPSBEVFlQRV9WQUxVRV9TSVpFX01BUFtyYXdEdHlwZV0gKlxuICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZSh3ZWlnaHRzRW50cnkuc2hhcGUpO1xuXG4gICAgICAgIGNvbnN0IGVucXVldWVXZWlnaHRzRm9yRmV0Y2hpbmdGbiA9ICgpID0+IHtcbiAgICAgICAgICBncm91cEluZGljZXNUb0ZldGNoTWFwW2dyb3VwSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZ3JvdXBXZWlnaHRzVG9GZXRjaFtncm91cEluZGV4XSA9PSBudWxsKSB7XG4gICAgICAgICAgICBncm91cFdlaWdodHNUb0ZldGNoW2dyb3VwSW5kZXhdID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZ3JvdXBXZWlnaHRzVG9GZXRjaFtncm91cEluZGV4XS5wdXNoKHtcbiAgICAgICAgICAgIG1hbmlmZXN0RW50cnk6IHdlaWdodHNFbnRyeSxcbiAgICAgICAgICAgIGdyb3VwT2Zmc2V0LFxuICAgICAgICAgICAgc2l6ZUJ5dGVzOiB3ZWlnaHRzQnl0ZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAod2VpZ2h0TmFtZXMgIT0gbnVsbCkge1xuICAgICAgICAgIHdlaWdodE5hbWVzLmZvckVhY2goKHdlaWdodE5hbWUsIHdlaWdodEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAod2VpZ2h0TmFtZSA9PT0gd2VpZ2h0c0VudHJ5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgZW5xdWV1ZVdlaWdodHNGb3JGZXRjaGluZ0ZuKCk7XG4gICAgICAgICAgICAgIHdlaWdodHNGb3VuZFt3ZWlnaHRJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucXVldWVXZWlnaHRzRm9yRmV0Y2hpbmdGbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWxsTWFuaWZlc3RXZWlnaHROYW1lcy5wdXNoKHdlaWdodHNFbnRyeS5uYW1lKTtcbiAgICAgICAgZ3JvdXBPZmZzZXQgKz0gd2VpZ2h0c0J5dGVzO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXdlaWdodHNGb3VuZC5ldmVyeShmb3VuZCA9PiBmb3VuZCkpIHtcbiAgICAgIGNvbnN0IHdlaWdodHNOb3RGb3VuZCA9IHdlaWdodE5hbWVzLmZpbHRlcigoXywgaSkgPT4gIXdlaWdodHNGb3VuZFtpXSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCB3ZWlnaHRzIGluIG1hbmlmZXN0IHdpdGggbmFtZXM6IGAgK1xuICAgICAgICBgJHt3ZWlnaHRzTm90Rm91bmQuam9pbignLCAnKX0uIFxcbmAgK1xuICAgICAgICBgTWFuaWZlc3QgSlNPTiBoYXMgd2VpZ2h0cyB3aXRoIG5hbWVzOiBgICtcbiAgICAgICAgYCR7YWxsTWFuaWZlc3RXZWlnaHROYW1lcy5qb2luKCcsICcpfS5gKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBvbmUtaG90IGJvb2xlYW4gZ3JvdXBJZCA9PiBzaG91bGRGZXRjaCBtYXAgdG8gYSBsaXN0IG9mIGdyb3VwXG4gICAgLy8gSURzLlxuICAgIGNvbnN0IGdyb3VwSW5kaWNlc1RvRmV0Y2ggPVxuICAgICAgZ3JvdXBJbmRpY2VzVG9GZXRjaE1hcC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBzaG91bGRGZXRjaCwgaSkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkRmV0Y2gpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGZldGNoVXJsczogc3RyaW5nW10gPSBbXTtcbiAgICBncm91cEluZGljZXNUb0ZldGNoLmZvckVhY2goaSA9PiB7XG4gICAgICBtYW5pZmVzdFtpXS5wYXRocy5mb3JFYWNoKGZpbGVwYXRoID0+IHtcbiAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSBmaWxlUGF0aFByZWZpeCArXG4gICAgICAgICAgKCFmaWxlUGF0aFByZWZpeC5lbmRzV2l0aCgnLycpID8gJy8nIDogJycpICsgZmlsZXBhdGg7XG4gICAgICAgIGZldGNoVXJscy5wdXNoKGZldGNoVXJsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBhd2FpdCBmZXRjaFdlaWdodHNGdW5jdGlvbihmZXRjaFVybHMpO1xuXG4gICAgY29uc3Qgd2VpZ2h0c1RlbnNvck1hcDogTmFtZWRUZW5zb3JNYXAgPSB7fTtcbiAgICBsZXQgYnVmZmVySW5kZXhPZmZzZXQgPSAwO1xuICAgIGdyb3VwSW5kaWNlc1RvRmV0Y2guZm9yRWFjaChpID0+IHtcbiAgICAgIGNvbnN0IG51bUJ1ZmZlcnMgPSBtYW5pZmVzdFtpXS5wYXRocy5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IHdlaWdodHNCdWZmZXIgPSBuZXcgQ29tcG9zaXRlQXJyYXlCdWZmZXIoXG4gICAgICAgIGJ1ZmZlcnMuc2xpY2UoYnVmZmVySW5kZXhPZmZzZXQsIGJ1ZmZlckluZGV4T2Zmc2V0ICsgbnVtQnVmZmVycykpO1xuXG4gICAgICBjb25zdCB3ZWlnaHRzRW50cmllcyA9IGdyb3VwV2VpZ2h0c1RvRmV0Y2hbaV07XG5cbiAgICAgIHdlaWdodHNFbnRyaWVzLmZvckVhY2god2VpZ2h0c0VudHJ5ID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZUJ1ZmZlciA9IHdlaWdodHNCdWZmZXIuc2xpY2UoXG4gICAgICAgICAgd2VpZ2h0c0VudHJ5Lmdyb3VwT2Zmc2V0LFxuICAgICAgICAgIHdlaWdodHNFbnRyeS5ncm91cE9mZnNldCArIHdlaWdodHNFbnRyeS5zaXplQnl0ZXMpO1xuICAgICAgICBjb25zdCBuYW1lVG9UZW5zb3JNYXAgPVxuICAgICAgICAgIGRlY29kZVdlaWdodHMoYnl0ZUJ1ZmZlciwgW3dlaWdodHNFbnRyeS5tYW5pZmVzdEVudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBuYW1lVG9UZW5zb3JNYXApIHtcbiAgICAgICAgICB3ZWlnaHRzVGVuc29yTWFwW25hbWVdID0gbmFtZVRvVGVuc29yTWFwW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYnVmZmVySW5kZXhPZmZzZXQgKz0gbnVtQnVmZmVycztcbiAgICB9KTtcblxuICAgIHJldHVybiB3ZWlnaHRzVGVuc29yTWFwO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandler implementations based on HTTP requests in the web browser.\n *\n * Uses [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n */\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { getModelArtifactsForJSON, getModelArtifactsInfoForJSON, getModelJSONForModelArtifacts, getWeightSpecs } from './io_utils';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nimport { IORouterRegistry } from './router_registry';\nimport { loadWeightsAsArrayBuffer } from './weights_loader';\nconst OCTET_STREAM_MIME_TYPE = 'application/octet-stream';\nconst JSON_TYPE = 'application/json';\nclass HTTPRequest {\n constructor(path, loadOptions) {\n this.DEFAULT_METHOD = 'POST';\n if (loadOptions == null) {\n loadOptions = {};\n }\n this.weightPathPrefix = loadOptions.weightPathPrefix;\n this.onProgress = loadOptions.onProgress;\n this.weightUrlConverter = loadOptions.weightUrlConverter;\n if (loadOptions.fetchFunc != null) {\n assert(typeof loadOptions.fetchFunc === 'function', () => 'Must pass a function that matches the signature of ' +\n '`fetch` (see ' +\n 'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)');\n this.fetch = loadOptions.fetchFunc;\n }\n else {\n this.fetch = env().platform.fetch;\n }\n assert(path != null && path.length > 0, () => 'URL path for http must not be null, undefined or ' +\n 'empty.');\n if (Array.isArray(path)) {\n assert(path.length === 2, () => 'URL paths for http must have a length of 2, ' +\n `(actual length is ${path.length}).`);\n }\n this.path = path;\n if (loadOptions.requestInit != null &&\n loadOptions.requestInit.body != null) {\n throw new Error('requestInit is expected to have no pre-existing body, but has one.');\n }\n this.requestInit = loadOptions.requestInit || {};\n }\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserHTTPRequest.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n const init = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit);\n init.body = new FormData();\n const weightsManifest = [{\n paths: ['./model.weights.bin'],\n weights: modelArtifacts.weightSpecs,\n }];\n const modelTopologyAndWeightManifest = getModelJSONForModelArtifacts(modelArtifacts, weightsManifest);\n init.body.append('model.json', new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: JSON_TYPE }), 'model.json');\n if (modelArtifacts.weightData != null) {\n // TODO(mattsoulanille): Support saving models over 2GB that exceed\n // Chrome's ArrayBuffer size limit.\n const weightBuffer = CompositeArrayBuffer.join(modelArtifacts.weightData);\n init.body.append('model.weights.bin', new Blob([weightBuffer], { type: OCTET_STREAM_MIME_TYPE }), 'model.weights.bin');\n }\n const response = await this.fetch(this.path, init);\n if (response.ok) {\n return {\n modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts),\n responses: [response],\n };\n }\n else {\n throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ` +\n `${response.status}.`);\n }\n }\n /**\n * Load model artifacts via HTTP request(s).\n *\n * See the documentation to `tf.io.http` for details on the saved\n * artifacts.\n *\n * @returns The loaded model artifacts (if loading succeeds).\n */\n async load() {\n const modelConfigRequest = await this.fetch(this.path, this.requestInit);\n if (!modelConfigRequest.ok) {\n throw new Error(`Request to ${this.path} failed with status code ` +\n `${modelConfigRequest.status}. Please verify this URL points to ` +\n `the model JSON of the model to load.`);\n }\n let modelJSON;\n try {\n modelJSON = await modelConfigRequest.json();\n }\n catch (e) {\n let message = `Failed to parse model JSON of response from ${this.path}.`;\n // TODO(nsthorat): Remove this after some time when we're comfortable that\n // .pb files are mostly gone.\n if (this.path.endsWith('.pb')) {\n message += ' Your path contains a .pb file extension. ' +\n 'Support for .pb models have been removed in TensorFlow.js 1.0 ' +\n 'in favor of .json models. You can re-convert your Python ' +\n 'TensorFlow model using the TensorFlow.js 1.0 conversion scripts ' +\n 'or you can convert your.pb models with the \\'pb2json\\'' +\n 'NPM script in the tensorflow/tfjs-converter repository.';\n }\n else {\n message += ' Please make sure the server is serving valid ' +\n 'JSON for this request.';\n }\n throw new Error(message);\n }\n // We do not allow both modelTopology and weightsManifest to be missing.\n const modelTopology = modelJSON.modelTopology;\n const weightsManifest = modelJSON.weightsManifest;\n if (modelTopology == null && weightsManifest == null) {\n throw new Error(`The JSON from HTTP path ${this.path} contains neither model ` +\n `topology or manifest for weights.`);\n }\n return getModelArtifactsForJSON(modelJSON, (weightsManifest) => this.loadWeights(weightsManifest));\n }\n async loadWeights(weightsManifest) {\n const weightPath = Array.isArray(this.path) ? this.path[1] : this.path;\n const [prefix, suffix] = parseUrl(weightPath);\n const pathPrefix = this.weightPathPrefix || prefix;\n const weightSpecs = getWeightSpecs(weightsManifest);\n const fetchURLs = [];\n const urlPromises = [];\n for (const weightsGroup of weightsManifest) {\n for (const path of weightsGroup.paths) {\n if (this.weightUrlConverter != null) {\n urlPromises.push(this.weightUrlConverter(path));\n }\n else {\n fetchURLs.push(pathPrefix + path + suffix);\n }\n }\n }\n if (this.weightUrlConverter) {\n fetchURLs.push(...await Promise.all(urlPromises));\n }\n const buffers = await loadWeightsAsArrayBuffer(fetchURLs, {\n requestInit: this.requestInit,\n fetchFunc: this.fetch,\n onProgress: this.onProgress\n });\n return [weightSpecs, buffers];\n }\n}\nHTTPRequest.URL_SCHEME_REGEX = /^https?:\\/\\//;\nexport { HTTPRequest };\n/**\n * Extract the prefix and suffix of the url, where the prefix is the path before\n * the last file, and suffix is the search params after the last file.\n * ```\n * const url = 'http://tfhub.dev/model/1/tensorflowjs_model.pb?tfjs-format=file'\n * [prefix, suffix] = parseUrl(url)\n * // prefix = 'http://tfhub.dev/model/1/'\n * // suffix = '?tfjs-format=file'\n * ```\n * @param url the model url to be parsed.\n */\nexport function parseUrl(url) {\n const lastSlash = url.lastIndexOf('/');\n const lastSearchParam = url.lastIndexOf('?');\n const prefix = url.substring(0, lastSlash);\n const suffix = lastSearchParam > lastSlash ? url.substring(lastSearchParam) : '';\n return [prefix + '/', suffix];\n}\nexport function isHTTPScheme(url) {\n return url.match(HTTPRequest.URL_SCHEME_REGEX) != null;\n}\nexport const httpRouter = (url, loadOptions) => {\n if (typeof fetch === 'undefined' &&\n (loadOptions == null || loadOptions.fetchFunc == null)) {\n // `http` uses `fetch` or `node-fetch`, if one wants to use it in\n // an environment that is not the browser or node they have to setup a\n // global fetch polyfill.\n return null;\n }\n else {\n let isHTTP = true;\n if (Array.isArray(url)) {\n isHTTP = url.every(urlItem => isHTTPScheme(urlItem));\n }\n else {\n isHTTP = isHTTPScheme(url);\n }\n if (isHTTP) {\n return http(url, loadOptions);\n }\n }\n return null;\n};\nIORouterRegistry.registerSaveRouter(httpRouter);\nIORouterRegistry.registerLoadRouter(httpRouter);\n/**\n * Creates an IOHandler subtype that sends model artifacts to HTTP server.\n *\n * An HTTP request of the `multipart/form-data` mime type will be sent to the\n * `path` URL. The form data includes artifacts that represent the topology\n * and/or weights of the model. In the case of Keras-style `tf.Model`, two\n * blobs (files) exist in form-data:\n * - A JSON file consisting of `modelTopology` and `weightsManifest`.\n * - A binary weights file consisting of the concatenated weight values.\n * These files are in the same format as the one generated by\n * [tfjs_converter](https://js.tensorflow.org/tutorials/import-keras.html).\n *\n * The following code snippet exemplifies the client-side code that uses this\n * function:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save(tf.io.http(\n * 'http://model-server:5000/upload', {requestInit: {method: 'PUT'}}));\n * console.log(saveResult);\n * ```\n *\n * If the default `POST` method is to be used, without any custom parameters\n * such as headers, you can simply pass an HTTP or HTTPS URL to `model.save`:\n *\n * ```js\n * const saveResult = await model.save('http://model-server:5000/upload');\n * ```\n *\n * The following GitHub Gist\n * https://gist.github.com/dsmilkov/1b6046fd6132d7408d5257b0976f7864\n * implements a server based on [flask](https://github.com/pallets/flask) that\n * can receive the request. Upon receiving the model artifacts via the requst,\n * this particular server reconstitutes instances of [Keras\n * Models](https://keras.io/models/model/) in memory.\n *\n *\n * @param path A URL path to the model.\n * Can be an absolute HTTP path (e.g.,\n * 'http://localhost:8000/model-upload)') or a relative path (e.g.,\n * './model-upload').\n * @param requestInit Request configurations to be used when sending\n * HTTP request to server using `fetch`. It can contain fields such as\n * `method`, `credentials`, `headers`, `mode`, etc. See\n * https://developer.mozilla.org/en-US/docs/Web/API/Request/Request\n * for more information. `requestInit` must not have a body, because the\n * body will be set by TensorFlow.js. File blobs representing the model\n * topology (filename: 'model.json') and the weights of the model (filename:\n * 'model.weights.bin') will be appended to the body. If `requestInit` has a\n * `body`, an Error will be thrown.\n * @param loadOptions Optional configuration for the loading. It includes the\n * following fields:\n * - weightPathPrefix Optional, this specifies the path prefix for weight\n * files, by default this is calculated from the path param.\n * - fetchFunc Optional, custom `fetch` function. E.g., in Node.js,\n * the `fetch` from node-fetch can be used here.\n * - onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns An instance of `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function http(path, loadOptions) {\n return new HTTPRequest(path, loadOptions);\n}\n/**\n * Deprecated. Use `tf.io.http`.\n * @param path\n * @param loadOptions\n */\nexport function browserHTTPRequest(path, loadOptions) {\n return http(path, loadOptions);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvaW8vaHR0cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0IsT0FBTyxFQUFDLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLGNBQWMsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNqSSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRCxNQUFNLHNCQUFzQixHQUFHLDBCQUEwQixDQUFDO0FBQzFELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDO0FBQ3JDLE1BQWEsV0FBVztJQWN0QixZQUFZLElBQVksRUFBRSxXQUF5QjtRQVAxQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQVEvQixJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDdkIsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFFekQsSUFBSSxXQUFXLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUNqQyxNQUFNLENBQ0YsT0FBTyxXQUFXLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFDM0MsR0FB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Q3pDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIElPSGFuZGxlciBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gSFRUUCByZXF1ZXN0cyBpbiB0aGUgd2ViIGJyb3dzZXIuXG4gKlxuICogVXNlcyBbYGZldGNoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSSkuXG4gKi9cblxuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcblxuaW1wb3J0IHthc3NlcnR9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHtnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04sIGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04sIGdldE1vZGVsSlNPTkZvck1vZGVsQXJ0aWZhY3RzLCBnZXRXZWlnaHRTcGVjc30gZnJvbSAnLi9pb191dGlscyc7XG5pbXBvcnQge0NvbXBvc2l0ZUFycmF5QnVmZmVyfSBmcm9tICcuL2NvbXBvc2l0ZV9hcnJheV9idWZmZXInO1xuaW1wb3J0IHtJT1JvdXRlciwgSU9Sb3V0ZXJSZWdpc3RyeX0gZnJvbSAnLi9yb3V0ZXJfcmVnaXN0cnknO1xuaW1wb3J0IHtJT0hhbmRsZXIsIExvYWRPcHRpb25zLCBNb2RlbEFydGlmYWN0cywgTW9kZWxKU09OLCBPblByb2dyZXNzQ2FsbGJhY2ssIFNhdmVSZXN1bHQsIFdlaWdodERhdGEsIFdlaWdodHNNYW5pZmVzdENvbmZpZywgV2VpZ2h0c01hbmlmZXN0RW50cnl9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtsb2FkV2VpZ2h0c0FzQXJyYXlCdWZmZXJ9IGZyb20gJy4vd2VpZ2h0c19sb2FkZXInO1xuXG5jb25zdCBPQ1RFVF9TVFJFQU1fTUlNRV9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5jb25zdCBKU09OX1RZUEUgPSAnYXBwbGljYXRpb24vanNvbic7XG5leHBvcnQgY2xhc3MgSFRUUFJlcXVlc3QgaW1wbGVtZW50cyBJT0hhbmRsZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVxdWVzdEluaXQ6IFJlcXVlc3RJbml0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2g6IEZ1bmN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodFVybENvbnZlcnRlcjogKHdlaWdodE5hbWU6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4gIHJlYWRvbmx5IERFRkFVTFRfTUVUSE9EID0gJ1BPU1QnO1xuXG4gIHN0YXRpYyByZWFkb25seSBVUkxfU0NIRU1FX1JFR0VYID0gL15odHRwcz86XFwvXFwvLztcblxuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodFBhdGhQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBvblByb2dyZXNzOiBPblByb2dyZXNzQ2FsbGJhY2s7XG5cbiAgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKSB7XG4gICAgaWYgKGxvYWRPcHRpb25zID09IG51bGwpIHtcbiAgICAgIGxvYWRPcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2VpZ2h0UGF0aFByZWZpeCA9IGxvYWRPcHRpb25zLndlaWdodFBhdGhQcmVmaXg7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbG9hZE9wdGlvbnMub25Qcm9ncmVzcztcbiAgICB0aGlzLndlaWdodFVybENvbnZlcnRlciA9IGxvYWRPcHRpb25zLndlaWdodFVybENvbnZlcnRlcjtcblxuICAgIGlmIChsb2FkT3B0aW9ucy5mZXRjaEZ1bmMgIT0gbnVsbCkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHR5cGVvZiBsb2FkT3B0aW9ucy5mZXRjaEZ1bmMgPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgKCkgPT4gJ011c3QgcGFzcyBhIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgc2lnbmF0dXJlIG9mICcgK1xuICAgICAgICAgICAgICAnYGZldGNoYCAoc2VlICcgK1xuICAgICAgICAgICAgICAnaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSSknKTtcbiAgICAgIHRoaXMuZmV0Y2ggPSBsb2FkT3B0aW9ucy5mZXRjaEZ1bmM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmV0Y2ggPSBlbnYoKS5wbGF0Zm9ybS5mZXRjaDtcbiAgICB9XG5cbiAgICBhc3NlcnQoXG4gICAgICAgIHBhdGggIT0gbnVsbCAmJiBwYXRoLmxlbmd0aCA+IDAsXG4gICAgICAgICgpID0+ICdVUkwgcGF0aCBmb3IgaHR0cCBtdXN0IG5vdCBiZSBudWxsLCB1bmRlZmluZWQgb3IgJyArXG4gICAgICAgICAgICAnZW1wdHkuJyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHBhdGgubGVuZ3RoID09PSAyLFxuICAgICAgICAgICgpID0+ICdVUkwgcGF0aHMgZm9yIGh0dHAgbXVzdCBoYXZlIGEgbGVuZ3RoIG9mIDIsICcgK1xuICAgICAgICAgICAgICBgKGFjdHVhbCBsZW5ndGggaXMgJHtwYXRoLmxlbmd0aH0pLmApO1xuICAgIH1cbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuXG4gICAgaWYgKGxvYWRPcHRpb25zLnJlcXVlc3RJbml0ICE9IG51bGwgJiZcbiAgICAgICAgbG9hZE9wdGlvbnMucmVxdWVzdEluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3JlcXVlc3RJbml0IGlzIGV4cGVjdGVkIHRvIGhhdmUgbm8gcHJlLWV4aXN0aW5nIGJvZHksIGJ1dCBoYXMgb25lLicpO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3RJbml0ID0gbG9hZE9wdGlvbnMucmVxdWVzdEluaXQgfHwge307XG4gIH1cblxuICBhc3luYyBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFByb21pc2U8U2F2ZVJlc3VsdD4ge1xuICAgIGlmIChtb2RlbEFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQnJvd3NlckhUVFBSZXF1ZXN0LnNhdmUoKSBkb2VzIG5vdCBzdXBwb3J0IHNhdmluZyBtb2RlbCB0b3BvbG9neSAnICtcbiAgICAgICAgICAnaW4gYmluYXJ5IGZvcm1hdHMgeWV0LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXQgPSBPYmplY3QuYXNzaWduKHttZXRob2Q6IHRoaXMuREVGQVVMVF9NRVRIT0R9LCB0aGlzLnJlcXVlc3RJbml0KTtcbiAgICBpbml0LmJvZHkgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGNvbnN0IHdlaWdodHNNYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnID0gW3tcbiAgICAgIHBhdGhzOiBbJy4vbW9kZWwud2VpZ2h0cy5iaW4nXSxcbiAgICAgIHdlaWdodHM6IG1vZGVsQXJ0aWZhY3RzLndlaWdodFNwZWNzLFxuICAgIH1dO1xuICAgIGNvbnN0IG1vZGVsVG9wb2xvZ3lBbmRXZWlnaHRNYW5pZmVzdDogTW9kZWxKU09OID1cbiAgICAgICAgZ2V0TW9kZWxKU09ORm9yTW9kZWxBcnRpZmFjdHMobW9kZWxBcnRpZmFjdHMsIHdlaWdodHNNYW5pZmVzdCk7XG5cbiAgICBpbml0LmJvZHkuYXBwZW5kKFxuICAgICAgICAnbW9kZWwuanNvbicsXG4gICAgICAgIG5ldyBCbG9iKFxuICAgICAgICAgICAgW0pTT04uc3RyaW5naWZ5KG1vZGVsVG9wb2xvZ3lBbmRXZWlnaHRNYW5pZmVzdCldLFxuICAgICAgICAgICAge3R5cGU6IEpTT05fVFlQRX0pLFxuICAgICAgICAnbW9kZWwuanNvbicpO1xuXG4gICAgaWYgKG1vZGVsQXJ0aWZhY3RzLndlaWdodERhdGEgIT0gbnVsbCkge1xuICAgICAgLy8gVE9ETyhtYXR0c291bGFuaWxsZSk6IFN1cHBvcnQgc2F2aW5nIG1vZGVscyBvdmVyIDJHQiB0aGF0IGV4Y2VlZFxuICAgICAgLy8gQ2hyb21lJ3MgQXJyYXlCdWZmZXIgc2l6ZSBsaW1pdC5cbiAgICAgIGNvbnN0IHdlaWdodEJ1ZmZlciA9IENvbXBvc2l0ZUFycmF5QnVmZmVyLmpvaW4obW9kZWxBcnRpZmFjdHMud2VpZ2h0RGF0YSk7XG5cbiAgICAgIGluaXQuYm9keS5hcHBlbmQoXG4gICAgICAgICAgJ21vZGVsLndlaWdodHMuYmluJyxcbiAgICAgICAgICBuZXcgQmxvYihbd2VpZ2h0QnVmZmVyXSwge3R5cGU6IE9DVEVUX1NUUkVBTV9NSU1FX1RZUEV9KSxcbiAgICAgICAgICAnbW9kZWwud2VpZ2h0cy5iaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2godGhpcy5wYXRoLCBpbml0KTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZWxBcnRpZmFjdHNJbmZvOiBnZXRNb2RlbEFydGlmYWN0c0luZm9Gb3JKU09OKG1vZGVsQXJ0aWZhY3RzKSxcbiAgICAgICAgcmVzcG9uc2VzOiBbcmVzcG9uc2VdLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBCcm93c2VySFRUUFJlcXVlc3Quc2F2ZSgpIGZhaWxlZCBkdWUgdG8gSFRUUCByZXNwb25zZSBzdGF0dXMgYCArXG4gICAgICAgICAgYCR7cmVzcG9uc2Uuc3RhdHVzfS5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBtb2RlbCBhcnRpZmFjdHMgdmlhIEhUVFAgcmVxdWVzdChzKS5cbiAgICpcbiAgICogU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRvIGB0Zi5pby5odHRwYCBmb3IgZGV0YWlscyBvbiB0aGUgc2F2ZWRcbiAgICogYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVkIG1vZGVsIGFydGlmYWN0cyAoaWYgbG9hZGluZyBzdWNjZWVkcykuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8TW9kZWxBcnRpZmFjdHM+IHtcbiAgICBjb25zdCBtb2RlbENvbmZpZ1JlcXVlc3QgPSBhd2FpdCB0aGlzLmZldGNoKHRoaXMucGF0aCwgdGhpcy5yZXF1ZXN0SW5pdCk7XG5cbiAgICBpZiAoIW1vZGVsQ29uZmlnUmVxdWVzdC5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBSZXF1ZXN0IHRvICR7dGhpcy5wYXRofSBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSBgICtcbiAgICAgICAgICBgJHttb2RlbENvbmZpZ1JlcXVlc3Quc3RhdHVzfS4gUGxlYXNlIHZlcmlmeSB0aGlzIFVSTCBwb2ludHMgdG8gYCArXG4gICAgICAgICAgYHRoZSBtb2RlbCBKU09OIG9mIHRoZSBtb2RlbCB0byBsb2FkLmApO1xuICAgIH1cbiAgICBsZXQgbW9kZWxKU09OOiBNb2RlbEpTT047XG4gICAgdHJ5IHtcbiAgICAgIG1vZGVsSlNPTiA9IGF3YWl0IG1vZGVsQ29uZmlnUmVxdWVzdC5qc29uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBgRmFpbGVkIHRvIHBhcnNlIG1vZGVsIEpTT04gb2YgcmVzcG9uc2UgZnJvbSAke3RoaXMucGF0aH0uYDtcbiAgICAgIC8vIFRPRE8obnN0aG9yYXQpOiBSZW1vdmUgdGhpcyBhZnRlciBzb21lIHRpbWUgd2hlbiB3ZSdyZSBjb21mb3J0YWJsZSB0aGF0XG4gICAgICAvLyAucGIgZmlsZXMgYXJlIG1vc3RseSBnb25lLlxuICAgICAgaWYgKHRoaXMucGF0aC5lbmRzV2l0aCgnLnBiJykpIHtcbiAgICAgICAgbWVzc2FnZSArPSAnIFlvdXIgcGF0aCBjb250YWlucyBhIC5wYiBmaWxlIGV4dGVuc2lvbi4gJyArXG4gICAgICAgICAgICAnU3VwcG9ydCBmb3IgLnBiIG1vZGVscyBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBUZW5zb3JGbG93LmpzIDEuMCAnICtcbiAgICAgICAgICAgICdpbiBmYXZvciBvZiAuanNvbiBtb2RlbHMuIFlvdSBjYW4gcmUtY29udmVydCB5b3VyIFB5dGhvbiAnICtcbiAgICAgICAgICAgICdUZW5zb3JGbG93IG1vZGVsIHVzaW5nIHRoZSBUZW5zb3JGbG93LmpzIDEuMCBjb252ZXJzaW9uIHNjcmlwdHMgJyArXG4gICAgICAgICAgICAnb3IgeW91IGNhbiBjb252ZXJ0IHlvdXIucGIgbW9kZWxzIHdpdGggdGhlIFxcJ3BiMmpzb25cXCcnICtcbiAgICAgICAgICAgICdOUE0gc2NyaXB0IGluIHRoZSB0ZW5zb3JmbG93L3RmanMtY29udmVydGVyIHJlcG9zaXRvcnkuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJyBQbGVhc2UgbWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaXMgc2VydmluZyB2YWxpZCAnICtcbiAgICAgICAgICAgICdKU09OIGZvciB0aGlzIHJlcXVlc3QuJztcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgYWxsb3cgYm90aCBtb2RlbFRvcG9sb2d5IGFuZCB3ZWlnaHRzTWFuaWZlc3QgdG8gYmUgbWlzc2luZy5cbiAgICBjb25zdCBtb2RlbFRvcG9sb2d5ID0gbW9kZWxKU09OLm1vZGVsVG9wb2xvZ3k7XG4gICAgY29uc3Qgd2VpZ2h0c01hbmlmZXN0ID0gbW9kZWxKU09OLndlaWdodHNNYW5pZmVzdDtcbiAgICBpZiAobW9kZWxUb3BvbG9neSA9PSBudWxsICYmIHdlaWdodHNNYW5pZmVzdCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZSBKU09OIGZyb20gSFRUUCBwYXRoICR7dGhpcy5wYXRofSBjb250YWlucyBuZWl0aGVyIG1vZGVsIGAgK1xuICAgICAgICAgIGB0b3BvbG9neSBvciBtYW5pZmVzdCBmb3Igd2VpZ2h0cy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OKFxuICAgICAgICBtb2RlbEpTT04sICh3ZWlnaHRzTWFuaWZlc3QpID0+IHRoaXMubG9hZFdlaWdodHMod2VpZ2h0c01hbmlmZXN0KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRXZWlnaHRzKHdlaWdodHNNYW5pZmVzdDogV2VpZ2h0c01hbmlmZXN0Q29uZmlnKTpcbiAgICBQcm9taXNlPFtXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLCBXZWlnaHREYXRhXT4ge1xuICAgIGNvbnN0IHdlaWdodFBhdGggPSBBcnJheS5pc0FycmF5KHRoaXMucGF0aCkgPyB0aGlzLnBhdGhbMV0gOiB0aGlzLnBhdGg7XG4gICAgY29uc3QgW3ByZWZpeCwgc3VmZml4XSA9IHBhcnNlVXJsKHdlaWdodFBhdGgpO1xuICAgIGNvbnN0IHBhdGhQcmVmaXggPSB0aGlzLndlaWdodFBhdGhQcmVmaXggfHwgcHJlZml4O1xuXG4gICAgY29uc3Qgd2VpZ2h0U3BlY3MgPSBnZXRXZWlnaHRTcGVjcyh3ZWlnaHRzTWFuaWZlc3QpO1xuXG4gICAgY29uc3QgZmV0Y2hVUkxzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHVybFByb21pc2VzOiBBcnJheTxQcm9taXNlPHN0cmluZz4+ID0gW107XG4gICAgZm9yIChjb25zdCB3ZWlnaHRzR3JvdXAgb2Ygd2VpZ2h0c01hbmlmZXN0KSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2Ygd2VpZ2h0c0dyb3VwLnBhdGhzKSB7XG4gICAgICAgIGlmICh0aGlzLndlaWdodFVybENvbnZlcnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdXJsUHJvbWlzZXMucHVzaCh0aGlzLndlaWdodFVybENvbnZlcnRlcihwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmV0Y2hVUkxzLnB1c2gocGF0aFByZWZpeCArIHBhdGggKyBzdWZmaXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud2VpZ2h0VXJsQ29udmVydGVyKSB7XG4gICAgICBmZXRjaFVSTHMucHVzaCguLi5hd2FpdCBQcm9taXNlLmFsbCh1cmxQcm9taXNlcykpO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlcnMgPSBhd2FpdCBsb2FkV2VpZ2h0c0FzQXJyYXlCdWZmZXIoZmV0Y2hVUkxzLCB7XG4gICAgICByZXF1ZXN0SW5pdDogdGhpcy5yZXF1ZXN0SW5pdCxcbiAgICAgIGZldGNoRnVuYzogdGhpcy5mZXRjaCxcbiAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMub25Qcm9ncmVzc1xuICAgIH0pO1xuICAgIHJldHVybiBbd2VpZ2h0U3BlY3MsIGJ1ZmZlcnNdO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgcHJlZml4IGFuZCBzdWZmaXggb2YgdGhlIHVybCwgd2hlcmUgdGhlIHByZWZpeCBpcyB0aGUgcGF0aCBiZWZvcmVcbiAqIHRoZSBsYXN0IGZpbGUsIGFuZCBzdWZmaXggaXMgdGhlIHNlYXJjaCBwYXJhbXMgYWZ0ZXIgdGhlIGxhc3QgZmlsZS5cbiAqIGBgYFxuICogY29uc3QgdXJsID0gJ2h0dHA6Ly90Zmh1Yi5kZXYvbW9kZWwvMS90ZW5zb3JmbG93anNfbW9kZWwucGI/dGZqcy1mb3JtYXQ9ZmlsZSdcbiAqIFtwcmVmaXgsIHN1ZmZpeF0gPSBwYXJzZVVybCh1cmwpXG4gKiAvLyBwcmVmaXggPSAnaHR0cDovL3RmaHViLmRldi9tb2RlbC8xLydcbiAqIC8vIHN1ZmZpeCA9ICc/dGZqcy1mb3JtYXQ9ZmlsZSdcbiAqIGBgYFxuICogQHBhcmFtIHVybCB0aGUgbW9kZWwgdXJsIHRvIGJlIHBhcnNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gIGNvbnN0IGxhc3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignLycpO1xuICBjb25zdCBsYXN0U2VhcmNoUGFyYW0gPSB1cmwubGFzdEluZGV4T2YoJz8nKTtcbiAgY29uc3QgcHJlZml4ID0gdXJsLnN1YnN0cmluZygwLCBsYXN0U2xhc2gpO1xuICBjb25zdCBzdWZmaXggPVxuICAgICAgbGFzdFNlYXJjaFBhcmFtID4gbGFzdFNsYXNoID8gdXJsLnN1YnN0cmluZyhsYXN0U2VhcmNoUGFyYW0pIDogJyc7XG4gIHJldHVybiBbcHJlZml4ICsgJy8nLCBzdWZmaXhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIVFRQU2NoZW1lKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cmwubWF0Y2goSFRUUFJlcXVlc3QuVVJMX1NDSEVNRV9SRUdFWCkgIT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGh0dHBSb3V0ZXI6IElPUm91dGVyID1cbiAgICAodXJsOiBzdHJpbmcsIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmV0Y2ggPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgKGxvYWRPcHRpb25zID09IG51bGwgfHwgbG9hZE9wdGlvbnMuZmV0Y2hGdW5jID09IG51bGwpKSB7XG4gICAgICAgIC8vIGBodHRwYCB1c2VzIGBmZXRjaGAgb3IgYG5vZGUtZmV0Y2hgLCBpZiBvbmUgd2FudHMgdG8gdXNlIGl0IGluXG4gICAgICAgIC8vIGFuIGVudmlyb25tZW50IHRoYXQgaXMgbm90IHRoZSBicm93c2VyIG9yIG5vZGUgdGhleSBoYXZlIHRvIHNldHVwIGFcbiAgICAgICAgLy8gZ2xvYmFsIGZldGNoIHBvbHlmaWxsLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpc0hUVFAgPSB0cnVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG4gICAgICAgICAgaXNIVFRQID0gdXJsLmV2ZXJ5KHVybEl0ZW0gPT4gaXNIVFRQU2NoZW1lKHVybEl0ZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc0hUVFAgPSBpc0hUVFBTY2hlbWUodXJsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIVFRQKSB7XG4gICAgICAgICAgcmV0dXJuIGh0dHAodXJsLCBsb2FkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5JT1JvdXRlclJlZ2lzdHJ5LnJlZ2lzdGVyU2F2ZVJvdXRlcihodHRwUm91dGVyKTtcbklPUm91dGVyUmVnaXN0cnkucmVnaXN0ZXJMb2FkUm91dGVyKGh0dHBSb3V0ZXIpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyIHN1YnR5cGUgdGhhdCBzZW5kcyBtb2RlbCBhcnRpZmFjdHMgdG8gSFRUUCBzZXJ2ZXIuXG4gKlxuICogQW4gSFRUUCByZXF1ZXN0IG9mIHRoZSBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAgbWltZSB0eXBlIHdpbGwgYmUgc2VudCB0byB0aGVcbiAqIGBwYXRoYCBVUkwuIFRoZSBmb3JtIGRhdGEgaW5jbHVkZXMgYXJ0aWZhY3RzIHRoYXQgcmVwcmVzZW50IHRoZSB0b3BvbG9neVxuICogYW5kL29yIHdlaWdodHMgb2YgdGhlIG1vZGVsLiBJbiB0aGUgY2FzZSBvZiBLZXJhcy1zdHlsZSBgdGYuTW9kZWxgLCB0d29cbiAqIGJsb2JzIChmaWxlcykgZXhpc3QgaW4gZm9ybS1kYXRhOlxuICogICAtIEEgSlNPTiBmaWxlIGNvbnNpc3Rpbmcgb2YgYG1vZGVsVG9wb2xvZ3lgIGFuZCBgd2VpZ2h0c01hbmlmZXN0YC5cbiAqICAgLSBBIGJpbmFyeSB3ZWlnaHRzIGZpbGUgY29uc2lzdGluZyBvZiB0aGUgY29uY2F0ZW5hdGVkIHdlaWdodCB2YWx1ZXMuXG4gKiBUaGVzZSBmaWxlcyBhcmUgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBvbmUgZ2VuZXJhdGVkIGJ5XG4gKiBbdGZqc19jb252ZXJ0ZXJdKGh0dHBzOi8vanMudGVuc29yZmxvdy5vcmcvdHV0b3JpYWxzL2ltcG9ydC1rZXJhcy5odG1sKS5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBleGVtcGxpZmllcyB0aGUgY2xpZW50LXNpZGUgY29kZSB0aGF0IHVzZXMgdGhpc1xuICogZnVuY3Rpb246XG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1vZGVsID0gdGYuc2VxdWVudGlhbCgpO1xuICogbW9kZWwuYWRkKFxuICogICAgIHRmLmxheWVycy5kZW5zZSh7dW5pdHM6IDEsIGlucHV0U2hhcGU6IFsxMDBdLCBhY3RpdmF0aW9uOiAnc2lnbW9pZCd9KSk7XG4gKlxuICogY29uc3Qgc2F2ZVJlc3VsdCA9IGF3YWl0IG1vZGVsLnNhdmUodGYuaW8uaHR0cChcbiAqICAgICAnaHR0cDovL21vZGVsLXNlcnZlcjo1MDAwL3VwbG9hZCcsIHtyZXF1ZXN0SW5pdDoge21ldGhvZDogJ1BVVCd9fSkpO1xuICogY29uc29sZS5sb2coc2F2ZVJlc3VsdCk7XG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgZGVmYXVsdCBgUE9TVGAgbWV0aG9kIGlzIHRvIGJlIHVzZWQsIHdpdGhvdXQgYW55IGN1c3RvbSBwYXJhbWV0ZXJzXG4gKiBzdWNoIGFzIGhlYWRlcnMsIHlvdSBjYW4gc2ltcGx5IHBhc3MgYW4gSFRUUCBvciBIVFRQUyBVUkwgdG8gYG1vZGVsLnNhdmVgOlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBzYXZlUmVzdWx0ID0gYXdhaXQgbW9kZWwuc2F2ZSgnaHR0cDovL21vZGVsLXNlcnZlcjo1MDAwL3VwbG9hZCcpO1xuICogYGBgXG4gKlxuICogVGhlIGZvbGxvd2luZyBHaXRIdWIgR2lzdFxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZHNtaWxrb3YvMWI2MDQ2ZmQ2MTMyZDc0MDhkNTI1N2IwOTc2Zjc4NjRcbiAqIGltcGxlbWVudHMgYSBzZXJ2ZXIgYmFzZWQgb24gW2ZsYXNrXShodHRwczovL2dpdGh1Yi5jb20vcGFsbGV0cy9mbGFzaykgdGhhdFxuICogY2FuIHJlY2VpdmUgdGhlIHJlcXVlc3QuIFVwb24gcmVjZWl2aW5nIHRoZSBtb2RlbCBhcnRpZmFjdHMgdmlhIHRoZSByZXF1c3QsXG4gKiB0aGlzIHBhcnRpY3VsYXIgc2VydmVyIHJlY29uc3RpdHV0ZXMgaW5zdGFuY2VzIG9mIFtLZXJhc1xuICogTW9kZWxzXShodHRwczovL2tlcmFzLmlvL21vZGVscy9tb2RlbC8pIGluIG1lbW9yeS5cbiAqXG4gKlxuICogQHBhcmFtIHBhdGggQSBVUkwgcGF0aCB0byB0aGUgbW9kZWwuXG4gKiAgIENhbiBiZSBhbiBhYnNvbHV0ZSBIVFRQIHBhdGggKGUuZy4sXG4gKiAgICdodHRwOi8vbG9jYWxob3N0OjgwMDAvbW9kZWwtdXBsb2FkKScpIG9yIGEgcmVsYXRpdmUgcGF0aCAoZS5nLixcbiAqICAgJy4vbW9kZWwtdXBsb2FkJykuXG4gKiBAcGFyYW0gcmVxdWVzdEluaXQgUmVxdWVzdCBjb25maWd1cmF0aW9ucyB0byBiZSB1c2VkIHdoZW4gc2VuZGluZ1xuICogICAgSFRUUCByZXF1ZXN0IHRvIHNlcnZlciB1c2luZyBgZmV0Y2hgLiBJdCBjYW4gY29udGFpbiBmaWVsZHMgc3VjaCBhc1xuICogICAgYG1ldGhvZGAsIGBjcmVkZW50aWFsc2AsIGBoZWFkZXJzYCwgYG1vZGVgLCBldGMuIFNlZVxuICogICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdFxuICogICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIGByZXF1ZXN0SW5pdGAgbXVzdCBub3QgaGF2ZSBhIGJvZHksIGJlY2F1c2UgdGhlXG4gKiBib2R5IHdpbGwgYmUgc2V0IGJ5IFRlbnNvckZsb3cuanMuIEZpbGUgYmxvYnMgcmVwcmVzZW50aW5nIHRoZSBtb2RlbFxuICogdG9wb2xvZ3kgKGZpbGVuYW1lOiAnbW9kZWwuanNvbicpIGFuZCB0aGUgd2VpZ2h0cyBvZiB0aGUgbW9kZWwgKGZpbGVuYW1lOlxuICogJ21vZGVsLndlaWdodHMuYmluJykgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYm9keS4gSWYgYHJlcXVlc3RJbml0YCBoYXMgYVxuICogYGJvZHlgLCBhbiBFcnJvciB3aWxsIGJlIHRocm93bi5cbiAqIEBwYXJhbSBsb2FkT3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgbG9hZGluZy4gSXQgaW5jbHVkZXMgdGhlXG4gKiAgIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAgIC0gd2VpZ2h0UGF0aFByZWZpeCBPcHRpb25hbCwgdGhpcyBzcGVjaWZpZXMgdGhlIHBhdGggcHJlZml4IGZvciB3ZWlnaHRcbiAqICAgICBmaWxlcywgYnkgZGVmYXVsdCB0aGlzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcGF0aCBwYXJhbS5cbiAqICAgLSBmZXRjaEZ1bmMgT3B0aW9uYWwsIGN1c3RvbSBgZmV0Y2hgIGZ1bmN0aW9uLiBFLmcuLCBpbiBOb2RlLmpzLFxuICogICAgIHRoZSBgZmV0Y2hgIGZyb20gbm9kZS1mZXRjaCBjYW4gYmUgdXNlZCBoZXJlLlxuICogICAtIG9uUHJvZ3Jlc3MgT3B0aW9uYWwsIHByb2dyZXNzIGNhbGxiYWNrIGZ1bmN0aW9uLCBmaXJlZCBwZXJpb2RpY2FsbHlcbiAqICAgICBiZWZvcmUgdGhlIGxvYWQgaXMgY29tcGxldGVkLlxuICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgYElPSGFuZGxlcmAuXG4gKlxuICogQGRvYyB7XG4gKiAgIGhlYWRpbmc6ICdNb2RlbHMnLFxuICogICBzdWJoZWFkaW5nOiAnTG9hZGluZycsXG4gKiAgIG5hbWVzcGFjZTogJ2lvJyxcbiAqICAgaWdub3JlQ0k6IHRydWVcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHAocGF0aDogc3RyaW5nLCBsb2FkT3B0aW9ucz86IExvYWRPcHRpb25zKTogSU9IYW5kbGVyIHtcbiAgcmV0dXJuIG5ldyBIVFRQUmVxdWVzdChwYXRoLCBsb2FkT3B0aW9ucyk7XG59XG5cbi8qKlxuICogRGVwcmVjYXRlZC4gVXNlIGB0Zi5pby5odHRwYC5cbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gbG9hZE9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyb3dzZXJIVFRQUmVxdWVzdChcbiAgICBwYXRoOiBzdHJpbmcsIGxvYWRPcHRpb25zPzogTG9hZE9wdGlvbnMpOiBJT0hhbmRsZXIge1xuICByZXR1cm4gaHR0cChwYXRoLCBsb2FkT3B0aW9ucyk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nclass PassthroughLoader {\n constructor(modelArtifacts) {\n this.modelArtifacts = modelArtifacts;\n }\n load() {\n return this.modelArtifacts;\n }\n}\nclass PassthroughSaver {\n constructor(saveHandler) {\n this.saveHandler = saveHandler;\n }\n save(modelArtifacts) {\n return this.saveHandler(modelArtifacts);\n }\n}\nclass PassthroughAsync {\n constructor(handler) {\n if (handler.load) {\n this.load = () => Promise.resolve(handler.load());\n }\n if (handler.save) {\n this.save = (modelArtifacts) => Promise.resolve(handler.save(modelArtifacts));\n }\n }\n}\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n * modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n * the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n * names, shapes, types, and quantization of the weight data. Optional.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n * concatenated in the order described by the weightSpecs. Optional.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandler` that simply loads the provided data.\n */\nexport function fromMemory(modelArtifacts, weightSpecs, weightData, trainingConfig) {\n const args = arguments;\n return new PassthroughAsync(fromMemorySync(...args));\n}\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n * modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n * the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n * names, shapes, types, and quantization of the weight data. Optional.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n * concatenated in the order described by the weightSpecs. Optional.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandlerSync` that simply loads the provided data.\n */\nexport function fromMemorySync(modelArtifacts, weightSpecs, weightData, trainingConfig) {\n if (arguments.length === 1) {\n const isModelArtifacts = modelArtifacts.modelTopology != null ||\n modelArtifacts.weightSpecs != null;\n if (isModelArtifacts) {\n return new PassthroughLoader(modelArtifacts);\n }\n else {\n // Legacy support: with only modelTopology.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({ modelTopology: modelArtifacts });\n }\n }\n else {\n // Legacy support.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({\n modelTopology: modelArtifacts,\n weightSpecs,\n weightData,\n trainingConfig\n });\n }\n}\n/**\n * Creates an IOHandler that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n * // ... do something with the artifacts ...\n * return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n * promise that resolves to a `SaveResult`.\n */\nexport function withSaveHandler(saveHandler) {\n return new PassthroughSaver(saveHandler);\n}\n/**\n * Creates an IOHandlerSync that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n * // ... do something with the artifacts ...\n * return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n * `SaveResult`.\n */\nexport function withSaveHandlerSync(saveHandler) {\n return new PassthroughSaver(saveHandler);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3Rocm91Z2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL3Bhc3N0aHJvdWdoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQVFILE1BQU0saUJBQWlCO0lBQ3JCLFlBQTZCLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtJQUFHLENBQUM7SUFFaEUsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQjtJQUNwQixZQUNtQixXQUE2QztRQUE3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0M7SUFBRyxDQUFDO0lBRXBFLElBQUksQ0FBQyxjQUE4QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxnQkFBZ0I7SUFJcEIsWUFBWSxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUE4QixFQUFFLEVBQUUsQ0FDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN0QixjQUFpQyxFQUFFLFdBQW9DLEVBQ3ZFLFVBQXVCLEVBQUUsY0FBK0I7SUFFMUQsTUFBTSxJQUFJLEdBQUcsU0FBcUQsQ0FBQztJQUNuRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsY0FBaUMsRUFBRSxXQUFvQyxFQUN2RSxVQUF1QixFQUFFLGNBQStCO0lBQzFELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxnQkFBZ0IsR0FDakIsY0FBaUMsQ0FBQyxhQUFhLElBQUksSUFBSTtZQUN2RCxjQUFpQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDM0QsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsY0FBZ0MsQ0FBQyxDQUFDO1NBQ2hFO2FBQU07WUFDTCwyQ0FBMkM7WUFDM0MsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQ1IseURBQXlEO2dCQUN6RCxpREFBaUQ7Z0JBQ2pELDhEQUE4RDtnQkFDOUQscURBQXFELENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksaUJBQWlCLENBQUMsRUFBQyxhQUFhLEVBQUUsY0FBb0IsRUFBQyxDQUFDLENBQUM7U0FDckU7S0FDRjtTQUFNO1FBQ0wsa0JBQWtCO1FBQ2xCLDBDQUEwQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUNSLHlEQUF5RDtZQUN6RCxpREFBaUQ7WUFDakQsOERBQThEO1lBQzlELHFEQUFxRCxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1lBQzNCLGFBQWEsRUFBRSxjQUFvQjtZQUNuQyxXQUFXO1lBQ1gsVUFBVTtZQUNWLGNBQWM7U0FDZixDQUFDLENBQUM7S0FDSjtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzNCLFdBQ3VCO0lBQ3pCLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQy9CLFdBQXNEO0lBQ3hELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBYSxXQUFXLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIElPSGFuZGxlcnMgdGhhdCBwYXNzIHRocm91Z2ggdGhlIGluLW1lbW9yeSBNb2RlbEFydGlmYWN0cyBmb3JtYXQuXG4gKi9cblxuaW1wb3J0IHtJT0hhbmRsZXIsIElPSGFuZGxlclN5bmMsIExvYWRIYW5kbGVyLCBNb2RlbEFydGlmYWN0cywgU2F2ZUhhbmRsZXIsIFNhdmVSZXN1bHQsIFRyYWluaW5nQ29uZmlnLCBXZWlnaHREYXRhLCBXZWlnaHRzTWFuaWZlc3RFbnRyeX0gZnJvbSAnLi90eXBlcyc7XG5cbmNsYXNzIFBhc3N0aHJvdWdoTG9hZGVyIGltcGxlbWVudHMgSU9IYW5kbGVyU3luYyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgbW9kZWxBcnRpZmFjdHM/OiBNb2RlbEFydGlmYWN0cykge31cblxuICBsb2FkKCk6IE1vZGVsQXJ0aWZhY3RzIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbEFydGlmYWN0cztcbiAgfVxufVxuXG5jbGFzcyBQYXNzdGhyb3VnaFNhdmVyPFIgZXh0ZW5kcyBTYXZlUmVzdWx0IHwgUHJvbWlzZTxTYXZlUmVzdWx0Pj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhdmVIYW5kbGVyOiAoYXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cykgPT4gUikge31cblxuICBzYXZlKG1vZGVsQXJ0aWZhY3RzOiBNb2RlbEFydGlmYWN0cyk6IFIge1xuICAgIHJldHVybiB0aGlzLnNhdmVIYW5kbGVyKG1vZGVsQXJ0aWZhY3RzKTtcbiAgfVxufVxuXG5jbGFzcyBQYXNzdGhyb3VnaEFzeW5jIGltcGxlbWVudHMgSU9IYW5kbGVyIHtcbiAgbG9hZD86IExvYWRIYW5kbGVyO1xuICBzYXZlPzogU2F2ZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IoaGFuZGxlcjogSU9IYW5kbGVyU3luYykge1xuICAgIGlmIChoYW5kbGVyLmxvYWQpIHtcbiAgICAgIHRoaXMubG9hZCA9ICgpID0+IFByb21pc2UucmVzb2x2ZShoYW5kbGVyLmxvYWQoKSk7XG4gICAgfVxuICAgIGlmIChoYW5kbGVyLnNhdmUpIHtcbiAgICAgIHRoaXMuc2F2ZSA9IChtb2RlbEFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShoYW5kbGVyLnNhdmUobW9kZWxBcnRpZmFjdHMpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIElPSGFuZGxlciB0aGF0IGxvYWRzIG1vZGVsIGFydGlmYWN0cyBmcm9tIG1lbW9yeS5cbiAqXG4gKiBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgdGYubG9hZExheWVyc01vZGVsYCwgYW4gaW5zdGFuY2Ugb2ZcbiAqIGB0Zi5MYXllcnNNb2RlbGAgKEtlcmFzLXN0eWxlKSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgbG9hZGVkIGFydGlmYWN0cy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWwgPSBhd2FpdCB0Zi5sb2FkTGF5ZXJzTW9kZWwodGYuaW8uZnJvbU1lbW9yeShcbiAqICAgICBtb2RlbFRvcG9sb2d5LCB3ZWlnaHRTcGVjcywgd2VpZ2h0RGF0YSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIG1vZGVsQXJ0aWZhY3RzIGEgb2JqZWN0IGNvbnRhaW5pbmcgbW9kZWwgdG9wb2xvZ3kgKGkuZS4sIHBhcnNlZCBmcm9tXG4gKiAgIHRoZSBKU09OIGZvcm1hdCkuXG4gKiBAcGFyYW0gd2VpZ2h0U3BlY3MgQW4gYXJyYXkgb2YgYFdlaWdodHNNYW5pZmVzdEVudHJ5YCBvYmplY3RzIGRlc2NyaWJpbmcgdGhlXG4gKiAgIG5hbWVzLCBzaGFwZXMsIHR5cGVzLCBhbmQgcXVhbnRpemF0aW9uIG9mIHRoZSB3ZWlnaHQgZGF0YS4gT3B0aW9uYWwuXG4gKiBAcGFyYW0gd2VpZ2h0RGF0YSBBIHNpbmdsZSBgQXJyYXlCdWZmZXJgIGNvbnRhaW5pbmcgdGhlIHdlaWdodCBkYXRhLFxuICogICBjb25jYXRlbmF0ZWQgaW4gdGhlIG9yZGVyIGRlc2NyaWJlZCBieSB0aGUgd2VpZ2h0U3BlY3MuIE9wdGlvbmFsLlxuICogQHBhcmFtIHRyYWluaW5nQ29uZmlnIE1vZGVsIHRyYWluaW5nIGNvbmZpZ3VyYXRpb24uIE9wdGlvbmFsLlxuICpcbiAqIEByZXR1cm5zIEEgcGFzc3Rocm91Z2ggYElPSGFuZGxlcmAgdGhhdCBzaW1wbHkgbG9hZHMgdGhlIHByb3ZpZGVkIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWVtb3J5KFxuICAgIG1vZGVsQXJ0aWZhY3RzOiB7fXxNb2RlbEFydGlmYWN0cywgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhLCB0cmFpbmluZ0NvbmZpZz86IFRyYWluaW5nQ29uZmlnKTogSU9IYW5kbGVyIHtcblxuICBjb25zdCBhcmdzID0gYXJndW1lbnRzIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2YgZnJvbU1lbW9yeT47XG4gIHJldHVybiBuZXcgUGFzc3Rocm91Z2hBc3luYyhmcm9tTWVtb3J5U3luYyguLi5hcmdzKSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJT0hhbmRsZXIgdGhhdCBsb2FkcyBtb2RlbCBhcnRpZmFjdHMgZnJvbSBtZW1vcnkuXG4gKlxuICogV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYHRmLmxvYWRMYXllcnNNb2RlbGAsIGFuIGluc3RhbmNlIG9mXG4gKiBgdGYuTGF5ZXJzTW9kZWxgIChLZXJhcy1zdHlsZSkgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGxvYWRlZCBhcnRpZmFjdHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1vZGVsID0gYXdhaXQgdGYubG9hZExheWVyc01vZGVsKHRmLmlvLmZyb21NZW1vcnkoXG4gKiAgICAgbW9kZWxUb3BvbG9neSwgd2VpZ2h0U3BlY3MsIHdlaWdodERhdGEpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtb2RlbEFydGlmYWN0cyBhIG9iamVjdCBjb250YWluaW5nIG1vZGVsIHRvcG9sb2d5IChpLmUuLCBwYXJzZWQgZnJvbVxuICogICB0aGUgSlNPTiBmb3JtYXQpLlxuICogQHBhcmFtIHdlaWdodFNwZWNzIEFuIGFycmF5IG9mIGBXZWlnaHRzTWFuaWZlc3RFbnRyeWAgb2JqZWN0cyBkZXNjcmliaW5nIHRoZVxuICogICBuYW1lcywgc2hhcGVzLCB0eXBlcywgYW5kIHF1YW50aXphdGlvbiBvZiB0aGUgd2VpZ2h0IGRhdGEuIE9wdGlvbmFsLlxuICogQHBhcmFtIHdlaWdodERhdGEgQSBzaW5nbGUgYEFycmF5QnVmZmVyYCBjb250YWluaW5nIHRoZSB3ZWlnaHQgZGF0YSxcbiAqICAgY29uY2F0ZW5hdGVkIGluIHRoZSBvcmRlciBkZXNjcmliZWQgYnkgdGhlIHdlaWdodFNwZWNzLiBPcHRpb25hbC5cbiAqIEBwYXJhbSB0cmFpbmluZ0NvbmZpZyBNb2RlbCB0cmFpbmluZyBjb25maWd1cmF0aW9uLiBPcHRpb25hbC5cbiAqXG4gKiBAcmV0dXJucyBBIHBhc3N0aHJvdWdoIGBJT0hhbmRsZXJTeW5jYCB0aGF0IHNpbXBseSBsb2FkcyB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21NZW1vcnlTeW5jKFxuICAgIG1vZGVsQXJ0aWZhY3RzOiB7fXxNb2RlbEFydGlmYWN0cywgd2VpZ2h0U3BlY3M/OiBXZWlnaHRzTWFuaWZlc3RFbnRyeVtdLFxuICAgIHdlaWdodERhdGE/OiBXZWlnaHREYXRhLCB0cmFpbmluZ0NvbmZpZz86IFRyYWluaW5nQ29uZmlnKTogSU9IYW5kbGVyU3luYyB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaXNNb2RlbEFydGlmYWN0cyA9XG4gICAgICAgIChtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cykubW9kZWxUb3BvbG9neSAhPSBudWxsIHx8XG4gICAgICAgIChtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cykud2VpZ2h0U3BlY3MgIT0gbnVsbDtcbiAgICBpZiAoaXNNb2RlbEFydGlmYWN0cykge1xuICAgICAgcmV0dXJuIG5ldyBQYXNzdGhyb3VnaExvYWRlcihtb2RlbEFydGlmYWN0cyBhcyBNb2RlbEFydGlmYWN0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBzdXBwb3J0OiB3aXRoIG9ubHkgbW9kZWxUb3BvbG9neS5cbiAgICAgIC8vIFRPRE8oY2Fpcyk6IFJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgQVBJLlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdQbGVhc2UgY2FsbCB0Zi5pby5mcm9tTWVtb3J5KCkgd2l0aCBvbmx5IG9uZSBhcmd1bWVudC4gJyArXG4gICAgICAgICAgJ1RoZSBhcmd1bWVudCBzaG91bGQgYmUgb2YgdHlwZSBNb2RlbEFydGlmYWN0cy4gJyArXG4gICAgICAgICAgJ1RoZSBtdWx0aS1hcmd1bWVudCBzaWduYXR1cmUgb2YgdGYuaW8uZnJvbU1lbW9yeSgpIGhhcyBiZWVuICcgK1xuICAgICAgICAgICdkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4nKTtcbiAgICAgIHJldHVybiBuZXcgUGFzc3Rocm91Z2hMb2FkZXIoe21vZGVsVG9wb2xvZ3k6IG1vZGVsQXJ0aWZhY3RzIGFzIHt9fSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSBzdXBwb3J0LlxuICAgIC8vIFRPRE8oY2Fpcyk6IFJlbW92ZSB0aGlzIGRlcHJlY2F0ZWQgQVBJLlxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1BsZWFzZSBjYWxsIHRmLmlvLmZyb21NZW1vcnkoKSB3aXRoIG9ubHkgb25lIGFyZ3VtZW50LiAnICtcbiAgICAgICAgJ1RoZSBhcmd1bWVudCBzaG91bGQgYmUgb2YgdHlwZSBNb2RlbEFydGlmYWN0cy4gJyArXG4gICAgICAgICdUaGUgbXVsdGktYXJndW1lbnQgc2lnbmF0dXJlIG9mIHRmLmlvLmZyb21NZW1vcnkoKSBoYXMgYmVlbiAnICtcbiAgICAgICAgJ2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLicpO1xuICAgIHJldHVybiBuZXcgUGFzc3Rocm91Z2hMb2FkZXIoe1xuICAgICAgbW9kZWxUb3BvbG9neTogbW9kZWxBcnRpZmFjdHMgYXMge30sXG4gICAgICB3ZWlnaHRTcGVjcyxcbiAgICAgIHdlaWdodERhdGEsXG4gICAgICB0cmFpbmluZ0NvbmZpZ1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJT0hhbmRsZXIgdGhhdCBwYXNzZXMgc2F2ZWQgbW9kZWwgYXJ0aWZhY3RzIHRvIGEgY2FsbGJhY2suXG4gKlxuICogYGBganNcbiAqIGZ1bmN0aW9uIGhhbmRsZVNhdmUoYXJ0aWZhY3RzKSB7XG4gKiAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgYXJ0aWZhY3RzIC4uLlxuICogICByZXR1cm4ge21vZGVsQXJ0aWZhY3RzSW5mbzogey4uLn0sIC4uLn07XG4gKiB9XG4gKlxuICogY29uc3Qgc2F2ZVJlc3VsdCA9IG1vZGVsLnNhdmUodGYuaW8ud2l0aFNhdmVIYW5kbGVyKGhhbmRsZVNhdmUpKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzYXZlSGFuZGxlciBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIGBNb2RlbEFydGlmYWN0c2AgYW5kIHJldHVybnMgYVxuICogICAgIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBTYXZlUmVzdWx0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTYXZlSGFuZGxlcihcbiAgICBzYXZlSGFuZGxlcjogKGFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+XG4gICAgICAgIFByb21pc2U8U2F2ZVJlc3VsdD4pOiBJT0hhbmRsZXIge1xuICByZXR1cm4gbmV3IFBhc3N0aHJvdWdoU2F2ZXIoc2F2ZUhhbmRsZXIpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSU9IYW5kbGVyU3luYyB0aGF0IHBhc3NlcyBzYXZlZCBtb2RlbCBhcnRpZmFjdHMgdG8gYSBjYWxsYmFjay5cbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gaGFuZGxlU2F2ZShhcnRpZmFjdHMpIHtcbiAqICAgLy8gLi4uIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBhcnRpZmFjdHMgLi4uXG4gKiAgIHJldHVybiB7bW9kZWxBcnRpZmFjdHNJbmZvOiB7Li4ufSwgLi4ufTtcbiAqIH1cbiAqXG4gKiBjb25zdCBzYXZlUmVzdWx0ID0gbW9kZWwuc2F2ZSh0Zi5pby53aXRoU2F2ZUhhbmRsZXIoaGFuZGxlU2F2ZSkpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNhdmVIYW5kbGVyIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgYE1vZGVsQXJ0aWZhY3RzYCBhbmQgcmV0dXJucyBhXG4gKiAgICAgYFNhdmVSZXN1bHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNhdmVIYW5kbGVyU3luYyhcbiAgICBzYXZlSGFuZGxlcjogKGFydGlmYWN0czogTW9kZWxBcnRpZmFjdHMpID0+IFNhdmVSZXN1bHQpOiBJT0hhbmRsZXJTeW5jIHtcbiAgcmV0dXJuIG5ldyBQYXNzdGhyb3VnaFNhdmVyPFNhdmVSZXN1bHQ+KHNhdmVIYW5kbGVyKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Importing local_storage and indexed_db is necessary for the routers to be\n// registered.\nimport './indexed_db';\nimport './local_storage';\nimport { browserFiles } from './browser_files';\nimport { browserHTTPRequest, http, isHTTPScheme } from './http';\nimport { concatenateArrayBuffers, decodeWeights, encodeWeights, getModelArtifactsForJSON, getModelArtifactsForJSONSync, getModelArtifactsInfoForJSON, getWeightSpecs } from './io_utils';\nimport { fromMemory, fromMemorySync, withSaveHandler, withSaveHandlerSync } from './passthrough';\nimport { getLoadHandlers, getSaveHandlers, registerLoadRouter, registerSaveRouter } from './router_registry';\nimport { loadWeights, weightsLoaderFactory } from './weights_loader';\nimport { CompositeArrayBuffer } from './composite_array_buffer';\nexport { copyModel, listModels, moveModel, removeModel } from './model_management';\nexport { browserFiles, browserHTTPRequest, CompositeArrayBuffer, concatenateArrayBuffers, decodeWeights, encodeWeights, fromMemory, fromMemorySync, getLoadHandlers, getModelArtifactsForJSON, getModelArtifactsForJSONSync, getModelArtifactsInfoForJSON, getSaveHandlers, getWeightSpecs, http, isHTTPScheme, loadWeights, registerLoadRouter, registerSaveRouter, weightsLoaderFactory, withSaveHandler, withSaveHandlerSync, };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2lvL2lvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILDRFQUE0RTtBQUM1RSxjQUFjO0FBQ2QsT0FBTyxjQUFjLENBQUM7QUFDdEIsT0FBTyxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3ZMLE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTNHLE9BQU8sRUFBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDakYsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixhQUFhLEVBQ2IsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLHdCQUF3QixFQUN4Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLGVBQWUsRUFDZixjQUFjLEVBQ2QsSUFBSSxFQUdKLFlBQVksRUFHWixXQUFXLEVBTVgsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQVFsQixvQkFBb0IsRUFHcEIsZUFBZSxFQUNmLG1CQUFtQixHQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBJbXBvcnRpbmcgbG9jYWxfc3RvcmFnZSBhbmQgaW5kZXhlZF9kYiBpcyBuZWNlc3NhcnkgZm9yIHRoZSByb3V0ZXJzIHRvIGJlXG4vLyByZWdpc3RlcmVkLlxuaW1wb3J0ICcuL2luZGV4ZWRfZGInO1xuaW1wb3J0ICcuL2xvY2FsX3N0b3JhZ2UnO1xuXG5pbXBvcnQge2Jyb3dzZXJGaWxlc30gZnJvbSAnLi9icm93c2VyX2ZpbGVzJztcbmltcG9ydCB7YnJvd3NlckhUVFBSZXF1ZXN0LCBodHRwLCBpc0hUVFBTY2hlbWV9IGZyb20gJy4vaHR0cCc7XG5pbXBvcnQge2NvbmNhdGVuYXRlQXJyYXlCdWZmZXJzLCBkZWNvZGVXZWlnaHRzLCBlbmNvZGVXZWlnaHRzLCBnZXRNb2RlbEFydGlmYWN0c0ZvckpTT04sIGdldE1vZGVsQXJ0aWZhY3RzRm9ySlNPTlN5bmMsIGdldE1vZGVsQXJ0aWZhY3RzSW5mb0ZvckpTT04sIGdldFdlaWdodFNwZWNzfSBmcm9tICcuL2lvX3V0aWxzJztcbmltcG9ydCB7ZnJvbU1lbW9yeSwgZnJvbU1lbW9yeVN5bmMsIHdpdGhTYXZlSGFuZGxlciwgd2l0aFNhdmVIYW5kbGVyU3luY30gZnJvbSAnLi9wYXNzdGhyb3VnaCc7XG5pbXBvcnQge2dldExvYWRIYW5kbGVycywgZ2V0U2F2ZUhhbmRsZXJzLCByZWdpc3RlckxvYWRSb3V0ZXIsIHJlZ2lzdGVyU2F2ZVJvdXRlcn0gZnJvbSAnLi9yb3V0ZXJfcmVnaXN0cnknO1xuaW1wb3J0IHtJT0hhbmRsZXIsIElPSGFuZGxlclN5bmMsIExvYWRIYW5kbGVyLCBMb2FkT3B0aW9ucywgTW9kZWxBcnRpZmFjdHMsIE1vZGVsQXJ0aWZhY3RzSW5mbywgTW9kZWxKU09OLCBNb2RlbFN0b3JlTWFuYWdlciwgT25Qcm9ncmVzc0NhbGxiYWNrLCBSZXF1ZXN0RGV0YWlscywgU2F2ZUNvbmZpZywgU2F2ZUhhbmRsZXIsIFNhdmVSZXN1bHQsIFRyYWluaW5nQ29uZmlnLCBXZWlnaHRHcm91cCwgV2VpZ2h0c01hbmlmZXN0Q29uZmlnLCBXZWlnaHRzTWFuaWZlc3RFbnRyeSwgV2VpZ2h0RGF0YX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge2xvYWRXZWlnaHRzLCB3ZWlnaHRzTG9hZGVyRmFjdG9yeX0gZnJvbSAnLi93ZWlnaHRzX2xvYWRlcic7XG5pbXBvcnQge0NvbXBvc2l0ZUFycmF5QnVmZmVyfSBmcm9tICcuL2NvbXBvc2l0ZV9hcnJheV9idWZmZXInO1xuXG5leHBvcnQge2NvcHlNb2RlbCwgbGlzdE1vZGVscywgbW92ZU1vZGVsLCByZW1vdmVNb2RlbH0gZnJvbSAnLi9tb2RlbF9tYW5hZ2VtZW50JztcbmV4cG9ydCB7XG4gIGJyb3dzZXJGaWxlcyxcbiAgYnJvd3NlckhUVFBSZXF1ZXN0LFxuICBDb21wb3NpdGVBcnJheUJ1ZmZlcixcbiAgY29uY2F0ZW5hdGVBcnJheUJ1ZmZlcnMsXG4gIGRlY29kZVdlaWdodHMsXG4gIGVuY29kZVdlaWdodHMsXG4gIGZyb21NZW1vcnksXG4gIGZyb21NZW1vcnlTeW5jLFxuICBnZXRMb2FkSGFuZGxlcnMsXG4gIGdldE1vZGVsQXJ0aWZhY3RzRm9ySlNPTixcbiAgZ2V0TW9kZWxBcnRpZmFjdHNGb3JKU09OU3luYyxcbiAgZ2V0TW9kZWxBcnRpZmFjdHNJbmZvRm9ySlNPTixcbiAgZ2V0U2F2ZUhhbmRsZXJzLFxuICBnZXRXZWlnaHRTcGVjcyxcbiAgaHR0cCxcbiAgSU9IYW5kbGVyLFxuICBJT0hhbmRsZXJTeW5jLFxuICBpc0hUVFBTY2hlbWUsXG4gIExvYWRIYW5kbGVyLFxuICBMb2FkT3B0aW9ucyxcbiAgbG9hZFdlaWdodHMsXG4gIE1vZGVsQXJ0aWZhY3RzLFxuICBNb2RlbEFydGlmYWN0c0luZm8sXG4gIE1vZGVsSlNPTixcbiAgTW9kZWxTdG9yZU1hbmFnZXIsXG4gIE9uUHJvZ3Jlc3NDYWxsYmFjayxcbiAgcmVnaXN0ZXJMb2FkUm91dGVyLFxuICByZWdpc3RlclNhdmVSb3V0ZXIsXG4gIFJlcXVlc3REZXRhaWxzLFxuICBTYXZlQ29uZmlnLFxuICBTYXZlSGFuZGxlcixcbiAgU2F2ZVJlc3VsdCxcbiAgVHJhaW5pbmdDb25maWcsXG4gIFdlaWdodERhdGEsXG4gIFdlaWdodEdyb3VwLFxuICB3ZWlnaHRzTG9hZGVyRmFjdG9yeSxcbiAgV2VpZ2h0c01hbmlmZXN0Q29uZmlnLFxuICBXZWlnaHRzTWFuaWZlc3RFbnRyeSxcbiAgd2l0aFNhdmVIYW5kbGVyLFxuICB3aXRoU2F2ZUhhbmRsZXJTeW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { env } from '../environment';\nimport { Draw, FromPixels } from '../kernel_names';\nimport { getKernel } from '../kernel_registry';\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\nimport { tensor3d } from './tensor3d';\nlet fromPixels2DContext;\nlet hasToPixelsWarned = false;\n/**\n * Creates a `tf.Tensor` from an image.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * tf.browser.fromPixels(image).print();\n * ```\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n *\n * @returns A Tensor3D with the shape `[height, width, numChannels]`.\n *\n * Note: fromPixels can be lossy in some cases, same image may result in\n * slightly different tensor values, if rendered by different rendering\n * engines. This means that results from different browsers, or even same\n * browser with CPU and GPU rendering engines can be different. See discussion\n * in details:\n * https://github.com/tensorflow/tfjs/issues/5482\n *\n * @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true}\n */\nfunction fromPixels_(pixels, numChannels = 3) {\n // Sanity checks.\n if (numChannels > 4) {\n throw new Error('Cannot construct Tensor with more than 4 channels from pixels.');\n }\n if (pixels == null) {\n throw new Error('pixels passed to tf.browser.fromPixels() can not be null');\n }\n let isPixelData = false;\n let isImageData = false;\n let isVideo = false;\n let isImage = false;\n let isCanvasLike = false;\n let isImageBitmap = false;\n if (pixels.data instanceof Uint8Array) {\n isPixelData = true;\n }\n else if (typeof (ImageData) !== 'undefined' && pixels instanceof ImageData) {\n isImageData = true;\n }\n else if (typeof (HTMLVideoElement) !== 'undefined' &&\n pixels instanceof HTMLVideoElement) {\n isVideo = true;\n }\n else if (typeof (HTMLImageElement) !== 'undefined' &&\n pixels instanceof HTMLImageElement) {\n isImage = true;\n // tslint:disable-next-line: no-any\n }\n else if (pixels.getContext != null) {\n isCanvasLike = true;\n }\n else if (typeof (ImageBitmap) !== 'undefined' && pixels instanceof ImageBitmap) {\n isImageBitmap = true;\n }\n else {\n throw new Error('pixels passed to tf.browser.fromPixels() must be either an ' +\n `HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData ` +\n `in browser, or OffscreenCanvas, ImageData in webworker` +\n ` or {data: Uint32Array, width: number, height: number}, ` +\n `but was ${pixels.constructor.name}`);\n }\n // If the current backend has 'FromPixels' registered, it has a more\n // efficient way of handling pixel uploads, so we call that.\n const kernel = getKernel(FromPixels, ENGINE.backendName);\n if (kernel != null) {\n const inputs = { pixels };\n const attrs = { numChannels };\n return ENGINE.runKernel(FromPixels, inputs, attrs);\n }\n const [width, height] = isVideo ?\n [\n pixels.videoWidth,\n pixels.videoHeight\n ] :\n [pixels.width, pixels.height];\n let vals;\n if (isCanvasLike) {\n vals =\n // tslint:disable-next-line:no-any\n pixels.getContext('2d').getImageData(0, 0, width, height).data;\n }\n else if (isImageData || isPixelData) {\n vals = pixels.data;\n }\n else if (isImage || isVideo || isImageBitmap) {\n if (fromPixels2DContext == null) {\n if (typeof document === 'undefined') {\n if (typeof OffscreenCanvas !== 'undefined' &&\n typeof OffscreenCanvasRenderingContext2D !== 'undefined') {\n // @ts-ignore\n fromPixels2DContext = new OffscreenCanvas(1, 1).getContext('2d');\n }\n else {\n throw new Error('Cannot parse input in current context. ' +\n 'Reason: OffscreenCanvas Context2D rendering is not supported.');\n }\n }\n else {\n fromPixels2DContext = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\n }\n }\n fromPixels2DContext.canvas.width = width;\n fromPixels2DContext.canvas.height = height;\n fromPixels2DContext.drawImage(pixels, 0, 0, width, height);\n vals = fromPixels2DContext.getImageData(0, 0, width, height).data;\n }\n let values;\n if (numChannels === 4) {\n values = new Int32Array(vals);\n }\n else {\n const numPixels = width * height;\n values = new Int32Array(numPixels * numChannels);\n for (let i = 0; i < numPixels; i++) {\n for (let channel = 0; channel < numChannels; ++channel) {\n values[i * numChannels + channel] = vals[i * 4 + channel];\n }\n }\n }\n const outShape = [height, width, numChannels];\n return tensor3d(values, outShape, 'int32');\n}\n// Helper functions for |fromPixelsAsync| to check whether the input can\n// be wrapped into imageBitmap.\nfunction isPixelData(pixels) {\n return (pixels != null) && (pixels.data instanceof Uint8Array);\n}\nfunction isImageBitmapFullySupported() {\n return typeof window !== 'undefined' &&\n typeof (ImageBitmap) !== 'undefined' &&\n window.hasOwnProperty('createImageBitmap');\n}\nfunction isNonEmptyPixels(pixels) {\n return pixels != null && pixels.width !== 0 && pixels.height !== 0;\n}\nfunction canWrapPixelsToImageBitmap(pixels) {\n return isImageBitmapFullySupported() && !(pixels instanceof ImageBitmap) &&\n isNonEmptyPixels(pixels) && !isPixelData(pixels);\n}\n/**\n * Creates a `tf.Tensor` from an image in async way.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * (await tf.browser.fromPixelsAsync(image)).print();\n * ```\n * This API is the async version of fromPixels. The API will first\n * check |WRAP_TO_IMAGEBITMAP| flag, and try to wrap the input to\n * imageBitmap if the flag is set to true.\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n *\n * @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true}\n */\nexport async function fromPixelsAsync(pixels, numChannels = 3) {\n let inputs = null;\n // Check whether the backend needs to wrap |pixels| to imageBitmap and\n // whether |pixels| can be wrapped to imageBitmap.\n if (env().getBool('WRAP_TO_IMAGEBITMAP') &&\n canWrapPixelsToImageBitmap(pixels)) {\n // Force the imageBitmap creation to not do any premultiply alpha\n // ops.\n let imageBitmap;\n try {\n // wrap in try-catch block, because createImageBitmap may not work\n // properly in some browsers, e.g.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1335594\n // tslint:disable-next-line: no-any\n imageBitmap = await createImageBitmap(pixels, { premultiplyAlpha: 'none' });\n }\n catch (e) {\n imageBitmap = null;\n }\n // createImageBitmap will clip the source size.\n // In some cases, the input will have larger size than its content.\n // E.g. new Image(10, 10) but with 1 x 1 content. Using\n // createImageBitmap will clip the size from 10 x 10 to 1 x 1, which\n // is not correct. We should avoid wrapping such resouce to\n // imageBitmap.\n if (imageBitmap != null && imageBitmap.width === pixels.width &&\n imageBitmap.height === pixels.height) {\n inputs = imageBitmap;\n }\n else {\n inputs = pixels;\n }\n }\n else {\n inputs = pixels;\n }\n return fromPixels_(inputs, numChannels);\n}\nfunction validateImgTensor(img) {\n if (img.rank !== 2 && img.rank !== 3) {\n throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${img.rank}.`);\n }\n const depth = img.rank === 2 ? 1 : img.shape[2];\n if (depth > 4 || depth === 2) {\n throw new Error(`toPixels only supports depth of size ` +\n `1, 3 or 4 but got ${depth}`);\n }\n if (img.dtype !== 'float32' && img.dtype !== 'int32') {\n throw new Error(`Unsupported type for toPixels: ${img.dtype}.` +\n ` Please use float32 or int32 tensors.`);\n }\n}\nfunction validateImageOptions(imageOptions) {\n const alpha = (imageOptions === null || imageOptions === void 0 ? void 0 : imageOptions.alpha) || 1;\n if (alpha > 1 || alpha < 0) {\n throw new Error(`Alpha value ${alpha} is suppoed to be in range [0 - 1].`);\n }\n}\n/**\n * Draws a `tf.Tensor` of pixel values to a byte array or optionally a\n * canvas.\n *\n * When the dtype of the input is 'float32', we assume values in the range\n * [0-1]. Otherwise, when input is 'int32', we assume values in the range\n * [0-255].\n *\n * Returns a promise that resolves when the canvas has been drawn to.\n *\n * @param img A rank-2 tensor with shape `[height, width]`, or a rank-3 tensor\n * of shape `[height, width, numChannels]`. If rank-2, draws grayscale. If\n * rank-3, must have depth of 1, 3 or 4. When depth of 1, draws\n * grayscale. When depth of 3, we draw with the first three components of\n * the depth dimension corresponding to r, g, b and alpha = 1. When depth of\n * 4, all four components of the depth dimension correspond to r, g, b, a.\n * @param canvas The canvas to draw to.\n *\n * @doc {heading: 'Browser', namespace: 'browser'}\n */\nexport async function toPixels(img, canvas) {\n let $img = convertToTensor(img, 'img', 'toPixels');\n if (!(img instanceof Tensor)) {\n // Assume int32 if user passed a native array.\n const originalImgTensor = $img;\n $img = cast(originalImgTensor, 'int32');\n originalImgTensor.dispose();\n }\n validateImgTensor($img);\n const [height, width] = $img.shape.slice(0, 2);\n const depth = $img.rank === 2 ? 1 : $img.shape[2];\n const data = await $img.data();\n const multiplier = $img.dtype === 'float32' ? 255 : 1;\n const bytes = new Uint8ClampedArray(width * height * 4);\n for (let i = 0; i < height * width; ++i) {\n const rgba = [0, 0, 0, 255];\n for (let d = 0; d < depth; d++) {\n const value = data[i * depth + d];\n if ($img.dtype === 'float32') {\n if (value < 0 || value > 1) {\n throw new Error(`Tensor values for a float32 Tensor must be in the ` +\n `range [0 - 1] but encountered ${value}.`);\n }\n }\n else if ($img.dtype === 'int32') {\n if (value < 0 || value > 255) {\n throw new Error(`Tensor values for a int32 Tensor must be in the ` +\n `range [0 - 255] but encountered ${value}.`);\n }\n }\n if (depth === 1) {\n rgba[0] = value * multiplier;\n rgba[1] = value * multiplier;\n rgba[2] = value * multiplier;\n }\n else {\n rgba[d] = value * multiplier;\n }\n }\n const j = i * 4;\n bytes[j + 0] = Math.round(rgba[0]);\n bytes[j + 1] = Math.round(rgba[1]);\n bytes[j + 2] = Math.round(rgba[2]);\n bytes[j + 3] = Math.round(rgba[3]);\n }\n if (canvas != null) {\n if (!hasToPixelsWarned) {\n const kernel = getKernel(Draw, ENGINE.backendName);\n if (kernel != null) {\n console.warn('tf.browser.toPixels is not efficient to draw tensor on canvas. ' +\n 'Please try tf.browser.draw instead.');\n hasToPixelsWarned = true;\n }\n }\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d');\n const imageData = new ImageData(bytes, width, height);\n ctx.putImageData(imageData, 0, 0);\n }\n if ($img !== img) {\n $img.dispose();\n }\n return bytes;\n}\n/**\n * Draws a `tf.Tensor` to a canvas.\n *\n * When the dtype of the input is 'float32', we assume values in the range\n * [0-1]. Otherwise, when input is 'int32', we assume values in the range\n * [0-255].\n *\n * @param image The tensor to draw on the canvas. Must match one of\n * these shapes:\n * - Rank-2 with shape `[height, width`]: Drawn as grayscale.\n * - Rank-3 with shape `[height, width, 1]`: Drawn as grayscale.\n * - Rank-3 with shape `[height, width, 3]`: Drawn as RGB with alpha set in\n * `imageOptions` (defaults to 1, which is opaque).\n * - Rank-3 with shape `[height, width, 4]`: Drawn as RGBA.\n * @param canvas The canvas to draw to.\n * @param options The configuration arguments for image to be drawn and the\n * canvas to draw to.\n *\n * @doc {heading: 'Browser', namespace: 'browser'}\n */\nexport function draw(image, canvas, options) {\n let $img = convertToTensor(image, 'img', 'draw');\n if (!(image instanceof Tensor)) {\n // Assume int32 if user passed a native array.\n const originalImgTensor = $img;\n $img = cast(originalImgTensor, 'int32');\n originalImgTensor.dispose();\n }\n validateImgTensor($img);\n validateImageOptions(options === null || options === void 0 ? void 0 : options.imageOptions);\n const inputs = { image: $img };\n const attrs = { canvas, options };\n ENGINE.runKernel(Draw, inputs, attrs);\n}\nexport const fromPixels = /* @__PURE__ */ op({ fromPixels_ });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLElBQUksRUFBeUIsVUFBVSxFQUFvQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNHLE9BQU8sRUFBQyxTQUFTLEVBQWUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsTUFBTSxFQUFxQixNQUFNLFdBQVcsQ0FBQztBQUVyRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFcEMsSUFBSSxtQkFBNkMsQ0FBQztBQUNsRCxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUU5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILFNBQVMsV0FBVyxDQUNoQixNQUM0QixFQUM1QixXQUFXLEdBQUcsQ0FBQztJQUNqQixpQkFBaUI7SUFDakIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0VBQWdFLENBQUMsQ0FBQztLQUN2RTtJQUNELElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7S0FDN0U7SUFDRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIs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eEMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDN0I7SUFDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixvQkFBb0IsQ0FBQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxDQUFDLENBQUM7SUFFNUMsTUFBTSxNQUFNLEdBQWUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQWMsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLFNBQVMsQ0FDWixJQUFJLEVBQUUsTUFBbUMsRUFDekMsS0FBZ0MsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RU5HSU5FfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHtlbnZ9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB7RHJhdywgRHJhd0F0dHJzLCBEcmF3SW5wdXRzLCBGcm9tUGl4ZWxzLCBGcm9tUGl4ZWxzQXR0cnMsIEZyb21QaXhlbHNJbnB1dHN9IGZyb20gJy4uL2tlcm5lbF9uYW1lcyc7XG5pbXBvcnQge2dldEtlcm5lbCwgTmFtZWRBdHRyTWFwfSBmcm9tICcuLi9rZXJuZWxfcmVnaXN0cnknO1xuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjJELCBUZW5zb3IzRH0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7TmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL3RlbnNvcl90eXBlcyc7XG5pbXBvcnQge2NvbnZlcnRUb1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yX3V0aWxfZW52JztcbmltcG9ydCB7RHJhd09wdGlvbnMsIEltYWdlT3B0aW9ucywgUGl4ZWxEYXRhLCBUZW5zb3JMaWtlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9jYXN0JztcbmltcG9ydCB7b3B9IGZyb20gJy4vb3BlcmF0aW9uJztcbmltcG9ydCB7dGVuc29yM2R9IGZyb20gJy4vdGVuc29yM2QnO1xuXG5sZXQgZnJvbVBpeGVsczJEQ29udGV4dDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xubGV0IGhhc1RvUGl4ZWxzV2FybmVkID0gZmFsc2U7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGB0Zi5UZW5zb3JgIGZyb20gYW4gaW1hZ2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGltYWdlID0gbmV3IEltYWdlRGF0YSgxLCAxKTtcbiAqIGltYWdlLmRhdGFbMF0gPSAxMDA7XG4gKiBpbWFnZS5kYXRhWzFdID0gMTUwO1xuICogaW1hZ2UuZGF0YVsyXSA9IDIwMDtcbiAqIGltYWdlLmRhdGFbM10gPSAyNTU7XG4gKlxuICogdGYuYnJvd3Nlci5mcm9tUGl4ZWxzKGltYWdlKS5wcmludCgpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBpeGVscyBUaGUgaW5wdXQgaW1hZ2UgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IgZnJvbS4gVGhlXG4gKiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYXJlIGFsbCA0LWNoYW5uZWwuIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGltYWdlXG4gKiBvYmplY3Qgd2l0aCBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIGB7ZGF0YTogVWludDhBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9YFxuICogQHBhcmFtIG51bUNoYW5uZWxzIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIEFcbiAqIG51bUNoYW5uZWxzIHZhbHVlIGxlc3MgdGhhbiA0IGFsbG93cyB5b3UgdG8gaWdub3JlIGNoYW5uZWxzLiBEZWZhdWx0cyB0b1xuICogMyAoaWdub3JlcyBhbHBoYSBjaGFubmVsIG9mIGlucHV0IGltYWdlKS5cbiAqXG4gKiBAcmV0dXJucyBBIFRlbnNvcjNEIHdpdGggdGhlIHNoYXBlIGBbaGVpZ2h0LCB3aWR0aCwgbnVtQ2hhbm5lbHNdYC5cbiAqXG4gKiBOb3RlOiBmcm9tUGl4ZWxzIGNhbiBiZSBsb3NzeSBpbiBzb21lIGNhc2VzLCBzYW1lIGltYWdlIG1heSByZXN1bHQgaW5cbiAqIHNsaWdodGx5IGRpZmZlcmVudCB0ZW5zb3IgdmFsdWVzLCBpZiByZW5kZXJlZCBieSBkaWZmZXJlbnQgcmVuZGVyaW5nXG4gKiBlbmdpbmVzLiBUaGlzIG1lYW5zIHRoYXQgcmVzdWx0cyBmcm9tIGRpZmZlcmVudCBicm93c2Vycywgb3IgZXZlbiBzYW1lXG4gKiBicm93c2VyIHdpdGggQ1BVIGFuZCBHUFUgcmVuZGVyaW5nIGVuZ2luZXMgY2FuIGJlIGRpZmZlcmVudC4gU2VlIGRpc2N1c3Npb25cbiAqIGluIGRldGFpbHM6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2lzc3Vlcy81NDgyXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Jyb3dzZXInLCBuYW1lc3BhY2U6ICdicm93c2VyJywgaWdub3JlQ0k6IHRydWV9XG4gKi9cbmZ1bmN0aW9uIGZyb21QaXhlbHNfKFxuICAgIHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgIEhUTUxWaWRlb0VsZW1lbnR8SW1hZ2VCaXRtYXAsXG4gICAgbnVtQ2hhbm5lbHMgPSAzKTogVGVuc29yM0Qge1xuICAvLyBTYW5pdHkgY2hlY2tzLlxuICBpZiAobnVtQ2hhbm5lbHMgPiA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBUZW5zb3Igd2l0aCBtb3JlIHRoYW4gNCBjaGFubmVscyBmcm9tIHBpeGVscy4nKTtcbiAgfVxuICBpZiAocGl4ZWxzID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BpeGVscyBwYXNzZWQgdG8gdGYuYnJvd3Nlci5mcm9tUGl4ZWxzKCkgY2FuIG5vdCBiZSBudWxsJyk7XG4gIH1cbiAgbGV0IGlzUGl4ZWxEYXRhID0gZmFsc2U7XG4gIGxldCBpc0ltYWdlRGF0YSA9IGZhbHNlO1xuICBsZXQgaXNWaWRlbyA9IGZhbHNlO1xuICBsZXQgaXNJbWFnZSA9IGZhbHNlO1xuICBsZXQgaXNDYW52YXNMaWtlID0gZmFsc2U7XG4gIGxldCBpc0ltYWdlQml0bWFwID0gZmFsc2U7XG4gIGlmICgocGl4ZWxzIGFzIFBpeGVsRGF0YSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICBpc1BpeGVsRGF0YSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEltYWdlRGF0YSkgIT09ICd1bmRlZmluZWQnICYmIHBpeGVscyBpbnN0YW5jZW9mIEltYWdlRGF0YSkge1xuICAgIGlzSW1hZ2VEYXRhID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiAoSFRNTFZpZGVvRWxlbWVudCkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBwaXhlbHMgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaXNWaWRlbyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEhUTUxJbWFnZUVsZW1lbnQpICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgcGl4ZWxzIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgIGlzSW1hZ2UgPSB0cnVlO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIH0gZWxzZSBpZiAoKHBpeGVscyBhcyBhbnkpLmdldENvbnRleHQgIT0gbnVsbCkge1xuICAgIGlzQ2FudmFzTGlrZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgKEltYWdlQml0bWFwKSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGl4ZWxzIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApIHtcbiAgICBpc0ltYWdlQml0bWFwID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwaXhlbHMgcGFzc2VkIHRvIHRmLmJyb3dzZXIuZnJvbVBpeGVscygpIG11c3QgYmUgZWl0aGVyIGFuICcgK1xuICAgICAgICBgSFRNTFZpZGVvRWxlbWVudCwgSFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEltYWdlRGF0YSBgICtcbiAgICAgICAgYGluIGJyb3dzZXIsIG9yIE9mZnNjcmVlbkNhbnZhcywgSW1hZ2VEYXRhIGluIHdlYndvcmtlcmAgK1xuICAgICAgICBgIG9yIHtkYXRhOiBVaW50MzJBcnJheSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9LCBgICtcbiAgICAgICAgYGJ1dCB3YXMgJHsocGl4ZWxzIGFzIHt9KS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICB9XG4gIC8vIElmIHRoZSBjdXJyZW50IGJhY2tlbmQgaGFzICdGcm9tUGl4ZWxzJyByZWdpc3RlcmVkLCBpdCBoYXMgYSBtb3JlXG4gIC8vIGVmZmljaWVudCB3YXkgb2YgaGFuZGxpbmcgcGl4ZWwgdXBsb2Fkcywgc28gd2UgY2FsbCB0aGF0LlxuICBjb25zdCBrZXJuZWwgPSBnZXRLZXJuZWwoRnJvbVBpeGVscywgRU5HSU5FLmJhY2tlbmROYW1lKTtcbiAgaWYgKGtlcm5lbCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRzOiBGcm9tUGl4ZWxzSW5wdXRzID0ge3BpeGVsc307XG4gICAgY29uc3QgYXR0cnM6IEZyb21QaXhlbHNBdHRycyA9IHtudW1DaGFubmVsc307XG4gICAgcmV0dXJuIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICAgIEZyb21QaXhlbHMsIGlucHV0cyBhcyB1bmtub3duIGFzIE5hbWVkVGVuc29yTWFwLFxuICAgICAgICBhdHRycyBhcyB1bmtub3duIGFzIE5hbWVkQXR0ck1hcCk7XG4gIH1cblxuICBjb25zdCBbd2lkdGgsIGhlaWdodF0gPSBpc1ZpZGVvID9cbiAgICAgIFtcbiAgICAgICAgKHBpeGVscyBhcyBIVE1MVmlkZW9FbGVtZW50KS52aWRlb1dpZHRoLFxuICAgICAgICAocGl4ZWxzIGFzIEhUTUxWaWRlb0VsZW1lbnQpLnZpZGVvSGVpZ2h0XG4gICAgICBdIDpcbiAgICAgIFtwaXhlbHMud2lkdGgsIHBpeGVscy5oZWlnaHRdO1xuICBsZXQgdmFsczogVWludDhDbGFtcGVkQXJyYXl8VWludDhBcnJheTtcblxuICBpZiAoaXNDYW52YXNMaWtlKSB7XG4gICAgdmFscyA9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgKHBpeGVscyBhcyBhbnkpLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpLmRhdGE7XG4gIH0gZWxzZSBpZiAoaXNJbWFnZURhdGEgfHwgaXNQaXhlbERhdGEpIHtcbiAgICB2YWxzID0gKHBpeGVscyBhcyBQaXhlbERhdGEgfCBJbWFnZURhdGEpLmRhdGE7XG4gIH0gZWxzZSBpZiAoaXNJbWFnZSB8fCBpc1ZpZGVvIHx8IGlzSW1hZ2VCaXRtYXApIHtcbiAgICBpZiAoZnJvbVBpeGVsczJEQ29udGV4dCA9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIE9mZnNjcmVlbkNhbnZhcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGZyb21QaXhlbHMyRENvbnRleHQgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsIDEpLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnQ2Fubm90IHBhcnNlIGlucHV0IGluIGN1cnJlbnQgY29udGV4dC4gJyArXG4gICAgICAgICAgICAgICdSZWFzb246IE9mZnNjcmVlbkNhbnZhcyBDb250ZXh0MkQgcmVuZGVyaW5nIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb21QaXhlbHMyRENvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KFxuICAgICAgICAgICAgJzJkJywge3dpbGxSZWFkRnJlcXVlbnRseTogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmcm9tUGl4ZWxzMkRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGZyb21QaXhlbHMyRENvbnRleHQuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICBmcm9tUGl4ZWxzMkRDb250ZXh0LmRyYXdJbWFnZShcbiAgICAgICAgcGl4ZWxzIGFzIEhUTUxWaWRlb0VsZW1lbnQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhbHMgPSBmcm9tUGl4ZWxzMkRDb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KS5kYXRhO1xuICB9XG4gIGxldCB2YWx1ZXM6IEludDMyQXJyYXk7XG4gIGlmIChudW1DaGFubmVscyA9PT0gNCkge1xuICAgIHZhbHVlcyA9IG5ldyBJbnQzMkFycmF5KHZhbHMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG51bVBpeGVscyA9IHdpZHRoICogaGVpZ2h0O1xuICAgIHZhbHVlcyA9IG5ldyBJbnQzMkFycmF5KG51bVBpeGVscyAqIG51bUNoYW5uZWxzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVBpeGVsczsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyArK2NoYW5uZWwpIHtcbiAgICAgICAgdmFsdWVzW2kgKiBudW1DaGFubmVscyArIGNoYW5uZWxdID0gdmFsc1tpICogNCArIGNoYW5uZWxdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBvdXRTaGFwZTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gW2hlaWdodCwgd2lkdGgsIG51bUNoYW5uZWxzXTtcbiAgcmV0dXJuIHRlbnNvcjNkKHZhbHVlcywgb3V0U2hhcGUsICdpbnQzMicpO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB8ZnJvbVBpeGVsc0FzeW5jfCB0byBjaGVjayB3aGV0aGVyIHRoZSBpbnB1dCBjYW5cbi8vIGJlIHdyYXBwZWQgaW50byBpbWFnZUJpdG1hcC5cbmZ1bmN0aW9uIGlzUGl4ZWxEYXRhKHBpeGVsczogUGl4ZWxEYXRhfEltYWdlRGF0YXxIVE1MSW1hZ2VFbGVtZW50fFxuICAgICAgICAgICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxcbiAgICAgICAgICAgICAgICAgICAgIEltYWdlQml0bWFwKTogcGl4ZWxzIGlzIFBpeGVsRGF0YSB7XG4gIHJldHVybiAocGl4ZWxzICE9IG51bGwpICYmICgocGl4ZWxzIGFzIFBpeGVsRGF0YSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlQml0bWFwRnVsbHlTdXBwb3J0ZWQoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgdHlwZW9mIChJbWFnZUJpdG1hcCkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2NyZWF0ZUltYWdlQml0bWFwJyk7XG59XG5cbmZ1bmN0aW9uIGlzTm9uRW1wdHlQaXhlbHMocGl4ZWxzOiBQaXhlbERhdGF8SW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8SW1hZ2VCaXRtYXApIHtcbiAgcmV0dXJuIHBpeGVscyAhPSBudWxsICYmIHBpeGVscy53aWR0aCAhPT0gMCAmJiBwaXhlbHMuaGVpZ2h0ICE9PSAwO1xufVxuXG5mdW5jdGlvbiBjYW5XcmFwUGl4ZWxzVG9JbWFnZUJpdG1hcChwaXhlbHM6IFBpeGVsRGF0YXxJbWFnZURhdGF8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFZpZGVvRWxlbWVudHxJbWFnZUJpdG1hcCkge1xuICByZXR1cm4gaXNJbWFnZUJpdG1hcEZ1bGx5U3VwcG9ydGVkKCkgJiYgIShwaXhlbHMgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkgJiZcbiAgICAgIGlzTm9uRW1wdHlQaXhlbHMocGl4ZWxzKSAmJiAhaXNQaXhlbERhdGEocGl4ZWxzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYHRmLlRlbnNvcmAgZnJvbSBhbiBpbWFnZSBpbiBhc3luYyB3YXkuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGltYWdlID0gbmV3IEltYWdlRGF0YSgxLCAxKTtcbiAqIGltYWdlLmRhdGFbMF0gPSAxMDA7XG4gKiBpbWFnZS5kYXRhWzFdID0gMTUwO1xuICogaW1hZ2UuZGF0YVsyXSA9IDIwMDtcbiAqIGltYWdlLmRhdGFbM10gPSAyNTU7XG4gKlxuICogKGF3YWl0IHRmLmJyb3dzZXIuZnJvbVBpeGVsc0FzeW5jKGltYWdlKSkucHJpbnQoKTtcbiAqIGBgYFxuICogVGhpcyBBUEkgaXMgdGhlIGFzeW5jIHZlcnNpb24gb2YgZnJvbVBpeGVscy4gVGhlIEFQSSB3aWxsIGZpcnN0XG4gKiBjaGVjayB8V1JBUF9UT19JTUFHRUJJVE1BUHwgZmxhZywgYW5kIHRyeSB0byB3cmFwIHRoZSBpbnB1dCB0b1xuICogaW1hZ2VCaXRtYXAgaWYgdGhlIGZsYWcgaXMgc2V0IHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHBpeGVscyBUaGUgaW5wdXQgaW1hZ2UgdG8gY29uc3RydWN0IHRoZSB0ZW5zb3IgZnJvbS4gVGhlXG4gKiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYXJlIGFsbCA0LWNoYW5uZWwuIFlvdSBjYW4gYWxzbyBwYXNzIGluIGFuIGltYWdlXG4gKiBvYmplY3Qgd2l0aCBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIGB7ZGF0YTogVWludDhBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9YFxuICogQHBhcmFtIG51bUNoYW5uZWxzIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIG91dHB1dCB0ZW5zb3IuIEFcbiAqIG51bUNoYW5uZWxzIHZhbHVlIGxlc3MgdGhhbiA0IGFsbG93cyB5b3UgdG8gaWdub3JlIGNoYW5uZWxzLiBEZWZhdWx0cyB0b1xuICogMyAoaWdub3JlcyBhbHBoYSBjaGFubmVsIG9mIGlucHV0IGltYWdlKS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnQnJvd3NlcicsIG5hbWVzcGFjZTogJ2Jyb3dzZXInLCBpZ25vcmVDSTogdHJ1ZX1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21QaXhlbHNBc3luYyhcbiAgICBwaXhlbHM6IFBpeGVsRGF0YXxJbWFnZURhdGF8SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudHxcbiAgICBIVE1MVmlkZW9FbGVtZW50fEltYWdlQml0bWFwLFxuICAgIG51bUNoYW5uZWxzID0gMykge1xuICBsZXQgaW5wdXRzOiBQaXhlbERhdGF8SW1hZ2VEYXRhfEhUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR8XG4gICAgICBIVE1MVmlkZW9FbGVtZW50fEltYWdlQml0bWFwID0gbnVsbDtcblxuICAvLyBDaGVjayB3aGV0aGVyIHRoZSBiYWNrZW5kIG5lZWRzIHRvIHdyYXAgfHBpeGVsc3wgdG8gaW1hZ2VCaXRtYXAgYW5kXG4gIC8vIHdoZXRoZXIgfHBpeGVsc3wgY2FuIGJlIHdyYXBwZWQgdG8gaW1hZ2VCaXRtYXAuXG4gIGlmIChlbnYoKS5nZXRCb29sKCdXUkFQX1RPX0lNQUdFQklUTUFQJykgJiZcbiAgICAgIGNhbldyYXBQaXhlbHNUb0ltYWdlQml0bWFwKHBpeGVscykpIHtcbiAgICAvLyBGb3JjZSB0aGUgaW1hZ2VCaXRtYXAgY3JlYXRpb24gdG8gbm90IGRvIGFueSBwcmVtdWx0aXBseSBhbHBoYVxuICAgIC8vIG9wcy5cbiAgICBsZXQgaW1hZ2VCaXRtYXA7XG5cbiAgICB0cnkge1xuICAgICAgLy8gd3JhcCBpbiB0cnktY2F0Y2ggYmxvY2ssIGJlY2F1c2UgY3JlYXRlSW1hZ2VCaXRtYXAgbWF5IG5vdCB3b3JrXG4gICAgICAvLyBwcm9wZXJseSBpbiBzb21lIGJyb3dzZXJzLCBlLmcuXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1NTk0XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWFueVxuICAgICAgaW1hZ2VCaXRtYXAgPSBhd2FpdCAoY3JlYXRlSW1hZ2VCaXRtYXAgYXMgYW55KShcbiAgICAgICAgICBwaXhlbHMgYXMgSW1hZ2VCaXRtYXBTb3VyY2UsIHtwcmVtdWx0aXBseUFscGhhOiAnbm9uZSd9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpbWFnZUJpdG1hcCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlSW1hZ2VCaXRtYXAgd2lsbCBjbGlwIHRoZSBzb3VyY2Ugc2l6ZS5cbiAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgaW5wdXQgd2lsbCBoYXZlIGxhcmdlciBzaXplIHRoYW4gaXRzIGNvbnRlbnQuXG4gICAgLy8gRS5nLiBuZXcgSW1hZ2UoMTAsIDEwKSBidXQgd2l0aCAxIHggMSBjb250ZW50LiBVc2luZ1xuICAgIC8vIGNyZWF0ZUltYWdlQml0bWFwIHdpbGwgY2xpcCB0aGUgc2l6ZSBmcm9tIDEwIHggMTAgdG8gMSB4IDEsIHdoaWNoXG4gICAgLy8gaXMgbm90IGNvcnJlY3QuIFdlIHNob3VsZCBhdm9pZCB3cmFwcGluZyBzdWNoIHJlc291Y2UgdG9cbiAgICAvLyBpbWFnZUJpdG1hcC5cbiAgICBpZiAoaW1hZ2VCaXRtYXAgIT0gbnVsbCAmJiBpbWFnZUJpdG1hcC53aWR0aCA9PT0gcGl4ZWxzLndpZHRoICYmXG4gICAgICAgIGltYWdlQml0bWFwLmhlaWdodCA9PT0gcGl4ZWxzLmhlaWdodCkge1xuICAgICAgaW5wdXRzID0gaW1hZ2VCaXRtYXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0cyA9IHBpeGVscztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXRzID0gcGl4ZWxzO1xuICB9XG5cbiAgcmV0dXJuIGZyb21QaXhlbHNfKGlucHV0cywgbnVtQ2hhbm5lbHMpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUltZ1RlbnNvcihpbWc6IFRlbnNvcjJEfFRlbnNvcjNEKSB7XG4gIGlmIChpbWcucmFuayAhPT0gMiAmJiBpbWcucmFuayAhPT0gMykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHRvUGl4ZWxzIG9ubHkgc3VwcG9ydHMgcmFuayAyIG9yIDMgdGVuc29ycywgZ290IHJhbmsgJHtpbWcucmFua30uYCk7XG4gIH1cbiAgY29uc3QgZGVwdGggPSBpbWcucmFuayA9PT0gMiA/IDEgOiBpbWcuc2hhcGVbMl07XG5cbiAgaWYgKGRlcHRoID4gNCB8fCBkZXB0aCA9PT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHRvUGl4ZWxzIG9ubHkgc3VwcG9ydHMgZGVwdGggb2Ygc2l6ZSBgICtcbiAgICAgICAgYDEsIDMgb3IgNCBidXQgZ290ICR7ZGVwdGh9YCk7XG4gIH1cblxuICBpZiAoaW1nLmR0eXBlICE9PSAnZmxvYXQzMicgJiYgaW1nLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgdHlwZSBmb3IgdG9QaXhlbHM6ICR7aW1nLmR0eXBlfS5gICtcbiAgICAgICAgYCBQbGVhc2UgdXNlIGZsb2F0MzIgb3IgaW50MzIgdGVuc29ycy5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUltYWdlT3B0aW9ucyhpbWFnZU9wdGlvbnM6IEltYWdlT3B0aW9ucykge1xuICBjb25zdCBhbHBoYSA9IGltYWdlT3B0aW9ucyA/LmFscGhhIHx8IDE7XG4gIGlmIChhbHBoYSA+IDEgfHwgYWxwaGEgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBbHBoYSB2YWx1ZSAke2FscGhhfSBpcyBzdXBwb2VkIHRvIGJlIGluIHJhbmdlIFswIC0gMV0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3cyBhIGB0Zi5UZW5zb3JgIG9mIHBpeGVsIHZhbHVlcyB0byBhIGJ5dGUgYXJyYXkgb3Igb3B0aW9uYWxseSBhXG4gKiBjYW52YXMuXG4gKlxuICogV2hlbiB0aGUgZHR5cGUgb2YgdGhlIGlucHV0IGlzICdmbG9hdDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTFdLiBPdGhlcndpc2UsIHdoZW4gaW5wdXQgaXMgJ2ludDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTI1NV0uXG4gKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjYW52YXMgaGFzIGJlZW4gZHJhd24gdG8uXG4gKlxuICogQHBhcmFtIGltZyBBIHJhbmstMiB0ZW5zb3Igd2l0aCBzaGFwZSBgW2hlaWdodCwgd2lkdGhdYCwgb3IgYSByYW5rLTMgdGVuc29yXG4gKiBvZiBzaGFwZSBgW2hlaWdodCwgd2lkdGgsIG51bUNoYW5uZWxzXWAuIElmIHJhbmstMiwgZHJhd3MgZ3JheXNjYWxlLiBJZlxuICogcmFuay0zLCBtdXN0IGhhdmUgZGVwdGggb2YgMSwgMyBvciA0LiBXaGVuIGRlcHRoIG9mIDEsIGRyYXdzXG4gKiBncmF5c2NhbGUuIFdoZW4gZGVwdGggb2YgMywgd2UgZHJhdyB3aXRoIHRoZSBmaXJzdCB0aHJlZSBjb21wb25lbnRzIG9mXG4gKiB0aGUgZGVwdGggZGltZW5zaW9uIGNvcnJlc3BvbmRpbmcgdG8gciwgZywgYiBhbmQgYWxwaGEgPSAxLiBXaGVuIGRlcHRoIG9mXG4gKiA0LCBhbGwgZm91ciBjb21wb25lbnRzIG9mIHRoZSBkZXB0aCBkaW1lbnNpb24gY29ycmVzcG9uZCB0byByLCBnLCBiLCBhLlxuICogQHBhcmFtIGNhbnZhcyBUaGUgY2FudmFzIHRvIGRyYXcgdG8uXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Jyb3dzZXInLCBuYW1lc3BhY2U6ICdicm93c2VyJ31cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvUGl4ZWxzKFxuICAgIGltZzogVGVuc29yMkR8VGVuc29yM0R8VGVuc29yTGlrZSxcbiAgICBjYW52YXM/OiBIVE1MQ2FudmFzRWxlbWVudCk6IFByb21pc2U8VWludDhDbGFtcGVkQXJyYXk+IHtcbiAgbGV0ICRpbWcgPSBjb252ZXJ0VG9UZW5zb3IoaW1nLCAnaW1nJywgJ3RvUGl4ZWxzJyk7XG4gIGlmICghKGltZyBpbnN0YW5jZW9mIFRlbnNvcikpIHtcbiAgICAvLyBBc3N1bWUgaW50MzIgaWYgdXNlciBwYXNzZWQgYSBuYXRpdmUgYXJyYXkuXG4gICAgY29uc3Qgb3JpZ2luYWxJbWdUZW5zb3IgPSAkaW1nO1xuICAgICRpbWcgPSBjYXN0KG9yaWdpbmFsSW1nVGVuc29yLCAnaW50MzInKTtcbiAgICBvcmlnaW5hbEltZ1RlbnNvci5kaXNwb3NlKCk7XG4gIH1cbiAgdmFsaWRhdGVJbWdUZW5zb3IoJGltZyk7XG5cbiAgY29uc3QgW2hlaWdodCwgd2lkdGhdID0gJGltZy5zaGFwZS5zbGljZSgwLCAyKTtcbiAgY29uc3QgZGVwdGggPSAkaW1nLnJhbmsgPT09IDIgPyAxIDogJGltZy5zaGFwZVsyXTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0ICRpbWcuZGF0YSgpO1xuICBjb25zdCBtdWx0aXBsaWVyID0gJGltZy5kdHlwZSA9PT0gJ2Zsb2F0MzInID8gMjU1IDogMTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodCAqIHdpZHRoOyArK2kpIHtcbiAgICBjb25zdCByZ2JhID0gWzAsIDAsIDAsIDI1NV07XG5cbiAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRlcHRoOyBkKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpICogZGVwdGggKyBkXTtcblxuICAgICAgaWYgKCRpbWcuZHR5cGUgPT09ICdmbG9hdDMyJykge1xuICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRlbnNvciB2YWx1ZXMgZm9yIGEgZmxvYXQzMiBUZW5zb3IgbXVzdCBiZSBpbiB0aGUgYCArXG4gICAgICAgICAgICAgIGByYW5nZSBbMCAtIDFdIGJ1dCBlbmNvdW50ZXJlZCAke3ZhbHVlfS5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgkaW1nLmR0eXBlID09PSAnaW50MzInKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyNTUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUZW5zb3IgdmFsdWVzIGZvciBhIGludDMyIFRlbnNvciBtdXN0IGJlIGluIHRoZSBgICtcbiAgICAgICAgICAgICAgYHJhbmdlIFswIC0gMjU1XSBidXQgZW5jb3VudGVyZWQgJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoID09PSAxKSB7XG4gICAgICAgIHJnYmFbMF0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMV0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMl0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JhW2RdID0gdmFsdWUgKiBtdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGogPSBpICogNDtcbiAgICBieXRlc1tqICsgMF0gPSBNYXRoLnJvdW5kKHJnYmFbMF0pO1xuICAgIGJ5dGVzW2ogKyAxXSA9IE1hdGgucm91bmQocmdiYVsxXSk7XG4gICAgYnl0ZXNbaiArIDJdID0gTWF0aC5yb3VuZChyZ2JhWzJdKTtcbiAgICBieXRlc1tqICsgM10gPSBNYXRoLnJvdW5kKHJnYmFbM10pO1xuICB9XG5cbiAgaWYgKGNhbnZhcyAhPSBudWxsKSB7XG4gICAgaWYgKCFoYXNUb1BpeGVsc1dhcm5lZCkge1xuICAgICAgY29uc3Qga2VybmVsID0gZ2V0S2VybmVsKERyYXcsIEVOR0lORS5iYWNrZW5kTmFtZSk7XG4gICAgICBpZiAoa2VybmVsICE9IG51bGwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ3RmLmJyb3dzZXIudG9QaXhlbHMgaXMgbm90IGVmZmljaWVudCB0byBkcmF3IHRlbnNvciBvbiBjYW52YXMuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB0cnkgdGYuYnJvd3Nlci5kcmF3IGluc3RlYWQuJyk7XG4gICAgICAgIGhhc1RvUGl4ZWxzV2FybmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnN0IGltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEoYnl0ZXMsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgfVxuICBpZiAoJGltZyAhPT0gaW1nKSB7XG4gICAgJGltZy5kaXNwb3NlKCk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG4vKipcbiAqIERyYXdzIGEgYHRmLlRlbnNvcmAgdG8gYSBjYW52YXMuXG4gKlxuICogV2hlbiB0aGUgZHR5cGUgb2YgdGhlIGlucHV0IGlzICdmbG9hdDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTFdLiBPdGhlcndpc2UsIHdoZW4gaW5wdXQgaXMgJ2ludDMyJywgd2UgYXNzdW1lIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIFswLTI1NV0uXG4gKlxuICogQHBhcmFtIGltYWdlIFRoZSB0ZW5zb3IgdG8gZHJhdyBvbiB0aGUgY2FudmFzLiBNdXN0IG1hdGNoIG9uZSBvZlxuICogdGhlc2Ugc2hhcGVzOlxuICogICAtIFJhbmstMiB3aXRoIHNoYXBlIGBbaGVpZ2h0LCB3aWR0aGBdOiBEcmF3biBhcyBncmF5c2NhbGUuXG4gKiAgIC0gUmFuay0zIHdpdGggc2hhcGUgYFtoZWlnaHQsIHdpZHRoLCAxXWA6IERyYXduIGFzIGdyYXlzY2FsZS5cbiAqICAgLSBSYW5rLTMgd2l0aCBzaGFwZSBgW2hlaWdodCwgd2lkdGgsIDNdYDogRHJhd24gYXMgUkdCIHdpdGggYWxwaGEgc2V0IGluXG4gKiAgICAgYGltYWdlT3B0aW9uc2AgKGRlZmF1bHRzIHRvIDEsIHdoaWNoIGlzIG9wYXF1ZSkuXG4gKiAgIC0gUmFuay0zIHdpdGggc2hhcGUgYFtoZWlnaHQsIHdpZHRoLCA0XWA6IERyYXduIGFzIFJHQkEuXG4gKiBAcGFyYW0gY2FudmFzIFRoZSBjYW52YXMgdG8gZHJhdyB0by5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBjb25maWd1cmF0aW9uIGFyZ3VtZW50cyBmb3IgaW1hZ2UgdG8gYmUgZHJhd24gYW5kIHRoZVxuICogICAgIGNhbnZhcyB0byBkcmF3IHRvLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdCcm93c2VyJywgbmFtZXNwYWNlOiAnYnJvd3Nlcid9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3KFxuICAgIGltYWdlOiBUZW5zb3IyRHxUZW5zb3IzRHxUZW5zb3JMaWtlLCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICAgIG9wdGlvbnM/OiBEcmF3T3B0aW9ucyk6IHZvaWQge1xuICBsZXQgJGltZyA9IGNvbnZlcnRUb1RlbnNvcihpbWFnZSwgJ2ltZycsICdkcmF3Jyk7XG4gIGlmICghKGltYWdlIGluc3RhbmNlb2YgVGVuc29yKSkge1xuICAgIC8vIEFzc3VtZSBpbnQzMiBpZiB1c2VyIHBhc3NlZCBhIG5hdGl2ZSBhcnJheS5cbiAgICBjb25zdCBvcmlnaW5hbEltZ1RlbnNvciA9ICRpbWc7XG4gICAgJGltZyA9IGNhc3Qob3JpZ2luYWxJbWdUZW5zb3IsICdpbnQzMicpO1xuICAgIG9yaWdpbmFsSW1nVGVuc29yLmRpc3Bvc2UoKTtcbiAgfVxuICB2YWxpZGF0ZUltZ1RlbnNvcigkaW1nKTtcbiAgdmFsaWRhdGVJbWFnZU9wdGlvbnMob3B0aW9ucz8uaW1hZ2VPcHRpb25zKTtcblxuICBjb25zdCBpbnB1dHM6IERyYXdJbnB1dHMgPSB7aW1hZ2U6ICRpbWd9O1xuICBjb25zdCBhdHRyczogRHJhd0F0dHJzID0ge2NhbnZhcywgb3B0aW9uc307XG4gIEVOR0lORS5ydW5LZXJuZWwoXG4gICAgICBEcmF3LCBpbnB1dHMgYXMgdW5rbm93biBhcyBOYW1lZFRlbnNvck1hcCxcbiAgICAgIGF0dHJzIGFzIHVua25vd24gYXMgTmFtZWRBdHRyTWFwKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZyb21QaXhlbHMgPSAvKiBAX19QVVJFX18gKi8gb3Aoe2Zyb21QaXhlbHNffSk7XG4iXX0=","import { computeStrides, sizeFromShape } from '../util';\n/**\n * Validate gather nd inputs.\n *\n * @param tensor The tensor contains the source values.\n * @param indices The tensor contains the indices to slice the source.\n *\n * @returns [resultShape, numUpdates, sliceSize, strides]\n */\nexport function prepareAndValidate(tensor, indices) {\n const tensorRank = tensor.shape.length;\n const indicesRank = indices.shape.length;\n if (tensorRank < 1) {\n throw new Error('tf.gatherND() expects the input to be rank 1 or higher,' +\n ` but the rank was ${tensorRank}.`);\n }\n if (indicesRank < 1) {\n throw new Error('tf.gatherND() expects the indices to be rank 1 or higher,' +\n ` but the rank was ${indicesRank}.`);\n }\n if (indices.dtype !== 'int32') {\n throw new Error('tf.gatherND() expects the indices to be int32 type,' +\n ` but the dtype was ${indices.dtype}.`);\n }\n if (indices.shape[indicesRank - 1] > tensorRank) {\n throw new Error('index innermost dimension length must be <= tensor rank; saw: ' +\n `${indices.shape[indicesRank - 1]} vs. ${tensorRank}`);\n }\n if (sizeFromShape(tensor.shape) === 0) {\n throw new Error('Requested more than 0 entries, but input is empty.' +\n ` Input shape: ${tensor.shape}.`);\n }\n const indicesShape = indices.shape;\n const sliceRank = indicesShape[indicesShape.length - 1];\n // The result shape is\n // indices.shape[:-1] + params.shape[indices.shape[-1]:]\n let nResult = 1;\n for (let i = 0; i < indicesShape.length - 1; ++i) {\n nResult *= indicesShape[i];\n }\n const inputShape = tensor.shape;\n const resultShape = indicesShape.slice();\n resultShape.pop();\n let sliceSize = 1;\n for (let i = sliceRank; i < tensorRank; ++i) {\n sliceSize *= inputShape[i];\n resultShape.push(inputShape[i]);\n }\n const strides = [...computeStrides(tensor.shape).map(stride => stride / sliceSize),\n 1].slice(0, sliceRank);\n return [resultShape, nResult, sliceSize, strides];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0aGVyX25kX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9nYXRoZXJfbmRfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFrQixFQUFFLE9BQW1CO0lBRXhFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3pDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtZQUN6RCxxQkFBcUIsVUFBVSxHQUFHLENBQUMsQ0FBQztLQUN6QztJQUNELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRDtZQUMzRCxxQkFBcUIsV0FBVyxHQUFHLENBQUMsQ0FBQztLQUMxQztJQUNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWCxxREFBcUQ7WUFDckQsc0JBQXNCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQzdDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUU7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDWCxnRUFBZ0U7WUFDaEUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsUUFBUSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUNYLG9EQUFvRDtZQUNwRCxpQkFBaUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7S0FDdkM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ25DLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhELHNCQUFzQjtJQUN0QiwwREFBMEQ7SUFDMUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNoRCxPQUFPLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVCO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUVoQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRWxCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNDLFNBQVMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQztJQUVELE1BQU0sT0FBTyxHQUNULENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU1QixPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge2NvbXB1dGVTdHJpZGVzLCBzaXplRnJvbVNoYXBlfSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBWYWxpZGF0ZSBnYXRoZXIgbmQgaW5wdXRzLlxuICpcbiAqIEBwYXJhbSB0ZW5zb3IgVGhlIHRlbnNvciBjb250YWlucyB0aGUgc291cmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBpbmRpY2VzIFRoZSB0ZW5zb3IgY29udGFpbnMgdGhlIGluZGljZXMgdG8gc2xpY2UgdGhlIHNvdXJjZS5cbiAqXG4gKiBAcmV0dXJucyBbcmVzdWx0U2hhcGUsIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlc11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVBbmRWYWxpZGF0ZSh0ZW5zb3I6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8pOlxuICAgIFtudW1iZXJbXSwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXSB7XG4gIGNvbnN0IHRlbnNvclJhbmsgPSB0ZW5zb3Iuc2hhcGUubGVuZ3RoO1xuICBjb25zdCBpbmRpY2VzUmFuayA9IGluZGljZXMuc2hhcGUubGVuZ3RoO1xuICBpZiAodGVuc29yUmFuayA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0Zi5nYXRoZXJORCgpIGV4cGVjdHMgdGhlIGlucHV0IHRvIGJlIHJhbmsgMSBvciBoaWdoZXIsJyArXG4gICAgICAgIGAgYnV0IHRoZSByYW5rIHdhcyAke3RlbnNvclJhbmt9LmApO1xuICB9XG4gIGlmIChpbmRpY2VzUmFuayA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd0Zi5nYXRoZXJORCgpIGV4cGVjdHMgdGhlIGluZGljZXMgdG8gYmUgcmFuayAxIG9yIGhpZ2hlciwnICtcbiAgICAgICAgYCBidXQgdGhlIHJhbmsgd2FzICR7aW5kaWNlc1Jhbmt9LmApO1xuICB9XG4gIGlmIChpbmRpY2VzLmR0eXBlICE9PSAnaW50MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAndGYuZ2F0aGVyTkQoKSBleHBlY3RzIHRoZSBpbmRpY2VzIHRvIGJlIGludDMyIHR5cGUsJyArXG4gICAgICAgIGAgYnV0IHRoZSBkdHlwZSB3YXMgJHtpbmRpY2VzLmR0eXBlfS5gKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZVtpbmRpY2VzUmFuayAtIDFdID4gdGVuc29yUmFuaykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2luZGV4IGlubmVybW9zdCBkaW1lbnNpb24gbGVuZ3RoIG11c3QgYmUgPD0gdGVuc29yIHJhbms7IHNhdzogJyArXG4gICAgICAgIGAke2luZGljZXMuc2hhcGVbaW5kaWNlc1JhbmsgLSAxXX0gdnMuICR7dGVuc29yUmFua31gKTtcbiAgfVxuXG4gIGlmIChzaXplRnJvbVNoYXBlKHRlbnNvci5zaGFwZSkgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXF1ZXN0ZWQgbW9yZSB0aGFuIDAgZW50cmllcywgYnV0IGlucHV0IGlzIGVtcHR5LicgK1xuICAgICAgICBgIElucHV0IHNoYXBlOiAke3RlbnNvci5zaGFwZX0uYCk7XG4gIH1cblxuICBjb25zdCBpbmRpY2VzU2hhcGUgPSBpbmRpY2VzLnNoYXBlO1xuICBjb25zdCBzbGljZVJhbmsgPSBpbmRpY2VzU2hhcGVbaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDFdO1xuXG4gIC8vIFRoZSByZXN1bHQgc2hhcGUgaXNcbiAgLy8gICBpbmRpY2VzLnNoYXBlWzotMV0gKyBwYXJhbXMuc2hhcGVbaW5kaWNlcy5zaGFwZVstMV06XVxuICBsZXQgblJlc3VsdCA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIG5SZXN1bHQgKj0gaW5kaWNlc1NoYXBlW2ldO1xuICB9XG5cbiAgY29uc3QgaW5wdXRTaGFwZSA9IHRlbnNvci5zaGFwZTtcblxuICBjb25zdCByZXN1bHRTaGFwZSA9IGluZGljZXNTaGFwZS5zbGljZSgpO1xuICByZXN1bHRTaGFwZS5wb3AoKTtcblxuICBsZXQgc2xpY2VTaXplID0gMTtcbiAgZm9yIChsZXQgaSA9IHNsaWNlUmFuazsgaSA8IHRlbnNvclJhbms7ICsraSkge1xuICAgIHNsaWNlU2l6ZSAqPSBpbnB1dFNoYXBlW2ldO1xuICAgIHJlc3VsdFNoYXBlLnB1c2goaW5wdXRTaGFwZVtpXSk7XG4gIH1cblxuICBjb25zdCBzdHJpZGVzID1cbiAgICAgIFsuLi5jb21wdXRlU3RyaWRlcyh0ZW5zb3Iuc2hhcGUpLm1hcChzdHJpZGUgPT4gc3RyaWRlIC8gc2xpY2VTaXplKSxcbiAgICAgICAxXS5zbGljZSgwLCBzbGljZVJhbmspO1xuXG4gIHJldHVybiBbcmVzdWx0U2hhcGUsIG5SZXN1bHQsIHNsaWNlU2l6ZSwgc3RyaWRlc107XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nconst NEW_AXIS = -2;\nconst SHRINK_AXIS = -1;\nexport function assertParamsValid(input, begin, size) {\n const inputRank = input.shape.length;\n util.assert(inputRank === begin.length, () => `Error in slice${inputRank}D: Length of begin ${begin} must ` +\n `match the rank of the array (${inputRank}).`);\n util.assert(inputRank === size.length, () => `Error in slice${inputRank}D: Length of size ${size} must ` +\n `match the rank of the array (${inputRank}).`);\n for (let i = 0; i < inputRank; ++i) {\n util.assert(begin[i] + size[i] <= input.shape[i], () => `Error in slice${inputRank}D: begin[${i}] + size[${i}] ` +\n `(${begin[i] + size[i]}) would overflow input.shape[${i}] (${input.shape[i]})`);\n }\n}\n/** Converts a binary mask to an array of axes. Used in stridedSlice(). */\nexport function maskToAxes(mask) {\n const axes = [];\n let axis = 0;\n while (mask > 0) {\n if (mask & 1) {\n axes.push(axis);\n }\n mask /= 2;\n axis++;\n }\n return axes;\n}\n/** Computes the output shape given the strided slice params. */\nexport function computeOutShape(begin, end, strides) {\n const size = [];\n for (let axis = 0; axis < begin.length; axis++) {\n size[axis] = Math.ceil((end[axis] - begin[axis]) / strides[axis]);\n }\n return size;\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current stride value. Otherwise, insert.\nexport function stridesWithElidedDims(strides, ellipsisInsertionIndex, numElidedAxes, inputShape) {\n const newStrides = [...strides];\n for (let i = newStrides.length; i < inputShape.length; i++) {\n newStrides.push(1);\n }\n for (let i = 0; i < numElidedAxes; i++) {\n if (i === 0) {\n newStrides[ellipsisInsertionIndex] = 1;\n }\n else {\n newStrides.splice(ellipsisInsertionIndex, 0 /* num elements to delete */, 1 /* element to add */);\n newStrides.pop();\n }\n }\n return newStrides;\n}\nfunction unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, normalizedAxis) {\n if (normalizedAxis <= ellipsisInsertionIndex) {\n return normalizedAxis;\n }\n return normalizedAxis - (numElidedAxes - 1);\n}\nfunction getElidedAxes(numElidedAxes, ellipsisInsertionIndex) {\n const elidedAxes = [];\n for (let i = 0; i < numElidedAxes; i++) {\n elidedAxes.push(ellipsisInsertionIndex + i);\n }\n return elidedAxes;\n}\n// Normalize the start, end and strides.\nexport function getNormalizedAxes(inputShape, ellipsisAxes, numInterpolatedAxes, begin, end, strides, beginMask, endMask, ellipsisMask) {\n const inputRank = inputShape.length;\n let normalizedBegin = new Array(inputRank), normalizedEnd = new Array(inputRank), normalizedStrides = new Array(inputRank);\n if (ellipsisAxes.length && numInterpolatedAxes > 0) {\n const fullIndex = ellipsisAxes[0];\n // The ellipsis applies to the masked index as well as any dimensions\n // that are interpolated.\n const numElidedAxes = numInterpolatedAxes + 1;\n normalizedBegin = startIndicesWithElidedDims(beginMask, fullIndex, numElidedAxes, begin, inputShape);\n normalizedEnd = stopIndicesWithElidedDims(endMask, fullIndex, numElidedAxes, end, inputShape);\n normalizedStrides =\n stridesWithElidedDims(strides, fullIndex, numElidedAxes, inputShape);\n }\n else {\n for (let axis = 0; axis < inputRank; axis++) {\n normalizedBegin[axis] = startForAxis(beginMask, begin, strides, inputShape, axis, ellipsisMask);\n normalizedEnd[axis] =\n stopForAxis(endMask, end, strides, inputShape, axis, ellipsisMask);\n normalizedStrides[axis] = stridesForAxis(strides, axis, ellipsisMask);\n }\n }\n return {\n begin: normalizedBegin,\n end: normalizedEnd,\n strides: normalizedStrides\n };\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current start value. Otherwise, insert.\nexport function startIndicesWithElidedDims(beginMask, ellipsisInsertionIndex, numElidedAxes, originalBegin, inputShape) {\n const newIndices = [...inputShape];\n const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex);\n for (let axis = 0; axis < newIndices.length; axis++) {\n if (elidedAxes.indexOf(axis) > -1) {\n newIndices[axis] = 0;\n }\n else {\n const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis);\n let originalValue = originalBegin[originalAxis];\n if (beginMask & 1 << originalAxis) {\n originalValue = 0;\n }\n newIndices[axis] = originalValue;\n }\n }\n return newIndices;\n}\n// Creates full selection at the elided dimensions. If the dimension matches\n// the ellipsis mask, override the current stop value. Otherwise, insert.\nexport function stopIndicesWithElidedDims(endMask, ellipsisInsertionIndex, numElidedAxes, originalEnd, inputShape) {\n const newIndices = [...inputShape];\n const elidedAxes = getElidedAxes(numElidedAxes, ellipsisInsertionIndex);\n for (let axis = 0; axis < newIndices.length; axis++) {\n if (elidedAxes.indexOf(axis) > -1) {\n newIndices[axis] = Number.MAX_SAFE_INTEGER;\n }\n else {\n const originalAxis = unnormalizeAxis(ellipsisInsertionIndex, numElidedAxes, axis);\n let originalValue = originalEnd[originalAxis];\n if (endMask & 1 << originalAxis) {\n originalValue = Number.MAX_SAFE_INTEGER;\n }\n newIndices[axis] = originalValue;\n }\n }\n for (let i = 0; i < newIndices.length; i++) {\n // Handle negative indices\n const axisSize = inputShape[i];\n if (newIndices[i] < 0) {\n newIndices[i] += axisSize;\n }\n newIndices[i] = util.clamp(0, newIndices[i], inputShape[i]);\n }\n return newIndices;\n}\nexport function stridesForAxis(strides, axis, ellipsisMask) {\n let stride = strides[axis];\n if (ellipsisMask & (1 << axis) || stride == null) {\n stride = 1;\n }\n return stride;\n}\nexport function startForAxis(beginMask, startIndices, strides, inputShape, axis, ellipsisMask) {\n // Begin with the specified index\n let start = startIndices[axis];\n const stride = strides[axis] || 1;\n // Check the axis bit from right of masked axes, or the begin index is not set\n // for the axis.\n if (beginMask & 1 << axis || ellipsisMask & 1 << axis || start == null) {\n if (stride > 0) {\n // Forward iteration - use the first element. These values will get\n // clamped below (Note: We could have set them to 0 and axis_size-1, but\n // use lowest() and max() to maintain symmetry with StopForAxis())\n start = Number.MIN_SAFE_INTEGER;\n }\n else {\n // Backward iteration - use the last element.\n start = Number.MAX_SAFE_INTEGER;\n }\n }\n // Handle negative indices\n const axisSize = inputShape[axis];\n if (start < 0) {\n start += axisSize;\n }\n // Clamping\n start = util.clamp(0, start, axisSize - 1);\n return start;\n}\nexport function stopForAxis(endMask, stopIndices, strides, inputShape, axis, ellipsisMask) {\n // Begin with the specified index\n let stop = stopIndices[axis];\n const stride = strides[axis] || 1;\n // Check the axis bit from right of masked axes, or if the stop index is not\n // set for this axis.\n if (endMask & (1 << axis) || ellipsisMask & (1 << axis) || stop == null) {\n if (stride > 0) {\n // Forward iteration - use the last element. These values will get\n // clamped below\n stop = Number.MAX_SAFE_INTEGER;\n }\n else {\n // Backward iteration - use the first element.\n stop = Number.MIN_SAFE_INTEGER;\n }\n }\n // Handle negative indices\n const axisSize = inputShape[axis];\n if (stop < 0) {\n stop += axisSize;\n }\n // Clamping\n // Because the end index points one past the last element, we need slightly\n // different clamping ranges depending on the direction.\n if (stride > 0) {\n // Forward iteration\n stop = util.clamp(0, stop, axisSize);\n }\n else {\n // Backward iteration\n stop = util.clamp(-1, stop, axisSize - 1);\n }\n return stop;\n}\n/**\n * Returns true if the slice occupies a continous set of elements in the\n * 'flat' space.\n */\nexport function isSliceContinous(shape, begin, size) {\n // Index of the first axis that has size > 1.\n let firstNonOneAxis = size.length;\n for (let i = 0; i < size.length; i++) {\n if (size[i] > 1) {\n firstNonOneAxis = i;\n break;\n }\n }\n for (let i = firstNonOneAxis + 1; i < size.length; i++) {\n if (begin[i] > 0 || size[i] !== shape[i]) {\n return false;\n }\n }\n return true;\n}\nexport function computeFlatOffset(begin, strides) {\n let flatOffset = begin.length > 0 ? begin[begin.length - 1] : 1;\n for (let i = 0; i < begin.length - 1; i++) {\n flatOffset += begin[i] * strides[i];\n }\n return flatOffset;\n}\nexport function parseSliceParams(x, begin, size) {\n // The following logic allows for more ergonomic calls.\n let begin_;\n const xRank = x.shape.length;\n if (typeof begin === 'number') {\n begin_ = [begin, ...new Array(xRank - 1).fill(0)];\n }\n else if (begin.length < xRank) {\n begin_ = begin.concat(new Array(xRank - begin.length).fill(0));\n }\n else {\n begin_ = begin.slice();\n }\n begin_.forEach(d => {\n util.assert(d !== -1, () => 'slice() does not support negative begin indexing.');\n });\n let size_;\n if (size == null) {\n size_ = new Array(xRank).fill(-1);\n }\n else if (typeof size === 'number') {\n size_ = [size, ...new Array(xRank - 1).fill(-1)];\n }\n else if (size.length < xRank) {\n size_ = size.concat(new Array(xRank - size.length).fill(-1));\n }\n else {\n size_ = size;\n }\n size_ = size_.map((d, i) => {\n if (d >= 0) {\n return d;\n }\n else {\n util.assert(d === -1, () => `Negative size values should be exactly -1 but got ` +\n `${d} for the slice() size at index ${i}.`);\n return x.shape[i] - begin_[i];\n }\n });\n return [begin_, size_];\n}\n// Convert the slicing specification from a sparse representation to a dense\n// representation. This means that all ellipses and newaxis are expanded out.\nexport function sliceInfo(xShape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask) {\n let stridesNonNull;\n if (strides == null) {\n stridesNonNull = new Array(begin.length);\n stridesNonNull.fill(1);\n }\n else {\n stridesNonNull = strides;\n }\n // Only one non-zero bit is allowed in ellipsisMask, which means ellipsisMask\n // is a power of 2. Use bit compares to ensure ellipsisMask is 0 or a power\n // of 2. When i is a power of 2, i & (i - 1) is always 0.\n // Also ref:\n // https://stackoverflow.com/questions/600293/how-to-check-if-a-number-is-a-power-of-2\n if (ellipsisMask != null && (ellipsisMask & (ellipsisMask - 1)) !== 0) {\n throw new Error('Multiple ellipses in slice is not allowed.');\n }\n // Step 1: Account for ellipsis and new axis.\n // Check for ellipsis and count how many non-newaxis there are after.\n let ellipsisSeen = false;\n const sparseSpec = {\n dims: stridesNonNull.length,\n numAddAxisAfterEllipsis: 0,\n begin: begin.slice(),\n end: end.slice(),\n strides: stridesNonNull.slice(),\n beginMask,\n endMask,\n ellipsisMask,\n newAxisMask,\n shrinkAxisMask\n };\n for (let i = 0; i < sparseSpec.dims; i++) {\n if (ellipsisSeen && ((1 << i) & newAxisMask) !== 0) {\n sparseSpec.numAddAxisAfterEllipsis++;\n }\n if ((1 << i) & ellipsisMask) {\n ellipsisSeen = true;\n }\n }\n // If no ellipsis insert one at the end.\n if (!ellipsisSeen) {\n sparseSpec.ellipsisMask |= (1 << sparseSpec.dims);\n sparseSpec.dims++; // this effects loop iteration below\n }\n // Step 2: Make a sparse spec into a full index spec.\n //\n // The sparse spec deos not correspond to the number of dimensions.\n // Make a dense spec that cooresponds to the number of dimensions.\n //\n // For example suppose foo[...,3:] on foo.shape = [2, 2, 3] then we need to\n // produce the missing beginMask for the first two dimensions i.e. from\n // beginMaskSpec = 0, endMaskSpec = 2, we achieve beginMask = 6 (110),\n // endMask = 7 (111).\n const denseSpec = {\n dims: xShape.length,\n beginMask: 0,\n endMask: 0,\n beginValid: false,\n endValid: false\n };\n buildDenseSpec(sparseSpec, denseSpec);\n // Step 3: Make implicit ranges (non-zero beginMasks and endMasks) explicit\n // and bounds check.\n let isIdentity = true;\n let sliceDim0 = true;\n let isSimpleSlice = true;\n const processingShape = [];\n const finalShape = [];\n for (let i = 0; i < xShape.length; ++i) {\n if (denseSpec.strides[i] === 0) {\n throw Error(`strides[${i}] must be non-zero`);\n }\n const shrinkI = !!(denseSpec.shrinkAxisMask & (1 << i));\n const dimI = xShape[i];\n if (dimI === -1) {\n processingShape.push(shrinkI ? 1 : -1);\n continue;\n }\n const masks = [denseSpec.beginMask & (1 << i), denseSpec.endMask & (1 << i)];\n const validRange = [\n denseSpec.strides[i] > 0 ? 0 : -1,\n denseSpec.strides[i] > 0 ? dimI : dimI - 1\n ];\n if (shrinkI && denseSpec.strides[i] <= 0) {\n throw Error('only stride 1 allowed on non-range indexing.');\n }\n isSimpleSlice = isSimpleSlice && (denseSpec.strides[i] === 1);\n const beginAndEndMasked = !!((denseSpec.beginMask & (1 << i)) && (denseSpec.endMask & (1 << i)));\n if (denseSpec.beginValid && denseSpec.endValid) {\n if (shrinkI) {\n // If we are shrinking, the end index is now possibly incorrect. In\n // particular foo[-1] produces sparseBegin = -1, sparseEnd = 0.\n // and canonical puts these to n-1 and 0, which implies a degenerate\n // interval. Fortunately, it is now safe to re-create end as begin + 1.\n const xFwd = denseSpec.begin[i] < 0 ? dimI + denseSpec.begin[i] :\n denseSpec.begin[i];\n denseSpec.begin[i] = xFwd;\n denseSpec.end[i] = denseSpec.begin[i] + 1;\n if (xFwd < 0 || xFwd >= dimI) {\n throw Error(`slice index ${denseSpec.begin[i]} of dimension ${i} out of bounds.`);\n }\n }\n else {\n denseSpec.begin[i] = canonical(denseSpec.begin[i], 0, denseSpec.strides[i], dimI, masks, validRange);\n denseSpec.end[i] = canonical(denseSpec.end[i], 1, denseSpec.strides[i], dimI, masks, validRange);\n }\n // Update optimization values\n const takeAllInDimension = denseSpec.strides[i] === 1 &&\n denseSpec.begin[i] === 0 && denseSpec.end[i] === dimI;\n isIdentity = isIdentity && takeAllInDimension;\n sliceDim0 = sliceDim0 &&\n ((i === 0 && denseSpec.strides[i] === 1) || takeAllInDimension);\n }\n else {\n isIdentity =\n isIdentity && ((denseSpec.strides[i] === 1) && beginAndEndMasked);\n sliceDim0 = sliceDim0 &&\n ((i === 0 && denseSpec.strides[i] === 1) || beginAndEndMasked);\n }\n // Compute the processing shape (the intermediate Eigen will produce)\n let intervalLength;\n let knownInterval = false;\n if (denseSpec.beginValid && denseSpec.endValid) {\n intervalLength = denseSpec.end[i] - denseSpec.begin[i];\n knownInterval = true;\n }\n else if (shrinkI) {\n // The dimension is still known as 1 for the processingShape, but will be\n // discarded for the final shape.\n intervalLength = 1;\n knownInterval = true;\n }\n else if (beginAndEndMasked) {\n // Even if we don't have values for begin or end, we do know that this\n // dimension covers the whole interval. If we have shape information for\n // this dimension, that tells us the interval length.\n if (dimI >= 0) {\n if (denseSpec.strides[i] < 0) {\n intervalLength = -dimI;\n }\n else {\n intervalLength = dimI;\n }\n knownInterval = true;\n }\n }\n if (knownInterval) {\n let sizeI;\n // Hold zero if the interval is degenerate, otherwise account for\n // remainder\n if (intervalLength === 0 ||\n ((intervalLength < 0) !== (denseSpec.strides[i] < 0))) {\n sizeI = 0;\n }\n else {\n sizeI = Math.trunc(intervalLength / denseSpec.strides[i]) +\n (intervalLength % denseSpec.strides[i] !== 0 ? 1 : 0);\n }\n processingShape.push(sizeI);\n }\n else {\n processingShape.push(-1);\n }\n }\n // Step 4: Compute the final shape\n //\n // newAxis will increase dimension by 1 (with a one-size dimension)\n // slices like foo[3, ...] will reduce dimension by 1.\n // This cannot be done earlier, because it depends on Step 3.\n for (let denseDim = 0; denseDim < denseSpec.finalShapeGatherIndices.length; ++denseDim) {\n const gatherIndex = denseSpec.finalShapeGatherIndices[denseDim];\n if (gatherIndex >= 0) {\n finalShape.push(processingShape[gatherIndex]);\n }\n else if (gatherIndex === NEW_AXIS) {\n finalShape.push(1);\n }\n }\n const finalShapeSparse = finalShape.filter((dim, i) => denseSpec.finalShapeGatherIndices[i] !== NEW_AXIS);\n return {\n finalShapeSparse,\n finalShape,\n isIdentity,\n sliceDim0,\n isSimpleSlice,\n begin: denseSpec.begin,\n end: denseSpec.end,\n strides: denseSpec.strides\n };\n}\nfunction buildDenseSpec(sparse, dense) {\n dense.beginMask = 0;\n dense.endMask = 0;\n dense.shrinkAxisMask = 0;\n let fullIndex = 0;\n dense.beginValid = sparse.begin != null;\n dense.endValid = sparse.end != null;\n dense.begin = new Array(dense.dims);\n dense.end = new Array(dense.dims);\n dense.strides = new Array(dense.dims);\n dense.finalShapeGatherIndices = [];\n dense.finalShapeGatherIndicesSparse = [];\n dense.inputShapeGatherIndicesSparse = new Array(dense.dims);\n for (let i = 0; i < sparse.dims; i++) {\n if ((1 << i) & sparse.ellipsisMask) {\n // Only the bit that has ellipsis will fall in this condition.\n // Expand the ellipsis into the appropriate indices\n // Note: this only works because we guaranteed one ellipsis.\n const nextIndex = Math.min(dense.dims - (sparse.dims - i) + 1 + sparse.numAddAxisAfterEllipsis, dense.dims);\n for (; fullIndex < nextIndex; fullIndex++) {\n // newAxis aren't real axis so you have to skip.\n dense.begin[fullIndex] = 0;\n dense.end[fullIndex] = 0;\n dense.strides[fullIndex] = 1;\n dense.beginMask |= (1 << fullIndex);\n dense.endMask |= (1 << fullIndex);\n dense.finalShapeGatherIndices.push(fullIndex);\n dense.finalShapeGatherIndicesSparse.push(-1);\n dense.inputShapeGatherIndicesSparse[fullIndex] = i;\n }\n }\n else if ((1 << i) & sparse.newAxisMask) {\n // Only the bit that has newAxis will fall in this condition.\n dense.finalShapeGatherIndices.push(NEW_AXIS);\n dense.finalShapeGatherIndicesSparse.push(-1);\n }\n else {\n if (fullIndex === dense.begin.length) {\n throw Error(`Index out of range using input dim ${fullIndex}; input ` +\n `has only ${dense.dims} dims, ${dense.begin.length}.`);\n }\n // Gather slicing spec into appropriate index.\n if (sparse.begin != null) {\n dense.begin[fullIndex] = sparse.begin[i];\n }\n if (sparse.end != null) {\n dense.end[fullIndex] = sparse.end[i];\n }\n dense.strides[fullIndex] = sparse.strides[i];\n if (sparse.beginMask & (1 << i)) {\n dense.beginMask |= (1 << fullIndex);\n }\n if (sparse.endMask & (1 << i)) {\n dense.endMask |= (1 << fullIndex);\n }\n // If shrink, record where to get the dimensionality from (i.e. newAxis)\n // creates a fake 1 size dimension. Also remember shrink axis (now in\n // dense form) so we can ignore dense.end below.\n if (sparse.shrinkAxisMask & (1 << i)) {\n dense.finalShapeGatherIndices.push(SHRINK_AXIS);\n dense.finalShapeGatherIndicesSparse.push(-1);\n dense.shrinkAxisMask |= (1 << fullIndex);\n }\n else {\n dense.finalShapeGatherIndices.push(fullIndex);\n // Remember that where in the sparse shape the dense dim comes from.\n dense.finalShapeGatherIndicesSparse.push(i);\n }\n dense.inputShapeGatherIndicesSparse[fullIndex] = i;\n fullIndex++;\n }\n }\n}\nfunction canonical(x, c, strideI, dimI, masks, validRange) {\n if (masks[c]) {\n return strideI > 0 ? validRange[c] : validRange[(c + 1) & 1];\n }\n else {\n const xFwd = x < 0 ? dimI + x : x; // make negative indices positive\n return xFwd < validRange[0] ? validRange[0] :\n xFwd > validRange[1] ? validRange[1] : xFwd;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NsaWNlX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUE2RHZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsS0FBaUIsRUFBRSxLQUFlLEVBQUUsSUFBYztJQUNwRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLENBQUMsTUFBTSxDQUNQLFNBQVMsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUMxQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsU0FBUyxzQkFBc0IsS0FBSyxRQUFRO1FBQy9ELGdDQUFnQyxTQUFTLElBQUksQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQ1AsU0FBUyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQ3pCLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixTQUFTLHFCQUFxQixJQUFJLFFBQVE7UUFDN0QsZ0NBQWdDLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFFdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDcEMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLFNBQVMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJO1lBQzFELElBQUksS0FBSyxDQUFD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UyxDQUFDLENBQUM7Z0JBQzlDLG9FQUFvRTtnQkFDcEUsS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztZQUNELEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsU0FBUyxFQUFFLENBQUM7U0FDYjtLQUNGO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUNkLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZSxFQUFFLElBQVksRUFBRSxLQUFlLEVBQ3BFLFVBQW9CO0lBQ3RCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ1osT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5RDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsaUNBQWlDO1FBQ3JFLE9BQU8sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUMzRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5jb25zdCBORVdfQVhJUyA9IC0yO1xuY29uc3QgU0hSSU5LX0FYSVMgPSAtMTtcblxuLy8gU3BhcnNlIHNsaWNpbmcgc3BlY2lmaWNhdGlvblxuLy8gaWYgb25lIGRvZXMgZm9vWzM6NSwgLi4uLCAtM10sIHRoZSBiZWdpbiwgZW5kIGFuZCBzdHJpZGVzIHdpbGwgaGF2ZSBsZW5ndGhcbi8vIG9mIDMuXG5pbnRlcmZhY2UgU3RyaWRlZFNsaWNlU3BhcnNlU3BlYyB7XG4gIGRpbXM6IG51bWJlcjtcbiAgbnVtQWRkQXhpc0FmdGVyRWxsaXBzaXM6IG51bWJlcjtcbiAgYmVnaW46IG51bWJlcltdO1xuICBlbmQ6IG51bWJlcltdO1xuICBzdHJpZGVzOiBudW1iZXJbXTtcbiAgYmVnaW5NYXNrOiBudW1iZXI7XG4gIGVuZE1hc2s6IG51bWJlcjtcbiAgZWxsaXBzaXNNYXNrOiBudW1iZXI7XG4gIG5ld0F4aXNNYXNrOiBudW1iZXI7XG4gIHNocmlua0F4aXNNYXNrOiBudW1iZXI7XG59XG5cbi8vIERlbnNlIHNsaWNpbmcgc3BlY2lmaWNhdGlvblxuLy8gYWxsIGVsbGlwc2VzIGFuZCBuZXdheGlzIGFyZSBleHBhbmRlZCBvdXQuIFNvIGlmIGZvb1szOjUsIC4uLiwgLTNdIHdoZXJlIGZvb1xuLy8gaXMgMTAgZGltZW5zaW9uYWwsIGVhY2ggYXJyYXkgb2YgYmVnaW4sIGVuZCwgc3RyaWRlcyB3aWxsIGhhdmUgMTAgZW50cmllc1xuLy8gd2hlcmUgYXMgdGhlIHNwYXJzZSBjYW4gaGF2ZSBsZW5ndGggbGVzcyB0aGFuIHRoZSByYW5rIG9mIGZvby5cbmludGVyZmFjZSBTdHJpZGVkU2xpY2VEZW5zZVNwZWMge1xuICBkaW1zOiBudW1iZXI7XG4gIGJlZ2luTWFzaz86IG51bWJlcjtcbiAgZW5kTWFzaz86IG51bWJlcjtcbiAgYmVnaW5WYWxpZDogYm9vbGVhbjtcbiAgZW5kVmFsaWQ6IGJvb2xlYW47XG4gIGJlZ2luPzogbnVtYmVyW107XG4gIGVuZD86IG51bWJlcltdO1xuICBzdHJpZGVzPzogbnVtYmVyW107XG4gIC8vIFRoaXMgYXJyYXkgaGVscHMgY29uc3RydWN0IHRoZSBmaW5hbCBzaGFwZSBvZiB0aGUgc2xpY2UuXG4gIC8vIFRoZSBmaW5hbCB0ZW5zb3IgaXMgcmVkdWNlZCBpbiByYW5rIHdoZW5ldmVyIGEgc2luZ2xlIGluZGV4IGUuZy4gZm9vWzNdXG4gIC8vIGlzIGNhbGxlZCBmb3IuIFRoZSBmaW5hbCB0ZW5zb3IgaW5jcmVhc2VzIGluIHJhbmsgd2l0aCBuZXdBeGlzIGVudHJpZXMuXG4gIC8vIElmIGFuIGluZGV4IGluIHRoaXMgYXJyYXkgaXMgcG9zaXRpdmUsIHRoZSBzaXplIG9mIHRoZSBkaW1lbnNpb24gaXNcbiAgLy8gb2J0YWluZWQgZnJvbSBjYW5vbmljYWwgZW5kLWJlZ2luLiAgT3RoZXJ3aXNlLCBpZiBpdCBpcyBhIE5FV19BWElTLCBpdCB3aWxsXG4gIC8vIGJlIDEuIEEgc2hydW5rIGRpbWVuc2lvbiBpcyBza2lwcGVkLlxuICBmaW5hbFNoYXBlR2F0aGVySW5kaWNlcz86IG51bWJlcltdO1xuICAvLyBUaGlzIGFycmF5IGhhcyB0aGUgc2FtZSBzaXplIGFzIGZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLCBidXQgaXQgcmVtZW1iZXJzXG4gIC8vIHRoZSBzcGFyc2UgaW5kZXggdGhhdCBhIGRpbWVuc2lvbiBjb21lcyBmcm9tLCBpbnN0ZWFkIG9mIGRlbnNlIGluZGV4LlxuICAvLyBBIC0xIGluIHRoaXMgdmVjdG9yIG1lYW5zIHRoZSBpbmRleCBpcyBub3QgZnJvbSB0aGUgc3BhcnNlIGlucHV0LlxuICBmaW5hbFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZT86IG51bWJlcltdO1xuICBpbnB1dFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZT86IG51bWJlcltdO1xuICAvLyBUaGUgZGVuc2UgaW5kZXhlZCBzaHJpbmsgbWFzayBpcyB3aGljaCBwcm9jZXNzaW5nIGRpbWVuc2lvbnMgc2hvdWxkIGJlXG4gIC8vIHNocnVuay4gRm9yIGV4YW1wbGUsIGlmIGZvby5zaGFwZSA9IFsxMCwgMTAsIDEwLCAxMF0sIGZvb1szLCAuLi4sIDVdIGhhc1xuICAvLyBzcGFyc2VTaHJpbmtBeGlzTWFzayBvZiA1ICgwMTAxKSBhbmQgZGVuc2VTaHJpbmtBeGlzTWFzayBvZiA5ICgxMDAxKSxcbiAgLy8geWllbGRpbmcgYSBmaW5hbCBzaGFwZSBbMTAsIDEwXS5cbiAgc2hyaW5rQXhpc01hc2s/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNsaWNlSW5mbyA9IHtcbiAgZmluYWxTaGFwZVNwYXJzZTogbnVtYmVyW10sXG4gIGZpbmFsU2hhcGU6IG51bWJlcltdLFxuICBpc0lkZW50aXR5OiBib29sZWFuLFxuICBzbGljZURpbTA6IGJvb2xlYW4sXG4gIGlzU2ltcGxlU2xpY2U6IGJvb2xlYW4sXG4gIGJlZ2luOiBudW1iZXJbXSxcbiAgZW5kOiBudW1iZXJbXSxcbiAgc3RyaWRlczogbnVtYmVyW11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXJhbXNWYWxpZChcbiAgICBpbnB1dDogVGVuc29ySW5mbywgYmVnaW46IG51bWJlcltdLCBzaXplOiBudW1iZXJbXSk6IHZvaWQge1xuICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dC5zaGFwZS5sZW5ndGg7XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5wdXRSYW5rID09PSBiZWdpbi5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2xpY2Uke2lucHV0UmFua31EOiBMZW5ndGggb2YgYmVnaW4gJHtiZWdpbn0gbXVzdCBgICtcbiAgICAgICAgICBgbWF0Y2ggdGhlIHJhbmsgb2YgdGhlIGFycmF5ICgke2lucHV0UmFua30pLmApO1xuICB1dGlsLmFzc2VydChcbiAgICAgIGlucHV0UmFuayA9PT0gc2l6ZS5sZW5ndGgsXG4gICAgICAoKSA9PiBgRXJyb3IgaW4gc2xpY2Uke2lucHV0UmFua31EOiBMZW5ndGggb2Ygc2l6ZSAke3NpemV9IG11c3QgYCArXG4gICAgICAgICAgYG1hdGNoIHRoZSByYW5rIG9mIHRoZSBhcnJheSAoJHtpbnB1dFJhbmt9KS5gKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0UmFuazsgKytpKSB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGJlZ2luW2ldICsgc2l6ZVtpXSA8PSBpbnB1dC5zaGFwZVtpXSxcbiAgICAgICAgKCkgPT4gYEVycm9yIGluIHNsaWNlJHtpbnB1dFJhbmt9RDogYmVnaW5bJHtpfV0gKyBzaXplWyR7aX1dIGAgK1xuICAgICAgICAgICAgYCgke2JlZ2luW2ldICsgc2l6ZVtpXX0pIHdvdWxkIG92ZXJmbG93IGlucHV0LnNoYXBlWyR7aX1dICgke1xuICAgICAgICAgICAgICAgICAgaW5wdXQuc2hhcGVbaV19KWApO1xuICB9XG59XG5cbi8qKiBDb252ZXJ0cyBhIGJpbmFyeSBtYXNrIHRvIGFuIGFycmF5IG9mIGF4ZXMuIFVzZWQgaW4gc3RyaWRlZFNsaWNlKCkuICovXG5leHBvcnQgZnVuY3Rpb24gbWFza1RvQXhlcyhtYXNrOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGF4ZXMgPSBbXTtcbiAgbGV0IGF4aXMgPSAwO1xuICB3aGlsZSAobWFzayA+IDApIHtcbiAgICBpZiAobWFzayAmIDEpIHtcbiAgICAgIGF4ZXMucHVzaChheGlzKTtcbiAgICB9XG4gICAgbWFzayAvPSAyO1xuICAgIGF4aXMrKztcbiAgfVxuICByZXR1cm4gYXhlcztcbn1cblxuLyoqIENvbXB1dGVzIHRoZSBvdXRwdXQgc2hhcGUgZ2l2ZW4gdGhlIHN0cmlkZWQgc2xpY2UgcGFyYW1zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdXRTaGFwZShcbiAgICBiZWdpbjogbnVtYmVyW10sIGVuZDogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCBzaXplID0gW107XG4gIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgYmVnaW4ubGVuZ3RoOyBheGlzKyspIHtcbiAgICBzaXplW2F4aXNdID0gTWF0aC5jZWlsKChlbmRbYXhpc10gLSBiZWdpbltheGlzXSkgLyBzdHJpZGVzW2F4aXNdKTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy8gQ3JlYXRlcyBmdWxsIHNlbGVjdGlvbiBhdCB0aGUgZWxpZGVkIGRpbWVuc2lvbnMuIElmIHRoZSBkaW1lbnNpb24gbWF0Y2hlc1xuLy8gdGhlIGVsbGlwc2lzIG1hc2ssIG92ZXJyaWRlIHRoZSBjdXJyZW50IHN0cmlkZSB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RyaWRlc1dpdGhFbGlkZWREaW1zKFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBlbGxpcHNpc0luc2VydGlvbkluZGV4OiBudW1iZXIsIG51bUVsaWRlZEF4ZXM6IG51bWJlcixcbiAgICBpbnB1dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbmV3U3RyaWRlcyA9IFsuLi5zdHJpZGVzXTtcbiAgZm9yIChsZXQgaSA9IG5ld1N0cmlkZXMubGVuZ3RoOyBpIDwgaW5wdXRTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1N0cmlkZXMucHVzaCgxKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUVsaWRlZEF4ZXM7IGkrKykge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICBuZXdTdHJpZGVzW2VsbGlwc2lzSW5zZXJ0aW9uSW5kZXhdID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RyaWRlcy5zcGxpY2UoXG4gICAgICAgICAgZWxsaXBzaXNJbnNlcnRpb25JbmRleCwgMCAvKiBudW0gZWxlbWVudHMgdG8gZGVsZXRlICovLFxuICAgICAgICAgIDEgLyogZWxlbWVudCB0byBhZGQgKi8pO1xuICAgICAgbmV3U3RyaWRlcy5wb3AoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1N0cmlkZXM7XG59XG5cbmZ1bmN0aW9uIHVubm9ybWFsaXplQXhpcyhcbiAgICBlbGxpcHNpc0luc2VydGlvbkluZGV4OiBudW1iZXIsIG51bUVsaWRlZEF4ZXM6IG51bWJlcixcbiAgICBub3JtYWxpemVkQXhpczogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKG5vcm1hbGl6ZWRBeGlzIDw9IGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZEF4aXM7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZEF4aXMgLSAobnVtRWxpZGVkQXhlcyAtIDEpO1xufVxuXG5mdW5jdGlvbiBnZXRFbGlkZWRBeGVzKG51bUVsaWRlZEF4ZXM6IG51bWJlciwgZWxsaXBzaXNJbnNlcnRpb25JbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IGVsaWRlZEF4ZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1FbGlkZWRBeGVzOyBpKyspIHtcbiAgICBlbGlkZWRBeGVzLnB1c2goZWxsaXBzaXNJbnNlcnRpb25JbmRleCArIGkpO1xuICB9XG4gIHJldHVybiBlbGlkZWRBeGVzO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHN0YXJ0LCBlbmQgYW5kIHN0cmlkZXMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEF4ZXMoXG4gICAgaW5wdXRTaGFwZTogbnVtYmVyW10sIGVsbGlwc2lzQXhlczogbnVtYmVyW10sIG51bUludGVycG9sYXRlZEF4ZXM6IG51bWJlcixcbiAgICBiZWdpbjogbnVtYmVyW10sIGVuZDogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLCBiZWdpbk1hc2s6IG51bWJlcixcbiAgICBlbmRNYXNrOiBudW1iZXIsXG4gICAgZWxsaXBzaXNNYXNrOiBudW1iZXIpOiB7YmVnaW46IG51bWJlcltdLCBlbmQ6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXX0ge1xuICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dFNoYXBlLmxlbmd0aDtcbiAgbGV0IG5vcm1hbGl6ZWRCZWdpbiA9IG5ldyBBcnJheShpbnB1dFJhbmspLFxuICAgICAgbm9ybWFsaXplZEVuZCA9IG5ldyBBcnJheShpbnB1dFJhbmspLFxuICAgICAgbm9ybWFsaXplZFN0cmlkZXMgPSBuZXcgQXJyYXkoaW5wdXRSYW5rKTtcbiAgaWYgKGVsbGlwc2lzQXhlcy5sZW5ndGggJiYgbnVtSW50ZXJwb2xhdGVkQXhlcyA+IDApIHtcbiAgICBjb25zdCBmdWxsSW5kZXggPSBlbGxpcHNpc0F4ZXNbMF07XG5cbiAgICAvLyBUaGUgZWxsaXBzaXMgYXBwbGllcyB0byB0aGUgbWFza2VkIGluZGV4IGFzIHdlbGwgYXMgYW55IGRpbWVuc2lvbnNcbiAgICAvLyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQuXG4gICAgY29uc3QgbnVtRWxpZGVkQXhlcyA9IG51bUludGVycG9sYXRlZEF4ZXMgKyAxO1xuICAgIG5vcm1hbGl6ZWRCZWdpbiA9IHN0YXJ0SW5kaWNlc1dpdGhFbGlkZWREaW1zKFxuICAgICAgICBiZWdpbk1hc2ssIGZ1bGxJbmRleCwgbnVtRWxpZGVkQXhlcywgYmVnaW4sIGlucHV0U2hhcGUpO1xuICAgIG5vcm1hbGl6ZWRFbmQgPSBzdG9wSW5kaWNlc1dpdGhFbGlkZWREaW1zKFxuICAgICAgICBlbmRNYXNrLCBmdWxsSW5kZXgsIG51bUVsaWRlZEF4ZXMsIGVuZCwgaW5wdXRTaGFwZSk7XG4gICAgbm9ybWFsaXplZFN0cmlkZXMgPVxuICAgICAgICBzdHJpZGVzV2l0aEVsaWRlZERpbXMoc3RyaWRlcywgZnVsbEluZGV4LCBudW1FbGlkZWRBeGVzLCBpbnB1dFNoYXBlKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBheGlzID0gMDsgYXhpcyA8IGlucHV0UmFuazsgYXhpcysrKSB7XG4gICAgICBub3JtYWxpemVkQmVnaW5bYXhpc10gPSBzdGFydEZvckF4aXMoXG4gICAgICAgICAgYmVnaW5NYXNrLCBiZWdpbiwgc3RyaWRlcywgaW5wdXRTaGFwZSwgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICAgIG5vcm1hbGl6ZWRFbmRbYXhpc10gPVxuICAgICAgICAgIHN0b3BGb3JBeGlzKGVuZE1hc2ssIGVuZCwgc3RyaWRlcywgaW5wdXRTaGFwZSwgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICAgIG5vcm1hbGl6ZWRTdHJpZGVzW2F4aXNdID0gc3RyaWRlc0ZvckF4aXMoc3RyaWRlcywgYXhpcywgZWxsaXBzaXNNYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJlZ2luOiBub3JtYWxpemVkQmVnaW4sXG4gICAgZW5kOiBub3JtYWxpemVkRW5kLFxuICAgIHN0cmlkZXM6IG5vcm1hbGl6ZWRTdHJpZGVzXG4gIH07XG59XG5cbi8vIENyZWF0ZXMgZnVsbCBzZWxlY3Rpb24gYXQgdGhlIGVsaWRlZCBkaW1lbnNpb25zLiBJZiB0aGUgZGltZW5zaW9uIG1hdGNoZXNcbi8vIHRoZSBlbGxpcHNpcyBtYXNrLCBvdmVycmlkZSB0aGUgY3VycmVudCBzdGFydCB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJbmRpY2VzV2l0aEVsaWRlZERpbXMoXG4gICAgYmVnaW5NYXNrOiBudW1iZXIsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXg6IG51bWJlciwgbnVtRWxpZGVkQXhlczogbnVtYmVyLFxuICAgIG9yaWdpbmFsQmVnaW46IG51bWJlcltdLCBpbnB1dFNoYXBlOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbmV3SW5kaWNlcyA9IFsuLi5pbnB1dFNoYXBlXTtcbiAgY29uc3QgZWxpZGVkQXhlcyA9IGdldEVsaWRlZEF4ZXMobnVtRWxpZGVkQXhlcywgZWxsaXBzaXNJbnNlcnRpb25JbmRleCk7XG5cbiAgZm9yIChsZXQgYXhpcyA9IDA7IGF4aXMgPCBuZXdJbmRpY2VzLmxlbmd0aDsgYXhpcysrKSB7XG4gICAgaWYgKGVsaWRlZEF4ZXMuaW5kZXhPZihheGlzKSA+IC0xKSB7XG4gICAgICBuZXdJbmRpY2VzW2F4aXNdID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3JpZ2luYWxBeGlzID1cbiAgICAgICAgICB1bm5vcm1hbGl6ZUF4aXMoZWxsaXBzaXNJbnNlcnRpb25JbmRleCwgbnVtRWxpZGVkQXhlcywgYXhpcyk7XG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsQmVnaW5bb3JpZ2luYWxBeGlzXTtcbiAgICAgIGlmIChiZWdpbk1hc2sgJiAxIDw8IG9yaWdpbmFsQXhpcykge1xuICAgICAgICBvcmlnaW5hbFZhbHVlID0gMDtcbiAgICAgIH1cblxuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdJbmRpY2VzO1xufVxuXG4vLyBDcmVhdGVzIGZ1bGwgc2VsZWN0aW9uIGF0IHRoZSBlbGlkZWQgZGltZW5zaW9ucy4gSWYgdGhlIGRpbWVuc2lvbiBtYXRjaGVzXG4vLyB0aGUgZWxsaXBzaXMgbWFzaywgb3ZlcnJpZGUgdGhlIGN1cnJlbnQgc3RvcCB2YWx1ZS4gT3RoZXJ3aXNlLCBpbnNlcnQuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEluZGljZXNXaXRoRWxpZGVkRGltcyhcbiAgICBlbmRNYXNrOiBudW1iZXIsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXg6IG51bWJlciwgbnVtRWxpZGVkQXhlczogbnVtYmVyLFxuICAgIG9yaWdpbmFsRW5kOiBudW1iZXJbXSwgaW5wdXRTaGFwZTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IG5ld0luZGljZXMgPSBbLi4uaW5wdXRTaGFwZV07XG4gIGNvbnN0IGVsaWRlZEF4ZXMgPSBnZXRFbGlkZWRBeGVzKG51bUVsaWRlZEF4ZXMsIGVsbGlwc2lzSW5zZXJ0aW9uSW5kZXgpO1xuXG4gIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgbmV3SW5kaWNlcy5sZW5ndGg7IGF4aXMrKykge1xuICAgIGlmIChlbGlkZWRBeGVzLmluZGV4T2YoYXhpcykgPiAtMSkge1xuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEF4aXMgPVxuICAgICAgICAgIHVubm9ybWFsaXplQXhpcyhlbGxpcHNpc0luc2VydGlvbkluZGV4LCBudW1FbGlkZWRBeGVzLCBheGlzKTtcbiAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxFbmRbb3JpZ2luYWxBeGlzXTtcbiAgICAgIGlmIChlbmRNYXNrICYgMSA8PCBvcmlnaW5hbEF4aXMpIHtcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgfVxuICAgICAgbmV3SW5kaWNlc1theGlzXSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXNcbiAgICBjb25zdCBheGlzU2l6ZSA9IGlucHV0U2hhcGVbaV07XG4gICAgaWYgKG5ld0luZGljZXNbaV0gPCAwKSB7XG4gICAgICBuZXdJbmRpY2VzW2ldICs9IGF4aXNTaXplO1xuICAgIH1cbiAgICBuZXdJbmRpY2VzW2ldID0gdXRpbC5jbGFtcCgwLCBuZXdJbmRpY2VzW2ldLCBpbnB1dFNoYXBlW2ldKTtcbiAgfVxuICByZXR1cm4gbmV3SW5kaWNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlkZXNGb3JBeGlzKFxuICAgIHN0cmlkZXM6IG51bWJlcltdLCBheGlzOiBudW1iZXIsIGVsbGlwc2lzTWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc107XG4gIGlmIChlbGxpcHNpc01hc2sgJiAoMSA8PCBheGlzKSB8fCBzdHJpZGUgPT0gbnVsbCkge1xuICAgIHN0cmlkZSA9IDE7XG4gIH1cblxuICByZXR1cm4gc3RyaWRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRGb3JBeGlzKFxuICAgIGJlZ2luTWFzazogbnVtYmVyLCBzdGFydEluZGljZXM6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSxcbiAgICBpbnB1dFNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyLCBlbGxpcHNpc01hc2s6IG51bWJlcik6IG51bWJlciB7XG4gIC8vIEJlZ2luIHdpdGggdGhlIHNwZWNpZmllZCBpbmRleFxuICBsZXQgc3RhcnQgPSBzdGFydEluZGljZXNbYXhpc107XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc10gfHwgMTtcblxuICAvLyBDaGVjayB0aGUgYXhpcyBiaXQgZnJvbSByaWdodCBvZiBtYXNrZWQgYXhlcywgb3IgdGhlIGJlZ2luIGluZGV4IGlzIG5vdCBzZXRcbiAgLy8gZm9yIHRoZSBheGlzLlxuICBpZiAoYmVnaW5NYXNrICYgMSA8PCBheGlzIHx8IGVsbGlwc2lzTWFzayAmIDEgPDwgYXhpcyB8fCBzdGFydCA9PSBudWxsKSB7XG4gICAgaWYgKHN0cmlkZSA+IDApIHtcbiAgICAgIC8vIEZvcndhcmQgaXRlcmF0aW9uIC0gdXNlIHRoZSBmaXJzdCBlbGVtZW50LiBUaGVzZSB2YWx1ZXMgd2lsbCBnZXRcbiAgICAgIC8vIGNsYW1wZWQgYmVsb3cgKE5vdGU6IFdlIGNvdWxkIGhhdmUgc2V0IHRoZW0gdG8gMCBhbmQgYXhpc19zaXplLTEsIGJ1dFxuICAgICAgLy8gdXNlIGxvd2VzdCgpIGFuZCBtYXgoKSB0byBtYWludGFpbiBzeW1tZXRyeSB3aXRoIFN0b3BGb3JBeGlzKCkpXG4gICAgICBzdGFydCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrd2FyZCBpdGVyYXRpb24gLSB1c2UgdGhlIGxhc3QgZWxlbWVudC5cbiAgICAgIHN0YXJ0ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXNcbiAgY29uc3QgYXhpc1NpemUgPSBpbnB1dFNoYXBlW2F4aXNdO1xuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gYXhpc1NpemU7XG4gIH1cblxuICAvLyBDbGFtcGluZ1xuICBzdGFydCA9IHV0aWwuY2xhbXAoMCwgc3RhcnQsIGF4aXNTaXplIC0gMSk7XG5cbiAgcmV0dXJuIHN0YXJ0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RvcEZvckF4aXMoXG4gICAgZW5kTWFzazogbnVtYmVyLCBzdG9wSW5kaWNlczogbnVtYmVyW10sIHN0cmlkZXM6IG51bWJlcltdLFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBheGlzOiBudW1iZXIsIGVsbGlwc2lzTWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gQmVnaW4gd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4XG4gIGxldCBzdG9wID0gc3RvcEluZGljZXNbYXhpc107XG4gIGNvbnN0IHN0cmlkZSA9IHN0cmlkZXNbYXhpc10gfHwgMTtcblxuICAvLyBDaGVjayB0aGUgYXhpcyBiaXQgZnJvbSByaWdodCBvZiBtYXNrZWQgYXhlcywgb3IgaWYgdGhlIHN0b3AgaW5kZXggaXMgbm90XG4gIC8vIHNldCBmb3IgdGhpcyBheGlzLlxuICBpZiAoZW5kTWFzayAmICgxIDw8IGF4aXMpIHx8IGVsbGlwc2lzTWFzayAmICgxIDw8IGF4aXMpIHx8IHN0b3AgPT0gbnVsbCkge1xuICAgIGlmIChzdHJpZGUgPiAwKSB7XG4gICAgICAvLyBGb3J3YXJkIGl0ZXJhdGlvbiAtIHVzZSB0aGUgbGFzdCBlbGVtZW50LiBUaGVzZSB2YWx1ZXMgd2lsbCBnZXRcbiAgICAgIC8vIGNsYW1wZWQgYmVsb3dcbiAgICAgIHN0b3AgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFja3dhcmQgaXRlcmF0aW9uIC0gdXNlIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgICAgc3RvcCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzXG4gIGNvbnN0IGF4aXNTaXplID0gaW5wdXRTaGFwZVtheGlzXTtcbiAgaWYgKHN0b3AgPCAwKSB7XG4gICAgc3RvcCArPSBheGlzU2l6ZTtcbiAgfVxuXG4gIC8vIENsYW1waW5nXG4gIC8vIEJlY2F1c2UgdGhlIGVuZCBpbmRleCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCwgd2UgbmVlZCBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgY2xhbXBpbmcgcmFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uLlxuICBpZiAoc3RyaWRlID4gMCkge1xuICAgIC8vIEZvcndhcmQgaXRlcmF0aW9uXG4gICAgc3RvcCA9IHV0aWwuY2xhbXAoMCwgc3RvcCwgYXhpc1NpemUpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJhY2t3YXJkIGl0ZXJhdGlvblxuICAgIHN0b3AgPSB1dGlsLmNsYW1wKC0xLCBzdG9wLCBheGlzU2l6ZSAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHN0b3A7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzbGljZSBvY2N1cGllcyBhIGNvbnRpbm91cyBzZXQgb2YgZWxlbWVudHMgaW4gdGhlXG4gKiAnZmxhdCcgc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NsaWNlQ29udGlub3VzKFxuICAgIHNoYXBlOiBudW1iZXJbXSwgYmVnaW46IG51bWJlcltdLCBzaXplOiBudW1iZXJbXSkge1xuICAvLyBJbmRleCBvZiB0aGUgZmlyc3QgYXhpcyB0aGF0IGhhcyBzaXplID4gMS5cbiAgbGV0IGZpcnN0Tm9uT25lQXhpcyA9IHNpemUubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc2l6ZVtpXSA+IDEpIHtcbiAgICAgIGZpcnN0Tm9uT25lQXhpcyA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gZmlyc3ROb25PbmVBeGlzICsgMTsgaSA8IHNpemUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYmVnaW5baV0gPiAwIHx8IHNpemVbaV0gIT09IHNoYXBlW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUZsYXRPZmZzZXQoYmVnaW46IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSk6IG51bWJlciB7XG4gIGxldCBmbGF0T2Zmc2V0ID0gYmVnaW4ubGVuZ3RoID4gMCA/IGJlZ2luW2JlZ2luLmxlbmd0aCAtIDFdIDogMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZWdpbi5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBmbGF0T2Zmc2V0ICs9IGJlZ2luW2ldICogc3RyaWRlc1tpXTtcbiAgfVxuICByZXR1cm4gZmxhdE9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2xpY2VQYXJhbXMoXG4gICAgeDogVGVuc29ySW5mbywgYmVnaW46IG51bWJlcnxudW1iZXJbXSwgc2l6ZT86IG51bWJlcnxudW1iZXJbXSkge1xuICAvLyBUaGUgZm9sbG93aW5nIGxvZ2ljIGFsbG93cyBmb3IgbW9yZSBlcmdvbm9taWMgY2FsbHMuXG4gIGxldCBiZWdpbl86IG51bWJlcltdO1xuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuICBpZiAodHlwZW9mIGJlZ2luID09PSAnbnVtYmVyJykge1xuICAgIGJlZ2luXyA9IFtiZWdpbiwgLi4ubmV3IEFycmF5KHhSYW5rIC0gMSkuZmlsbCgwKV07XG4gIH0gZWxzZSBpZiAoYmVnaW4ubGVuZ3RoIDwgeFJhbmspIHtcbiAgICBiZWdpbl8gPSBiZWdpbi5jb25jYXQobmV3IEFycmF5KHhSYW5rIC0gYmVnaW4ubGVuZ3RoKS5maWxsKDApKTtcbiAgfSBlbHNlIHtcbiAgICBiZWdpbl8gPSBiZWdpbi5zbGljZSgpO1xuICB9XG4gIGJlZ2luXy5mb3JFYWNoKGQgPT4ge1xuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICBkICE9PSAtMSwgKCkgPT4gJ3NsaWNlKCkgZG9lcyBub3Qgc3VwcG9ydCBuZWdhdGl2ZSBiZWdpbiBpbmRleGluZy4nKTtcbiAgfSk7XG4gIGxldCBzaXplXzogbnVtYmVyW107XG4gIGlmIChzaXplID09IG51bGwpIHtcbiAgICBzaXplXyA9IG5ldyBBcnJheSh4UmFuaykuZmlsbCgtMSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKSB7XG4gICAgc2l6ZV8gPSBbc2l6ZSwgLi4ubmV3IEFycmF5KHhSYW5rIC0gMSkuZmlsbCgtMSldO1xuICB9IGVsc2UgaWYgKHNpemUubGVuZ3RoIDwgeFJhbmspIHtcbiAgICBzaXplXyA9IHNpemUuY29uY2F0KG5ldyBBcnJheSh4UmFuayAtIHNpemUubGVuZ3RoKS5maWxsKC0xKSk7XG4gIH0gZWxzZSB7XG4gICAgc2l6ZV8gPSBzaXplO1xuICB9XG4gIHNpemVfID0gc2l6ZV8ubWFwKChkLCBpKSA9PiB7XG4gICAgaWYgKGQgPj0gMCkge1xuICAgICAgcmV0dXJuIGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgIGQgPT09IC0xLFxuICAgICAgICAgICgpID0+IGBOZWdhdGl2ZSBzaXplIHZhbHVlcyBzaG91bGQgYmUgZXhhY3RseSAtMSBidXQgZ290IGAgK1xuICAgICAgICAgICAgICBgJHtkfSBmb3IgdGhlIHNsaWNlKCkgc2l6ZSBhdCBpbmRleCAke2l9LmApO1xuICAgICAgcmV0dXJuIHguc2hhcGVbaV0gLSBiZWdpbl9baV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFtiZWdpbl8sIHNpemVfXTtcbn1cblxuLy8gQ29udmVydCB0aGUgc2xpY2luZyBzcGVjaWZpY2F0aW9uIGZyb20gYSBzcGFyc2UgcmVwcmVzZW50YXRpb24gdG8gYSBkZW5zZVxuLy8gcmVwcmVzZW50YXRpb24uIFRoaXMgbWVhbnMgdGhhdCBhbGwgZWxsaXBzZXMgYW5kIG5ld2F4aXMgYXJlIGV4cGFuZGVkIG91dC5cbmV4cG9ydCBmdW5jdGlvbiBzbGljZUluZm8oXG4gICAgeFNoYXBlOiBudW1iZXJbXSwgYmVnaW46IG51bWJlcltdLCBlbmQ6IG51bWJlcltdLCBzdHJpZGVzOiBudW1iZXJbXSxcbiAgICBiZWdpbk1hc2s6IG51bWJlciwgZW5kTWFzazogbnVtYmVyLCBlbGxpcHNpc01hc2s6IG51bWJlcixcbiAgICBuZXdBeGlzTWFzazogbnVtYmVyLCBzaHJpbmtBeGlzTWFzazogbnVtYmVyKTogU2xpY2VJbmZvIHtcbiAgbGV0IHN0cmlkZXNOb25OdWxsO1xuICBpZiAoc3RyaWRlcyA9PSBudWxsKSB7XG4gICAgc3RyaWRlc05vbk51bGwgPSBuZXcgQXJyYXkoYmVnaW4ubGVuZ3RoKTtcbiAgICBzdHJpZGVzTm9uTnVsbC5maWxsKDEpO1xuICB9IGVsc2Uge1xuICAgIHN0cmlkZXNOb25OdWxsID0gc3RyaWRlcztcbiAgfVxuXG4gIC8vIE9ubHkgb25lIG5vbi16ZXJvIGJpdCBpcyBhbGxvd2VkIGluIGVsbGlwc2lzTWFzaywgd2hpY2ggbWVhbnMgZWxsaXBzaXNNYXNrXG4gIC8vIGlzIGEgcG93ZXIgb2YgMi4gVXNlIGJpdCBjb21wYXJlcyB0byBlbnN1cmUgZWxsaXBzaXNNYXNrIGlzIDAgb3IgYSBwb3dlclxuICAvLyBvZiAyLiBXaGVuIGkgaXMgYSBwb3dlciBvZiAyLCBpICYgKGkgLSAxKSBpcyBhbHdheXMgMC5cbiAgLy8gQWxzbyByZWY6XG4gIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMDI5My9ob3ctdG8tY2hlY2staWYtYS1udW1iZXItaXMtYS1wb3dlci1vZi0yXG4gIGlmIChlbGxpcHNpc01hc2sgIT0gbnVsbCAmJiAoZWxsaXBzaXNNYXNrICYgKGVsbGlwc2lzTWFzayAtIDEpKSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgZWxsaXBzZXMgaW4gc2xpY2UgaXMgbm90IGFsbG93ZWQuJyk7XG4gIH1cblxuICAvLyBTdGVwIDE6IEFjY291bnQgZm9yIGVsbGlwc2lzIGFuZCBuZXcgYXhpcy5cbiAgLy8gQ2hlY2sgZm9yIGVsbGlwc2lzIGFuZCBjb3VudCBob3cgbWFueSBub24tbmV3YXhpcyB0aGVyZSBhcmUgYWZ0ZXIuXG4gIGxldCBlbGxpcHNpc1NlZW4gPSBmYWxzZTtcblxuICBjb25zdCBzcGFyc2VTcGVjOiBTdHJpZGVkU2xpY2VTcGFyc2VTcGVjID0ge1xuICAgIGRpbXM6IHN0cmlkZXNOb25OdWxsLmxlbmd0aCxcbiAgICBudW1BZGRBeGlzQWZ0ZXJFbGxpcHNpczogMCxcbiAgICBiZWdpbjogYmVnaW4uc2xpY2UoKSxcbiAgICBlbmQ6IGVuZC5zbGljZSgpLFxuICAgIHN0cmlkZXM6IHN0cmlkZXNOb25OdWxsLnNsaWNlKCksXG4gICAgYmVnaW5NYXNrLFxuICAgIGVuZE1hc2ssXG4gICAgZWxsaXBzaXNNYXNrLFxuICAgIG5ld0F4aXNNYXNrLFxuICAgIHNocmlua0F4aXNNYXNrXG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFyc2VTcGVjLmRpbXM7IGkrKykge1xuICAgIGlmIChlbGxpcHNpc1NlZW4gJiYgKCgxIDw8IGkpICYgbmV3QXhpc01hc2spICE9PSAwKSB7XG4gICAgICBzcGFyc2VTcGVjLm51bUFkZEF4aXNBZnRlckVsbGlwc2lzKys7XG4gICAgfVxuICAgIGlmICgoMSA8PCBpKSAmIGVsbGlwc2lzTWFzaykge1xuICAgICAgZWxsaXBzaXNTZWVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgLy8gSWYgbm8gZWxsaXBzaXMgaW5zZXJ0IG9uZSBhdCB0aGUgZW5kLlxuICBpZiAoIWVsbGlwc2lzU2Vlbikge1xuICAgIHNwYXJzZVNwZWMuZWxsaXBzaXNNYXNrIHw9ICgxIDw8IHNwYXJzZVNwZWMuZGltcyk7XG4gICAgc3BhcnNlU3BlYy5kaW1zKys7ICAvLyB0aGlzIGVmZmVjdHMgbG9vcCBpdGVyYXRpb24gYmVsb3dcbiAgfVxuXG4gIC8vIFN0ZXAgMjogTWFrZSBhIHNwYXJzZSBzcGVjIGludG8gYSBmdWxsIGluZGV4IHNwZWMuXG4gIC8vXG4gIC8vIFRoZSBzcGFyc2Ugc3BlYyBkZW9zIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucy5cbiAgLy8gTWFrZSBhIGRlbnNlIHNwZWMgdGhhdCBjb29yZXNwb25kcyB0byB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlIHN1cHBvc2UgZm9vWy4uLiwzOl0gb24gZm9vLnNoYXBlID0gWzIsIDIsIDNdIHRoZW4gd2UgbmVlZCB0b1xuICAvLyBwcm9kdWNlIHRoZSBtaXNzaW5nIGJlZ2luTWFzayBmb3IgdGhlIGZpcnN0IHR3byBkaW1lbnNpb25zIGkuZS4gZnJvbVxuICAvLyBiZWdpbk1hc2tTcGVjID0gMCwgZW5kTWFza1NwZWMgPSAyLCB3ZSBhY2hpZXZlIGJlZ2luTWFzayA9IDYgKDExMCksXG4gIC8vIGVuZE1hc2sgPSA3ICgxMTEpLlxuICBjb25zdCBkZW5zZVNwZWM6IFN0cmlkZWRTbGljZURlbnNlU3BlYyA9IHtcbiAgICBkaW1zOiB4U2hhcGUubGVuZ3RoLFxuICAgIGJlZ2luTWFzazogMCxcbiAgICBlbmRNYXNrOiAwLFxuICAgIGJlZ2luVmFsaWQ6IGZhbHNlLFxuICAgIGVuZFZhbGlkOiBmYWxzZVxuICB9O1xuXG4gIGJ1aWxkRGVuc2VTcGVjKHNwYXJzZVNwZWMsIGRlbnNlU3BlYyk7XG5cbiAgLy8gU3RlcCAzOiBNYWtlIGltcGxpY2l0IHJhbmdlcyAobm9uLXplcm8gYmVnaW5NYXNrcyBhbmQgZW5kTWFza3MpIGV4cGxpY2l0XG4gIC8vIGFuZCBib3VuZHMgY2hlY2suXG4gIGxldCBpc0lkZW50aXR5ID0gdHJ1ZTtcbiAgbGV0IHNsaWNlRGltMCA9IHRydWU7XG4gIGxldCBpc1NpbXBsZVNsaWNlID0gdHJ1ZTtcbiAgY29uc3QgcHJvY2Vzc2luZ1NoYXBlID0gW107XG4gIGNvbnN0IGZpbmFsU2hhcGUgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHhTaGFwZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChkZW5zZVNwZWMuc3RyaWRlc1tpXSA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoYHN0cmlkZXNbJHtpfV0gbXVzdCBiZSBub24temVyb2ApO1xuICAgIH1cbiAgICBjb25zdCBzaHJpbmtJID0gISEoZGVuc2VTcGVjLnNocmlua0F4aXNNYXNrICYgKDEgPDwgaSkpO1xuICAgIGNvbnN0IGRpbUkgPSB4U2hhcGVbaV07XG4gICAgaWYgKGRpbUkgPT09IC0xKSB7XG4gICAgICBwcm9jZXNzaW5nU2hhcGUucHVzaChzaHJpbmtJID8gMSA6IC0xKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hc2tzID1cbiAgICAgICAgW2RlbnNlU3BlYy5iZWdpbk1hc2sgJiAoMSA8PCBpKSwgZGVuc2VTcGVjLmVuZE1hc2sgJiAoMSA8PCBpKV07XG4gICAgY29uc3QgdmFsaWRSYW5nZSA9IFtcbiAgICAgIGRlbnNlU3BlYy5zdHJpZGVzW2ldID4gMCA/IDAgOiAtMSxcbiAgICAgIGRlbnNlU3BlYy5zdHJpZGVzW2ldID4gMCA/IGRpbUkgOiBkaW1JIC0gMVxuICAgIF07XG5cbiAgICBpZiAoc2hyaW5rSSAmJiBkZW5zZVNwZWMuc3RyaWRlc1tpXSA8PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignb25seSBzdHJpZGUgMSBhbGxvd2VkIG9uIG5vbi1yYW5nZSBpbmRleGluZy4nKTtcbiAgICB9XG5cbiAgICBpc1NpbXBsZVNsaWNlID0gaXNTaW1wbGVTbGljZSAmJiAoZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEpO1xuXG4gICAgY29uc3QgYmVnaW5BbmRFbmRNYXNrZWQgPVxuICAgICAgICAhISgoZGVuc2VTcGVjLmJlZ2luTWFzayAmICgxIDw8IGkpKSAmJiAoZGVuc2VTcGVjLmVuZE1hc2sgJiAoMSA8PCBpKSkpO1xuXG4gICAgaWYgKGRlbnNlU3BlYy5iZWdpblZhbGlkICYmIGRlbnNlU3BlYy5lbmRWYWxpZCkge1xuICAgICAgaWYgKHNocmlua0kpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIHNocmlua2luZywgdGhlIGVuZCBpbmRleCBpcyBub3cgcG9zc2libHkgaW5jb3JyZWN0LiBJblxuICAgICAgICAvLyBwYXJ0aWN1bGFyIGZvb1stMV0gcHJvZHVjZXMgc3BhcnNlQmVnaW4gPSAtMSwgc3BhcnNlRW5kID0gMC5cbiAgICAgICAgLy8gYW5kIGNhbm9uaWNhbCBwdXRzIHRoZXNlIHRvIG4tMSBhbmQgMCwgd2hpY2ggaW1wbGllcyBhIGRlZ2VuZXJhdGVcbiAgICAgICAgLy8gaW50ZXJ2YWwuIEZvcnR1bmF0ZWx5LCBpdCBpcyBub3cgc2FmZSB0byByZS1jcmVhdGUgZW5kIGFzIGJlZ2luICsgMS5cbiAgICAgICAgY29uc3QgeEZ3ZCA9IGRlbnNlU3BlYy5iZWdpbltpXSA8IDAgPyBkaW1JICsgZGVuc2VTcGVjLmJlZ2luW2ldIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5zZVNwZWMuYmVnaW5baV07XG4gICAgICAgIGRlbnNlU3BlYy5iZWdpbltpXSA9IHhGd2Q7XG4gICAgICAgIGRlbnNlU3BlYy5lbmRbaV0gPSBkZW5zZVNwZWMuYmVnaW5baV0gKyAxO1xuICAgICAgICBpZiAoeEZ3ZCA8IDAgfHwgeEZ3ZCA+PSBkaW1JKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoYHNsaWNlIGluZGV4ICR7ZGVuc2VTcGVjLmJlZ2luW2ldfSBvZiBkaW1lbnNpb24gJHtcbiAgICAgICAgICAgICAgaX0gb3V0IG9mIGJvdW5kcy5gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVuc2VTcGVjLmJlZ2luW2ldID0gY2Fub25pY2FsKFxuICAgICAgICAgICAgZGVuc2VTcGVjLmJlZ2luW2ldLCAwLCBkZW5zZVNwZWMuc3RyaWRlc1tpXSwgZGltSSwgbWFza3MsXG4gICAgICAgICAgICB2YWxpZFJhbmdlKTtcbiAgICAgICAgZGVuc2VTcGVjLmVuZFtpXSA9IGNhbm9uaWNhbChcbiAgICAgICAgICAgIGRlbnNlU3BlYy5lbmRbaV0sIDEsIGRlbnNlU3BlYy5zdHJpZGVzW2ldLCBkaW1JLCBtYXNrcywgdmFsaWRSYW5nZSk7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgb3B0aW1pemF0aW9uIHZhbHVlc1xuICAgICAgY29uc3QgdGFrZUFsbEluRGltZW5zaW9uID0gZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEgJiZcbiAgICAgICAgICBkZW5zZVNwZWMuYmVnaW5baV0gPT09IDAgJiYgZGVuc2VTcGVjLmVuZFtpXSA9PT0gZGltSTtcbiAgICAgIGlzSWRlbnRpdHkgPSBpc0lkZW50aXR5ICYmIHRha2VBbGxJbkRpbWVuc2lvbjtcbiAgICAgIHNsaWNlRGltMCA9IHNsaWNlRGltMCAmJlxuICAgICAgICAgICgoaSA9PT0gMCAmJiBkZW5zZVNwZWMuc3RyaWRlc1tpXSA9PT0gMSkgfHwgdGFrZUFsbEluRGltZW5zaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNJZGVudGl0eSA9XG4gICAgICAgICAgaXNJZGVudGl0eSAmJiAoKGRlbnNlU3BlYy5zdHJpZGVzW2ldID09PSAxKSAmJiBiZWdpbkFuZEVuZE1hc2tlZCk7XG4gICAgICBzbGljZURpbTAgPSBzbGljZURpbTAgJiZcbiAgICAgICAgICAoKGkgPT09IDAgJiYgZGVuc2VTcGVjLnN0cmlkZXNbaV0gPT09IDEpIHx8IGJlZ2luQW5kRW5kTWFza2VkKTtcbiAgICB9XG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJvY2Vzc2luZyBzaGFwZSAodGhlIGludGVybWVkaWF0ZSBFaWdlbiB3aWxsIHByb2R1Y2UpXG4gICAgbGV0IGludGVydmFsTGVuZ3RoO1xuICAgIGxldCBrbm93bkludGVydmFsID0gZmFsc2U7XG4gICAgaWYgKGRlbnNlU3BlYy5iZWdpblZhbGlkICYmIGRlbnNlU3BlYy5lbmRWYWxpZCkge1xuICAgICAgaW50ZXJ2YWxMZW5ndGggPSBkZW5zZVNwZWMuZW5kW2ldIC0gZGVuc2VTcGVjLmJlZ2luW2ldO1xuICAgICAga25vd25JbnRlcnZhbCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzaHJpbmtJKSB7XG4gICAgICAvLyBUaGUgZGltZW5zaW9uIGlzIHN0aWxsIGtub3duIGFzIDEgZm9yIHRoZSBwcm9jZXNzaW5nU2hhcGUsIGJ1dCB3aWxsIGJlXG4gICAgICAvLyBkaXNjYXJkZWQgZm9yIHRoZSBmaW5hbCBzaGFwZS5cbiAgICAgIGludGVydmFsTGVuZ3RoID0gMTtcbiAgICAgIGtub3duSW50ZXJ2YWwgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYmVnaW5BbmRFbmRNYXNrZWQpIHtcbiAgICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSB2YWx1ZXMgZm9yIGJlZ2luIG9yIGVuZCwgd2UgZG8ga25vdyB0aGF0IHRoaXNcbiAgICAgIC8vIGRpbWVuc2lvbiBjb3ZlcnMgdGhlIHdob2xlIGludGVydmFsLiBJZiB3ZSBoYXZlIHNoYXBlIGluZm9ybWF0aW9uIGZvclxuICAgICAgLy8gdGhpcyBkaW1lbnNpb24sIHRoYXQgdGVsbHMgdXMgdGhlIGludGVydmFsIGxlbmd0aC5cbiAgICAgIGlmIChkaW1JID49IDApIHtcbiAgICAgICAgaWYgKGRlbnNlU3BlYy5zdHJpZGVzW2ldIDwgMCkge1xuICAgICAgICAgIGludGVydmFsTGVuZ3RoID0gLWRpbUk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJ2YWxMZW5ndGggPSBkaW1JO1xuICAgICAgICB9XG4gICAgICAgIGtub3duSW50ZXJ2YWwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoa25vd25JbnRlcnZhbCkge1xuICAgICAgbGV0IHNpemVJO1xuICAgICAgLy8gSG9sZCB6ZXJvIGlmIHRoZSBpbnRlcnZhbCBpcyBkZWdlbmVyYXRlLCBvdGhlcndpc2UgYWNjb3VudCBmb3JcbiAgICAgIC8vIHJlbWFpbmRlclxuICAgICAgaWYgKGludGVydmFsTGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKChpbnRlcnZhbExlbmd0aCA8IDApICE9PSAoZGVuc2VTcGVjLnN0cmlkZXNbaV0gPCAwKSkpIHtcbiAgICAgICAgc2l6ZUkgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZUkgPSBNYXRoLnRydW5jKGludGVydmFsTGVuZ3RoIC8gZGVuc2VTcGVjLnN0cmlkZXNbaV0pICtcbiAgICAgICAgICAgIChpbnRlcnZhbExlbmd0aCAlIGRlbnNlU3BlYy5zdHJpZGVzW2ldICE9PSAwID8gMSA6IDApO1xuICAgICAgfVxuICAgICAgcHJvY2Vzc2luZ1NoYXBlLnB1c2goc2l6ZUkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzaW5nU2hhcGUucHVzaCgtMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCA0OiBDb21wdXRlIHRoZSBmaW5hbCBzaGFwZVxuICAvL1xuICAvLyBuZXdBeGlzIHdpbGwgaW5jcmVhc2UgZGltZW5zaW9uIGJ5IDEgKHdpdGggYSBvbmUtc2l6ZSBkaW1lbnNpb24pXG4gIC8vIHNsaWNlcyBsaWtlIGZvb1szLCAuLi5dIHdpbGwgcmVkdWNlIGRpbWVuc2lvbiBieSAxLlxuICAvLyBUaGlzIGNhbm5vdCBiZSBkb25lIGVhcmxpZXIsIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBTdGVwIDMuXG4gIGZvciAobGV0IGRlbnNlRGltID0gMDsgZGVuc2VEaW0gPCBkZW5zZVNwZWMuZmluYWxTaGFwZUdhdGhlckluZGljZXMubGVuZ3RoO1xuICAgICAgICsrZGVuc2VEaW0pIHtcbiAgICBjb25zdCBnYXRoZXJJbmRleCA9IGRlbnNlU3BlYy5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1tkZW5zZURpbV07XG4gICAgaWYgKGdhdGhlckluZGV4ID49IDApIHtcbiAgICAgIGZpbmFsU2hhcGUucHVzaChwcm9jZXNzaW5nU2hhcGVbZ2F0aGVySW5kZXhdKTtcbiAgICB9IGVsc2UgaWYgKGdhdGhlckluZGV4ID09PSBORVdfQVhJUykge1xuICAgICAgZmluYWxTaGFwZS5wdXNoKDEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbmFsU2hhcGVTcGFyc2UgPSBmaW5hbFNoYXBlLmZpbHRlcihcbiAgICAgIChkaW0sIGkpID0+IGRlbnNlU3BlYy5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1tpXSAhPT0gTkVXX0FYSVMpO1xuXG4gIHJldHVybiB7XG4gICAgZmluYWxTaGFwZVNwYXJzZSxcbiAgICBmaW5hbFNoYXBlLFxuICAgIGlzSWRlbnRpdHksXG4gICAgc2xpY2VEaW0wLFxuICAgIGlzU2ltcGxlU2xpY2UsXG4gICAgYmVnaW46IGRlbnNlU3BlYy5iZWdpbixcbiAgICBlbmQ6IGRlbnNlU3BlYy5lbmQsXG4gICAgc3RyaWRlczogZGVuc2VTcGVjLnN0cmlkZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGREZW5zZVNwZWMoXG4gICAgc3BhcnNlOiBTdHJpZGVkU2xpY2VTcGFyc2VTcGVjLCBkZW5zZTogU3RyaWRlZFNsaWNlRGVuc2VTcGVjKSB7XG4gIGRlbnNlLmJlZ2luTWFzayA9IDA7XG4gIGRlbnNlLmVuZE1hc2sgPSAwO1xuICBkZW5zZS5zaHJpbmtBeGlzTWFzayA9IDA7XG5cbiAgbGV0IGZ1bGxJbmRleCA9IDA7XG4gIGRlbnNlLmJlZ2luVmFsaWQgPSBzcGFyc2UuYmVnaW4gIT0gbnVsbDtcbiAgZGVuc2UuZW5kVmFsaWQgPSBzcGFyc2UuZW5kICE9IG51bGw7XG5cbiAgZGVuc2UuYmVnaW4gPSBuZXcgQXJyYXkoZGVuc2UuZGltcyk7XG4gIGRlbnNlLmVuZCA9IG5ldyBBcnJheShkZW5zZS5kaW1zKTtcbiAgZGVuc2Uuc3RyaWRlcyA9IG5ldyBBcnJheShkZW5zZS5kaW1zKTtcbiAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMgPSBbXTtcbiAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UgPSBbXTtcbiAgZGVuc2UuaW5wdXRTaGFwZUdhdGhlckluZGljZXNTcGFyc2UgPSBuZXcgQXJyYXkoZGVuc2UuZGltcyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFyc2UuZGltczsgaSsrKSB7XG4gICAgaWYgKCgxIDw8IGkpICYgc3BhcnNlLmVsbGlwc2lzTWFzaykge1xuICAgICAgLy8gT25seSB0aGUgYml0IHRoYXQgaGFzIGVsbGlwc2lzIHdpbGwgZmFsbCBpbiB0aGlzIGNvbmRpdGlvbi5cbiAgICAgIC8vIEV4cGFuZCB0aGUgZWxsaXBzaXMgaW50byB0aGUgYXBwcm9wcmlhdGUgaW5kaWNlc1xuICAgICAgLy8gTm90ZTogdGhpcyBvbmx5IHdvcmtzIGJlY2F1c2Ugd2UgZ3VhcmFudGVlZCBvbmUgZWxsaXBzaXMuXG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBkZW5zZS5kaW1zIC0gKHNwYXJzZS5kaW1zIC0gaSkgKyAxICsgc3BhcnNlLm51bUFkZEF4aXNBZnRlckVsbGlwc2lzLFxuICAgICAgICAgIGRlbnNlLmRpbXMpO1xuICAgICAgZm9yICg7IGZ1bGxJbmRleCA8IG5leHRJbmRleDsgZnVsbEluZGV4KyspIHtcbiAgICAgICAgLy8gbmV3QXhpcyBhcmVuJ3QgcmVhbCBheGlzIHNvIHlvdSBoYXZlIHRvIHNraXAuXG4gICAgICAgIGRlbnNlLmJlZ2luW2Z1bGxJbmRleF0gPSAwO1xuICAgICAgICBkZW5zZS5lbmRbZnVsbEluZGV4XSA9IDA7XG4gICAgICAgIGRlbnNlLnN0cmlkZXNbZnVsbEluZGV4XSA9IDE7XG4gICAgICAgIGRlbnNlLmJlZ2luTWFzayB8PSAoMSA8PCBmdWxsSW5kZXgpO1xuICAgICAgICBkZW5zZS5lbmRNYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLnB1c2goZnVsbEluZGV4KTtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UucHVzaCgtMSk7XG4gICAgICAgIGRlbnNlLmlucHV0U2hhcGVHYXRoZXJJbmRpY2VzU3BhcnNlW2Z1bGxJbmRleF0gPSBpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDEgPDwgaSkgJiBzcGFyc2UubmV3QXhpc01hc2spIHtcbiAgICAgIC8vIE9ubHkgdGhlIGJpdCB0aGF0IGhhcyBuZXdBeGlzIHdpbGwgZmFsbCBpbiB0aGlzIGNvbmRpdGlvbi5cbiAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzLnB1c2goTkVXX0FYSVMpO1xuICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXNTcGFyc2UucHVzaCgtMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmdWxsSW5kZXggPT09IGRlbnNlLmJlZ2luLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIGBJbmRleCBvdXQgb2YgcmFuZ2UgdXNpbmcgaW5wdXQgZGltICR7ZnVsbEluZGV4fTsgaW5wdXQgYCArXG4gICAgICAgICAgICBgaGFzIG9ubHkgJHtkZW5zZS5kaW1zfSBkaW1zLCAke2RlbnNlLmJlZ2luLmxlbmd0aH0uYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdhdGhlciBzbGljaW5nIHNwZWMgaW50byBhcHByb3ByaWF0ZSBpbmRleC5cbiAgICAgIGlmIChzcGFyc2UuYmVnaW4gIT0gbnVsbCkge1xuICAgICAgICBkZW5zZS5iZWdpbltmdWxsSW5kZXhdID0gc3BhcnNlLmJlZ2luW2ldO1xuICAgICAgfVxuICAgICAgaWYgKHNwYXJzZS5lbmQgIT0gbnVsbCkge1xuICAgICAgICBkZW5zZS5lbmRbZnVsbEluZGV4XSA9IHNwYXJzZS5lbmRbaV07XG4gICAgICB9XG4gICAgICBkZW5zZS5zdHJpZGVzW2Z1bGxJbmRleF0gPSBzcGFyc2Uuc3RyaWRlc1tpXTtcbiAgICAgIGlmIChzcGFyc2UuYmVnaW5NYXNrICYgKDEgPDwgaSkpIHtcbiAgICAgICAgZGVuc2UuYmVnaW5NYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoc3BhcnNlLmVuZE1hc2sgJiAoMSA8PCBpKSkge1xuICAgICAgICBkZW5zZS5lbmRNYXNrIHw9ICgxIDw8IGZ1bGxJbmRleCk7XG4gICAgICB9XG4gICAgICAvLyBJZiBzaHJpbmssIHJlY29yZCB3aGVyZSB0byBnZXQgdGhlIGRpbWVuc2lvbmFsaXR5IGZyb20gKGkuZS4gbmV3QXhpcylcbiAgICAgIC8vIGNyZWF0ZXMgYSBmYWtlIDEgc2l6ZSBkaW1lbnNpb24uIEFsc28gcmVtZW1iZXIgc2hyaW5rIGF4aXMgKG5vdyBpblxuICAgICAgLy8gZGVuc2UgZm9ybSkgc28gd2UgY2FuIGlnbm9yZSBkZW5zZS5lbmQgYmVsb3cuXG4gICAgICBpZiAoc3BhcnNlLnNocmlua0F4aXNNYXNrICYgKDEgPDwgaSkpIHtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMucHVzaChTSFJJTktfQVhJUyk7XG4gICAgICAgIGRlbnNlLmZpbmFsU2hhcGVHYXRoZXJJbmRpY2VzU3BhcnNlLnB1c2goLTEpO1xuICAgICAgICBkZW5zZS5zaHJpbmtBeGlzTWFzayB8PSAoMSA8PCBmdWxsSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVuc2UuZmluYWxTaGFwZUdhdGhlckluZGljZXMucHVzaChmdWxsSW5kZXgpO1xuICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHdoZXJlIGluIHRoZSBzcGFyc2Ugc2hhcGUgdGhlIGRlbnNlIGRpbSBjb21lcyBmcm9tLlxuICAgICAgICBkZW5zZS5maW5hbFNoYXBlR2F0aGVySW5kaWNlc1NwYXJzZS5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgZGVuc2UuaW5wdXRTaGFwZUdhdGhlckluZGljZXNTcGFyc2VbZnVsbEluZGV4XSA9IGk7XG4gICAgICBmdWxsSW5kZXgrKztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2Fub25pY2FsKFxuICAgIHg6IG51bWJlciwgYzogbnVtYmVyLCBzdHJpZGVJOiBudW1iZXIsIGRpbUk6IG51bWJlciwgbWFza3M6IG51bWJlcltdLFxuICAgIHZhbGlkUmFuZ2U6IG51bWJlcltdKSB7XG4gIGlmIChtYXNrc1tjXSkge1xuICAgIHJldHVybiBzdHJpZGVJID4gMCA/IHZhbGlkUmFuZ2VbY10gOiB2YWxpZFJhbmdlWyhjICsgMSkgJiAxXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB4RndkID0geCA8IDAgPyBkaW1JICsgeCA6IHg7ICAvLyBtYWtlIG5lZ2F0aXZlIGluZGljZXMgcG9zaXRpdmVcbiAgICByZXR1cm4geEZ3ZCA8IHZhbGlkUmFuZ2VbMF0gPyB2YWxpZFJhbmdlWzBdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RndkID4gdmFsaWRSYW5nZVsxXSA/IHZhbGlkUmFuZ2VbMV0gOiB4RndkO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from '../util';\nexport function assertParamsConsistent(shapes, axis) {\n const rank = shapes[0].length;\n shapes.forEach((shape, i) => {\n util.assert(shape.length === rank, () => `Error in concat${rank}D: rank of tensors[${i}] must be the same ` +\n `as the rank of the rest (${rank})`);\n });\n util.assert(axis >= 0 && axis < rank, () => `Error in concat${rank}D: axis must be between 0 and ${rank - 1}.`);\n const firstShape = shapes[0];\n shapes.forEach((shape, i) => {\n for (let r = 0; r < rank; r++) {\n util.assert((r === axis) || (shape[r] === firstShape[r]), () => `Error in concat${rank}D: Shape of tensors[${i}] (${shape}) ` +\n `does not match the shape of the rest (${firstShape}) ` +\n `along the non-concatenated axis ${i}.`);\n }\n });\n}\nexport function computeOutShape(shapes, axis) {\n const outputShape = shapes[0].slice();\n for (let i = 1; i < shapes.length; i++) {\n outputShape[axis] += shapes[i][axis];\n }\n return outputShape;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9jb25jYXRfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBa0IsRUFBRSxJQUFZO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQixJQUFJLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUNyQixHQUFHLEVBQUUsQ0FDRCxrQkFBa0IsSUFBSSxzQkFBc0IsQ0FBQyxxQkFBcUI7WUFDbEUsNEJBQTRCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksRUFDeEIsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksaUNBQWlDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLElBQUk7Z0JBQy9ELHlDQUF5QyxVQUFVLElBQUk7Z0JBQ3ZELG1DQUFtQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFrQixFQUFFLElBQVk7SUFDOUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UGFyYW1zQ29uc2lzdGVudChzaGFwZXM6IG51bWJlcltdW10sIGF4aXM6IG51bWJlcikge1xuICBjb25zdCByYW5rID0gc2hhcGVzWzBdLmxlbmd0aDtcbiAgc2hhcGVzLmZvckVhY2goKHNoYXBlLCBpKSA9PiB7XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHNoYXBlLmxlbmd0aCA9PT0gcmFuayxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGBFcnJvciBpbiBjb25jYXQke3Jhbmt9RDogcmFuayBvZiB0ZW5zb3JzWyR7aX1dIG11c3QgYmUgdGhlIHNhbWUgYCArXG4gICAgICAgICAgICBgYXMgdGhlIHJhbmsgb2YgdGhlIHJlc3QgKCR7cmFua30pYCk7XG4gIH0pO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYXhpcyA+PSAwICYmIGF4aXMgPCByYW5rLFxuICAgICAgKCkgPT4gYEVycm9yIGluIGNvbmNhdCR7cmFua31EOiBheGlzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAke3JhbmsgLSAxfS5gKTtcblxuICBjb25zdCBmaXJzdFNoYXBlID0gc2hhcGVzWzBdO1xuICBzaGFwZXMuZm9yRWFjaCgoc2hhcGUsIGkpID0+IHtcbiAgICBmb3IgKGxldCByID0gMDsgciA8IHJhbms7IHIrKykge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgKHIgPT09IGF4aXMpIHx8IChzaGFwZVtyXSA9PT0gZmlyc3RTaGFwZVtyXSksXG4gICAgICAgICAgKCkgPT4gYEVycm9yIGluIGNvbmNhdCR7cmFua31EOiBTaGFwZSBvZiB0ZW5zb3JzWyR7aX1dICgke3NoYXBlfSkgYCArXG4gICAgICAgICAgICAgIGBkb2VzIG5vdCBtYXRjaCB0aGUgc2hhcGUgb2YgdGhlIHJlc3QgKCR7Zmlyc3RTaGFwZX0pIGAgK1xuICAgICAgICAgICAgICBgYWxvbmcgdGhlIG5vbi1jb25jYXRlbmF0ZWQgYXhpcyAke2l9LmApO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlT3V0U2hhcGUoc2hhcGVzOiBudW1iZXJbXVtdLCBheGlzOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gIGNvbnN0IG91dHB1dFNoYXBlID0gc2hhcGVzWzBdLnNsaWNlKCk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc2hhcGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGVbYXhpc10gKz0gc2hhcGVzW2ldW2F4aXNdO1xuICB9XG4gIHJldHVybiBvdXRwdXRTaGFwZTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var RowPartitionType;\n(function (RowPartitionType) {\n RowPartitionType[RowPartitionType[\"FIRST_DIM_SIZE\"] = 0] = \"FIRST_DIM_SIZE\";\n RowPartitionType[RowPartitionType[\"VALUE_ROWIDS\"] = 1] = \"VALUE_ROWIDS\";\n RowPartitionType[RowPartitionType[\"ROW_LENGTHS\"] = 2] = \"ROW_LENGTHS\";\n RowPartitionType[RowPartitionType[\"ROW_SPLITS\"] = 3] = \"ROW_SPLITS\";\n RowPartitionType[RowPartitionType[\"ROW_LIMITS\"] = 4] = \"ROW_LIMITS\";\n RowPartitionType[RowPartitionType[\"ROW_STARTS\"] = 5] = \"ROW_STARTS\";\n})(RowPartitionType || (RowPartitionType = {}));\nexport function combineRaggedTensorToTensorShapes(raggedRank, shape, valueShape) {\n // Test for consistency of valueShape and shape specified.\n // If shape is unspecified and valueShape is specified, then copy\n // over the size from the valueShape dimension.\n let outputShape = new Array();\n if (valueShape == null && shape == null) {\n return outputShape;\n }\n if (shape == null) {\n // Here, value_shape must be of known size.\n while (outputShape.length < raggedRank + valueShape.length) {\n outputShape.push(-1);\n }\n }\n else {\n outputShape = shape.slice();\n }\n if (valueShape == null) {\n return outputShape;\n }\n // At this point, valueShape and output_shape have known ranks.\n if (raggedRank + valueShape.length !== outputShape.length) {\n throw new Error(`rt input.shape and shape=${shape} are incompatible: rt input.rank = ${raggedRank +\n valueShape.length}, but shape.rank = ${outputShape.length}`);\n }\n for (let i = 1; i < valueShape.length; ++i) {\n const valueDim = valueShape[i];\n const outputShapeDimIndex = outputShape[outputShape.length - valueShape.length + i];\n const outputShapeDim = outputShape[outputShapeDimIndex];\n if (valueDim >= 0) {\n if (outputShapeDim >= 0) {\n if (outputShapeDim !== valueDim) {\n throw new Error(`rt input.shape and shape=${shape} are incompatible: rt input.shape[${i + raggedRank}] = ${valueDim} but shape[${i + raggedRank}] = ${outputShapeDim}`);\n }\n }\n else {\n outputShape[outputShapeDimIndex] = valueDim;\n }\n }\n }\n return outputShape;\n}\nexport function getRowPartitionTypesHelper(rowPartitionTypeStrings) {\n const stringToType = {\n 'FIRST_DIM_SIZE': RowPartitionType.FIRST_DIM_SIZE,\n 'VALUE_ROWIDS': RowPartitionType.VALUE_ROWIDS,\n 'ROW_LENGTHS': RowPartitionType.ROW_LENGTHS,\n 'ROW_SPLITS': RowPartitionType.ROW_SPLITS,\n 'ROW_LIMITS': RowPartitionType.ROW_LIMITS,\n 'ROW_STARTS': RowPartitionType.ROW_STARTS\n };\n const result = [];\n for (const typeStr of rowPartitionTypeStrings) {\n if (typeStr in stringToType) {\n result.push(stringToType[typeStr]);\n }\n else {\n break;\n }\n }\n return result;\n}\nexport function getRaggedRank(rowPartitionTypes) {\n if (rowPartitionTypes.length === 0) {\n return 0;\n }\n if (rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return rowPartitionTypes.length - 1;\n }\n return rowPartitionTypes.length;\n}\nexport function validateDefaultValueShape(defaultValueShape, valueShape) {\n if (defaultValueShape == null || valueShape == null) {\n return;\n }\n const defaultNDims = defaultValueShape.length;\n const valuesNDims = valueShape.length;\n if (defaultNDims >= valuesNDims) {\n throw new Error(`defaultValue.shape=${defaultValueShape} and ragged tensor flatValues.shape=${valueShape}, are incompatible: defaultValue.rank = ${defaultNDims} must be less than ragged tensor input flatValues.rank = ${valuesNDims})`);\n }\n for (let i = 0; i < Math.min(defaultNDims, valuesNDims - 1); ++i) {\n const defaultDim = defaultValueShape[i];\n const valueDim = valueShape[i + 1];\n if (defaultDim >= 0 && valueDim >= 0 && defaultDim !== 1 &&\n defaultDim !== valueDim) {\n throw new Error(`defaultValue.shape=${defaultValueShape}, and ragged tensor input flatValues.shape=${valueShape} are incompatible: defaultValue.shape[${i - defaultValueShape.length}] = ${defaultDim} but ragged tensor input.flatValues.shape[${i - defaultValueShape.length}] = ${valueDim}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX3RvX2RlbnNlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yYWdnZWRfdG9fZGVuc2VfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQzFCLDJFQUFjLENBQUE7SUFDZCx1RUFBWSxDQUFBO0lBQ1oscUVBQVcsQ0FBQTtJQUNYLG1FQUFVLENBQUE7SUFDVixtRUFBVSxDQUFBO0lBQ1YsbUVBQVUsQ0FBQTtBQUNaLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCO0FBRUQsTUFBTSxVQUFVLGlDQUFpQyxDQUM3QyxVQUFrQixFQUFFLEtBQWUsRUFBRSxVQUFvQjtJQUMzRCwwREFBMEQ7SUFDMUQsaUVBQWlFO0lBQ2pFLCtDQUErQztJQUUvQyxJQUFJLFdBQVcsR0FBYSxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3hDLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ3ZDLE9BQU8sV0FBVyxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ2pCLDJDQUEyQztRQUMzQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDMUQsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO0tBQ0Y7U0FBTTtRQUNMLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDN0I7SUFDRCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsT0FBTyxXQUFXLENBQUM7S0FDcEI7SUFDRCwrREFBK0Q7SUFDL0QsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sS0FBSyxX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QUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2hFLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksVUFBVSxLQUFLLENBQUM7WUFDcEQsVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUNaLGlCQUFpQiw4Q0FDakIsVUFBVSx5Q0FDVixDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxPQUM1QixVQUFVLDZDQUNWLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNwRDtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuZXhwb3J0IGVudW0gUm93UGFydGl0aW9uVHlwZSB7XG4gIEZJUlNUX0RJTV9TSVpFLFxuICBWQUxVRV9ST1dJRFMsXG4gIFJPV19MRU5HVEhTLFxuICBST1dfU1BMSVRTLFxuICBST1dfTElNSVRTLFxuICBST1dfU1RBUlRTXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUmFnZ2VkVGVuc29yVG9UZW5zb3JTaGFwZXMoXG4gICAgcmFnZ2VkUmFuazogbnVtYmVyLCBzaGFwZTogbnVtYmVyW10sIHZhbHVlU2hhcGU6IG51bWJlcltdKSB7XG4gIC8vIFRlc3QgZm9yIGNvbnNpc3RlbmN5IG9mIHZhbHVlU2hhcGUgYW5kIHNoYXBlIHNwZWNpZmllZC5cbiAgLy8gSWYgc2hhcGUgaXMgdW5zcGVjaWZpZWQgYW5kIHZhbHVlU2hhcGUgaXMgc3BlY2lmaWVkLCB0aGVuIGNvcHlcbiAgLy8gb3ZlciB0aGUgc2l6ZSBmcm9tIHRoZSB2YWx1ZVNoYXBlIGRpbWVuc2lvbi5cblxuICBsZXQgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KCk7XG4gIGlmICh2YWx1ZVNoYXBlID09IG51bGwgJiYgc2hhcGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgfVxuXG4gIGlmIChzaGFwZSA9PSBudWxsKSB7XG4gICAgLy8gSGVyZSwgdmFsdWVfc2hhcGUgbXVzdCBiZSBvZiBrbm93biBzaXplLlxuICAgIHdoaWxlIChvdXRwdXRTaGFwZS5sZW5ndGggPCByYWdnZWRSYW5rICsgdmFsdWVTaGFwZS5sZW5ndGgpIHtcbiAgICAgIG91dHB1dFNoYXBlLnB1c2goLTEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRTaGFwZSA9IHNoYXBlLnNsaWNlKCk7XG4gIH1cbiAgaWYgKHZhbHVlU2hhcGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBvdXRwdXRTaGFwZTtcbiAgfVxuICAvLyBBdCB0aGlzIHBvaW50LCB2YWx1ZVNoYXBlIGFuZCBvdXRwdXRfc2hhcGUgaGF2ZSBrbm93biByYW5rcy5cbiAgaWYgKHJhZ2dlZFJhbmsgKyB2YWx1ZVNoYXBlLmxlbmd0aCAhPT0gb3V0cHV0U2hhcGUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcnQgaW5wdXQuc2hhcGUgYW5kIHNoYXBlPSR7c2hhcGV9IGFyZSBpbmNvbXBhdGlibGU6IHJ0IGlucHV0LnJhbmsgPSAke1xuICAgICAgICAgICAgcmFnZ2VkUmFuayArXG4gICAgICAgICAgICB2YWx1ZVNoYXBlLmxlbmd0aH0sIGJ1dCBzaGFwZS5yYW5rID0gJHtvdXRwdXRTaGFwZS5sZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlU2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCB2YWx1ZURpbSA9IHZhbHVlU2hhcGVbaV07XG4gICAgY29uc3Qgb3V0cHV0U2hhcGVEaW1JbmRleCA9XG4gICAgICAgIG91dHB1dFNoYXBlW291dHB1dFNoYXBlLmxlbmd0aCAtIHZhbHVlU2hhcGUubGVuZ3RoICsgaV07XG4gICAgY29uc3Qgb3V0cHV0U2hhcGVEaW0gPSBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZURpbUluZGV4XTtcblxuICAgIGlmICh2YWx1ZURpbSA+PSAwKSB7XG4gICAgICBpZiAob3V0cHV0U2hhcGVEaW0gPj0gMCkge1xuICAgICAgICBpZiAob3V0cHV0U2hhcGVEaW0gIT09IHZhbHVlRGltKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBydCBpbnB1dC5zaGFwZSBhbmQgc2hhcGU9JHtcbiAgICAgICAgICAgICAgc2hhcGV9IGFyZSBpbmNvbXBhdGlibGU6IHJ0IGlucHV0LnNoYXBlWyR7aSArIHJhZ2dlZFJhbmt9XSA9ICR7XG4gICAgICAgICAgICAgIHZhbHVlRGltfSBidXQgc2hhcGVbJHtpICsgcmFnZ2VkUmFua31dID0gJHtvdXRwdXRTaGFwZURpbX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0U2hhcGVbb3V0cHV0U2hhcGVEaW1JbmRleF0gPSB2YWx1ZURpbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFNoYXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93UGFydGl0aW9uVHlwZXNIZWxwZXIocm93UGFydGl0aW9uVHlwZVN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IHN0cmluZ1RvVHlwZSA9IHtcbiAgICAnRklSU1RfRElNX1NJWkUnOiBSb3dQYXJ0aXRpb25UeXBlLkZJUlNUX0RJTV9TSVpFLFxuICAgICdWQUxVRV9ST1dJRFMnOiBSb3dQYXJ0aXRpb25UeXBlLlZBTFVFX1JPV0lEUyxcbiAgICAnUk9XX0xFTkdUSFMnOiBSb3dQYXJ0aXRpb25UeXBlLlJPV19MRU5HVEhTLFxuICAgICdST1dfU1BMSVRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfU1BMSVRTLFxuICAgICdST1dfTElNSVRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfTElNSVRTLFxuICAgICdST1dfU1RBUlRTJzogUm93UGFydGl0aW9uVHlwZS5ST1dfU1RBUlRTXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0OiBSb3dQYXJ0aXRpb25UeXBlW10gPSBbXTtcbiAgZm9yIChjb25zdCB0eXBlU3RyIG9mIHJvd1BhcnRpdGlvblR5cGVTdHJpbmdzKSB7XG4gICAgaWYgKHR5cGVTdHIgaW4gc3RyaW5nVG9UeXBlKSB7XG4gICAgICByZXN1bHQucHVzaChzdHJpbmdUb1R5cGVbdHlwZVN0ciBhcyBrZXlvZiB0eXBlb2Ygc3RyaW5nVG9UeXBlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYWdnZWRSYW5rKHJvd1BhcnRpdGlvblR5cGVzOiBSb3dQYXJ0aXRpb25UeXBlW10pIHtcbiAgaWYgKHJvd1BhcnRpdGlvblR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChyb3dQYXJ0aXRpb25UeXBlc1swXSA9PT0gUm93UGFydGl0aW9uVHlwZS5GSVJTVF9ESU1fU0laRSkge1xuICAgIHJldHVybiByb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGggLSAxO1xuICB9XG4gIHJldHVybiByb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURlZmF1bHRWYWx1ZVNoYXBlKFxuICAgIGRlZmF1bHRWYWx1ZVNoYXBlOiBudW1iZXJbXSwgdmFsdWVTaGFwZTogbnVtYmVyW10pIHtcbiAgaWYgKGRlZmF1bHRWYWx1ZVNoYXBlID09IG51bGwgfHwgdmFsdWVTaGFwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdE5EaW1zID0gZGVmYXVsdFZhbHVlU2hhcGUubGVuZ3RoO1xuICBjb25zdCB2YWx1ZXNORGltcyA9IHZhbHVlU2hhcGUubGVuZ3RoO1xuICBpZiAoZGVmYXVsdE5EaW1zID49IHZhbHVlc05EaW1zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWZhdWx0VmFsdWUuc2hhcGU9JHtcbiAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGV9IGFuZCByYWdnZWQgdGVuc29yIGZsYXRWYWx1ZXMuc2hhcGU9JHtcbiAgICAgICAgdmFsdWVTaGFwZX0sIGFyZSBpbmNvbXBhdGlibGU6IGRlZmF1bHRWYWx1ZS5yYW5rID0gJHtcbiAgICAgICAgZGVmYXVsdE5EaW1zfSBtdXN0IGJlIGxlc3MgdGhhbiByYWdnZWQgdGVuc29yIGlucHV0IGZsYXRWYWx1ZXMucmFuayA9ICR7XG4gICAgICAgIHZhbHVlc05EaW1zfSlgKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGRlZmF1bHRORGltcywgdmFsdWVzTkRpbXMgLSAxKTsgKytpKSB7XG4gICAgY29uc3QgZGVmYXVsdERpbSA9IGRlZmF1bHRWYWx1ZVNoYXBlW2ldO1xuICAgIGNvbnN0IHZhbHVlRGltID0gdmFsdWVTaGFwZVtpICsgMV07XG4gICAgaWYgKGRlZmF1bHREaW0gPj0gMCAmJiB2YWx1ZURpbSA+PSAwICYmIGRlZmF1bHREaW0gIT09IDEgJiZcbiAgICAgICAgZGVmYXVsdERpbSAhPT0gdmFsdWVEaW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVmYXVsdFZhbHVlLnNoYXBlPSR7XG4gICAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGV9LCBhbmQgcmFnZ2VkIHRlbnNvciBpbnB1dCBmbGF0VmFsdWVzLnNoYXBlPSR7XG4gICAgICAgICAgdmFsdWVTaGFwZX0gYXJlIGluY29tcGF0aWJsZTogZGVmYXVsdFZhbHVlLnNoYXBlWyR7XG4gICAgICAgICAgaSAtIGRlZmF1bHRWYWx1ZVNoYXBlLmxlbmd0aH1dID0gJHtcbiAgICAgICAgICBkZWZhdWx0RGltfSBidXQgcmFnZ2VkIHRlbnNvciBpbnB1dC5mbGF0VmFsdWVzLnNoYXBlWyR7XG4gICAgICAgICAgaSAtIGRlZmF1bHRWYWx1ZVNoYXBlLmxlbmd0aH1dID0gJHt2YWx1ZURpbX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Returns the image center in pixels.\nexport function getImageCenter(center, imageHeight, imageWidth) {\n const centerX = imageWidth * (typeof center === 'number' ? center : center[0]);\n const centerY = imageHeight * (typeof center === 'number' ? center : center[1]);\n return [centerX, centerY];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9yb3RhdGVfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxzQ0FBc0M7QUFDdEMsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsTUFBK0IsRUFBRSxXQUFtQixFQUNwRCxVQUFrQjtJQUNwQixNQUFNLE9BQU8sR0FDVCxVQUFVLEdBQUcsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQ1QsV0FBVyxHQUFHLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gUmV0dXJucyB0aGUgaW1hZ2UgY2VudGVyIGluIHBpeGVscy5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZUNlbnRlcihcbiAgICBjZW50ZXI6IG51bWJlcnxbbnVtYmVyLCBudW1iZXJdLCBpbWFnZUhlaWdodDogbnVtYmVyLFxuICAgIGltYWdlV2lkdGg6IG51bWJlcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBjZW50ZXJYID1cbiAgICAgIGltYWdlV2lkdGggKiAodHlwZW9mIGNlbnRlciA9PT0gJ251bWJlcicgPyBjZW50ZXIgOiBjZW50ZXJbMF0pO1xuICBjb25zdCBjZW50ZXJZID1cbiAgICAgIGltYWdlSGVpZ2h0ICogKHR5cGVvZiBjZW50ZXIgPT09ICdudW1iZXInID8gY2VudGVyIDogY2VudGVyWzFdKTtcbiAgcmV0dXJuIFtjZW50ZXJYLCBjZW50ZXJZXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Gets the new shape of the input Tensor after it's been reshaped\n * to:\n * [blockShape[0], ..., blockShape[M-1], batch / prod(blockShape),\n * inputShape[1], ..., inputShape[N-1]]\n *\n * See step 1: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshaped(inputShape, blockShape, prod, batchToSpace = true) {\n let reshaped = [];\n if (batchToSpace) {\n reshaped = reshaped.concat(blockShape.slice(0));\n reshaped.push(inputShape[0] / prod);\n reshaped = reshaped.concat(inputShape.slice(1));\n }\n else {\n reshaped = reshaped.concat(inputShape[0]);\n const spatialLength = blockShape.length;\n for (let i = 0; i < spatialLength; ++i) {\n reshaped =\n reshaped.concat([inputShape[i + 1] / blockShape[i], blockShape[i]]);\n }\n reshaped = reshaped.concat(inputShape.slice(spatialLength + 1));\n }\n return reshaped;\n}\n/**\n * Gets the permutation that will transpose the dimensions of the\n * reshaped tensor to shape:\n *\n * [batch / prod(block_shape),inputShape[1], blockShape[0], ...,\n * inputShape[M], blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * see step 2: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getPermuted(reshapedRank, blockShapeRank, batchToSpace = true) {\n const permuted = [];\n if (batchToSpace) {\n permuted.push(blockShapeRank);\n for (let i = blockShapeRank + 1; i < reshapedRank; ++i) {\n if (i <= 2 * blockShapeRank) {\n permuted.push(i);\n permuted.push(i - (blockShapeRank + 1));\n }\n else {\n permuted.push(i);\n }\n }\n }\n else {\n const permutedBeforeBatch = [];\n const permutedAfterBatch = [];\n for (let i = 1; i < reshapedRank; ++i) {\n if (i >= blockShapeRank * 2 + 1 || i % 2 === 1) {\n permutedAfterBatch.push(i);\n }\n else {\n permutedBeforeBatch.push(i);\n }\n }\n permuted.push(...permutedBeforeBatch);\n permuted.push(0);\n permuted.push(...permutedAfterBatch);\n }\n return permuted;\n}\n/**\n * Gets the shape of the reshaped and permuted input Tensor before any cropping\n * is applied. The new shape will be:\n *\n * [batch / prod(blockShape),inputShape[1] * blockShape[0], ...,\n * inputShape[M] * blockShape[M-1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 3: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getReshapedPermuted(inputShape, blockShape, prod, batchToSpace = true) {\n const reshapedPermuted = [];\n if (batchToSpace) {\n reshapedPermuted.push(inputShape[0] / prod);\n }\n else {\n reshapedPermuted.push(inputShape[0] * prod);\n }\n for (let i = 1; i < inputShape.length; ++i) {\n if (i <= blockShape.length) {\n if (batchToSpace) {\n reshapedPermuted.push(blockShape[i - 1] * inputShape[i]);\n }\n else {\n reshapedPermuted.push(inputShape[i] / blockShape[i - 1]);\n }\n }\n else {\n reshapedPermuted.push(inputShape[i]);\n }\n }\n return reshapedPermuted;\n}\n/**\n * Converts the crops argument into the beginning coordinates of a slice\n * operation.\n */\nexport function getSliceBeginCoords(crops, blockShape) {\n const sliceBeginCoords = [0];\n for (let i = 0; i < blockShape; ++i) {\n sliceBeginCoords.push(crops[i][0]);\n }\n return sliceBeginCoords;\n}\n/**\n * Converts the crops argument into the size of a slice operation. When\n * combined with getSliceBeginCoords this function allows the reshaped and\n * permuted Tensor to be cropped to its final output shape of:\n *\n * inputShape[1] * blockShape[0] - crops[0,0] - crops[0,1], ...,\n * inputShape[M] * blockShape[M-1] -crops[M-1,0] -\n * crops[M-1,1],inputShape[M+1], ..., inputShape[N-1]]\n *\n * See step 4: https://www.tensorflow.org/api_docs/python/tf/batch_to_space_nd\n */\nexport function getSliceSize(uncroppedShape, crops, blockShape) {\n const sliceSize = uncroppedShape.slice(0, 1);\n for (let i = 0; i < blockShape; ++i) {\n sliceSize.push(uncroppedShape[i + 1] - crops[i][0] - crops[i][1]);\n }\n return sliceSize;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfb3BzX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9hcnJheV9vcHNfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsVUFBb0IsRUFBRSxVQUFvQixFQUFFLElBQVksRUFDeEQsWUFBWSxHQUFHLElBQUk7SUFDckIsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksWUFBWSxFQUFFO1FBQ2hCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNwQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakQ7U0FBTTtRQUNMLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUN0QyxRQUFRO2dCQUNKLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFB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TyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixLQUFpQixFQUFFLFVBQWtCO0lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUN4QixjQUF3QixFQUFFLEtBQWlCLEVBQUUsVUFBa0I7SUFDakUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXcgc2hhcGUgb2YgdGhlIGlucHV0IFRlbnNvciBhZnRlciBpdCdzIGJlZW4gcmVzaGFwZWRcbiAqIHRvOlxuICogW2Jsb2NrU2hhcGVbMF0sIC4uLiwgYmxvY2tTaGFwZVtNLTFdLCBiYXRjaCAvIHByb2QoYmxvY2tTaGFwZSksXG4gKiBpbnB1dFNoYXBlWzFdLCAuLi4sIGlucHV0U2hhcGVbTi0xXV1cbiAqXG4gKiBTZWUgc3RlcCAxOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvYmF0Y2hfdG9fc3BhY2VfbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2hhcGVkKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcHJvZDogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGxldCByZXNoYXBlZDogbnVtYmVyW10gPSBbXTtcbiAgaWYgKGJhdGNoVG9TcGFjZSkge1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGJsb2NrU2hhcGUuc2xpY2UoMCkpO1xuICAgIHJlc2hhcGVkLnB1c2goaW5wdXRTaGFwZVswXSAvIHByb2QpO1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGUuc2xpY2UoMSkpO1xuICB9IGVsc2Uge1xuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGVbMF0pO1xuICAgIGNvbnN0IHNwYXRpYWxMZW5ndGggPSBibG9ja1NoYXBlLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwYXRpYWxMZW5ndGg7ICsraSkge1xuICAgICAgcmVzaGFwZWQgPVxuICAgICAgICAgIHJlc2hhcGVkLmNvbmNhdChbaW5wdXRTaGFwZVtpICsgMV0gLyBibG9ja1NoYXBlW2ldLCBibG9ja1NoYXBlW2ldXSk7XG4gICAgfVxuICAgIHJlc2hhcGVkID0gcmVzaGFwZWQuY29uY2F0KGlucHV0U2hhcGUuc2xpY2Uoc3BhdGlhbExlbmd0aCArIDEpKTtcbiAgfVxuICByZXR1cm4gcmVzaGFwZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcGVybXV0YXRpb24gdGhhdCB3aWxsIHRyYW5zcG9zZSB0aGUgZGltZW5zaW9ucyBvZiB0aGVcbiAqIHJlc2hhcGVkIHRlbnNvciB0byBzaGFwZTpcbiAqXG4gKiBbYmF0Y2ggLyBwcm9kKGJsb2NrX3NoYXBlKSxpbnB1dFNoYXBlWzFdLCBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dLCBibG9ja1NoYXBlW00tMV0saW5wdXRTaGFwZVtNKzFdLCAuLi4sIGlucHV0U2hhcGVbTi0xXV1cbiAqXG4gKiBzZWUgc3RlcCAyOiBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvYmF0Y2hfdG9fc3BhY2VfbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm11dGVkKFxuICAgIHJlc2hhcGVkUmFuazogbnVtYmVyLCBibG9ja1NoYXBlUmFuazogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGNvbnN0IHBlcm11dGVkID0gW107XG4gIGlmIChiYXRjaFRvU3BhY2UpIHtcbiAgICBwZXJtdXRlZC5wdXNoKGJsb2NrU2hhcGVSYW5rKTtcbiAgICBmb3IgKGxldCBpID0gYmxvY2tTaGFwZVJhbmsgKyAxOyBpIDwgcmVzaGFwZWRSYW5rOyArK2kpIHtcbiAgICAgIGlmIChpIDw9IDIgKiBibG9ja1NoYXBlUmFuaykge1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkpO1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkgLSAoYmxvY2tTaGFwZVJhbmsgKyAxKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZXJtdXRlZC5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwZXJtdXRlZEJlZm9yZUJhdGNoID0gW107XG4gICAgY29uc3QgcGVybXV0ZWRBZnRlckJhdGNoID0gW107XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCByZXNoYXBlZFJhbms7ICsraSkge1xuICAgICAgaWYgKGkgPj0gYmxvY2tTaGFwZVJhbmsgKiAyICsgMSB8fCBpICUgMiA9PT0gMSkge1xuICAgICAgICBwZXJtdXRlZEFmdGVyQmF0Y2gucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlcm11dGVkQmVmb3JlQmF0Y2gucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGVybXV0ZWQucHVzaCguLi5wZXJtdXRlZEJlZm9yZUJhdGNoKTtcbiAgICBwZXJtdXRlZC5wdXNoKDApO1xuICAgIHBlcm11dGVkLnB1c2goLi4ucGVybXV0ZWRBZnRlckJhdGNoKTtcbiAgfVxuICByZXR1cm4gcGVybXV0ZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2hhcGUgb2YgdGhlIHJlc2hhcGVkIGFuZCBwZXJtdXRlZCBpbnB1dCBUZW5zb3IgYmVmb3JlIGFueSBjcm9wcGluZ1xuICogaXMgYXBwbGllZC4gIFRoZSBuZXcgc2hhcGUgd2lsbCBiZTpcbiAqXG4gKiBbYmF0Y2ggLyBwcm9kKGJsb2NrU2hhcGUpLGlucHV0U2hhcGVbMV0gKiBibG9ja1NoYXBlWzBdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdLGlucHV0U2hhcGVbTSsxXSwgLi4uLCBpbnB1dFNoYXBlW04tMV1dXG4gKlxuICogU2VlIHN0ZXAgMzogaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2JhdGNoX3RvX3NwYWNlX25kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNoYXBlZFBlcm11dGVkKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBibG9ja1NoYXBlOiBudW1iZXJbXSwgcHJvZDogbnVtYmVyLFxuICAgIGJhdGNoVG9TcGFjZSA9IHRydWUpOiBudW1iZXJbXSB7XG4gIGNvbnN0IHJlc2hhcGVkUGVybXV0ZWQgPSBbXTtcblxuICBpZiAoYmF0Y2hUb1NwYWNlKSB7XG4gICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGlucHV0U2hhcGVbMF0gLyBwcm9kKTtcbiAgfSBlbHNlIHtcbiAgICByZXNoYXBlZFBlcm11dGVkLnB1c2goaW5wdXRTaGFwZVswXSAqIHByb2QpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBpbnB1dFNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPD0gYmxvY2tTaGFwZS5sZW5ndGgpIHtcbiAgICAgIGlmIChiYXRjaFRvU3BhY2UpIHtcbiAgICAgICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGJsb2NrU2hhcGVbaSAtIDFdICogaW5wdXRTaGFwZVtpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNoYXBlZFBlcm11dGVkLnB1c2goaW5wdXRTaGFwZVtpXSAvIGJsb2NrU2hhcGVbaSAtIDFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzaGFwZWRQZXJtdXRlZC5wdXNoKGlucHV0U2hhcGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNoYXBlZFBlcm11dGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBjcm9wcyBhcmd1bWVudCBpbnRvIHRoZSBiZWdpbm5pbmcgY29vcmRpbmF0ZXMgb2YgYSBzbGljZVxuICogb3BlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xpY2VCZWdpbkNvb3JkcyhcbiAgICBjcm9wczogbnVtYmVyW11bXSwgYmxvY2tTaGFwZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBzbGljZUJlZ2luQ29vcmRzID0gWzBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrU2hhcGU7ICsraSkge1xuICAgIHNsaWNlQmVnaW5Db29yZHMucHVzaChjcm9wc1tpXVswXSk7XG4gIH1cbiAgcmV0dXJuIHNsaWNlQmVnaW5Db29yZHM7XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNyb3BzIGFyZ3VtZW50IGludG8gdGhlIHNpemUgb2YgYSBzbGljZSBvcGVyYXRpb24uICBXaGVuXG4gKiBjb21iaW5lZCB3aXRoIGdldFNsaWNlQmVnaW5Db29yZHMgdGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHJlc2hhcGVkIGFuZFxuICogcGVybXV0ZWQgVGVuc29yIHRvIGJlIGNyb3BwZWQgdG8gaXRzIGZpbmFsIG91dHB1dCBzaGFwZSBvZjpcbiAqXG4gKiBpbnB1dFNoYXBlWzFdICogYmxvY2tTaGFwZVswXSAtIGNyb3BzWzAsMF0gLSBjcm9wc1swLDFdLCAuLi4sXG4gKiBpbnB1dFNoYXBlW01dICogYmxvY2tTaGFwZVtNLTFdIC1jcm9wc1tNLTEsMF0gLVxuICogY3JvcHNbTS0xLDFdLGlucHV0U2hhcGVbTSsxXSwgLi4uLCBpbnB1dFNoYXBlW04tMV1dXG4gKlxuICogU2VlIHN0ZXAgNDogaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2JhdGNoX3RvX3NwYWNlX25kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbGljZVNpemUoXG4gICAgdW5jcm9wcGVkU2hhcGU6IG51bWJlcltdLCBjcm9wczogbnVtYmVyW11bXSwgYmxvY2tTaGFwZTogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBzbGljZVNpemUgPSB1bmNyb3BwZWRTaGFwZS5zbGljZSgwLCAxKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja1NoYXBlOyArK2kpIHtcbiAgICBzbGljZVNpemUucHVzaCh1bmNyb3BwZWRTaGFwZVtpICsgMV0gLSBjcm9wc1tpXVswXSAtIGNyb3BzW2ldWzFdKTtcbiAgfVxuXG4gIHJldHVybiBzbGljZVNpemU7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const SELU_SCALEALPHA = 1.7580993408473768599402175208123;\nexport const SELU_SCALE = 1.0507009873554804934193349852946;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsdV91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2VsdV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxpQ0FBaUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBjb25zdCBTRUxVX1NDQUxFQUxQSEEgPSAxLjc1ODA5OTM0MDg0NzM3Njg1OTk0MDIxNzUyMDgxMjM7XG5leHBvcnQgY29uc3QgU0VMVV9TQ0FMRSA9IDEuMDUwNzAwOTg3MzU1NDgwNDkzNDE5MzM0OTg1Mjk0NjtcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const ERF_P = 0.3275911;\nexport const ERF_A1 = 0.254829592;\nexport const ERF_A2 = -0.284496736;\nexport const ERF_A3 = 1.421413741;\nexport const ERF_A4 = -1.453152027;\nexport const ERF_A5 = 1.061405429;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJmX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9lcmZfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmV4cG9ydCBjb25zdCBFUkZfUCA9IDAuMzI3NTkxMTtcbmV4cG9ydCBjb25zdCBFUkZfQTEgPSAwLjI1NDgyOTU5MjtcbmV4cG9ydCBjb25zdCBFUkZfQTIgPSAtMC4yODQ0OTY3MzY7XG5leHBvcnQgY29uc3QgRVJGX0EzID0gMS40MjE0MTM3NDE7XG5leHBvcnQgY29uc3QgRVJGX0E0ID0gLTEuNDUzMTUyMDI3O1xuZXhwb3J0IGNvbnN0IEVSRl9BNSA9IDEuMDYxNDA1NDI5O1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Merges real and imaginary Float32Arrays into a single complex Float32Array.\n *\n * The memory layout is interleaved as follows:\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n * complex: [r0, i0, r1, i1, r2, i2]\n *\n * This is the inverse of splitRealAndImagArrays.\n *\n * @param real The real values of the complex tensor values.\n * @param imag The imag values of the complex tensor values.\n * @returns A complex tensor as a Float32Array with merged values.\n */\nexport function mergeRealAndImagArrays(real, imag) {\n if (real.length !== imag.length) {\n throw new Error(`Cannot merge real and imag arrays of different lengths. real:` +\n `${real.length}, imag: ${imag.length}.`);\n }\n const result = new Float32Array(real.length * 2);\n for (let i = 0; i < result.length; i += 2) {\n result[i] = real[i / 2];\n result[i + 1] = imag[i / 2];\n }\n return result;\n}\n/**\n * Splits a complex Float32Array into real and imag parts.\n *\n * The memory layout is interleaved as follows:\n * complex: [r0, i0, r1, i1, r2, i2]\n * real: [r0, r1, r2]\n * imag: [i0, i1, i2]\n *\n * This is the inverse of mergeRealAndImagArrays.\n *\n * @param complex The complex tensor values.\n * @returns An object with real and imag Float32Array components of the complex\n * tensor.\n */\nexport function splitRealAndImagArrays(complex) {\n const real = new Float32Array(complex.length / 2);\n const imag = new Float32Array(complex.length / 2);\n for (let i = 0; i < complex.length; i += 2) {\n real[i / 2] = complex[i];\n imag[i / 2] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Extracts even indexed complex values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithEvenIndex(complex) {\n const len = Math.ceil(complex.length / 4);\n const real = new Float32Array(len);\n const imag = new Float32Array(len);\n for (let i = 0; i < complex.length; i += 4) {\n real[Math.floor(i / 4)] = complex[i];\n imag[Math.floor(i / 4)] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Extracts odd indexed comple values in the given array.\n * @param complex The complex tensor values\n */\nexport function complexWithOddIndex(complex) {\n const len = Math.floor(complex.length / 4);\n const real = new Float32Array(len);\n const imag = new Float32Array(len);\n for (let i = 2; i < complex.length; i += 4) {\n real[Math.floor(i / 4)] = complex[i];\n imag[Math.floor(i / 4)] = complex[i + 1];\n }\n return { real, imag };\n}\n/**\n * Get the map representing a complex value in the given array.\n * @param complex The complex tensor values.\n * @param index An index of the target complex value.\n */\nexport function getComplexWithIndex(complex, index) {\n const real = complex[index * 2];\n const imag = complex[index * 2 + 1];\n return { real, imag };\n}\n/**\n * Insert a given complex value into the TypedArray.\n * @param data The array in which the complex value is inserted.\n * @param c The complex value to be inserted.\n * @param index An index of the target complex value.\n */\nexport function assignToTypedArray(data, real, imag, index) {\n data[index * 2] = real;\n data[index * 2 + 1] = imag;\n}\n/**\n * Make the list of exponent terms used by FFT.\n */\nexport function exponents(n, inverse) {\n const real = new Float32Array(n / 2);\n const imag = new Float32Array(n / 2);\n for (let i = 0; i < Math.ceil(n / 2); i++) {\n const x = (inverse ? 2 : -2) * Math.PI * (i / n);\n real[i] = Math.cos(x);\n imag[i] = Math.sin(x);\n }\n return { real, imag };\n}\n/**\n * Make the exponent term used by FFT.\n */\nexport function exponent(k, n, inverse) {\n const x = (inverse ? 2 : -2) * Math.PI * (k / n);\n const real = Math.cos(x);\n const imag = Math.sin(x);\n return { real, imag };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9jb21wbGV4X3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0g7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsSUFBa0IsRUFBRSxJQUFrQjtJQUN4QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUNYLCtEQUErRDtZQUMvRCxHQUFHLElBQUksQ0FBQyxNQUFNLFdBQVcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDOUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBcUI7SUFFMUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFB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LENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1R5cGVkQXJyYXl9IGZyb20gJy4uL3R5cGVzJztcbi8qKlxuICogTWVyZ2VzIHJlYWwgYW5kIGltYWdpbmFyeSBGbG9hdDMyQXJyYXlzIGludG8gYSBzaW5nbGUgY29tcGxleCBGbG9hdDMyQXJyYXkuXG4gKlxuICogVGhlIG1lbW9yeSBsYXlvdXQgaXMgaW50ZXJsZWF2ZWQgYXMgZm9sbG93czpcbiAqIHJlYWw6IFtyMCwgcjEsIHIyXVxuICogaW1hZzogW2kwLCBpMSwgaTJdXG4gKiBjb21wbGV4OiBbcjAsIGkwLCByMSwgaTEsIHIyLCBpMl1cbiAqXG4gKiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIHNwbGl0UmVhbEFuZEltYWdBcnJheXMuXG4gKlxuICogQHBhcmFtIHJlYWwgVGhlIHJlYWwgdmFsdWVzIG9mIHRoZSBjb21wbGV4IHRlbnNvciB2YWx1ZXMuXG4gKiBAcGFyYW0gaW1hZyBUaGUgaW1hZyB2YWx1ZXMgb2YgdGhlIGNvbXBsZXggdGVuc29yIHZhbHVlcy5cbiAqIEByZXR1cm5zIEEgY29tcGxleCB0ZW5zb3IgYXMgYSBGbG9hdDMyQXJyYXkgd2l0aCBtZXJnZWQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhcbiAgICByZWFsOiBGbG9hdDMyQXJyYXksIGltYWc6IEZsb2F0MzJBcnJheSk6IEZsb2F0MzJBcnJheSB7XG4gIGlmIChyZWFsLmxlbmd0aCAhPT0gaW1hZy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgbWVyZ2UgcmVhbCBhbmQgaW1hZyBhcnJheXMgb2YgZGlmZmVyZW50IGxlbmd0aHMuIHJlYWw6YCArXG4gICAgICAgIGAke3JlYWwubGVuZ3RofSwgaW1hZzogJHtpbWFnLmxlbmd0aH0uYCk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gbmV3IEZsb2F0MzJBcnJheShyZWFsLmxlbmd0aCAqIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlc3VsdFtpXSA9IHJlYWxbaSAvIDJdO1xuICAgIHJlc3VsdFtpICsgMV0gPSBpbWFnW2kgLyAyXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIGNvbXBsZXggRmxvYXQzMkFycmF5IGludG8gcmVhbCBhbmQgaW1hZyBwYXJ0cy5cbiAqXG4gKiBUaGUgbWVtb3J5IGxheW91dCBpcyBpbnRlcmxlYXZlZCBhcyBmb2xsb3dzOlxuICogY29tcGxleDogW3IwLCBpMCwgcjEsIGkxLCByMiwgaTJdXG4gKiByZWFsOiBbcjAsIHIxLCByMl1cbiAqIGltYWc6IFtpMCwgaTEsIGkyXVxuICpcbiAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgbWVyZ2VSZWFsQW5kSW1hZ0FycmF5cy5cbiAqXG4gKiBAcGFyYW0gY29tcGxleCBUaGUgY29tcGxleCB0ZW5zb3IgdmFsdWVzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggcmVhbCBhbmQgaW1hZyBGbG9hdDMyQXJyYXkgY29tcG9uZW50cyBvZiB0aGUgY29tcGxleFxuICogICAgIHRlbnNvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UmVhbEFuZEltYWdBcnJheXMoY29tcGxleDogRmxvYXQzMkFycmF5KTpcbiAgICB7cmVhbDogRmxvYXQzMkFycmF5LCBpbWFnOiBGbG9hdDMyQXJyYXl9IHtcbiAgY29uc3QgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcGxleC5sZW5ndGggLyAyKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkoY29tcGxleC5sZW5ndGggLyAyKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wbGV4Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVhbFtpIC8gMl0gPSBjb21wbGV4W2ldO1xuICAgIGltYWdbaSAvIDJdID0gY29tcGxleFtpICsgMV07XG4gIH1cbiAgcmV0dXJuIHtyZWFsLCBpbWFnfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBldmVuIGluZGV4ZWQgY29tcGxleCB2YWx1ZXMgaW4gdGhlIGdpdmVuIGFycmF5LlxuICogQHBhcmFtIGNvbXBsZXggVGhlIGNvbXBsZXggdGVuc29yIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFdpdGhFdmVuSW5kZXgoY29tcGxleDogRmxvYXQzMkFycmF5KTpcbiAgICB7cmVhbDogRmxvYXQzMkFycmF5LCBpbWFnOiBGbG9hdDMyQXJyYXl9IHtcbiAgY29uc3QgbGVuID0gTWF0aC5jZWlsKGNvbXBsZXgubGVuZ3RoIC8gNCk7XG4gIGNvbnN0IHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG4gIGNvbnN0IGltYWcgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcGxleC5sZW5ndGg7IGkgKz0gNCkge1xuICAgIHJlYWxbTWF0aC5mbG9vcihpIC8gNCldID0gY29tcGxleFtpXTtcbiAgICBpbWFnW01hdGguZmxvb3IoaSAvIDQpXSA9IGNvbXBsZXhbaSArIDFdO1xuICB9XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogRXh0cmFjdHMgb2RkIGluZGV4ZWQgY29tcGxlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gYXJyYXkuXG4gKiBAcGFyYW0gY29tcGxleCBUaGUgY29tcGxleCB0ZW5zb3IgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4V2l0aE9kZEluZGV4KGNvbXBsZXg6IEZsb2F0MzJBcnJheSk6XG4gICAge3JlYWw6IEZsb2F0MzJBcnJheSwgaW1hZzogRmxvYXQzMkFycmF5fSB7XG4gIGNvbnN0IGxlbiA9IE1hdGguZmxvb3IoY29tcGxleC5sZW5ndGggLyA0KTtcbiAgY29uc3QgcmVhbCA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgZm9yIChsZXQgaSA9IDI7IGkgPCBjb21wbGV4Lmxlbmd0aDsgaSArPSA0KSB7XG4gICAgcmVhbFtNYXRoLmZsb29yKGkgLyA0KV0gPSBjb21wbGV4W2ldO1xuICAgIGltYWdbTWF0aC5mbG9vcihpIC8gNCldID0gY29tcGxleFtpICsgMV07XG4gIH1cbiAgcmV0dXJuIHtyZWFsLCBpbWFnfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1hcCByZXByZXNlbnRpbmcgYSBjb21wbGV4IHZhbHVlIGluIHRoZSBnaXZlbiBhcnJheS5cbiAqIEBwYXJhbSBjb21wbGV4IFRoZSBjb21wbGV4IHRlbnNvciB2YWx1ZXMuXG4gKiBAcGFyYW0gaW5kZXggQW4gaW5kZXggb2YgdGhlIHRhcmdldCBjb21wbGV4IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcGxleFdpdGhJbmRleChcbiAgICBjb21wbGV4OiBGbG9hdDMyQXJyYXksIGluZGV4OiBudW1iZXIpOiB7cmVhbDogbnVtYmVyLCBpbWFnOiBudW1iZXJ9IHtcbiAgY29uc3QgcmVhbCA9IGNvbXBsZXhbaW5kZXggKiAyXTtcbiAgY29uc3QgaW1hZyA9IGNvbXBsZXhbaW5kZXggKiAyICsgMV07XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogSW5zZXJ0IGEgZ2l2ZW4gY29tcGxleCB2YWx1ZSBpbnRvIHRoZSBUeXBlZEFycmF5LlxuICogQHBhcmFtIGRhdGEgVGhlIGFycmF5IGluIHdoaWNoIHRoZSBjb21wbGV4IHZhbHVlIGlzIGluc2VydGVkLlxuICogQHBhcmFtIGMgVGhlIGNvbXBsZXggdmFsdWUgdG8gYmUgaW5zZXJ0ZWQuXG4gKiBAcGFyYW0gaW5kZXggQW4gaW5kZXggb2YgdGhlIHRhcmdldCBjb21wbGV4IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduVG9UeXBlZEFycmF5KFxuICAgIGRhdGE6IFR5cGVkQXJyYXksIHJlYWw6IG51bWJlciwgaW1hZzogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGRhdGFbaW5kZXggKiAyXSA9IHJlYWw7XG4gIGRhdGFbaW5kZXggKiAyICsgMV0gPSBpbWFnO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIGxpc3Qgb2YgZXhwb25lbnQgdGVybXMgdXNlZCBieSBGRlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvbmVudHMoXG4gICAgbjogbnVtYmVyLCBpbnZlcnNlOiBib29sZWFuKToge3JlYWw6IEZsb2F0MzJBcnJheSwgaW1hZzogRmxvYXQzMkFycmF5fSB7XG4gIGNvbnN0IHJlYWwgPSBuZXcgRmxvYXQzMkFycmF5KG4gLyAyKTtcbiAgY29uc3QgaW1hZyA9IG5ldyBGbG9hdDMyQXJyYXkobiAvIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguY2VpbChuIC8gMik7IGkrKykge1xuICAgIGNvbnN0IHggPSAoaW52ZXJzZSA/IDIgOiAtMikgKiBNYXRoLlBJICogKGkgLyBuKTtcbiAgICByZWFsW2ldID0gTWF0aC5jb3MoeCk7XG4gICAgaW1hZ1tpXSA9IE1hdGguc2luKHgpO1xuICB9XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG5cbi8qKlxuICogTWFrZSB0aGUgZXhwb25lbnQgdGVybSB1c2VkIGJ5IEZGVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9uZW50KFxuICAgIGs6IG51bWJlciwgbjogbnVtYmVyLCBpbnZlcnNlOiBib29sZWFuKToge3JlYWw6IG51bWJlciwgaW1hZzogbnVtYmVyfSB7XG4gIGNvbnN0IHggPSAoaW52ZXJzZSA/IDIgOiAtMikgKiBNYXRoLlBJICogKGsgLyBuKTtcbiAgY29uc3QgcmVhbCA9IE1hdGguY29zKHgpO1xuICBjb25zdCBpbWFnID0gTWF0aC5zaW4oeCk7XG4gIHJldHVybiB7cmVhbCwgaW1hZ307XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../util_base';\nconst ARROW = '->';\nconst ARROW_REGEX = /->/g;\nconst COMMA = ',';\nconst ELLIPSIS = '...';\n/**\n * Parse an equation for einsum.\n *\n * @param equation The einsum equation (e.g., \"ij,jk->ik\").\n * @param numTensors Number of tensors provided along with `equation`. Used to\n * check matching number of input tensors.\n * @returns An object consisting of the following fields:\n * - allDims: all dimension names as strings.\n * - summedDims: a list of all dimensions being summed over, as indices to\n * the elements of `allDims`.\n * - idDims: indices of the dimensions in each input tensor, as indices to\n * the elements of `allDims.\n */\nexport function decodeEinsumEquation(equation, numTensors) {\n equation = equation.replace(/\\s/g, ''); // Remove witespace in equation.\n const numArrows = (equation.length - equation.replace(ARROW_REGEX, '').length) /\n ARROW.length;\n if (numArrows < 1) {\n throw new Error('Equations without an arrow are not supported.');\n }\n else if (numArrows > 1) {\n throw new Error(`Equation must contain exactly one arrow (\"${ARROW}\").`);\n }\n const [inputString, outputString] = equation.split(ARROW);\n assert(inputString.indexOf(ELLIPSIS) === -1, () => `The ellipsis notation (\"${ELLIPSIS}\") is not supported yet.`);\n const inputTerms = inputString.split(COMMA);\n const numInputs = inputTerms.length;\n if (numTensors !== numInputs) {\n throw new Error(`Expected ${numInputs} input tensors, received ${numTensors}`);\n }\n if (numInputs > 2) {\n throw new Error('Support for more than 2 input tensors is not implemented yet.');\n }\n const allDims = [];\n for (let i = 0; i < outputString.length; ++i) {\n const dimName = outputString[i];\n if (!inputTerms.some(inputTerm => inputTerm.indexOf(dimName) !== -1)) {\n throw new Error(`Output subscripts contain the label ${dimName} ` +\n `not present in the input subscripts.`);\n }\n if (allDims.indexOf(dimName) === -1) {\n allDims.push(dimName);\n }\n }\n for (let i = 0; i < inputString.length; ++i) {\n const dimName = inputString[i];\n if (allDims.indexOf(dimName) === -1 && dimName !== COMMA) {\n allDims.push(dimName);\n }\n }\n const idDims = new Array(inputTerms.length);\n for (let i = 0; i < numInputs; ++i) {\n if (new Set(inputTerms[i].split('')).size !== inputTerms[i].length) {\n throw new Error(`Found duplicate axes in input component ${inputTerms[i]}. ` +\n `Support for duplicate axes in input is not implemented yet.`);\n }\n idDims[i] = [];\n for (let j = 0; j < inputTerms[i].length; ++j) {\n idDims[i].push(allDims.indexOf(inputTerms[i][j]));\n }\n }\n const numDims = allDims.length; // Number of unique dimensions.\n const numOutDims = outputString.length; // Number of output dimensions.\n const summedDims = []; // Dimensions being summed over.\n for (let i = numOutDims; i < numDims; ++i) {\n summedDims.push(i);\n }\n return { allDims, summedDims, idDims };\n}\n/**\n * Get the permutation for a given input tensor.\n *\n * @param nDims Total number of dimension of all tensors involved in the einsum\n * operation.\n * @param idDims Dimension indices involve in the tensor in question.\n * @returns An object consisting of the following fields:\n * - permutationIndices: Indices to permute the axes of the tensor with.\n * - expandDims: Indices to the dimension that need to be expanded from the\n * tensor after permutation.\n */\nexport function getEinsumPermutation(nDims, idDims) {\n let permutationIndices = new Array(nDims);\n permutationIndices.fill(-1);\n for (let i = 0; i < idDims.length; ++i) {\n permutationIndices[idDims[i]] = i;\n }\n const expandDims = [];\n for (let i = 0; i < nDims; ++i) {\n if (permutationIndices[i] === -1) {\n expandDims.push(i);\n }\n }\n permutationIndices = permutationIndices.filter(d => d !== -1);\n return { permutationIndices, expandDims };\n}\n/**\n * Checks that the dimension sizes from different input tensors match the\n * equation.\n */\nexport function checkEinsumDimSizes(nDims, idDims, tensors) {\n const dimSizes = new Array(nDims);\n for (let i = 0; i < tensors.length; ++i) {\n const shape = tensors[i].shape;\n for (let j = 0; j < idDims[i].length; ++j) {\n if (dimSizes[idDims[i][j]] === undefined) {\n dimSizes[idDims[i][j]] = shape[j];\n }\n else {\n assert(dimSizes[idDims[i][j]] === shape[j], () => `Expected dimension ${dimSizes[idDims[i][j]]} at axis ${j} ` +\n `of input shaped ${JSON.stringify(shape)}, ` +\n `but got dimension ${shape[j]}`);\n }\n }\n }\n}\n/**\n * Gets path of computation for einsum.\n *\n * @param summedDims indices to the dimensions being summed over.\n * @param idDims A look up table for the dimensions present in each input\n * tensor. Each consituent array contains indices for the dimensions in the\n * corresponding input tensor.\n *\n * @return A map with two fields:\n * - path: The path of computation, with each element indicating the dimension\n * being summed over after the element-wise multiplication in that step.\n * - steps: With the same length as `path`. Each element contains the indices\n * to the input tensors being used for element-wise multiplication in the\n * corresponding step.\n */\nexport function getEinsumComputePath(summedDims, idDims) {\n const path = summedDims;\n const steps = [];\n let nSteps = 0;\n if (summedDims.length === 0) {\n // Einsum that involes no summing: e.g., transpose and outer product.\n path.push(-1);\n }\n nSteps = summedDims.length + 1;\n for (let i = 0; i < nSteps; ++i) {\n steps.push([]);\n }\n const computedTermIndices = [];\n for (let i = 0; i < path.length; ++i) {\n const summedDim = path[i];\n const termIndices = findTermsWithDim(idDims, summedDim);\n for (const termIndex of termIndices) {\n if (computedTermIndices.indexOf(termIndex) === -1) {\n steps[i].push(termIndex);\n computedTermIndices.push(termIndex);\n }\n }\n }\n return { path, steps };\n}\n/** Determines if an axes permutation is the identity permutation. */\nexport function isIdentityPermutation(perm) {\n return perm.every((dim, index) => dim === index);\n}\nfunction findTermsWithDim(idDims, dim) {\n const termIndices = [];\n for (let i = 0; i < idDims.length; ++i) {\n if (idDims[i].length === 0 || idDims[i].indexOf(dim) !== -1 || dim === -1) {\n termIndices.push(i);\n }\n }\n return termIndices;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWluc3VtX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2JhY2tlbmRzL2VpbnN1bV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQVFILE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ25CLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFVBQWtCO0lBS3ZFLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFFLGdDQUFnQztJQUN6RSxNQUFNLFNBQVMsR0FDWCxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzVELEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztLQUNsRTtTQUFNLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxLQUFLLEtBQUssQ0FBQyxDQUFDO0tBQzFFO0lBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FDRixXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMs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Q0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE1BQWtCLEVBQUUsR0FBVztJQUN2RCxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN6RSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO0tBQ0Y7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBjb21wdXRpbmcgZWluc3VtICh0ZW5zb3IgY29udHJhY3Rpb24gYW5kIHN1bW1hdGlvblxuICogYmFzZWQgb24gRWluc3RlaW4gc3VtbWF0aW9uLilcbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsX2Jhc2UnO1xuXG5jb25zdCBBUlJPVyA9ICctPic7XG5jb25zdCBBUlJPV19SRUdFWCA9IC8tPi9nO1xuY29uc3QgQ09NTUEgPSAnLCc7XG5jb25zdCBFTExJUFNJUyA9ICcuLi4nO1xuXG4vKipcbiAqIFBhcnNlIGFuIGVxdWF0aW9uIGZvciBlaW5zdW0uXG4gKlxuICogQHBhcmFtIGVxdWF0aW9uIFRoZSBlaW5zdW0gZXF1YXRpb24gKGUuZy4sIFwiaWosamstPmlrXCIpLlxuICogQHBhcmFtIG51bVRlbnNvcnMgTnVtYmVyIG9mIHRlbnNvcnMgcHJvdmlkZWQgYWxvbmcgd2l0aCBgZXF1YXRpb25gLiBVc2VkIHRvXG4gKiAgIGNoZWNrIG1hdGNoaW5nIG51bWJlciBvZiBpbnB1dCB0ZW5zb3JzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAgIC0gYWxsRGltczogYWxsIGRpbWVuc2lvbiBuYW1lcyBhcyBzdHJpbmdzLlxuICogICAtIHN1bW1lZERpbXM6IGEgbGlzdCBvZiBhbGwgZGltZW5zaW9ucyBiZWluZyBzdW1tZWQgb3ZlciwgYXMgaW5kaWNlcyB0b1xuICogICAgIHRoZSBlbGVtZW50cyBvZiBgYWxsRGltc2AuXG4gKiAgIC0gaWREaW1zOiBpbmRpY2VzIG9mIHRoZSBkaW1lbnNpb25zIGluIGVhY2ggaW5wdXQgdGVuc29yLCBhcyBpbmRpY2VzIHRvXG4gKiAgICAgdGhlIGVsZW1lbnRzIG9mIGBhbGxEaW1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRWluc3VtRXF1YXRpb24oZXF1YXRpb246IHN0cmluZywgbnVtVGVuc29yczogbnVtYmVyKToge1xuICBhbGxEaW1zOiBzdHJpbmdbXSxcbiAgc3VtbWVkRGltczogbnVtYmVyW10sXG4gIGlkRGltczogbnVtYmVyW11bXSxcbn0ge1xuICBlcXVhdGlvbiA9IGVxdWF0aW9uLnJlcGxhY2UoL1xccy9nLCAnJyk7ICAvLyBSZW1vdmUgd2l0ZXNwYWNlIGluIGVxdWF0aW9uLlxuICBjb25zdCBudW1BcnJvd3MgPVxuICAgICAgKGVxdWF0aW9uLmxlbmd0aCAtIGVxdWF0aW9uLnJlcGxhY2UoQVJST1dfUkVHRVgsICcnKS5sZW5ndGgpIC9cbiAgICAgIEFSUk9XLmxlbmd0aDtcbiAgaWYgKG51bUFycm93cyA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VxdWF0aW9ucyB3aXRob3V0IGFuIGFycm93IGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9IGVsc2UgaWYgKG51bUFycm93cyA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVxdWF0aW9uIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBhcnJvdyAoXCIke0FSUk9XfVwiKS5gKTtcbiAgfVxuICBjb25zdCBbaW5wdXRTdHJpbmcsIG91dHB1dFN0cmluZ10gPSBlcXVhdGlvbi5zcGxpdChBUlJPVyk7XG4gIGFzc2VydChcbiAgICAgIGlucHV0U3RyaW5nLmluZGV4T2YoRUxMSVBTSVMpID09PSAtMSxcbiAgICAgICgpID0+IGBUaGUgZWxsaXBzaXMgbm90YXRpb24gKFwiJHtFTExJUFNJU31cIikgaXMgbm90IHN1cHBvcnRlZCB5ZXQuYCk7XG4gIGNvbnN0IGlucHV0VGVybXMgPSBpbnB1dFN0cmluZy5zcGxpdChDT01NQSk7XG4gIGNvbnN0IG51bUlucHV0cyA9IGlucHV0VGVybXMubGVuZ3RoO1xuICBpZiAobnVtVGVuc29ycyAhPT0gbnVtSW5wdXRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgJHtudW1JbnB1dHN9IGlucHV0IHRlbnNvcnMsIHJlY2VpdmVkICR7bnVtVGVuc29yc31gKTtcbiAgfVxuICBpZiAobnVtSW5wdXRzID4gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1N1cHBvcnQgZm9yIG1vcmUgdGhhbiAyIGlucHV0IHRlbnNvcnMgaXMgbm90IGltcGxlbWVudGVkIHlldC4nKTtcbiAgfVxuXG4gIGNvbnN0IGFsbERpbXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0U3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgZGltTmFtZSA9IG91dHB1dFN0cmluZ1tpXTtcbiAgICBpZiAoIWlucHV0VGVybXMuc29tZShpbnB1dFRlcm0gPT4gaW5wdXRUZXJtLmluZGV4T2YoZGltTmFtZSkgIT09IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBPdXRwdXQgc3Vic2NyaXB0cyBjb250YWluIHRoZSBsYWJlbCAke2RpbU5hbWV9IGAgK1xuICAgICAgICAgIGBub3QgcHJlc2VudCBpbiB0aGUgaW5wdXQgc3Vic2NyaXB0cy5gKTtcbiAgICB9XG4gICAgaWYgKGFsbERpbXMuaW5kZXhPZihkaW1OYW1lKSA9PT0gLTEpIHtcbiAgICAgIGFsbERpbXMucHVzaChkaW1OYW1lKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFN0cmluZy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGRpbU5hbWUgPSBpbnB1dFN0cmluZ1tpXTtcbiAgICBpZiAoYWxsRGltcy5pbmRleE9mKGRpbU5hbWUpID09PSAtMSAmJiBkaW1OYW1lICE9PSBDT01NQSkge1xuICAgICAgYWxsRGltcy5wdXNoKGRpbU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlkRGltczogbnVtYmVyW11bXSA9IG5ldyBBcnJheTxudW1iZXJbXT4oaW5wdXRUZXJtcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUlucHV0czsgKytpKSB7XG4gICAgaWYgKG5ldyBTZXQoaW5wdXRUZXJtc1tpXS5zcGxpdCgnJykpLnNpemUgIT09IGlucHV0VGVybXNbaV0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZvdW5kIGR1cGxpY2F0ZSBheGVzIGluIGlucHV0IGNvbXBvbmVudCAke2lucHV0VGVybXNbaV19LiBgICtcbiAgICAgICAgICBgU3VwcG9ydCBmb3IgZHVwbGljYXRlIGF4ZXMgaW4gaW5wdXQgaXMgbm90IGltcGxlbWVudGVkIHlldC5gKTtcbiAgICB9XG4gICAgaWREaW1zW2ldID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbnB1dFRlcm1zW2ldLmxlbmd0aDsgKytqKSB7XG4gICAgICBpZERpbXNbaV0ucHVzaChhbGxEaW1zLmluZGV4T2YoaW5wdXRUZXJtc1tpXVtqXSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG51bURpbXMgPSBhbGxEaW1zLmxlbmd0aDsgICAgICAgICAgLy8gTnVtYmVyIG9mIHVuaXF1ZSBkaW1lbnNpb25zLlxuICBjb25zdCBudW1PdXREaW1zID0gb3V0cHV0U3RyaW5nLmxlbmd0aDsgIC8vIE51bWJlciBvZiBvdXRwdXQgZGltZW5zaW9ucy5cbiAgY29uc3Qgc3VtbWVkRGltczogbnVtYmVyW10gPSBbXTsgICAgICAgICAvLyBEaW1lbnNpb25zIGJlaW5nIHN1bW1lZCBvdmVyLlxuICBmb3IgKGxldCBpID0gbnVtT3V0RGltczsgaSA8IG51bURpbXM7ICsraSkge1xuICAgIHN1bW1lZERpbXMucHVzaChpKTtcbiAgfVxuICByZXR1cm4ge2FsbERpbXMsIHN1bW1lZERpbXMsIGlkRGltc307XG59XG5cbi8qKlxuICogR2V0IHRoZSBwZXJtdXRhdGlvbiBmb3IgYSBnaXZlbiBpbnB1dCB0ZW5zb3IuXG4gKlxuICogQHBhcmFtIG5EaW1zIFRvdGFsIG51bWJlciBvZiBkaW1lbnNpb24gb2YgYWxsIHRlbnNvcnMgaW52b2x2ZWQgaW4gdGhlIGVpbnN1bVxuICogICBvcGVyYXRpb24uXG4gKiBAcGFyYW0gaWREaW1zIERpbWVuc2lvbiBpbmRpY2VzIGludm9sdmUgaW4gdGhlIHRlbnNvciBpbiBxdWVzdGlvbi5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogICAtIHBlcm11dGF0aW9uSW5kaWNlczogSW5kaWNlcyB0byBwZXJtdXRlIHRoZSBheGVzIG9mIHRoZSB0ZW5zb3Igd2l0aC5cbiAqICAgLSBleHBhbmREaW1zOiBJbmRpY2VzIHRvIHRoZSBkaW1lbnNpb24gdGhhdCBuZWVkIHRvIGJlIGV4cGFuZGVkIGZyb20gdGhlXG4gKiAgICAgdGVuc29yIGFmdGVyIHBlcm11dGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWluc3VtUGVybXV0YXRpb24obkRpbXM6IG51bWJlciwgaWREaW1zOiBudW1iZXJbXSk6XG4gICAge3Blcm11dGF0aW9uSW5kaWNlczogbnVtYmVyW10sIGV4cGFuZERpbXM6IG51bWJlcltdfSB7XG4gIGxldCBwZXJtdXRhdGlvbkluZGljZXM6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4obkRpbXMpO1xuICBwZXJtdXRhdGlvbkluZGljZXMuZmlsbCgtMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaWREaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgcGVybXV0YXRpb25JbmRpY2VzW2lkRGltc1tpXV0gPSBpO1xuICB9XG4gIGNvbnN0IGV4cGFuZERpbXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbkRpbXM7ICsraSkge1xuICAgIGlmIChwZXJtdXRhdGlvbkluZGljZXNbaV0gPT09IC0xKSB7XG4gICAgICBleHBhbmREaW1zLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHBlcm11dGF0aW9uSW5kaWNlcyA9IHBlcm11dGF0aW9uSW5kaWNlcy5maWx0ZXIoZCA9PiBkICE9PSAtMSk7XG4gIHJldHVybiB7cGVybXV0YXRpb25JbmRpY2VzLCBleHBhbmREaW1zfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCB0aGUgZGltZW5zaW9uIHNpemVzIGZyb20gZGlmZmVyZW50IGlucHV0IHRlbnNvcnMgbWF0Y2ggdGhlXG4gKiBlcXVhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRWluc3VtRGltU2l6ZXMoXG4gICAgbkRpbXM6IG51bWJlciwgaWREaW1zOiBudW1iZXJbXVtdLCB0ZW5zb3JzOiBUZW5zb3JbXSkge1xuICBjb25zdCBkaW1TaXplczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPihuRGltcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGVuc29ycy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHNoYXBlOiBudW1iZXJbXSA9IHRlbnNvcnNbaV0uc2hhcGU7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpZERpbXNbaV0ubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChkaW1TaXplc1tpZERpbXNbaV1bal1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGltU2l6ZXNbaWREaW1zW2ldW2pdXSA9IHNoYXBlW2pdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgZGltU2l6ZXNbaWREaW1zW2ldW2pdXSA9PT0gc2hhcGVbal0sXG4gICAgICAgICAgICAoKSA9PiBgRXhwZWN0ZWQgZGltZW5zaW9uICR7ZGltU2l6ZXNbaWREaW1zW2ldW2pdXX0gYXQgYXhpcyAke2p9IGAgK1xuICAgICAgICAgICAgICAgIGBvZiBpbnB1dCBzaGFwZWQgJHtKU09OLnN0cmluZ2lmeShzaGFwZSl9LCBgICtcbiAgICAgICAgICAgICAgICBgYnV0IGdvdCBkaW1lbnNpb24gJHtzaGFwZVtqXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHBhdGggb2YgY29tcHV0YXRpb24gZm9yIGVpbnN1bS5cbiAqXG4gKiBAcGFyYW0gc3VtbWVkRGltcyBpbmRpY2VzIHRvIHRoZSBkaW1lbnNpb25zIGJlaW5nIHN1bW1lZCBvdmVyLlxuICogQHBhcmFtIGlkRGltcyBBIGxvb2sgdXAgdGFibGUgZm9yIHRoZSBkaW1lbnNpb25zIHByZXNlbnQgaW4gZWFjaCBpbnB1dFxuICogICAgIHRlbnNvci4gRWFjaCBjb25zaXR1ZW50IGFycmF5IGNvbnRhaW5zIGluZGljZXMgZm9yIHRoZSBkaW1lbnNpb25zIGluIHRoZVxuICogICAgIGNvcnJlc3BvbmRpbmcgaW5wdXQgdGVuc29yLlxuICpcbiAqIEByZXR1cm4gQSBtYXAgd2l0aCB0d28gZmllbGRzOlxuICogICAtIHBhdGg6IFRoZSBwYXRoIG9mIGNvbXB1dGF0aW9uLCB3aXRoIGVhY2ggZWxlbWVudCBpbmRpY2F0aW5nIHRoZSBkaW1lbnNpb25cbiAqICAgICBiZWluZyBzdW1tZWQgb3ZlciBhZnRlciB0aGUgZWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uIGluIHRoYXQgc3RlcC5cbiAqICAgLSBzdGVwczogV2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgYHBhdGhgLiBFYWNoIGVsZW1lbnQgY29udGFpbnMgdGhlIGluZGljZXNcbiAqICAgICB0byB0aGUgaW5wdXQgdGVuc29ycyBiZWluZyB1c2VkIGZvciBlbGVtZW50LXdpc2UgbXVsdGlwbGljYXRpb24gaW4gdGhlXG4gKiAgICAgY29ycmVzcG9uZGluZyBzdGVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWluc3VtQ29tcHV0ZVBhdGgoc3VtbWVkRGltczogbnVtYmVyW10sIGlkRGltczogbnVtYmVyW11bXSk6XG4gICAge3BhdGg6IG51bWJlcltdLCBzdGVwczogbnVtYmVyW11bXX0ge1xuICBjb25zdCBwYXRoOiBudW1iZXJbXSA9IHN1bW1lZERpbXM7XG4gIGNvbnN0IHN0ZXBzOiBudW1iZXJbXVtdID0gW107XG4gIGxldCBuU3RlcHMgPSAwO1xuICBpZiAoc3VtbWVkRGltcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBFaW5zdW0gdGhhdCBpbnZvbGVzIG5vIHN1bW1pbmc6IGUuZy4sIHRyYW5zcG9zZSBhbmQgb3V0ZXIgcHJvZHVjdC5cbiAgICBwYXRoLnB1c2goLTEpO1xuICB9XG4gIG5TdGVwcyA9IHN1bW1lZERpbXMubGVuZ3RoICsgMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuU3RlcHM7ICsraSkge1xuICAgIHN0ZXBzLnB1c2goW10pO1xuICB9XG4gIGNvbnN0IGNvbXB1dGVkVGVybUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHN1bW1lZERpbSA9IHBhdGhbaV07XG4gICAgY29uc3QgdGVybUluZGljZXMgPSBmaW5kVGVybXNXaXRoRGltKGlkRGltcywgc3VtbWVkRGltKTtcbiAgICBmb3IgKGNvbnN0IHRlcm1JbmRleCBvZiB0ZXJtSW5kaWNlcykge1xuICAgICAgaWYgKGNvbXB1dGVkVGVybUluZGljZXMuaW5kZXhPZih0ZXJtSW5kZXgpID09PSAtMSkge1xuICAgICAgICBzdGVwc1tpXS5wdXNoKHRlcm1JbmRleCk7XG4gICAgICAgIGNvbXB1dGVkVGVybUluZGljZXMucHVzaCh0ZXJtSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge3BhdGgsIHN0ZXBzfTtcbn1cblxuLyoqIERldGVybWluZXMgaWYgYW4gYXhlcyBwZXJtdXRhdGlvbiBpcyB0aGUgaWRlbnRpdHkgcGVybXV0YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZGVudGl0eVBlcm11dGF0aW9uKHBlcm06IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBwZXJtLmV2ZXJ5KChkaW06IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gZGltID09PSBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRUZXJtc1dpdGhEaW0oaWREaW1zOiBudW1iZXJbXVtdLCBkaW06IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3QgdGVybUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaWREaW1zLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGlkRGltc1tpXS5sZW5ndGggPT09IDAgfHwgaWREaW1zW2ldLmluZGV4T2YoZGltKSAhPT0gLTEgfHwgZGltID09PSAtMSkge1xuICAgICAgdGVybUluZGljZXMucHVzaChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRlcm1JbmRpY2VzO1xufVxuIl19","import { assert } from '../util';\n/**\n * Prepare the split size array. When the input is a number, the axis is evenly\n * divided among the split size. When the input contains the negative value, the\n * rest of the axis is allocated toward that.\n */\nexport function prepareSplitSize(x, numOrSizeSplits, axis = 0) {\n let splitSizes = [];\n if (typeof (numOrSizeSplits) === 'number') {\n assert(x.shape[axis] % numOrSizeSplits === 0, () => 'Number of splits must evenly divide the axis.');\n splitSizes =\n new Array(numOrSizeSplits).fill(x.shape[axis] / numOrSizeSplits);\n }\n else {\n const numOfNegs = numOrSizeSplits.reduce((count, value) => {\n if (value === -1) {\n count += 1;\n }\n return count;\n }, 0);\n assert(numOfNegs <= 1, () => 'There should be only one negative value in split array.');\n const negIndex = numOrSizeSplits.indexOf(-1);\n // Allow the number of split array to be -1, which indicates the rest\n // of dimension is allocated to that split.\n if (negIndex !== -1) {\n const total = numOrSizeSplits.reduce((a, b) => b > 0 ? a + b : a);\n numOrSizeSplits[negIndex] = x.shape[axis] - total;\n }\n assert(x.shape[axis] === numOrSizeSplits.reduce((a, b) => a + b), () => 'The sum of sizes must match the size of the axis dimension.');\n splitSizes = numOrSizeSplits;\n }\n return splitSizes;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXRfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwbGl0X3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFL0I7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsQ0FBb0IsRUFBRSxlQUFnQyxFQUN0RCxJQUFJLEdBQUcsQ0FBQztJQUNWLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDekMsTUFBTSxDQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxLQUFLLENBQUMsRUFDckMsR0FBRyxFQUFFLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUMzRCxVQUFVO1lBQ04sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7S0FDdEU7U0FBTTtRQUNMLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssSUFBSSxDQUFDLENBQUM7YUFDWjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ04sTUFBTSxDQUNGLFNBQVMsSUFBSSxDQUFDLEVBQ2QsR0FBRyxFQUFFLENBQUMseURBQXlELENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MscUVBQXFFO1FBQ3JFLDJDQUEyQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ25EO1FBQ0QsTUFBTSxDQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDekQsR0FBRyxFQUFFLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUN6RSxVQUFVLEdBQUcsZUFBZSxDQUFDO0tBQzlCO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7IFRlbnNvckluZm8gfSBmcm9tICcuLi90ZW5zb3JfaW5mbyc7XG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnLi4vdGVuc29yJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuLi91dGlsJztcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSBzcGxpdCBzaXplIGFycmF5LiBXaGVuIHRoZSBpbnB1dCBpcyBhIG51bWJlciwgdGhlIGF4aXMgaXMgZXZlbmx5XG4gKiBkaXZpZGVkIGFtb25nIHRoZSBzcGxpdCBzaXplLiBXaGVuIHRoZSBpbnB1dCBjb250YWlucyB0aGUgbmVnYXRpdmUgdmFsdWUsIHRoZVxuICogcmVzdCBvZiB0aGUgYXhpcyBpcyBhbGxvY2F0ZWQgdG93YXJkIHRoYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3BsaXRTaXplKFxuICAgIHg6IFRlbnNvcnxUZW5zb3JJbmZvLCBudW1PclNpemVTcGxpdHM6IG51bWJlcltdfG51bWJlcixcbiAgICBheGlzID0gMCk6IG51bWJlcltdIHtcbiAgbGV0IHNwbGl0U2l6ZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiAobnVtT3JTaXplU3BsaXRzKSA9PT0gJ251bWJlcicpIHtcbiAgICBhc3NlcnQoXG4gICAgICAgIHguc2hhcGVbYXhpc10gJSBudW1PclNpemVTcGxpdHMgPT09IDAsXG4gICAgICAgICgpID0+ICdOdW1iZXIgb2Ygc3BsaXRzIG11c3QgZXZlbmx5IGRpdmlkZSB0aGUgYXhpcy4nKTtcbiAgICBzcGxpdFNpemVzID1cbiAgICAgICAgbmV3IEFycmF5KG51bU9yU2l6ZVNwbGl0cykuZmlsbCh4LnNoYXBlW2F4aXNdIC8gbnVtT3JTaXplU3BsaXRzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBudW1PZk5lZ3MgPSBudW1PclNpemVTcGxpdHMucmVkdWNlKChjb3VudCwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gLTEpIHtcbiAgICAgICAgY291bnQgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LCAwKTtcbiAgICBhc3NlcnQoXG4gICAgICAgIG51bU9mTmVncyA8PSAxLFxuICAgICAgICAoKSA9PiAnVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIG5lZ2F0aXZlIHZhbHVlIGluIHNwbGl0IGFycmF5LicpO1xuICAgIGNvbnN0IG5lZ0luZGV4ID0gbnVtT3JTaXplU3BsaXRzLmluZGV4T2YoLTEpO1xuICAgIC8vIEFsbG93IHRoZSBudW1iZXIgb2Ygc3BsaXQgYXJyYXkgdG8gYmUgLTEsIHdoaWNoIGluZGljYXRlcyB0aGUgcmVzdFxuICAgIC8vIG9mIGRpbWVuc2lvbiBpcyBhbGxvY2F0ZWQgdG8gdGhhdCBzcGxpdC5cbiAgICBpZiAobmVnSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCB0b3RhbCA9IG51bU9yU2l6ZVNwbGl0cy5yZWR1Y2UoKGEsIGIpID0+IGIgPiAwID8gYSArIGIgOiBhKTtcbiAgICAgIG51bU9yU2l6ZVNwbGl0c1tuZWdJbmRleF0gPSB4LnNoYXBlW2F4aXNdIC0gdG90YWw7XG4gICAgfVxuICAgIGFzc2VydChcbiAgICAgICAgeC5zaGFwZVtheGlzXSA9PT0gbnVtT3JTaXplU3BsaXRzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpLFxuICAgICAgICAoKSA9PiAnVGhlIHN1bSBvZiBzaXplcyBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIHRoZSBheGlzIGRpbWVuc2lvbi4nKTtcbiAgICBzcGxpdFNpemVzID0gbnVtT3JTaXplU3BsaXRzO1xuICB9XG5cbiAgcmV0dXJuIHNwbGl0U2l6ZXM7XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Generates sparse fill empty rows indices, dense shape mismatch error message.\n *\n * @param indicesLength The first dimension of indices.\n */\nexport function getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesLength) {\n return `Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${indicesLength}`;\n}\n/**\n * Generates sparse fill empty rows negative index error message.\n *\n * @param index The index with a negative value.\n * @param value The negative value.\n */\nexport function getSparseFillEmptyRowsNegativeIndexErrorMessage(index, value) {\n return `indices(${index}, 0) is invalid: ${value} < 0`;\n}\n/**\n * Generates sparse fill empty rows out of range index error message.\n *\n * @param index The index with an out of range value.\n * @param value The out of range value.\n * @param limit The upper limit for indices.\n */\nexport function getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(index, value, limit) {\n return `indices(${index}, 0) is invalid: ${value} >= ${limit}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2ZpbGxfZW1wdHlfcm93c191dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc3BhcnNlL3NwYXJzZV9maWxsX2VtcHR5X3Jvd3NfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLCtDQUErQyxDQUMzRCxhQUFxQjtJQUN2QixPQUFPO3VCQUNjLGFBQWEsRUFBRSxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwrQ0FBK0MsQ0FDM0QsS0FBYSxFQUFFLEtBQWE7SUFDOUIsT0FBTyxXQUFXLEtBQUssb0JBQW9CLEtBQUssTUFBTSxDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaURBQWlELENBQzdELEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUM3QyxPQUFPLFdBQVcsS0FBSyxvQkFBb0IsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBmaWxsIGVtcHR5IHJvd3MgaW5kaWNlcywgZGVuc2Ugc2hhcGUgbWlzbWF0Y2ggZXJyb3IgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gaW5kaWNlc0xlbmd0aCBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIGluZGljZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VGaWxsRW1wdHlSb3dzSW5kaWNlc0RlbnNlU2hhcGVNaXNtYXRjaChcbiAgICBpbmRpY2VzTGVuZ3RoOiBudW1iZXIpIHtcbiAgcmV0dXJuIGBSZWNlaXZlZCBTcGFyc2VUZW5zb3Igd2l0aCBkZW5zZVNoYXBlWzBdID0gMCBidXRcbiAgaW5kaWNlcy5zaGFwZVswXSA9ICR7aW5kaWNlc0xlbmd0aH1gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2UgZmlsbCBlbXB0eSByb3dzIG5lZ2F0aXZlIGluZGV4IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoIGEgbmVnYXRpdmUgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5lZ2F0aXZlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhcnNlRmlsbEVtcHR5Um93c05lZ2F0aXZlSW5kZXhFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlcikge1xuICByZXR1cm4gYGluZGljZXMoJHtpbmRleH0sIDApIGlzIGludmFsaWQ6ICR7dmFsdWV9IDwgMGA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBmaWxsIGVtcHR5IHJvd3Mgb3V0IG9mIHJhbmdlIGluZGV4IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoIGFuIG91dCBvZiByYW5nZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgb3V0IG9mIHJhbmdlIHZhbHVlLlxuICogQHBhcmFtIGxpbWl0IFRoZSB1cHBlciBsaW1pdCBmb3IgaW5kaWNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZUZpbGxFbXB0eVJvd3NPdXRPZlJhbmdlSW5kZXhFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciwgbGltaXQ6IG51bWJlcikge1xuICByZXR1cm4gYGluZGljZXMoJHtpbmRleH0sIDApIGlzIGludmFsaWQ6ICR7dmFsdWV9ID49ICR7bGltaXR9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { sizeFromShape } from '../../util';\n/**\n * Generates sparse reshape multiple negative 1 output dimension error message.\n *\n * @param dim1 The first dimension with a negative 1 value.\n * @param dim2 The second dimension with a negative 1 value.\n */\nexport function getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(dim1, dim2) {\n return `only one output dimension may be -1, not both ${dim1} and ${dim2}`;\n}\n/**\n * Generates sparse reshape negative output dimension error message.\n *\n * @param dim The dimension with a negative value.\n * @param value The negative value.\n */\nexport function getSparseReshapeNegativeOutputDimErrorMessage(dim, value) {\n return `size ${dim} must be non-negative, not ${value}`;\n}\n/**\n * Generates sparse reshape empty tensor zero output dimension error message.\n *\n */\nexport function getSparseReshapeEmptyTensorZeroOutputDimErrorMessage() {\n return 'reshape cannot infer the missing input size for an empty tensor ' +\n 'unless all specified input sizes are non-zero';\n}\n/**\n * Generates sparse reshape input output multiple mismatch error message.\n *\n * @param inputShape the input shape.\n * @param outputShape the requested output shape.\n */\nexport function getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape) {\n const inputSize = sizeFromShape(inputShape);\n const outputSize = sizeFromShape(outputShape);\n return `Input to reshape is a SparseTensor with ${inputSize}\n dense values, but the requested shape requires a multiple of ${outputSize}. inputShape=${inputShape} outputShape= ${outputShape}`;\n}\n/**\n * Generates sparse reshape input output inequality error message.\n *\n * @param inputShape the input shape.\n * @param outputShape the requested output shape.\n */\nexport function getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape) {\n const inputSize = sizeFromShape(inputShape);\n const outputSize = sizeFromShape(outputShape);\n return `Input to reshape is a tensor with ${inputSize} dense values, but the requested shape has ${outputSize}. inputShape=${inputShape} outputShape=${outputShape}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3Jlc2hhcGVfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29yZS9zcmMvb3BzL3NwYXJzZS9zcGFyc2VfcmVzaGFwZV91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFekM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0RBQXdELENBQ3BFLElBQVksRUFBRSxJQUFZO0lBQzVCLE9BQU8saURBQWlELElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkNBQTZDLENBQ3pELEdBQVcsRUFBRSxLQUFhO0lBQzVCLE9BQU8sUUFBUSxHQUFHLDhCQUE4QixLQUFLLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9EQUFvRDtJQUNsRSxPQUFPLGtFQUFrRTtRQUNyRSwrQ0FBK0MsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsK0NBQStDLENBQzNELFVBQW9CLEVBQUUsV0FBcUI7SUFDN0MsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPLDJDQUEyQyxTQUFTO2lFQUV2RCxVQUFVLGdCQUFnQixVQUFVLGlCQUFpQixXQUFXLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsK0NBQStDLENBQzNELFVBQW9CLEVBQUUsV0FBcUI7SUFDN0MsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxPQUFPLHFDQUNILFNBQVMsOENBQ1QsVUFBVSxnQkFBZ0IsVUFBVSxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7c2l6ZUZyb21TaGFwZX0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIG11bHRpcGxlIG5lZ2F0aXZlIDEgb3V0cHV0IGRpbWVuc2lvbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBkaW0xIFRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCBhIG5lZ2F0aXZlIDEgdmFsdWUuXG4gKiBAcGFyYW0gZGltMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiB3aXRoIGEgbmVnYXRpdmUgMSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVNdWx0aXBsZU5lZ2F0aXZlT25lT3V0cHV0RGltRXJyb3JNZXNzYWdlKFxuICAgIGRpbTE6IG51bWJlciwgZGltMjogbnVtYmVyKSB7XG4gIHJldHVybiBgb25seSBvbmUgb3V0cHV0IGRpbWVuc2lvbiBtYXkgYmUgLTEsIG5vdCBib3RoICR7ZGltMX0gYW5kICR7ZGltMn1gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2UgcmVzaGFwZSBuZWdhdGl2ZSBvdXRwdXQgZGltZW5zaW9uIGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGRpbSBUaGUgZGltZW5zaW9uIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VSZXNoYXBlTmVnYXRpdmVPdXRwdXREaW1FcnJvck1lc3NhZ2UoXG4gICAgZGltOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpIHtcbiAgcmV0dXJuIGBzaXplICR7ZGltfSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgbm90ICR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgc3BhcnNlIHJlc2hhcGUgZW1wdHkgdGVuc29yIHplcm8gb3V0cHV0IGRpbWVuc2lvbiBlcnJvciBtZXNzYWdlLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVFbXB0eVRlbnNvclplcm9PdXRwdXREaW1FcnJvck1lc3NhZ2UoKSB7XG4gIHJldHVybiAncmVzaGFwZSBjYW5ub3QgaW5mZXIgdGhlIG1pc3NpbmcgaW5wdXQgc2l6ZSBmb3IgYW4gZW1wdHkgdGVuc29yICcgK1xuICAgICAgJ3VubGVzcyBhbGwgc3BlY2lmaWVkIGlucHV0IHNpemVzIGFyZSBub24temVybyc7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIGlucHV0IG91dHB1dCBtdWx0aXBsZSBtaXNtYXRjaCBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBpbnB1dFNoYXBlIHRoZSBpbnB1dCBzaGFwZS5cbiAqIEBwYXJhbSBvdXRwdXRTaGFwZSB0aGUgcmVxdWVzdGVkIG91dHB1dCBzaGFwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVJlc2hhcGVJbnB1dE91dHB1dE11bHRpcGxlRXJyb3JNZXNzYWdlKFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLCBvdXRwdXRTaGFwZTogbnVtYmVyW10pIHtcbiAgY29uc3QgaW5wdXRTaXplID0gc2l6ZUZyb21TaGFwZShpbnB1dFNoYXBlKTtcbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IHNpemVGcm9tU2hhcGUob3V0cHV0U2hhcGUpO1xuICByZXR1cm4gYElucHV0IHRvIHJlc2hhcGUgaXMgYSBTcGFyc2VUZW5zb3Igd2l0aCAke2lucHV0U2l6ZX1cbiAgZGVuc2UgdmFsdWVzLCBidXQgdGhlIHJlcXVlc3RlZCBzaGFwZSByZXF1aXJlcyBhIG11bHRpcGxlIG9mICR7XG4gICAgICBvdXRwdXRTaXplfS4gaW5wdXRTaGFwZT0ke2lucHV0U2hhcGV9IG91dHB1dFNoYXBlPSAke291dHB1dFNoYXBlfWA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSByZXNoYXBlIGlucHV0IG91dHB1dCBpbmVxdWFsaXR5IGVycm9yIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGlucHV0U2hhcGUgdGhlIGlucHV0IHNoYXBlLlxuICogQHBhcmFtIG91dHB1dFNoYXBlIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHNoYXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TWlzbWF0Y2hFcnJvck1lc3NhZ2UoXG4gICAgaW5wdXRTaGFwZTogbnVtYmVyW10sIG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICBjb25zdCBpbnB1dFNpemUgPSBzaXplRnJvbVNoYXBlKGlucHV0U2hhcGUpO1xuICBjb25zdCBvdXRwdXRTaXplID0gc2l6ZUZyb21TaGFwZShvdXRwdXRTaGFwZSk7XG4gIHJldHVybiBgSW5wdXQgdG8gcmVzaGFwZSBpcyBhIHRlbnNvciB3aXRoICR7XG4gICAgICBpbnB1dFNpemV9IGRlbnNlIHZhbHVlcywgYnV0IHRoZSByZXF1ZXN0ZWQgc2hhcGUgaGFzICR7XG4gICAgICBvdXRwdXRTaXplfS4gaW5wdXRTaGFwZT0ke2lucHV0U2hhcGV9IG91dHB1dFNoYXBlPSR7b3V0cHV0U2hhcGV9YDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Generates sparse segment reduction negative segment ids error message.\n *\n */\nexport function getSparseSegmentReductionNegativeSegmentIdsErrorMessage() {\n return `segment ids must be >= 0`;\n}\n/**\n * Generates sparse segment reduction non increasing segment ids error message.\n *\n */\nexport function getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage() {\n return `segment ids are not increasing`;\n}\n/**\n * Generates sparse segment reduction segment id out of range error message.\n *\n * @param segmentId The segment id index that is out of range.\n * @param outputRows Upper bound of valid segment id values.\n */\nexport function getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(segmentId, outputRows) {\n return `Segment id ${segmentId} out of range [0, ${outputRows}), possibly because segmentIds input is not sorted.`;\n}\n/**\n * Generates sparse segment reduction input indice out of range error message.\n *\n * @param index The index that holds the out of range value.\n * @param indexValue The value that is out of range.\n * @param inputRows Upper bound of valid index values.\n */\nexport function getSparseSegmentReductionIndicesOutOfRangeErrorMessage(index, indexValue, inputRows) {\n return `Bad: indices[${index}] == ${indexValue} out of range [0, ${inputRows})`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVEQUF1RDtJQUNyRSxPQUFPLDBCQUEwQixDQUFDO0FBQ3BDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNERBQTREO0lBQzFFLE9BQU8sZ0NBQWdDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdEQUF3RCxDQUNwRSxTQUFpQixFQUFFLFVBQWtCO0lBQ3ZDLE9BQU8sY0FBYyxTQUFTLHFCQUMxQixVQUFVLHFEQUFxRCxDQUFDO0FBQ3RFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0RBQXNELENBQ2xFLEtBQWEsRUFBRSxVQUFrQixFQUFFLFNBQWlCO0lBQ3RELE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxVQUFVLHFCQUMxQyxTQUFTLEdBQUcsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gbmVnYXRpdmUgc2VnbWVudCBpZHMgZXJyb3IgbWVzc2FnZS5cbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uTmVnYXRpdmVTZWdtZW50SWRzRXJyb3JNZXNzYWdlKCkge1xuICByZXR1cm4gYHNlZ21lbnQgaWRzIG11c3QgYmUgPj0gMGA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNwYXJzZSBzZWdtZW50IHJlZHVjdGlvbiBub24gaW5jcmVhc2luZyBzZWdtZW50IGlkcyBlcnJvciBtZXNzYWdlLlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25Ob25JbmNyZWFzaW5nU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpIHtcbiAgcmV0dXJuIGBzZWdtZW50IGlkcyBhcmUgbm90IGluY3JlYXNpbmdgO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gc2VnbWVudCBpZCBvdXQgb2YgcmFuZ2UgZXJyb3IgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gc2VnbWVudElkIFRoZSBzZWdtZW50IGlkIGluZGV4IHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICogQHBhcmFtIG91dHB1dFJvd3MgVXBwZXIgYm91bmQgb2YgdmFsaWQgc2VnbWVudCBpZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uU2VnbWVudElkT3V0T2ZSYW5nZUVycm9yTWVzc2FnZShcbiAgICBzZWdtZW50SWQ6IG51bWJlciwgb3V0cHV0Um93czogbnVtYmVyKSB7XG4gIHJldHVybiBgU2VnbWVudCBpZCAke3NlZ21lbnRJZH0gb3V0IG9mIHJhbmdlIFswLCAke1xuICAgICAgb3V0cHV0Um93c30pLCBwb3NzaWJseSBiZWNhdXNlIHNlZ21lbnRJZHMgaW5wdXQgaXMgbm90IHNvcnRlZC5gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBzcGFyc2Ugc2VnbWVudCByZWR1Y3Rpb24gaW5wdXQgaW5kaWNlIG91dCBvZiByYW5nZSBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdGhhdCBob2xkcyB0aGUgb3V0IG9mIHJhbmdlIHZhbHVlLlxuICogQHBhcmFtIGluZGV4VmFsdWUgVGhlIHZhbHVlIHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICogQHBhcmFtIGlucHV0Um93cyBVcHBlciBib3VuZCBvZiB2YWxpZCBpbmRleCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uSW5kaWNlc091dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgaW5kZXg6IG51bWJlciwgaW5kZXhWYWx1ZTogbnVtYmVyLCBpbnB1dFJvd3M6IG51bWJlcikge1xuICByZXR1cm4gYEJhZDogaW5kaWNlc1ske2luZGV4fV0gPT0gJHtpbmRleFZhbHVlfSBvdXQgb2YgcmFuZ2UgWzAsICR7XG4gICAgICBpbnB1dFJvd3N9KWA7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { nearestDivisor } from '../util';\nimport { PARALLELIZE_THRESHOLD } from './reduce_util';\nexport function segOpComputeOptimalWindowSize(inSize, numSegments) {\n let done = false;\n let res;\n if (inSize <= PARALLELIZE_THRESHOLD) {\n res = inSize;\n done = true;\n }\n else {\n res = nearestDivisor(inSize, Math.floor(Math.sqrt(inSize)));\n }\n while (!done) {\n if (res > numSegments || res === inSize) {\n done = true;\n }\n else {\n res = nearestDivisor(inSize, res + 1);\n }\n }\n return res;\n}\nexport function computeOutShape(aShape, axis, numSegments) {\n const outShape = [];\n const rank = aShape.length;\n for (let dim = 0; dim < rank; dim++) {\n if (dim !== axis) {\n outShape.push(aShape[dim]);\n }\n else {\n outShape.push(numSegments);\n }\n }\n return outShape;\n}\nexport function collectGatherOpShapeInfo(x, indices, axis, batchDims) {\n const indicesRank = indices.shape.length;\n const xRank = x.shape.length;\n if (batchDims !== 0) {\n if (batchDims < -indicesRank || batchDims > indicesRank) {\n throw new Error(`Expect batchDims in the range of [-${indicesRank}, ${indicesRank}], but got ${batchDims}`);\n }\n }\n if (batchDims < 0) {\n batchDims += indicesRank;\n }\n if (batchDims > xRank) {\n throw new Error(`batchDims (${batchDims}) must be less than rank(x) (\n ${xRank}).`);\n }\n if (axis < batchDims) {\n throw new Error(`batchDims (${batchDims}) must be less than or equal to axis (${axis}).`);\n }\n for (let i = 0; i < batchDims; ++i) {\n if (x.shape[i] !== indices.shape[i]) {\n throw new Error(`x.shape[${i}]: ${x.shape[i]} should be equal to indices.shape[${i}]: ${indices.shape[i]}.`);\n }\n }\n const dimSize = x.shape[axis];\n const outputShape = [];\n let batchSize = 1;\n let outerSize = 1;\n let sliceSize = 1;\n for (let i = 0; i < batchDims; ++i) {\n outputShape.push(x.shape[i]);\n batchSize *= x.shape[i];\n }\n for (let i = batchDims; i < axis; i++) {\n outputShape.push(x.shape[i]);\n outerSize *= x.shape[i];\n }\n for (let i = batchDims; i < indicesRank; i++) {\n outputShape.push(indices.shape[i]);\n }\n for (let i = axis + 1; i < xRank; i++) {\n outputShape.push(x.shape[i]);\n sliceSize *= x.shape[i];\n }\n return { batchSize, sliceSize, outerSize, dimSize, outputShape };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9vcHMvc2VnbWVudF91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBU3BELE1BQU0sVUFBVSw2QkFBNkIsQ0FDekMsTUFBYyxFQUFFLFdBQW1CO0lBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQUcsQ0FBQztJQUVSLElBQUksTUFBTSxJQUFJLHFCQUFxQixFQUFFO1FBQ25DLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ2I7U0FBTTtRQUNMLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0Q7SUFFRCxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ1osSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdkM7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQzNCLE1BQWdCLEVBQUUsSUFBWSxFQUFFLFdBQW1CO0lBQ3JELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbkMsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUI7YUFBTTtZQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDNUI7S0FDRjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFVRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLENBQWEsRUFBRSxPQUFtQixFQUFFLElBQVksRUFDaEQsU0FBaUI7SUFDbkIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksU0FBUyxHQUFHLENBQUMsV0FBVyxJQUFJLFNBQVMsR0FBRyxXQUFXLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsV0FBVyxLQUM3RCxXQUFXLGNBQWMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzQztLQUNGO0lBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLFNBQVMsSUFBSSxXQUFXLENBQUM7S0FDMUI7SUFFRCxJQUFJLFNBQVMsR0FBRyxLQUFLLEVBQUU7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLFNBQVM7TUFDckMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUNkO0lBRUQsSUFBSSxJQUFJLEdBQUcsU0FBUyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FDWixTQUFTLHlDQUF5QyxJQUFJLElBQUksQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNsQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNYLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFDQUN4QixDQUFDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7S0FDRjtJQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUIsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3JDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgeyBUZW5zb3JJbmZvIH0gZnJvbSAnLi4vdGVuc29yX2luZm8nO1xuaW1wb3J0IHtuZWFyZXN0RGl2aXNvcn0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7UEFSQUxMRUxJWkVfVEhSRVNIT0xEfSBmcm9tICcuL3JlZHVjZV91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWdPcEluZm8ge1xuICB3aW5kb3dTaXplOiBudW1iZXI7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBpblNpemU6IG51bWJlcjtcbiAgbnVtU2VnbWVudHM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlZ09wQ29tcHV0ZU9wdGltYWxXaW5kb3dTaXplKFxuICAgIGluU2l6ZTogbnVtYmVyLCBudW1TZWdtZW50czogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgbGV0IHJlcztcblxuICBpZiAoaW5TaXplIDw9IFBBUkFMTEVMSVpFX1RIUkVTSE9MRCkge1xuICAgIHJlcyA9IGluU2l6ZTtcbiAgICBkb25lID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBuZWFyZXN0RGl2aXNvcihpblNpemUsIE1hdGguZmxvb3IoTWF0aC5zcXJ0KGluU2l6ZSkpKTtcbiAgfVxuXG4gIHdoaWxlICghZG9uZSkge1xuICAgIGlmIChyZXMgPiBudW1TZWdtZW50cyB8fCByZXMgPT09IGluU2l6ZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IG5lYXJlc3REaXZpc29yKGluU2l6ZSwgcmVzICsgMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlT3V0U2hhcGUoXG4gICAgYVNoYXBlOiBudW1iZXJbXSwgYXhpczogbnVtYmVyLCBudW1TZWdtZW50czogbnVtYmVyKTogbnVtYmVyW10ge1xuICBjb25zdCBvdXRTaGFwZSA9IFtdO1xuICBjb25zdCByYW5rID0gYVNoYXBlLmxlbmd0aDtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcmFuazsgZGltKyspIHtcbiAgICBpZiAoZGltICE9PSBheGlzKSB7XG4gICAgICBvdXRTaGFwZS5wdXNoKGFTaGFwZVtkaW1dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0U2hhcGUucHVzaChudW1TZWdtZW50cyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRTaGFwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRoZXJPcFNoYXBlSW5mbyB7XG4gIGJhdGNoU2l6ZTogbnVtYmVyO1xuICBzbGljZVNpemU6IG51bWJlcjtcbiAgb3V0ZXJTaXplOiBudW1iZXI7XG4gIGRpbVNpemU6IG51bWJlcjtcbiAgb3V0cHV0U2hhcGU6IG51bWJlcltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEdhdGhlck9wU2hhcGVJbmZvKFxuICAgIHg6IFRlbnNvckluZm8sIGluZGljZXM6IFRlbnNvckluZm8sIGF4aXM6IG51bWJlcixcbiAgICBiYXRjaERpbXM6IG51bWJlcik6IEdhdGhlck9wU2hhcGVJbmZvIHtcbiAgY29uc3QgaW5kaWNlc1JhbmsgPSBpbmRpY2VzLnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcblxuICBpZiAoYmF0Y2hEaW1zICE9PSAwKSB7XG4gICAgaWYgKGJhdGNoRGltcyA8IC1pbmRpY2VzUmFuayB8fCBiYXRjaERpbXMgPiBpbmRpY2VzUmFuaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgYmF0Y2hEaW1zIGluIHRoZSByYW5nZSBvZiBbLSR7aW5kaWNlc1Jhbmt9LCAke1xuICAgICAgICAgIGluZGljZXNSYW5rfV0sIGJ1dCBnb3QgJHtiYXRjaERpbXN9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJhdGNoRGltcyA8IDApIHtcbiAgICBiYXRjaERpbXMgKz0gaW5kaWNlc1Jhbms7XG4gIH1cblxuICBpZiAoYmF0Y2hEaW1zID4geFJhbmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJhdGNoRGltcyAoJHtiYXRjaERpbXN9KSBtdXN0IGJlIGxlc3MgdGhhbiByYW5rKHgpIChcbiAgICAke3hSYW5rfSkuYCk7XG4gIH1cblxuICBpZiAoYXhpcyA8IGJhdGNoRGltcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmF0Y2hEaW1zICgke1xuICAgICAgICBiYXRjaERpbXN9KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBheGlzICgke2F4aXN9KS5gKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2hEaW1zOyArK2kpIHtcbiAgICBpZiAoeC5zaGFwZVtpXSAhPT0gaW5kaWNlcy5zaGFwZVtpXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB4LnNoYXBlWyR7aX1dOiAke3guc2hhcGVbaV19IHNob3VsZCBiZSBlcXVhbCB0byBpbmRpY2VzLnNoYXBlWyR7XG4gICAgICAgICAgICAgIGl9XTogJHtpbmRpY2VzLnNoYXBlW2ldfS5gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZGltU2l6ZSA9IHguc2hhcGVbYXhpc107XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIGxldCBiYXRjaFNpemUgPSAxO1xuICBsZXQgb3V0ZXJTaXplID0gMTtcbiAgbGV0IHNsaWNlU2l6ZSA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaERpbXM7ICsraSkge1xuICAgIG91dHB1dFNoYXBlLnB1c2goeC5zaGFwZVtpXSk7XG4gICAgYmF0Y2hTaXplICo9IHguc2hhcGVbaV07XG4gIH1cblxuICBmb3IgKGxldCBpID0gYmF0Y2hEaW1zOyBpIDwgYXhpczsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaCh4LnNoYXBlW2ldKTtcbiAgICBvdXRlclNpemUgKj0geC5zaGFwZVtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBiYXRjaERpbXM7IGkgPCBpbmRpY2VzUmFuazsgaSsrKSB7XG4gICAgb3V0cHV0U2hhcGUucHVzaChpbmRpY2VzLnNoYXBlW2ldKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBheGlzICsgMTsgaSA8IHhSYW5rOyBpKyspIHtcbiAgICBvdXRwdXRTaGFwZS5wdXNoKHguc2hhcGVbaV0pO1xuICAgIHNsaWNlU2l6ZSAqPSB4LnNoYXBlW2ldO1xuICB9XG5cbiAgcmV0dXJuIHtiYXRjaFNpemUsIHNsaWNlU2l6ZSwgb3V0ZXJTaXplLCBkaW1TaXplLCBvdXRwdXRTaGFwZX07XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { decodeString, encodeString } from '../util';\n// Utilities needed by backend consumers of tf-core.\nexport * from '../ops/axis_util';\nexport * from '../ops/broadcast_util';\nexport * from '../ops/concat_util';\nexport * from '../ops/conv_util';\nexport * from '../ops/fused_util';\nexport * from '../ops/fused_types';\nexport * from '../ops/ragged_to_dense_util';\nexport * from '../ops/reduce_util';\nimport * as slice_util from '../ops/slice_util';\nexport { slice_util };\nexport { upcastType } from '../types';\nexport * from '../ops/rotate_util';\nexport * from '../ops/array_ops_util';\nexport * from '../ops/gather_nd_util';\nexport * from '../ops/scatter_nd_util';\nexport * from '../ops/selu_util';\nexport * from '../ops/fused_util';\nexport * from '../ops/erf_util';\nexport * from '../log';\nexport * from '../backends/complex_util';\nexport * from '../backends/einsum_util';\nexport * from '../ops/split_util';\nexport * from '../ops/sparse/sparse_fill_empty_rows_util';\nexport * from '../ops/sparse/sparse_reshape_util';\nexport * from '../ops/sparse/sparse_segment_reduction_util';\nimport * as segment_util from '../ops/segment_util';\nexport { segment_util };\nexport function fromUint8ToStringArray(vals) {\n try {\n // Decode the bytes into string.\n return vals.map(val => decodeString(val));\n }\n catch (err) {\n throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${err}`);\n }\n}\nexport function fromStringArrayToUint8(strings) {\n return strings.map(s => encodeString(s));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF91dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb3JlL3NyYy9iYWNrZW5kcy9iYWNrZW5kX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFbkQsb0RBQW9EO0FBQ3BELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUVuQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsQ0FBQztBQUVwQixPQUFPLEVBQTRCLFVBQVUsRUFBWSxNQUFNLFVBQVUsQ0FBQztBQUUxRSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDZDQUE2QyxDQUFDO0FBRTVELE9BQU8sS0FBSyxZQUFZLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxDQUFDO0FBRXRCLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUFrQjtJQUN2RCxJQUFJO1FBQ0YsZ0NBQWdDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzNDO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixNQUFNLElBQUksS0FBSyxDQUNYLDREQUE0RCxHQUFHLEVBQUUsQ0FBQyxDQUFDO0tBQ3hFO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFpQjtJQUN0RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2RlY29kZVN0cmluZywgZW5jb2RlU3RyaW5nfSBmcm9tICcuLi91dGlsJztcblxuLy8gVXRpbGl0aWVzIG5lZWRlZCBieSBiYWNrZW5kIGNvbnN1bWVycyBvZiB0Zi1jb3JlLlxuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2F4aXNfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvYnJvYWRjYXN0X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2NvbmNhdF91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9jb252X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9yYWdnZWRfdG9fZGVuc2VfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvcmVkdWNlX3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBzbGljZV91dGlsIGZyb20gJy4uL29wcy9zbGljZV91dGlsJztcbmV4cG9ydCB7c2xpY2VfdXRpbH07XG5cbmV4cG9ydCB7QmFja2VuZFZhbHVlcywgVHlwZWRBcnJheSwgdXBjYXN0VHlwZSwgUGl4ZWxEYXRhfSBmcm9tICcuLi90eXBlcyc7XG5leHBvcnQge01lbW9yeUluZm8sIFRpbWluZ0luZm99IGZyb20gJy4uL2VuZ2luZSc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvcm90YXRlX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2FycmF5X29wc191dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9nYXRoZXJfbmRfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuLi9vcHMvc2NhdHRlcl9uZF91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9zZWx1X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2Z1c2VkX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL2VyZl91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL2xvZyc7XG5leHBvcnQgKiBmcm9tICcuLi9iYWNrZW5kcy9jb21wbGV4X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vYmFja2VuZHMvZWluc3VtX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwbGl0X3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwYXJzZS9zcGFyc2VfZmlsbF9lbXB0eV9yb3dzX3V0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi4vb3BzL3NwYXJzZS9zcGFyc2VfcmVzaGFwZV91dGlsJztcbmV4cG9ydCAqIGZyb20gJy4uL29wcy9zcGFyc2Uvc3BhcnNlX3NlZ21lbnRfcmVkdWN0aW9uX3V0aWwnO1xuXG5pbXBvcnQgKiBhcyBzZWdtZW50X3V0aWwgZnJvbSAnLi4vb3BzL3NlZ21lbnRfdXRpbCc7XG5leHBvcnQge3NlZ21lbnRfdXRpbH07XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVWludDhUb1N0cmluZ0FycmF5KHZhbHM6IFVpbnQ4QXJyYXlbXSkge1xuICB0cnkge1xuICAgIC8vIERlY29kZSB0aGUgYnl0ZXMgaW50byBzdHJpbmcuXG4gICAgcmV0dXJuIHZhbHMubWFwKHZhbCA9PiBkZWNvZGVTdHJpbmcodmFsKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBkZWNvZGUgZW5jb2RlZCBzdHJpbmcgYnl0ZXMgaW50byB1dGYtOCwgZXJyb3I6ICR7ZXJyfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU3RyaW5nQXJyYXlUb1VpbnQ4KHN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBzdHJpbmdzLm1hcChzID0+IGVuY29kZVN0cmluZyhzKSk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Required side effectful code.\nimport './base_side_effects';\n// TODO(mattSoulanille): Move this to base_side_effects.ts\n// It is here for now because custom bundles need to avoid calling it, and they\n// only replace the index.js file, not the base_side_effects file.\nimport { registerOptimizers } from './optimizers/register_optimizers';\nregisterOptimizers();\n// All exports from this package should be in base.\nexport * from './base';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGdDQUFnQztBQUNoQyxPQUFPLHFCQUFxQixDQUFDO0FBRTdCLDBEQUEwRDtBQUMxRCwrRUFBK0U7QUFDL0Usa0VBQWtFO0FBQ2xFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLGtCQUFrQixFQUFFLENBQUM7QUFFckIsbURBQW1EO0FBQ25ELGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vLyBSZXF1aXJlZCBzaWRlIGVmZmVjdGZ1bCBjb2RlLlxuaW1wb3J0ICcuL2Jhc2Vfc2lkZV9lZmZlY3RzJztcblxuLy8gVE9ETyhtYXR0U291bGFuaWxsZSk6IE1vdmUgdGhpcyB0byBiYXNlX3NpZGVfZWZmZWN0cy50c1xuLy8gSXQgaXMgaGVyZSBmb3Igbm93IGJlY2F1c2UgY3VzdG9tIGJ1bmRsZXMgbmVlZCB0byBhdm9pZCBjYWxsaW5nIGl0LCBhbmQgdGhleVxuLy8gb25seSByZXBsYWNlIHRoZSBpbmRleC5qcyBmaWxlLCBub3QgdGhlIGJhc2Vfc2lkZV9lZmZlY3RzIGZpbGUuXG5pbXBvcnQge3JlZ2lzdGVyT3B0aW1pemVyc30gZnJvbSAnLi9vcHRpbWl6ZXJzL3JlZ2lzdGVyX29wdGltaXplcnMnO1xucmVnaXN0ZXJPcHRpbWl6ZXJzKCk7XG5cbi8vIEFsbCBleHBvcnRzIGZyb20gdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBpbiBiYXNlLlxuZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbiJdfQ==","(function(){/*\n\n Copyright The Closure Library Authors.\n SPDX-License-Identifier: Apache-2.0\n*/\n'use strict';var x;function aa(a){var b=0;return function(){return b>>0)+\"_\",e=0;return b});\nB(\"Symbol.iterator\",function(a){if(a)return a;a=Symbol(\"Symbol.iterator\");for(var b=\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\".split(\" \"),c=0;cc&&(c=Math.max(c+e,0));c>2];f=b[(f&3)<<4|h>>4];h=b[(h&15)<<2|k>>6];k=b[k&63];c[g++]=l+f+h+k}l=0;k=d;switch(a.length-e){case 2:l=a[e+1],k=b[(l&15)<<2]||d;case 1:a=a[e],c[g]=b[a>>2]+b[(a&3)<<4|l>>4]+k+d}return c.join(\"\")}\nfunction Ea(a){var b=a.length,c=3*b/4;c%3?c=Math.floor(c):-1!=\"=.\".indexOf(a[b-1])&&(c=-1!=\"=.\".indexOf(a[b-2])?c-2:c-1);var d=new Uint8Array(c),e=0;Fa(a,function(g){d[e++]=g});return e!==c?d.subarray(0,e):d}\nfunction Fa(a,b){function c(k){for(;d>4);64!=f&&(b(g<<4&240|f>>2),64!=h&&b(f<<6&192|h))}}\nfunction Da(){if(!M){M={};for(var a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),b=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"],c=0;5>c;c++){var d=a.concat(b[c].split(\"\"));Ba[c]=d;for(var e=0;ea.i)throw Error(\"Tried to read past the end of the data \"+a.g+\" > \"+a.i);}\nfunction Q(a){var b=a.h,c=b[a.g],d=c&127;if(128>c)return a.g+=1,P(a),d;c=b[a.g+1];d|=(c&127)<<7;if(128>c)return a.g+=2,P(a),d;c=b[a.g+2];d|=(c&127)<<14;if(128>c)return a.g+=3,P(a),d;c=b[a.g+3];d|=(c&127)<<21;if(128>c)return a.g+=4,P(a),d;c=b[a.g+4];a.g+=5;d|=(c&15)<<28;if(128>c)return P(a),d;if(128<=b[a.g++]&&128<=b[a.g++]&&128<=b[a.g++]&&128<=b[a.g++]&&128<=b[a.g++])throw Na();P(a);return d}var Qa=[];function Ra(){this.g=[]}Ra.prototype.length=function(){return this.g.length};Ra.prototype.end=function(){var a=this.g;this.g=[];return a};function S(a,b){for(;127>>=7;a.g.push(b)};function Sa(a){var b={},c=void 0===b.W?!1:b.W;this.l={v:void 0===b.v?!1:b.v};this.W=c;b=this.l;Qa.length?(c=Qa.pop(),b&&(c.v=b.v),a&&Pa(c,a),a=c):a=new Oa(a,b);this.g=a;this.j=this.g.g;this.h=this.i=-1}Sa.prototype.reset=function(){this.g.reset();this.j=this.g.g;this.h=this.i=-1};function Ta(a){var b=a.g;if(b.g==b.i)return!1;a.j=a.g.g;var c=Q(a.g)>>>0;b=c>>>3;c&=7;if(!(0<=c&&5>=c))throw Ma(c,a.j);if(1>b)throw Error(\"Invalid field number: \"+b+\" (at position \"+a.j+\")\");a.i=b;a.h=c;return!0}\nfunction Ua(a){switch(a.h){case 0:if(0!=a.h)Ua(a);else a:{a=a.g;for(var b=a.g,c=b+10;b>>0,a=a.g,a.g+=b,P(a));break;case 5:a=a.g;a.g+=4;P(a);break;case 3:b=a.i;do{if(!Ta(a))throw Error(\"Unmatched start-group tag: stream EOF\");if(4==a.h){if(a.i!=b)throw Error(\"Unmatched end-group tag\");break}Ua(a)}while(1);break;default:throw Ma(a.h,a.j);}}var Va=[];function Wa(){this.i=[];this.h=0;this.g=new Ra}function T(a,b){0!==b.length&&(a.i.push(b),a.h+=b.length)}function Xa(a,b){if(b=b.ba){T(a,a.g.end());for(var c=0;c=a.i?a.g?a.g[b]:void 0:(void 0===c?0:c)&&a.g&&(c=a.g[b],null!=c)?c:a.m[b+a.h]}function W(a,b,c,d){d=void 0===d?!1:d;eb(a);bVa.length&&Va.push(a)}}function Jb(a,b,c){for(var d=c.length,e=1==d%2,g=e?1:0;g>>0;a=2*(e>>31)+1;d=e>>>23&255;e&=8388607;W(b,c,255==d?e?NaN:Infinity*a:0==d?a*Math.pow(2,-149)*e:a*Math.pow(2,d-150)*(e+Math.pow(2,23)));return!0},function(a,b,c){b=V(b,c);if(null!=b){S(a.g,8*c+5);a=a.g;var d=b;d=(c=0>d?1:0)?-d:d;0===d?0<1/d?N=O=0:(O=0,N=2147483648):isNaN(d)?(O=0,N=2147483647):3.4028234663852886E38>>0):\n1.1754943508222875E-38>d?(d=Math.round(d/Math.pow(2,-149)),O=0,N=(c<<31|d)>>>0):(b=Math.floor(Math.log(d)/Math.LN2),d*=Math.pow(2,-b),d=Math.round(8388608*d),16777216<=d&&++b,O=0,N=(c<<31|b+127<<23|d&8388607)>>>0);c=N;a.g.push(c>>>0&255);a.g.push(c>>>8&255);a.g.push(c>>>16&255);a.g.push(c>>>24&255)}}),Xb=Wb(function(a,b,c){if(0!==a.h)return!1;for(var d=a.g,e=128,g=0,f=a=0;4>f&&128<=e;f++)e=d.h[d.g++],P(d),g|=(e&127)<<7*f;128<=e&&(e=d.h[d.g++],P(d),g|=(e&127)<<28,a|=(e&127)>>4);if(128<=e)for(f=0;5>\nf&&128<=e;f++)e=d.h[d.g++],P(d),a|=(e&127)<<7*f+3;if(128>e){d=g>>>0;e=a>>>0;if(a=e&2147483648)d=~d+1>>>0,e=~e>>>0,0==d&&(e=e+1>>>0);d=4294967296*e+(d>>>0)}else throw Na();W(b,c,a?-d:d);return!0},function(a,b,c){b=V(b,c);if(null!=b&&null!=b){S(a.g,8*c);a=a.g;var d=b;c=0>d;d=Math.abs(d);b=d>>>0;d=Math.floor((d-b)/4294967296);d>>>=0;c&&(d=~d>>>0,b=(~b>>>0)+1,4294967295>>7|b<<25)>>>0,b>>>=7;a.g.push(c)}}),Yb=Wb(function(a,\nb,c){if(0!==a.h)return!1;W(b,c,Q(a.g));return!0},function(a,b,c){b=V(b,c);if(null!=b&&null!=b)if(S(a.g,8*c),a=a.g,c=b,0<=c)S(a,c);else{for(b=0;9>b;b++)a.g.push(c&127|128),c>>=7;a.g.push(1)}}),Zb=Wb(function(a,b,c){if(2!==a.h)return!1;var d=Q(a.g)>>>0;a=a.g;var e=a.g;a.g+=d;P(a);a=a.h;var g;if(ya)(g=xa)||(g=xa=new TextDecoder(\"utf-8\",{fatal:!0})),g=g.decode(a.subarray(e,e+d));else{d=e+d;for(var f=[],h=null,k,l,m;ek?f.push(k):224>k?e>=d?L():(l=a[e++],194>k||128!==(l&192)?(e--,L()):\nf.push((k&31)<<6|l&63)):240>k?e>=d-1?L():(l=a[e++],128!==(l&192)||224===k&&160>l||237===k&&160<=l||128!==((g=a[e++])&192)?(e--,L()):f.push((k&15)<<12|(l&63)<<6|g&63)):244>=k?e>=d-2?L():(l=a[e++],128!==(l&192)||0!==(k<<28)+(l-144)>>30||128!==((g=a[e++])&192)||128!==((m=a[e++])&192)?(e--,L()):(k=(k&7)<<18|(l&63)<<12|(g&63)<<6|m&63,k-=65536,f.push((k>>10&1023)+55296,(k&1023)+56320))):L(),8192<=f.length&&(h=wa(h,f),f.length=0);g=wa(h,f)}W(b,c,g);return!0},function(a,b,c){b=V(b,c);if(null!=b){var d=!1;\nd=void 0===d?!1:d;if(Aa){if(d&&/(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])/.test(b))throw Error(\"Found an unpaired surrogate\");b=(za||(za=new TextEncoder)).encode(b)}else{for(var e=0,g=new Uint8Array(3*b.length),f=0;fh)g[e++]=h;else{if(2048>h)g[e++]=h>>6|192;else{if(55296<=h&&57343>=h){if(56319>=h&&f=k){h=1024*(h-55296)+k-56320+65536;g[e++]=h>>18|240;g[e++]=h>>12&63|128;\ng[e++]=h>>6&63|128;g[e++]=h&63|128;continue}else f--}if(d)throw Error(\"Found an unpaired surrogate\");h=65533}g[e++]=h>>12|224;g[e++]=h>>6&63|128}g[e++]=h&63|128}}b=g.subarray(0,e)}S(a.g,8*c+2);S(a.g,b.length);T(a,a.g.end());T(a,b)}}),$b=Wb(function(a,b,c,d,e){if(2!==a.h)return!1;b=jb(b,c,d);c=a.g.i;d=Q(a.g)>>>0;var g=a.g.g+d,f=g-c;0>=f&&(a.g.i=g,e(b,a),f=g-a.g.g);if(f)throw Error(\"Message parsing ended unexpectedly. Expected to read \"+(d+\" bytes, instead read \"+(d-f)+\" bytes, either the data ended unexpectedly or the message misreported its own length\"));\na.g.g=g;a.g.i=c;return!0},function(a,b,c,d,e){b=ib(b,d,c);if(null!=b)for(d=0;d>>=7,f.h++;g.push(h);f.h++}});function Z(){ub.apply(this,arguments)}E(Z,ub);if(fb){var ac={};Object.defineProperties(Z,(ac[Symbol.hasInstance]=gb(Object[Symbol.hasInstance]),ac))};function bc(a){Z.call(this,a)}E(bc,Z);function cc(){return[1,Yb,2,Y,3,Zb,4,Zb]};function dc(a){Z.call(this,a,-1,ec)}E(dc,Z);dc.prototype.addClassification=function(a,b){jb(this,1,bc,a,b);return this};function fc(){return[1,$b,bc,cc]}var ec=[1];function gc(a){Z.call(this,a)}E(gc,Z);function hc(){return[1,Y,2,Y,3,Y,4,Y,5,Y]};function ic(a){Z.call(this,a,-1,jc)}E(ic,Z);function kc(){return[1,$b,gc,hc]}var jc=[1];function lc(a){Z.call(this,a)}E(lc,Z);function mc(){return[1,Y,2,Y,3,Y,4,Y,5,Y,6,Xb]};var nc=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],oc=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,\n385],[385,384],[384,398],[398,362]],pc=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],qc=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],rc=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],sc=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],\n[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],tc=[].concat(D(nc),D(oc),D(pc),D(qc),D(rc),D(sc));function uc(a,b,c){c=a.createShader(0===c?a.VERTEX_SHADER:a.FRAGMENT_SHADER);a.shaderSource(c,b);a.compileShader(c);if(!a.getShaderParameter(c,a.COMPILE_STATUS))throw Error(\"Could not compile WebGL shader.\\n\\n\"+a.getShaderInfoLog(c));return c};function vc(a){return ib(a,bc,1).map(function(b){return{index:kb(b,1),ga:X(b,2),label:null!=V(b,3)?lb(b,3):void 0,displayName:null!=V(b,4)?lb(b,4):void 0}})};function wc(a){return{x:X(a,1),y:X(a,2),z:X(a,3),visibility:null!=V(a,4)?X(a,4):void 0}};function xc(a,b){this.h=a;this.g=b;this.l=0}\nfunction yc(a,b,c){zc(a,b);if(\"function\"===typeof a.g.canvas.transferToImageBitmap)return Promise.resolve(a.g.canvas.transferToImageBitmap());if(c)return Promise.resolve(a.g.canvas);if(\"function\"===typeof createImageBitmap)return createImageBitmap(a.g.canvas);void 0===a.i&&(a.i=document.createElement(\"canvas\"));return new Promise(function(d){a.i.height=a.g.canvas.height;a.i.width=a.g.canvas.width;a.i.getContext(\"2d\",{}).drawImage(a.g.canvas,0,0,a.g.canvas.width,a.g.canvas.height);d(a.i)})}\nfunction zc(a,b){var c=a.g;if(void 0===a.o){var d=uc(c,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",0),e=uc(c,\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D sampler0;\\n void main(){\\n gl_FragColor = texture2D(sampler0, vTex);\\n }\",1),g=c.createProgram();c.attachShader(g,d);c.attachShader(g,e);c.linkProgram(g);if(!c.getProgramParameter(g,c.LINK_STATUS))throw Error(\"Could not compile WebGL program.\\n\\n\"+\nc.getProgramInfoLog(g));d=a.o=g;c.useProgram(d);e=c.getUniformLocation(d,\"sampler0\");a.j={K:c.getAttribLocation(d,\"aVertex\"),J:c.getAttribLocation(d,\"aTex\"),ma:e};a.u=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,a.u);c.enableVertexAttribArray(a.j.K);c.vertexAttribPointer(a.j.K,2,c.FLOAT,!1,0,0);c.bufferData(c.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),c.STATIC_DRAW);c.bindBuffer(c.ARRAY_BUFFER,null);a.s=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,a.s);c.enableVertexAttribArray(a.j.J);c.vertexAttribPointer(a.j.J,\n2,c.FLOAT,!1,0,0);c.bufferData(c.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),c.STATIC_DRAW);c.bindBuffer(c.ARRAY_BUFFER,null);c.uniform1i(e,0)}d=a.j;c.useProgram(a.o);c.canvas.width=b.width;c.canvas.height=b.height;c.viewport(0,0,b.width,b.height);c.activeTexture(c.TEXTURE0);a.h.bindTexture2d(b.glName);c.enableVertexAttribArray(d.K);c.bindBuffer(c.ARRAY_BUFFER,a.u);c.vertexAttribPointer(d.K,2,c.FLOAT,!1,0,0);c.enableVertexAttribArray(d.J);c.bindBuffer(c.ARRAY_BUFFER,a.s);c.vertexAttribPointer(d.J,\n2,c.FLOAT,!1,0,0);c.bindFramebuffer(c.DRAW_FRAMEBUFFER?c.DRAW_FRAMEBUFFER:c.FRAMEBUFFER,null);c.clearColor(0,0,0,0);c.clear(c.COLOR_BUFFER_BIT);c.colorMask(!0,!0,!0,!0);c.drawArrays(c.TRIANGLE_FAN,0,4);c.disableVertexAttribArray(d.K);c.disableVertexAttribArray(d.J);c.bindBuffer(c.ARRAY_BUFFER,null);a.h.bindTexture2d(0)}function Ac(a){this.g=a};var Bc=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Cc(a,b){return b+a}function Dc(a,b){window[a]=b}function Ec(a){var b=document.createElement(\"script\");b.setAttribute(\"src\",a);b.setAttribute(\"crossorigin\",\"anonymous\");return new Promise(function(c){b.addEventListener(\"load\",function(){c()},!1);b.addEventListener(\"error\",function(){c()},!1);document.body.appendChild(b)})}\nfunction Fc(){return J(function(a){switch(a.g){case 1:return a.o=2,G(a,WebAssembly.instantiate(Bc),4);case 4:a.g=3;a.o=0;break;case 2:return a.o=0,a.j=null,a.return(!1);case 3:return a.return(!0)}})}\nfunction Gc(a){this.g=a;this.listeners={};this.j={};this.H={};this.o={};this.u={};this.I=this.s=this.Z=!0;this.D=Promise.resolve();this.Y=\"\";this.C={};this.locateFile=a&&a.locateFile||Cc;if(\"object\"===typeof window)var b=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf(\"/\"))+\"/\";else if(\"undefined\"!==typeof location)b=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf(\"/\"))+\"/\";else throw Error(\"solutions can only be loaded on a web page or in a web worker\");\nthis.$=b;if(a.options){b=C(Object.keys(a.options));for(var c=b.next();!c.done;c=b.next()){c=c.value;var d=a.options[c].default;void 0!==d&&(this.j[c]=\"function\"===typeof d?d():d)}}}x=Gc.prototype;x.close=function(){this.i&&this.i.delete();return Promise.resolve()};\nfunction Hc(a){var b,c,d,e,g,f,h,k,l,m,q;return J(function(p){switch(p.g){case 1:if(!a.Z)return p.return();b=void 0===a.g.files?[]:\"function\"===typeof a.g.files?a.g.files(a.j):a.g.files;return G(p,Fc(),2);case 2:c=p.h;if(\"object\"===typeof window)return Dc(\"createMediapipeSolutionsWasm\",{locateFile:a.locateFile}),Dc(\"createMediapipeSolutionsPackedAssets\",{locateFile:a.locateFile}),f=b.filter(function(n){return void 0!==n.data}),h=b.filter(function(n){return void 0===n.data}),k=Promise.all(f.map(function(n){var r=\nIc(a,n.url);if(void 0!==n.path){var t=n.path;r=r.then(function(w){a.overrideFile(t,w);return Promise.resolve(w)})}return r})),l=Promise.all(h.map(function(n){return void 0===n.simd||n.simd&&c||!n.simd&&!c?Ec(a.locateFile(n.url,a.$)):Promise.resolve()})).then(function(){var n,r,t;return J(function(w){if(1==w.g)return n=window.createMediapipeSolutionsWasm,r=window.createMediapipeSolutionsPackedAssets,t=a,G(w,n(r),2);t.h=w.h;w.g=0})}),m=function(){return J(function(n){a.g.graph&&a.g.graph.url?n=G(n,\nIc(a,a.g.graph.url),0):(n.g=0,n=void 0);return n})}(),G(p,Promise.all([l,k,m]),7);if(\"function\"!==typeof importScripts)throw Error(\"solutions can only be loaded on a web page or in a web worker\");d=b.filter(function(n){return void 0===n.simd||n.simd&&c||!n.simd&&!c}).map(function(n){return a.locateFile(n.url,a.$)});importScripts.apply(null,D(d));e=a;return G(p,createMediapipeSolutionsWasm(Module),6);case 6:e.h=p.h;a.l=new OffscreenCanvas(1,1);a.h.canvas=a.l;g=a.h.GL.createContext(a.l,{antialias:!1,\nalpha:!1,ja:\"undefined\"!==typeof WebGL2RenderingContext?2:1});a.h.GL.makeContextCurrent(g);p.g=4;break;case 7:a.l=document.createElement(\"canvas\");q=a.l.getContext(\"webgl2\",{});if(!q&&(q=a.l.getContext(\"webgl\",{}),!q))return alert(\"Failed to create WebGL canvas context when passing video frame.\"),p.return();a.G=q;a.h.canvas=a.l;a.h.createContext(a.l,!0,!0,{});case 4:a.i=new a.h.SolutionWasm,a.Z=!1,p.g=0}})}\nfunction Jc(a){var b,c,d,e,g,f,h,k;return J(function(l){if(1==l.g){if(a.g.graph&&a.g.graph.url&&a.Y===a.g.graph.url)return l.return();a.s=!0;if(!a.g.graph||!a.g.graph.url){l.g=2;return}a.Y=a.g.graph.url;return G(l,Ic(a,a.g.graph.url),3)}2!=l.g&&(b=l.h,a.i.loadGraph(b));c=C(Object.keys(a.C));for(d=c.next();!d.done;d=c.next())e=d.value,a.i.overrideFile(e,a.C[e]);a.C={};if(a.g.listeners)for(g=C(a.g.listeners),f=g.next();!f.done;f=g.next())h=f.value,Kc(a,h);k=a.j;a.j={};a.setOptions(k);l.g=0})}\nx.reset=function(){var a=this;return J(function(b){a.i&&(a.i.reset(),a.o={},a.u={});b.g=0})};\nx.setOptions=function(a,b){var c=this;if(b=b||this.g.options){for(var d=[],e=[],g={},f=C(Object.keys(a)),h=f.next();!h.done;g={R:g.R,S:g.S},h=f.next()){var k=h.value;k in this.j&&this.j[k]===a[k]||(this.j[k]=a[k],h=b[k],void 0!==h&&(h.onChange&&(g.R=h.onChange,g.S=a[k],d.push(function(l){return function(){var m;return J(function(q){if(1==q.g)return G(q,l.R(l.S),2);m=q.h;!0===m&&(c.s=!0);q.g=0})}}(g))),h.graphOptionXref&&(k={valueNumber:1===h.type?a[k]:0,valueBoolean:0===h.type?a[k]:!1,valueString:2===\nh.type?a[k]:\"\"},h=Object.assign(Object.assign(Object.assign({},{calculatorName:\"\",calculatorIndex:0}),h.graphOptionXref),k),e.push(h))))}if(0!==d.length||0!==e.length)this.s=!0,this.B=(void 0===this.B?[]:this.B).concat(e),this.A=(void 0===this.A?[]:this.A).concat(d)}};\nfunction Lc(a){var b,c,d,e,g,f,h;return J(function(k){switch(k.g){case 1:if(!a.s)return k.return();if(!a.A){k.g=2;break}b=C(a.A);c=b.next();case 3:if(c.done){k.g=5;break}d=c.value;return G(k,d(),4);case 4:c=b.next();k.g=3;break;case 5:a.A=void 0;case 2:if(a.B){e=new a.h.GraphOptionChangeRequestList;g=C(a.B);for(f=g.next();!f.done;f=g.next())h=f.value,e.push_back(h);a.i.changeOptions(e);e.delete();a.B=void 0}a.s=!1;k.g=0}})}\nx.initialize=function(){var a=this;return J(function(b){return 1==b.g?G(b,Hc(a),2):3!=b.g?G(b,Jc(a),3):G(b,Lc(a),0)})};function Ic(a,b){var c,d;return J(function(e){if(b in a.H)return e.return(a.H[b]);c=a.locateFile(b,\"\");d=fetch(c).then(function(g){return g.arrayBuffer()});a.H[b]=d;return e.return(d)})}x.overrideFile=function(a,b){this.i?this.i.overrideFile(a,b):this.C[a]=b};x.clearOverriddenFiles=function(){this.C={};this.i&&this.i.clearOverriddenFiles()};\nx.send=function(a,b){var c=this,d,e,g,f,h,k,l,m,q;return J(function(p){switch(p.g){case 1:if(!c.g.inputs)return p.return();d=1E3*(void 0===b||null===b?performance.now():b);return G(p,c.D,2);case 2:return G(p,c.initialize(),3);case 3:e=new c.h.PacketDataList;g=C(Object.keys(a));for(f=g.next();!f.done;f=g.next())if(h=f.value,k=c.g.inputs[h]){a:{var n=a[h];switch(k.type){case \"video\":var r=c.o[k.stream];r||(r=new xc(c.h,c.G),c.o[k.stream]=r);0===r.l&&(r.l=r.h.createTexture());if(\"undefined\"!==typeof HTMLVideoElement&&\nn instanceof HTMLVideoElement){var t=n.videoWidth;var w=n.videoHeight}else\"undefined\"!==typeof HTMLImageElement&&n instanceof HTMLImageElement?(t=n.naturalWidth,w=n.naturalHeight):(t=n.width,w=n.height);w={glName:r.l,width:t,height:w};t=r.g;t.canvas.width=w.width;t.canvas.height=w.height;t.activeTexture(t.TEXTURE0);r.h.bindTexture2d(r.l);t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n);r.h.bindTexture2d(0);r=w;break a;case \"detections\":r=c.o[k.stream];r||(r=new Ac(c.h),c.o[k.stream]=r);\nr.data||(r.data=new r.g.DetectionListData);r.data.reset(n.length);for(w=0;w false, debugValue => {\n if (debugValue) {\n console.warn('Keep intermediate tensors is ON. This will print the values of all ' +\n 'intermediate tensors during model inference. Not all models ' +\n 'support this mode. For details, check e2e/benchmarks/ ' +\n 'model_config.js. This significantly impacts performance.');\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRWxCLDRDQUE0QztBQUM1QyxHQUFHLENBQUMsWUFBWSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtJQUN0RSxJQUFJLFVBQVUsRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQ1IscUVBQXFFO1lBQ3JFLDhEQUE4RDtZQUM5RCx3REFBd0Q7WUFDeEQsMERBQTBELENBQUMsQ0FBQztLQUNqRTtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgRU5WID0gZW52KCk7XG5cbi8qKiBXaGV0aGVyIHRvIGtlZXAgaW50ZXJtZWRpYXRlIHRlbnNvcnMuICovXG5FTlYucmVnaXN0ZXJGbGFnKCdLRUVQX0lOVEVSTUVESUFURV9URU5TT1JTJywgKCkgPT4gZmFsc2UsIGRlYnVnVmFsdWUgPT4ge1xuICBpZiAoZGVidWdWYWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0tlZXAgaW50ZXJtZWRpYXRlIHRlbnNvcnMgaXMgT04uIFRoaXMgd2lsbCBwcmludCB0aGUgdmFsdWVzIG9mIGFsbCAnICtcbiAgICAgICAgJ2ludGVybWVkaWF0ZSB0ZW5zb3JzIGR1cmluZyBtb2RlbCBpbmZlcmVuY2UuIE5vdCBhbGwgbW9kZWxzICcgK1xuICAgICAgICAnc3VwcG9ydCB0aGlzIG1vZGUuIEZvciBkZXRhaWxzLCBjaGVjayBlMmUvYmVuY2htYXJrcy8gJyArXG4gICAgICAgICdtb2RlbF9jb25maWcuanMuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLicpO1xuICB9XG59KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * =============================================================================\n */\n/** DataType enum. */\nexport var DataType;\n(function (DataType) {\n // Not a legal value for DataType. Used to indicate a DataType field\n // has not been set.\n DataType[DataType[\"DT_INVALID\"] = 0] = \"DT_INVALID\";\n // Data types that all computation devices are expected to be\n // capable to support.\n DataType[DataType[\"DT_FLOAT\"] = 1] = \"DT_FLOAT\";\n DataType[DataType[\"DT_DOUBLE\"] = 2] = \"DT_DOUBLE\";\n DataType[DataType[\"DT_INT32\"] = 3] = \"DT_INT32\";\n DataType[DataType[\"DT_UINT8\"] = 4] = \"DT_UINT8\";\n DataType[DataType[\"DT_INT16\"] = 5] = \"DT_INT16\";\n DataType[DataType[\"DT_INT8\"] = 6] = \"DT_INT8\";\n DataType[DataType[\"DT_STRING\"] = 7] = \"DT_STRING\";\n DataType[DataType[\"DT_COMPLEX64\"] = 8] = \"DT_COMPLEX64\";\n DataType[DataType[\"DT_INT64\"] = 9] = \"DT_INT64\";\n DataType[DataType[\"DT_BOOL\"] = 10] = \"DT_BOOL\";\n DataType[DataType[\"DT_QINT8\"] = 11] = \"DT_QINT8\";\n DataType[DataType[\"DT_QUINT8\"] = 12] = \"DT_QUINT8\";\n DataType[DataType[\"DT_QINT32\"] = 13] = \"DT_QINT32\";\n DataType[DataType[\"DT_BFLOAT16\"] = 14] = \"DT_BFLOAT16\";\n DataType[DataType[\"DT_QINT16\"] = 15] = \"DT_QINT16\";\n DataType[DataType[\"DT_QUINT16\"] = 16] = \"DT_QUINT16\";\n DataType[DataType[\"DT_UINT16\"] = 17] = \"DT_UINT16\";\n DataType[DataType[\"DT_COMPLEX128\"] = 18] = \"DT_COMPLEX128\";\n DataType[DataType[\"DT_HALF\"] = 19] = \"DT_HALF\";\n DataType[DataType[\"DT_RESOURCE\"] = 20] = \"DT_RESOURCE\";\n DataType[DataType[\"DT_VARIANT\"] = 21] = \"DT_VARIANT\";\n DataType[DataType[\"DT_UINT32\"] = 22] = \"DT_UINT32\";\n DataType[DataType[\"DT_UINT64\"] = 23] = \"DT_UINT64\";\n // Do not use! These are only for parameters. Every enum above\n // should have a corresponding value below (verified by types_test).\n DataType[DataType[\"DT_FLOAT_REF\"] = 101] = \"DT_FLOAT_REF\";\n DataType[DataType[\"DT_DOUBLE_REF\"] = 102] = \"DT_DOUBLE_REF\";\n DataType[DataType[\"DT_INT32_REF\"] = 103] = \"DT_INT32_REF\";\n DataType[DataType[\"DT_UINT8_REF\"] = 104] = \"DT_UINT8_REF\";\n DataType[DataType[\"DT_INT16_REF\"] = 105] = \"DT_INT16_REF\";\n DataType[DataType[\"DT_INT8_REF\"] = 106] = \"DT_INT8_REF\";\n DataType[DataType[\"DT_STRING_REF\"] = 107] = \"DT_STRING_REF\";\n DataType[DataType[\"DT_COMPLEX64_REF\"] = 108] = \"DT_COMPLEX64_REF\";\n DataType[DataType[\"DT_INT64_REF\"] = 109] = \"DT_INT64_REF\";\n DataType[DataType[\"DT_BOOL_REF\"] = 110] = \"DT_BOOL_REF\";\n DataType[DataType[\"DT_QINT8_REF\"] = 111] = \"DT_QINT8_REF\";\n DataType[DataType[\"DT_QUINT8_REF\"] = 112] = \"DT_QUINT8_REF\";\n DataType[DataType[\"DT_QINT32_REF\"] = 113] = \"DT_QINT32_REF\";\n DataType[DataType[\"DT_BFLOAT16_REF\"] = 114] = \"DT_BFLOAT16_REF\";\n DataType[DataType[\"DT_QINT16_REF\"] = 115] = \"DT_QINT16_REF\";\n DataType[DataType[\"DT_QUINT16_REF\"] = 116] = \"DT_QUINT16_REF\";\n DataType[DataType[\"DT_UINT16_REF\"] = 117] = \"DT_UINT16_REF\";\n DataType[DataType[\"DT_COMPLEX128_REF\"] = 118] = \"DT_COMPLEX128_REF\";\n DataType[DataType[\"DT_HALF_REF\"] = 119] = \"DT_HALF_REF\";\n DataType[DataType[\"DT_RESOURCE_REF\"] = 120] = \"DT_RESOURCE_REF\";\n DataType[DataType[\"DT_VARIANT_REF\"] = 121] = \"DT_VARIANT_REF\";\n DataType[DataType[\"DT_UINT32_REF\"] = 122] = \"DT_UINT32_REF\";\n DataType[DataType[\"DT_UINT64_REF\"] = 123] = \"DT_UINT64_REF\";\n})(DataType || (DataType = {}));\nexport var SaverDef;\n(function (SaverDef) {\n /** CheckpointFormatVersion enum. */\n let CheckpointFormatVersion;\n (function (CheckpointFormatVersion) {\n CheckpointFormatVersion[CheckpointFormatVersion[\"LEGACY\"] = 0] = \"LEGACY\";\n CheckpointFormatVersion[CheckpointFormatVersion[\"V1\"] = 1] = \"V1\";\n CheckpointFormatVersion[CheckpointFormatVersion[\"V2\"] = 2] = \"V2\";\n })(CheckpointFormatVersion = SaverDef.CheckpointFormatVersion || (SaverDef.CheckpointFormatVersion = {}));\n})(SaverDef || (SaverDef = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZWRfYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2RhdGEvY29tcGlsZWRfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBYUgscUJBQXFCO0FBQ3JCLE1BQU0sQ0FBTixJQUFZLFFBd0RYO0FBeERELFdBQVksUUFBUTtJQUNsQixxRUFBcUU7SUFDckUsb0JBQW9CO0lBQ3BCLG1EQUFjLENBQUE7SUFFZCw2REFBNkQ7SUFDN0Qsc0JBQXNCO0lBQ3RCLCtDQUFZLENBQUE7SUFDWixpREFBYSxDQUFBO0lBQ2IsK0NBQVksQ0FBQTtJQUNaLCtDQUFZLENBQUE7SUFDWiwrQ0FBWSxDQUFBO0lBQ1osNkNBQVcsQ0FBQTtJQUNYLGlEQUFhLENBQUE7SUFDYix1REFBZ0IsQ0FBQTtJQUNoQiwrQ0FBWSxDQUFBO0lBQ1osOENBQVksQ0FBQTtJQUNaLGdEQUFhLENBQUE7SUFDYixrREFBYyxDQUFBO0lBQ2Qsa0RBQWMsQ0FBQTtJQUNkLHNEQUFnQixDQUFBO0lBQ2hCLGtEQUFjLENBQUE7SUFDZCxvREFBZSxDQUFBO0lBQ2Ysa0RBQWMsQ0FBQTtJQUNkLDBEQUFrQixDQUFBO0lBQ2xCLDhDQUFZLENBQUE7SUFDWixzREFBZ0IsQ0FBQTtJQUNoQixvREFBZSxDQUFBO0lBQ2Ysa0RBQWMsQ0FBQTtJQUNkLGtEQUFjLENBQUE7SUFFZCxnRUFBZ0U7SUFDaEUsb0VBQW9FO0lBQ3BFLHlEQUFrQixDQUFBO0lBQ2xCLDJEQUFtQixDQUFBO0lBQ25CLHlEQUFrQixDQUFBO0lBQ2xCLHlEQUFrQixDQUFBO0lBQ2xCLHlEQUFrQixDQUFBO0lBQ2xCLHVEQUFpQixDQUFBO0lBQ2pCLDJEQUFtQixDQUFBO0lBQ25CLGlFQUFzQixDQUFBO0lBQ3RCLHlEQUFrQixDQUFBO0lBQ2xCLHVEQUFpQixDQUFBO0lBQ2pCLHlEQUFrQixDQUFBO0lBQ2xCLDJEQUFtQixDQUFBO0lBQ25CLDJEQUFtQixDQUFBO0lBQ25CLCtEQUFxQixDQUFBO0lBQ3JCLDJEQUFtQixDQUFBO0lBQ25CLDZEQUFvQixDQUFBO0lBQ3BCLDJEQUFtQixDQUFBO0lBQ25CLG1FQUF1QixDQUFBO0lBQ3ZCLHVEQUFpQixDQUFBO0lBQ2pCLCtEQUFxQixDQUFBO0lBQ3JCLDZEQUFvQixDQUFBO0lBQ3BCLDJEQUFtQixDQUFBO0lBQ25CLDJEQUFtQixDQUFBO0FBQ3JCLENBQUMsRUF4RFcsUUFBUSxLQUFSLFFBQVEsUUF3RG5CO0FBMlBELE1BQU0sS0FBVyxRQUFRLENBR3hCO0FBSEQsV0FBaUIsUUFBUTtJQUN2QixvQ0FBb0M7SUFDcEMsSUFBWSx1QkFBMEQ7SUFBdEUsV0FBWSx1QkFBdUI7UUFBRSx5RUFBWSxDQUFBO1FBQUUsaUVBQVEsQ0FBQTtRQUFFLGlFQUFRLENBQUE7SUFBQSxDQUFDLEVBQTFELHVCQUF1QixHQUF2QixnQ0FBdUIsS0FBdkIsZ0NBQXVCLFFBQW1DO0FBQ3hFLENBQUMsRUFIZ0IsUUFBUSxLQUFSLFFBQVEsUUFHeEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuXG4vKiogUHJvcGVydGllcyBvZiBhbiBBbnkuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUFueSB7XG4gIC8qKiBBbnkgdHlwZVVybCAqL1xuICB0eXBlVXJsPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogQW55IHZhbHVlICovXG4gIHZhbHVlPzogKFVpbnQ4QXJyYXl8bnVsbCk7XG59XG5cbi8qKiBEYXRhVHlwZSBlbnVtLiAqL1xuZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICAvLyBOb3QgYSBsZWdhbCB2YWx1ZSBmb3IgRGF0YVR5cGUuICBVc2VkIHRvIGluZGljYXRlIGEgRGF0YVR5cGUgZmllbGRcbiAgLy8gaGFzIG5vdCBiZWVuIHNldC5cbiAgRFRfSU5WQUxJRCA9IDAsXG5cbiAgLy8gRGF0YSB0eXBlcyB0aGF0IGFsbCBjb21wdXRhdGlvbiBkZXZpY2VzIGFyZSBleHBlY3RlZCB0byBiZVxuICAvLyBjYXBhYmxlIHRvIHN1cHBvcnQuXG4gIERUX0ZMT0FUID0gMSxcbiAgRFRfRE9VQkxFID0gMixcbiAgRFRfSU5UMzIgPSAzLFxuICBEVF9VSU5UOCA9IDQsXG4gIERUX0lOVDE2ID0gNSxcbiAgRFRfSU5UOCA9IDYsXG4gIERUX1NUUklORyA9IDcsXG4gIERUX0NPTVBMRVg2NCA9IDgsICAvLyBTaW5nbGUtcHJlY2lzaW9uIGNvbXBsZXhcbiAgRFRfSU5UNjQgPSA5LFxuICBEVF9CT09MID0gMTAsXG4gIERUX1FJTlQ4ID0gMTEsICAgICAvLyBRdWFudGl6ZWQgaW50OFxuICBEVF9RVUlOVDggPSAxMiwgICAgLy8gUXVhbnRpemVkIHVpbnQ4XG4gIERUX1FJTlQzMiA9IDEzLCAgICAvLyBRdWFudGl6ZWQgaW50MzJcbiAgRFRfQkZMT0FUMTYgPSAxNCwgIC8vIEZsb2F0MzIgdHJ1bmNhdGVkIHRvIDE2IGJpdHMuICBPbmx5IGZvciBjYXN0IG9wcy5cbiAgRFRfUUlOVDE2ID0gMTUsICAgIC8vIFF1YW50aXplZCBpbnQxNlxuICBEVF9RVUlOVDE2ID0gMTYsICAgLy8gUXVhbnRpemVkIHVpbnQxNlxuICBEVF9VSU5UMTYgPSAxNyxcbiAgRFRfQ09NUExFWDEyOCA9IDE4LCAgLy8gRG91YmxlLXByZWNpc2lvbiBjb21wbGV4XG4gIERUX0hBTEYgPSAxOSxcbiAgRFRfUkVTT1VSQ0UgPSAyMCxcbiAgRFRfVkFSSUFOVCA9IDIxLCAgLy8gQXJiaXRyYXJ5IEMrKyBkYXRhIHR5cGVzXG4gIERUX1VJTlQzMiA9IDIyLFxuICBEVF9VSU5UNjQgPSAyMyxcblxuICAvLyBEbyBub3QgdXNlISAgVGhlc2UgYXJlIG9ubHkgZm9yIHBhcmFtZXRlcnMuICBFdmVyeSBlbnVtIGFib3ZlXG4gIC8vIHNob3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBiZWxvdyAodmVyaWZpZWQgYnkgdHlwZXNfdGVzdCkuXG4gIERUX0ZMT0FUX1JFRiA9IDEwMSxcbiAgRFRfRE9VQkxFX1JFRiA9IDEwMixcbiAgRFRfSU5UMzJfUkVGID0gMTAzLFxuICBEVF9VSU5UOF9SRUYgPSAxMDQsXG4gIERUX0lOVDE2X1JFRiA9IDEwNSxcbiAgRFRfSU5UOF9SRUYgPSAxMDYsXG4gIERUX1NUUklOR19SRUYgPSAxMDcsXG4gIERUX0NPTVBMRVg2NF9SRUYgPSAxMDgsXG4gIERUX0lOVDY0X1JFRiA9IDEwOSxcbiAgRFRfQk9PTF9SRUYgPSAxMTAsXG4gIERUX1FJTlQ4X1JFRiA9IDExMSxcbiAgRFRfUVVJTlQ4X1JFRiA9IDExMixcbiAgRFRfUUlOVDMyX1JFRiA9IDExMyxcbiAgRFRfQkZMT0FUMTZfUkVGID0gMTE0LFxuICBEVF9RSU5UMTZfUkVGID0gMTE1LFxuICBEVF9RVUlOVDE2X1JFRiA9IDExNixcbiAgRFRfVUlOVDE2X1JFRiA9IDExNyxcbiAgRFRfQ09NUExFWDEyOF9SRUYgPSAxMTgsXG4gIERUX0hBTEZfUkVGID0gMTE5LFxuICBEVF9SRVNPVVJDRV9SRUYgPSAxMjAsXG4gIERUX1ZBUklBTlRfUkVGID0gMTIxLFxuICBEVF9VSU5UMzJfUkVGID0gMTIyLFxuICBEVF9VSU5UNjRfUkVGID0gMTIzLFxufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIFRlbnNvclNoYXBlLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElUZW5zb3JTaGFwZSB7XG4gIC8qKiBUZW5zb3JTaGFwZSBkaW0gKi9cbiAgZGltPzogKFRlbnNvclNoYXBlLklEaW1bXXxudWxsKTtcblxuICAvKiogVGVuc29yU2hhcGUgdW5rbm93blJhbmsgKi9cbiAgdW5rbm93blJhbms/OiAoYm9vbGVhbnxudWxsKTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUZW5zb3JTaGFwZSB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgRGltLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSURpbSB7XG4gICAgLyoqIERpbSBzaXplICovXG4gICAgc2l6ZT86IChudW1iZXJ8c3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIERpbSBuYW1lICovXG4gICAgbmFtZT86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBUZW5zb3IuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRlbnNvciB7XG4gIC8qKiBUZW5zb3IgZHR5cGUgKi9cbiAgZHR5cGU/OiAoRGF0YVR5cGV8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciB0ZW5zb3JTaGFwZSAqL1xuICB0ZW5zb3JTaGFwZT86IChJVGVuc29yU2hhcGV8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciB2ZXJzaW9uTnVtYmVyICovXG4gIHZlcnNpb25OdW1iZXI/OiAobnVtYmVyfG51bGwpO1xuXG4gIC8qKiBUZW5zb3IgdGVuc29yQ29udGVudCAqL1xuICB0ZW5zb3JDb250ZW50PzogKFVpbnQ4QXJyYXl8bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBmbG9hdFZhbCAqL1xuICBmbG9hdFZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIGRvdWJsZVZhbCAqL1xuICBkb3VibGVWYWw/OiAobnVtYmVyW118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBpbnRWYWwgKi9cbiAgaW50VmFsPzogKG51bWJlcltdfG51bGwpO1xuXG4gIC8qKiBUZW5zb3Igc3RyaW5nVmFsICovXG4gIHN0cmluZ1ZhbD86IChVaW50OEFycmF5W118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBzY29tcGxleFZhbCAqL1xuICBzY29tcGxleFZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIGludDY0VmFsICovXG4gIGludDY0VmFsPzogKChudW1iZXIgfCBzdHJpbmcpW118bnVsbCk7XG5cbiAgLyoqIFRlbnNvciBib29sVmFsICovXG4gIGJvb2xWYWw/OiAoYm9vbGVhbltdfG51bGwpO1xuXG4gIC8qKiBUZW5zb3IgdWludDMyVmFsICovXG4gIHVpbnQzMlZhbD86IChudW1iZXJbXXxudWxsKTtcblxuICAvKiogVGVuc29yIHVpbnQ2NFZhbCAqL1xuICB1aW50NjRWYWw/OiAoKG51bWJlciB8IHN0cmluZylbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYW4gQXR0clZhbHVlLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElBdHRyVmFsdWUge1xuICAvKiogQXR0clZhbHVlIGxpc3QgKi9cbiAgbGlzdD86IChBdHRyVmFsdWUuSUxpc3RWYWx1ZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHMgKi9cbiAgcz86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIEF0dHJWYWx1ZSBpICovXG4gIGk/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAvKiogQXR0clZhbHVlIGYgKi9cbiAgZj86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIEF0dHJWYWx1ZSBiICovXG4gIGI/OiAoYm9vbGVhbnxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHR5cGUgKi9cbiAgdHlwZT86IChEYXRhVHlwZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHNoYXBlICovXG4gIHNoYXBlPzogKElUZW5zb3JTaGFwZXxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHRlbnNvciAqL1xuICB0ZW5zb3I/OiAoSVRlbnNvcnxudWxsKTtcblxuICAvKiogQXR0clZhbHVlIHBsYWNlaG9sZGVyICovXG4gIHBsYWNlaG9sZGVyPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogQXR0clZhbHVlIGZ1bmMgKi9cbiAgZnVuYz86IChJTmFtZUF0dHJMaXN0fG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEF0dHJWYWx1ZSB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTGlzdFZhbHVlLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUxpc3RWYWx1ZSB7XG4gICAgLyoqIExpc3RWYWx1ZSBzICovXG4gICAgcz86IChzdHJpbmdbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgaSAqL1xuICAgIGk/OiAoKG51bWJlciB8IHN0cmluZylbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgZiAqL1xuICAgIGY/OiAobnVtYmVyW118bnVsbCk7XG5cbiAgICAvKiogTGlzdFZhbHVlIGIgKi9cbiAgICBiPzogKGJvb2xlYW5bXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgdHlwZSAqL1xuICAgIHR5cGU/OiAoRGF0YVR5cGVbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgc2hhcGUgKi9cbiAgICBzaGFwZT86IChJVGVuc29yU2hhcGVbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgdGVuc29yICovXG4gICAgdGVuc29yPzogKElUZW5zb3JbXXxudWxsKTtcblxuICAgIC8qKiBMaXN0VmFsdWUgZnVuYyAqL1xuICAgIGZ1bmM/OiAoSU5hbWVBdHRyTGlzdFtdfG51bGwpO1xuICB9XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgTmFtZUF0dHJMaXN0LiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElOYW1lQXR0ckxpc3Qge1xuICAvKiogTmFtZUF0dHJMaXN0IG5hbWUgKi9cbiAgbmFtZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5hbWVBdHRyTGlzdCBhdHRyICovXG4gIGF0dHI/OiAoe1trOiBzdHJpbmddOiBJQXR0clZhbHVlfXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBOb2RlRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElOb2RlRGVmIHtcbiAgLyoqIE5vZGVEZWYgbmFtZSAqL1xuICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogTm9kZURlZiBvcCAqL1xuICBvcD86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgaW5wdXQgKi9cbiAgaW5wdXQ/OiAoc3RyaW5nW118bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgZGV2aWNlICovXG4gIGRldmljZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE5vZGVEZWYgYXR0ciAqL1xuICBhdHRyPzogKHtbazogc3RyaW5nXTogSUF0dHJWYWx1ZX18bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgVmVyc2lvbkRlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJVmVyc2lvbkRlZiB7XG4gIC8qKiBWZXJzaW9uRGVmIHByb2R1Y2VyICovXG4gIHByb2R1Y2VyPzogKG51bWJlcnxudWxsKTtcblxuICAvKiogVmVyc2lvbkRlZiBtaW5Db25zdW1lciAqL1xuICBtaW5Db25zdW1lcj86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIFZlcnNpb25EZWYgYmFkQ29uc3VtZXJzICovXG4gIGJhZENvbnN1bWVycz86IChudW1iZXJbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBHcmFwaERlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJR3JhcGhEZWYge1xuICAvKiogR3JhcGhEZWYgbm9kZSAqL1xuICBub2RlPzogKElOb2RlRGVmW118bnVsbCk7XG5cbiAgLyoqIEdyYXBoRGVmIHZlcnNpb25zICovXG4gIHZlcnNpb25zPzogKElWZXJzaW9uRGVmfG51bGwpO1xuXG4gIC8qKiBHcmFwaERlZiBsaWJyYXJ5ICovXG4gIGxpYnJhcnk/OiAoSUZ1bmN0aW9uRGVmTGlicmFyeXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBDb2xsZWN0aW9uRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElDb2xsZWN0aW9uRGVmIHtcbiAgLyoqIENvbGxlY3Rpb25EZWYgbm9kZUxpc3QgKi9cbiAgbm9kZUxpc3Q/OiAoQ29sbGVjdGlvbkRlZi5JTm9kZUxpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgYnl0ZXNMaXN0ICovXG4gIGJ5dGVzTGlzdD86IChDb2xsZWN0aW9uRGVmLklCeXRlc0xpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgaW50NjRMaXN0ICovXG4gIGludDY0TGlzdD86IChDb2xsZWN0aW9uRGVmLklJbnQ2NExpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgZmxvYXRMaXN0ICovXG4gIGZsb2F0TGlzdD86IChDb2xsZWN0aW9uRGVmLklGbG9hdExpc3R8bnVsbCk7XG5cbiAgLyoqIENvbGxlY3Rpb25EZWYgYW55TGlzdCAqL1xuICBhbnlMaXN0PzogKENvbGxlY3Rpb25EZWYuSUFueUxpc3R8bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29sbGVjdGlvbkRlZiB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTm9kZUxpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJTm9kZUxpc3Qge1xuICAgIC8qKiBOb2RlTGlzdCB2YWx1ZSAqL1xuICAgIHZhbHVlPzogKHN0cmluZ1tdfG51bGwpO1xuICB9XG5cbiAgLyoqIFByb3BlcnRpZXMgb2YgYSBCeXRlc0xpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQnl0ZXNMaXN0IHtcbiAgICAvKiogQnl0ZXNMaXN0IHZhbHVlICovXG4gICAgdmFsdWU/OiAoVWludDhBcnJheVtdfG51bGwpO1xuICB9XG5cbiAgLyoqIFByb3BlcnRpZXMgb2YgYW4gSW50NjRMaXN0LiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUludDY0TGlzdCB7XG4gICAgLyoqIEludDY0TGlzdCB2YWx1ZSAqL1xuICAgIHZhbHVlPzogKChudW1iZXIgfCBzdHJpbmcpW118bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhIEZsb2F0TGlzdC4gKi9cbiAgZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElGbG9hdExpc3Qge1xuICAgIC8qKiBGbG9hdExpc3QgdmFsdWUgKi9cbiAgICB2YWx1ZT86IChudW1iZXJbXXxudWxsKTtcbiAgfVxuXG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGFuIEFueUxpc3QuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQW55TGlzdCB7XG4gICAgLyoqIEFueUxpc3QgdmFsdWUgKi9cbiAgICB2YWx1ZT86IChJQW55W118bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTYXZlckRlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJU2F2ZXJEZWYge1xuICAvKiogU2F2ZXJEZWYgZmlsZW5hbWVUZW5zb3JOYW1lICovXG4gIGZpbGVuYW1lVGVuc29yTmFtZT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIFNhdmVyRGVmIHNhdmVUZW5zb3JOYW1lICovXG4gIHNhdmVUZW5zb3JOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZXJEZWYgcmVzdG9yZU9wTmFtZSAqL1xuICByZXN0b3JlT3BOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZXJEZWYgbWF4VG9LZWVwICovXG4gIG1heFRvS2VlcD86IChudW1iZXJ8bnVsbCk7XG5cbiAgLyoqIFNhdmVyRGVmIHNoYXJkZWQgKi9cbiAgc2hhcmRlZD86IChib29sZWFufG51bGwpO1xuXG4gIC8qKiBTYXZlckRlZiBrZWVwQ2hlY2twb2ludEV2ZXJ5TkhvdXJzICovXG4gIGtlZXBDaGVja3BvaW50RXZlcnlOSG91cnM/OiAobnVtYmVyfG51bGwpO1xuXG4gIC8qKiBTYXZlckRlZiB2ZXJzaW9uICovXG4gIHZlcnNpb24/OiAoU2F2ZXJEZWYuQ2hlY2twb2ludEZvcm1hdFZlcnNpb258bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2F2ZXJEZWYge1xuICAvKiogQ2hlY2twb2ludEZvcm1hdFZlcnNpb24gZW51bS4gKi9cbiAgZXhwb3J0IGVudW0gQ2hlY2twb2ludEZvcm1hdFZlcnNpb24geydMRUdBQ1knID0gMCwgJ1YxJyA9IDEsICdWMicgPSAyfVxufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIFRlbnNvckluZm8uICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVRlbnNvckluZm8ge1xuICAvKiogVGVuc29ySW5mbyBuYW1lICovXG4gIG5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gIC8qKiBUZW5zb3JJbmZvIGNvb1NwYXJzZSAqL1xuICBjb29TcGFyc2U/OiAoVGVuc29ySW5mby5JQ29vU3BhcnNlfG51bGwpO1xuXG4gIC8qKiBUZW5zb3JJbmZvIGR0eXBlICovXG4gIGR0eXBlPzogKERhdGFUeXBlfHN0cmluZ3xudWxsKTtcblxuICAvKiogVGVuc29ySW5mbyB0ZW5zb3JTaGFwZSAqL1xuICB0ZW5zb3JTaGFwZT86IChJVGVuc29yU2hhcGV8bnVsbCk7XG5cbiAgLyoqIFJlc291cmNlIGlkIHRlbnNvciB3YXMgb3JpZ2luYWxseSBhc3NpZ25lZCB0by4gICovXG4gIHJlc291cmNlSWQ/OiAobnVtYmVyfG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFRlbnNvckluZm8ge1xuICAvKiogUHJvcGVydGllcyBvZiBhIENvb1NwYXJzZS4gKi9cbiAgZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElDb29TcGFyc2Uge1xuICAgIC8qKiBDb29TcGFyc2UgdmFsdWVzVGVuc29yTmFtZSAqL1xuICAgIHZhbHVlc1RlbnNvck5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIENvb1NwYXJzZSBpbmRpY2VzVGVuc29yTmFtZSAqL1xuICAgIGluZGljZXNUZW5zb3JOYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBDb29TcGFyc2UgZGVuc2VTaGFwZVRlbnNvck5hbWUgKi9cbiAgICBkZW5zZVNoYXBlVGVuc29yTmFtZT86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTaWduYXR1cmVEZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSVNpZ25hdHVyZURlZiB7XG4gIC8qKiBTaWduYXR1cmVEZWYgaW5wdXRzICovXG4gIGlucHV0cz86ICh7W2s6IHN0cmluZ106IElUZW5zb3JJbmZvfXxudWxsKTtcblxuICAvKiogU2lnbmF0dXJlRGVmIG91dHB1dHMgKi9cbiAgb3V0cHV0cz86ICh7W2s6IHN0cmluZ106IElUZW5zb3JJbmZvfXxudWxsKTtcblxuICAvKiogU2lnbmF0dXJlRGVmIG1ldGhvZE5hbWUgKi9cbiAgbWV0aG9kTmFtZT86IChzdHJpbmd8bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIEFzc2V0RmlsZURlZi4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQXNzZXRGaWxlRGVmIHtcbiAgLyoqIEFzc2V0RmlsZURlZiB0ZW5zb3JJbmZvICovXG4gIHRlbnNvckluZm8/OiAoSVRlbnNvckluZm98bnVsbCk7XG5cbiAgLyoqIEFzc2V0RmlsZURlZiBmaWxlbmFtZSAqL1xuICBmaWxlbmFtZT86IChzdHJpbmd8bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIE9wRGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElPcERlZiB7XG4gIC8qKiBPcERlZiBuYW1lICovXG4gIG5hbWU/OiAoc3RyaW5nfG51bGwpO1xuXG4gIC8qKiBPcERlZiBpbnB1dEFyZyAqL1xuICBpbnB1dEFyZz86IChPcERlZi5JQXJnRGVmW118bnVsbCk7XG5cbiAgLyoqIE9wRGVmIG91dHB1dEFyZyAqL1xuICBvdXRwdXRBcmc/OiAoT3BEZWYuSUFyZ0RlZltdfG51bGwpO1xuXG4gIC8qKiBPcERlZiBhdHRyICovXG4gIGF0dHI/OiAoT3BEZWYuSUF0dHJEZWZbXXxudWxsKTtcblxuICAvKiogT3BEZWYgZGVwcmVjYXRpb24gKi9cbiAgZGVwcmVjYXRpb24/OiAoT3BEZWYuSU9wRGVwcmVjYXRpb258bnVsbCk7XG5cbiAgLyoqIE9wRGVmIHN1bW1hcnkgKi9cbiAgc3VtbWFyeT86IChzdHJpbmd8bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogT3BEZWYgaXNDb21tdXRhdGl2ZSAqL1xuICBpc0NvbW11dGF0aXZlPzogKGJvb2xlYW58bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGlzQWdncmVnYXRlICovXG4gIGlzQWdncmVnYXRlPzogKGJvb2xlYW58bnVsbCk7XG5cbiAgLyoqIE9wRGVmIGlzU3RhdGVmdWwgKi9cbiAgaXNTdGF0ZWZ1bD86IChib29sZWFufG51bGwpO1xuXG4gIC8qKiBPcERlZiBhbGxvd3NVbmluaXRpYWxpemVkSW5wdXQgKi9cbiAgYWxsb3dzVW5pbml0aWFsaXplZElucHV0PzogKGJvb2xlYW58bnVsbCk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgT3BEZWYge1xuICAvKiogUHJvcGVydGllcyBvZiBhbiBBcmdEZWYuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJQXJnRGVmIHtcbiAgICAvKiogQXJnRGVmIG5hbWUgKi9cbiAgICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBcmdEZWYgZGVzY3JpcHRpb24gKi9cbiAgICBkZXNjcmlwdGlvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogQXJnRGVmIHR5cGUgKi9cbiAgICB0eXBlPzogKERhdGFUeXBlfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiB0eXBlQXR0ciAqL1xuICAgIHR5cGVBdHRyPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBcmdEZWYgbnVtYmVyQXR0ciAqL1xuICAgIG51bWJlckF0dHI/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiB0eXBlTGlzdEF0dHIgKi9cbiAgICB0eXBlTGlzdEF0dHI/OiAoc3RyaW5nfG51bGwpO1xuXG4gICAgLyoqIEFyZ0RlZiBpc1JlZiAqL1xuICAgIGlzUmVmPzogKGJvb2xlYW58bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhbiBBdHRyRGVmLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUF0dHJEZWYge1xuICAgIC8qKiBBdHRyRGVmIG5hbWUgKi9cbiAgICBuYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIHR5cGUgKi9cbiAgICB0eXBlPzogKHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIGRlZmF1bHRWYWx1ZSAqL1xuICAgIGRlZmF1bHRWYWx1ZT86IChJQXR0clZhbHVlfG51bGwpO1xuXG4gICAgLyoqIEF0dHJEZWYgZGVzY3JpcHRpb24gKi9cbiAgICBkZXNjcmlwdGlvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogQXR0ckRlZiBoYXNNaW5pbXVtICovXG4gICAgaGFzTWluaW11bT86IChib29sZWFufG51bGwpO1xuXG4gICAgLyoqIEF0dHJEZWYgbWluaW11bSAqL1xuICAgIG1pbmltdW0/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAgIC8qKiBBdHRyRGVmIGFsbG93ZWRWYWx1ZXMgKi9cbiAgICBhbGxvd2VkVmFsdWVzPzogKElBdHRyVmFsdWV8bnVsbCk7XG4gIH1cblxuICAvKiogUHJvcGVydGllcyBvZiBhbiBPcERlcHJlY2F0aW9uLiAqL1xuICBleHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSU9wRGVwcmVjYXRpb24ge1xuICAgIC8qKiBPcERlcHJlY2F0aW9uIHZlcnNpb24gKi9cbiAgICB2ZXJzaW9uPzogKG51bWJlcnxudWxsKTtcblxuICAgIC8qKiBPcERlcHJlY2F0aW9uIGV4cGxhbmF0aW9uICovXG4gICAgZXhwbGFuYXRpb24/OiAoc3RyaW5nfG51bGwpO1xuICB9XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGFuIE9wTGlzdC4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJT3BMaXN0IHtcbiAgLyoqIE9wTGlzdCBvcCAqL1xuICBvcD86IChJT3BEZWZbXXxudWxsKTtcbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBNZXRhR3JhcGhEZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSU1ldGFHcmFwaERlZiB7XG4gIC8qKiBNZXRhR3JhcGhEZWYgbWV0YUluZm9EZWYgKi9cbiAgbWV0YUluZm9EZWY/OiAoTWV0YUdyYXBoRGVmLklNZXRhSW5mb0RlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGdyYXBoRGVmICovXG4gIGdyYXBoRGVmPzogKElHcmFwaERlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIHNhdmVyRGVmICovXG4gIHNhdmVyRGVmPzogKElTYXZlckRlZnxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGNvbGxlY3Rpb25EZWYgKi9cbiAgY29sbGVjdGlvbkRlZj86ICh7W2s6IHN0cmluZ106IElDb2xsZWN0aW9uRGVmfXxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIHNpZ25hdHVyZURlZiAqL1xuICBzaWduYXR1cmVEZWY/OiAoe1trOiBzdHJpbmddOiBJU2lnbmF0dXJlRGVmfXxudWxsKTtcblxuICAvKiogTWV0YUdyYXBoRGVmIGFzc2V0RmlsZURlZiAqL1xuICBhc3NldEZpbGVEZWY/OiAoSUFzc2V0RmlsZURlZltdfG51bGwpO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1ldGFHcmFwaERlZiB7XG4gIC8qKiBQcm9wZXJ0aWVzIG9mIGEgTWV0YUluZm9EZWYuICovXG4gIGV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJTWV0YUluZm9EZWYge1xuICAgIC8qKiBNZXRhSW5mb0RlZiBtZXRhR3JhcGhWZXJzaW9uICovXG4gICAgbWV0YUdyYXBoVmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgc3RyaXBwZWRPcExpc3QgKi9cbiAgICBzdHJpcHBlZE9wTGlzdD86IChJT3BMaXN0fG51bGwpO1xuXG4gICAgLyoqIE1ldGFJbmZvRGVmIGFueUluZm8gKi9cbiAgICBhbnlJbmZvPzogKElBbnl8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGFncyAqL1xuICAgIHRhZ3M/OiAoc3RyaW5nW118bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGVuc29yZmxvd1ZlcnNpb24gKi9cbiAgICB0ZW5zb3JmbG93VmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG5cbiAgICAvKiogTWV0YUluZm9EZWYgdGVuc29yZmxvd0dpdFZlcnNpb24gKi9cbiAgICB0ZW5zb3JmbG93R2l0VmVyc2lvbj86IChzdHJpbmd8bnVsbCk7XG4gIH1cbn1cblxuLyoqIFByb3BlcnRpZXMgb2YgYSBTYXZlZE1vZGVsLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElTYXZlZE1vZGVsIHtcbiAgLyoqIFNhdmVkTW9kZWwgc2F2ZWRNb2RlbFNjaGVtYVZlcnNpb24gKi9cbiAgc2F2ZWRNb2RlbFNjaGVtYVZlcnNpb24/OiAobnVtYmVyfHN0cmluZ3xudWxsKTtcblxuICAvKiogU2F2ZWRNb2RlbCBtZXRhR3JhcGhzICovXG4gIG1ldGFHcmFwaHM/OiAoSU1ldGFHcmFwaERlZltdfG51bGwpO1xufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIEZ1bmN0aW9uRGVmTGlicmFyeS4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJRnVuY3Rpb25EZWZMaWJyYXJ5IHtcbiAgLyoqIEZ1bmN0aW9uRGVmTGlicmFyeSBmdW5jdGlvbiAqL1xuICAnZnVuY3Rpb24nPzogKElGdW5jdGlvbkRlZltdfG51bGwpO1xuXG4gIC8qKiBGdW5jdGlvbkRlZkxpYnJhcnkgZ3JhZGllbnQgKi9cbiAgZ3JhZGllbnQ/OiAoSUdyYWRpZW50RGVmW118bnVsbCk7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIG9mIGEgRnVuY3Rpb25EZWYuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSUZ1bmN0aW9uRGVmIHtcbiAgLyoqIEZ1bmN0aW9uRGVmIHNpZ25hdHVyZSAqL1xuICBzaWduYXR1cmU/OiAoSU9wRGVmfG51bGwpO1xuXG4gIC8qKiBGdW5jdGlvbkRlZiBhdHRyICovXG4gIGF0dHI/OiAoe1trOiBzdHJpbmddOiBJQXR0clZhbHVlfXxudWxsKTtcblxuICAvKiogRnVuY3Rpb25EZWYgbm9kZURlZiAqL1xuICBub2RlRGVmPzogKElOb2RlRGVmW118bnVsbCk7XG5cbiAgLyoqIEZ1bmN0aW9uRGVmIHJldCAqL1xuICByZXQ/OiAoe1trOiBzdHJpbmddOiBzdHJpbmd9fG51bGwpO1xufVxuXG4vKiogUHJvcGVydGllcyBvZiBhIEdyYWRpZW50RGVmLiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIElHcmFkaWVudERlZiB7XG4gIC8qKiBHcmFkaWVudERlZiBmdW5jdGlvbk5hbWUgKi9cbiAgZnVuY3Rpb25OYW1lPzogKHN0cmluZ3xudWxsKTtcblxuICAvKiogR3JhZGllbnREZWYgZ3JhZGllbnRGdW5jICovXG4gIGdyYWRpZW50RnVuYz86IChzdHJpbmd8bnVsbCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nconst CUSTOM_OPS = {};\n/**\n * Register an Op for graph model executor. This allows you to register\n * TensorFlow custom op or override existing op.\n *\n * Here is an example of registering a new MatMul Op.\n * ```js\n * const customMatmul = (node) =>\n * tf.matMul(\n * node.inputs[0], node.inputs[1],\n * node.attrs['transpose_a'], node.attrs['transpose_b']);\n *\n * tf.registerOp('MatMul', customMatmul);\n * ```\n * The inputs and attrs of the node object are based on the TensorFlow op\n * registry.\n *\n * @param name The Tensorflow Op name.\n * @param opFunc An op function which is called with the current graph node\n * during execution and needs to return a tensor or a list of tensors. The node\n * has the following attributes:\n * - attr: A map from attribute name to its value\n * - inputs: A list of input tensors\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function registerOp(name, opFunc) {\n const opMapper = {\n tfOpName: name,\n category: 'custom',\n inputs: [],\n attrs: [],\n customExecutor: opFunc\n };\n CUSTOM_OPS[name] = opMapper;\n}\n/**\n * Retrieve the OpMapper object for the registered op.\n *\n * @param name The Tensorflow Op name.\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function getRegisteredOp(name) {\n return CUSTOM_OPS[name];\n}\n/**\n * Deregister the Op for graph model executor.\n *\n * @param name The Tensorflow Op name.\n *\n * @doc {heading: 'Models', subheading: 'Op Registry'}\n */\nexport function deregisterOp(name) {\n delete CUSTOM_OPS[name];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9jdXN0b21fb3AvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxVQUFVLEdBQThCLEVBQUUsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZLEVBQUUsTUFBa0I7SUFDekQsTUFBTSxRQUFRLEdBQWE7UUFDekIsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsY0FBYyxFQUFFLE1BQU07S0FDdkIsQ0FBQztJQUVGLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcEV4ZWN1dG9yLCBPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBDVVNUT01fT1BTOiB7W2tleTogc3RyaW5nXTogT3BNYXBwZXJ9ID0ge307XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gT3AgZm9yIGdyYXBoIG1vZGVsIGV4ZWN1dG9yLiBUaGlzIGFsbG93cyB5b3UgdG8gcmVnaXN0ZXJcbiAqIFRlbnNvckZsb3cgY3VzdG9tIG9wIG9yIG92ZXJyaWRlIGV4aXN0aW5nIG9wLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiByZWdpc3RlcmluZyBhIG5ldyBNYXRNdWwgT3AuXG4gKiBgYGBqc1xuICogY29uc3QgY3VzdG9tTWF0bXVsID0gKG5vZGUpID0+XG4gKiAgICB0Zi5tYXRNdWwoXG4gKiAgICAgICAgbm9kZS5pbnB1dHNbMF0sIG5vZGUuaW5wdXRzWzFdLFxuICogICAgICAgIG5vZGUuYXR0cnNbJ3RyYW5zcG9zZV9hJ10sIG5vZGUuYXR0cnNbJ3RyYW5zcG9zZV9iJ10pO1xuICpcbiAqIHRmLnJlZ2lzdGVyT3AoJ01hdE11bCcsIGN1c3RvbU1hdG11bCk7XG4gKiBgYGBcbiAqIFRoZSBpbnB1dHMgYW5kIGF0dHJzIG9mIHRoZSBub2RlIG9iamVjdCBhcmUgYmFzZWQgb24gdGhlIFRlbnNvckZsb3cgb3BcbiAqIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBUZW5zb3JmbG93IE9wIG5hbWUuXG4gKiBAcGFyYW0gb3BGdW5jIEFuIG9wIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IGdyYXBoIG5vZGVcbiAqIGR1cmluZyBleGVjdXRpb24gYW5kIG5lZWRzIHRvIHJldHVybiBhIHRlbnNvciBvciBhIGxpc3Qgb2YgdGVuc29ycy4gVGhlIG5vZGVcbiAqIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiAgICAtIGF0dHI6IEEgbWFwIGZyb20gYXR0cmlidXRlIG5hbWUgdG8gaXRzIHZhbHVlXG4gKiAgICAtIGlucHV0czogQSBsaXN0IG9mIGlucHV0IHRlbnNvcnNcbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ09wIFJlZ2lzdHJ5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyT3AobmFtZTogc3RyaW5nLCBvcEZ1bmM6IE9wRXhlY3V0b3IpIHtcbiAgY29uc3Qgb3BNYXBwZXI6IE9wTWFwcGVyID0ge1xuICAgIHRmT3BOYW1lOiBuYW1lLFxuICAgIGNhdGVnb3J5OiAnY3VzdG9tJyxcbiAgICBpbnB1dHM6IFtdLFxuICAgIGF0dHJzOiBbXSxcbiAgICBjdXN0b21FeGVjdXRvcjogb3BGdW5jXG4gIH07XG5cbiAgQ1VTVE9NX09QU1tuYW1lXSA9IG9wTWFwcGVyO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBPcE1hcHBlciBvYmplY3QgZm9yIHRoZSByZWdpc3RlcmVkIG9wLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBUZW5zb3JmbG93IE9wIG5hbWUuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdPcCBSZWdpc3RyeSd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdpc3RlcmVkT3AobmFtZTogc3RyaW5nKTogT3BNYXBwZXIge1xuICByZXR1cm4gQ1VTVE9NX09QU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBEZXJlZ2lzdGVyIHRoZSBPcCBmb3IgZ3JhcGggbW9kZWwgZXhlY3V0b3IuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIFRlbnNvcmZsb3cgT3AgbmFtZS5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ09wIFJlZ2lzdHJ5J31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcmVnaXN0ZXJPcChuYW1lOiBzdHJpbmcpIHtcbiAgZGVsZXRlIENVU1RPTV9PUFNbbmFtZV07XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { clone, util } from '@tensorflow/tfjs-core';\nexport function getParamValue(paramName, node, tensorMap, context, resourceManager) {\n const inputParam = node.inputParams[paramName];\n if (inputParam && inputParam.inputIndexStart !== undefined) {\n const start = inputParam.inputIndexStart;\n const end = inputParam.inputIndexEnd === 0 ?\n undefined :\n (inputParam.inputIndexEnd === undefined ? start + 1 :\n inputParam.inputIndexEnd);\n const shiftedStart = start < 0 ? node.inputNames.length + start : start;\n if (inputParam.type === 'tensor') {\n return getTensor(node.inputNames[shiftedStart], tensorMap, context, resourceManager);\n }\n if (inputParam.type === 'tensors') {\n // TODO(mattSoulanille): This filters out NoOp nodes during execution, but\n // these should really never be in the execution graph in the first place.\n // They're necessary for ordering the graph, but should not be visible\n // during execution. Perhaps have different sets of children, one for\n // control dependencies and another for real dependencies.\n const inputs = node.inputs.slice(start, end);\n const inputNames = node.inputNames.slice(start, end)\n .filter((_name, index) => { var _a; return ((_a = inputs[index]) === null || _a === void 0 ? void 0 : _a.op) !== 'NoOp'; });\n return inputNames.map(name => getTensor(name, tensorMap, context, resourceManager));\n }\n const tensor = getTensor(node.inputNames[shiftedStart], tensorMap, context, resourceManager);\n const data = tensor.dataSync();\n return inputParam.type === 'number' ?\n data[0] :\n util.toNestedArray(tensor.shape, data);\n }\n const attrParam = node.attrParams[paramName];\n return attrParam && attrParam.value;\n}\n/**\n * Retrieve the tensor from tensorsMap based on input name.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n * @param context contains tensors and information for running the current node.\n * @param resourceManager Optional. Contains global resources of the model.\n */\nexport function getTensor(name, tensorsMap, context, resourceManager) {\n const [nodeName, index] = parseNodeName(name, context);\n if (resourceManager != null) {\n const tensor = resourceManager.getHashTableHandleByName(nodeName);\n if (tensor != null) {\n return tensor;\n }\n }\n const contextId = context.currentContextIds.find(contextId => {\n return !!tensorsMap[getNodeNameWithContextId(nodeName, contextId)];\n });\n return contextId !== undefined ?\n tensorsMap[getNodeNameWithContextId(nodeName, contextId)][index] :\n undefined;\n}\n/**\n * Retrieve the tensors based on input name for current context.\n * @param name Node input name\n * @param tensorsMap Tensors map keyed by the node\n */\nexport function getTensorsForCurrentContext(name, tensorsMap, context) {\n return tensorsMap[getNodeNameWithContextId(name, context.currentContextId)];\n}\n/**\n * Returns the node name, outputName and index from the Node input name.\n * @param inputName The input name of the node, in format of\n * node_name:output_index, i.e. MatMul:0, if the output_index is not set, it is\n * default to 0.\n * If the input name contains output name i.e. StringSplit:indices:0, it will\n * return ['StringSplit', 0, 'indices'].\n */\nexport function getNodeNameAndIndex(inputName, context) {\n const [nodeName, index, outputName] = parseNodeName(inputName, context);\n return [\n getNodeNameWithContextId(nodeName, context && context.currentContextId),\n index, outputName\n ];\n}\nfunction getNodeNameWithContextId(name, contextId) {\n return !!contextId ? `${name}-${contextId}` : name;\n}\nexport function parseNodeName(name, context) {\n if (name === '') {\n return ['', 0, undefined];\n }\n const isCacheEnabled = context != null && context.parseNodeNameCache != null;\n if (isCacheEnabled) {\n const cachedResult = context.parseNodeNameCache.get(name);\n if (cachedResult != null) {\n return cachedResult;\n }\n }\n const parts = name.split(':');\n let result;\n if (parts.length === 1) {\n result = [name, 0, undefined];\n }\n else {\n const nodeName = parts[0];\n const outputName = parts.length === 3 ? parts[1] : undefined;\n const index = Number(parts[parts.length - 1]);\n result = [nodeName, index, outputName];\n }\n if (isCacheEnabled) {\n context.parseNodeNameCache.set(name, result);\n }\n return result;\n}\nexport function split(arr, size) {\n const res = [];\n for (let i = 0; i < arr.length; i += size) {\n res.push(arr.slice(i, i + size));\n }\n return res;\n}\nexport function getPadding(node, tensorMap, context) {\n let pad = getParamValue('pad', node, tensorMap, context);\n if (pad === 'explicit') {\n // This is 1d array, we need to convert it to 2d array\n pad = getParamValue('explicitPaddings', node, tensorMap, context);\n const explicitPadding = [[0, 0], [0, 0], [0, 0], [0, 0]];\n for (let i = 0; i < 4; i++) {\n explicitPadding[i][0] = pad[i * 2];\n explicitPadding[i][1] = pad[i * 2 + 1];\n }\n return explicitPadding;\n }\n return pad;\n}\n/**\n * Reuse the tensor if it is marked as keep, otherwise clone the tensor to\n * avoid disposal. This is important for TensorArray and TensorList ops, since\n * internally they use a tensor as the id for TensorArray and TensorList, and\n * to simplify lookup, they also use Tensor.id as the key to the internal map.\n * These id tensors have been marked as kept in the backend, we need avoid clone\n * them in order to create new Tensor.id.\n * @param tensor\n */\nexport function cloneTensor(tensor) {\n return tensor.kept ? tensor : clone(tensor);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEtBQUssRUFBVSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQU8xRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixTQUFpQixFQUFFLElBQVUsRUFBRSxTQUEwQixFQUN6RCxPQUF5QixFQUFFLGVBQWlDO0lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7UUFDMUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNYLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2hDLE9BQU8sU0FBUyxDQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN6RTtRQUNELElBQUksVUFB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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksR0FBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLEdBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQWM7SUFDeEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Nsb25lLCBUZW5zb3IsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL3Jlc291cmNlX21hbmFnZXInO1xuaW1wb3J0IHtOb2RlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtVmFsdWUoXG4gICAgcGFyYW1OYW1lOiBzdHJpbmcsIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIHJlc291cmNlTWFuYWdlcj86IFJlc291cmNlTWFuYWdlcik6IFZhbHVlVHlwZSB7XG4gIGNvbnN0IGlucHV0UGFyYW0gPSBub2RlLmlucHV0UGFyYW1zW3BhcmFtTmFtZV07XG4gIGlmIChpbnB1dFBhcmFtICYmIGlucHV0UGFyYW0uaW5wdXRJbmRleFN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzdGFydCA9IGlucHV0UGFyYW0uaW5wdXRJbmRleFN0YXJ0O1xuICAgIGNvbnN0IGVuZCA9IGlucHV0UGFyYW0uaW5wdXRJbmRleEVuZCA9PT0gMCA/XG4gICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgIChpbnB1dFBhcmFtLmlucHV0SW5kZXhFbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0ICsgMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW0uaW5wdXRJbmRleEVuZCk7XG4gICAgY29uc3Qgc2hpZnRlZFN0YXJ0ID0gc3RhcnQgPCAwID8gbm9kZS5pbnB1dE5hbWVzLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG4gICAgaWYgKGlucHV0UGFyYW0udHlwZSA9PT0gJ3RlbnNvcicpIHtcbiAgICAgIHJldHVybiBnZXRUZW5zb3IoXG4gICAgICAgICAgbm9kZS5pbnB1dE5hbWVzW3NoaWZ0ZWRTdGFydF0sIHRlbnNvck1hcCwgY29udGV4dCwgcmVzb3VyY2VNYW5hZ2VyKTtcbiAgICB9XG4gICAgaWYgKGlucHV0UGFyYW0udHlwZSA9PT0gJ3RlbnNvcnMnKSB7XG4gICAgICAvLyBUT0RPKG1hdHRTb3VsYW5pbGxlKTogVGhpcyBmaWx0ZXJzIG91dCBOb09wIG5vZGVzIGR1cmluZyBleGVjdXRpb24sIGJ1dFxuICAgICAgLy8gdGhlc2Ugc2hvdWxkIHJlYWxseSBuZXZlciBiZSBpbiB0aGUgZXhlY3V0aW9uIGdyYXBoIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICAgIC8vIFRoZXkncmUgbmVjZXNzYXJ5IGZvciBvcmRlcmluZyB0aGUgZ3JhcGgsIGJ1dCBzaG91bGQgbm90IGJlIHZpc2libGVcbiAgICAgIC8vIGR1cmluZyBleGVjdXRpb24uIFBlcmhhcHMgaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZiBjaGlsZHJlbiwgb25lIGZvclxuICAgICAgLy8gY29udHJvbCBkZXBlbmRlbmNpZXMgYW5kIGFub3RoZXIgZm9yIHJlYWwgZGVwZW5kZW5jaWVzLlxuICAgICAgY29uc3QgaW5wdXRzID0gbm9kZS5pbnB1dHMuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBpbnB1dE5hbWVzID0gbm9kZS5pbnB1dE5hbWVzLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgICAgIC5maWx0ZXIoKF9uYW1lLCBpbmRleCkgPT4gaW5wdXRzW2luZGV4XT8ub3AgIT09ICdOb09wJyk7XG5cbiAgICAgIHJldHVybiBpbnB1dE5hbWVzLm1hcChcbiAgICAgICAgICBuYW1lID0+IGdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHJlc291cmNlTWFuYWdlcikpO1xuICAgIH1cbiAgICBjb25zdCB0ZW5zb3IgPSBnZXRUZW5zb3IoXG4gICAgICAgIG5vZGUuaW5wdXROYW1lc1tzaGlmdGVkU3RhcnRdLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHJlc291cmNlTWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IHRlbnNvci5kYXRhU3luYygpO1xuICAgIHJldHVybiBpbnB1dFBhcmFtLnR5cGUgPT09ICdudW1iZXInID9cbiAgICAgICAgZGF0YVswXSA6XG4gICAgICAgIHV0aWwudG9OZXN0ZWRBcnJheSh0ZW5zb3Iuc2hhcGUsIGRhdGEpO1xuICB9XG4gIGNvbnN0IGF0dHJQYXJhbSA9IG5vZGUuYXR0clBhcmFtc1twYXJhbU5hbWVdO1xuICByZXR1cm4gYXR0clBhcmFtICYmIGF0dHJQYXJhbS52YWx1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGVuc29yIGZyb20gdGVuc29yc01hcCBiYXNlZCBvbiBpbnB1dCBuYW1lLlxuICogQHBhcmFtIG5hbWUgTm9kZSBpbnB1dCBuYW1lXG4gKiBAcGFyYW0gdGVuc29yc01hcCBUZW5zb3JzIG1hcCBrZXllZCBieSB0aGUgbm9kZVxuICogQHBhcmFtIGNvbnRleHQgY29udGFpbnMgdGVuc29ycyBhbmQgaW5mb3JtYXRpb24gZm9yIHJ1bm5pbmcgdGhlIGN1cnJlbnQgbm9kZS5cbiAqIEBwYXJhbSByZXNvdXJjZU1hbmFnZXIgT3B0aW9uYWwuIENvbnRhaW5zIGdsb2JhbCByZXNvdXJjZXMgb2YgdGhlIG1vZGVsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yKFxuICAgIG5hbWU6IHN0cmluZywgdGVuc29yc01hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgIHJlc291cmNlTWFuYWdlcj86IFJlc291cmNlTWFuYWdlcik6IFRlbnNvciB7XG4gIGNvbnN0IFtub2RlTmFtZSwgaW5kZXhdID0gcGFyc2VOb2RlTmFtZShuYW1lLCBjb250ZXh0KTtcblxuICBpZiAocmVzb3VyY2VNYW5hZ2VyICE9IG51bGwpIHtcbiAgICBjb25zdCB0ZW5zb3IgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlSGFuZGxlQnlOYW1lKG5vZGVOYW1lKTtcbiAgICBpZiAodGVuc29yICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0ZW5zb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29udGV4dElkID0gY29udGV4dC5jdXJyZW50Q29udGV4dElkcy5maW5kKGNvbnRleHRJZCA9PiB7XG4gICAgcmV0dXJuICEhdGVuc29yc01hcFtnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHRJZCldO1xuICB9KTtcblxuICByZXR1cm4gY29udGV4dElkICE9PSB1bmRlZmluZWQgP1xuICAgICAgdGVuc29yc01hcFtnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHRJZCldW2luZGV4XSA6XG4gICAgICB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRlbnNvcnMgYmFzZWQgb24gaW5wdXQgbmFtZSBmb3IgY3VycmVudCBjb250ZXh0LlxuICogQHBhcmFtIG5hbWUgTm9kZSBpbnB1dCBuYW1lXG4gKiBAcGFyYW0gdGVuc29yc01hcCBUZW5zb3JzIG1hcCBrZXllZCBieSB0aGUgbm9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVuc29yc0ZvckN1cnJlbnRDb250ZXh0KFxuICAgIG5hbWU6IHN0cmluZywgdGVuc29yc01hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpOiBUZW5zb3JbXSB7XG4gIHJldHVybiB0ZW5zb3JzTWFwW2dldE5vZGVOYW1lV2l0aENvbnRleHRJZChuYW1lLCBjb250ZXh0LmN1cnJlbnRDb250ZXh0SWQpXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBub2RlIG5hbWUsIG91dHB1dE5hbWUgYW5kIGluZGV4IGZyb20gdGhlIE5vZGUgaW5wdXQgbmFtZS5cbiAqIEBwYXJhbSBpbnB1dE5hbWUgVGhlIGlucHV0IG5hbWUgb2YgdGhlIG5vZGUsIGluIGZvcm1hdCBvZlxuICogbm9kZV9uYW1lOm91dHB1dF9pbmRleCwgaS5lLiBNYXRNdWw6MCwgaWYgdGhlIG91dHB1dF9pbmRleCBpcyBub3Qgc2V0LCBpdCBpc1xuICogZGVmYXVsdCB0byAwLlxuICogSWYgdGhlIGlucHV0IG5hbWUgY29udGFpbnMgb3V0cHV0IG5hbWUgaS5lLiBTdHJpbmdTcGxpdDppbmRpY2VzOjAsIGl0IHdpbGxcbiAqIHJldHVybiBbJ1N0cmluZ1NwbGl0JywgMCwgJ2luZGljZXMnXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVOYW1lQW5kSW5kZXgoXG4gICAgaW5wdXROYW1lOiBzdHJpbmcsIGNvbnRleHQ/OiBFeGVjdXRpb25Db250ZXh0KTogW3N0cmluZywgbnVtYmVyLCBzdHJpbmddIHtcbiAgY29uc3QgW25vZGVOYW1lLCBpbmRleCwgb3V0cHV0TmFtZV0gPSBwYXJzZU5vZGVOYW1lKGlucHV0TmFtZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIFtcbiAgICBnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobm9kZU5hbWUsIGNvbnRleHQgJiYgY29udGV4dC5jdXJyZW50Q29udGV4dElkKSxcbiAgICBpbmRleCwgb3V0cHV0TmFtZVxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlTmFtZVdpdGhDb250ZXh0SWQobmFtZTogc3RyaW5nLCBjb250ZXh0SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gISFjb250ZXh0SWQgPyBgJHtuYW1lfS0ke2NvbnRleHRJZH1gIDogbmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTm9kZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLCBjb250ZXh0PzogRXhlY3V0aW9uQ29udGV4dCk6IFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP10ge1xuICBpZiAobmFtZSA9PT0gJycpIHtcbiAgICByZXR1cm4gWycnLCAwLCB1bmRlZmluZWRdO1xuICB9XG5cbiAgY29uc3QgaXNDYWNoZUVuYWJsZWQgPSBjb250ZXh0ICE9IG51bGwgJiYgY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUgIT0gbnVsbDtcbiAgaWYgKGlzQ2FjaGVFbmFibGVkKSB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUuZ2V0KG5hbWUpO1xuICAgIGlmIChjYWNoZWRSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KCc6Jyk7XG4gIGxldCByZXN1bHQ6IFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP107XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXN1bHQgPSBbbmFtZSwgMCwgdW5kZWZpbmVkXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBub2RlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IG91dHB1dE5hbWUgPSBwYXJ0cy5sZW5ndGggPT09IDMgPyBwYXJ0c1sxXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gICAgcmVzdWx0ID0gW25vZGVOYW1lLCBpbmRleCwgb3V0cHV0TmFtZV07XG4gIH1cbiAgaWYgKGlzQ2FjaGVFbmFibGVkKSB7XG4gICAgY29udGV4dC5wYXJzZU5vZGVOYW1lQ2FjaGUuc2V0KG5hbWUsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0KGFycjogbnVtYmVyW10sIHNpemU6IG51bWJlcikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IHNpemUpIHtcbiAgICByZXMucHVzaChhcnIuc2xpY2UoaSwgaSArIHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZGRpbmcoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCk6IFZhbHVlVHlwZSB7XG4gIGxldCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICBpZiAocGFkID09PSAnZXhwbGljaXQnKSB7XG4gICAgLy8gVGhpcyBpcyAxZCBhcnJheSwgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIDJkIGFycmF5XG4gICAgcGFkID0gZ2V0UGFyYW1WYWx1ZSgnZXhwbGljaXRQYWRkaW5ncycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgY29uc3QgZXhwbGljaXRQYWRkaW5nOiBbXG4gICAgICBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXG4gICAgXSA9IFtbMCwgMF0sIFswLCAwXSwgWzAsIDBdLCBbMCwgMF1dO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICBleHBsaWNpdFBhZGRpbmdbaV1bMF0gPSAocGFkIGFzIG51bWJlcltdKVtpICogMl07XG4gICAgICBleHBsaWNpdFBhZGRpbmdbaV1bMV0gPSAocGFkIGFzIG51bWJlcltdKVtpICogMiArIDFdO1xuICAgIH1cbiAgICByZXR1cm4gZXhwbGljaXRQYWRkaW5nO1xuICB9XG4gIHJldHVybiBwYWQ7XG59XG5cbi8qKlxuICogIFJldXNlIHRoZSB0ZW5zb3IgaWYgaXQgaXMgbWFya2VkIGFzIGtlZXAsIG90aGVyd2lzZSBjbG9uZSB0aGUgdGVuc29yIHRvXG4gKiAgYXZvaWQgZGlzcG9zYWwuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBUZW5zb3JBcnJheSBhbmQgVGVuc29yTGlzdCBvcHMsIHNpbmNlXG4gKiAgaW50ZXJuYWxseSB0aGV5IHVzZSBhIHRlbnNvciBhcyB0aGUgaWQgZm9yIFRlbnNvckFycmF5IGFuZCBUZW5zb3JMaXN0LCBhbmRcbiAqIHRvIHNpbXBsaWZ5IGxvb2t1cCwgdGhleSBhbHNvIHVzZSBUZW5zb3IuaWQgYXMgdGhlIGtleSB0byB0aGUgaW50ZXJuYWwgbWFwLlxuICogVGhlc2UgaWQgdGVuc29ycyBoYXZlIGJlZW4gbWFya2VkIGFzIGtlcHQgaW4gdGhlIGJhY2tlbmQsIHdlIG5lZWQgYXZvaWQgY2xvbmVcbiAqIHRoZW0gaW4gb3JkZXIgdG8gY3JlYXRlIG5ldyBUZW5zb3IuaWQuXG4gKiBAcGFyYW0gdGVuc29yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVRlbnNvcih0ZW5zb3I6IFRlbnNvcik6IFRlbnNvciB7XG4gIHJldHVybiB0ZW5zb3Iua2VwdCA/IHRlbnNvciA6IGNsb25lKHRlbnNvcik7XG59XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Add',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AddV2',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AddN',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'BiasAdd',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sub',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RealDiv',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Div',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'DivNoNan',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FloorDiv',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Mul',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Maximum',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Minimum',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Pow',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SquaredDifference',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Mod',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FloorMod',\n 'category': 'arithmetic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpdGhtZXRpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvYXJpdGhtZXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFB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RUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBZGQnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FkZFYyJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBZGROJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcnMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCaWFzQWRkJyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdWInLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JlYWxEaXYnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RpdicsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGl2Tm9OYW4nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Zsb29yRGl2JyxcbiAgICAnY2F0ZWdvcnknOiAnYXJpdGhtZXRpYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01heGltdW0nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01pbmltdW0nLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1BvdycsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1YXJlZERpZmZlcmVuY2UnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01vZCcsXG4gICAgJ2NhdGVnb3J5JzogJ2FyaXRobWV0aWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmxvb3JNb2QnLFxuICAgICdjYXRlZ29yeSc6ICdhcml0aG1ldGljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Abs',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Acos',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Asin',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atan2',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Ceil',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ClipByValue',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'clipValueMin',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'clipValueMax',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Complex',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'real',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'imag',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ComplexAbs',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cos',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cosh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Elu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Exp',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Floor',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Log',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Imag',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'outputType',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Neg',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Real',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'outputType',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Prelu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'alpha',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Relu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Relu6',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Selu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sigmoid',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sin',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sinh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sqrt',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Rsqrt',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Square',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tanh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Sign',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Round',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Expm1',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Log1p',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Reciprocal',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Softplus',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Asinh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Acosh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Atanh',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Erf',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LeakyRelu',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'alpha',\n 'name': 'alpha',\n 'type': 'number',\n 'defaultValue': 0.2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsNan',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsFinite',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IsInf',\n 'category': 'basic_math',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvYmFzaWNfbWF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsS0FBSztRQUNqQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7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LEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FicycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBY29zJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FzaW4nLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQXRhbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdGFuMicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd5JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ2VpbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDbGlwQnlWYWx1ZScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdjbGlwVmFsdWVNaW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdjbGlwVmFsdWVNYXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb21wbGV4JyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAncmVhbCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ltYWcnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb21wbGV4QWJzJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvcycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb3NoJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFeHAnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmxvb3InLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0ltYWcnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVG91dCcsXG4gICAgICAgICduYW1lJzogJ291dHB1dFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05lZycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RvdXQnLFxuICAgICAgICAnbmFtZSc6ICdvdXRwdXRUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdQcmVsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdhbHBoYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JlbHUnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVsdTYnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU2VsdScsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaWdtb2lkJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NpbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaW5oJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NxcnQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUnNxcnQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1YXJlJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RhbicsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUYW5oJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NpZ24nLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUm91bmQnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXhwbTEnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nMXAnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVjaXByb2NhbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTb2Z0cGx1cycsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBc2luaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBY29zaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdGFuaCcsXG4gICAgJ2NhdGVnb3J5JzogJ2Jhc2ljX21hdGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFcmYnLFxuICAgICdjYXRlZ29yeSc6ICdiYXNpY19tYXRoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTGVha3lSZWx1JyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhbHBoYScsXG4gICAgICAgICduYW1lJzogJ2FscGhhJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzTmFuJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzRmluaXRlJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lzSW5mJyxcbiAgICAnY2F0ZWdvcnknOiAnYmFzaWNfbWF0aCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'EmptyTensorList',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 1,\n 'name': 'maxNumElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LoopCond',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'pred',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Switch',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'pred',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Merge',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Enter',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'frame_name',\n 'name': 'frameName',\n 'type': 'string'\n },\n {\n 'tfName': 'is_constant',\n 'name': 'isConstant',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Exit',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'NextIteration',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'size',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dynamic_size',\n 'name': 'dynamicSize',\n 'type': 'bool'\n },\n {\n 'tfName': 'clear_after_read',\n 'name': 'clearAfterRead',\n 'type': 'bool'\n },\n {\n 'tfName': 'identical_element_shapes',\n 'name': 'identicalElementShapes',\n 'type': 'bool'\n },\n {\n 'tfName': 'tensor_array_name',\n 'name': 'name',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayWriteV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayReadV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayGatherV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayScatterV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayConcatV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'element_shape_except0',\n 'name': 'elementShapeExcept0',\n 'type': 'shape',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorArraySplitV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'lengths',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArraySizeV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'flowIn',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'TensorArrayCloseV3',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorArrayId',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'StatelessIf',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'cond',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'then_branch',\n 'name': 'thenBranch',\n 'type': 'func'\n },\n {\n 'tfName': 'else_branch',\n 'name': 'elseBranch',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'If',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'cond',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'then_branch',\n 'name': 'thenBranch',\n 'type': 'func'\n },\n {\n 'tfName': 'else_branch',\n 'name': 'elseBranch',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'StatelessWhile',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'cond',\n 'name': 'cond',\n 'type': 'func'\n },\n {\n 'tfName': 'body',\n 'name': 'body',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'While',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'cond',\n 'name': 'cond',\n 'type': 'func'\n },\n {\n 'tfName': 'body',\n 'name': 'body',\n 'type': 'func'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListScatter',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListScatterV2',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 3,\n 'name': 'numElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListGather',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListGetItem',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListSetItem',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'index',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListReserve',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 1,\n 'name': 'numElements',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListFromTensor',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListStack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'num_elements',\n 'name': 'numElements',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListSplit',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'start': 2,\n 'name': 'lengths',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListConcat',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListConcatV2',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_shape',\n 'name': 'elementShape',\n 'type': 'shape'\n },\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListPopBack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'elementShape',\n 'type': 'shape'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListPushBack',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'element_dtype',\n 'name': 'elementDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListLength',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'TensorListResize',\n 'category': 'control',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensorListId',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsaUJBQWlCO1FBQzdCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLE9BQU87UUFDbkIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLE9BQU87UUFDbkIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGVBQWU7UUFDM0IsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLE1BQU0sRUFBRSx3QkFBd0I7Z0JBQ2hDLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxvQkFBb0I7UUFDaEMsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsc0JBQXNCO1FBQ2xDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUscUJBQXFCO1FBQ2pDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsbUJBQW1CO1FBQy9CLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxvQkFBb0I7UUFDaEMsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGFBQWE7UUFDekIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLElBQUk7UUFDaEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUscUJBQXFCO1FBQ2pDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUIsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsbUJBQW1CO1FBQy9CLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxzQkFBc0I7UUFDbEMsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsY0FBYztnQkFDeEIsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsbUJBQW1CO1FBQy9CLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxvQkFBb0I7UUFDaEMsVUFBVSxFQUFFLFNBQVM7UUFDckIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGtCQUFrQjtRQUM5QixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsa0JBQWtCO1FBQzlCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFbXB0eVRlbnNvckxpc3QnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ21heE51bUVsZW1lbnRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9vcENvbmQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdwcmVkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTd2l0Y2gnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAncHJlZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWVyZ2UnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VudGVyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZnJhbWVfbmFtZScsXG4gICAgICAgICduYW1lJzogJ2ZyYW1lTmFtZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnaXNfY29uc3RhbnQnLFxuICAgICAgICAnbmFtZSc6ICdpc0NvbnN0YW50JyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXhpdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05leHRJdGVyYXRpb24nLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHluYW1pY19zaXplJyxcbiAgICAgICAgJ25hbWUnOiAnZHluYW1pY1NpemUnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdjbGVhcl9hZnRlcl9yZWFkJyxcbiAgICAgICAgJ25hbWUnOiAnY2xlYXJBZnRlclJlYWQnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdpZGVudGljYWxfZWxlbWVudF9zaGFwZXMnLFxuICAgICAgICAnbmFtZSc6ICdpZGVudGljYWxFbGVtZW50U2hhcGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndGVuc29yX2FycmF5X25hbWUnLFxuICAgICAgICAnbmFtZSc6ICduYW1lJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVdyaXRlVjMnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JBcnJheUlkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmbG93SW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheVJlYWRWMycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckFycmF5SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRleCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheUdhdGhlclYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yQXJyYXlTY2F0dGVyVjMnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JBcnJheUlkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnZmxvd0luJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JBcnJheUNvbmNhdFYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfc2hhcGVfZXhjZXB0MCcsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZUV4Y2VwdDAnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckFycmF5U3BsaXRWMycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckFycmF5SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdsZW5ndGhzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmbG93SW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckFycmF5U2l6ZVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2Zsb3dJbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yQXJyYXlDbG9zZVYzJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yQXJyYXlJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RhdGVsZXNzSWYnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdjb25kJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ2FyZ3MnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3RoZW5fYnJhbmNoJyxcbiAgICAgICAgJ25hbWUnOiAndGhlbkJyYW5jaCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Vsc2VfYnJhbmNoJyxcbiAgICAgICAgJ25hbWUnOiAnZWxzZUJyYW5jaCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0lmJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnY29uZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd0aGVuX2JyYW5jaCcsXG4gICAgICAgICduYW1lJzogJ3RoZW5CcmFuY2gnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbHNlX2JyYW5jaCcsXG4gICAgICAgICduYW1lJzogJ2Vsc2VCcmFuY2gnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdGF0ZWxlc3NXaGlsZScsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdjb25kJyxcbiAgICAgICAgJ25hbWUnOiAnY29uZCcsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JvZHknLFxuICAgICAgICAnbmFtZSc6ICdib2R5JyxcbiAgICAgICAgJ3R5cGUnOiAnZnVuYydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnV2hpbGUnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAnYXJncycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnY29uZCcsXG4gICAgICAgICduYW1lJzogJ2NvbmQnLFxuICAgICAgICAndHlwZSc6ICdmdW5jJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdib2R5JyxcbiAgICAgICAgJ25hbWUnOiAnYm9keScsXG4gICAgICAgICd0eXBlJzogJ2Z1bmMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RTY2F0dGVyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0U2NhdHRlclYyJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdudW1FbGVtZW50cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RHYXRoZXInLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RHZXRJdGVtJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RTZXRJdGVtJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kZXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0UmVzZXJ2ZScsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtRWxlbWVudHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0RnJvbVRlbnNvcicsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yTGlzdFN0YWNrJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udHJvbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29yTGlzdElkJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnREVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdudW1fZWxlbWVudHMnLFxuICAgICAgICAnbmFtZSc6ICdudW1FbGVtZW50cycsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUZW5zb3JMaXN0U3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2xlbmd0aHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RDb25jYXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZWxlbWVudF9zaGFwZScsXG4gICAgICAgICduYW1lJzogJ2VsZW1lbnRTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RDb25jYXRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckxpc3RJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X3NoYXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnc2hhcGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2VsZW1lbnRfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50RFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVGVuc29yTGlzdFBvcEJhY2snLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdlbGVtZW50U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RQdXNoQmFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnRyb2wnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvckxpc3RJZCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGVtZW50X2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZWxlbWVudERUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RMZW5ndGgnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvckxpc3RSZXNpemUnLFxuICAgICdjYXRlZ29yeSc6ICdjb250cm9sJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JMaXN0SWQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'AvgPool',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPool',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': [],\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPoolWithArgmax',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'include_batch_in_index',\n 'name': 'includeBatchInIndex',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'AvgPool3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MaxPool3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'ksize',\n 'name': 'kernelSize',\n 'type': 'number[]'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Conv1D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'stride',\n 'name': 'stride',\n 'type': 'number'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NWC'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'dilation',\n 'name': 'dilation',\n 'type': 'number',\n 'defaultValue': 1\n }\n ]\n },\n {\n 'tfOpName': 'Conv2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'useCudnnOnGpu',\n 'name': 'useCudnnOnGpu',\n 'type': 'bool'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': '_FusedConv2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'use_cudnn_on_gpu',\n 'name': 'useCudnnOnGpu',\n 'type': 'bool',\n 'defaultValue': true\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'defaultValue': [\n 1,\n 1,\n 1,\n 1\n ]\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.0001\n },\n {\n 'tfName': 'leakyrelu_alpha',\n 'name': 'leakyreluAlpha',\n 'type': 'number',\n 'defaultValue': 0.2\n }\n ]\n },\n {\n 'tfOpName': 'Conv2DBackpropInput',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 2,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 0,\n 'name': 'outputShape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'DepthwiseConv2d',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'DepthwiseConv2dNative',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'FusedDepthwiseConv2dNative',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]',\n 'defaultValue': [\n 1,\n 1,\n 1,\n 1\n ]\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'explicit_paddings',\n 'name': 'explicitPaddings',\n 'type': 'number[]',\n 'defaultValue': []\n }\n ]\n },\n {\n 'tfOpName': 'Conv3D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'defaultValue': 'NHWC'\n },\n {\n 'tfName': 'dilations',\n 'name': 'dilations',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Dilation2D',\n 'category': 'convolution',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'filter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'strides',\n 'name': 'strides',\n 'type': 'number[]'\n },\n {\n 'tfName': 'rates',\n 'name': 'dilations',\n 'type': 'number[]'\n },\n {\n 'tfName': 'padding',\n 'name': 'pad',\n 'type': 'string'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2NvbnZvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixN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QUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFlBQVk7UUFDeEIsVUFBVSxFQUFFLGFBQWE7UUFDekIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdBdmdQb29sJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4UG9vbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tzaXplJyxcbiAgICAgICAgJ25hbWUnOiAna2VybmVsU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXSxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNYXhQb29sV2l0aEFyZ21heCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tzaXplJyxcbiAgICAgICAgJ25hbWUnOiAna2VybmVsU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdpbmNsdWRlX2JhdGNoX2luX2luZGV4JyxcbiAgICAgICAgJ25hbWUnOiAnaW5jbHVkZUJhdGNoSW5JbmRleCcsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQXZnUG9vbDNEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4UG9vbDNEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna3NpemUnLFxuICAgICAgICAnbmFtZSc6ICdrZXJuZWxTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ29udjFEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogJ05XQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkaWxhdGlvbicsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9uJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ29udjJEJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2VDdWRubk9uR3B1JyxcbiAgICAgICAgJ25hbWUnOiAndXNlQ3Vkbm5PbkdwdScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ19GdXNlZENvbnYyRCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ2VuZCc6IDAsXG4gICAgICAgICduYW1lJzogJ2FyZ3MnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3JzJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ251bV9hcmdzJyxcbiAgICAgICAgJ25hbWUnOiAnbnVtQXJncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2VfY3Vkbm5fb25fZ3B1JyxcbiAgICAgICAgJ25hbWUnOiAndXNlQ3Vkbm5PbkdwdScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogJ05IV0MnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZnVzZWRfb3BzJyxcbiAgICAgICAgJ25hbWUnOiAnZnVzZWRPcHMnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmdbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ25hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjAwMDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbGVha3lyZWx1X2FscGhhJyxcbiAgICAgICAgJ25hbWUnOiAnbGVha3lyZWx1QWxwaGEnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4yXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnYyREJhY2twcm9wSW5wdXQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZpbHRlcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdEZXB0aHdpc2VDb252MmQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW5wdXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICduYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncGFkZGluZycsXG4gICAgICAgICduYW1lJzogJ3BhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6ICdOSFdDJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleHBsaWNpdF9wYWRkaW5ncycsXG4gICAgICAgICduYW1lJzogJ2V4cGxpY2l0UGFkZGluZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXScsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBbXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkaWxhdGlvbnMnLFxuICAgICAgICAnbmFtZSc6ICdkaWxhdGlvbnMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGVwdGh3aXNlQ29udjJkTmF0aXZlJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXhwbGljaXRfcGFkZGluZ3MnLFxuICAgICAgICAnbmFtZSc6ICdleHBsaWNpdFBhZGRpbmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkRGVwdGh3aXNlQ29udjJkTmF0aXZlJyxcbiAgICAnY2F0ZWdvcnknOiAnY29udm9sdXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdmaWx0ZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAnYXJncycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX2FyZ3MnLFxuICAgICAgICAnbmFtZSc6ICdudW1BcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW1xuICAgICAgICAgIDEsXG4gICAgICAgICAgMSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIDFcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdmdXNlZF9vcHMnLFxuICAgICAgICAnbmFtZSc6ICdmdXNlZE9wcycsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZ1tdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2V4cGxpY2l0X3BhZGRpbmdzJyxcbiAgICAgICAgJ25hbWUnOiAnZXhwbGljaXRQYWRkaW5ncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IFtdXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnYzRCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NvbnZvbHV0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmlsdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0cmlkZXMnLFxuICAgICAgICAnbmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAnbmFtZSc6ICdwYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAnTkhXQydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ25hbWUnOiAnZGlsYXRpb25zJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RpbGF0aW9uMkQnLFxuICAgICdjYXRlZ29yeSc6ICdjb252b2x1dGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZpbHRlcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzdHJpZGVzJyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyYXRlcycsXG4gICAgICAgICduYW1lJzogJ2RpbGF0aW9ucycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ25hbWUnOiAncGFkJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Fill',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n },\n {\n 'start': 1,\n 'name': 'value',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LinSpace',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'start',\n 'type': 'number'\n },\n {\n 'start': 1,\n 'name': 'stop',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'num',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'OneHot',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'depth',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'onValue',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'start': 3,\n 'name': 'offValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Ones',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'OnesLike',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'RandomStandardNormal',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RandomUniform',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'minval',\n 'name': 'minval',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'maxval',\n 'name': 'maxval',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'RandomUniformInt',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'minval',\n 'name': 'minval',\n 'type': 'number'\n },\n {\n 'tfName': 'maxval',\n 'name': 'maxval',\n 'type': 'number'\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Range',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'start',\n 'type': 'number'\n },\n {\n 'start': 1,\n 'name': 'stop',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'step',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tidx',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'TruncatedNormal',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'means',\n 'name': 'mean',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'stddev',\n 'name': 'stdDev',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number'\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'T',\n 'name': 'T',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Zeros',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'ZerosLike',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Multinomial',\n 'category': 'creation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'logits',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numSamples',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'seed',\n 'name': 'seed',\n 'type': 'number'\n },\n {\n 'tfName': 'seed2',\n 'name': 'seed2',\n 'type': 'number'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n },\n {\n 'tfName': 'output_dtype',\n 'name': 'output_dtype',\n 'type': 'dtype'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2NyZWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztn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Q1A7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2FBQ2hCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixNQUFNLEVBQUUsT0FBTzthQUNoQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRmlsbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAndmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xpblNwYWNlJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3N0YXJ0JyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc3RvcCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ251bScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ09uZUhvdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGVwdGgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdvblZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ29mZlZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdPbmVzJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3NoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ09uZXNMaWtlJyxcbiAgICAnY2F0ZWdvcnknOiAnY3JlYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSYW5kb21TdGFuZGFyZE5vcm1hbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQnLFxuICAgICAgICAnbmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZDInLFxuICAgICAgICAnbmFtZSc6ICdzZWVkMicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdUJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZG9tVW5pZm9ybScsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICduYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21heHZhbCcsXG4gICAgICAgICduYW1lJzogJ21heHZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZCcsXG4gICAgICAgICduYW1lJzogJ3NlZWQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkMicsXG4gICAgICAgICduYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdUJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZG9tVW5pZm9ybUludCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICduYW1lJzogJ21pbnZhbCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbWF4dmFsJyxcbiAgICAgICAgJ25hbWUnOiAnbWF4dmFsJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZDInLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMCxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuZ2UnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc3RhcnQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzdG9wJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnc3RlcCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGlkeCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RydW5jYXRlZE5vcm1hbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21lYW5zJyxcbiAgICAgICAgJ25hbWUnOiAnbWVhbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N0ZGRldicsXG4gICAgICAgICduYW1lJzogJ3N0ZERldicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NlZWQnLFxuICAgICAgICAnbmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkMicsXG4gICAgICAgICduYW1lJzogJ3NlZWQyJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ1QnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdaZXJvcycsXG4gICAgJ2NhdGVnb3J5JzogJ2NyZWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdaZXJvc0xpa2UnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTXVsdGlub21pYWwnLFxuICAgICdjYXRlZ29yeSc6ICdjcmVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnbG9naXRzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtU2FtcGxlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZWVkJyxcbiAgICAgICAgJ25hbWUnOiAnc2VlZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2VlZDInLFxuICAgICAgICAnbmFtZSc6ICdzZWVkMicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ291dHB1dF9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ291dHB1dF9kdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'NonMaxSuppressionV2',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV3',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV4',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'T_threshold',\n 'name': 'threshold',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'pad_to_max_output_size',\n 'name': 'padToMaxOutputSize',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'NonMaxSuppressionV5',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scores',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'maxOutputSize',\n 'type': 'number'\n },\n {\n 'start': 3,\n 'name': 'iouThreshold',\n 'type': 'number'\n },\n {\n 'start': 4,\n 'name': 'scoreThreshold',\n 'type': 'number'\n },\n {\n 'start': 5,\n 'name': 'softNmsSigma',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'Where',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ListDiff',\n 'category': 'dynamic',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvZHluYW1pYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUscUJBQXFCO1FBQ2pDLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dC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Q0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb25NYXhTdXBwcmVzc2lvblYyJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY29yZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdtYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnaW91VGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb25NYXhTdXBwcmVzc2lvblYzJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY29yZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdtYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnaW91VGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNCxcbiAgICAgICAgJ25hbWUnOiAnc2NvcmVUaHJlc2hvbGQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05vbk1heFN1cHByZXNzaW9uVjQnLFxuICAgICdjYXRlZ29yeSc6ICdkeW5hbWljJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdib3hlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3Njb3JlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ21heE91dHB1dFNpemUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdpb3VUaHJlc2hvbGQnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiA0LFxuICAgICAgICAnbmFtZSc6ICdzY29yZVRocmVzaG9sZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RfdGhyZXNob2xkJyxcbiAgICAgICAgJ25hbWUnOiAndGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwYWRfdG9fbWF4X291dHB1dF9zaXplJyxcbiAgICAgICAgJ25hbWUnOiAncGFkVG9NYXhPdXRwdXRTaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTm9uTWF4U3VwcHJlc3Npb25WNScsXG4gICAgJ2NhdGVnb3J5JzogJ2R5bmFtaWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2JveGVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2NvcmVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnbWF4T3V0cHV0U2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ2lvdVRocmVzaG9sZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDQsXG4gICAgICAgICduYW1lJzogJ3Njb3JlVGhyZXNob2xkJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNSxcbiAgICAgICAgJ25hbWUnOiAnc29mdE5tc1NpZ21hJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdXaGVyZScsXG4gICAgJ2NhdGVnb3J5JzogJ2R5bmFtaWMnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2NvbmRpdGlvbicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xpc3REaWZmJyxcbiAgICAnY2F0ZWdvcnknOiAnZHluYW1pYycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3knLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfVxuXTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'LowerBound',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sortedSequence',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'TopKV2',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'k',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'sorted',\n 'name': 'sorted',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'UpperBound',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sortedSequence',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Unique',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'UniqueV2',\n 'category': 'evaluation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFFBQVE7UUFDcEIsVUFBVSxFQUFFLFlBQVk7UUFDeEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtDQUNGLENBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMb3dlckJvdW5kJyxcbiAgICAnY2F0ZWdvcnknOiAnZXZhbHVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc29ydGVkU2VxdWVuY2UnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RvcEtWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2V2YWx1YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NvcnRlZCcsXG4gICAgICAgICduYW1lJzogJ3NvcnRlZCcsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1VwcGVyQm91bmQnLFxuICAgICdjYXRlZ29yeSc6ICdldmFsdWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzb3J0ZWRTZXF1ZW5jZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVW5pcXVlJyxcbiAgICAnY2F0ZWdvcnknOiAnZXZhbHVhdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnVW5pcXVlVjInLFxuICAgICdjYXRlZ29yeSc6ICdldmFsdWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH1cbl1cbjtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'PlaceholderWithDefault',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'default',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'shape',\n 'name': 'shape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Placeholder',\n 'category': 'graph',\n 'attrs': [\n {\n 'tfName': 'shape',\n 'name': 'shape',\n 'type': 'shape'\n },\n {\n 'tfName': 'dtype',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'Const',\n 'category': 'graph'\n },\n {\n 'tfOpName': 'Identity',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'IdentityN',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'x',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Snapshot',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Rank',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Size',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'Shape',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'ShapeN',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'x',\n 'type': 'tensors'\n }\n ]\n },\n {\n 'tfOpName': 'Print',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'data',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'message',\n 'name': 'message',\n 'type': 'string'\n },\n {\n 'tfName': 'first_n',\n 'name': 'firstN',\n 'type': 'number',\n 'notSupported': true\n },\n {\n 'tfName': 'summarize',\n 'name': 'summarize',\n 'type': 'number',\n 'defaultValue': 3\n }\n ]\n },\n {\n 'tfOpName': 'NoOp',\n 'category': 'graph',\n 'inputs': []\n },\n {\n 'tfOpName': 'StopGradient',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'FakeQuantWithMinMaxVars',\n 'category': 'graph',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'min',\n 'name': 'min',\n 'type': 'number'\n },\n {\n 'tfName': 'max',\n 'name': 'max',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2dyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsT0FBTztnQkFDakIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsT0FBTztLQUNwQjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsV0FBVztRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLE1BQU07UUFDbEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsT0FBTztRQUNuQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFFBQVE7UUFDcEIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFNBQVM7YUFDbEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsT0FBTztRQUNuQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRSxFQUFFO0tBQ2I7SUFDRDtRQUNFLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLHlCQUF5QjtRQUNyQyxVQUFVLEVBQUUsT0FBTztRQUNuQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGxhY2Vob2xkZXJXaXRoRGVmYXVsdCcsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NoYXBlJyxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdzaGFwZSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdQbGFjZWhvbGRlcicsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hhcGUnLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ3NoYXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkdHlwZScsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbnN0JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSWRlbnRpdHknLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSWRlbnRpdHlOJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU25hcHNob3QnLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmFuaycsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NoYXBlTicsXG4gICAgJ2NhdGVnb3J5JzogJ2dyYXBoJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1ByaW50JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtZXNzYWdlJyxcbiAgICAgICAgJ25hbWUnOiAnbWVzc2FnZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZmlyc3RfbicsXG4gICAgICAgICduYW1lJzogJ2ZpcnN0TicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3N1bW1hcml6ZScsXG4gICAgICAgICduYW1lJzogJ3N1bW1hcml6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAzXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ05vT3AnLFxuICAgICdjYXRlZ29yeSc6ICdncmFwaCcsXG4gICAgJ2lucHV0cyc6IFtdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RvcEdyYWRpZW50JyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Zha2VRdWFudFdpdGhNaW5NYXhWYXJzJyxcbiAgICAnY2F0ZWdvcnknOiAnZ3JhcGgnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbWluJyxcbiAgICAgICAgJ25hbWUnOiAnbWluJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtYXgnLFxuICAgICAgICAnbmFtZSc6ICdtYXgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'HashTable',\n 'category': 'hash_table',\n 'inputs': [],\n 'attrs': [\n {\n 'tfName': 'shared_name',\n 'name': 'sharedName',\n 'type': 'string'\n },\n {\n 'tfName': 'use_node_name_sharing',\n 'name': 'useNodeNameSharing',\n 'type': 'bool'\n },\n {\n 'tfName': 'key_dtype',\n 'name': 'keyDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'value_dtype',\n 'name': 'valueDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'HashTableV2',\n 'category': 'hash_table',\n 'inputs': [],\n 'attrs': [\n {\n 'tfName': 'shared_name',\n 'name': 'sharedName',\n 'type': 'string'\n },\n {\n 'tfName': 'use_node_name_sharing',\n 'name': 'useNodeNameSharing',\n 'type': 'bool'\n },\n {\n 'tfName': 'key_dtype',\n 'name': 'keyDType',\n 'type': 'dtype'\n },\n {\n 'tfName': 'value_dtype',\n 'name': 'valueDType',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableImport',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableImportV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableFind',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableFindV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'Tin',\n 'name': 'tIn',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'Tout',\n 'name': 'tOut',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableSize',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'LookupTableSizeV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'InitializeTable',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'InitializeTableV2',\n 'category': 'hash_table',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tableHandle',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'keys',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvaGFzaF90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsV0FBVztRQUN2QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUUsRUFBRTtRQUNaLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsYUFBYTtRQUN6QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUUsRUFBRTtRQUNaLE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsTUFBTTthQUNmO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFV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QUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsYUFBYTtnQkFDckIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSGFzaFRhYmxlJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzaGFyZWRfbmFtZScsXG4gICAgICAgICduYW1lJzogJ3NoYXJlZE5hbWUnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3VzZV9ub2RlX25hbWVfc2hhcmluZycsXG4gICAgICAgICduYW1lJzogJ3VzZU5vZGVOYW1lU2hhcmluZycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tleV9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ2tleURUeXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3ZhbHVlX2R0eXBlJyxcbiAgICAgICAgJ25hbWUnOiAndmFsdWVEVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdIYXNoVGFibGVWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hhcmVkX25hbWUnLFxuICAgICAgICAnbmFtZSc6ICdzaGFyZWROYW1lJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd1c2Vfbm9kZV9uYW1lX3NoYXJpbmcnLFxuICAgICAgICAnbmFtZSc6ICd1c2VOb2RlTmFtZVNoYXJpbmcnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZXlfZHR5cGUnLFxuICAgICAgICAnbmFtZSc6ICdrZXlEVHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd2YWx1ZV9kdHlwZScsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlRFR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVJbXBvcnQnLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVJbXBvcnRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RhYmxlSGFuZGxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAna2V5cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUaW4nLFxuICAgICAgICAnbmFtZSc6ICd0SW4nLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1RvdXQnLFxuICAgICAgICAnbmFtZSc6ICd0T3V0JyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMb29rdXBUYWJsZUZpbmQnLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVGaW5kVjInLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVGluJyxcbiAgICAgICAgJ25hbWUnOiAndEluJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUb3V0JyxcbiAgICAgICAgJ25hbWUnOiAndE91dCcsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9va3VwVGFibGVTaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGFibGVIYW5kbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvb2t1cFRhYmxlU2l6ZVYyJyxcbiAgICAnY2F0ZWdvcnknOiAnaGFzaF90YWJsZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAndGFibGVIYW5kbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0luaXRpYWxpemVUYWJsZScsXG4gICAgJ2NhdGVnb3J5JzogJ2hhc2hfdGFibGUnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RhYmxlSGFuZGxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAna2V5cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3ZhbHVlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSW5pdGlhbGl6ZVRhYmxlVjInLFxuICAgICdjYXRlZ29yeSc6ICdoYXNoX3RhYmxlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0YWJsZUhhbmRsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2tleXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'ResizeBilinear',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'align_corners',\n 'name': 'alignCorners',\n 'type': 'bool'\n },\n {\n 'tfName': 'half_pixel_centers',\n 'name': 'halfPixelCenters',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'ResizeNearestNeighbor',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'align_corners',\n 'name': 'alignCorners',\n 'type': 'bool'\n },\n {\n 'tfName': 'half_pixel_centers',\n 'name': 'halfPixelCenters',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'CropAndResize',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'image',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'boxes',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'boxInd',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'cropSize',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'method',\n 'name': 'method',\n 'type': 'string'\n },\n {\n 'tfName': 'extrapolation_value',\n 'name': 'extrapolationValue',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'ImageProjectiveTransformV3',\n 'category': 'image',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'images',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'transforms',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'outputShape',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'fillValue',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'interpolation',\n 'name': 'interpolation',\n 'type': 'string'\n },\n {\n 'tfName': 'fill_mode',\n 'name': 'fillMode',\n 'type': 'string'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSx1QkFBdUI7UUFDbkMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7YUFDbkI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSw0QkFBNEI7UUFDeEMsVUFBVSxFQUFFLE9BQU87UUFDbkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsZUFBZTtnQkFDekIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmVzaXplQmlsaW5lYXInLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2FsaWduX2Nvcm5lcnMnLFxuICAgICAgICAnbmFtZSc6ICdhbGlnbkNvcm5lcnMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdoYWxmX3BpeGVsX2NlbnRlcnMnLFxuICAgICAgICAnbmFtZSc6ICdoYWxmUGl4ZWxDZW50ZXJzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXNpemVOZWFyZXN0TmVpZ2hib3InLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2FsaWduX2Nvcm5lcnMnLFxuICAgICAgICAnbmFtZSc6ICdhbGlnbkNvcm5lcnMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdoYWxmX3BpeGVsX2NlbnRlcnMnLFxuICAgICAgICAnbmFtZSc6ICdoYWxmUGl4ZWxDZW50ZXJzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDcm9wQW5kUmVzaXplJyxcbiAgICAnY2F0ZWdvcnknOiAnaW1hZ2UnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2ltYWdlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYm94ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdib3hJbmQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdjcm9wU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ21ldGhvZCcsXG4gICAgICAgICduYW1lJzogJ21ldGhvZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXh0cmFwb2xhdGlvbl92YWx1ZScsXG4gICAgICAgICduYW1lJzogJ2V4dHJhcG9sYXRpb25WYWx1ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnSW1hZ2VQcm9qZWN0aXZlVHJhbnNmb3JtVjMnLFxuICAgICdjYXRlZ29yeSc6ICdpbWFnZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW1hZ2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNmb3JtcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdmaWxsVmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnaW50ZXJwb2xhdGlvbicsXG4gICAgICAgICduYW1lJzogJ2ludGVycG9sYXRpb24nLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2ZpbGxfbW9kZScsXG4gICAgICAgICduYW1lJzogJ2ZpbGxNb2RlJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Equal',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'NotEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Greater',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'GreaterEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Less',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LessEqual',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalAnd',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalNot',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LogicalOr',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Select',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SelectV2',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'condition',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BitwiseAnd',\n 'category': 'logical',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'y',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3QvbG9naWNhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFF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QUUsU0FBUztRQUNyQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsV0FBVztnQkFDbkIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsT0FBTztnQkFDZixjQUFjLEVBQUUsSUFBSTthQUNyQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VxdWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdOb3RFcXVhbCcsXG4gICAgJ2NhdGVnb3J5JzogJ2xvZ2ljYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnR3JlYXRlcicsXG4gICAgJ2NhdGVnb3J5JzogJ2xvZ2ljYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2EnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnR3JlYXRlckVxdWFsJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMZXNzJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMZXNzRXF1YWwnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvZ2ljYWxBbmQnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0xvZ2ljYWxOb3QnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9naWNhbE9yJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTZWxlY3QnLFxuICAgICdjYXRlZ29yeSc6ICdsb2dpY2FsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdjb25kaXRpb24nLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NlbGVjdFYyJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnY29uZGl0aW9uJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCaXR3aXNlQW5kJyxcbiAgICAnY2F0ZWdvcnknOiAnbG9naWNhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3knLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': '_FusedMatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'end': 0,\n 'name': 'args',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_args',\n 'name': 'numArgs',\n 'type': 'number'\n },\n {\n 'tfName': 'fused_ops',\n 'name': 'fusedOps',\n 'type': 'string[]',\n 'defaultValue': []\n },\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.0001\n },\n {\n 'tfName': 'transpose_a',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'transpose_b',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'leakyrelu_alpha',\n 'name': 'leakyreluAlpha',\n 'type': 'number',\n 'defaultValue': 0.2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'MatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'transpose_a',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'transpose_b',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BatchMatMul',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'adj_x',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'adj_y',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'BatchMatMulV2',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'b',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'adj_x',\n 'name': 'transposeA',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'adj_y',\n 'name': 'transposeB',\n 'type': 'bool',\n 'defaultValue': false\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Transpose',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'perm',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Einsum',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'equation',\n 'name': 'equation',\n 'type': 'string'\n },\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'MatrixBandPart',\n 'category': 'matrices',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'a',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numLower',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numUpper',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L21hdHJpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsU0FBUzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLGNBQWMsRUFBRSxFQUFFO2FBQ25CO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLE1BQU07YUFDdkI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGNBQWMsRUFBRSxLQUFL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VUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ19GdXNlZE1hdE11bCcsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhcmdzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdudW1fYXJncycsXG4gICAgICAgICduYW1lJzogJ251bUFyZ3MnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Z1c2VkX29wcycsXG4gICAgICAgICduYW1lJzogJ2Z1c2VkT3BzJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nW10nLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICduYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4wMDAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3RyYW5zcG9zZV9hJyxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNwb3NlQScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndHJhbnNwb3NlX2InLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VCJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdsZWFreXJlbHVfYWxwaGEnLFxuICAgICAgICAnbmFtZSc6ICdsZWFreXJlbHVBbHBoYScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNYXRNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndHJhbnNwb3NlX2EnLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VBJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICd0cmFuc3Bvc2VfYicsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUInLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQmF0Y2hNYXRNdWwnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYWRqX3gnLFxuICAgICAgICAnbmFtZSc6ICd0cmFuc3Bvc2VBJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCcsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhZGpfeScsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUInLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1QnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQmF0Y2hNYXRNdWxWMicsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdhZGpfeCcsXG4gICAgICAgICduYW1lJzogJ3RyYW5zcG9zZUEnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Fkal95JyxcbiAgICAgICAgJ25hbWUnOiAndHJhbnNwb3NlQicsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUcmFuc3Bvc2UnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3Blcm0nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0VpbnN1bScsXG4gICAgJ2NhdGVnb3J5JzogJ21hdHJpY2VzJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnZW5kJzogMCxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXF1YXRpb24nLFxuICAgICAgICAnbmFtZSc6ICdlcXVhdGlvbicsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnTicsXG4gICAgICAgICduYW1lJzogJ24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF0cml4QmFuZFBhcnQnLFxuICAgICdjYXRlZ29yeSc6ICdtYXRyaWNlcycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnYScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ251bUxvd2VyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnbnVtVXBwZXInLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'EuclideanNorm',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool',\n 'defaultValue': false\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNorm',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNormV2',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'FusedBatchNormV3',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'scale',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'offset',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'mean',\n 'type': 'tensor'\n },\n {\n 'start': 4,\n 'name': 'variance',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'epsilon',\n 'name': 'epsilon',\n 'type': 'number',\n 'defaultValue': 0.001\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'LRN',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'depth_radius',\n 'name': 'radius',\n 'type': 'number',\n 'defaultValue': 5\n },\n {\n 'tfName': 'bias',\n 'name': 'bias',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'alpha',\n 'name': 'alpha',\n 'type': 'number',\n 'defaultValue': 1\n },\n {\n 'tfName': 'beta',\n 'name': 'beta',\n 'type': 'number',\n 'defaultValue': 0.5\n }\n ]\n },\n {\n 'tfOpName': 'Softmax',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'LogSoftmax',\n 'category': 'normalization',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3Qvbm9ybWFsaXphdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxVQUFVO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLGNBQWMsRUFBRSxLQUFLO2FBQ3RCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2Qs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RTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDO2FBQ2xCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLENBQUM7YUFDbEI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLGNBQWMsRUFBRSxHQUFHO2FBQ3BCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLFNBQVM7UUFDckIsVUFBVSxFQUFFLGVBQWU7UUFDM0IsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsZUFBZTtRQUMzQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRXVjbGlkZWFuTm9ybScsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna2VlcF9kaW1zJyxcbiAgICAgICAgJ25hbWUnOiAna2VlcERpbXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IGZhbHNlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkQmF0Y2hOb3JtJyxcbiAgICAnY2F0ZWdvcnknOiAnbm9ybWFsaXphdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3NjYWxlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnb2Zmc2V0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnbWVhbicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDQsXG4gICAgICAgICduYW1lJzogJ3ZhcmlhbmNlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAnbmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuMDAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RhdGFfZm9ybWF0JyxcbiAgICAgICAgJ25hbWUnOiAnZGF0YUZvcm1hdCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZycsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0Z1c2VkQmF0Y2hOb3JtVjInLFxuICAgICdjYXRlZ29yeSc6ICdub3JtYWxpemF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2NhbGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdvZmZzZXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdtZWFuJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogNCxcbiAgICAgICAgJ25hbWUnOiAndmFyaWFuY2UnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICduYW1lJzogJ2Vwc2lsb24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMC4wMDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRnVzZWRCYXRjaE5vcm1WMycsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzY2FsZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ29mZnNldCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDMsXG4gICAgICAgICduYW1lJzogJ21lYW4nLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiA0LFxuICAgICAgICAnbmFtZSc6ICd2YXJpYW5jZScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlcHNpbG9uJyxcbiAgICAgICAgJ25hbWUnOiAnZXBzaWxvbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLjAwMVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdkYXRhX2Zvcm1hdCcsXG4gICAgICAgICduYW1lJzogJ2RhdGFGb3JtYXQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdMUk4nLFxuICAgICdjYXRlZ29yeSc6ICdub3JtYWxpemF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2RlcHRoX3JhZGl1cycsXG4gICAgICAgICduYW1lJzogJ3JhZGl1cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiA1XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JpYXMnLFxuICAgICAgICAnbmFtZSc6ICdiaWFzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYWxwaGEnLFxuICAgICAgICAnbmFtZSc6ICdhbHBoYScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAxXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JldGEnLFxuICAgICAgICAnbmFtZSc6ICdiZXRhJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDAuNVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTb2Z0bWF4JyxcbiAgICAnY2F0ZWdvcnknOiAnbm9ybWFsaXphdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTG9nU29mdG1heCcsXG4gICAgJ2NhdGVnb3J5JzogJ25vcm1hbGl6YXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Bincount',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'weights',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'DenseBincount',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'size',\n 'type': 'number'\n },\n {\n 'start': 2,\n 'name': 'weights',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'binary_output',\n 'name': 'binaryOutput',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Max',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Mean',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Min',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Sum',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'All',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Any',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'ArgMax',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'ArgMin',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'Prod',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'keep_dims',\n 'name': 'keepDims',\n 'type': 'bool'\n },\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Cumprod',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'exclusive',\n 'name': 'exclusive',\n 'type': 'bool'\n },\n {\n 'tfName': 'reverse',\n 'name': 'reverse',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'Cumsum',\n 'category': 'reduction',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'exclusive',\n 'name': 'exclusive',\n 'type': 'bool'\n },\n {\n 'tfName': 'reverse',\n 'name': 'reverse',\n 'type': 'bool'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9yZWR1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLFVBQVU7UUFDdEIsVUFBVSxFQUFFLFdBQVc7UUFDdkIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7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QU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsV0FBVztRQUN2QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsUUFBUTtRQUNwQixVQUFVLEVBQUUsV0FBVztRQUN2QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRDtnQkFDRSxRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0JpbmNvdW50JyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3dlaWdodHMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0RlbnNlQmluY291bnQnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaXplJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnd2VpZ2h0cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdiaW5hcnlfb3V0cHV0JyxcbiAgICAgICAgJ25hbWUnOiAnYmluYXJ5T3V0cHV0JyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWF4JyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2tlZXBfZGltcycsXG4gICAgICAgICduYW1lJzogJ2tlZXBEaW1zJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnTWVhbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ01pbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1N1bScsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FsbCcsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FueScsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdrZWVwX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdrZWVwRGltcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FyZ01heCcsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0FyZ01pbicsXG4gICAgJ2NhdGVnb3J5JzogJ3JlZHVjdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1Byb2QnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAna2VlcF9kaW1zJyxcbiAgICAgICAgJ25hbWUnOiAna2VlcERpbXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdUJyxcbiAgICAgICAgJ25hbWUnOiAnZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0N1bXByb2QnLFxuICAgICdjYXRlZ29yeSc6ICdyZWR1Y3Rpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2V4Y2x1c2l2ZScsXG4gICAgICAgICduYW1lJzogJ2V4Y2x1c2l2ZScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3JldmVyc2UnLFxuICAgICAgICAnbmFtZSc6ICdyZXZlcnNlJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ3Vtc3VtJyxcbiAgICAnY2F0ZWdvcnknOiAncmVkdWN0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdleGNsdXNpdmUnLFxuICAgICAgICAnbmFtZSc6ICdleGNsdXNpdmUnLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyZXZlcnNlJyxcbiAgICAgICAgJ25hbWUnOiAncmV2ZXJzZScsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnXG4gICAgICB9XG4gICAgXVxuICB9XG5dXG47XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'ConcatV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'end': -1,\n 'name': 'tensors',\n 'type': 'tensors'\n },\n {\n 'start': -1,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n }\n ]\n },\n {\n 'tfOpName': 'Concat',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 1,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n },\n {\n 'start': 0,\n 'name': 'axis',\n 'type': 'number'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'N',\n 'name': 'n',\n 'type': 'number',\n 'defaultValue': 2\n }\n ]\n },\n {\n 'tfOpName': 'GatherV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ],\n 'attrs': [\n {\n 'tfName': 'batch_dims',\n 'name': 'batchDims',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Gather',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'validate_indices',\n 'name': 'validateIndices',\n 'type': 'bool',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Reverse',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'dims',\n 'type': 'bool[]'\n }\n ]\n },\n {\n 'tfOpName': 'ReverseV2',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Slice',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'begin',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'size',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'StridedSlice',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'begin',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'end',\n 'type': 'number[]'\n },\n {\n 'start': 3,\n 'name': 'strides',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'begin_mask',\n 'name': 'beginMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'end_mask',\n 'name': 'endMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'new_axis_mask',\n 'name': 'newAxisMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'ellipsis_mask',\n 'name': 'ellipsisMask',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'shrink_axis_mask',\n 'name': 'shrinkAxisMask',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Pack',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'end': 0,\n 'name': 'tensors',\n 'type': 'tensors'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Unpack',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'tfName': 'num',\n 'name': 'num',\n 'type': 'number',\n 'defaultValue': 0,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'Tile',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'reps',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Split',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n },\n {\n 'start': 1,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_split',\n 'name': 'numOrSizeSplits',\n 'type': 'number',\n 'defaultValue': 1\n }\n ]\n },\n {\n 'tfOpName': 'SplitV',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'numOrSizeSplits',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'axis',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'ScatterNd',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'GatherNd',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseToDense',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'sparseIndices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'outputShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'sparseValues',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'validate_indices',\n 'name': 'validateIndices',\n 'type': 'bool',\n 'defaultValue': false,\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'TensorScatterUpdate',\n 'category': 'slice_join',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'tensor',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'values',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2Vfam9pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wX2xpc3Qvc2xpY2Vfam9pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQWU7SUFDOUI7UUFDRSxVQUFVLEVBQUUsVUFBVTtRQUN0QixVQUFVLEVBQUUsWUFBWTtRQUN4QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNULE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsQ0FBQzthQUNsQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFVBQVUsRUFBRSxZQUFZO1FBQ3hCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsR0FBRztnQkFDYixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUs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MDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtPcE1hcHBlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QganNvbjogT3BNYXBwZXJbXSA9IFtcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdDb25jYXRWMicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAtMSxcbiAgICAgICAgJ25hbWUnOiAndGVuc29ycycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAtMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdOJyxcbiAgICAgICAgJ25hbWUnOiAnbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAyXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0NvbmNhdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2F4aXMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnTicsXG4gICAgICAgICduYW1lJzogJ24nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMlxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdHYXRoZXJWMicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYmF0Y2hfZGltcycsXG4gICAgICAgICduYW1lJzogJ2JhdGNoRGltcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0dhdGhlcicsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3ZhbGlkYXRlX2luZGljZXMnLFxuICAgICAgICAnbmFtZSc6ICd2YWxpZGF0ZUluZGljZXMnLFxuICAgICAgICAndHlwZSc6ICdib29sJyxcbiAgICAgICAgJ25vdFN1cHBvcnRlZCc6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUmV2ZXJzZScsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdkaW1zJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbFtdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXZlcnNlVjInLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTbGljZScsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdiZWdpbicsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnc2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTdHJpZGVkU2xpY2UnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYmVnaW4nLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2VuZCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnc3RyaWRlcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2JlZ2luX21hc2snLFxuICAgICAgICAnbmFtZSc6ICdiZWdpbk1hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbmRfbWFzaycsXG4gICAgICAgICduYW1lJzogJ2VuZE1hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICduZXdfYXhpc19tYXNrJyxcbiAgICAgICAgJ25hbWUnOiAnbmV3QXhpc01hc2snLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdlbGxpcHNpc19tYXNrJyxcbiAgICAgICAgJ25hbWUnOiAnZWxsaXBzaXNNYXNrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnc2hyaW5rX2F4aXNfbWFzaycsXG4gICAgICAgICduYW1lJzogJ3Nocmlua0F4aXNNYXNrJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICdlbmQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3JzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29ycydcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1VucGFjaycsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3RlbnNvcicsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ251bScsXG4gICAgICAgICduYW1lJzogJ251bScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdUaWxlJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3JlcHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX3NwbGl0JyxcbiAgICAgICAgJ25hbWUnOiAnbnVtT3JTaXplU3BsaXRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDFcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3BsaXRWJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ251bU9yU2l6ZVNwbGl0cycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnYXhpcycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdkZWZhdWx0VmFsdWUnOiAwXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NjYXR0ZXJOZCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdHYXRoZXJOZCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NsaWNlX2pvaW4nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VUb0RlbnNlJyxcbiAgICAnY2F0ZWdvcnknOiAnc2xpY2Vfam9pbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnc3BhcnNlSW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ291dHB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzcGFyc2VWYWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAzLFxuICAgICAgICAnbmFtZSc6ICdkZWZhdWx0VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAndmFsaWRhdGVfaW5kaWNlcycsXG4gICAgICAgICduYW1lJzogJ3ZhbGlkYXRlSW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ2Jvb2wnLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogZmFsc2UsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1RlbnNvclNjYXR0ZXJVcGRhdGUnLFxuICAgICdjYXRlZ29yeSc6ICdzbGljZV9qb2luJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd0ZW5zb3InLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbmRpY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAndmFsdWVzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'SparseFillEmptyRows',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'values',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'denseShape',\n 'type': 'tensor'\n },\n {\n 'start': 3,\n 'name': 'defaultValue',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseReshape',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'inputIndices',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'inputShape',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'newShape',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'T',\n 'name': 'dtype',\n 'type': 'dtype',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'SparseSegmentMean',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'segmentIds',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'SparseSegmentSum',\n 'category': 'sparse',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'indices',\n 'type': 'tensor'\n },\n {\n 'start': 2,\n 'name': 'segmentIds',\n 'type': 'tensor'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9zcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsY0FBYztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxPQUFPO2dCQUNmLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLG1CQUFtQjtRQUMvQixVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxrQkFBa0I7UUFDOUIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NwYXJzZUZpbGxFbXB0eVJvd3MnLFxuICAgICdjYXRlZ29yeSc6ICdzcGFyc2UnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICd2YWx1ZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdkZW5zZVNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMyxcbiAgICAgICAgJ25hbWUnOiAnZGVmYXVsdFZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VSZXNoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BhcnNlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdpbnB1dEluZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdpbnB1dFNoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnbmV3U2hhcGUnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnVCcsXG4gICAgICAgICduYW1lJzogJ2R0eXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnZHR5cGUnLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VTZWdtZW50TWVhbicsXG4gICAgJ2NhdGVnb3J5JzogJ3NwYXJzZScsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnZGF0YScsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2luZGljZXMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdzZWdtZW50SWRzJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdTcGFyc2VTZWdtZW50U3VtJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BhcnNlJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnaW5kaWNlcycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ3NlZ21lbnRJZHMnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'FFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'IFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ]\n },\n {\n 'tfOpName': 'RFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'fft_length',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n },\n {\n 'tfOpName': 'IRFFT',\n 'category': 'spectral',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'fft_length',\n 'type': 'number',\n 'notSupported': true\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L3NwZWN0cmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsVUFBVSxFQUFFLE1BQU07UUFDbEIsVUFBVSxFQUFFLFVBQVU7UUFDdEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsT0FBTztRQUNuQixVQUFVLEVBQUUsVUFBVTtRQUN0QixRQUFRLEVBQUU7WUFDUjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLElBQUk7YUFDckI7U0FDRjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ0ZGVCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NwZWN0cmFsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdJRkZUJyxcbiAgICAnY2F0ZWdvcnknOiAnc3BlY3RyYWwnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1JGRlQnLFxuICAgICdjYXRlZ29yeSc6ICdzcGVjdHJhbCcsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ2ZmdF9sZW5ndGgnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnbm90U3VwcG9ydGVkJzogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdJUkZGVCcsXG4gICAgJ2NhdGVnb3J5JzogJ3NwZWN0cmFsJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZmZ0X2xlbmd0aCcsXG4gICAgICAgICd0eXBlJzogJ251bWJlcicsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9XG5dO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'StaticRegexReplace',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'pattern',\n 'name': 'pattern',\n 'type': 'string'\n },\n {\n 'tfName': 'rewrite',\n 'name': 'rewrite',\n 'type': 'string'\n },\n {\n 'tfName': 'replace_global',\n 'name': 'replaceGlobal',\n 'type': 'bool'\n }\n ]\n },\n {\n 'tfOpName': 'StringNGrams',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'data',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'dataSplits',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'separator',\n 'name': 'separator',\n 'type': 'string'\n },\n {\n 'tfName': 'ngram_widths',\n 'name': 'nGramWidths',\n 'type': 'number[]'\n },\n {\n 'tfName': 'left_pad',\n 'name': 'leftPad',\n 'type': 'string'\n },\n {\n 'tfName': 'right_pad',\n 'name': 'rightPad',\n 'type': 'string'\n },\n {\n 'tfName': 'pad_width',\n 'name': 'padWidth',\n 'type': 'number'\n },\n {\n 'tfName': 'preserve_short_sequences',\n 'name': 'preserveShortSequences',\n 'type': 'bool'\n }\n ],\n 'outputs': [\n 'ngrams',\n 'ngrams_splits'\n ]\n },\n {\n 'tfOpName': 'StringSplit',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'delimiter',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'skip_empty',\n 'name': 'skipEmpty',\n 'type': 'bool'\n }\n ],\n 'outputs': [\n 'indices',\n 'values',\n 'shape'\n ]\n },\n {\n 'tfOpName': 'StringToHashBucketFast',\n 'category': 'string',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'input',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'num_buckets',\n 'name': 'numBuckets',\n 'type': 'number'\n }\n ]\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BfbGlzdC9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFlO0lBQzlCO1FBQ0UsVUFBVSxFQUFFLG9CQUFvQjtRQUNoQyxVQUFVLEVBQUUsUUFBUTtRQUNwQixRQUFRLEVBQUU7WUFDUjtnQkFDQSxPQUFPLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsT0FBTztnQkFDZixNQUFNLEVBQUUsUUFBUTthQUNqQjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1A7Z0JBQ0UsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixNQUFNLEVBQUUsZUFBZTtnQkFDdkIsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixNQUFNLEVBQUUsVUFBVTthQUNuQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixNQUFNLEVBQUUsU0FBUztnQkFDakIsTUFBTSxFQUFFLFFBQVE7YUFDakI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsUUFBUTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLE1BQU0sRUFBRSx3QkFBd0I7Z0JBQ2hDLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtRQUNELFNBQVMsRUFBRTtZQUNULFFBQVE7WUFDUixlQUFlO1NBQ2hCO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUDtnQkFDRSxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRjtRQUNELFNBQVMsRUFBRTtZQUNULFNBQVM7WUFDVCxRQUFRO1lBQ1IsT0FBTztTQUNSO0tBQ0Y7SUFDRDtRQUNFLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixNQUFNLEVBQUUsWUFBWTtnQkFDcEIsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0NBQ0YsQ0FDQSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge09wTWFwcGVyfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBqc29uOiBPcE1hcHBlcltdID0gW1xuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1N0YXRpY1JlZ2V4UmVwbGFjZScsXG4gICAgJ2NhdGVnb3J5JzogJ3N0cmluZycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhdHRlcm4nLFxuICAgICAgICAnbmFtZSc6ICdwYXR0ZXJuJyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdyZXdyaXRlJyxcbiAgICAgICAgJ25hbWUnOiAncmV3cml0ZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncmVwbGFjZV9nbG9iYWwnLFxuICAgICAgICAnbmFtZSc6ICdyZXBsYWNlR2xvYmFsJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nTkdyYW1zJyxcbiAgICAnY2F0ZWdvcnknOiAnc3RyaW5nJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdkYXRhJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGF0YVNwbGl0cycsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdzZXBhcmF0b3InLFxuICAgICAgICAnbmFtZSc6ICdzZXBhcmF0b3InLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ25ncmFtX3dpZHRocycsXG4gICAgICAgICduYW1lJzogJ25HcmFtV2lkdGhzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2xlZnRfcGFkJyxcbiAgICAgICAgJ25hbWUnOiAnbGVmdFBhZCcsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAncmlnaHRfcGFkJyxcbiAgICAgICAgJ25hbWUnOiAncmlnaHRQYWQnLFxuICAgICAgICAndHlwZSc6ICdzdHJpbmcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3BhZF93aWR0aCcsXG4gICAgICAgICduYW1lJzogJ3BhZFdpZHRoJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdwcmVzZXJ2ZV9zaG9ydF9zZXF1ZW5jZXMnLFxuICAgICAgICAnbmFtZSc6ICdwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzJyxcbiAgICAgICAgJ3R5cGUnOiAnYm9vbCdcbiAgICAgIH1cbiAgICBdLFxuICAgICdvdXRwdXRzJzogW1xuICAgICAgJ25ncmFtcycsXG4gICAgICAnbmdyYW1zX3NwbGl0cydcbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nU3BsaXQnLFxuICAgICdjYXRlZ29yeSc6ICdzdHJpbmcnLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ2lucHV0JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnZGVsaW1pdGVyJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ3NraXBfZW1wdHknLFxuICAgICAgICAnbmFtZSc6ICdza2lwRW1wdHknLFxuICAgICAgICAndHlwZSc6ICdib29sJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ291dHB1dHMnOiBbXG4gICAgICAnaW5kaWNlcycsXG4gICAgICAndmFsdWVzJyxcbiAgICAgICdzaGFwZSdcbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3RyaW5nVG9IYXNoQnVja2V0RmFzdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3N0cmluZycsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAnaW5wdXQnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnbnVtX2J1Y2tldHMnLFxuICAgICAgICAnbmFtZSc6ICdudW1CdWNrZXRzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const json = [\n {\n 'tfOpName': 'Cast',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'SrcT',\n 'name': 'sdtype',\n 'type': 'dtype',\n 'notSupported': true\n },\n {\n 'tfName': 'DstT',\n 'name': 'dtype',\n 'type': 'dtype'\n }\n ]\n },\n {\n 'tfOpName': 'ExpandDims',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'axis',\n 'type': 'number'\n }\n ]\n },\n {\n 'tfOpName': 'MirrorPad',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'mode',\n 'name': 'mode',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'Pad',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'constant_value',\n 'name': 'constantValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'PadV2',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'padding',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'constantValue',\n 'type': 'number',\n 'defaultValue': 0\n }\n ]\n },\n {\n 'tfOpName': 'Reshape',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'EnsureShape',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'Squeeze',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'axis',\n 'tfDeprecatedName': 'squeeze_dims',\n 'name': 'axis',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'SpaceToBatchND',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'blockShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'paddings',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'BatchToSpaceND',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'blockShape',\n 'type': 'number[]'\n },\n {\n 'start': 2,\n 'name': 'crops',\n 'type': 'number[]'\n }\n ]\n },\n {\n 'tfOpName': 'DepthToSpace',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n }\n ],\n 'attrs': [\n {\n 'tfName': 'block_size',\n 'name': 'blockSize',\n 'type': 'number'\n },\n {\n 'tfName': 'data_format',\n 'name': 'dataFormat',\n 'type': 'string'\n }\n ]\n },\n {\n 'tfOpName': 'BroadcastTo',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 'x',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 'shape',\n 'type': 'number[]'\n }\n ],\n 'attrs': []\n },\n {\n 'tfOpName': 'BroadcastArgs',\n 'category': 'transformation',\n 'inputs': [\n {\n 'start': 0,\n 'name': 's0',\n 'type': 'tensor'\n },\n {\n 'start': 1,\n 'name': 's1',\n 'type': 'tensor'\n }\n ],\n 'attrs': []\n }\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9vcF9saXN0L3RyYW5zZm9ybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUlILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBZTtJQUM5QjtRQUNFLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFVBQVUsRUFBRSxnQkFBZ0I7UUFDNUIsUUFBUSxFQUFFO1lBQ1I7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRTtZQUNQO2dCQUNFLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsY0FBYyxFQUFFLElBQUk7YUFDckI7WUFDRDtnQkFDRSxRQUFRLEVBQUUsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFLE9BQU87YUFDaEI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsWUFBWTtRQUN4QixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsV0FBVztRQUN2QixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxHQUFHO2dC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QUFVO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsRUFBRTtLQUNaO0lBQ0Q7UUFDRSxVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFFBQVEsRUFBRTtZQUNSO2dCQUNFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLElBQUk7Z0JBQ1osTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtRQUNELE9BQU8sRUFBRSxFQUFFO0tBQ1o7Q0FDRixDQUNBIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7T3BNYXBwZXJ9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGpzb246IE9wTWFwcGVyW10gPSBbXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQ2FzdCcsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ1NyY1QnLFxuICAgICAgICAnbmFtZSc6ICdzZHR5cGUnLFxuICAgICAgICAndHlwZSc6ICdkdHlwZScsXG4gICAgICAgICdub3RTdXBwb3J0ZWQnOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ0RzdFQnLFxuICAgICAgICAnbmFtZSc6ICdkdHlwZScsXG4gICAgICAgICd0eXBlJzogJ2R0eXBlJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFeHBhbmREaW1zJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdNaXJyb3JQYWQnLFxuICAgICdjYXRlZ29yeSc6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3RmTmFtZSc6ICdtb2RlJyxcbiAgICAgICAgJ25hbWUnOiAnbW9kZScsXG4gICAgICAgICd0eXBlJzogJ3N0cmluZydcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFkJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdwYWRkaW5nJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnY29uc3RhbnRfdmFsdWUnLFxuICAgICAgICAnbmFtZSc6ICdjb25zdGFudFZhbHVlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyJyxcbiAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IDBcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnUGFkVjInLFxuICAgICdjYXRlZ29yeSc6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgJ2lucHV0cyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMCxcbiAgICAgICAgJ25hbWUnOiAneCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3BhZGRpbmcnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDIsXG4gICAgICAgICduYW1lJzogJ2NvbnN0YW50VmFsdWUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXInLFxuICAgICAgICAnZGVmYXVsdFZhbHVlJzogMFxuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdSZXNoYXBlJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdzaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdFbnN1cmVTaGFwZScsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnU3F1ZWV6ZScsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW1xuICAgICAge1xuICAgICAgICAndGZOYW1lJzogJ2F4aXMnLFxuICAgICAgICAndGZEZXByZWNhdGVkTmFtZSc6ICdzcXVlZXplX2RpbXMnLFxuICAgICAgICAnbmFtZSc6ICdheGlzJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9XG4gICAgXVxuICB9LFxuICB7XG4gICAgJ3RmT3BOYW1lJzogJ1NwYWNlVG9CYXRjaE5EJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAxLFxuICAgICAgICAnbmFtZSc6ICdibG9ja1NoYXBlJyxcbiAgICAgICAgJ3R5cGUnOiAnbnVtYmVyW10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAyLFxuICAgICAgICAnbmFtZSc6ICdwYWRkaW5ncycsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCYXRjaFRvU3BhY2VORCcsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnYmxvY2tTaGFwZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcltdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMixcbiAgICAgICAgJ25hbWUnOiAnY3JvcHMnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnRGVwdGhUb1NwYWNlJyxcbiAgICAnY2F0ZWdvcnknOiAndHJhbnNmb3JtYXRpb24nLFxuICAgICdpbnB1dHMnOiBbXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDAsXG4gICAgICAgICduYW1lJzogJ3gnLFxuICAgICAgICAndHlwZSc6ICd0ZW5zb3InXG4gICAgICB9XG4gICAgXSxcbiAgICAnYXR0cnMnOiBbXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnYmxvY2tfc2l6ZScsXG4gICAgICAgICduYW1lJzogJ2Jsb2NrU2l6ZScsXG4gICAgICAgICd0eXBlJzogJ251bWJlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd0Zk5hbWUnOiAnZGF0YV9mb3JtYXQnLFxuICAgICAgICAnbmFtZSc6ICdkYXRhRm9ybWF0JyxcbiAgICAgICAgJ3R5cGUnOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIF1cbiAgfSxcbiAge1xuICAgICd0Zk9wTmFtZSc6ICdCcm9hZGNhc3RUbycsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICd4JyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3N0YXJ0JzogMSxcbiAgICAgICAgJ25hbWUnOiAnc2hhcGUnLFxuICAgICAgICAndHlwZSc6ICdudW1iZXJbXSdcbiAgICAgIH1cbiAgICBdLFxuICAgICdhdHRycyc6IFtdXG4gIH0sXG4gIHtcbiAgICAndGZPcE5hbWUnOiAnQnJvYWRjYXN0QXJncycsXG4gICAgJ2NhdGVnb3J5JzogJ3RyYW5zZm9ybWF0aW9uJyxcbiAgICAnaW5wdXRzJzogW1xuICAgICAge1xuICAgICAgICAnc3RhcnQnOiAwLFxuICAgICAgICAnbmFtZSc6ICdzMCcsXG4gICAgICAgICd0eXBlJzogJ3RlbnNvcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdzdGFydCc6IDEsXG4gICAgICAgICduYW1lJzogJ3MxJyxcbiAgICAgICAgJ3R5cGUnOiAndGVuc29yJ1xuICAgICAgfVxuICAgIF0sXG4gICAgJ2F0dHJzJzogW11cbiAgfVxuXVxuO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nimport * as tensorflow from '../data/compiled_api';\nimport { getRegisteredOp } from './custom_op/register';\nimport { getNodeNameAndIndex } from './executors/utils';\nimport * as arithmetic from './op_list/arithmetic';\nimport * as basicMath from './op_list/basic_math';\nimport * as control from './op_list/control';\nimport * as convolution from './op_list/convolution';\nimport * as creation from './op_list/creation';\nimport * as dynamic from './op_list/dynamic';\nimport * as evaluation from './op_list/evaluation';\nimport * as graph from './op_list/graph';\nimport * as hashTable from './op_list/hash_table';\nimport * as image from './op_list/image';\nimport * as logical from './op_list/logical';\nimport * as matrices from './op_list/matrices';\nimport * as normalization from './op_list/normalization';\nimport * as reduction from './op_list/reduction';\nimport * as sliceJoin from './op_list/slice_join';\nimport * as sparse from './op_list/sparse';\nimport * as spectral from './op_list/spectral';\nimport * as string from './op_list/string';\nimport * as transformation from './op_list/transformation';\nexport class OperationMapper {\n // Singleton instance for the mapper\n static get Instance() {\n return this._instance || (this._instance = new this());\n }\n // Loads the op mapping from the JSON file.\n constructor() {\n const ops = [\n arithmetic, basicMath, control, convolution, creation, dynamic,\n evaluation, graph, hashTable, image, logical, matrices, normalization,\n reduction, sliceJoin, sparse, spectral, string, transformation\n ];\n const mappersJson = [].concat(...ops.map(op => op.json));\n this.opMappers = mappersJson.reduce((map, mapper) => {\n map[mapper.tfOpName] = mapper;\n return map;\n }, {});\n }\n // Converts the model inference graph from Tensorflow GraphDef to local\n // representation for TensorFlow.js API\n transformGraph(graph, signature = {}) {\n const tfNodes = graph.node;\n const placeholders = [];\n const weights = [];\n const initNodes = [];\n const nodes = tfNodes.reduce((map, node) => {\n map[node.name] = this.mapNode(node);\n if (node.op.startsWith('Placeholder')) {\n placeholders.push(map[node.name]);\n }\n else if (node.op === 'Const') {\n weights.push(map[node.name]);\n }\n else if (node.input == null || node.input.length === 0) {\n initNodes.push(map[node.name]);\n }\n return map;\n }, {});\n let inputs = [];\n const outputs = [];\n let inputNodeNameToKey = {};\n let outputNodeNameToKey = {};\n if (signature != null) {\n inputNodeNameToKey = this.mapSignatureEntries(signature.inputs);\n outputNodeNameToKey = this.mapSignatureEntries(signature.outputs);\n }\n const allNodes = Object.keys(nodes);\n allNodes.forEach(key => {\n const node = nodes[key];\n node.inputNames.forEach((name, index) => {\n const [nodeName, , outputName] = getNodeNameAndIndex(name);\n const inputNode = nodes[nodeName];\n if (inputNode.outputs != null) {\n const outputIndex = inputNode.outputs.indexOf(outputName);\n if (outputIndex !== -1) {\n const inputName = `${nodeName}:${outputIndex}`;\n // update the input name to use the mapped output index directly.\n node.inputNames[index] = inputName;\n }\n }\n node.inputs.push(inputNode);\n inputNode.children.push(node);\n });\n });\n // if signature has not outputs set, add any node that does not have\n // outputs.\n if (Object.keys(outputNodeNameToKey).length === 0) {\n allNodes.forEach(key => {\n const node = nodes[key];\n if (node.children.length === 0) {\n outputs.push(node);\n }\n });\n }\n else {\n Object.keys(outputNodeNameToKey).forEach(name => {\n const [nodeName,] = getNodeNameAndIndex(name);\n const node = nodes[nodeName];\n if (node != null) {\n node.signatureKey = outputNodeNameToKey[name];\n outputs.push(node);\n }\n });\n }\n if (Object.keys(inputNodeNameToKey).length > 0) {\n Object.keys(inputNodeNameToKey).forEach(name => {\n const [nodeName,] = getNodeNameAndIndex(name);\n const node = nodes[nodeName];\n if (node) {\n node.signatureKey = inputNodeNameToKey[name];\n inputs.push(node);\n }\n });\n }\n else {\n inputs = placeholders;\n }\n let functions = {};\n if (graph.library != null && graph.library.function != null) {\n functions = graph.library.function.reduce((functions, func) => {\n functions[func.signature.name] = this.mapFunction(func);\n return functions;\n }, {});\n }\n const result = { nodes, inputs, outputs, weights, placeholders, signature, functions };\n if (initNodes.length > 0) {\n result.initNodes = initNodes;\n }\n return result;\n }\n mapSignatureEntries(entries) {\n return Object.keys(entries || {})\n .reduce((prev, curr) => {\n prev[entries[curr].name] = curr;\n return prev;\n }, {});\n }\n mapNode(node) {\n // Unsupported ops will cause an error at run-time (not parse time), since\n // they may not be used by the actual execution subgraph.\n const mapper = getRegisteredOp(node.op) || this.opMappers[node.op] || {};\n if (node.attr == null) {\n node.attr = {};\n }\n const newNode = {\n name: node.name,\n op: node.op,\n category: mapper.category,\n inputNames: (node.input ||\n []).map(input => input.startsWith('^') ? input.slice(1) : input),\n inputs: [],\n children: [],\n inputParams: {},\n attrParams: {},\n rawAttrs: node.attr,\n outputs: mapper.outputs\n };\n if (mapper.inputs != null) {\n newNode.inputParams =\n mapper.inputs.reduce((map, param) => {\n map[param.name] = {\n type: param.type,\n inputIndexStart: param.start,\n inputIndexEnd: param.end\n };\n return map;\n }, {});\n }\n if (mapper.attrs != null) {\n newNode.attrParams =\n mapper.attrs.reduce((map, param) => {\n const type = param.type;\n let value = undefined;\n switch (param.type) {\n case 'string':\n value = getStringParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getStringParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'string[]':\n value = getStringArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getStringArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'number':\n value = getNumberParam(node.attr, param.tfName, (param.defaultValue || 0));\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getNumberParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'number[]':\n value = getNumericArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getNumericArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'bool':\n value = getBoolParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getBoolParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'bool[]':\n value = getBoolArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getBoolArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'shape':\n value = getTensorShapeParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getTensorShapeParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'shape[]':\n value = getTensorShapeArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getTensorShapeArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'dtype':\n value = getDtypeParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getDtypeParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'dtype[]':\n value = getDtypeArrayParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getDtypeArrayParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'func':\n value = getFuncParam(node.attr, param.tfName, param.defaultValue);\n if (value === undefined && !!param.tfDeprecatedName) {\n value = getFuncParam(node.attr, param.tfDeprecatedName, param.defaultValue);\n }\n break;\n case 'tensor':\n case 'tensors':\n break;\n default:\n throw new Error(`Unsupported param type: ${param.type} for op: ${node.op}`);\n }\n map[param.name] = { value, type };\n return map;\n }, {});\n }\n return newNode;\n }\n // map the TFunctionDef to TFJS graph object\n mapFunction(functionDef) {\n const tfNodes = functionDef.nodeDef;\n const placeholders = [];\n const weights = [];\n let nodes = {};\n if (tfNodes != null) {\n nodes = tfNodes.reduce((map, node) => {\n map[node.name] = this.mapNode(node);\n if (node.op === 'Const') {\n weights.push(map[node.name]);\n }\n return map;\n }, {});\n }\n const inputs = [];\n const outputs = [];\n functionDef.signature.inputArg.forEach(arg => {\n const [nodeName,] = getNodeNameAndIndex(arg.name);\n const node = {\n name: nodeName,\n op: 'Placeholder',\n inputs: [],\n inputNames: [],\n category: 'graph',\n inputParams: {},\n attrParams: { dtype: { value: parseDtypeParam(arg.type), type: 'dtype' } },\n children: []\n };\n node.signatureKey = arg.name;\n inputs.push(node);\n nodes[nodeName] = node;\n });\n const allNodes = Object.keys(nodes);\n allNodes.forEach(key => {\n const node = nodes[key];\n node.inputNames.forEach((name, index) => {\n const [nodeName, , outputName] = getNodeNameAndIndex(name);\n const inputNode = nodes[nodeName];\n if (inputNode.outputs != null) {\n const outputIndex = inputNode.outputs.indexOf(outputName);\n if (outputIndex !== -1) {\n const inputName = `${nodeName}:${outputIndex}`;\n // update the input name to use the mapped output index directly.\n node.inputNames[index] = inputName;\n }\n }\n node.inputs.push(inputNode);\n inputNode.children.push(node);\n });\n });\n const returnNodeMap = functionDef.ret;\n functionDef.signature.outputArg.forEach(output => {\n const [nodeName, index] = getNodeNameAndIndex(returnNodeMap[output.name]);\n const node = nodes[nodeName];\n if (node != null) {\n node.defaultOutput = index;\n outputs.push(node);\n }\n });\n const signature = this.mapArgsToSignature(functionDef);\n return { nodes, inputs, outputs, weights, placeholders, signature };\n }\n mapArgsToSignature(functionDef) {\n return {\n methodName: functionDef.signature.name,\n inputs: functionDef.signature.inputArg.reduce((map, arg) => {\n map[arg.name] = this.mapArgToTensorInfo(arg);\n return map;\n }, {}),\n outputs: functionDef.signature.outputArg.reduce((map, arg) => {\n map[arg.name] = this.mapArgToTensorInfo(arg, functionDef.ret);\n return map;\n }, {}),\n };\n }\n mapArgToTensorInfo(arg, nameMap) {\n let name = arg.name;\n if (nameMap != null) {\n name = nameMap[name];\n }\n return { name, dtype: arg.type };\n }\n}\nexport function decodeBase64(text) {\n const global = env().global;\n if (typeof global.atob !== 'undefined') {\n return global.atob(text);\n }\n else if (typeof Buffer !== 'undefined') {\n return new Buffer(text, 'base64').toString();\n }\n else {\n throw new Error('Unable to decode base64 in this environment. ' +\n 'Missing built-in atob() or Buffer()');\n }\n}\nexport function parseStringParam(s, keepCase) {\n const value = Array.isArray(s) ? String.fromCharCode.apply(null, s) : decodeBase64(s);\n return keepCase ? value : value.toLowerCase();\n}\nexport function getStringParam(attrs, name, def, keepCase = false) {\n const param = attrs[name];\n if (param != null) {\n return parseStringParam(param.s, keepCase);\n }\n return def;\n}\nexport function getBoolParam(attrs, name, def) {\n const param = attrs[name];\n return param ? param.b : def;\n}\nexport function getNumberParam(attrs, name, def) {\n const param = attrs[name] || {};\n const value = param['i'] != null ? param['i'] : (param['f'] != null ? param['f'] : def);\n return (typeof value === 'number') ? value : parseInt(value, 10);\n}\nexport function parseDtypeParam(value) {\n if (typeof (value) === 'string') {\n // tslint:disable-next-line:no-any\n value = tensorflow.DataType[value];\n }\n switch (value) {\n case tensorflow.DataType.DT_FLOAT:\n case tensorflow.DataType.DT_HALF:\n return 'float32';\n case tensorflow.DataType.DT_INT32:\n case tensorflow.DataType.DT_INT64:\n case tensorflow.DataType.DT_INT8:\n case tensorflow.DataType.DT_UINT8:\n return 'int32';\n case tensorflow.DataType.DT_BOOL:\n return 'bool';\n case tensorflow.DataType.DT_DOUBLE:\n return 'float32';\n case tensorflow.DataType.DT_STRING:\n return 'string';\n default:\n // Unknown dtype error will happen at runtime (instead of parse time),\n // since these nodes might not be used by the actual subgraph execution.\n return null;\n }\n}\nexport function getFuncParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.func) {\n return param.func.name;\n }\n return def;\n}\nexport function getDtypeParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.type) {\n return parseDtypeParam(param.type);\n }\n return def;\n}\nexport function getDtypeArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.type) {\n return param.list.type.map(v => parseDtypeParam(v));\n }\n return def;\n}\nexport function parseTensorShapeParam(shape) {\n if (shape.unknownRank) {\n return undefined;\n }\n if (shape.dim != null) {\n return shape.dim.map(dim => (typeof dim.size === 'number') ? dim.size : parseInt(dim.size, 10));\n }\n return [];\n}\nexport function getTensorShapeParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.shape) {\n return parseTensorShapeParam(param.shape);\n }\n return def;\n}\nexport function getNumericArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param) {\n return ((param.list.f && param.list.f.length ? param.list.f :\n param.list.i) ||\n [])\n .map(v => (typeof v === 'number') ? v : parseInt(v, 10));\n }\n return def;\n}\nexport function getStringArrayParam(attrs, name, def, keepCase = false) {\n const param = attrs[name];\n if (param && param.list && param.list.s) {\n return param.list.s.map((v) => {\n return parseStringParam(v, keepCase);\n });\n }\n return def;\n}\nexport function getTensorShapeArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.shape) {\n return param.list.shape.map((v) => {\n return parseTensorShapeParam(v);\n });\n }\n return def;\n}\nexport function getBoolArrayParam(attrs, name, def) {\n const param = attrs[name];\n if (param && param.list && param.list.b) {\n return param.list.b;\n }\n return def;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uX21hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL29wZXJhdGlvbl9tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFXLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXBELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEtBQUssTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEtBQUssU0FBUyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEtB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M0MsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQyxPQUFPLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLEtBQTZDLEVBQUUsSUFBWSxFQUMzRCxHQUFjO0lBQ2hCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDckI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIGVudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0ICogYXMgdGVuc29yZmxvdyBmcm9tICcuLi9kYXRhL2NvbXBpbGVkX2FwaSc7XG5cbmltcG9ydCB7Z2V0UmVnaXN0ZXJlZE9wfSBmcm9tICcuL2N1c3RvbV9vcC9yZWdpc3Rlcic7XG5pbXBvcnQge2dldE5vZGVOYW1lQW5kSW5kZXh9IGZyb20gJy4vZXhlY3V0b3JzL3V0aWxzJztcbmltcG9ydCAqIGFzIGFyaXRobWV0aWMgZnJvbSAnLi9vcF9saXN0L2FyaXRobWV0aWMnO1xuaW1wb3J0ICogYXMgYmFzaWNNYXRoIGZyb20gJy4vb3BfbGlzdC9iYXNpY19tYXRoJztcbmltcG9ydCAqIGFzIGNvbnRyb2wgZnJvbSAnLi9vcF9saXN0L2NvbnRyb2wnO1xuaW1wb3J0ICogYXMgY29udm9sdXRpb24gZnJvbSAnLi9vcF9saXN0L2NvbnZvbHV0aW9uJztcbmltcG9ydCAqIGFzIGNyZWF0aW9uIGZyb20gJy4vb3BfbGlzdC9jcmVhdGlvbic7XG5pbXBvcnQgKiBhcyBkeW5hbWljIGZyb20gJy4vb3BfbGlzdC9keW5hbWljJztcbmltcG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSAnLi9vcF9saXN0L2V2YWx1YXRpb24nO1xuaW1wb3J0ICogYXMgZ3JhcGggZnJvbSAnLi9vcF9saXN0L2dyYXBoJztcbmltcG9ydCAqIGFzIGhhc2hUYWJsZSBmcm9tICcuL29wX2xpc3QvaGFzaF90YWJsZSc7XG5pbXBvcnQgKiBhcyBpbWFnZSBmcm9tICcuL29wX2xpc3QvaW1hZ2UnO1xuaW1wb3J0ICogYXMgbG9naWNhbCBmcm9tICcuL29wX2xpc3QvbG9naWNhbCc7XG5pbXBvcnQgKiBhcyBtYXRyaWNlcyBmcm9tICcuL29wX2xpc3QvbWF0cmljZXMnO1xuaW1wb3J0ICogYXMgbm9ybWFsaXphdGlvbiBmcm9tICcuL29wX2xpc3Qvbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgKiBhcyByZWR1Y3Rpb24gZnJvbSAnLi9vcF9saXN0L3JlZHVjdGlvbic7XG5pbXBvcnQgKiBhcyBzbGljZUpvaW4gZnJvbSAnLi9vcF9saXN0L3NsaWNlX2pvaW4nO1xuaW1wb3J0ICogYXMgc3BhcnNlIGZyb20gJy4vb3BfbGlzdC9zcGFyc2UnO1xuaW1wb3J0ICogYXMgc3BlY3RyYWwgZnJvbSAnLi9vcF9saXN0L3NwZWN0cmFsJztcbmltcG9ydCAqIGFzIHN0cmluZyBmcm9tICcuL29wX2xpc3Qvc3RyaW5nJztcbmltcG9ydCAqIGFzIHRyYW5zZm9ybWF0aW9uIGZyb20gJy4vb3BfbGlzdC90cmFuc2Zvcm1hdGlvbic7XG5pbXBvcnQge0dyYXBoLCBJbnB1dFBhcmFtVmFsdWUsIE5vZGUsIE9wTWFwcGVyLCBQYXJhbVZhbHVlfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbk1hcHBlciB7XG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogT3BlcmF0aW9uTWFwcGVyO1xuXG4gIHByaXZhdGUgb3BNYXBwZXJzOiB7W2tleTogc3RyaW5nXTogT3BNYXBwZXJ9O1xuXG4gIC8vIFNpbmdsZXRvbiBpbnN0YW5jZSBmb3IgdGhlIG1hcHBlclxuICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSk7XG4gIH1cblxuICAvLyBMb2FkcyB0aGUgb3AgbWFwcGluZyBmcm9tIHRoZSBKU09OIGZpbGUuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgb3BzID0gW1xuICAgICAgYXJpdGhtZXRpYywgYmFzaWNNYXRoLCBjb250cm9sLCBjb252b2x1dGlvbiwgY3JlYXRpb24sIGR5bmFtaWMsXG4gICAgICBldmFsdWF0aW9uLCBncmFwaCwgaGFzaFRhYmxlLCBpbWFnZSwgbG9naWNhbCwgbWF0cmljZXMsIG5vcm1hbGl6YXRpb24sXG4gICAgICByZWR1Y3Rpb24sIHNsaWNlSm9pbiwgc3BhcnNlLCBzcGVjdHJhbCwgc3RyaW5nLCB0cmFuc2Zvcm1hdGlvblxuICAgIF07XG4gICAgY29uc3QgbWFwcGVyc0pzb246IE9wTWFwcGVyW10gPSBbXS5jb25jYXQoLi4ub3BzLm1hcChvcCA9PiBvcC5qc29uKSk7XG5cbiAgICB0aGlzLm9wTWFwcGVycyA9IG1hcHBlcnNKc29uLnJlZHVjZTx7W2tleTogc3RyaW5nXTogT3BNYXBwZXJ9PihcbiAgICAgICAgKG1hcCwgbWFwcGVyOiBPcE1hcHBlcikgPT4ge1xuICAgICAgICAgIG1hcFttYXBwZXIudGZPcE5hbWVdID0gbWFwcGVyO1xuICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sXG4gICAgICAgIHt9KTtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIHRoZSBtb2RlbCBpbmZlcmVuY2UgZ3JhcGggZnJvbSBUZW5zb3JmbG93IEdyYXBoRGVmIHRvIGxvY2FsXG4gIC8vIHJlcHJlc2VudGF0aW9uIGZvciBUZW5zb3JGbG93LmpzIEFQSVxuICB0cmFuc2Zvcm1HcmFwaChcbiAgICAgIGdyYXBoOiB0ZW5zb3JmbG93LklHcmFwaERlZixcbiAgICAgIHNpZ25hdHVyZTogdGVuc29yZmxvdy5JU2lnbmF0dXJlRGVmID0ge30pOiBHcmFwaCB7XG4gICAgY29uc3QgdGZOb2RlcyA9IGdyYXBoLm5vZGU7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJzOiBOb2RlW10gPSBbXTtcbiAgICBjb25zdCB3ZWlnaHRzOiBOb2RlW10gPSBbXTtcbiAgICBjb25zdCBpbml0Tm9kZXM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IG5vZGVzID0gdGZOb2Rlcy5yZWR1Y2U8e1trZXk6IHN0cmluZ106IE5vZGV9PigobWFwLCBub2RlKSA9PiB7XG4gICAgICBtYXBbbm9kZS5uYW1lXSA9IHRoaXMubWFwTm9kZShub2RlKTtcbiAgICAgIGlmIChub2RlLm9wLnN0YXJ0c1dpdGgoJ1BsYWNlaG9sZGVyJykpIHtcbiAgICAgICAgcGxhY2Vob2xkZXJzLnB1c2gobWFwW25vZGUubmFtZV0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnQ29uc3QnKSB7XG4gICAgICAgIHdlaWdodHMucHVzaChtYXBbbm9kZS5uYW1lXSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaW5wdXQgPT0gbnVsbCB8fCBub2RlLmlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbml0Tm9kZXMucHVzaChtYXBbbm9kZS5uYW1lXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH0sIHt9KTtcblxuICAgIGxldCBpbnB1dHM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IG91dHB1dHM6IE5vZGVbXSA9IFtdO1xuICAgIGxldCBpbnB1dE5vZGVOYW1lVG9LZXk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgbGV0IG91dHB1dE5vZGVOYW1lVG9LZXk6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgaWYgKHNpZ25hdHVyZSAhPSBudWxsKSB7XG4gICAgICBpbnB1dE5vZGVOYW1lVG9LZXkgPSB0aGlzLm1hcFNpZ25hdHVyZUVudHJpZXMoc2lnbmF0dXJlLmlucHV0cyk7XG4gICAgICBvdXRwdXROb2RlTmFtZVRvS2V5ID0gdGhpcy5tYXBTaWduYXR1cmVFbnRyaWVzKHNpZ25hdHVyZS5vdXRwdXRzKTtcbiAgICB9XG4gICAgY29uc3QgYWxsTm9kZXMgPSBPYmplY3Qua2V5cyhub2Rlcyk7XG4gICAgYWxsTm9kZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2tleV07XG4gICAgICBub2RlLmlucHV0TmFtZXMuZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgW25vZGVOYW1lLCAsIG91dHB1dE5hbWVdID0gZ2V0Tm9kZU5hbWVBbmRJbmRleChuYW1lKTtcbiAgICAgICAgY29uc3QgaW5wdXROb2RlID0gbm9kZXNbbm9kZU5hbWVdO1xuICAgICAgICBpZiAoaW5wdXROb2RlLm91dHB1dHMgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gaW5wdXROb2RlLm91dHB1dHMuaW5kZXhPZihvdXRwdXROYW1lKTtcbiAgICAgICAgICBpZiAob3V0cHV0SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dE5hbWUgPSBgJHtub2RlTmFtZX06JHtvdXRwdXRJbmRleH1gO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBpbnB1dCBuYW1lIHRvIHVzZSB0aGUgbWFwcGVkIG91dHB1dCBpbmRleCBkaXJlY3RseS5cbiAgICAgICAgICAgIG5vZGUuaW5wdXROYW1lc1tpbmRleF0gPSBpbnB1dE5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuaW5wdXRzLnB1c2goaW5wdXROb2RlKTtcbiAgICAgICAgaW5wdXROb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIGlmIHNpZ25hdHVyZSBoYXMgbm90IG91dHB1dHMgc2V0LCBhZGQgYW55IG5vZGUgdGhhdCBkb2VzIG5vdCBoYXZlXG4gICAgLy8gb3V0cHV0cy5cbiAgICBpZiAoT2JqZWN0LmtleXMob3V0cHV0Tm9kZU5hbWVUb0tleSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBhbGxOb2Rlcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1trZXldO1xuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBvdXRwdXRzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyhvdXRwdXROb2RlTmFtZVRvS2V5KS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsIF0gPSBnZXROb2RlTmFtZUFuZEluZGV4KG5hbWUpO1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZU5hbWVdO1xuICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9kZS5zaWduYXR1cmVLZXkgPSBvdXRwdXROb2RlTmFtZVRvS2V5W25hbWVdO1xuICAgICAgICAgIG91dHB1dHMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGlucHV0Tm9kZU5hbWVUb0tleSkubGVuZ3RoID4gMCkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXROb2RlTmFtZVRvS2V5KS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsIF0gPSBnZXROb2RlTmFtZUFuZEluZGV4KG5hbWUpO1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZU5hbWVdO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgIG5vZGUuc2lnbmF0dXJlS2V5ID0gaW5wdXROb2RlTmFtZVRvS2V5W25hbWVdO1xuICAgICAgICAgIGlucHV0cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzID0gcGxhY2Vob2xkZXJzO1xuICAgIH1cblxuICAgIGxldCBmdW5jdGlvbnMgPSB7fTtcbiAgICBpZiAoZ3JhcGgubGlicmFyeSAhPSBudWxsICYmIGdyYXBoLmxpYnJhcnkuZnVuY3Rpb24gIT0gbnVsbCkge1xuICAgICAgZnVuY3Rpb25zID0gZ3JhcGgubGlicmFyeS5mdW5jdGlvbi5yZWR1Y2UoKGZ1bmN0aW9ucywgZnVuYykgPT4ge1xuICAgICAgICBmdW5jdGlvbnNbZnVuYy5zaWduYXR1cmUubmFtZV0gPSB0aGlzLm1hcEZ1bmN0aW9uKGZ1bmMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb25zO1xuICAgICAgfSwge30gYXMge1trZXk6IHN0cmluZ106IEdyYXBofSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBHcmFwaCA9XG4gICAgICAgIHtub2RlcywgaW5wdXRzLCBvdXRwdXRzLCB3ZWlnaHRzLCBwbGFjZWhvbGRlcnMsIHNpZ25hdHVyZSwgZnVuY3Rpb25zfTtcblxuICAgIGlmIChpbml0Tm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0LmluaXROb2RlcyA9IGluaXROb2RlcztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTaWduYXR1cmVFbnRyaWVzKGVudHJpZXM6IHtbazogc3RyaW5nXTogdGVuc29yZmxvdy5JVGVuc29ySW5mb30pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50cmllcyB8fCB7fSlcbiAgICAgICAgLnJlZHVjZTx7W2tleTogc3RyaW5nXTogc3RyaW5nfT4oKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICBwcmV2W2VudHJpZXNbY3Vycl0ubmFtZV0gPSBjdXJyO1xuICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICB9LCB7fSk7XG4gIH1cblxuICBwcml2YXRlIG1hcE5vZGUobm9kZTogdGVuc29yZmxvdy5JTm9kZURlZik6IE5vZGUge1xuICAgIC8vIFVuc3VwcG9ydGVkIG9wcyB3aWxsIGNhdXNlIGFuIGVycm9yIGF0IHJ1bi10aW1lIChub3QgcGFyc2UgdGltZSksIHNpbmNlXG4gICAgLy8gdGhleSBtYXkgbm90IGJlIHVzZWQgYnkgdGhlIGFjdHVhbCBleGVjdXRpb24gc3ViZ3JhcGguXG4gICAgY29uc3QgbWFwcGVyID1cbiAgICAgICAgZ2V0UmVnaXN0ZXJlZE9wKG5vZGUub3ApIHx8IHRoaXMub3BNYXBwZXJzW25vZGUub3BdIHx8IHt9IGFzIE9wTWFwcGVyO1xuICAgIGlmIChub2RlLmF0dHIgPT0gbnVsbCkge1xuICAgICAgbm9kZS5hdHRyID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Tm9kZTogTm9kZSA9IHtcbiAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgIG9wOiBub2RlLm9wLFxuICAgICAgY2F0ZWdvcnk6IG1hcHBlci5jYXRlZ29yeSxcbiAgICAgIGlucHV0TmFtZXM6XG4gICAgICAgICAgKG5vZGUuaW5wdXQgfHxcbiAgICAgICAgICAgW10pLm1hcChpbnB1dCA9PiBpbnB1dC5zdGFydHNXaXRoKCdeJykgPyBpbnB1dC5zbGljZSgxKSA6IGlucHV0KSxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICBpbnB1dFBhcmFtczoge30sXG4gICAgICBhdHRyUGFyYW1zOiB7fSxcbiAgICAgIHJhd0F0dHJzOiBub2RlLmF0dHIsXG4gICAgICBvdXRwdXRzOiBtYXBwZXIub3V0cHV0c1xuICAgIH07XG5cbiAgICBpZiAobWFwcGVyLmlucHV0cyAhPSBudWxsKSB7XG4gICAgICBuZXdOb2RlLmlucHV0UGFyYW1zID1cbiAgICAgICAgICBtYXBwZXIuaW5wdXRzLnJlZHVjZTx7W2tleTogc3RyaW5nXTogSW5wdXRQYXJhbVZhbHVlfT4oXG4gICAgICAgICAgICAgIChtYXAsIHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwW3BhcmFtLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW0udHlwZSxcbiAgICAgICAgICAgICAgICAgIGlucHV0SW5kZXhTdGFydDogcGFyYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICBpbnB1dEluZGV4RW5kOiBwYXJhbS5lbmRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHt9KTtcbiAgICB9XG4gICAgaWYgKG1hcHBlci5hdHRycyAhPSBudWxsKSB7XG4gICAgICBuZXdOb2RlLmF0dHJQYXJhbXMgPVxuICAgICAgICAgIG1hcHBlci5hdHRycy5yZWR1Y2U8e1trZXk6IHN0cmluZ106IFBhcmFtVmFsdWV9PigobWFwLCBwYXJhbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHBhcmFtLnR5cGU7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFN0cmluZ1BhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nW10nOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXROdW1iZXJQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIChwYXJhbS5kZWZhdWx0VmFsdWUgfHwgMCkgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0TnVtYmVyUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyW10nOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0TnVtZXJpY0FycmF5UGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXROdW1lcmljQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcltdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0Qm9vbFBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRCb29sUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBib29sZWFuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2Jvb2xbXSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRCb29sQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50Zk5hbWUsIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBib29sZWFuW10pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRCb29sQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW5bXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdzaGFwZSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRUZW5zb3JTaGFwZVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcltdKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0VGVuc29yU2hhcGVQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcltdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3NoYXBlW10nOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0VGVuc29yU2hhcGVBcnJheVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmTmFtZSwgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIG51bWJlcltdW10pO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRUZW5zb3JTaGFwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRyLCBwYXJhbS50ZkRlcHJlY2F0ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXVtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2R0eXBlJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldER0eXBlUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgRGF0YVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEhcGFyYW0udGZEZXByZWNhdGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXREdHlwZVBhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgRGF0YVR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZHR5cGVbXSc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXREdHlwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgRGF0YVR5cGVbXSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgISFwYXJhbS50ZkRlcHJlY2F0ZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldER0eXBlQXJyYXlQYXJhbShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHIsIHBhcmFtLnRmRGVwcmVjYXRlZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlIGFzIERhdGFUeXBlW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZnVuYyc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRGdW5jUGFyYW0oXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZOYW1lLCBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhIXBhcmFtLnRmRGVwcmVjYXRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0RnVuY1BhcmFtKFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0ciwgcGFyYW0udGZEZXByZWNhdGVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3RlbnNvcic6XG4gICAgICAgICAgICAgIGNhc2UgJ3RlbnNvcnMnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHBhcmFtIHR5cGU6ICR7cGFyYW0udHlwZX0gZm9yIG9wOiAke25vZGUub3B9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXBbcGFyYW0ubmFtZV0gPSB7dmFsdWUsIHR5cGV9O1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdOb2RlO1xuICB9XG5cbiAgLy8gbWFwIHRoZSBURnVuY3Rpb25EZWYgdG8gVEZKUyBncmFwaCBvYmplY3RcbiAgcHJpdmF0ZSBtYXBGdW5jdGlvbihmdW5jdGlvbkRlZjogdGVuc29yZmxvdy5JRnVuY3Rpb25EZWYpOiBHcmFwaCB7XG4gICAgY29uc3QgdGZOb2RlcyA9IGZ1bmN0aW9uRGVmLm5vZGVEZWY7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJzOiBOb2RlW10gPSBbXTtcbiAgICBjb25zdCB3ZWlnaHRzOiBOb2RlW10gPSBbXTtcbiAgICBsZXQgbm9kZXM6IHtba2V5OiBzdHJpbmddOiBOb2RlfSA9IHt9O1xuICAgIGlmICh0Zk5vZGVzICE9IG51bGwpIHtcbiAgICAgIG5vZGVzID0gdGZOb2Rlcy5yZWR1Y2U8e1trZXk6IHN0cmluZ106IE5vZGV9PigobWFwLCBub2RlKSA9PiB7XG4gICAgICAgIG1hcFtub2RlLm5hbWVdID0gdGhpcy5tYXBOb2RlKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5vcCA9PT0gJ0NvbnN0Jykge1xuICAgICAgICAgIHdlaWdodHMucHVzaChtYXBbbm9kZS5uYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzOiBOb2RlW10gPSBbXTtcbiAgICBjb25zdCBvdXRwdXRzOiBOb2RlW10gPSBbXTtcblxuICAgIGZ1bmN0aW9uRGVmLnNpZ25hdHVyZS5pbnB1dEFyZy5mb3JFYWNoKGFyZyA9PiB7XG4gICAgICBjb25zdCBbbm9kZU5hbWUsIF0gPSBnZXROb2RlTmFtZUFuZEluZGV4KGFyZy5uYW1lKTtcbiAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICAgIG5hbWU6IG5vZGVOYW1lLFxuICAgICAgICBvcDogJ1BsYWNlaG9sZGVyJyxcbiAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgaW5wdXROYW1lczogW10sXG4gICAgICAgIGNhdGVnb3J5OiAnZ3JhcGgnLFxuICAgICAgICBpbnB1dFBhcmFtczoge30sXG4gICAgICAgIGF0dHJQYXJhbXM6IHtkdHlwZToge3ZhbHVlOiBwYXJzZUR0eXBlUGFyYW0oYXJnLnR5cGUpLCB0eXBlOiAnZHR5cGUnfX0sXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfTtcbiAgICAgIG5vZGUuc2lnbmF0dXJlS2V5ID0gYXJnLm5hbWU7XG4gICAgICBpbnB1dHMucHVzaChub2RlKTtcbiAgICAgIG5vZGVzW25vZGVOYW1lXSA9IG5vZGU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxOb2RlcyA9IE9iamVjdC5rZXlzKG5vZGVzKTtcbiAgICBhbGxOb2Rlcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNba2V5XTtcbiAgICAgIG5vZGUuaW5wdXROYW1lcy5mb3JFYWNoKChuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsICwgb3V0cHV0TmFtZV0gPSBnZXROb2RlTmFtZUFuZEluZGV4KG5hbWUpO1xuICAgICAgICBjb25zdCBpbnB1dE5vZGUgPSBub2Rlc1tub2RlTmFtZV07XG4gICAgICAgIGlmIChpbnB1dE5vZGUub3V0cHV0cyAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBpbnB1dE5vZGUub3V0cHV0cy5pbmRleE9mKG91dHB1dE5hbWUpO1xuICAgICAgICAgIGlmIChvdXRwdXRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0TmFtZSA9IGAke25vZGVOYW1lfToke291dHB1dEluZGV4fWA7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IG5hbWUgdG8gdXNlIHRoZSBtYXBwZWQgb3V0cHV0IGluZGV4IGRpcmVjdGx5LlxuICAgICAgICAgICAgbm9kZS5pbnB1dE5hbWVzW2luZGV4XSA9IGlucHV0TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5pbnB1dHMucHVzaChpbnB1dE5vZGUpO1xuICAgICAgICBpbnB1dE5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmV0dXJuTm9kZU1hcCA9IGZ1bmN0aW9uRGVmLnJldDtcblxuICAgIGZ1bmN0aW9uRGVmLnNpZ25hdHVyZS5vdXRwdXRBcmcuZm9yRWFjaChvdXRwdXQgPT4ge1xuICAgICAgY29uc3QgW25vZGVOYW1lLCBpbmRleF0gPSBnZXROb2RlTmFtZUFuZEluZGV4KHJldHVybk5vZGVNYXBbb3V0cHV0Lm5hbWVdKTtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlTmFtZV07XG4gICAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgIG5vZGUuZGVmYXVsdE91dHB1dCA9IGluZGV4O1xuICAgICAgICBvdXRwdXRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLm1hcEFyZ3NUb1NpZ25hdHVyZShmdW5jdGlvbkRlZik7XG4gICAgcmV0dXJuIHtub2RlcywgaW5wdXRzLCBvdXRwdXRzLCB3ZWlnaHRzLCBwbGFjZWhvbGRlcnMsIHNpZ25hdHVyZX07XG4gIH1cblxuICBwcml2YXRlIG1hcEFyZ3NUb1NpZ25hdHVyZShmdW5jdGlvbkRlZjogdGVuc29yZmxvdy5JRnVuY3Rpb25EZWYpOlxuICAgICAgdGVuc29yZmxvdy5JU2lnbmF0dXJlRGVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kTmFtZTogZnVuY3Rpb25EZWYuc2lnbmF0dXJlLm5hbWUsXG4gICAgICBpbnB1dHM6IGZ1bmN0aW9uRGVmLnNpZ25hdHVyZS5pbnB1dEFyZy5yZWR1Y2UoXG4gICAgICAgICAgKG1hcCwgYXJnKSA9PiB7XG4gICAgICAgICAgICBtYXBbYXJnLm5hbWVdID0gdGhpcy5tYXBBcmdUb1RlbnNvckluZm8oYXJnKTtcbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7fSBhcyB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JVGVuc29ySW5mb30pLFxuICAgICAgb3V0cHV0czogZnVuY3Rpb25EZWYuc2lnbmF0dXJlLm91dHB1dEFyZy5yZWR1Y2UoXG4gICAgICAgICAgKG1hcCwgYXJnKSA9PiB7XG4gICAgICAgICAgICBtYXBbYXJnLm5hbWVdID0gdGhpcy5tYXBBcmdUb1RlbnNvckluZm8oYXJnLCBmdW5jdGlvbkRlZi5yZXQpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklUZW5zb3JJbmZvfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQXJnVG9UZW5zb3JJbmZvKFxuICAgICAgYXJnOiB0ZW5zb3JmbG93Lk9wRGVmLklBcmdEZWYsXG4gICAgICBuYW1lTWFwPzoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiB0ZW5zb3JmbG93LklUZW5zb3JJbmZvIHtcbiAgICBsZXQgbmFtZSA9IGFyZy5uYW1lO1xuICAgIGlmIChuYW1lTWFwICE9IG51bGwpIHtcbiAgICAgIG5hbWUgPSBuYW1lTWFwW25hbWVdO1xuICAgIH1cbiAgICByZXR1cm4ge25hbWUsIGR0eXBlOiBhcmcudHlwZX07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2U2NCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBnbG9iYWwgPSBlbnYoKS5nbG9iYWw7XG4gIGlmICh0eXBlb2YgZ2xvYmFsLmF0b2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5hdG9iKHRleHQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodGV4dCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVW5hYmxlIHRvIGRlY29kZSBiYXNlNjQgaW4gdGhpcyBlbnZpcm9ubWVudC4gJyArXG4gICAgICAgICdNaXNzaW5nIGJ1aWx0LWluIGF0b2IoKSBvciBCdWZmZXIoKScpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZ1BhcmFtKHM6IFtdfHN0cmluZywga2VlcENhc2U6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgICBBcnJheS5pc0FycmF5KHMpID8gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBzKSA6IGRlY29kZUJhc2U2NChzKTtcbiAgcmV0dXJuIGtlZXBDYXNlID8gdmFsdWUgOiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nUGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nLFxuICAgIGtlZXBDYXNlID0gZmFsc2UpOiBzdHJpbmcge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0gIT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJzZVN0cmluZ1BhcmFtKHBhcmFtLnMsIGtlZXBDYXNlKTtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9vbFBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICByZXR1cm4gcGFyYW0gPyBwYXJhbS5iIDogZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyUGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdIHx8IHt9O1xuICBjb25zdCB2YWx1ZSA9XG4gICAgICBwYXJhbVsnaSddICE9IG51bGwgPyBwYXJhbVsnaSddIDogKHBhcmFtWydmJ10gIT0gbnVsbCA/IHBhcmFtWydmJ10gOiBkZWYpO1xuICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpID8gdmFsdWUgOiBwYXJzZUludCh2YWx1ZSwgMTApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdHlwZVBhcmFtKHZhbHVlOiBzdHJpbmd8dGVuc29yZmxvdy5EYXRhVHlwZSk6IERhdGFUeXBlIHtcbiAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICB2YWx1ZSA9IHRlbnNvcmZsb3cuRGF0YVR5cGVbdmFsdWUgYXMgYW55XTtcbiAgfVxuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0ZMT0FUOlxuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9IQUxGOlxuICAgICAgcmV0dXJuICdmbG9hdDMyJztcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfSU5UMzI6XG4gICAgY2FzZSB0ZW5zb3JmbG93LkRhdGFUeXBlLkRUX0lOVDY0OlxuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9JTlQ4OlxuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9VSU5UODpcbiAgICAgIHJldHVybiAnaW50MzInO1xuICAgIGNhc2UgdGVuc29yZmxvdy5EYXRhVHlwZS5EVF9CT09MOlxuICAgICAgcmV0dXJuICdib29sJztcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfRE9VQkxFOlxuICAgICAgcmV0dXJuICdmbG9hdDMyJztcbiAgICBjYXNlIHRlbnNvcmZsb3cuRGF0YVR5cGUuRFRfU1RSSU5HOlxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBVbmtub3duIGR0eXBlIGVycm9yIHdpbGwgaGFwcGVuIGF0IHJ1bnRpbWUgKGluc3RlYWQgb2YgcGFyc2UgdGltZSksXG4gICAgICAvLyBzaW5jZSB0aGVzZSBub2RlcyBtaWdodCBub3QgYmUgdXNlZCBieSB0aGUgYWN0dWFsIHN1YmdyYXBoIGV4ZWN1dGlvbi5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jUGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0gJiYgcGFyYW0uZnVuYykge1xuICAgIHJldHVybiBwYXJhbS5mdW5jLm5hbWU7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldER0eXBlUGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBEYXRhVHlwZSk6IERhdGFUeXBlIHtcbiAgY29uc3QgcGFyYW0gPSBhdHRyc1tuYW1lXTtcbiAgaWYgKHBhcmFtICYmIHBhcmFtLnR5cGUpIHtcbiAgICByZXR1cm4gcGFyc2VEdHlwZVBhcmFtKHBhcmFtLnR5cGUpO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdHlwZUFycmF5UGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBEYXRhVHlwZVtdKTogRGF0YVR5cGVbXSB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAmJiBwYXJhbS5saXN0ICYmIHBhcmFtLmxpc3QudHlwZSkge1xuICAgIHJldHVybiBwYXJhbS5saXN0LnR5cGUubWFwKHYgPT4gcGFyc2VEdHlwZVBhcmFtKHYpKTtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZW5zb3JTaGFwZVBhcmFtKHNoYXBlOiB0ZW5zb3JmbG93LklUZW5zb3JTaGFwZSk6IG51bWJlcltdfFxuICAgIHVuZGVmaW5lZCB7XG4gIGlmIChzaGFwZS51bmtub3duUmFuaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNoYXBlLmRpbSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHNoYXBlLmRpbS5tYXAoXG4gICAgICAgIGRpbSA9PlxuICAgICAgICAgICAgKHR5cGVvZiBkaW0uc2l6ZSA9PT0gJ251bWJlcicpID8gZGltLnNpemUgOiBwYXJzZUludChkaW0uc2l6ZSwgMTApKTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5zb3JTaGFwZVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZj86IG51bWJlcltdKTogbnVtYmVyW118dW5kZWZpbmVkIHtcbiAgY29uc3QgcGFyYW0gPSBhdHRyc1tuYW1lXTtcbiAgaWYgKHBhcmFtICYmIHBhcmFtLnNoYXBlKSB7XG4gICAgcmV0dXJuIHBhcnNlVGVuc29yU2hhcGVQYXJhbShwYXJhbS5zaGFwZSk7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWVyaWNBcnJheVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSkge1xuICAgIHJldHVybiAoKHBhcmFtLmxpc3QuZiAmJiBwYXJhbS5saXN0LmYubGVuZ3RoID8gcGFyYW0ubGlzdC5mIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmxpc3QuaSkgfHxcbiAgICAgICAgICAgIFtdKVxuICAgICAgICAubWFwKHYgPT4gKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgPyB2IDogcGFyc2VJbnQodiwgMTApKTtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nQXJyYXlQYXJhbShcbiAgICBhdHRyczoge1trZXk6IHN0cmluZ106IHRlbnNvcmZsb3cuSUF0dHJWYWx1ZX0sIG5hbWU6IHN0cmluZywgZGVmOiBzdHJpbmdbXSxcbiAgICBrZWVwQ2FzZSA9IGZhbHNlKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJhbSA9IGF0dHJzW25hbWVdO1xuICBpZiAocGFyYW0gJiYgcGFyYW0ubGlzdCAmJiBwYXJhbS5saXN0LnMpIHtcbiAgICByZXR1cm4gcGFyYW0ubGlzdC5zLm1hcCgodikgPT4ge1xuICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nUGFyYW0odiwga2VlcENhc2UpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW5zb3JTaGFwZUFycmF5UGFyYW0oXG4gICAgYXR0cnM6IHtba2V5OiBzdHJpbmddOiB0ZW5zb3JmbG93LklBdHRyVmFsdWV9LCBuYW1lOiBzdHJpbmcsXG4gICAgZGVmOiBudW1iZXJbXVtdKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHBhcmFtID0gYXR0cnNbbmFtZV07XG4gIGlmIChwYXJhbSAmJiBwYXJhbS5saXN0ICYmIHBhcmFtLmxpc3Quc2hhcGUpIHtcbiAgICByZXR1cm4gcGFyYW0ubGlzdC5zaGFwZS5tYXAoKHYpID0+IHtcbiAgICAgIHJldHVybiBwYXJzZVRlbnNvclNoYXBlUGFyYW0odik7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGRlZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xBcnJheVBhcmFtKFxuICAgIGF0dHJzOiB7W2tleTogc3RyaW5nXTogdGVuc29yZmxvdy5JQXR0clZhbHVlfSwgbmFtZTogc3RyaW5nLFxuICAgIGRlZjogYm9vbGVhbltdKTogYm9vbGVhbltdIHtcbiAgY29uc3QgcGFyYW0gPSBhdHRyc1tuYW1lXTtcbiAgaWYgKHBhcmFtICYmIHBhcmFtLmxpc3QgJiYgcGFyYW0ubGlzdC5iKSB7XG4gICAgcmV0dXJuIHBhcmFtLmxpc3QuYjtcbiAgfVxuICByZXR1cm4gZGVmO1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getTensor } from '../executors/utils';\nimport { getBoolArrayParam, getBoolParam, getDtypeArrayParam, getDtypeParam, getNumberParam, getNumericArrayParam, getStringArrayParam, getStringParam, getTensorShapeArrayParam, getTensorShapeParam } from '../operation_mapper';\n/**\n * Helper class for lookup inputs and params for nodes in the model graph.\n */\nexport class NodeValueImpl {\n constructor(node, tensorMap, context) {\n this.node = node;\n this.tensorMap = tensorMap;\n this.context = context;\n this.inputs = [];\n this.attrs = {};\n this.inputs = node.inputNames.map(name => this.getInput(name));\n if (node.rawAttrs != null) {\n this.attrs = Object.keys(node.rawAttrs)\n .reduce((attrs, key) => {\n attrs[key] = this.getAttr(key);\n return attrs;\n }, {});\n }\n }\n /**\n * Return the value of the attribute or input param.\n * @param name String: name of attribute or input param.\n */\n getInput(name) {\n return getTensor(name, this.tensorMap, this.context);\n }\n /**\n * Return the value of the attribute or input param.\n * @param name String: name of attribute or input param.\n */\n getAttr(name, defaultValue) {\n const value = this.node.rawAttrs[name];\n if (value.tensor != null) {\n return getTensor(name, this.tensorMap, this.context);\n }\n if (value.i != null || value.f != null) {\n return getNumberParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.s != null) {\n return getStringParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.b != null) {\n return getBoolParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.shape != null) {\n return getTensorShapeParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.type != null) {\n return getDtypeParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list != null) {\n if (value.list.i != null || value.list.f != null) {\n return getNumericArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.s != null) {\n return getStringArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.shape != null) {\n return getTensorShapeArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.b != null) {\n return getBoolArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n if (value.list.type != null) {\n return getDtypeArrayParam(this.node.rawAttrs, name, defaultValue);\n }\n }\n return defaultValue;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV92YWx1ZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvY3VzdG9tX29wL25vZGVfdmFsdWVfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFNSCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBR2pPOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFDWSxJQUFVLEVBQVUsU0FBMEIsRUFDOUMsT0FBeUI7UUFEekIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzlDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBSnJCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUErQixFQUFFLENBQUM7UUFJckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUNyQixNQUFNLENBQUMsQ0FBQyxLQUFpQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNqRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFD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SSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQTBCLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RhdGFUeXBlLCBUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtnZXRUZW5zb3J9IGZyb20gJy4uL2V4ZWN1dG9ycy91dGlscyc7XG5pbXBvcnQge2dldEJvb2xBcnJheVBhcmFtLCBnZXRCb29sUGFyYW0sIGdldER0eXBlQXJyYXlQYXJhbSwgZ2V0RHR5cGVQYXJhbSwgZ2V0TnVtYmVyUGFyYW0sIGdldE51bWVyaWNBcnJheVBhcmFtLCBnZXRTdHJpbmdBcnJheVBhcmFtLCBnZXRTdHJpbmdQYXJhbSwgZ2V0VGVuc29yU2hhcGVBcnJheVBhcmFtLCBnZXRUZW5zb3JTaGFwZVBhcmFtfSBmcm9tICcuLi9vcGVyYXRpb25fbWFwcGVyJztcbmltcG9ydCB7R3JhcGhOb2RlLCBOb2RlLCBWYWx1ZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIGxvb2t1cCBpbnB1dHMgYW5kIHBhcmFtcyBmb3Igbm9kZXMgaW4gdGhlIG1vZGVsIGdyYXBoLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZVZhbHVlSW1wbCBpbXBsZW1lbnRzIEdyYXBoTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IFRlbnNvcltdID0gW107XG4gIHB1YmxpYyByZWFkb25seSBhdHRyczoge1trZXk6IHN0cmluZ106IFZhbHVlVHlwZX0gPSB7fTtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIG5vZGU6IE5vZGUsIHByaXZhdGUgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgICBwcml2YXRlIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICB0aGlzLmlucHV0cyA9IG5vZGUuaW5wdXROYW1lcy5tYXAobmFtZSA9PiB0aGlzLmdldElucHV0KG5hbWUpKTtcbiAgICBpZiAobm9kZS5yYXdBdHRycyAhPSBudWxsKSB7XG4gICAgICB0aGlzLmF0dHJzID0gT2JqZWN0LmtleXMobm9kZS5yYXdBdHRycylcbiAgICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYXR0cnM6IHtba2V5OiBzdHJpbmddOiBWYWx1ZVR5cGV9LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1trZXldID0gdGhpcy5nZXRBdHRyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nOiBuYW1lIG9mIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0SW5wdXQobmFtZTogc3RyaW5nKTogVGVuc29yIHtcbiAgICByZXR1cm4gZ2V0VGVuc29yKG5hbWUsIHRoaXMudGVuc29yTWFwLCB0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nOiBuYW1lIG9mIGF0dHJpYnV0ZSBvciBpbnB1dCBwYXJhbS5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXR0cihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IFZhbHVlVHlwZSk6IFZhbHVlVHlwZSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm5vZGUucmF3QXR0cnNbbmFtZV07XG4gICAgaWYgKHZhbHVlLnRlbnNvciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0VGVuc29yKG5hbWUsIHRoaXMudGVuc29yTWFwLCB0aGlzLmNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaSAhPSBudWxsIHx8IHZhbHVlLmYgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGdldE51bWJlclBhcmFtKHRoaXMubm9kZS5yYXdBdHRycywgbmFtZSwgZGVmYXVsdFZhbHVlIGFzIG51bWJlcik7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBnZXRTdHJpbmdQYXJhbSh0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0Qm9vbFBhcmFtKHRoaXMubm9kZS5yYXdBdHRycywgbmFtZSwgZGVmYXVsdFZhbHVlIGFzIGJvb2xlYW4pO1xuICAgIH1cbiAgICBpZiAodmFsdWUuc2hhcGUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGdldFRlbnNvclNoYXBlUGFyYW0oXG4gICAgICAgICAgdGhpcy5ub2RlLnJhd0F0dHJzLCBuYW1lLCBkZWZhdWx0VmFsdWUgYXMgbnVtYmVyW10pO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0RHR5cGVQYXJhbSh0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5saXN0ICE9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZS5saXN0LmkgIT0gbnVsbCB8fCB2YWx1ZS5saXN0LmYgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0TnVtZXJpY0FycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUubGlzdC5zICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdldFN0cmluZ0FycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBzdHJpbmdbXSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUubGlzdC5zaGFwZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnZXRUZW5zb3JTaGFwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBudW1iZXJbXVtdKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5saXN0LmIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0Qm9vbEFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBib29sZWFuW10pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLmxpc3QudHlwZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnZXREdHlwZUFycmF5UGFyYW0oXG4gICAgICAgICAgICB0aGlzLm5vZGUucmF3QXR0cnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSBhcyBEYXRhVHlwZVtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * This file exports ops used by the converters executors. By default it\n * re-exports all ops. In a custom build this is aliased to a file that will\n * only exports ops for a given model.json.\n */\nexport * from './ops';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzX2Zvcl9jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL29wcy9vcHNfZm9yX2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7OztHQUlHO0FBQ0gsY0FBYyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qKlxuICogVGhpcyBmaWxlIGV4cG9ydHMgb3BzIHVzZWQgYnkgdGhlIGNvbnZlcnRlcnMgZXhlY3V0b3JzLiBCeSBkZWZhdWx0IGl0XG4gKiByZS1leHBvcnRzIGFsbCBvcHMuIEluIGEgY3VzdG9tIGJ1aWxkIHRoaXMgaXMgYWxpYXNlZCB0byBhIGZpbGUgdGhhdCB3aWxsXG4gKiBvbmx5IGV4cG9ydHMgb3BzIGZvciBhIGdpdmVuIG1vZGVsLmpzb24uXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vb3BzJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'BiasAdd':\n case 'AddV2':\n case 'Add': {\n return [ops.add(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'AddN': {\n return [ops.addN(getParamValue('tensors', node, tensorMap, context))];\n }\n case 'FloorMod':\n case 'Mod':\n return [ops.mod(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n case 'Mul':\n return [ops.mul(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n case 'RealDiv':\n case 'Div': {\n return [ops.div(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'DivNoNan': {\n return [ops.divNoNan(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'FloorDiv': {\n return [ops.floorDiv(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Sub': {\n return [ops.sub(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Minimum': {\n return [ops.minimum(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Maximum': {\n return [ops.maximum(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Pow': {\n return [ops.pow(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'SquaredDifference': {\n return [ops.squaredDifference(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'arithmetic';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpdGhtZXRpY19leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9hcml0aG1ldGljX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUN0QyxPQUF5QixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNWLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksRUFDeEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1gsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FB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SUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQmlhc0FkZCc6XG4gICAgICAgIGNhc2UgJ0FkZFYyJzpcbiAgICAgICAgY2FzZSAnQWRkJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmFkZChcbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciksXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0FkZE4nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWRkTigoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdKSldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0Zsb29yTW9kJzpcbiAgICAgICAgY2FzZSAnTW9kJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5tb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ011bCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubXVsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdSZWFsRGl2JzpcbiAgICAgICAgY2FzZSAnRGl2Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmRpdihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEaXZOb05hbic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5kaXZOb05hbihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdGbG9vckRpdic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5mbG9vckRpdihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdWInOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc3ViKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ01pbmltdW0nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWluaW11bShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdNYXhpbXVtJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLm1heGltdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUG93Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnBvdyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXVhcmVkRGlmZmVyZW5jZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVhcmVkRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2FyaXRobWV0aWMnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue, getTensor } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Abs':\n case 'ComplexAbs':\n return [ops.abs(getParamValue('x', node, tensorMap, context))];\n case 'Acos':\n return [ops.acos(getParamValue('x', node, tensorMap, context))];\n case 'Acosh':\n return [ops.acosh(getParamValue('x', node, tensorMap, context))];\n case 'Asin':\n return [ops.asin(getParamValue('x', node, tensorMap, context))];\n case 'Asinh':\n return [ops.asinh(getParamValue('x', node, tensorMap, context))];\n case 'Atan':\n return [ops.atan(getParamValue('x', node, tensorMap, context))];\n case 'Atan2':\n return [ops.atan2(getParamValue('x', node, tensorMap, context), getParamValue('y', node, tensorMap, context))];\n case 'Atanh':\n return [ops.atanh(getParamValue('x', node, tensorMap, context))];\n case 'Ceil':\n return [ops.ceil(getParamValue('x', node, tensorMap, context))];\n case 'Complex':\n return [ops.complex(getParamValue('real', node, tensorMap, context), getParamValue('imag', node, tensorMap, context))];\n case 'Cos':\n return [ops.cos(getParamValue('x', node, tensorMap, context))];\n case 'Cosh':\n return [ops.cosh(getParamValue('x', node, tensorMap, context))];\n case 'Elu':\n return [ops.elu(getParamValue('x', node, tensorMap, context))];\n case 'Erf':\n return [ops.erf(getParamValue('x', node, tensorMap, context))];\n case 'Exp':\n return [ops.exp(getParamValue('x', node, tensorMap, context))];\n case 'Expm1': {\n return [ops.expm1(getParamValue('x', node, tensorMap, context))];\n }\n case 'Floor':\n return [ops.floor(getParamValue('x', node, tensorMap, context))];\n case 'Log':\n return [ops.log(getParamValue('x', node, tensorMap, context))];\n case 'Log1p': {\n return [ops.log1p(getParamValue('x', node, tensorMap, context))];\n }\n case 'Imag':\n return [ops.imag(getParamValue('x', node, tensorMap, context))];\n case 'Neg':\n return [ops.neg(getParamValue('x', node, tensorMap, context))];\n case 'Reciprocal': {\n return [ops.reciprocal(getParamValue('x', node, tensorMap, context))];\n }\n case 'Real':\n return [ops.real(getParamValue('x', node, tensorMap, context))];\n case 'Relu':\n return [ops.relu(getParamValue('x', node, tensorMap, context))];\n case 'Round': {\n return [ops.round(getParamValue('x', node, tensorMap, context))];\n }\n case 'Selu':\n return [ops.selu(getParamValue('x', node, tensorMap, context))];\n case 'Sigmoid':\n return [ops.sigmoid(getParamValue('x', node, tensorMap, context))];\n case 'Sin':\n return [ops.sin(getParamValue('x', node, tensorMap, context))];\n case 'Sign': {\n return [ops.sign(getParamValue('x', node, tensorMap, context))];\n }\n case 'Sinh': {\n return [ops.sinh(getParamValue('x', node, tensorMap, context))];\n }\n case 'Softplus': {\n return [ops.softplus(getParamValue('x', node, tensorMap, context))];\n }\n case 'Sqrt': {\n return [ops.sqrt(getParamValue('x', node, tensorMap, context))];\n }\n case 'Square': {\n return [ops.square(getParamValue('x', node, tensorMap, context))];\n }\n case 'Tanh': {\n return [ops.tanh(getParamValue('x', node, tensorMap, context))];\n }\n case 'Tan':\n return [ops.tan(getParamValue('x', node, tensorMap, context))];\n case 'ClipByValue':\n return [ops.clipByValue(getParamValue('x', node, tensorMap, context), getParamValue('clipValueMin', node, tensorMap, context), getParamValue('clipValueMax', node, tensorMap, context))];\n case 'Relu6':\n return [ops.relu6(getParamValue('x', node, tensorMap, context))];\n case 'Rsqrt':\n return [ops.rsqrt(getTensor(node.inputNames[0], tensorMap, context))];\n case 'LeakyRelu':\n return [ops.leakyRelu(getParamValue('x', node, tensorMap, context), getParamValue('alpha', node, tensorMap, context))];\n case 'Prelu':\n return [ops.prelu(getParamValue('x', node, tensorMap, context), getParamValue('alpha', node, tensorMap, context))];\n case 'IsNan':\n return [ops.isNaN(getTensor(node.inputNames[0], tensorMap, context))];\n case 'IsInf':\n return [ops.isInf(getTensor(node.inputNames[0], tensorMap, context))];\n case 'IsFinite':\n return [ops.isFinite(getTensor(node.inputNames[0], tensorMap, context))];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'basic_math';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNfbWF0aF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9iYXNpY19tYXRoX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDeEIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLFlBQVk7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDWCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBQy9ELEtBQUssTUFBTTtZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsS0FBSyxPQUFPO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ2IsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUMvRCxLQUFLLE1BQU07WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFX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QUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25FLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNiLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuRSxLQUFLLE9BQU87WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsS0FBSyxVQUFVO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQ7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlLCBnZXRUZW5zb3J9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQWJzJzpcbiAgICAgICAgY2FzZSAnQ29tcGxleEFicyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWJzKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQWNvcyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWNvcyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0Fjb3NoJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5hY29zaChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0FzaW4nOlxuICAgICAgICAgIHJldHVybiBbb3BzLmFzaW4oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBc2luaCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXNpbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBdGFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5hdGFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQXRhbjInOlxuICAgICAgICAgIHJldHVybiBbb3BzLmF0YW4yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3knLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdBdGFuaCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXRhbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDZWlsJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jZWlsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29tcGxleChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbWFnJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnQ29zJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jb3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDb3NoJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5jb3NoKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnRWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5lbHUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdFcmYnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmVyZihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0V4cCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXhwKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnRXhwbTEnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXhwbTEoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0Zsb29yJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5mbG9vcihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0xvZyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnTG9nMXAnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nMXAoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0ltYWcnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmltYWcoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuXG4gICAgICAgIGNhc2UgJ05lZyc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubmVnKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnUmVjaXByb2NhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yZWNpcHJvY2FsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdSZWFsJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5yZWFsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnUmVsdSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ1JvdW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJvdW5kKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTZWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5zZWx1KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnU2lnbW9pZCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2lnbW9pZChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ1Npbic6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2luKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgY2FzZSAnU2lnbic6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zaWduKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTaW5oJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNpbmgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NvZnRwbHVzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNvZnRwbHVzKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXJ0Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNxcnQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NxdWFyZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVhcmUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1RhbmgnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGFuaChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVGFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy50YW4oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdDbGlwQnlWYWx1ZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY2xpcEJ5VmFsdWUoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY2xpcFZhbHVlTWluJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2NsaXBWYWx1ZU1heCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIG51bWJlcildO1xuICAgICAgICBjYXNlICdSZWx1Nic6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVsdTYoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICBjYXNlICdSc3FydCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMucnNxcnQoZ2V0VGVuc29yKG5vZGUuaW5wdXROYW1lc1swXSwgdGVuc29yTWFwLCBjb250ZXh0KSldO1xuICAgICAgICBjYXNlICdMZWFreVJlbHUnOlxuICAgICAgICAgIHJldHVybiBbb3BzLmxlYWt5UmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIGNhc2UgJ1ByZWx1JzpcbiAgICAgICAgICByZXR1cm4gW29wcy5wcmVsdShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIGNhc2UgJ0lzTmFuJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc05hTihnZXRUZW5zb3Iobm9kZS5pbnB1dE5hbWVzWzBdLCB0ZW5zb3JNYXAsIGNvbnRleHQpKV07XG4gICAgICAgIGNhc2UgJ0lzSW5mJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc0luZihnZXRUZW5zb3Iobm9kZS5pbnB1dE5hbWVzWzBdLCB0ZW5zb3JNYXAsIGNvbnRleHQpKV07XG4gICAgICAgIGNhc2UgJ0lzRmluaXRlJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5pc0Zpbml0ZShcbiAgICAgICAgICAgICAgZ2V0VGVuc29yKG5vZGUuaW5wdXROYW1lc1swXSwgdGVuc29yTWFwLCBjb250ZXh0KSldO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2Jhc2ljX21hdGgnO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * This differs from util.assertShapesMatch in that it allows values of\n * negative one, an undefined size of a dimensinon, in a shape to match\n * anything.\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * Used by TensorList and TensorArray to verify if elementShape matches, support\n * negative value as the dim shape.\n * @param shapeA\n * @param shapeB\n * @param errorMessagePrefix\n */\nexport function assertShapesMatchAllowUndefinedSize(shapeA, shapeB, errorMessagePrefix = '') {\n // constant shape means unknown rank\n if (typeof shapeA === 'number' || typeof shapeB === 'number') {\n return;\n }\n util.assert(shapeA.length === shapeB.length, () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n for (let i = 0; i < shapeA.length; i++) {\n const dim0 = shapeA[i];\n const dim1 = shapeB[i];\n util.assert(dim0 < 0 || dim1 < 0 || dim0 === dim1, () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n }\n}\nexport function fullDefinedShape(elementShape) {\n if (typeof elementShape === 'number' || elementShape.some(dim => dim < 0)) {\n return false;\n }\n return true;\n}\n/**\n * Generate the output element shape from the list elementShape, list tensors\n * and input param.\n * @param listElementShape\n * @param tensors\n * @param elementShape\n */\nexport function inferElementShape(listElementShape, tensors, elementShape) {\n let partialShape = mergeElementShape(listElementShape, elementShape);\n const notfullDefinedShape = !fullDefinedShape(partialShape);\n if (notfullDefinedShape && tensors.length === 0) {\n throw new Error(`Tried to calculate elements of an empty list` +\n ` with non-fully-defined elementShape: ${partialShape}`);\n }\n if (notfullDefinedShape) {\n tensors.forEach(tensor => {\n partialShape = mergeElementShape(tensor.shape, partialShape);\n });\n }\n if (!fullDefinedShape(partialShape)) {\n throw new Error(`Non-fully-defined elementShape: ${partialShape}`);\n }\n return partialShape;\n}\nexport function mergeElementShape(elementShapeA, elementShapeB) {\n if (typeof elementShapeA === 'number') {\n return elementShapeB;\n }\n if (typeof elementShapeB === 'number') {\n return elementShapeA;\n }\n if (elementShapeA.length !== elementShapeB.length) {\n throw new Error(`Incompatible ranks during merge: ${elementShapeA} vs. ${elementShapeB}`);\n }\n const result = [];\n for (let i = 0; i < elementShapeA.length; ++i) {\n const dim0 = elementShapeA[i];\n const dim1 = elementShapeB[i];\n if (dim0 >= 0 && dim1 >= 0 && dim0 !== dim1) {\n throw new Error(`Incompatible shape during merge: ${elementShapeA} vs. ${elementShapeB}`);\n }\n result[i] = dim0 >= 0 ? dim0 : dim1;\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2V4ZWN1dG9yL3RlbnNvcl91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFTLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5EOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FDL0MsTUFBdUIsRUFBRSxNQUF1QixFQUNoRCxrQkFBa0IsR0FBRyxFQUFFO0lBQ3pCLG9DQUFvQztJQUNwQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDNUQsT0FBTztLQUNSO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQy9CLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsTUFBTSxRQUFRLE1BQU0sYUFBYSxDQUFDLENBQUM7SUFDN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUNQLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUNyQyxHQUFHLEVBQUUsQ0FDRCxrQkFBa0IsR0FBRyxXQUFXLE1BQU0sUUFBUSxNQUFNLGFBQWEsQ0FBQyxDQUFDO0tBQzVFO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxZQUE2QjtJQUM1RCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3pFLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLGdCQUFpQyxFQUFFLE9BQWlCLEVBQ3BELFlBQTZCO0lBQy9CLElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxJQUFJLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ1gsOENBQThDO1lBQzlDLHlDQUF5QyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsSUFBSSxtQkFBbUIsRUFBRTtRQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsWUFBWSxFQUFFLENBQUMsQ0FBQztLQUNwRTtJQUNELE9BQU8sWUFBd0IsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixhQUE4QixFQUFFLGFBQThCO0lBRWhFLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFO1FBQ3JDLE9BQU8sYUFBYSxDQUFDO0tBQ3RCO0lBQ0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7UUFDckMsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxhQUFhLFFBQzdELGFBQWEsRUFBRSxDQUFDLENBQUM7S0FDdEI7SUFFRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLGFBQWEsUUFDN0QsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztLQUNyQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbi8qKlxuICogVGhpcyBkaWZmZXJzIGZyb20gdXRpbC5hc3NlcnRTaGFwZXNNYXRjaCBpbiB0aGF0IGl0IGFsbG93cyB2YWx1ZXMgb2ZcbiAqIG5lZ2F0aXZlIG9uZSwgYW4gdW5kZWZpbmVkIHNpemUgb2YgYSBkaW1lbnNpbm9uLCBpbiBhIHNoYXBlIHRvIG1hdGNoXG4gKiBhbnl0aGluZy5cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuLyoqXG4gKiBVc2VkIGJ5IFRlbnNvckxpc3QgYW5kIFRlbnNvckFycmF5IHRvIHZlcmlmeSBpZiBlbGVtZW50U2hhcGUgbWF0Y2hlcywgc3VwcG9ydFxuICogbmVnYXRpdmUgdmFsdWUgYXMgdGhlIGRpbSBzaGFwZS5cbiAqIEBwYXJhbSBzaGFwZUFcbiAqIEBwYXJhbSBzaGFwZUJcbiAqIEBwYXJhbSBlcnJvck1lc3NhZ2VQcmVmaXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgIHNoYXBlQTogbnVtYmVyfG51bWJlcltdLCBzaGFwZUI6IG51bWJlcnxudW1iZXJbXSxcbiAgICBlcnJvck1lc3NhZ2VQcmVmaXggPSAnJyk6IHZvaWQge1xuICAvLyBjb25zdGFudCBzaGFwZSBtZWFucyB1bmtub3duIHJhbmtcbiAgaWYgKHR5cGVvZiBzaGFwZUEgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzaGFwZUIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgc2hhcGVBLmxlbmd0aCA9PT0gc2hhcGVCLmxlbmd0aCxcbiAgICAgICgpID0+IGVycm9yTWVzc2FnZVByZWZpeCArIGAgU2hhcGVzICR7c2hhcGVBfSBhbmQgJHtzaGFwZUJ9IG11c3QgbWF0Y2hgKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUEubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBkaW0wID0gc2hhcGVBW2ldO1xuICAgIGNvbnN0IGRpbTEgPSBzaGFwZUJbaV07XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGRpbTAgPCAwIHx8IGRpbTEgPCAwIHx8IGRpbTAgPT09IGRpbTEsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VQcmVmaXggKyBgIFNoYXBlcyAke3NoYXBlQX0gYW5kICR7c2hhcGVCfSBtdXN0IG1hdGNoYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZ1bGxEZWZpbmVkU2hhcGUoZWxlbWVudFNoYXBlOiBudW1iZXJ8bnVtYmVyW10pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50U2hhcGUgPT09ICdudW1iZXInIHx8IGVsZW1lbnRTaGFwZS5zb21lKGRpbSA9PiBkaW0gPCAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogR2VuZXJhdGUgdGhlIG91dHB1dCBlbGVtZW50IHNoYXBlIGZyb20gdGhlIGxpc3QgZWxlbWVudFNoYXBlLCBsaXN0IHRlbnNvcnNcbiAqIGFuZCBpbnB1dCBwYXJhbS5cbiAqIEBwYXJhbSBsaXN0RWxlbWVudFNoYXBlXG4gKiBAcGFyYW0gdGVuc29yc1xuICogQHBhcmFtIGVsZW1lbnRTaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJFbGVtZW50U2hhcGUoXG4gICAgbGlzdEVsZW1lbnRTaGFwZTogbnVtYmVyfG51bWJlcltdLCB0ZW5zb3JzOiBUZW5zb3JbXSxcbiAgICBlbGVtZW50U2hhcGU6IG51bWJlcnxudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgbGV0IHBhcnRpYWxTaGFwZSA9IG1lcmdlRWxlbWVudFNoYXBlKGxpc3RFbGVtZW50U2hhcGUsIGVsZW1lbnRTaGFwZSk7XG4gIGNvbnN0IG5vdGZ1bGxEZWZpbmVkU2hhcGUgPSAhZnVsbERlZmluZWRTaGFwZShwYXJ0aWFsU2hhcGUpO1xuICBpZiAobm90ZnVsbERlZmluZWRTaGFwZSAmJiB0ZW5zb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNhbGN1bGF0ZSBlbGVtZW50cyBvZiBhbiBlbXB0eSBsaXN0YCArXG4gICAgICAgIGAgd2l0aCBub24tZnVsbHktZGVmaW5lZCBlbGVtZW50U2hhcGU6ICR7cGFydGlhbFNoYXBlfWApO1xuICB9XG4gIGlmIChub3RmdWxsRGVmaW5lZFNoYXBlKSB7XG4gICAgdGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBwYXJ0aWFsU2hhcGUgPSBtZXJnZUVsZW1lbnRTaGFwZSh0ZW5zb3Iuc2hhcGUsIHBhcnRpYWxTaGFwZSk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFmdWxsRGVmaW5lZFNoYXBlKHBhcnRpYWxTaGFwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi1mdWxseS1kZWZpbmVkIGVsZW1lbnRTaGFwZTogJHtwYXJ0aWFsU2hhcGV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWxTaGFwZSBhcyBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWxlbWVudFNoYXBlKFxuICAgIGVsZW1lbnRTaGFwZUE6IG51bWJlcnxudW1iZXJbXSwgZWxlbWVudFNoYXBlQjogbnVtYmVyfG51bWJlcltdKTogbnVtYmVyfFxuICAgIG51bWJlcltdIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50U2hhcGVBID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBlbGVtZW50U2hhcGVCO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudFNoYXBlQiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZWxlbWVudFNoYXBlQTtcbiAgfVxuXG4gIGlmIChlbGVtZW50U2hhcGVBLmxlbmd0aCAhPT0gZWxlbWVudFNoYXBlQi5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluY29tcGF0aWJsZSByYW5rcyBkdXJpbmcgbWVyZ2U6ICR7ZWxlbWVudFNoYXBlQX0gdnMuICR7XG4gICAgICAgIGVsZW1lbnRTaGFwZUJ9YCk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudFNoYXBlQS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGRpbTAgPSBlbGVtZW50U2hhcGVBW2ldO1xuICAgIGNvbnN0IGRpbTEgPSBlbGVtZW50U2hhcGVCW2ldO1xuICAgIGlmIChkaW0wID49IDAgJiYgZGltMSA+PSAwICYmIGRpbTAgIT09IGRpbTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5jb21wYXRpYmxlIHNoYXBlIGR1cmluZyBtZXJnZTogJHtlbGVtZW50U2hhcGVBfSB2cy4gJHtcbiAgICAgICAgICBlbGVtZW50U2hhcGVCfWApO1xuICAgIH1cbiAgICByZXN1bHRbaV0gPSBkaW0wID49IDAgPyBkaW0wIDogZGltMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat, keep, reshape, scalar, slice, stack, tensor, tidy, unstack } from '@tensorflow/tfjs-core';\nimport { assertShapesMatchAllowUndefinedSize } from './tensor_utils';\n/**\n * The TensorArray object keeps an array of Tensors. It\n * allows reading from the array and writing to the array.\n */\nexport class TensorArray {\n constructor(name, dtype, maxSize, elementShape, identicalElementShapes, dynamicSize, clearAfterRead) {\n this.name = name;\n this.dtype = dtype;\n this.maxSize = maxSize;\n this.elementShape = elementShape;\n this.identicalElementShapes = identicalElementShapes;\n this.dynamicSize = dynamicSize;\n this.clearAfterRead = clearAfterRead;\n this.tensors = [];\n this.closed_ = false;\n this.idTensor = scalar(0);\n keep(this.idTensor);\n }\n get id() {\n return this.idTensor.id;\n }\n get closed() {\n return this.closed_;\n }\n /**\n * Dispose the tensors and idTensor and mark the TensoryArray as closed.\n */\n clearAndClose(keepIds) {\n this.tensors.forEach(tensor => {\n if (keepIds == null || !keepIds.has(tensor.tensor.id)) {\n tensor.tensor.dispose();\n }\n });\n this.tensors = [];\n this.closed_ = true;\n this.idTensor.dispose();\n }\n size() {\n return this.tensors.length;\n }\n /**\n * Read the value at location index in the TensorArray.\n * @param index Number the index to read from.\n */\n read(index) {\n if (this.closed_) {\n throw new Error(`TensorArray ${this.name} has already been closed.`);\n }\n if (index < 0 || index >= this.size()) {\n throw new Error(`Tried to read from index ${index}, but array size is: ${this.size()}`);\n }\n const tensorWithState = this.tensors[index];\n if (tensorWithState.cleared) {\n throw new Error(`TensorArray ${this.name}: Could not read index ${index} twice because it was cleared after a previous read ` +\n `(perhaps try setting clear_after_read = false?).`);\n }\n if (this.clearAfterRead) {\n tensorWithState.cleared = true;\n }\n tensorWithState.read = true;\n return tensorWithState.tensor;\n }\n /**\n * Helper method to read multiple tensors from the specified indices.\n */\n readMany(indices) {\n return indices.map(index => this.read(index));\n }\n /**\n * Write value into the index of the TensorArray.\n * @param index number the index to write to.\n * @param tensor\n */\n write(index, tensor) {\n if (this.closed_) {\n throw new Error(`TensorArray ${this.name} has already been closed.`);\n }\n if (index < 0 || !this.dynamicSize && index >= this.maxSize) {\n throw new Error(`Tried to write to index ${index}, but array is not resizeable and size is: ${this.maxSize}`);\n }\n const t = this.tensors[index] || {};\n if (tensor.dtype !== this.dtype) {\n throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${index},\n because the value dtype is ${tensor.dtype}, but TensorArray dtype is ${this.dtype}.`);\n }\n // Set the shape for the first time write to unknow shape tensor array\n if (this.size() === 0 &&\n (this.elementShape == null || this.elementShape.length === 0)) {\n this.elementShape = tensor.shape;\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensor.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${index}.`);\n if (t.read) {\n throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${index}, because it has already been read.`);\n }\n if (t.written) {\n throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${index}, because it has already been written.`);\n }\n t.tensor = tensor;\n keep(tensor);\n t.written = true;\n this.tensors[index] = t;\n }\n /**\n * Helper method to write multiple tensors to the specified indices.\n */\n writeMany(indices, tensors) {\n if (indices.length !== tensors.length) {\n throw new Error(`TensorArray ${this.name}: could not write multiple tensors,` +\n `because the index size: ${indices.length} is not the same as tensors size: ${tensors.length}.`);\n }\n indices.forEach((i, index) => this.write(i, tensors[index]));\n }\n /**\n * Return selected values in the TensorArray as a packed Tensor. All of\n * selected values must have been written and their shapes must all match.\n * @param [indices] number[] Optional. Taking values in [0, max_value). If the\n * TensorArray is not dynamic, max_value=size(). If not specified returns\n * all tensors in the original order.\n * @param [dtype]\n */\n gather(indices, dtype) {\n if (!!dtype && dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${dtype}`);\n }\n if (!indices) {\n indices = [];\n for (let i = 0; i < this.size(); i++) {\n indices.push(i);\n }\n }\n else {\n indices = indices.slice(0, this.size());\n }\n if (indices.length === 0) {\n return tensor([], [0].concat(this.elementShape));\n }\n // Read all the PersistentTensors into a vector to keep track of\n // their memory.\n const tensors = this.readMany(indices);\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensors[0].shape, 'TensorArray shape mismatch: ');\n return stack(tensors, 0);\n }\n /**\n * Return the values in the TensorArray as a concatenated Tensor.\n */\n concat(dtype) {\n if (!!dtype && dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${dtype}`);\n }\n if (this.size() === 0) {\n return tensor([], [0].concat(this.elementShape));\n }\n const indices = [];\n for (let i = 0; i < this.size(); i++) {\n indices.push(i);\n }\n // Collect all the tensors from the tensors array.\n const tensors = this.readMany(indices);\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensors[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${tensors[0].shape})`);\n return concat(tensors, 0);\n }\n /**\n * Scatter the values of a Tensor in specific indices of a TensorArray.\n * @param indices nummber[] values in [0, max_value). If the\n * TensorArray is not dynamic, max_value=size().\n * @param tensor Tensor input tensor.\n */\n scatter(indices, tensor) {\n if (tensor.dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${tensor.dtype}`);\n }\n if (indices.length !== tensor.shape[0]) {\n throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${indices.length} vs. ${tensor.shape[0]}`);\n }\n const maxIndex = Math.max(...indices);\n if (!this.dynamicSize && maxIndex >= this.maxSize) {\n throw new Error(`Max index must be < array size (${maxIndex} vs. ${this.maxSize})`);\n }\n this.writeMany(indices, unstack(tensor, 0));\n }\n /**\n * Split the values of a Tensor into the TensorArray.\n * @param length number[] with the lengths to use when splitting value along\n * its first dimension.\n * @param tensor Tensor, the tensor to split.\n */\n split(length, tensor) {\n if (tensor.dtype !== this.dtype) {\n throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${tensor.dtype}`);\n }\n let totalLength = 0;\n const cumulativeLengths = length.map(len => {\n totalLength += len;\n return totalLength;\n });\n if (totalLength !== tensor.shape[0]) {\n throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${totalLength}, and tensor's shape is: ${tensor.shape}`);\n }\n if (!this.dynamicSize && length.length !== this.maxSize) {\n throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${length.length}), ` +\n 'and the TensorArray is not marked as dynamically resizeable');\n }\n const elementPerRow = totalLength === 0 ? 0 : tensor.size / totalLength;\n const tensors = [];\n tidy(() => {\n tensor = reshape(tensor, [1, totalLength, elementPerRow]);\n for (let i = 0; i < length.length; ++i) {\n const previousLength = (i === 0) ? 0 : cumulativeLengths[i - 1];\n const indices = [0, previousLength, 0];\n const sizes = [1, length[i], elementPerRow];\n tensors[i] = reshape(slice(tensor, indices, sizes), this.elementShape);\n }\n return tensors;\n });\n const indices = [];\n for (let i = 0; i < length.length; i++) {\n indices[i] = i;\n }\n this.writeMany(indices, tensors);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2FycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL2V4ZWN1dG9yL3RlbnNvcl9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFZLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzSCxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVFuRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUNhLElBQVksRUFBVyxLQUFlLEVBQVUsT0FBZSxFQUNoRSxZQUFzQixFQUFXLHNCQUErQixFQUMvRCxXQUFvQixFQUFXLGNBQXVCO1FBRnRELFNBQUksR0FBSixJQUFJLENBQVE7UUFBVyxVQUFLLEdBQUwsS0FBSyxDQUFVO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNoRSxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUFXLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBUztRQUMvRCxnQkFBVyxHQUFYLFdBQVcsQ0FBUztRQUFXLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBTjNELFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBQ2hDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFNdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENB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RUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEU7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbmNhdCwgRGF0YVR5cGUsIGtlZXAsIHJlc2hhcGUsIHNjYWxhciwgc2xpY2UsIHN0YWNrLCBUZW5zb3IsIHRlbnNvciwgdGlkeSwgdW5zdGFja30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZX0gZnJvbSAnLi90ZW5zb3JfdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvcldpdGhTdGF0ZSB7XG4gIHRlbnNvcj86IFRlbnNvcjtcbiAgd3JpdHRlbj86IGJvb2xlYW47XG4gIHJlYWQ/OiBib29sZWFuO1xuICBjbGVhcmVkPzogYm9vbGVhbjtcbn1cbi8qKlxuICogVGhlIFRlbnNvckFycmF5IG9iamVjdCBrZWVwcyBhbiBhcnJheSBvZiBUZW5zb3JzLiAgSXRcbiAqIGFsbG93cyByZWFkaW5nIGZyb20gdGhlIGFycmF5IGFuZCB3cml0aW5nIHRvIHRoZSBhcnJheS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbnNvckFycmF5IHtcbiAgcHJpdmF0ZSB0ZW5zb3JzOiBUZW5zb3JXaXRoU3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGNsb3NlZF8gPSBmYWxzZTtcbiAgcmVhZG9ubHkgaWRUZW5zb3I6IFRlbnNvcjtcbiAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBuYW1lOiBzdHJpbmcsIHJlYWRvbmx5IGR0eXBlOiBEYXRhVHlwZSwgcHJpdmF0ZSBtYXhTaXplOiBudW1iZXIsXG4gICAgICBwcml2YXRlIGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIHJlYWRvbmx5IGlkZW50aWNhbEVsZW1lbnRTaGFwZXM6IGJvb2xlYW4sXG4gICAgICByZWFkb25seSBkeW5hbWljU2l6ZTogYm9vbGVhbiwgcmVhZG9ubHkgY2xlYXJBZnRlclJlYWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlkVGVuc29yID0gc2NhbGFyKDApO1xuICAgIGtlZXAodGhpcy5pZFRlbnNvcik7XG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRUZW5zb3IuaWQ7XG4gIH1cblxuICBnZXQgY2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3NlZF87XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdGVuc29ycyBhbmQgaWRUZW5zb3IgYW5kIG1hcmsgdGhlIFRlbnNvcnlBcnJheSBhcyBjbG9zZWQuXG4gICAqL1xuICBjbGVhckFuZENsb3NlKGtlZXBJZHM/OiBTZXQ8bnVtYmVyPikge1xuICAgIHRoaXMudGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBpZiAoa2VlcElkcyA9PSBudWxsIHx8ICFrZWVwSWRzLmhhcyh0ZW5zb3IudGVuc29yLmlkKSkge1xuICAgICAgICB0ZW5zb3IudGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnRlbnNvcnMgPSBbXTtcbiAgICB0aGlzLmNsb3NlZF8gPSB0cnVlO1xuICAgIHRoaXMuaWRUZW5zb3IuZGlzcG9zZSgpO1xuICB9XG5cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbnNvcnMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIHZhbHVlIGF0IGxvY2F0aW9uIGluZGV4IGluIHRoZSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGV4IE51bWJlciB0aGUgaW5kZXggdG8gcmVhZCBmcm9tLlxuICAgKi9cbiAgcmVhZChpbmRleDogbnVtYmVyKTogVGVuc29yIHtcbiAgICBpZiAodGhpcy5jbG9zZWRfKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuc2l6ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyaWVkIHRvIHJlYWQgZnJvbSBpbmRleCAke2luZGV4fSwgYnV0IGFycmF5IHNpemUgaXM6ICR7XG4gICAgICAgICAgdGhpcy5zaXplKCl9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVuc29yV2l0aFN0YXRlID0gdGhpcy50ZW5zb3JzW2luZGV4XTtcbiAgICBpZiAodGVuc29yV2l0aFN0YXRlLmNsZWFyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVuc29yQXJyYXkgJHt0aGlzLm5hbWV9OiBDb3VsZCBub3QgcmVhZCBpbmRleCAke1xuICAgICAgICAgICAgICBpbmRleH0gdHdpY2UgYmVjYXVzZSBpdCB3YXMgY2xlYXJlZCBhZnRlciBhIHByZXZpb3VzIHJlYWQgYCArXG4gICAgICAgICAgYChwZXJoYXBzIHRyeSBzZXR0aW5nIGNsZWFyX2FmdGVyX3JlYWQgPSBmYWxzZT8pLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsZWFyQWZ0ZXJSZWFkKSB7XG4gICAgICB0ZW5zb3JXaXRoU3RhdGUuY2xlYXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGVuc29yV2l0aFN0YXRlLnJlYWQgPSB0cnVlO1xuICAgIHJldHVybiB0ZW5zb3JXaXRoU3RhdGUudGVuc29yO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gcmVhZCBtdWx0aXBsZSB0ZW5zb3JzIGZyb20gdGhlIHNwZWNpZmllZCBpbmRpY2VzLlxuICAgKi9cbiAgcmVhZE1hbnkoaW5kaWNlczogbnVtYmVyW10pOiBUZW5zb3JbXSB7XG4gICAgcmV0dXJuIGluZGljZXMubWFwKGluZGV4ID0+IHRoaXMucmVhZChpbmRleCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHZhbHVlIGludG8gdGhlIGluZGV4IG9mIHRoZSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGV4IG51bWJlciB0aGUgaW5kZXggdG8gd3JpdGUgdG8uXG4gICAqIEBwYXJhbSB0ZW5zb3JcbiAgICovXG4gIHdyaXRlKGluZGV4OiBudW1iZXIsIHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkXykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5zb3JBcnJheSAke3RoaXMubmFtZX0gaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IDwgMCB8fCAhdGhpcy5keW5hbWljU2l6ZSAmJiBpbmRleCA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJpZWQgdG8gd3JpdGUgdG8gaW5kZXggJHtcbiAgICAgICAgICBpbmRleH0sIGJ1dCBhcnJheSBpcyBub3QgcmVzaXplYWJsZSBhbmQgc2l6ZSBpczogJHt0aGlzLm1heFNpemV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdCA9IHRoaXMudGVuc29yc1tpbmRleF0gfHwge307XG5cbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5ICR7XG4gICAgICAgICAgdGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7aW5kZXh9LFxuICAgICAgICAgIGJlY2F1c2UgdGhlIHZhbHVlIGR0eXBlIGlzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IFRlbnNvckFycmF5IGR0eXBlIGlzICR7dGhpcy5kdHlwZX0uYCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBzaGFwZSBmb3IgdGhlIGZpcnN0IHRpbWUgd3JpdGUgdG8gdW5rbm93IHNoYXBlIHRlbnNvciBhcnJheVxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCAmJlxuICAgICAgICAodGhpcy5lbGVtZW50U2hhcGUgPT0gbnVsbCB8fCB0aGlzLmVsZW1lbnRTaGFwZS5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aGlzLmVsZW1lbnRTaGFwZSA9IHRlbnNvci5zaGFwZTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGhpcy5lbGVtZW50U2hhcGUsIHRlbnNvci5zaGFwZSxcbiAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7XG4gICAgICAgICAgICBpbmRleH0uYCk7XG5cbiAgICBpZiAodC5yZWFkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogQ291bGQgbm90IHdyaXRlIHRvIFRlbnNvckFycmF5IGluZGV4ICR7XG4gICAgICAgICAgICAgIGluZGV4fSwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlYWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHQud3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZW5zb3JBcnJheSAke3RoaXMubmFtZX06IENvdWxkIG5vdCB3cml0ZSB0byBUZW5zb3JBcnJheSBpbmRleCAke1xuICAgICAgICAgICAgICBpbmRleH0sIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuLmApO1xuICAgIH1cblxuICAgIHQudGVuc29yID0gdGVuc29yO1xuICAgIGtlZXAodGVuc29yKTtcbiAgICB0LndyaXR0ZW4gPSB0cnVlO1xuXG4gICAgdGhpcy50ZW5zb3JzW2luZGV4XSA9IHQ7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byB3cml0ZSBtdWx0aXBsZSB0ZW5zb3JzIHRvIHRoZSBzcGVjaWZpZWQgaW5kaWNlcy5cbiAgICovXG4gIHdyaXRlTWFueShpbmRpY2VzOiBudW1iZXJbXSwgdGVuc29yczogVGVuc29yW10pIHtcbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggIT09IHRlbnNvcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckFycmF5ICR7dGhpcy5uYW1lfTogY291bGQgbm90IHdyaXRlIG11bHRpcGxlIHRlbnNvcnMsYCArXG4gICAgICAgICAgYGJlY2F1c2UgdGhlIGluZGV4IHNpemU6ICR7XG4gICAgICAgICAgICAgIGluZGljZXMubGVuZ3RofSBpcyBub3QgdGhlIHNhbWUgYXMgdGVuc29ycyBzaXplOiAke1xuICAgICAgICAgICAgICB0ZW5zb3JzLmxlbmd0aH0uYCk7XG4gICAgfVxuXG4gICAgaW5kaWNlcy5mb3JFYWNoKChpLCBpbmRleCkgPT4gdGhpcy53cml0ZShpLCB0ZW5zb3JzW2luZGV4XSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBzZWxlY3RlZCB2YWx1ZXMgaW4gdGhlIFRlbnNvckFycmF5IGFzIGEgcGFja2VkIFRlbnNvci4gQWxsIG9mXG4gICAqIHNlbGVjdGVkIHZhbHVlcyBtdXN0IGhhdmUgYmVlbiB3cml0dGVuIGFuZCB0aGVpciBzaGFwZXMgbXVzdCBhbGwgbWF0Y2guXG4gICAqIEBwYXJhbSBbaW5kaWNlc10gbnVtYmVyW10gT3B0aW9uYWwuIFRha2luZyB2YWx1ZXMgaW4gWzAsIG1heF92YWx1ZSkuIElmIHRoZVxuICAgKiAgICBUZW5zb3JBcnJheSBpcyBub3QgZHluYW1pYywgbWF4X3ZhbHVlPXNpemUoKS4gSWYgbm90IHNwZWNpZmllZCByZXR1cm5zXG4gICAqICAgIGFsbCB0ZW5zb3JzIGluIHRoZSBvcmlnaW5hbCBvcmRlci5cbiAgICogQHBhcmFtIFtkdHlwZV1cbiAgICovXG4gIGdhdGhlcihpbmRpY2VzPzogbnVtYmVyW10sIGR0eXBlPzogRGF0YVR5cGUpOiBUZW5zb3Ige1xuICAgIGlmICghIWR0eXBlICYmIGR0eXBlICE9PSB0aGlzLmR0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckFycmF5IGR0eXBlIGlzICR7XG4gICAgICAgICAgdGhpcy5kdHlwZX0gYnV0IGdhdGhlciByZXF1ZXN0ZWQgZHR5cGUgJHtkdHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoIWluZGljZXMpIHtcbiAgICAgIGluZGljZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zaXplKCk7IGkrKykge1xuICAgICAgICBpbmRpY2VzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGljZXMgPSBpbmRpY2VzLnNsaWNlKDAsIHRoaXMuc2l6ZSgpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0ZW5zb3IoW10sIFswXS5jb25jYXQodGhpcy5lbGVtZW50U2hhcGUpKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIGFsbCB0aGUgUGVyc2lzdGVudFRlbnNvcnMgaW50byBhIHZlY3RvciB0byBrZWVwIHRyYWNrIG9mXG4gICAgLy8gdGhlaXIgbWVtb3J5LlxuICAgIGNvbnN0IHRlbnNvcnMgPSB0aGlzLnJlYWRNYW55KGluZGljZXMpO1xuXG4gICAgYXNzZXJ0U2hhcGVzTWF0Y2hBbGxvd1VuZGVmaW5lZFNpemUoXG4gICAgICAgIHRoaXMuZWxlbWVudFNoYXBlLCB0ZW5zb3JzWzBdLnNoYXBlLCAnVGVuc29yQXJyYXkgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgcmV0dXJuIHN0YWNrKHRlbnNvcnMsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWVzIGluIHRoZSBUZW5zb3JBcnJheSBhcyBhIGNvbmNhdGVuYXRlZCBUZW5zb3IuXG4gICAqL1xuICBjb25jYXQoZHR5cGU/OiBEYXRhVHlwZSk6IFRlbnNvciB7XG4gICAgaWYgKCEhZHR5cGUgJiYgZHR5cGUgIT09IHRoaXMuZHR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yQXJyYXkgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmR0eXBlfSBidXQgY29uY2F0IHJlcXVlc3RlZCBkdHlwZSAke2R0eXBlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRlbnNvcihbXSwgWzBdLmNvbmNhdCh0aGlzLmVsZW1lbnRTaGFwZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2l6ZSgpOyBpKyspIHtcbiAgICAgIGluZGljZXMucHVzaChpKTtcbiAgICB9XG4gICAgLy8gQ29sbGVjdCBhbGwgdGhlIHRlbnNvcnMgZnJvbSB0aGUgdGVuc29ycyBhcnJheS5cbiAgICBjb25zdCB0ZW5zb3JzID0gdGhpcy5yZWFkTWFueShpbmRpY2VzKTtcblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgdGVuc29yc1swXS5zaGFwZSxcbiAgICAgICAgYFRlbnNvckFycmF5IHNoYXBlIG1pc21hdGNoOiB0ZW5zb3IgYXJyYXkgc2hhcGUgKCR7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZX0pIHZzIGZpcnN0IHRlbnNvciBzaGFwZSAoJHt0ZW5zb3JzWzBdLnNoYXBlfSlgKTtcblxuICAgIHJldHVybiBjb25jYXQodGVuc29ycywgMCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhdHRlciB0aGUgdmFsdWVzIG9mIGEgVGVuc29yIGluIHNwZWNpZmljIGluZGljZXMgb2YgYSBUZW5zb3JBcnJheS5cbiAgICogQHBhcmFtIGluZGljZXMgbnVtbWJlcltdIHZhbHVlcyBpbiBbMCwgbWF4X3ZhbHVlKS4gSWYgdGhlXG4gICAqICAgIFRlbnNvckFycmF5IGlzIG5vdCBkeW5hbWljLCBtYXhfdmFsdWU9c2l6ZSgpLlxuICAgKiBAcGFyYW0gdGVuc29yIFRlbnNvciBpbnB1dCB0ZW5zb3IuXG4gICAqL1xuICBzY2F0dGVyKGluZGljZXM6IG51bWJlcltdLCB0ZW5zb3I6IFRlbnNvcikge1xuICAgIGlmICh0ZW5zb3IuZHR5cGUgIT09IHRoaXMuZHR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yQXJyYXkgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmR0eXBlfSBidXQgdGVuc29yIGhhcyBkdHlwZSAke3RlbnNvci5kdHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kaWNlcy5sZW5ndGggIT09IHRlbnNvci5zaGFwZVswXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsZW4oaW5kaWNlcykgPT0gdGVuc29yLnNoYXBlWzBdLCBidXQgc2F3OiAke1xuICAgICAgICAgIGluZGljZXMubGVuZ3RofSB2cy4gJHt0ZW5zb3Iuc2hhcGVbMF19YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heCguLi5pbmRpY2VzKTtcblxuICAgIGlmICghdGhpcy5keW5hbWljU2l6ZSAmJiBtYXhJbmRleCA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWF4IGluZGV4IG11c3QgYmUgPCBhcnJheSBzaXplICgke21heEluZGV4fSAgdnMuICR7dGhpcy5tYXhTaXplfSlgKTtcbiAgICB9XG5cbiAgICB0aGlzLndyaXRlTWFueShpbmRpY2VzLCB1bnN0YWNrKHRlbnNvciwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IHRoZSB2YWx1ZXMgb2YgYSBUZW5zb3IgaW50byB0aGUgVGVuc29yQXJyYXkuXG4gICAqIEBwYXJhbSBsZW5ndGggbnVtYmVyW10gd2l0aCB0aGUgbGVuZ3RocyB0byB1c2Ugd2hlbiBzcGxpdHRpbmcgdmFsdWUgYWxvbmdcbiAgICogICAgaXRzIGZpcnN0IGRpbWVuc2lvbi5cbiAgICogQHBhcmFtIHRlbnNvciBUZW5zb3IsIHRoZSB0ZW5zb3IgdG8gc3BsaXQuXG4gICAqL1xuICBzcGxpdChsZW5ndGg6IG51bWJlcltdLCB0ZW5zb3I6IFRlbnNvcikge1xuICAgIGlmICh0ZW5zb3IuZHR5cGUgIT09IHRoaXMuZHR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yQXJyYXkgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmR0eXBlfSBidXQgdGVuc29yIGhhcyBkdHlwZSAke3RlbnNvci5kdHlwZX1gKTtcbiAgICB9XG4gICAgbGV0IHRvdGFsTGVuZ3RoID0gMDtcbiAgICBjb25zdCBjdW11bGF0aXZlTGVuZ3RocyA9IGxlbmd0aC5tYXAobGVuID0+IHtcbiAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbjtcbiAgICAgIHJldHVybiB0b3RhbExlbmd0aDtcbiAgICB9KTtcblxuICAgIGlmICh0b3RhbExlbmd0aCAhPT0gdGVuc29yLnNoYXBlWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN1bSBvZiBsZW5ndGhzIHRvIGJlIGVxdWFsIHRvXG4gICAgICAgICAgdGVuc29yLnNoYXBlWzBdLCBidXQgc3VtIG9mIGxlbmd0aHMgaXNcbiAgICAgICAgJHt0b3RhbExlbmd0aH0sIGFuZCB0ZW5zb3IncyBzaGFwZSBpczogJHt0ZW5zb3Iuc2hhcGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmR5bmFtaWNTaXplICYmIGxlbmd0aC5sZW5ndGggIT09IHRoaXMubWF4U2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUZW5zb3JBcnJheSdzIHNpemUgaXMgbm90IGVxdWFsIHRvIHRoZSBzaXplIG9mIGxlbmd0aHMgKCR7XG4gICAgICAgICAgICAgIHRoaXMubWF4U2l6ZX0gdnMuICR7bGVuZ3RoLmxlbmd0aH0pLCBgICtcbiAgICAgICAgICAnYW5kIHRoZSBUZW5zb3JBcnJheSBpcyBub3QgbWFya2VkIGFzIGR5bmFtaWNhbGx5IHJlc2l6ZWFibGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50UGVyUm93ID0gdG90YWxMZW5ndGggPT09IDAgPyAwIDogdGVuc29yLnNpemUgLyB0b3RhbExlbmd0aDtcbiAgICBjb25zdCB0ZW5zb3JzOiBUZW5zb3JbXSA9IFtdO1xuICAgIHRpZHkoKCkgPT4ge1xuICAgICAgdGVuc29yID0gcmVzaGFwZSh0ZW5zb3IsIFsxLCB0b3RhbExlbmd0aCwgZWxlbWVudFBlclJvd10pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGgubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMZW5ndGggPSAoaSA9PT0gMCkgPyAwIDogY3VtdWxhdGl2ZUxlbmd0aHNbaSAtIDFdO1xuICAgICAgICBjb25zdCBpbmRpY2VzID0gWzAsIHByZXZpb3VzTGVuZ3RoLCAwXTtcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBbMSwgbGVuZ3RoW2ldLCBlbGVtZW50UGVyUm93XTtcbiAgICAgICAgdGVuc29yc1tpXSA9IHJlc2hhcGUoc2xpY2UodGVuc29yLCBpbmRpY2VzLCBzaXplcyksIHRoaXMuZWxlbWVudFNoYXBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW5zb3JzO1xuICAgIH0pO1xuICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5kaWNlc1tpXSA9IGk7XG4gICAgfVxuICAgIHRoaXMud3JpdGVNYW55KGluZGljZXMsIHRlbnNvcnMpO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { concat, keep, reshape, scalar, slice, stack, tensor, tidy, unstack } from '@tensorflow/tfjs-core';\nimport { assertShapesMatchAllowUndefinedSize, inferElementShape, mergeElementShape } from './tensor_utils';\n/**\n * TensorList stores a container of `tf.Tensor` objects, which are accessible\n * via tensors field.\n *\n * In order to get a copy of the underlying list, use the copy method:\n * ```\n * TensorList b = a.copy();\n * b.tensors().pushBack(t); // This does not modify a.tensors().\n * ```\n *\n * Note that this is not a deep copy: the memory locations of the underlying\n * tensors will still point to the same locations of the corresponding tensors\n * in the original.\n */\nexport class TensorList {\n get id() {\n return this.idTensor.id;\n }\n /**\n *\n * @param tensors list of tensors\n * @param elementShape shape of each tensor, this can be a single number (any\n * shape is allowed) or partial shape (dim = -1).\n * @param elementDtype data type of each tensor\n * @param maxNumElements The maximum allowed size of `tensors`. Defaults to -1\n * meaning that the size of `tensors` is unbounded.\n */\n constructor(tensors, elementShape, elementDtype, maxNumElements = -1) {\n this.tensors = tensors;\n this.elementShape = elementShape;\n this.elementDtype = elementDtype;\n if (tensors != null) {\n tensors.forEach(tensor => {\n if (elementDtype !== tensor.dtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${tensor.dtype}`);\n }\n assertShapesMatchAllowUndefinedSize(elementShape, tensor.shape, 'TensorList shape mismatch: ');\n keep(tensor);\n });\n }\n this.idTensor = scalar(0);\n this.maxNumElements = maxNumElements;\n keep(this.idTensor);\n }\n /**\n * Get a new TensorList containing a copy of the underlying tensor container.\n */\n copy() {\n return new TensorList([...this.tensors], this.elementShape, this.elementDtype);\n }\n /**\n * Dispose the tensors and idTensor and clear the tensor list.\n */\n clearAndClose(keepIds) {\n this.tensors.forEach(tensor => {\n if (keepIds == null || !keepIds.has(tensor.id)) {\n tensor.dispose();\n }\n });\n this.tensors.length = 0;\n this.idTensor.dispose();\n }\n /**\n * The size of the tensors in the tensor list.\n */\n size() {\n return this.tensors.length;\n }\n /**\n * Return a tensor that stacks a list of rank-R tf.Tensors into one rank-(R+1)\n * tf.Tensor.\n * @param elementShape shape of each tensor\n * @param elementDtype data type of each tensor\n * @param numElements the number of elements to stack\n */\n stack(elementShape, elementDtype, numElements = -1) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (numElements !== -1 && this.tensors.length !== numElements) {\n throw new Error(`Operation expected a list with ${numElements} elements but got a list with ${this.tensors.length} elements.`);\n }\n assertShapesMatchAllowUndefinedSize(elementShape, this.elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n return tidy(() => {\n const reshapedTensors = this.tensors.map(tensor => reshape(tensor, outputElementShape));\n return stack(reshapedTensors, 0);\n });\n }\n /**\n * Pop a tensor from the end of the list.\n * @param elementShape shape of the tensor\n * @param elementDtype data type of the tensor\n */\n popBack(elementShape, elementDtype) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (this.size() === 0) {\n throw new Error('Trying to pop from an empty list.');\n }\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n const tensor = this.tensors.pop();\n tensor.kept = false;\n assertShapesMatchAllowUndefinedSize(tensor.shape, elementShape, 'TensorList shape mismatch: ');\n return reshape(tensor, outputElementShape);\n }\n /**\n * Push a tensor to the end of the list.\n * @param tensor Tensor to be pushed.\n */\n pushBack(tensor) {\n if (tensor.dtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${this.elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(tensor.shape, this.elementShape, 'TensorList shape mismatch: ');\n if (this.maxNumElements === this.size()) {\n throw new Error(`Trying to push element into a full list.`);\n }\n keep(tensor);\n this.tensors.push(tensor);\n }\n /**\n * Update the size of the list.\n * @param size the new size of the list.\n */\n resize(size) {\n if (size < 0) {\n throw new Error(`TensorListResize expects size to be non-negative. Got: ${size}`);\n }\n if (this.maxNumElements !== -1 && size > this.maxNumElements) {\n throw new Error(`TensorListResize input size ${size} is greater maxNumElement ${this.maxNumElements}.`);\n }\n const destTensorList = new TensorList([], this.elementShape, this.elementDtype, this.maxNumElements);\n destTensorList.tensors.length = size;\n for (let i = 0; i < Math.min(this.tensors.length, size); ++i) {\n destTensorList.tensors[i] = this.tensors[i];\n }\n return destTensorList;\n }\n /**\n * Retrieve the element at the provided index\n * @param elementShape shape of the tensor\n * @param elementDtype dtype of the tensor\n * @param elementIndex index of the tensor\n */\n getItem(elementIndex, elementShape, elementDtype) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n if (elementIndex < 0 || elementIndex > this.tensors.length) {\n throw new Error(`Trying to access element ${elementIndex} in a list with ${this.tensors.length} elements.`);\n }\n if (this.tensors[elementIndex] == null) {\n throw new Error(`element at index ${elementIndex} is null.`);\n }\n assertShapesMatchAllowUndefinedSize(this.tensors[elementIndex].shape, elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n return reshape(this.tensors[elementIndex], outputElementShape);\n }\n /**\n * Set the tensor at the index\n * @param elementIndex index of the tensor\n * @param tensor the tensor to be inserted into the list\n */\n setItem(elementIndex, tensor) {\n if (tensor.dtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${this.elementDtype}`);\n }\n if (elementIndex < 0 ||\n this.maxNumElements !== -1 && elementIndex >= this.maxNumElements) {\n throw new Error(`Trying to set element ${elementIndex} in a list with max ${this.maxNumElements} elements.`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, tensor.shape, 'TensorList shape mismatch: ');\n keep(tensor);\n // dispose the previous value if it is replacing.\n if (this.tensors[elementIndex] != null) {\n this.tensors[elementIndex].kept = false;\n }\n this.tensors[elementIndex] = tensor;\n }\n /**\n * Return selected values in the TensorList as a stacked Tensor. All of\n * selected values must have been written and their shapes must all match.\n * @param indices indices of tensors to gather\n * @param elementDtype output tensor dtype\n * @param elementShape output tensor element shape\n */\n gather(indices, elementDtype, elementShape) {\n if (elementDtype !== this.elementDtype) {\n throw new Error(`Invalid data types; op elements ${elementDtype}, but list elements ${this.elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, elementShape, 'TensorList shape mismatch: ');\n // When indices is greater than the size of the list, indices beyond the\n // size of the list are ignored.\n indices = indices.slice(0, this.size());\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n if (indices.length === 0) {\n return tensor([], [0].concat(outputElementShape));\n }\n return tidy(() => {\n const tensors = indices.map(i => reshape(this.tensors[i], outputElementShape));\n return stack(tensors, 0);\n });\n }\n /**\n * Return the values in the TensorList as a concatenated Tensor.\n * @param elementDtype output tensor dtype\n * @param elementShape output tensor element shape\n */\n concat(elementDtype, elementShape) {\n if (!!elementDtype && elementDtype !== this.elementDtype) {\n throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${elementDtype}`);\n }\n assertShapesMatchAllowUndefinedSize(this.elementShape, elementShape, 'TensorList shape mismatch: ');\n const outputElementShape = inferElementShape(this.elementShape, this.tensors, elementShape);\n if (this.size() === 0) {\n return tensor([], [0].concat(outputElementShape));\n }\n return tidy(() => {\n const tensors = this.tensors.map(t => reshape(t, outputElementShape));\n return concat(tensors, 0);\n });\n }\n}\n/**\n * Creates a TensorList which, when stacked, has the value of tensor.\n * @param tensor from tensor\n * @param elementShape output tensor element shape\n */\nexport function fromTensor(tensor, elementShape, elementDtype) {\n const dtype = tensor.dtype;\n if (tensor.shape.length < 1) {\n throw new Error(`Tensor must be at least a vector, but saw shape: ${tensor.shape}`);\n }\n if (tensor.dtype !== elementDtype) {\n throw new Error(`Invalid data types; op elements ${tensor.dtype}, but list elements ${elementDtype}`);\n }\n const tensorElementShape = tensor.shape.slice(1);\n assertShapesMatchAllowUndefinedSize(tensorElementShape, elementShape, 'TensorList shape mismatch: ');\n const tensorList = unstack(tensor);\n return new TensorList(tensorList, elementShape, dtype);\n}\n/**\n * Return a TensorList of the given size with empty elements.\n * @param elementShape the shape of the future elements of the list\n * @param elementDtype the desired type of elements in the list\n * @param numElements the number of elements to reserve\n * @param maxNumElements the maximum number of elements in th list\n */\nexport function reserve(elementShape, elementDtype, numElements, maxNumElements) {\n return new TensorList([], elementShape, elementDtype, maxNumElements);\n}\n/**\n * Put tensors at specific indices of a stacked tensor into a TensorList.\n * @param indices list of indices on how to scatter the tensor.\n * @param tensor input tensor.\n * @param elementShape the shape of the future elements of the list\n * @param numElements the number of elements to scatter\n */\nexport function scatter(tensor, indices, elementShape, numElements) {\n if (indices.length !== tensor.shape[0]) {\n throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${indices.length} vs. ${tensor.shape[0]}`);\n }\n const maxIndex = Math.max(...indices);\n if (numElements != null && numElements !== -1 && maxIndex >= numElements) {\n throw new Error(`Max index must be < array size (${maxIndex} vs. ${numElements})`);\n }\n const list = new TensorList([], elementShape, tensor.dtype, numElements);\n const tensors = unstack(tensor, 0);\n indices.forEach((value, index) => {\n list.setItem(value, tensors[index]);\n });\n return list;\n}\n/**\n * Split the values of a Tensor into a TensorList.\n * @param length the lengths to use when splitting value along\n * its first dimension.\n * @param tensor the tensor to split.\n * @param elementShape the shape of the future elements of the list\n */\nexport function split(tensor, length, elementShape) {\n let totalLength = 0;\n const cumulativeLengths = length.map(len => {\n totalLength += len;\n return totalLength;\n });\n if (totalLength !== tensor.shape[0]) {\n throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${totalLength}, and tensor's shape is: ${tensor.shape}`);\n }\n const shapeWithoutFirstDim = tensor.shape.slice(1);\n const outputElementShape = mergeElementShape(shapeWithoutFirstDim, elementShape);\n const elementPerRow = totalLength === 0 ? 0 : tensor.size / totalLength;\n const tensors = tidy(() => {\n const tensors = [];\n tensor = reshape(tensor, [1, totalLength, elementPerRow]);\n for (let i = 0; i < length.length; ++i) {\n const previousLength = (i === 0) ? 0 : cumulativeLengths[i - 1];\n const indices = [0, previousLength, 0];\n const sizes = [1, length[i], elementPerRow];\n tensors[i] = reshape(slice(tensor, indices, sizes), outputElementShape);\n }\n tensor.dispose();\n return tensors;\n });\n const list = new TensorList([], elementShape, tensor.dtype, length.length);\n for (let i = 0; i < tensors.length; i++) {\n list.setItem(i, tensors[i]);\n }\n return list;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuc29yX2xpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvdGVuc29yX2xpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBWSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFM0gsT0FBTyxFQUFDLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekc7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE1BQU0sT0FBTyxVQUFVO0lBSXJCLElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNEOzs7Ozs7OztPQVFHO0lBQ0gsWUFDYSxPQUFpQixFQUFXLFlBQTZCLEVBQ3pELFlBQXNCLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUQzQyxZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQVcsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQ3pELGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ2pDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNuQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLFlBQVksS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUNaLFlBQVksdUJBQXVCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxtQ0FBbUMsQ0FDL0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztn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QUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2NvbmNhdCwgRGF0YVR5cGUsIGtlZXAsIHJlc2hhcGUsIHNjYWxhciwgc2xpY2UsIHN0YWNrLCBUZW5zb3IsIHRlbnNvciwgdGlkeSwgdW5zdGFja30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHthc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZSwgaW5mZXJFbGVtZW50U2hhcGUsIG1lcmdlRWxlbWVudFNoYXBlfSBmcm9tICcuL3RlbnNvcl91dGlscyc7XG5cbi8qKlxuICogVGVuc29yTGlzdCBzdG9yZXMgYSBjb250YWluZXIgb2YgYHRmLlRlbnNvcmAgb2JqZWN0cywgd2hpY2ggYXJlIGFjY2Vzc2libGVcbiAqIHZpYSB0ZW5zb3JzIGZpZWxkLlxuICpcbiAqIEluIG9yZGVyIHRvIGdldCBhIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcgbGlzdCwgdXNlIHRoZSBjb3B5IG1ldGhvZDpcbiAqIGBgYFxuICogICAgVGVuc29yTGlzdCBiID0gYS5jb3B5KCk7XG4gKiAgICBiLnRlbnNvcnMoKS5wdXNoQmFjayh0KTsgIC8vIFRoaXMgZG9lcyBub3QgbW9kaWZ5IGEudGVuc29ycygpLlxuICogYGBgXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGEgZGVlcCBjb3B5OiB0aGUgbWVtb3J5IGxvY2F0aW9ucyBvZiB0aGUgdW5kZXJseWluZ1xuICogdGVuc29ycyB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGxvY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyB0ZW5zb3JzXG4gKiBpbiB0aGUgb3JpZ2luYWwuXG4gKi9cblxuZXhwb3J0IGNsYXNzIFRlbnNvckxpc3Qge1xuICByZWFkb25seSBpZFRlbnNvcjogVGVuc29yO1xuICBtYXhOdW1FbGVtZW50czogbnVtYmVyO1xuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZFRlbnNvci5pZDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHRlbnNvcnMgbGlzdCBvZiB0ZW5zb3JzXG4gICAqIEBwYXJhbSBlbGVtZW50U2hhcGUgc2hhcGUgb2YgZWFjaCB0ZW5zb3IsIHRoaXMgY2FuIGJlIGEgc2luZ2xlIG51bWJlciAoYW55XG4gICAqIHNoYXBlIGlzIGFsbG93ZWQpIG9yIHBhcnRpYWwgc2hhcGUgKGRpbSA9IC0xKS5cbiAgICogQHBhcmFtIGVsZW1lbnREdHlwZSBkYXRhIHR5cGUgb2YgZWFjaCB0ZW5zb3JcbiAgICogQHBhcmFtIG1heE51bUVsZW1lbnRzIFRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBvZiBgdGVuc29yc2AuIERlZmF1bHRzIHRvIC0xXG4gICAqICAgbWVhbmluZyB0aGF0IHRoZSBzaXplIG9mIGB0ZW5zb3JzYCBpcyB1bmJvdW5kZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IHRlbnNvcnM6IFRlbnNvcltdLCByZWFkb25seSBlbGVtZW50U2hhcGU6IG51bWJlcnxudW1iZXJbXSxcbiAgICAgIHJlYWRvbmx5IGVsZW1lbnREdHlwZTogRGF0YVR5cGUsIG1heE51bUVsZW1lbnRzID0gLTEpIHtcbiAgICBpZiAodGVuc29ycyAhPSBudWxsKSB7XG4gICAgICB0ZW5zb3JzLmZvckVhY2godGVuc29yID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnREdHlwZSAhPT0gdGVuc29yLmR0eXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgICAgIGVsZW1lbnREdHlwZX0sIGJ1dCBsaXN0IGVsZW1lbnRzICR7dGVuc29yLmR0eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICAgICAgZWxlbWVudFNoYXBlLCB0ZW5zb3Iuc2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcblxuICAgICAgICBrZWVwKHRlbnNvcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5pZFRlbnNvciA9IHNjYWxhcigwKTtcbiAgICB0aGlzLm1heE51bUVsZW1lbnRzID0gbWF4TnVtRWxlbWVudHM7XG4gICAga2VlcCh0aGlzLmlkVGVuc29yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBuZXcgVGVuc29yTGlzdCBjb250YWluaW5nIGEgY29weSBvZiB0aGUgdW5kZXJseWluZyB0ZW5zb3IgY29udGFpbmVyLlxuICAgKi9cbiAgY29weSgpOiBUZW5zb3JMaXN0IHtcbiAgICByZXR1cm4gbmV3IFRlbnNvckxpc3QoXG4gICAgICAgIFsuLi50aGlzLnRlbnNvcnNdLCB0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy5lbGVtZW50RHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIHRlbnNvcnMgYW5kIGlkVGVuc29yIGFuZCBjbGVhciB0aGUgdGVuc29yIGxpc3QuXG4gICAqL1xuICBjbGVhckFuZENsb3NlKGtlZXBJZHM/OiBTZXQ8bnVtYmVyPikge1xuICAgIHRoaXMudGVuc29ycy5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICBpZiAoa2VlcElkcyA9PSBudWxsIHx8ICFrZWVwSWRzLmhhcyh0ZW5zb3IuaWQpKSB7XG4gICAgICAgIHRlbnNvci5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy50ZW5zb3JzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pZFRlbnNvci5kaXNwb3NlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSB0ZW5zb3JzIGluIHRoZSB0ZW5zb3IgbGlzdC5cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVuc29ycy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdGVuc29yIHRoYXQgc3RhY2tzIGEgbGlzdCBvZiByYW5rLVIgdGYuVGVuc29ycyBpbnRvIG9uZSByYW5rLShSKzEpXG4gICAqIHRmLlRlbnNvci5cbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBzaGFwZSBvZiBlYWNoIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIGRhdGEgdHlwZSBvZiBlYWNoIHRlbnNvclxuICAgKiBAcGFyYW0gbnVtRWxlbWVudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzdGFja1xuICAgKi9cbiAgc3RhY2soZWxlbWVudFNoYXBlOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSwgbnVtRWxlbWVudHMgPSAtMSk6XG4gICAgICBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cbiAgICBpZiAobnVtRWxlbWVudHMgIT09IC0xICYmIHRoaXMudGVuc29ycy5sZW5ndGggIT09IG51bUVsZW1lbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiBleHBlY3RlZCBhIGxpc3Qgd2l0aCAke1xuICAgICAgICAgIG51bUVsZW1lbnRzfSBlbGVtZW50cyBidXQgZ290IGEgbGlzdCB3aXRoICR7XG4gICAgICAgICAgdGhpcy50ZW5zb3JzLmxlbmd0aH0gZWxlbWVudHMuYCk7XG4gICAgfVxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICBlbGVtZW50U2hhcGUsIHRoaXMuZWxlbWVudFNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG4gICAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgICAgaW5mZXJFbGVtZW50U2hhcGUodGhpcy5lbGVtZW50U2hhcGUsIHRoaXMudGVuc29ycywgZWxlbWVudFNoYXBlKTtcbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCByZXNoYXBlZFRlbnNvcnMgPVxuICAgICAgICAgIHRoaXMudGVuc29ycy5tYXAodGVuc29yID0+IHJlc2hhcGUodGVuc29yLCBvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICAgIHJldHVybiBzdGFjayhyZXNoYXBlZFRlbnNvcnMsIDApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcCBhIHRlbnNvciBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50U2hhcGUgc2hhcGUgb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIGRhdGEgdHlwZSBvZiB0aGUgdGVuc29yXG4gICAqL1xuICBwb3BCYWNrKGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIGVsZW1lbnREdHlwZTogRGF0YVR5cGUpOiBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNpemUoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gcG9wIGZyb20gYW4gZW1wdHkgbGlzdC4nKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgICAgaW5mZXJFbGVtZW50U2hhcGUodGhpcy5lbGVtZW50U2hhcGUsIHRoaXMudGVuc29ycywgZWxlbWVudFNoYXBlKTtcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLnRlbnNvcnMucG9wKCk7XG4gICAgdGVuc29yLmtlcHQgPSBmYWxzZTtcblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0ZW5zb3Iuc2hhcGUsIGVsZW1lbnRTaGFwZSwgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgcmV0dXJuIHJlc2hhcGUodGVuc29yLCBvdXRwdXRFbGVtZW50U2hhcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggYSB0ZW5zb3IgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHRlbnNvciBUZW5zb3IgdG8gYmUgcHVzaGVkLlxuICAgKi9cbiAgcHVzaEJhY2sodGVuc29yOiBUZW5zb3IpIHtcbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGVuc29yLnNoYXBlLCB0aGlzLmVsZW1lbnRTaGFwZSwgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuXG4gICAgaWYgKHRoaXMubWF4TnVtRWxlbWVudHMgPT09IHRoaXMuc2l6ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBwdXNoIGVsZW1lbnQgaW50byBhIGZ1bGwgbGlzdC5gKTtcbiAgICB9XG4gICAga2VlcCh0ZW5zb3IpO1xuICAgIHRoaXMudGVuc29ycy5wdXNoKHRlbnNvcik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBzaXplIG9mIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gc2l6ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGxpc3QuXG4gICAqL1xuICByZXNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRlbnNvckxpc3RSZXNpemUgZXhwZWN0cyBzaXplIHRvIGJlIG5vbi1uZWdhdGl2ZS4gR290OiAke3NpemV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4TnVtRWxlbWVudHMgIT09IC0xICYmIHNpemUgPiB0aGlzLm1heE51bUVsZW1lbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckxpc3RSZXNpemUgaW5wdXQgc2l6ZSAke1xuICAgICAgICAgIHNpemV9IGlzIGdyZWF0ZXIgbWF4TnVtRWxlbWVudCAke3RoaXMubWF4TnVtRWxlbWVudHN9LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc3RUZW5zb3JMaXN0OiBUZW5zb3JMaXN0ID0gbmV3IFRlbnNvckxpc3QoXG4gICAgICAgIFtdLCB0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy5lbGVtZW50RHR5cGUsIHRoaXMubWF4TnVtRWxlbWVudHMpO1xuICAgIGRlc3RUZW5zb3JMaXN0LnRlbnNvcnMubGVuZ3RoID0gc2l6ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHRoaXMudGVuc29ycy5sZW5ndGgsIHNpemUpOyArK2kpIHtcbiAgICAgIGRlc3RUZW5zb3JMaXN0LnRlbnNvcnNbaV0gPSB0aGlzLnRlbnNvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBkZXN0VGVuc29yTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZWxlbWVudCBhdCB0aGUgcHJvdmlkZWQgaW5kZXhcbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBzaGFwZSBvZiB0aGUgdGVuc29yXG4gICAqIEBwYXJhbSBlbGVtZW50RHR5cGUgZHR5cGUgb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gZWxlbWVudEluZGV4IGluZGV4IG9mIHRoZSB0ZW5zb3JcbiAgICovXG4gIGdldEl0ZW0oZWxlbWVudEluZGV4OiBudW1iZXIsIGVsZW1lbnRTaGFwZTogbnVtYmVyW10sIGVsZW1lbnREdHlwZTogRGF0YVR5cGUpOlxuICAgICAgVGVuc29yIHtcbiAgICBpZiAoZWxlbWVudER0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgZWxlbWVudER0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRJbmRleCA8IDAgfHwgZWxlbWVudEluZGV4ID4gdGhpcy50ZW5zb3JzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gYWNjZXNzIGVsZW1lbnQgJHtcbiAgICAgICAgICBlbGVtZW50SW5kZXh9IGluIGEgbGlzdCB3aXRoICR7dGhpcy50ZW5zb3JzLmxlbmd0aH0gZWxlbWVudHMuYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGVuc29yc1tlbGVtZW50SW5kZXhdID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZWxlbWVudCBhdCBpbmRleCAke2VsZW1lbnRJbmRleH0gaXMgbnVsbC5gKTtcbiAgICB9XG5cbiAgICBhc3NlcnRTaGFwZXNNYXRjaEFsbG93VW5kZWZpbmVkU2l6ZShcbiAgICAgICAgdGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0uc2hhcGUsIGVsZW1lbnRTaGFwZSxcbiAgICAgICAgJ1RlbnNvckxpc3Qgc2hhcGUgbWlzbWF0Y2g6ICcpO1xuICAgIGNvbnN0IG91dHB1dEVsZW1lbnRTaGFwZSA9XG4gICAgICAgIGluZmVyRWxlbWVudFNoYXBlKHRoaXMuZWxlbWVudFNoYXBlLCB0aGlzLnRlbnNvcnMsIGVsZW1lbnRTaGFwZSk7XG4gICAgcmV0dXJuIHJlc2hhcGUodGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0sIG91dHB1dEVsZW1lbnRTaGFwZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0ZW5zb3IgYXQgdGhlIGluZGV4XG4gICAqIEBwYXJhbSBlbGVtZW50SW5kZXggaW5kZXggb2YgdGhlIHRlbnNvclxuICAgKiBAcGFyYW0gdGVuc29yIHRoZSB0ZW5zb3IgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdFxuICAgKi9cbiAgc2V0SXRlbShlbGVtZW50SW5kZXg6IG51bWJlciwgdGVuc29yOiBUZW5zb3IpIHtcbiAgICBpZiAodGVuc29yLmR0eXBlICE9PSB0aGlzLmVsZW1lbnREdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGEgdHlwZXM7IG9wIGVsZW1lbnRzICR7XG4gICAgICAgICAgdGVuc29yLmR0eXBlfSwgYnV0IGxpc3QgZWxlbWVudHMgJHt0aGlzLmVsZW1lbnREdHlwZX1gKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudEluZGV4IDwgMCB8fFxuICAgICAgICB0aGlzLm1heE51bUVsZW1lbnRzICE9PSAtMSAmJiBlbGVtZW50SW5kZXggPj0gdGhpcy5tYXhOdW1FbGVtZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gc2V0IGVsZW1lbnQgJHtcbiAgICAgICAgICBlbGVtZW50SW5kZXh9IGluIGEgbGlzdCB3aXRoIG1heCAke3RoaXMubWF4TnVtRWxlbWVudHN9IGVsZW1lbnRzLmApO1xuICAgIH1cblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgdGVuc29yLnNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG4gICAga2VlcCh0ZW5zb3IpO1xuXG4gICAgLy8gZGlzcG9zZSB0aGUgcHJldmlvdXMgdmFsdWUgaWYgaXQgaXMgcmVwbGFjaW5nLlxuICAgIGlmICh0aGlzLnRlbnNvcnNbZWxlbWVudEluZGV4XSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnRlbnNvcnNbZWxlbWVudEluZGV4XS5rZXB0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy50ZW5zb3JzW2VsZW1lbnRJbmRleF0gPSB0ZW5zb3I7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHNlbGVjdGVkIHZhbHVlcyBpbiB0aGUgVGVuc29yTGlzdCBhcyBhIHN0YWNrZWQgVGVuc29yLiBBbGwgb2ZcbiAgICogc2VsZWN0ZWQgdmFsdWVzIG11c3QgaGF2ZSBiZWVuIHdyaXR0ZW4gYW5kIHRoZWlyIHNoYXBlcyBtdXN0IGFsbCBtYXRjaC5cbiAgICogQHBhcmFtIGluZGljZXMgaW5kaWNlcyBvZiB0ZW5zb3JzIHRvIGdhdGhlclxuICAgKiBAcGFyYW0gZWxlbWVudER0eXBlIG91dHB1dCB0ZW5zb3IgZHR5cGVcbiAgICogQHBhcmFtIGVsZW1lbnRTaGFwZSBvdXRwdXQgdGVuc29yIGVsZW1lbnQgc2hhcGVcbiAgICovXG4gIGdhdGhlcihpbmRpY2VzOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSk6XG4gICAgICBUZW5zb3Ige1xuICAgIGlmIChlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YSB0eXBlczsgb3AgZWxlbWVudHMgJHtcbiAgICAgICAgICBlbGVtZW50RHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke3RoaXMuZWxlbWVudER0eXBlfWApO1xuICAgIH1cblxuICAgIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgICB0aGlzLmVsZW1lbnRTaGFwZSwgZWxlbWVudFNoYXBlLCAnVGVuc29yTGlzdCBzaGFwZSBtaXNtYXRjaDogJyk7XG5cbiAgICAvLyBXaGVuIGluZGljZXMgaXMgZ3JlYXRlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBsaXN0LCBpbmRpY2VzIGJleW9uZCB0aGVcbiAgICAvLyBzaXplIG9mIHRoZSBsaXN0IGFyZSBpZ25vcmVkLlxuICAgIGluZGljZXMgPSBpbmRpY2VzLnNsaWNlKDAsIHRoaXMuc2l6ZSgpKTtcbiAgICBjb25zdCBvdXRwdXRFbGVtZW50U2hhcGUgPVxuICAgICAgICBpbmZlckVsZW1lbnRTaGFwZSh0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy50ZW5zb3JzLCBlbGVtZW50U2hhcGUpO1xuICAgIGlmIChpbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRlbnNvcihbXSwgWzBdLmNvbmNhdChvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCB0ZW5zb3JzID1cbiAgICAgICAgICBpbmRpY2VzLm1hcChpID0+IHJlc2hhcGUodGhpcy50ZW5zb3JzW2ldLCBvdXRwdXRFbGVtZW50U2hhcGUpKTtcbiAgICAgIHJldHVybiBzdGFjayh0ZW5zb3JzLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlcyBpbiB0aGUgVGVuc29yTGlzdCBhcyBhIGNvbmNhdGVuYXRlZCBUZW5zb3IuXG4gICAqIEBwYXJhbSBlbGVtZW50RHR5cGUgb3V0cHV0IHRlbnNvciBkdHlwZVxuICAgKiBAcGFyYW0gZWxlbWVudFNoYXBlIG91dHB1dCB0ZW5zb3IgZWxlbWVudCBzaGFwZVxuICAgKi9cbiAgY29uY2F0KGVsZW1lbnREdHlwZTogRGF0YVR5cGUsIGVsZW1lbnRTaGFwZTogbnVtYmVyW10pOiBUZW5zb3Ige1xuICAgIGlmICghIWVsZW1lbnREdHlwZSAmJiBlbGVtZW50RHR5cGUgIT09IHRoaXMuZWxlbWVudER0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvckxpc3QgZHR5cGUgaXMgJHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnREdHlwZX0gYnV0IGNvbmNhdCByZXF1ZXN0ZWQgZHR5cGUgJHtlbGVtZW50RHR5cGV9YCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0U2hhcGVzTWF0Y2hBbGxvd1VuZGVmaW5lZFNpemUoXG4gICAgICAgIHRoaXMuZWxlbWVudFNoYXBlLCBlbGVtZW50U2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcbiAgICBjb25zdCBvdXRwdXRFbGVtZW50U2hhcGUgPVxuICAgICAgICBpbmZlckVsZW1lbnRTaGFwZSh0aGlzLmVsZW1lbnRTaGFwZSwgdGhpcy50ZW5zb3JzLCBlbGVtZW50U2hhcGUpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gdGVuc29yKFtdLCBbMF0uY29uY2F0KG91dHB1dEVsZW1lbnRTaGFwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICBjb25zdCB0ZW5zb3JzID0gdGhpcy50ZW5zb3JzLm1hcCh0ID0+IHJlc2hhcGUodCwgb3V0cHV0RWxlbWVudFNoYXBlKSk7XG4gICAgICByZXR1cm4gY29uY2F0KHRlbnNvcnMsIDApO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFRlbnNvckxpc3Qgd2hpY2gsIHdoZW4gc3RhY2tlZCwgaGFzIHRoZSB2YWx1ZSBvZiB0ZW5zb3IuXG4gKiBAcGFyYW0gdGVuc29yIGZyb20gdGVuc29yXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIG91dHB1dCB0ZW5zb3IgZWxlbWVudCBzaGFwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRlbnNvcihcbiAgICB0ZW5zb3I6IFRlbnNvciwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSwgZWxlbWVudER0eXBlOiBEYXRhVHlwZSkge1xuICBjb25zdCBkdHlwZSA9IHRlbnNvci5kdHlwZTtcbiAgaWYgKHRlbnNvci5zaGFwZS5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGVuc29yIG11c3QgYmUgYXQgbGVhc3QgYSB2ZWN0b3IsIGJ1dCBzYXcgc2hhcGU6ICR7dGVuc29yLnNoYXBlfWApO1xuICB9XG4gIGlmICh0ZW5zb3IuZHR5cGUgIT09IGVsZW1lbnREdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRhIHR5cGVzOyBvcCBlbGVtZW50cyAke1xuICAgICAgICB0ZW5zb3IuZHR5cGV9LCBidXQgbGlzdCBlbGVtZW50cyAke2VsZW1lbnREdHlwZX1gKTtcbiAgfVxuICBjb25zdCB0ZW5zb3JFbGVtZW50U2hhcGUgPSB0ZW5zb3Iuc2hhcGUuc2xpY2UoMSk7XG4gIGFzc2VydFNoYXBlc01hdGNoQWxsb3dVbmRlZmluZWRTaXplKFxuICAgICAgdGVuc29yRWxlbWVudFNoYXBlLCBlbGVtZW50U2hhcGUsICdUZW5zb3JMaXN0IHNoYXBlIG1pc21hdGNoOiAnKTtcbiAgY29uc3QgdGVuc29yTGlzdDogVGVuc29yW10gPSB1bnN0YWNrKHRlbnNvcik7XG4gIHJldHVybiBuZXcgVGVuc29yTGlzdCh0ZW5zb3JMaXN0LCBlbGVtZW50U2hhcGUsIGR0eXBlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBUZW5zb3JMaXN0IG9mIHRoZSBnaXZlbiBzaXplIHdpdGggZW1wdHkgZWxlbWVudHMuXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIHRoZSBzaGFwZSBvZiB0aGUgZnV0dXJlIGVsZW1lbnRzIG9mIHRoZSBsaXN0XG4gKiBAcGFyYW0gZWxlbWVudER0eXBlIHRoZSBkZXNpcmVkIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3RcbiAqIEBwYXJhbSBudW1FbGVtZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJlc2VydmVcbiAqIEBwYXJhbSBtYXhOdW1FbGVtZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGggbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXJ2ZShcbiAgICBlbGVtZW50U2hhcGU6IG51bWJlcltdLCBlbGVtZW50RHR5cGU6IERhdGFUeXBlLCBudW1FbGVtZW50czogbnVtYmVyLFxuICAgIG1heE51bUVsZW1lbnRzOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSwgbWF4TnVtRWxlbWVudHMpO1xufVxuXG4vKipcbiAqIFB1dCB0ZW5zb3JzIGF0IHNwZWNpZmljIGluZGljZXMgb2YgYSBzdGFja2VkIHRlbnNvciBpbnRvIGEgVGVuc29yTGlzdC5cbiAqIEBwYXJhbSBpbmRpY2VzIGxpc3Qgb2YgaW5kaWNlcyBvbiBob3cgdG8gc2NhdHRlciB0aGUgdGVuc29yLlxuICogQHBhcmFtIHRlbnNvciBpbnB1dCB0ZW5zb3IuXG4gKiBAcGFyYW0gZWxlbWVudFNoYXBlIHRoZSBzaGFwZSBvZiB0aGUgZnV0dXJlIGVsZW1lbnRzIG9mIHRoZSBsaXN0XG4gKiBAcGFyYW0gbnVtRWxlbWVudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzY2F0dGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2F0dGVyKFxuICAgIHRlbnNvcjogVGVuc29yLCBpbmRpY2VzOiBudW1iZXJbXSwgZWxlbWVudFNoYXBlOiBudW1iZXJbXSxcbiAgICBudW1FbGVtZW50cz86IG51bWJlcik6IFRlbnNvckxpc3Qge1xuICBpZiAoaW5kaWNlcy5sZW5ndGggIT09IHRlbnNvci5zaGFwZVswXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbGVuKGluZGljZXMpID09IHRlbnNvci5zaGFwZVswXSwgYnV0IHNhdzogJHtcbiAgICAgICAgaW5kaWNlcy5sZW5ndGh9IHZzLiAke3RlbnNvci5zaGFwZVswXX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1heEluZGV4ID0gTWF0aC5tYXgoLi4uaW5kaWNlcyk7XG5cbiAgaWYgKG51bUVsZW1lbnRzICE9IG51bGwgJiYgbnVtRWxlbWVudHMgIT09IC0xICYmIG1heEluZGV4ID49IG51bUVsZW1lbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWF4IGluZGV4IG11c3QgYmUgPCBhcnJheSBzaXplICgke21heEluZGV4fSAgdnMuICR7bnVtRWxlbWVudHN9KWApO1xuICB9XG5cbiAgY29uc3QgbGlzdCA9IG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIHRlbnNvci5kdHlwZSwgbnVtRWxlbWVudHMpO1xuICBjb25zdCB0ZW5zb3JzID0gdW5zdGFjayh0ZW5zb3IsIDApO1xuICBpbmRpY2VzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGxpc3Quc2V0SXRlbSh2YWx1ZSwgdGVuc29yc1tpbmRleF0pO1xuICB9KTtcbiAgcmV0dXJuIGxpc3Q7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZhbHVlcyBvZiBhIFRlbnNvciBpbnRvIGEgVGVuc29yTGlzdC5cbiAqIEBwYXJhbSBsZW5ndGggdGhlIGxlbmd0aHMgdG8gdXNlIHdoZW4gc3BsaXR0aW5nIHZhbHVlIGFsb25nXG4gKiAgICBpdHMgZmlyc3QgZGltZW5zaW9uLlxuICogQHBhcmFtIHRlbnNvciB0aGUgdGVuc29yIHRvIHNwbGl0LlxuICogQHBhcmFtIGVsZW1lbnRTaGFwZSB0aGUgc2hhcGUgb2YgdGhlIGZ1dHVyZSBlbGVtZW50cyBvZiB0aGUgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXQoXG4gICAgdGVuc29yOiBUZW5zb3IsIGxlbmd0aDogbnVtYmVyW10sIGVsZW1lbnRTaGFwZTogbnVtYmVyW10pIHtcbiAgbGV0IHRvdGFsTGVuZ3RoID0gMDtcbiAgY29uc3QgY3VtdWxhdGl2ZUxlbmd0aHMgPSBsZW5ndGgubWFwKGxlbiA9PiB7XG4gICAgdG90YWxMZW5ndGggKz0gbGVuO1xuICAgIHJldHVybiB0b3RhbExlbmd0aDtcbiAgfSk7XG5cbiAgaWYgKHRvdGFsTGVuZ3RoICE9PSB0ZW5zb3Iuc2hhcGVbMF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN1bSBvZiBsZW5ndGhzIHRvIGJlIGVxdWFsIHRvXG4gICAgICAgICAgdGVuc29yLnNoYXBlWzBdLCBidXQgc3VtIG9mIGxlbmd0aHMgaXNcbiAgICAgICAgJHt0b3RhbExlbmd0aH0sIGFuZCB0ZW5zb3IncyBzaGFwZSBpczogJHt0ZW5zb3Iuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBzaGFwZVdpdGhvdXRGaXJzdERpbSA9IHRlbnNvci5zaGFwZS5zbGljZSgxKTtcbiAgY29uc3Qgb3V0cHV0RWxlbWVudFNoYXBlID1cbiAgICAgIG1lcmdlRWxlbWVudFNoYXBlKHNoYXBlV2l0aG91dEZpcnN0RGltLCBlbGVtZW50U2hhcGUpO1xuICBjb25zdCBlbGVtZW50UGVyUm93ID0gdG90YWxMZW5ndGggPT09IDAgPyAwIDogdGVuc29yLnNpemUgLyB0b3RhbExlbmd0aDtcbiAgY29uc3QgdGVuc29yczogVGVuc29yW10gPSB0aWR5KCgpID0+IHtcbiAgICBjb25zdCB0ZW5zb3JzID0gW107XG4gICAgdGVuc29yID0gcmVzaGFwZSh0ZW5zb3IsIFsxLCB0b3RhbExlbmd0aCwgZWxlbWVudFBlclJvd10pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0xlbmd0aCA9IChpID09PSAwKSA/IDAgOiBjdW11bGF0aXZlTGVuZ3Roc1tpIC0gMV07XG4gICAgICBjb25zdCBpbmRpY2VzID0gWzAsIHByZXZpb3VzTGVuZ3RoLCAwXTtcbiAgICAgIGNvbnN0IHNpemVzID0gWzEsIGxlbmd0aFtpXSwgZWxlbWVudFBlclJvd107XG4gICAgICB0ZW5zb3JzW2ldID0gcmVzaGFwZShcbiAgICAgICAgICBzbGljZSh0ZW5zb3IsIGluZGljZXMsIHNpemVzKSwgb3V0cHV0RWxlbWVudFNoYXBlIGFzIG51bWJlcltdKTtcbiAgICB9XG4gICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICByZXR1cm4gdGVuc29ycztcbiAgfSk7XG5cbiAgY29uc3QgbGlzdCA9IG5ldyBUZW5zb3JMaXN0KFtdLCBlbGVtZW50U2hhcGUsIHRlbnNvci5kdHlwZSwgbGVuZ3RoLmxlbmd0aCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW5zb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGlzdC5zZXRJdGVtKGksIHRlbnNvcnNbaV0pO1xuICB9XG4gIHJldHVybiBsaXN0O1xufVxuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { scalar } from '@tensorflow/tfjs-core';\nimport { TensorArray } from '../../executor/tensor_array';\nimport { fromTensor, reserve, scatter, split } from '../../executor/tensor_list';\nimport { cloneTensor, getParamValue, getTensor } from './utils';\nexport const executeOp = async (node, tensorMap, context) => {\n switch (node.op) {\n case 'If':\n case 'StatelessIf': {\n const thenFunc = getParamValue('thenBranch', node, tensorMap, context);\n const elseFunc = getParamValue('elseBranch', node, tensorMap, context);\n const cond = getParamValue('cond', node, tensorMap, context);\n const args = getParamValue('args', node, tensorMap, context);\n const condValue = await cond.data();\n if (condValue[0]) {\n return context.functionMap[thenFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap);\n }\n else {\n return context.functionMap[elseFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap);\n }\n }\n case 'While':\n case 'StatelessWhile': {\n const bodyFunc = getParamValue('body', node, tensorMap, context);\n const condFunc = getParamValue('cond', node, tensorMap, context);\n const args = getParamValue('args', node, tensorMap, context);\n // Calculate the condition of the loop\n const condResult = (await context.functionMap[condFunc].executeFunctionAsync(args, context.tensorArrayMap, context.tensorListMap));\n const argIds = args.map(tensor => tensor.id);\n let condValue = await condResult[0].data();\n // Dispose the intermediate tensors for condition function\n condResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n let result = args;\n while (condValue[0]) {\n // Record the previous result for intermediate tensor tracking\n const origResult = result;\n // Execution the body of the loop\n result = await context.functionMap[bodyFunc].executeFunctionAsync(result, context.tensorArrayMap, context.tensorListMap);\n const resultIds = result.map(tensor => tensor.id);\n // Dispose the intermediate tensor for body function that is not global\n // kept, not input/output of the body function\n origResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1 &&\n resultIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n // Recalcuate the condition of the loop using the latest results.\n const condResult = (await context.functionMap[condFunc].executeFunctionAsync(result, context.tensorArrayMap, context.tensorListMap));\n condValue = await condResult[0].data();\n // Dispose the intermediate tensors for condition function\n condResult.forEach(tensor => {\n if (!tensor.kept && argIds.indexOf(tensor.id) === -1 &&\n resultIds.indexOf(tensor.id) === -1) {\n tensor.dispose();\n }\n });\n }\n return result;\n }\n case 'LoopCond': {\n const pred = getParamValue('pred', node, tensorMap, context);\n return [cloneTensor(pred)];\n }\n case 'Switch': {\n const pred = getParamValue('pred', node, tensorMap, context);\n let data = getParamValue('data', node, tensorMap, context);\n if (!data.kept) {\n data = cloneTensor(data);\n }\n // Outputs nodes :0 => false, :1 => true\n return (await pred.data())[0] ? [undefined, data] : [data, undefined];\n }\n case 'Merge': {\n const inputName = node.inputNames.find(name => getTensor(name, tensorMap, context) !== undefined);\n if (inputName) {\n const data = getTensor(inputName, tensorMap, context);\n return [cloneTensor(data)];\n }\n return undefined;\n }\n case 'Enter': {\n const frameId = getParamValue('frameName', node, tensorMap, context);\n const data = getParamValue('tensor', node, tensorMap, context);\n context.enterFrame(frameId);\n return [cloneTensor(data)];\n }\n case 'Exit': {\n const data = getParamValue('tensor', node, tensorMap, context);\n context.exitFrame();\n return [cloneTensor(data)];\n }\n case 'NextIteration': {\n const data = getParamValue('tensor', node, tensorMap, context);\n context.nextIteration();\n return [cloneTensor(data)];\n }\n case 'TensorArrayV3': {\n const size = getParamValue('size', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const dynamicSize = getParamValue('dynamicSize', node, tensorMap, context);\n const clearAfterRead = getParamValue('clearAfterRead', node, tensorMap, context);\n const identicalElementShapes = getParamValue('identicalElementShapes', node, tensorMap, context);\n const name = getParamValue('name', node, tensorMap, context);\n const tensorArray = new TensorArray(name, dtype, size, elementShape, identicalElementShapes, dynamicSize, clearAfterRead);\n context.addTensorArray(tensorArray);\n return [tensorArray.idTensor, scalar(1.0)];\n }\n case 'TensorArrayWriteV3': {\n const id = getParamValue('tensorArrayId', node, tensorMap, context);\n const index = getParamValue('index', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const writeTensorArray = context.getTensorArray(id.id);\n writeTensorArray.write(index, writeTensor);\n return [writeTensorArray.idTensor];\n }\n case 'TensorArrayReadV3': {\n const readId = getParamValue('tensorArrayId', node, tensorMap, context);\n const readIndex = getParamValue('index', node, tensorMap, context);\n const readTensorArray = context.getTensorArray(readId.id);\n return [readTensorArray.read(readIndex)];\n }\n case 'TensorArrayGatherV3': {\n const gatherId = getParamValue('tensorArrayId', node, tensorMap, context);\n const gatherIndices = getParamValue('indices', node, tensorMap, context);\n const gatherDtype = getParamValue('dtype', node, tensorMap, context);\n const gatherTensorArray = context.getTensorArray(gatherId.id);\n return [gatherTensorArray.gather(gatherIndices, gatherDtype)];\n }\n case 'TensorArrayScatterV3': {\n const scatterId = getParamValue('tensorArrayId', node, tensorMap, context);\n const scatterIndices = getParamValue('indices', node, tensorMap, context);\n const scatterTensor = getParamValue('tensor', node, tensorMap, context);\n const scatterTensorArray = context.getTensorArray(scatterId.id);\n scatterTensorArray.scatter(scatterIndices, scatterTensor);\n return [scatterTensorArray.idTensor];\n }\n case 'TensorArrayConcatV3': {\n const concatId = getParamValue('tensorArrayId', node, tensorMap, context);\n const concatTensorArray = context.getTensorArray(concatId.id);\n const concatDtype = getParamValue('dtype', node, tensorMap, context);\n return [concatTensorArray.concat(concatDtype)];\n }\n case 'TensorArraySplitV3': {\n const splitId = getParamValue('tensorArrayId', node, tensorMap, context);\n const splitTensor = getParamValue('tensor', node, tensorMap, context);\n const lengths = getParamValue('lengths', node, tensorMap, context);\n const splitTensorArray = context.getTensorArray(splitId.id);\n splitTensorArray.split(lengths, splitTensor);\n return [splitTensorArray.idTensor];\n }\n case 'TensorArraySizeV3': {\n const sizeId = getParamValue('tensorArrayId', node, tensorMap, context);\n const sizeTensorArray = context.getTensorArray(sizeId.id);\n return [scalar(sizeTensorArray.size(), 'int32')];\n }\n case 'TensorArrayCloseV3': {\n const closeId = getParamValue('tensorArrayId', node, tensorMap, context);\n const closeTensorArray = context.getTensorArray(closeId.id);\n closeTensorArray.clearAndClose();\n return [closeTensorArray.idTensor];\n }\n case 'TensorListSetItem': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const index = getParamValue('index', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n tensorList.setItem(index, writeTensor);\n return [tensorList.idTensor];\n }\n case 'TensorListGetItem': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const readIndex = getParamValue('index', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDType = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.getItem(readIndex, elementShape, elementDType)];\n }\n case 'TensorListScatterV2':\n case 'TensorListScatter': {\n const scatterIndices = getParamValue('indices', node, tensorMap, context);\n const scatterTensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const numElements = getParamValue('numElements', node, tensorMap, context);\n const tensorList = scatter(scatterTensor, scatterIndices, elementShape, numElements);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListReserve':\n case 'EmptyTensorList': {\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n let numElementsParam;\n if (node.op === 'TensorListReserve') {\n numElementsParam = 'numElements';\n }\n else {\n numElementsParam = 'maxNumElements';\n }\n const numElements = getParamValue(numElementsParam, node, tensorMap, context);\n const maxNumElements = node.op === 'TensorListReserve' ? -1 : numElements;\n const tensorList = reserve(elementShape, elementDtype, numElements, maxNumElements);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListGather': {\n const gatherId = getParamValue('tensorListId', node, tensorMap, context);\n const gatherIndices = getParamValue('indices', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(gatherId.id);\n return [tensorList.gather(gatherIndices, elementDtype, elementShape)];\n }\n case 'TensorListStack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const numElements = getParamValue('numElements', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.stack(elementShape, elementDtype, numElements)];\n }\n case 'TensorListFromTensor': {\n const tensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDtype = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = fromTensor(tensor, elementShape, elementDtype);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListConcat':\n case 'TensorListConcatV2': {\n const concatId = getParamValue('tensorListId', node, tensorMap, context);\n const tensorList = context.getTensorList(concatId.id);\n const concatDtype = getParamValue('dtype', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n return [tensorList.concat(concatDtype, elementShape)];\n }\n case 'TensorListPushBack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const writeTensor = getParamValue('tensor', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n tensorList.pushBack(writeTensor);\n return [tensorList.idTensor];\n }\n case 'TensorListPopBack': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const elementDType = getParamValue('elementDType', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [tensorList.popBack(elementShape, elementDType)];\n }\n case 'TensorListSplit': {\n const splitTensor = getParamValue('tensor', node, tensorMap, context);\n const elementShape = getParamValue('elementShape', node, tensorMap, context);\n const lengths = getParamValue('lengths', node, tensorMap, context);\n const tensorList = split(splitTensor, lengths, elementShape);\n context.addTensorList(tensorList);\n return [tensorList.idTensor];\n }\n case 'TensorListLength': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const tensorList = context.getTensorList(idTensor.id);\n return [scalar(tensorList.size(), 'int32')];\n }\n case 'TensorListResize': {\n const idTensor = getParamValue('tensorListId', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const srcTensorList = context.getTensorList(idTensor.id);\n const destTensorList = srcTensorList.resize(size);\n context.addTensorList(destTensorList);\n return [destTensorList.idTensor];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'control';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9jb250cm9sX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBVyxNQUFNLEVBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUkvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRy9FLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTRCLEtBQUssRUFDbkQsSUFBVSxFQUFFLFNBQTBCLEVBQ3RDLE9BQXlCLEVBQXFCLEVBQUU7SUFDbEQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FDVixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDcEUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FB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LEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUN0RSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFFdkUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIHNjYWxhciwgVGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7VGVuc29yQXJyYXl9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL3RlbnNvcl9hcnJheSc7XG5pbXBvcnQge2Zyb21UZW5zb3IsIHJlc2VydmUsIHNjYXR0ZXIsIHNwbGl0fSBmcm9tICcuLi8uLi9leGVjdXRvci90ZW5zb3JfbGlzdCc7XG5pbXBvcnQge0ludGVybmFsT3BBc3luY0V4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Y2xvbmVUZW5zb3IsIGdldFBhcmFtVmFsdWUsIGdldFRlbnNvcn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BBc3luY0V4ZWN1dG9yID0gYXN5bmMoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnSWYnOlxuICAgIGNhc2UgJ1N0YXRlbGVzc0lmJzoge1xuICAgICAgY29uc3QgdGhlbkZ1bmMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RoZW5CcmFuY2gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGVsc2VGdW5jID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbHNlQnJhbmNoJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBjb25kID0gZ2V0UGFyYW1WYWx1ZSgnY29uZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgYXJncyA9IGdldFBhcmFtVmFsdWUoJ2FyZ3MnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdO1xuICAgICAgY29uc3QgY29uZFZhbHVlID0gYXdhaXQgY29uZC5kYXRhKCk7XG4gICAgICBpZiAoY29uZFZhbHVlWzBdKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmZ1bmN0aW9uTWFwW3RoZW5GdW5jXS5leGVjdXRlRnVuY3Rpb25Bc3luYyhcbiAgICAgICAgICAgIGFyZ3MsIGNvbnRleHQudGVuc29yQXJyYXlNYXAsIGNvbnRleHQudGVuc29yTGlzdE1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29udGV4dC5mdW5jdGlvbk1hcFtlbHNlRnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICBhcmdzLCBjb250ZXh0LnRlbnNvckFycmF5TWFwLCBjb250ZXh0LnRlbnNvckxpc3RNYXApO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICdXaGlsZSc6XG4gICAgY2FzZSAnU3RhdGVsZXNzV2hpbGUnOiB7XG4gICAgICBjb25zdCBib2R5RnVuYyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYm9keScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgY29uZEZ1bmMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2NvbmQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGFyZ3MgPSBnZXRQYXJhbVZhbHVlKCdhcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb25kaXRpb24gb2YgdGhlIGxvb3BcbiAgICAgIGNvbnN0IGNvbmRSZXN1bHQgPVxuICAgICAgICAgIChhd2FpdCBjb250ZXh0LmZ1bmN0aW9uTWFwW2NvbmRGdW5jXS5leGVjdXRlRnVuY3Rpb25Bc3luYyhcbiAgICAgICAgICAgICAgYXJncywgY29udGV4dC50ZW5zb3JBcnJheU1hcCwgY29udGV4dC50ZW5zb3JMaXN0TWFwKSk7XG4gICAgICBjb25zdCBhcmdJZHMgPSBhcmdzLm1hcCh0ZW5zb3IgPT4gdGVuc29yLmlkKTtcbiAgICAgIGxldCBjb25kVmFsdWUgPSBhd2FpdCBjb25kUmVzdWx0WzBdLmRhdGEoKTtcbiAgICAgIC8vIERpc3Bvc2UgdGhlIGludGVybWVkaWF0ZSB0ZW5zb3JzIGZvciBjb25kaXRpb24gZnVuY3Rpb25cbiAgICAgIGNvbmRSZXN1bHQuZm9yRWFjaCh0ZW5zb3IgPT4ge1xuICAgICAgICBpZiAoIXRlbnNvci5rZXB0ICYmIGFyZ0lkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xKSB7XG4gICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxldCByZXN1bHQ6IFRlbnNvcltdID0gYXJncztcblxuICAgICAgd2hpbGUgKGNvbmRWYWx1ZVswXSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHByZXZpb3VzIHJlc3VsdCBmb3IgaW50ZXJtZWRpYXRlIHRlbnNvciB0cmFja2luZ1xuICAgICAgICBjb25zdCBvcmlnUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAvLyBFeGVjdXRpb24gdGhlIGJvZHkgb2YgdGhlIGxvb3BcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5mdW5jdGlvbk1hcFtib2R5RnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICByZXN1bHQsIGNvbnRleHQudGVuc29yQXJyYXlNYXAsIGNvbnRleHQudGVuc29yTGlzdE1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdElkcyA9IHJlc3VsdC5tYXAodGVuc29yID0+IHRlbnNvci5pZCk7XG5cbiAgICAgICAgLy8gRGlzcG9zZSB0aGUgaW50ZXJtZWRpYXRlIHRlbnNvciBmb3IgYm9keSBmdW5jdGlvbiB0aGF0IGlzIG5vdCBnbG9iYWxcbiAgICAgICAgLy8ga2VwdCwgbm90IGlucHV0L291dHB1dCBvZiB0aGUgYm9keSBmdW5jdGlvblxuICAgICAgICBvcmlnUmVzdWx0LmZvckVhY2godGVuc29yID0+IHtcbiAgICAgICAgICBpZiAoIXRlbnNvci5rZXB0ICYmIGFyZ0lkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xICYmXG4gICAgICAgICAgICAgIHJlc3VsdElkcy5pbmRleE9mKHRlbnNvci5pZCkgPT09IC0xKSB7XG4gICAgICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjYWxjdWF0ZSB0aGUgY29uZGl0aW9uIG9mIHRoZSBsb29wIHVzaW5nIHRoZSBsYXRlc3QgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgY29uZFJlc3VsdCA9XG4gICAgICAgICAgICAoYXdhaXQgY29udGV4dC5mdW5jdGlvbk1hcFtjb25kRnVuY10uZXhlY3V0ZUZ1bmN0aW9uQXN5bmMoXG4gICAgICAgICAgICAgICAgcmVzdWx0LCBjb250ZXh0LnRlbnNvckFycmF5TWFwLCBjb250ZXh0LnRlbnNvckxpc3RNYXApKTtcbiAgICAgICAgY29uZFZhbHVlID0gYXdhaXQgY29uZFJlc3VsdFswXS5kYXRhKCk7XG4gICAgICAgIC8vIERpc3Bvc2UgdGhlIGludGVybWVkaWF0ZSB0ZW5zb3JzIGZvciBjb25kaXRpb24gZnVuY3Rpb25cbiAgICAgICAgY29uZFJlc3VsdC5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICAgICAgaWYgKCF0ZW5zb3Iua2VwdCAmJiBhcmdJZHMuaW5kZXhPZih0ZW5zb3IuaWQpID09PSAtMSAmJlxuICAgICAgICAgICAgICByZXN1bHRJZHMuaW5kZXhPZih0ZW5zb3IuaWQpID09PSAtMSkge1xuICAgICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY2FzZSAnTG9vcENvbmQnOiB7XG4gICAgICBjb25zdCBwcmVkID0gZ2V0UGFyYW1WYWx1ZSgncHJlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihwcmVkKV07XG4gICAgfVxuICAgIGNhc2UgJ1N3aXRjaCc6IHtcbiAgICAgIGNvbnN0IHByZWQgPSBnZXRQYXJhbVZhbHVlKCdwcmVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBsZXQgZGF0YSA9IGdldFBhcmFtVmFsdWUoJ2RhdGEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGlmICghZGF0YS5rZXB0KSB7XG4gICAgICAgIGRhdGEgPSBjbG9uZVRlbnNvcihkYXRhKTtcbiAgICAgIH1cbiAgICAgIC8vIE91dHB1dHMgbm9kZXMgOjAgPT4gZmFsc2UsIDoxID0+IHRydWVcbiAgICAgIHJldHVybiAoYXdhaXQgcHJlZC5kYXRhKCkpWzBdID8gW3VuZGVmaW5lZCwgZGF0YV0gOiBbZGF0YSwgdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgY2FzZSAnTWVyZ2UnOiB7XG4gICAgICBjb25zdCBpbnB1dE5hbWUgPSBub2RlLmlucHV0TmFtZXMuZmluZChcbiAgICAgICAgICBuYW1lID0+IGdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQpICE9PSB1bmRlZmluZWQpO1xuICAgICAgaWYgKGlucHV0TmFtZSkge1xuICAgICAgICBjb25zdCBkYXRhID0gZ2V0VGVuc29yKGlucHV0TmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgIGNvbnN0IGZyYW1lSWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ZyYW1lTmFtZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29udGV4dC5lbnRlckZyYW1lKGZyYW1lSWQpO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgfVxuICAgIGNhc2UgJ0V4aXQnOiB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb250ZXh0LmV4aXRGcmFtZSgpO1xuICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgfVxuICAgIGNhc2UgJ05leHRJdGVyYXRpb24nOiB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb250ZXh0Lm5leHRJdGVyYXRpb24oKTtcbiAgICAgIHJldHVybiBbY2xvbmVUZW5zb3IoZGF0YSldO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheVYzJzoge1xuICAgICAgY29uc3Qgc2l6ZSA9IGdldFBhcmFtVmFsdWUoJ3NpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgIGNvbnN0IGR0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBkeW5hbWljU2l6ZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHluYW1pY1NpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICBjb25zdCBjbGVhckFmdGVyUmVhZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY2xlYXJBZnRlclJlYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICBjb25zdCBpZGVudGljYWxFbGVtZW50U2hhcGVzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpZGVudGljYWxFbGVtZW50U2hhcGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgIGJvb2xlYW47XG4gICAgICBjb25zdCBuYW1lID0gZ2V0UGFyYW1WYWx1ZSgnbmFtZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdGVuc29yQXJyYXkgPSBuZXcgVGVuc29yQXJyYXkoXG4gICAgICAgICAgbmFtZSwgZHR5cGUsIHNpemUsIGVsZW1lbnRTaGFwZSwgaWRlbnRpY2FsRWxlbWVudFNoYXBlcywgZHluYW1pY1NpemUsXG4gICAgICAgICAgY2xlYXJBZnRlclJlYWQpO1xuICAgICAgY29udGV4dC5hZGRUZW5zb3JBcnJheSh0ZW5zb3JBcnJheSk7XG4gICAgICByZXR1cm4gW3RlbnNvckFycmF5LmlkVGVuc29yLCBzY2FsYXIoMS4wKV07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckFycmF5V3JpdGVWMyc6IHtcbiAgICAgIGNvbnN0IGlkID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JBcnJheUlkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBpbmRleCA9IGdldFBhcmFtVmFsdWUoJ2luZGV4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICBjb25zdCB3cml0ZVRlbnNvciA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB3cml0ZVRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShpZC5pZCk7XG4gICAgICB3cml0ZVRlbnNvckFycmF5LndyaXRlKGluZGV4LCB3cml0ZVRlbnNvcik7XG4gICAgICByZXR1cm4gW3dyaXRlVGVuc29yQXJyYXkuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheVJlYWRWMyc6IHtcbiAgICAgIGNvbnN0IHJlYWRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgcmVhZEluZGV4ID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgcmVhZFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShyZWFkSWQuaWQpO1xuICAgICAgcmV0dXJuIFtyZWFkVGVuc29yQXJyYXkucmVhZChyZWFkSW5kZXgpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlHYXRoZXJWMyc6IHtcbiAgICAgIGNvbnN0IGdhdGhlcklkID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JBcnJheUlkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBnYXRoZXJJbmRpY2VzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IGdhdGhlckR0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBnYXRoZXJUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoZ2F0aGVySWQuaWQpO1xuICAgICAgcmV0dXJuIFtnYXRoZXJUZW5zb3JBcnJheS5nYXRoZXIoZ2F0aGVySW5kaWNlcywgZ2F0aGVyRHR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTY2F0dGVyVjMnOiB7XG4gICAgICBjb25zdCBzY2F0dGVySWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNjYXR0ZXJJbmRpY2VzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IHNjYXR0ZXJUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgc2NhdHRlclRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShzY2F0dGVySWQuaWQpO1xuICAgICAgc2NhdHRlclRlbnNvckFycmF5LnNjYXR0ZXIoc2NhdHRlckluZGljZXMsIHNjYXR0ZXJUZW5zb3IpO1xuICAgICAgcmV0dXJuIFtzY2F0dGVyVGVuc29yQXJyYXkuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JBcnJheUNvbmNhdFYzJzoge1xuICAgICAgY29uc3QgY29uY2F0SWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGNvbmNhdFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShjb25jYXRJZC5pZCk7XG4gICAgICBjb25zdCBjb25jYXREdHlwZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgcmV0dXJuIFtjb25jYXRUZW5zb3JBcnJheS5jb25jYXQoY29uY2F0RHR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTcGxpdFYzJzoge1xuICAgICAgY29uc3Qgc3BsaXRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgc3BsaXRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgbGVuZ3RocyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVuZ3RocycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBzcGxpdFRlbnNvckFycmF5ID0gY29udGV4dC5nZXRUZW5zb3JBcnJheShzcGxpdElkLmlkKTtcbiAgICAgIHNwbGl0VGVuc29yQXJyYXkuc3BsaXQobGVuZ3Rocywgc3BsaXRUZW5zb3IpO1xuICAgICAgcmV0dXJuIFtzcGxpdFRlbnNvckFycmF5LmlkVGVuc29yXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlTaXplVjMnOiB7XG4gICAgICBjb25zdCBzaXplSWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckFycmF5SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNpemVUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoc2l6ZUlkLmlkKTtcbiAgICAgIHJldHVybiBbc2NhbGFyKHNpemVUZW5zb3JBcnJheS5zaXplKCksICdpbnQzMicpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yQXJyYXlDbG9zZVYzJzoge1xuICAgICAgY29uc3QgY2xvc2VJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yQXJyYXlJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgY2xvc2VUZW5zb3JBcnJheSA9IGNvbnRleHQuZ2V0VGVuc29yQXJyYXkoY2xvc2VJZC5pZCk7XG4gICAgICBjbG9zZVRlbnNvckFycmF5LmNsZWFyQW5kQ2xvc2UoKTtcbiAgICAgIHJldHVybiBbY2xvc2VUZW5zb3JBcnJheS5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RTZXRJdGVtJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgaW5kZXggPSBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3Qgd3JpdGVUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICB0ZW5zb3JMaXN0LnNldEl0ZW0oaW5kZXgsIHdyaXRlVGVuc29yKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RHZXRJdGVtJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgcmVhZEluZGV4ID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRleCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuXG4gICAgICBjb25zdCBlbGVtZW50RFR5cGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnREVHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGlkVGVuc29yLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5nZXRJdGVtKHJlYWRJbmRleCwgZWxlbWVudFNoYXBlLCBlbGVtZW50RFR5cGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFNjYXR0ZXJWMic6XG4gICAgY2FzZSAnVGVuc29yTGlzdFNjYXR0ZXInOiB7XG4gICAgICBjb25zdCBzY2F0dGVySW5kaWNlcyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBzY2F0dGVyVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGVsZW1lbnRTaGFwZSA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZWxlbWVudFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgIGNvbnN0IG51bUVsZW1lbnRzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdudW1FbGVtZW50cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9XG4gICAgICAgICAgc2NhdHRlcihzY2F0dGVyVGVuc29yLCBzY2F0dGVySW5kaWNlcywgZWxlbWVudFNoYXBlLCBudW1FbGVtZW50cyk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0UmVzZXJ2ZSc6XG4gICAgY2FzZSAnRW1wdHlUZW5zb3JMaXN0Jzoge1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgbGV0IG51bUVsZW1lbnRzUGFyYW07XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnVGVuc29yTGlzdFJlc2VydmUnKSB7XG4gICAgICAgIG51bUVsZW1lbnRzUGFyYW0gPSAnbnVtRWxlbWVudHMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtRWxlbWVudHNQYXJhbSA9ICdtYXhOdW1FbGVtZW50cyc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bUVsZW1lbnRzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKG51bUVsZW1lbnRzUGFyYW0sIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgY29uc3QgbWF4TnVtRWxlbWVudHMgPSBub2RlLm9wID09PSAnVGVuc29yTGlzdFJlc2VydmUnID8gLTEgOiBudW1FbGVtZW50cztcbiAgICAgIGNvbnN0IHRlbnNvckxpc3QgPVxuICAgICAgICAgIHJlc2VydmUoZWxlbWVudFNoYXBlLCBlbGVtZW50RHR5cGUsIG51bUVsZW1lbnRzLCBtYXhOdW1FbGVtZW50cyk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0R2F0aGVyJzoge1xuICAgICAgY29uc3QgZ2F0aGVySWQgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZ2F0aGVySW5kaWNlcyA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBlbGVtZW50RHR5cGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnREVHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGdhdGhlcklkLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5nYXRoZXIoZ2F0aGVySW5kaWNlcywgZWxlbWVudER0eXBlLCBlbGVtZW50U2hhcGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFN0YWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgbnVtRWxlbWVudHMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ251bUVsZW1lbnRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGlkVGVuc29yLmlkKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5zdGFjayhlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSwgbnVtRWxlbWVudHMpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdEZyb21UZW5zb3InOiB7XG4gICAgICBjb25zdCB0ZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGZyb21UZW5zb3IodGVuc29yLCBlbGVtZW50U2hhcGUsIGVsZW1lbnREdHlwZSk7XG4gICAgICBjb250ZXh0LmFkZFRlbnNvckxpc3QodGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuaWRUZW5zb3JdO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0Q29uY2F0JzpcbiAgICBjYXNlICdUZW5zb3JMaXN0Q29uY2F0VjInOiB7XG4gICAgICBjb25zdCBjb25jYXRJZCA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yTGlzdElkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB0ZW5zb3JMaXN0ID0gY29udGV4dC5nZXRUZW5zb3JMaXN0KGNvbmNhdElkLmlkKTtcbiAgICAgIGNvbnN0IGNvbmNhdER0eXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QuY29uY2F0KGNvbmNhdER0eXBlLCBlbGVtZW50U2hhcGUpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFB1c2hCYWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3Qgd3JpdGVUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICB0ZW5zb3JMaXN0LnB1c2hCYWNrKHdyaXRlVGVuc29yKTtcbiAgICAgIHJldHVybiBbdGVuc29yTGlzdC5pZFRlbnNvcl07XG4gICAgfVxuICAgIGNhc2UgJ1RlbnNvckxpc3RQb3BCYWNrJzoge1xuICAgICAgY29uc3QgaWRUZW5zb3IgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RlbnNvckxpc3RJZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgY29uc3QgZWxlbWVudFNoYXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgY29uc3QgZWxlbWVudERUeXBlID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGVtZW50RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IGNvbnRleHQuZ2V0VGVuc29yTGlzdChpZFRlbnNvci5pZCk7XG4gICAgICByZXR1cm4gW3RlbnNvckxpc3QucG9wQmFjayhlbGVtZW50U2hhcGUsIGVsZW1lbnREVHlwZSldO1xuICAgIH1cbiAgICBjYXNlICdUZW5zb3JMaXN0U3BsaXQnOiB7XG4gICAgICBjb25zdCBzcGxpdFRlbnNvciA9XG4gICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBlbGVtZW50U2hhcGUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VsZW1lbnRTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICBjb25zdCBsZW5ndGhzID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdsZW5ndGhzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgY29uc3QgdGVuc29yTGlzdCA9IHNwbGl0KHNwbGl0VGVuc29yLCBsZW5ndGhzLCBlbGVtZW50U2hhcGUpO1xuICAgICAgY29udGV4dC5hZGRUZW5zb3JMaXN0KHRlbnNvckxpc3QpO1xuICAgICAgcmV0dXJuIFt0ZW5zb3JMaXN0LmlkVGVuc29yXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdExlbmd0aCc6IHtcbiAgICAgIGNvbnN0IGlkVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JMaXN0SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHRlbnNvckxpc3QgPSBjb250ZXh0LmdldFRlbnNvckxpc3QoaWRUZW5zb3IuaWQpO1xuICAgICAgcmV0dXJuIFtzY2FsYXIodGVuc29yTGlzdC5zaXplKCksICdpbnQzMicpXTtcbiAgICB9XG4gICAgY2FzZSAnVGVuc29yTGlzdFJlc2l6ZSc6IHtcbiAgICAgIGNvbnN0IGlkVGVuc29yID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JMaXN0SWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IHNpemUgPSBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG5cbiAgICAgIGNvbnN0IHNyY1RlbnNvckxpc3QgPSBjb250ZXh0LmdldFRlbnNvckxpc3QoaWRUZW5zb3IuaWQpO1xuICAgICAgY29uc3QgZGVzdFRlbnNvckxpc3QgPSBzcmNUZW5zb3JMaXN0LnJlc2l6ZShzaXplKTtcbiAgICAgIGNvbnRleHQuYWRkVGVuc29yTGlzdChkZXN0VGVuc29yTGlzdCk7XG4gICAgICByZXR1cm4gW2Rlc3RUZW5zb3JMaXN0LmlkVGVuc29yXTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdjb250cm9sJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getPadding, getParamValue } from './utils';\nfunction fusedConvAndDepthWiseParams(node, tensorMap, context) {\n const [extraOp, activationFunc] = getParamValue('fusedOps', node, tensorMap, context);\n const isBiasAdd = extraOp === 'biasadd';\n const noBiasAdd = !isBiasAdd;\n const isPrelu = activationFunc === 'prelu';\n const isBatchNorm = extraOp === 'fusedbatchnorm';\n const numArgs = getParamValue('numArgs', node, tensorMap, context);\n if (isBiasAdd) {\n if (isPrelu && numArgs !== 2) {\n throw new Error('FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu ' +\n 'must have two extra arguments: bias and alpha.');\n }\n if (!isPrelu && isBiasAdd && numArgs !== 1) {\n throw new Error('FusedConv2d and DepthwiseConv2d with BiasAdd must have ' +\n 'one extra argument: bias.');\n }\n }\n if (isBatchNorm) {\n throw new Error('FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported');\n }\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n let [biasArg, preluArg] = getParamValue('args', node, tensorMap, context);\n if (noBiasAdd) {\n preluArg = biasArg;\n biasArg = undefined;\n }\n const leakyreluAlpha = getParamValue('leakyreluAlpha', node, tensorMap, context);\n return {\n stride,\n pad,\n dataFormat,\n dilations,\n biasArg,\n preluArg,\n activationFunc,\n leakyreluAlpha\n };\n}\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Conv1D': {\n const stride = getParamValue('stride', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilation = getParamValue('dilation', node, tensorMap, context);\n return [ops.conv1d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), stride, pad, dataFormat, dilation)];\n }\n case 'Conv2D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n return [ops.conv2d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [stride[1], stride[2]], pad, dataFormat, [dilations[1], dilations[2]])];\n }\n case '_FusedConv2D': {\n const { stride, pad, dataFormat, dilations, biasArg, preluArg, activationFunc, leakyreluAlpha } = fusedConvAndDepthWiseParams(node, tensorMap, context);\n return [ops.fused.conv2d({\n x: getParamValue('x', node, tensorMap, context),\n filter: getParamValue('filter', node, tensorMap, context),\n strides: [stride[1], stride[2]],\n pad: pad,\n dataFormat: dataFormat,\n dilations: [dilations[1], dilations[2]],\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n }\n case 'FusedDepthwiseConv2dNative': {\n const { stride, pad, dataFormat, dilations, biasArg, preluArg, activationFunc, leakyreluAlpha, } = fusedConvAndDepthWiseParams(node, tensorMap, context);\n return [ops.fused.depthwiseConv2d({\n x: getParamValue('x', node, tensorMap, context),\n filter: getParamValue('filter', node, tensorMap, context),\n strides: [stride[1], stride[2]],\n pad: pad,\n dataFormat: dataFormat,\n dilations: [dilations[1], dilations[2]],\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n }\n case 'Conv2DBackpropInput':\n case 'Conv2dTranspose': {\n const shape = getParamValue('outputShape', node, tensorMap, context);\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n return [ops.conv2dTranspose(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), shape, [stride[1], stride[2]], pad)];\n }\n case 'DepthwiseConv2dNative':\n case 'DepthwiseConv2d': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getPadding(node, tensorMap, context);\n const dilations = getParamValue('dilations', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n return [ops.depthwiseConv2d(getParamValue('input', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [stride[1], stride[2]], pad, dataFormat, [dilations[1], dilations[2]])];\n }\n case 'Conv3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context)\n .toUpperCase();\n const dilations = getParamValue('dilations', node, tensorMap, context);\n return [ops.conv3d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [stride[1], stride[2], stride[3]], pad, dataFormat, [dilations[1], dilations[2], dilations[3]])];\n }\n case 'AvgPool': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.avgPool(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad)];\n }\n case 'MaxPool': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.maxPool(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad)];\n }\n case 'MaxPoolWithArgmax': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n const includeBatchInIndex = getParamValue('includeBatchInIndex', node, tensorMap, context);\n const { result, indexes } = ops.maxPoolWithArgmax(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2]], [stride[1], stride[2]], pad, includeBatchInIndex);\n return [result, indexes];\n }\n case 'AvgPool3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.avgPool3d(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2], kernelSize[3]], [stride[1], stride[2], stride[3]], pad)];\n }\n case 'MaxPool3D': {\n const stride = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const kernelSize = getParamValue('kernelSize', node, tensorMap, context);\n return [ops.maxPool3d(getParamValue('x', node, tensorMap, context), [kernelSize[1], kernelSize[2], kernelSize[3]], [stride[1], stride[2], stride[3]], pad)];\n }\n case 'Dilation2D': {\n const strides = getParamValue('strides', node, tensorMap, context);\n const pad = getParamValue('pad', node, tensorMap, context);\n const dilations = getParamValue('dilations', node, tensorMap, context);\n // strides: [1, stride_height, stride_width, 1].\n const strideHeight = strides[1];\n const strideWidth = strides[2];\n // dilations: [1, dilation_height, dilation_width, 1].\n const dilationHeight = dilations[1];\n const dilationWidth = dilations[2];\n return [ops.dilation2d(getParamValue('x', node, tensorMap, context), getParamValue('filter', node, tensorMap, context), [strideHeight, strideWidth], pad, [dilationHeight, dilationWidth], 'NHWC' /* dataFormat */)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'convolution';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udm9sdXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvY29udm9sdXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFbEQsU0FBUywyQkFBMkIsQ0FDaEMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUI7SUFDbkUsTUFBTSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FDMUIsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYyxDQUFDO0lBRXRFLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxTQUFTLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDN0IsTUFBTSxPQUFPLEdBQUcsY0FBYyxLQUFLLE9BQU8sQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLEtBQUssZ0JBQWdCLENBQUM7SUFFakQsTUFBTSxPQUFPLEdBQ1IsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFDO0lBQ25FLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RDtnQkFDekQsZ0RBQWdELENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCx5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T0FBTyxDQUFhLENBQUM7WUFDbkUsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNELE1BQU0sU0FBUyxHQUNYLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUVyRSxnREFBZ0Q7WUFDaEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvQixzREFBc0Q7WUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDbEIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0IsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEdBQXVCLEVBQ3BELENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDaEU7UUFFRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7UmFuaywgVGVuc29yLCBUZW5zb3IzRCwgVGVuc29yNEQsIFRlbnNvcjVEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhZGRpbmcsIGdldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBmdXNlZENvbnZBbmREZXB0aFdpc2VQYXJhbXMoXG4gICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgY29uc3QgW2V4dHJhT3AsIGFjdGl2YXRpb25GdW5jXSA9XG4gICAgICAoZ2V0UGFyYW1WYWx1ZSgnZnVzZWRPcHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZ1tdKTtcblxuICBjb25zdCBpc0JpYXNBZGQgPSBleHRyYU9wID09PSAnYmlhc2FkZCc7XG4gIGNvbnN0IG5vQmlhc0FkZCA9ICFpc0JpYXNBZGQ7XG4gIGNvbnN0IGlzUHJlbHUgPSBhY3RpdmF0aW9uRnVuYyA9PT0gJ3ByZWx1JztcbiAgY29uc3QgaXNCYXRjaE5vcm0gPSBleHRyYU9wID09PSAnZnVzZWRiYXRjaG5vcm0nO1xuXG4gIGNvbnN0IG51bUFyZ3MgPVxuICAgICAgKGdldFBhcmFtVmFsdWUoJ251bUFyZ3MnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcik7XG4gIGlmIChpc0JpYXNBZGQpIHtcbiAgICBpZiAoaXNQcmVsdSAmJiBudW1BcmdzICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1c2VkQ29udjJkIGFuZCBEZXB0aHdpc2VDb252MmQgd2l0aCBCaWFzQWRkIGFuZCBQcmVsdSAnICtcbiAgICAgICAgICAnbXVzdCBoYXZlIHR3byBleHRyYSBhcmd1bWVudHM6IGJpYXMgYW5kIGFscGhhLicpO1xuICAgIH1cbiAgICBpZiAoIWlzUHJlbHUgJiYgaXNCaWFzQWRkICYmIG51bUFyZ3MgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRnVzZWRDb252MmQgYW5kIERlcHRod2lzZUNvbnYyZCB3aXRoIEJpYXNBZGQgbXVzdCBoYXZlICcgK1xuICAgICAgICAgICdvbmUgZXh0cmEgYXJndW1lbnQ6IGJpYXMuJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc0JhdGNoTm9ybSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Z1c2VkQ29udjJkIGFuZCBEZXB0aHdpc2VDb252MmQgd2l0aCBGdXNlZEJhdGNoTm9ybSBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cbiAgY29uc3Qgc3RyaWRlID0gZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAoZ2V0UGFyYW1WYWx1ZSgnZGF0YUZvcm1hdCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nKVxuICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCBkaWxhdGlvbnMgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb25zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgbGV0IFtiaWFzQXJnLCBwcmVsdUFyZ10gPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXJncycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gIGlmIChub0JpYXNBZGQpIHtcbiAgICBwcmVsdUFyZyA9IGJpYXNBcmc7XG4gICAgYmlhc0FyZyA9IHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsZWFreXJlbHVBbHBoYSA9XG4gICAgICBnZXRQYXJhbVZhbHVlKCdsZWFreXJlbHVBbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuXG4gIHJldHVybiB7XG4gICAgc3RyaWRlLFxuICAgIHBhZCxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbGF0aW9ucyxcbiAgICBiaWFzQXJnLFxuICAgIHByZWx1QXJnLFxuICAgIGFjdGl2YXRpb25GdW5jLFxuICAgIGxlYWt5cmVsdUFscGhhXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdDb252MUQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9uID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb24nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5jb252MWQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBzdHJpZGUsIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLCBkYXRhRm9ybWF0IGFzICdOV0MnIHwgJ05DVycsXG4gICAgICAgICAgICAgIGRpbGF0aW9uKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ29udjJEJzoge1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29udjJkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IzRCB8XG4gICAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZmlsdGVyJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScsXG4gICAgICAgICAgICAgIGRhdGFGb3JtYXQgYXMgJ05IV0MnIHwgJ05DSFcnLCBbZGlsYXRpb25zWzFdLCBkaWxhdGlvbnNbMl1dKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnX0Z1c2VkQ29udjJEJzoge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0cmlkZSxcbiAgICAgICAgICAgIHBhZCxcbiAgICAgICAgICAgIGRhdGFGb3JtYXQsXG4gICAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgICBiaWFzQXJnLFxuICAgICAgICAgICAgcHJlbHVBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uRnVuYyxcbiAgICAgICAgICAgIGxlYWt5cmVsdUFscGhhXG4gICAgICAgICAgfSA9IGZ1c2VkQ29udkFuZERlcHRoV2lzZVBhcmFtcyhub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuZnVzZWQuY29udjJkKHtcbiAgICAgICAgICAgIHg6IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgIGZpbHRlcjogZ2V0UGFyYW1WYWx1ZSgnZmlsdGVyJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgc3RyaWRlczogW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSxcbiAgICAgICAgICAgIHBhZDogcGFkIGFzICd2YWxpZCcgfCAnc2FtZScsXG4gICAgICAgICAgICBkYXRhRm9ybWF0OiBkYXRhRm9ybWF0IGFzICdOSFdDJyB8ICdOQ0hXJyxcbiAgICAgICAgICAgIGRpbGF0aW9uczogW2RpbGF0aW9uc1sxXSwgZGlsYXRpb25zWzJdXSxcbiAgICAgICAgICAgIGJpYXM6IGJpYXNBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uOiBhY3RpdmF0aW9uRnVuYyBhcyB0Zk9wcy5mdXNlZC5BY3RpdmF0aW9uLFxuICAgICAgICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogcHJlbHVBcmcsXG4gICAgICAgICAgICBsZWFreXJlbHVBbHBoYVxuICAgICAgICAgIH0pXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0Z1c2VkRGVwdGh3aXNlQ29udjJkTmF0aXZlJzoge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0cmlkZSxcbiAgICAgICAgICAgIHBhZCxcbiAgICAgICAgICAgIGRhdGFGb3JtYXQsXG4gICAgICAgICAgICBkaWxhdGlvbnMsXG4gICAgICAgICAgICBiaWFzQXJnLFxuICAgICAgICAgICAgcHJlbHVBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uRnVuYyxcbiAgICAgICAgICAgIGxlYWt5cmVsdUFscGhhLFxuICAgICAgICAgIH0gPSBmdXNlZENvbnZBbmREZXB0aFdpc2VQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmZ1c2VkLmRlcHRod2lzZUNvbnYyZCh7XG4gICAgICAgICAgICB4OiBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IzRCB8XG4gICAgICAgICAgICAgICAgVGVuc29yNEQsXG4gICAgICAgICAgICBmaWx0ZXI6IGdldFBhcmFtVmFsdWUoJ2ZpbHRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICBUZW5zb3I0RCxcbiAgICAgICAgICAgIHN0cmlkZXM6IFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICBwYWQ6IHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLFxuICAgICAgICAgICAgZGF0YUZvcm1hdDogZGF0YUZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVycsXG4gICAgICAgICAgICBkaWxhdGlvbnM6IFtkaWxhdGlvbnNbMV0sIGRpbGF0aW9uc1syXV0sXG4gICAgICAgICAgICBiaWFzOiBiaWFzQXJnLFxuICAgICAgICAgICAgYWN0aXZhdGlvbjogYWN0aXZhdGlvbkZ1bmMgYXMgdGZPcHMuZnVzZWQuQWN0aXZhdGlvbixcbiAgICAgICAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHM6IHByZWx1QXJnLFxuICAgICAgICAgICAgbGVha3lyZWx1QWxwaGFcbiAgICAgICAgICB9KV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ29udjJEQmFja3Byb3BJbnB1dCc6XG4gICAgICAgIGNhc2UgJ0NvbnYyZFRyYW5zcG9zZSc6IHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9IGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8XG4gICAgICAgICAgICAgIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhZGRpbmcobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICByZXR1cm4gW29wcy5jb252MmRUcmFuc3Bvc2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBzaGFwZSwgW3N0cmlkZVsxXSwgc3RyaWRlWzJdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEZXB0aHdpc2VDb252MmROYXRpdmUnOlxuICAgICAgICBjYXNlICdEZXB0aHdpc2VDb252MmQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFkZGluZyhub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdkYXRhRm9ybWF0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmRlcHRod2lzZUNvbnYyZChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5wdXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBbc3RyaWRlWzFdLCBzdHJpZGVbMl1dLCBwYWQgYXMgJ3ZhbGlkJyB8ICdzYW1lJyxcbiAgICAgICAgICAgICAgZGF0YUZvcm1hdCBhcyAnTkhXQycgfCAnTkNIVycsIFtkaWxhdGlvbnNbMV0sIGRpbGF0aW9uc1syXV0pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDb252M0QnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBkYXRhRm9ybWF0ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2RhdGFGb3JtYXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGRpbGF0aW9ucyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RpbGF0aW9ucycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuY29udjNkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I0RCB8XG4gICAgICAgICAgICAgICAgICBUZW5zb3I8UmFuay5SNT4sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ZpbHRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjxSYW5rLlI1PixcbiAgICAgICAgICAgICAgW3N0cmlkZVsxXSwgc3RyaWRlWzJdLCBzdHJpZGVbM11dLCBwYWQgYXMgJ3ZhbGlkJyB8ICdzYW1lJyxcbiAgICAgICAgICAgICAgZGF0YUZvcm1hdCBhcyAnTkRIV0MnIHwgJ05DREhXJyxcbiAgICAgICAgICAgICAgW2RpbGF0aW9uc1sxXSwgZGlsYXRpb25zWzJdLCBkaWxhdGlvbnNbM11dKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXZnUG9vbCc6IHtcbiAgICAgICAgICBjb25zdCBzdHJpZGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdHJpZGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbFNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZXJuZWxTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmF2Z1Bvb2woXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWF4UG9vbCc6IHtcbiAgICAgICAgICBjb25zdCBzdHJpZGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdHJpZGVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWQgPSBnZXRQYXJhbVZhbHVlKCdwYWQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNvbnN0IGtlcm5lbFNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZXJuZWxTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLm1heFBvb2woXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWF4UG9vbFdpdGhBcmdtYXgnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VybmVsU2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgaW5jbHVkZUJhdGNoSW5JbmRleCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luY2x1ZGVCYXRjaEluSW5kZXgnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgY29uc3Qge3Jlc3VsdCwgaW5kZXhlc30gPSBvcHMubWF4UG9vbFdpdGhBcmdtYXgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXV0sIFtzdHJpZGVbMV0sIHN0cmlkZVsyXV0sXG4gICAgICAgICAgICAgIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLCBpbmNsdWRlQmF0Y2hJbkluZGV4KTtcbiAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgaW5kZXhlc107XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXZnUG9vbDNEJzoge1xuICAgICAgICAgIGNvbnN0IHN0cmlkZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhcmFtVmFsdWUoJ3BhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY29uc3Qga2VybmVsU2l6ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlcm5lbFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXZnUG9vbDNkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I1RCxcbiAgICAgICAgICAgICAgW2tlcm5lbFNpemVbMV0sIGtlcm5lbFNpemVbMl0sIGtlcm5lbFNpemVbM11dLFxuICAgICAgICAgICAgICBbc3RyaWRlWzFdLCBzdHJpZGVbMl0sIHN0cmlkZVszXV0sIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnKV07XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdNYXhQb29sM0QnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgcGFkID0gZ2V0UGFyYW1WYWx1ZSgncGFkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgICAgICAgICBjb25zdCBrZXJuZWxTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VybmVsU2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG5cbiAgICAgICAgICByZXR1cm4gW29wcy5tYXhQb29sM2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjVELFxuICAgICAgICAgICAgICBba2VybmVsU2l6ZVsxXSwga2VybmVsU2l6ZVsyXSwga2VybmVsU2l6ZVszXV0sXG4gICAgICAgICAgICAgIFtzdHJpZGVbMV0sIHN0cmlkZVsyXSwgc3RyaWRlWzNdXSwgcGFkIGFzICd2YWxpZCcgfCAnc2FtZScpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0RpbGF0aW9uMkQnOiB7XG4gICAgICAgICAgY29uc3Qgc3RyaWRlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0cmlkZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHBhZCA9IGdldFBhcmFtVmFsdWUoJ3BhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY29uc3QgZGlsYXRpb25zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGlsYXRpb25zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcblxuICAgICAgICAgIC8vIHN0cmlkZXM6IFsxLCBzdHJpZGVfaGVpZ2h0LCBzdHJpZGVfd2lkdGgsIDFdLlxuICAgICAgICAgIGNvbnN0IHN0cmlkZUhlaWdodCA9IHN0cmlkZXNbMV07XG4gICAgICAgICAgY29uc3Qgc3RyaWRlV2lkdGggPSBzdHJpZGVzWzJdO1xuXG4gICAgICAgICAgLy8gZGlsYXRpb25zOiBbMSwgZGlsYXRpb25faGVpZ2h0LCBkaWxhdGlvbl93aWR0aCwgMV0uXG4gICAgICAgICAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBkaWxhdGlvbnNbMV07XG4gICAgICAgICAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGRpbGF0aW9uc1syXTtcblxuICAgICAgICAgIHJldHVybiBbb3BzLmRpbGF0aW9uMmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWx0ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNELFxuICAgICAgICAgICAgICBbc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aF0sIHBhZCBhcyAndmFsaWQnIHwgJ3NhbWUnLFxuICAgICAgICAgICAgICBbZGlsYXRpb25IZWlnaHQsIGRpbGF0aW9uV2lkdGhdLCAnTkhXQycgLyogZGF0YUZvcm1hdCAqLyldO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdjb252b2x1dGlvbic7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Fill': {\n const shape = getParamValue('shape', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n const value = getParamValue('value', node, tensorMap, context);\n return [ops.fill(shape, value, dtype)];\n }\n case 'LinSpace': {\n const start = getParamValue('start', node, tensorMap, context);\n const stop = getParamValue('stop', node, tensorMap, context);\n const num = getParamValue('num', node, tensorMap, context);\n return [ops.linspace(start, stop, num)];\n }\n case 'Multinomial': {\n const logits = getParamValue('logits', node, tensorMap, context);\n const numSamples = getParamValue('numSamples', node, tensorMap, context);\n const seed = getParamValue('seed', node, tensorMap, context);\n return [ops.multinomial(logits, numSamples, seed)];\n }\n case 'OneHot': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const depth = getParamValue('depth', node, tensorMap, context);\n const onValue = getParamValue('onValue', node, tensorMap, context);\n const offValue = getParamValue('offValue', node, tensorMap, context);\n const dtype = getParamValue('dtype', node, tensorMap, context);\n return [ops.oneHot(indices, depth, onValue, offValue, dtype)];\n }\n case 'Ones': {\n return [ops.ones(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'OnesLike': {\n return [ops.onesLike(getParamValue('x', node, tensorMap, context))];\n }\n case 'RandomStandardNormal': {\n return [ops.randomStandardNormal(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context), getParamValue('seed', node, tensorMap, context))];\n }\n case 'RandomUniform': {\n return [ops.randomUniform(\n // tslint:disable-next-line:no-any\n getParamValue('shape', node, tensorMap, context), getParamValue('minval', node, tensorMap, context), getParamValue('maxval', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'RandomUniformInt': {\n return [ops.randomUniformInt(getParamValue('shape', node, tensorMap, context), getParamValue('minval', node, tensorMap, context), getParamValue('maxval', node, tensorMap, context), getParamValue('seed', node, tensorMap, context))];\n }\n case 'Range': {\n const start = getParamValue('start', node, tensorMap, context);\n const stop = getParamValue('stop', node, tensorMap, context);\n const step = getParamValue('step', node, tensorMap, context);\n return [ops.range(start, stop, step, getParamValue('dtype', node, tensorMap, context))];\n }\n case 'TruncatedNormal': {\n const shape = getParamValue('shape', node, tensorMap, context);\n const mean = getParamValue('mean', node, tensorMap, context);\n const stdDev = getParamValue('stdDev', node, tensorMap, context);\n const seed = getParamValue('seed', node, tensorMap, context);\n return [ops.truncatedNormal(shape, mean, stdDev, getParamValue('dtype', node, tensorMap, context), seed)];\n }\n case 'Zeros': {\n return [ops.zeros(getParamValue('shape', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'ZerosLike': {\n return [ops.zerosLike(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'creation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvY3JlYXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxNQUFNLEtBQUssR0FDUCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDakUsTUFBTSxLQUFLLEdBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2pFLE1BQU0sS0FBSyxHQUNQLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQ1AsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQy9ELE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxF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bGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvciwgVGVuc29yMUR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdGaWxsJzoge1xuICAgICAgICAgIGNvbnN0IHNoYXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGR0eXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5maWxsKHNoYXBlLCB2YWx1ZSwgZHR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMaW5TcGFjZSc6IHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0YXJ0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc3RvcCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0b3AnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBudW0gPSBnZXRQYXJhbVZhbHVlKCdudW0nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5saW5zcGFjZShzdGFydCwgc3RvcCwgbnVtKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTXVsdGlub21pYWwnOiB7XG4gICAgICAgICAgY29uc3QgbG9naXRzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbG9naXRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBudW1TYW1wbGVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtU2FtcGxlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHNlZWQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubXVsdGlub21pYWwobG9naXRzLCBudW1TYW1wbGVzLCBzZWVkKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnT25lSG90Jzoge1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBkZXB0aCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlcHRoJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgb25WYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29uVmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBvZmZWYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZlZhbHVlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZHR5cGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGU7XG4gICAgICAgICAgcmV0dXJuIFtvcHMub25lSG90KGluZGljZXMsIGRlcHRoLCBvblZhbHVlLCBvZmZWYWx1ZSwgZHR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdPbmVzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLm9uZXMoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnT25lc0xpa2UnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMub25lc0xpa2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhbmRvbVN0YW5kYXJkTm9ybWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJhbmRvbVN0YW5kYXJkTm9ybWFsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnZmxvYXQzMicgfFxuICAgICAgICAgICAgICAgICAgJ2ludDMyJyxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2VlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZG9tVW5pZm9ybSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5kb21Vbmlmb3JtKFxuICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnksXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21pbnZhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtYXh2YWwnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZHR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZG9tVW5pZm9ybUludCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5kb21Vbmlmb3JtSW50KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21pbnZhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtYXh2YWwnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2VlZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmFuZ2UnOiB7XG4gICAgICAgICAgY29uc3Qgc3RhcnQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdGFydCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHN0b3AgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdG9wJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc3RlcCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0ZXAnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5yYW5nZShcbiAgICAgICAgICAgICAgc3RhcnQsIHN0b3AsIHN0ZXAsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnZmxvYXQzMicgfFxuICAgICAgICAgICAgICAgICAgJ2ludDMyJyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1RydW5jYXRlZE5vcm1hbCc6IHtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBtZWFuID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbWVhbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHN0ZERldiA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0ZERldicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHNlZWQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudHJ1bmNhdGVkTm9ybWFsKFxuICAgICAgICAgICAgICBzaGFwZSwgbWVhbiwgc3RkRGV2LFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgJ2Zsb2F0MzInIHxcbiAgICAgICAgICAgICAgICAgICdpbnQzMicsXG4gICAgICAgICAgICAgIHNlZWQpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdaZXJvcyc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy56ZXJvcyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkdHlwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgRGF0YVR5cGUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdaZXJvc0xpa2UnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuemVyb3NMaWtlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2NyZWF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nfunction nmsParams(node, tensorMap, context) {\n const boxes = getParamValue('boxes', node, tensorMap, context);\n const scores = getParamValue('scores', node, tensorMap, context);\n const maxOutputSize = getParamValue('maxOutputSize', node, tensorMap, context);\n const iouThreshold = getParamValue('iouThreshold', node, tensorMap, context);\n const scoreThreshold = getParamValue('scoreThreshold', node, tensorMap, context);\n const softNmsSigma = getParamValue('softNmsSigma', node, tensorMap, context);\n return {\n boxes,\n scores,\n maxOutputSize,\n iouThreshold,\n scoreThreshold,\n softNmsSigma\n };\n}\nexport const executeOp = async (node, tensorMap, context, resourceManager, ops = tfOps) => {\n switch (node.op) {\n case 'NonMaxSuppressionV5': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = nmsParams(node, tensorMap, context);\n const result = await ops.image.nonMaxSuppressionWithScoreAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n return [result.selectedIndices, result.selectedScores];\n }\n case 'NonMaxSuppressionV4': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold } = nmsParams(node, tensorMap, context);\n const padToMaxOutputSize = getParamValue('padToMaxOutputSize', node, tensorMap, context);\n const result = await ops.image.nonMaxSuppressionPaddedAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize);\n return [result.selectedIndices, result.validOutputs];\n }\n case 'NonMaxSuppressionV3':\n case 'NonMaxSuppressionV2': {\n const { boxes, scores, maxOutputSize, iouThreshold, scoreThreshold } = nmsParams(node, tensorMap, context);\n return [await ops.image.nonMaxSuppressionAsync(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold)];\n }\n case 'Where': {\n const condition = ops.cast(getParamValue('condition', node, tensorMap, context), 'bool');\n const result = [await ops.whereAsync(condition)];\n condition.dispose();\n return result;\n }\n case 'ListDiff': {\n return ops.setdiff1dAsync(getParamValue('x', node, tensorMap, context), getParamValue('y', node, tensorMap, context));\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'dynamic';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pY19leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9keW5hbWljX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTzFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsU0FBUyxTQUFTLENBQ2QsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUI7SUFDbkUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO0lBQ3pFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztJQUMzRSxNQUFNLGFBQWEsR0FDZixhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7SUFDdkUsTUFBTSxZQUFZLEdBQ2QsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO0lBQ3RFLE1BQU0sY0FBYyxHQUNoQixhQUFhLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztJQUN4RSxNQUFNLFlBQVksR0FDZCxhQUFhLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7SUFFdEUsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sYUFBYTtRQUNiLFlBQVk7UUFDWixjQUFjO1FBQ2QsWUFBWTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxD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eXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yMUQsIFRlbnNvcjJEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQgeyBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tICcuLi8uLi9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7SW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gbm1zUGFyYW1zKFxuICAgIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gIGNvbnN0IGJveGVzID0gZ2V0UGFyYW1WYWx1ZSgnYm94ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgY29uc3Qgc2NvcmVzID0gZ2V0UGFyYW1WYWx1ZSgnc2NvcmVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gIGNvbnN0IG1heE91dHB1dFNpemUgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnbWF4T3V0cHV0U2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICBjb25zdCBpb3VUaHJlc2hvbGQgPVxuICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW91VGhyZXNob2xkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gIGNvbnN0IHNjb3JlVGhyZXNob2xkID1cbiAgICAgIGdldFBhcmFtVmFsdWUoJ3Njb3JlVGhyZXNob2xkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gIGNvbnN0IHNvZnRObXNTaWdtYSA9XG4gICAgICBnZXRQYXJhbVZhbHVlKCdzb2Z0Tm1zU2lnbWEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcblxuICByZXR1cm4ge1xuICAgIGJveGVzLFxuICAgIHNjb3JlcyxcbiAgICBtYXhPdXRwdXRTaXplLFxuICAgIGlvdVRocmVzaG9sZCxcbiAgICBzY29yZVRocmVzaG9sZCxcbiAgICBzb2Z0Tm1zU2lnbWFcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IgPSBhc3luYyhcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcixcbiAgICBvcHMgPSB0Zk9wcyk6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnTm9uTWF4U3VwcHJlc3Npb25WNSc6IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYm94ZXMsXG4gICAgICAgIHNjb3JlcyxcbiAgICAgICAgbWF4T3V0cHV0U2l6ZSxcbiAgICAgICAgaW91VGhyZXNob2xkLFxuICAgICAgICBzY29yZVRocmVzaG9sZCxcbiAgICAgICAgc29mdE5tc1NpZ21hXG4gICAgICB9ID0gbm1zUGFyYW1zKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wcy5pbWFnZS5ub25NYXhTdXBwcmVzc2lvbldpdGhTY29yZUFzeW5jKFxuICAgICAgICAgIGJveGVzIGFzIFRlbnNvcjJELCBzY29yZXMgYXMgVGVuc29yMUQsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCxcbiAgICAgICAgICBzY29yZVRocmVzaG9sZCwgc29mdE5tc1NpZ21hKTtcblxuICAgICAgcmV0dXJuIFtyZXN1bHQuc2VsZWN0ZWRJbmRpY2VzLCByZXN1bHQuc2VsZWN0ZWRTY29yZXNdO1xuICAgIH1cbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblY0Jzoge1xuICAgICAgY29uc3Qge2JveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGR9ID1cbiAgICAgICAgICBubXNQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgY29uc3QgcGFkVG9NYXhPdXRwdXRTaXplID1cbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdwYWRUb01heE91dHB1dFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgYm9vbGVhbjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BzLmltYWdlLm5vbk1heFN1cHByZXNzaW9uUGFkZGVkQXN5bmMoXG4gICAgICAgICAgYm94ZXMgYXMgVGVuc29yMkQsIHNjb3JlcyBhcyBUZW5zb3IxRCwgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLFxuICAgICAgICAgIHNjb3JlVGhyZXNob2xkLCBwYWRUb01heE91dHB1dFNpemUpO1xuXG4gICAgICByZXR1cm4gW3Jlc3VsdC5zZWxlY3RlZEluZGljZXMsIHJlc3VsdC52YWxpZE91dHB1dHNdO1xuICAgIH1cbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblYzJzpcbiAgICBjYXNlICdOb25NYXhTdXBwcmVzc2lvblYyJzoge1xuICAgICAgY29uc3Qge2JveGVzLCBzY29yZXMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGR9ID1cbiAgICAgICAgICBubXNQYXJhbXMobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFthd2FpdCBvcHMuaW1hZ2Uubm9uTWF4U3VwcHJlc3Npb25Bc3luYyhcbiAgICAgICAgICBib3hlcyBhcyBUZW5zb3IyRCwgc2NvcmVzIGFzIFRlbnNvcjFELCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsXG4gICAgICAgICAgc2NvcmVUaHJlc2hvbGQpXTtcbiAgICB9XG4gICAgY2FzZSAnV2hlcmUnOiB7XG4gICAgICBjb25zdCBjb25kaXRpb24gPSBvcHMuY2FzdChcbiAgICAgICAgICAoZ2V0UGFyYW1WYWx1ZSgnY29uZGl0aW9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLFxuICAgICAgICAgICdib29sJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBbYXdhaXQgb3BzLndoZXJlQXN5bmMoY29uZGl0aW9uKV07XG4gICAgICBjb25kaXRpb24uZGlzcG9zZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY2FzZSAnTGlzdERpZmYnOiB7XG4gICAgICByZXR1cm4gb3BzLnNldGRpZmYxZEFzeW5jKFxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd5Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2R5bmFtaWMnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'LowerBound': {\n const sortedSequence = getParamValue('sortedSequence', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n return [ops.lowerBound(sortedSequence, values)];\n }\n case 'TopKV2': {\n const x = getParamValue('x', node, tensorMap, context);\n const k = getParamValue('k', node, tensorMap, context);\n const sorted = getParamValue('sorted', node, tensorMap, context);\n const result = ops.topk(x, k, sorted);\n return [result.values, result.indices];\n }\n case 'UpperBound': {\n const sortedSequence = getParamValue('sortedSequence', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n return [ops.upperBound(sortedSequence, values)];\n }\n case 'Unique': {\n const x = getParamValue('x', node, tensorMap, context);\n const result = ops.unique(x);\n return [result.values, result.indices];\n }\n case 'UniqueV2': {\n const x = getParamValue('x', node, tensorMap, context);\n const axis = getParamValue('axis', node, tensorMap, context);\n const result = ops.unique(x, axis);\n return [result.values, result.indices];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'evaluation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9ldmFsdWF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQ0MsRUFBRTtJQUNULFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsTUFBTSxjQUFjLEdBQ2hCLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDbEQsQ0FBQztZQUNYLE1BQU0sTUFBTSxHQUNSLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELEtBQUssUUFBUSxDQUFDLENBQUM7WUFDYixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDakUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUNSLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNqQixNQUFNLGNBQWMsR0FDaEIsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNsRCxDQUFDO1lBQ1gsTUFBTSxNQUFNLEdBQ1IsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNiLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNELEtBQUssVUFBVSxDQUFDLENBQUM7WUFDZixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQ04sYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4QztRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRVYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6XG4gICAgICAgIFRlbnNvcltdID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgICAgIGNhc2UgJ0xvd2VyQm91bmQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvcnRlZFNlcXVlbmNlID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NvcnRlZFNlcXVlbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLmxvd2VyQm91bmQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVG9wS1YyJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCBrID0gZ2V0UGFyYW1WYWx1ZSgnaycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICBjb25zdCBzb3J0ZWQgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc29ydGVkJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHMudG9wayh4LCBrLCBzb3J0ZWQpO1xuICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdC52YWx1ZXMsIHJlc3VsdC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VwcGVyQm91bmQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNvcnRlZFNlcXVlbmNlID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NvcnRlZFNlcXVlbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLnVwcGVyQm91bmQoc29ydGVkU2VxdWVuY2UsIHZhbHVlcyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnVW5pcXVlJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHMudW5pcXVlKHgpO1xuICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdC52YWx1ZXMsIHJlc3VsdC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1VuaXF1ZVYyJzoge1xuICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3BzLnVuaXF1ZSh4LCBheGlzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtyZXN1bHQudmFsdWVzLCByZXN1bHQuaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ2V2YWx1YXRpb24nO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { cloneTensor, getParamValue, getTensor } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Const': {\n return tensorMap[node.name];\n }\n case 'PlaceholderWithDefault':\n const def = getParamValue('default', node, tensorMap, context);\n return [getTensor(node.name, tensorMap, context) || def];\n case 'Placeholder':\n return [getTensor(node.name, tensorMap, context)];\n case 'Identity':\n case 'StopGradient':\n case 'FakeQuantWithMinMaxVars': { // This op is currently ignored.\n const data = getParamValue('x', node, tensorMap, context);\n return [cloneTensor(data)];\n }\n case 'IdentityN':\n return getParamValue('x', node, tensorMap, context)\n .map((t) => cloneTensor(t));\n case 'Snapshot':\n const snapshot = getParamValue('x', node, tensorMap, context);\n return [cloneTensor(snapshot)];\n case 'Shape':\n return [ops.tensor1d(getParamValue('x', node, tensorMap, context).shape, 'int32')];\n case 'ShapeN':\n return getParamValue('x', node, tensorMap, context)\n .map((t) => ops.tensor1d(t.shape));\n case 'Size':\n return [ops.scalar(getParamValue('x', node, tensorMap, context).size, 'int32')];\n case 'Rank':\n return [ops.scalar(getParamValue('x', node, tensorMap, context).rank, 'int32')];\n case 'NoOp':\n return [ops.scalar(1)];\n case 'Print':\n const input = getParamValue('x', node, tensorMap, context);\n const data = getParamValue('data', node, tensorMap, context);\n const message = getParamValue('message', node, tensorMap, context);\n const summarize = getParamValue('summarize', node, tensorMap, context);\n console.warn('The graph has a tf.print() operation,' +\n 'usually used for debugging, which slows down performance.');\n console.log(message);\n for (let i = 0; i < data.length; i++) {\n console.log(Array.prototype.slice.call(data[i].dataSync())\n .slice(0, summarize));\n }\n return [input];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'graph';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvZ3JhcGhfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxPQUFPLENBQUMsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUNELEtBQUssd0JBQXdCO1lBQzNCLE1BQU0sR0FBRyxHQUNMLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzNELEtBQUssYUFBYTtZQUNoQixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxjQUFjLENBQUM7UUFDcEIsS0FBSyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUcsZ0NBQWdDO1lBQ2pFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVB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LE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2Nsb25lVGVuc29yLCBnZXRQYXJhbVZhbHVlLCBnZXRUZW5zb3J9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQ29uc3QnOiB7XG4gICAgICAgICAgcmV0dXJuIHRlbnNvck1hcFtub2RlLm5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1BsYWNlaG9sZGVyV2l0aERlZmF1bHQnOlxuICAgICAgICAgIGNvbnN0IGRlZiA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICByZXR1cm4gW2dldFRlbnNvcihub2RlLm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCkgfHwgZGVmXTtcbiAgICAgICAgY2FzZSAnUGxhY2Vob2xkZXInOlxuICAgICAgICAgIHJldHVybiBbZ2V0VGVuc29yKG5vZGUubmFtZSwgdGVuc29yTWFwLCBjb250ZXh0KV07XG4gICAgICAgIGNhc2UgJ0lkZW50aXR5JzpcbiAgICAgICAgY2FzZSAnU3RvcEdyYWRpZW50JzpcbiAgICAgICAgY2FzZSAnRmFrZVF1YW50V2l0aE1pbk1heFZhcnMnOiB7ICAvLyBUaGlzIG9wIGlzIGN1cnJlbnRseSBpZ25vcmVkLlxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihkYXRhKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnSWRlbnRpdHlOJzpcbiAgICAgICAgICByZXR1cm4gKGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcltdKVxuICAgICAgICAgICAgICAubWFwKCh0OiBUZW5zb3IpID0+IGNsb25lVGVuc29yKHQpKTtcbiAgICAgICAgY2FzZSAnU25hcHNob3QnOlxuICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcik7XG4gICAgICAgICAgcmV0dXJuIFtjbG9uZVRlbnNvcihzbmFwc2hvdCldO1xuICAgICAgICBjYXNlICdTaGFwZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGVuc29yMWQoXG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLnNoYXBlLFxuICAgICAgICAgICAgICAnaW50MzInKV07XG4gICAgICAgIGNhc2UgJ1NoYXBlTic6XG4gICAgICAgICAgcmV0dXJuIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXSlcbiAgICAgICAgICAgICAgLm1hcCgodDogVGVuc29yKSA9PiBvcHMudGVuc29yMWQodC5zaGFwZSkpO1xuICAgICAgICBjYXNlICdTaXplJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5zY2FsYXIoXG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpLnNpemUsXG4gICAgICAgICAgICAgICdpbnQzMicpXTtcbiAgICAgICAgY2FzZSAnUmFuayc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2NhbGFyKFxuICAgICAgICAgICAgICAoZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKS5yYW5rLFxuICAgICAgICAgICAgICAnaW50MzInKV07XG4gICAgICAgIGNhc2UgJ05vT3AnOlxuICAgICAgICAgIHJldHVybiBbb3BzLnNjYWxhcigxKV07XG4gICAgICAgIGNhc2UgJ1ByaW50JzpcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBkYXRhID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGF0YScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21lc3NhZ2UnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgICAgICBjb25zdCBzdW1tYXJpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzdW1tYXJpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICdUaGUgZ3JhcGggaGFzIGEgdGYucHJpbnQoKSBvcGVyYXRpb24sJyArXG4gICAgICAgICAgICAgICd1c3VhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgd2hpY2ggc2xvd3MgZG93biBwZXJmb3JtYW5jZS4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRhdGFbaV0uZGF0YVN5bmMoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgc3VtbWFyaXplKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbaW5wdXRdO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnZ3JhcGgnO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { keep, scalar, stack, tidy, unstack, util } from '@tensorflow/tfjs-core';\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\n/**\n * Hashtable contains a set of tensors, which can be accessed by key.\n */\nexport class HashTable {\n get id() {\n return this.handle.id;\n }\n /**\n * Constructor of HashTable. Creates a hash table.\n *\n * @param keyDType `dtype` of the table keys.\n * @param valueDType `dtype` of the table values.\n */\n constructor(keyDType, valueDType) {\n this.keyDType = keyDType;\n this.valueDType = valueDType;\n this.handle = scalar(0);\n // tslint:disable-next-line: no-any\n this.tensorMap = new Map();\n keep(this.handle);\n }\n /**\n * Dispose the tensors and handle and clear the hashtable.\n */\n clearAndClose() {\n this.tensorMap.forEach(value => value.dispose());\n this.tensorMap.clear();\n this.handle.dispose();\n }\n /**\n * The number of items in the hash table.\n */\n size() {\n return this.tensorMap.size;\n }\n /**\n * The number of items in the hash table as a rank-0 tensor.\n */\n tensorSize() {\n return tfOps.scalar(this.size(), 'int32');\n }\n /**\n * Replaces the contents of the table with the specified keys and values.\n * @param keys Keys to store in the hashtable.\n * @param values Values to store in the hashtable.\n */\n async import(keys, values) {\n this.checkKeyAndValueTensor(keys, values);\n // We only store the primitive values of the keys, this allows lookup\n // to be O(1).\n const $keys = await keys.data();\n // Clear the hashTable before inserting new values.\n this.tensorMap.forEach(value => value.dispose());\n this.tensorMap.clear();\n return tidy(() => {\n const $values = unstack(values);\n const keysLength = $keys.length;\n const valuesLength = $values.length;\n util.assert(keysLength === valuesLength, () => `The number of elements doesn't match, keys has ` +\n `${keysLength} elements, the values has ${valuesLength} ` +\n `elements.`);\n for (let i = 0; i < keysLength; i++) {\n const key = $keys[i];\n const value = $values[i];\n keep(value);\n this.tensorMap.set(key, value);\n }\n return this.handle;\n });\n }\n /**\n * Looks up keys in a hash table, outputs the corresponding values.\n *\n * Performs batch lookups, for every element in the key tensor, `find`\n * stacks the corresponding value into the return tensor.\n *\n * If an element is not present in the table, the given `defaultValue` is\n * used.\n *\n * @param keys Keys to look up. Must have the same type as the keys of the\n * table.\n * @param defaultValue The scalar `defaultValue` is the value output for keys\n * not present in the table. It must also be of the same type as the\n * table values.\n */\n async find(keys, defaultValue) {\n this.checkKeyAndValueTensor(keys, defaultValue);\n const $keys = await keys.data();\n return tidy(() => {\n const result = [];\n for (let i = 0; i < $keys.length; i++) {\n const key = $keys[i];\n const value = this.findWithDefault(key, defaultValue);\n result.push(value);\n }\n return stack(result);\n });\n }\n // tslint:disable-next-line: no-any\n findWithDefault(key, defaultValue) {\n const result = this.tensorMap.get(key);\n return result != null ? result : defaultValue;\n }\n checkKeyAndValueTensor(key, value) {\n if (key.dtype !== this.keyDType) {\n throw new Error(`Expect key dtype ${this.keyDType}, but got ` +\n `${key.dtype}`);\n }\n if (value.dtype !== this.valueDType) {\n throw new Error(`Expect value dtype ${this.valueDType}, but got ` +\n `${value.dtype}`);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9leGVjdXRvci9oYXNoX3RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBVyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pHLGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBRTFFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFNcEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFxQixRQUFrQixFQUFXLFVBQW9CO1FBQWpELGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVyxlQUFVLEdBQVYsVUFBVSxDQUFVO1FBQ3BFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLE9BQU8s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O0lBRU8sc0JBQXNCLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDdkQsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FDWCxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsWUFBWTtnQkFDN0MsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNyQjtRQUVELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ1gsc0JBQXNCLElBQUksQ0FBQyxVQUFVLFlBQVk7Z0JBQ2pELEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0RhdGFUeXBlLCBrZWVwLCBzY2FsYXIsIHN0YWNrLCBUZW5zb3IsIHRpZHksIHVuc3RhY2ssIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG4vKipcbiAqIEhhc2h0YWJsZSBjb250YWlucyBhIHNldCBvZiB0ZW5zb3JzLCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYnkga2V5LlxuICovXG5leHBvcnQgY2xhc3MgSGFzaFRhYmxlIHtcbiAgcmVhZG9ubHkgaGFuZGxlOiBUZW5zb3I7XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbiAgcHJpdmF0ZSB0ZW5zb3JNYXA6IE1hcDxhbnksIFRlbnNvcj47XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBvZiBIYXNoVGFibGUuIENyZWF0ZXMgYSBoYXNoIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5RFR5cGUgYGR0eXBlYCBvZiB0aGUgdGFibGUga2V5cy5cbiAgICogQHBhcmFtIHZhbHVlRFR5cGUgYGR0eXBlYCBvZiB0aGUgdGFibGUgdmFsdWVzLlxuICAgKi9cbiAgY29uc3RydWN0b3IocmVhZG9ubHkga2V5RFR5cGU6IERhdGFUeXBlLCByZWFkb25seSB2YWx1ZURUeXBlOiBEYXRhVHlwZSkge1xuICAgIHRoaXMuaGFuZGxlID0gc2NhbGFyKDApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgdGhpcy50ZW5zb3JNYXAgPSBuZXcgTWFwPGFueSwgVGVuc29yPigpO1xuXG4gICAga2VlcCh0aGlzLmhhbmRsZSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZSB0aGUgdGVuc29ycyBhbmQgaGFuZGxlIGFuZCBjbGVhciB0aGUgaGFzaHRhYmxlLlxuICAgKi9cbiAgY2xlYXJBbmRDbG9zZSgpIHtcbiAgICB0aGlzLnRlbnNvck1hcC5mb3JFYWNoKHZhbHVlID0+IHZhbHVlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy50ZW5zb3JNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmhhbmRsZS5kaXNwb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaGFzaCB0YWJsZS5cbiAgICovXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW5zb3JNYXAuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBoYXNoIHRhYmxlIGFzIGEgcmFuay0wIHRlbnNvci5cbiAgICovXG4gIHRlbnNvclNpemUoKTogVGVuc29yIHtcbiAgICByZXR1cm4gdGZPcHMuc2NhbGFyKHRoaXMuc2l6ZSgpLCAnaW50MzInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIHdpdGggdGhlIHNwZWNpZmllZCBrZXlzIGFuZCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBrZXlzIEtleXMgdG8gc3RvcmUgaW4gdGhlIGhhc2h0YWJsZS5cbiAgICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgdG8gc3RvcmUgaW4gdGhlIGhhc2h0YWJsZS5cbiAgICovXG4gIGFzeW5jIGltcG9ydChrZXlzOiBUZW5zb3IsIHZhbHVlczogVGVuc29yKTogUHJvbWlzZTxUZW5zb3I+IHtcbiAgICB0aGlzLmNoZWNrS2V5QW5kVmFsdWVUZW5zb3Ioa2V5cywgdmFsdWVzKTtcblxuICAgIC8vIFdlIG9ubHkgc3RvcmUgdGhlIHByaW1pdGl2ZSB2YWx1ZXMgb2YgdGhlIGtleXMsIHRoaXMgYWxsb3dzIGxvb2t1cFxuICAgIC8vIHRvIGJlIE8oMSkuXG4gICAgY29uc3QgJGtleXMgPSBhd2FpdCBrZXlzLmRhdGEoKTtcblxuICAgIC8vIENsZWFyIHRoZSBoYXNoVGFibGUgYmVmb3JlIGluc2VydGluZyBuZXcgdmFsdWVzLlxuICAgIHRoaXMudGVuc29yTWFwLmZvckVhY2godmFsdWUgPT4gdmFsdWUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLnRlbnNvck1hcC5jbGVhcigpO1xuXG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgY29uc3QgJHZhbHVlcyA9IHVuc3RhY2sodmFsdWVzKTtcblxuICAgICAgY29uc3Qga2V5c0xlbmd0aCA9ICRrZXlzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHZhbHVlc0xlbmd0aCA9ICR2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICBrZXlzTGVuZ3RoID09PSB2YWx1ZXNMZW5ndGgsXG4gICAgICAgICAgKCkgPT4gYFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZG9lc24ndCBtYXRjaCwga2V5cyBoYXMgYCArXG4gICAgICAgICAgICAgIGAke2tleXNMZW5ndGh9IGVsZW1lbnRzLCB0aGUgdmFsdWVzIGhhcyAke3ZhbHVlc0xlbmd0aH0gYCArXG4gICAgICAgICAgICAgIGBlbGVtZW50cy5gKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gJGtleXNbaV07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJHZhbHVlc1tpXTtcblxuICAgICAgICBrZWVwKHZhbHVlKTtcbiAgICAgICAgdGhpcy50ZW5zb3JNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGU7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAga2V5cyBpbiBhIGhhc2ggdGFibGUsIG91dHB1dHMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBQZXJmb3JtcyBiYXRjaCBsb29rdXBzLCBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUga2V5IHRlbnNvciwgYGZpbmRgXG4gICAqIHN0YWNrcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbnRvIHRoZSByZXR1cm4gdGVuc29yLlxuICAgKlxuICAgKiBJZiBhbiBlbGVtZW50IGlzIG5vdCBwcmVzZW50IGluIHRoZSB0YWJsZSwgdGhlIGdpdmVuIGBkZWZhdWx0VmFsdWVgIGlzXG4gICAqIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlzIEtleXMgdG8gbG9vayB1cC4gTXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGtleXMgb2YgdGhlXG4gICAqICAgICB0YWJsZS5cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgc2NhbGFyIGBkZWZhdWx0VmFsdWVgIGlzIHRoZSB2YWx1ZSBvdXRwdXQgZm9yIGtleXNcbiAgICogICAgIG5vdCBwcmVzZW50IGluIHRoZSB0YWJsZS4gSXQgbXVzdCBhbHNvIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAqICAgICB0YWJsZSB2YWx1ZXMuXG4gICAqL1xuICBhc3luYyBmaW5kKGtleXM6IFRlbnNvciwgZGVmYXVsdFZhbHVlOiBUZW5zb3IpOiBQcm9taXNlPFRlbnNvcj4ge1xuICAgIHRoaXMuY2hlY2tLZXlBbmRWYWx1ZVRlbnNvcihrZXlzLCBkZWZhdWx0VmFsdWUpO1xuXG4gICAgY29uc3QgJGtleXMgPSBhd2FpdCBrZXlzLmRhdGEoKTtcblxuICAgIHJldHVybiB0aWR5KCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogVGVuc29yW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAka2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSAka2V5c1tpXTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmluZFdpdGhEZWZhdWx0KGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhY2socmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gIHByaXZhdGUgZmluZFdpdGhEZWZhdWx0KGtleTogYW55LCBkZWZhdWx0VmFsdWU6IFRlbnNvcik6IFRlbnNvciB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50ZW5zb3JNYXAuZ2V0KGtleSk7XG5cbiAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrS2V5QW5kVmFsdWVUZW5zb3Ioa2V5OiBUZW5zb3IsIHZhbHVlOiBUZW5zb3IpIHtcbiAgICBpZiAoa2V5LmR0eXBlICE9PSB0aGlzLmtleURUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdCBrZXkgZHR5cGUgJHt0aGlzLmtleURUeXBlfSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHtrZXkuZHR5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmR0eXBlICE9PSB0aGlzLnZhbHVlRFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0IHZhbHVlIGR0eXBlICR7dGhpcy52YWx1ZURUeXBlfSwgYnV0IGdvdCBgICtcbiAgICAgICAgICBgJHt2YWx1ZS5kdHlwZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { HashTable } from '../../executor/hash_table';\nimport { getParamValue } from './utils';\nexport const executeOp = async (node, tensorMap, context, resourceManager) => {\n switch (node.op) {\n case 'HashTable':\n case 'HashTableV2': {\n const existingTableHandle = resourceManager.getHashTableHandleByName(node.name);\n // Table is shared with initializer.\n if (existingTableHandle != null) {\n return [existingTableHandle];\n }\n else {\n const keyDType = getParamValue('keyDType', node, tensorMap, context);\n const valueDType = getParamValue('valueDType', node, tensorMap, context);\n const hashTable = new HashTable(keyDType, valueDType);\n resourceManager.addHashTable(node.name, hashTable);\n return [hashTable.handle];\n }\n }\n case 'InitializeTable':\n case 'InitializeTableV2':\n case 'LookupTableImport':\n case 'LookupTableImportV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const keys = getParamValue('keys', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [await hashTable.import(keys, values)];\n }\n case 'LookupTableFind':\n case 'LookupTableFindV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const keys = getParamValue('keys', node, tensorMap, context);\n const defaultValue = getParamValue('defaultValue', node, tensorMap, context);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [await hashTable.find(keys, defaultValue)];\n }\n case 'LookupTableSize':\n case 'LookupTableSizeV2': {\n const handle = getParamValue('tableHandle', node, tensorMap, context, resourceManager);\n const hashTable = resourceManager.getHashTableById(handle.id);\n return [hashTable.tensorSize()];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'hash_table';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90YWJsZV9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9oYXNoX3RhYmxlX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUlwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBNEIsS0FBSyxFQUNuRCxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxlQUFnQyxFQUFxQixFQUFFO0lBQ3pELFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssYUFBYSxDQUFDLENBQUM7WUFDbEIsTUFBTSxtQkFBbUIsR0FDckIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxvQ0FBb0M7WUFDcEMsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLE1BQU0sUUFBUSxHQUNWLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztnQkFDcEUsTUFBTSxVQUFVLEdBQ1osYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO2dCQUV0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUssbUJBQW1CLENBQUM7UUFDekIsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FDVCxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQ3ZDLGVBQWUsQ0FBVyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUN2RSxNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFFaEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5RCxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQztRQUN2QixLQUFLLG1CQUFtQixDQUFDLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUNULGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFDdkMsZUFBZSxDQUFXLENBQUM7WUFDOUMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ3ZFLE1BQU0sWUFBWSxHQUNkLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUV0RSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxLQUFLLGlCQUFpQixDQUFDO1FBQ3ZCLEtBQUssbUJBQW1CLENBQUMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQ1QsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUN2QyxlQUFlLENBQVcsQ0FBQztZQUU5QyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUNqQztRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVGVuc29yfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SGFzaFRhYmxlfSBmcm9tICcuLi8uLi9leGVjdXRvci9oYXNoX3RhYmxlJztcbmltcG9ydCB7UmVzb3VyY2VNYW5hZ2VyfSBmcm9tICcuLi8uLi9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7SW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEFzeW5jRXhlY3V0b3IgPSBhc3luYyhcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcik6IFByb21pc2U8VGVuc29yW10+ID0+IHtcbiAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgY2FzZSAnSGFzaFRhYmxlJzpcbiAgICBjYXNlICdIYXNoVGFibGVWMic6IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nVGFibGVIYW5kbGUgPVxuICAgICAgICAgIHJlc291cmNlTWFuYWdlci5nZXRIYXNoVGFibGVIYW5kbGVCeU5hbWUobm9kZS5uYW1lKTtcbiAgICAgIC8vIFRhYmxlIGlzIHNoYXJlZCB3aXRoIGluaXRpYWxpemVyLlxuICAgICAgaWYgKGV4aXN0aW5nVGFibGVIYW5kbGUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW2V4aXN0aW5nVGFibGVIYW5kbGVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5RFR5cGUgPVxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2V5RFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZURUeXBlID1cbiAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhbHVlRFR5cGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIERhdGFUeXBlO1xuXG4gICAgICAgIGNvbnN0IGhhc2hUYWJsZSA9IG5ldyBIYXNoVGFibGUoa2V5RFR5cGUsIHZhbHVlRFR5cGUpO1xuICAgICAgICByZXNvdXJjZU1hbmFnZXIuYWRkSGFzaFRhYmxlKG5vZGUubmFtZSwgaGFzaFRhYmxlKTtcbiAgICAgICAgcmV0dXJuIFtoYXNoVGFibGUuaGFuZGxlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnSW5pdGlhbGl6ZVRhYmxlJzpcbiAgICBjYXNlICdJbml0aWFsaXplVGFibGVWMic6XG4gICAgY2FzZSAnTG9va3VwVGFibGVJbXBvcnQnOlxuICAgIGNhc2UgJ0xvb2t1cFRhYmxlSW1wb3J0VjInOiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICd0YWJsZUhhbmRsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU1hbmFnZXIpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGtleXMgPSBnZXRQYXJhbVZhbHVlKCdrZXlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhbHVlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuXG4gICAgICByZXR1cm4gW2F3YWl0IGhhc2hUYWJsZS5pbXBvcnQoa2V5cywgdmFsdWVzKV07XG4gICAgfVxuICAgIGNhc2UgJ0xvb2t1cFRhYmxlRmluZCc6XG4gICAgY2FzZSAnTG9va3VwVGFibGVGaW5kVjInOiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICd0YWJsZUhhbmRsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU1hbmFnZXIpIGFzIFRlbnNvcjtcbiAgICAgIGNvbnN0IGtleXMgPSBnZXRQYXJhbVZhbHVlKCdrZXlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPVxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuICAgICAgcmV0dXJuIFthd2FpdCBoYXNoVGFibGUuZmluZChrZXlzLCBkZWZhdWx0VmFsdWUpXTtcbiAgICB9XG4gICAgY2FzZSAnTG9va3VwVGFibGVTaXplJzpcbiAgICBjYXNlICdMb29rdXBUYWJsZVNpemVWMic6IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3RhYmxlSGFuZGxlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlTWFuYWdlcikgYXMgVGVuc29yO1xuXG4gICAgICBjb25zdCBoYXNoVGFibGUgPSByZXNvdXJjZU1hbmFnZXIuZ2V0SGFzaFRhYmxlQnlJZChoYW5kbGUuaWQpO1xuICAgICAgcmV0dXJuIFtoYXNoVGFibGUudGVuc29yU2l6ZSgpXTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdoYXNoX3RhYmxlJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'ResizeBilinear': {\n const images = getParamValue('images', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const alignCorners = getParamValue('alignCorners', node, tensorMap, context);\n const halfPixelCenters = getParamValue('halfPixelCenters', node, tensorMap, context);\n return [ops.image.resizeBilinear(images, [size[0], size[1]], alignCorners, halfPixelCenters)];\n }\n case 'ResizeNearestNeighbor': {\n const images = getParamValue('images', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const alignCorners = getParamValue('alignCorners', node, tensorMap, context);\n const halfPixelCenters = getParamValue('halfPixelCenters', node, tensorMap, context);\n return [ops.image.resizeNearestNeighbor(images, [size[0], size[1]], alignCorners, halfPixelCenters)];\n }\n case 'CropAndResize': {\n const image = getParamValue('image', node, tensorMap, context);\n const boxes = getParamValue('boxes', node, tensorMap, context);\n const boxInd = getParamValue('boxInd', node, tensorMap, context);\n const cropSize = getParamValue('cropSize', node, tensorMap, context);\n const method = getParamValue('method', node, tensorMap, context);\n const extrapolationValue = getParamValue('extrapolationValue', node, tensorMap, context);\n return [ops.image.cropAndResize(image, boxes, boxInd, cropSize, method, extrapolationValue)];\n }\n case 'ImageProjectiveTransformV3': {\n const images = getParamValue('images', node, tensorMap, context);\n const transforms = getParamValue('transforms', node, tensorMap, context);\n const outputShape = getParamValue('outputShape', node, tensorMap, context);\n const fillValue = getParamValue('fillValue', node, tensorMap, context);\n const interpolation = getParamValue('interpolation', node, tensorMap, context);\n const fillMode = getParamValue('fillMode', node, tensorMap, context);\n return [ops.image.transform(images, transforms, interpolation.toLowerCase(), fillMode.toLowerCase(), fillValue, outputShape)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'image';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvaW1hZ2VfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQ3RDLE9BQXlCLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ25ELFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztZQUNyQixNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDaEUsTUFBTSxJQUFJLEdBQ04sYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUNkLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQy9DLENBQUM7WUFDWixNQUFNLGdCQUFnQixHQUNsQixhQUFhLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ25ELENBQUM7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQzVCLE1BQTZCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUMvRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7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QUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkQsIFRlbnNvcjNELCBUZW5zb3I0RH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1Jlc2l6ZUJpbGluZWFyJzoge1xuICAgICAgICAgIGNvbnN0IGltYWdlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ltYWdlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBhbGlnbkNvcm5lcnMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbGlnbkNvcm5lcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgY29uc3QgaGFsZlBpeGVsQ2VudGVycyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2hhbGZQaXhlbENlbnRlcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMuaW1hZ2UucmVzaXplQmlsaW5lYXIoXG4gICAgICAgICAgICAgIGltYWdlcyBhcyBUZW5zb3IzRCB8IFRlbnNvcjRELCBbc2l6ZVswXSwgc2l6ZVsxXV0sIGFsaWduQ29ybmVycyxcbiAgICAgICAgICAgICAgaGFsZlBpeGVsQ2VudGVycyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1Jlc2l6ZU5lYXJlc3ROZWlnaGJvcic6IHtcbiAgICAgICAgICBjb25zdCBpbWFnZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbWFnZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgYWxpZ25Db3JuZXJzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYWxpZ25Db3JuZXJzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IGhhbGZQaXhlbENlbnRlcnMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdoYWxmUGl4ZWxDZW50ZXJzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmltYWdlLnJlc2l6ZU5lYXJlc3ROZWlnaGJvcihcbiAgICAgICAgICAgICAgaW1hZ2VzIGFzIFRlbnNvcjNEIHwgVGVuc29yNEQsIFtzaXplWzBdLCBzaXplWzFdXSwgYWxpZ25Db3JuZXJzLFxuICAgICAgICAgICAgICBoYWxmUGl4ZWxDZW50ZXJzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ3JvcEFuZFJlc2l6ZSc6IHtcbiAgICAgICAgICBjb25zdCBpbWFnZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2ltYWdlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgYm94ZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdib3hlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGJveEluZCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2JveEluZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGNyb3BTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY3JvcFNpemUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ21ldGhvZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nO1xuICAgICAgICAgIGNvbnN0IGV4dHJhcG9sYXRpb25WYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2V4dHJhcG9sYXRpb25WYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgbnVtYmVyO1xuICAgICAgICAgIHJldHVybiBbb3BzLmltYWdlLmNyb3BBbmRSZXNpemUoXG4gICAgICAgICAgICAgIGltYWdlIGFzIFRlbnNvcjRELCBib3hlcyBhcyBUZW5zb3IyRCwgYm94SW5kIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBjcm9wU2l6ZSBhcyBbbnVtYmVyLCBudW1iZXJdLCBtZXRob2QgYXMgJ2JpbGluZWFyJyB8ICduZWFyZXN0JyxcbiAgICAgICAgICAgICAgZXh0cmFwb2xhdGlvblZhbHVlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnSW1hZ2VQcm9qZWN0aXZlVHJhbnNmb3JtVjMnOiB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW1hZ2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zZm9ybXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ291dHB1dFNoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBmaWxsVmFsdWUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdmaWxsVmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0aW9uID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW50ZXJwb2xhdGlvbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgc3RyaW5nO1xuICAgICAgICAgIGNvbnN0IGZpbGxNb2RlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZmlsbE1vZGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZztcbiAgICAgICAgICByZXR1cm4gW29wcy5pbWFnZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgIGltYWdlcyBhcyBUZW5zb3I0RCxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtcyBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbi50b0xvd2VyQ2FzZSgpIGFzICdiaWxpbmVhcicgfCAnbmVhcmVzdCcsXG4gICAgICAgICAgICAgIGZpbGxNb2RlLnRvTG93ZXJDYXNlKCkgYXMgJ2NvbnN0YW50JyB8ICdyZWZsZWN0JyB8ICd3cmFwJyB8ICduZWFyZXN0JyxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlLFxuICAgICAgICAgICAgICBvdXRwdXRTaGFwZSBhcyBbbnVtYmVyLCBudW1iZXJdKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdpbWFnZSc7XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Equal': {\n return [ops.equal(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'NotEqual': {\n return [ops.notEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Greater': {\n return [ops.greater(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'GreaterEqual': {\n return [ops.greaterEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Less': {\n return [ops.less(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LessEqual': {\n return [ops.lessEqual(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LogicalAnd': {\n return [ops.logicalAnd(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'LogicalNot': {\n return [ops.logicalNot(getParamValue('a', node, tensorMap, context))];\n }\n case 'LogicalOr': {\n return [ops.logicalOr(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'Select':\n case 'SelectV2': {\n return [ops.where(getParamValue('condition', node, tensorMap, context), getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n case 'BitwiseAnd': {\n return [ops.bitwiseAnd(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'logical';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWNhbF9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9sb2dpY2FsX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUN4QixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ2IsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUNoQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQ2YsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FDcEIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssV0FBVyxDQUFDLENBQUM7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQ2pCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFdBQVcsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUNqQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDYixhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzlELGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssWUFBWSxDQUFDLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNEO1lBQ0UsTUFBTSxTQUFTLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDO0FBRU4sTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdFcXVhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5lcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdOb3RFcXVhbCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5ub3RFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHcmVhdGVyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmdyZWF0ZXIoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnR3JlYXRlckVxdWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmdyZWF0ZXJFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMZXNzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxlc3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTGVzc0VxdWFsJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxlc3NFcXVhbChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMb2dpY2FsQW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmxvZ2ljYWxBbmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTG9naWNhbE5vdCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5sb2dpY2FsTm90KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMb2dpY2FsT3InOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9naWNhbE9yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NlbGVjdCc6XG4gICAgICAgIGNhc2UgJ1NlbGVjdFYyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLndoZXJlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdjb25kaXRpb24nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCaXR3aXNlQW5kJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJpdHdpc2VBbmQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2EnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdsb2dpY2FsJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'BatchMatMul':\n case 'BatchMatMulV2':\n case 'MatMul':\n return [ops.matMul(getParamValue('a', node, tensorMap, context), getParamValue('b', node, tensorMap, context), getParamValue('transposeA', node, tensorMap, context), getParamValue('transposeB', node, tensorMap, context))];\n case 'Einsum':\n return [ops.einsum(getParamValue('equation', node, tensorMap, context), ...getParamValue('tensors', node, tensorMap, context))];\n case 'Transpose':\n return [ops.transpose(getParamValue('x', node, tensorMap, context), getParamValue('perm', node, tensorMap, context))];\n case '_FusedMatMul':\n const [extraOp, activationFunc] = getParamValue('fusedOps', node, tensorMap, context);\n const isBiasAdd = extraOp === 'biasadd';\n const isPrelu = activationFunc === 'prelu';\n const numArgs = getParamValue('numArgs', node, tensorMap, context);\n const leakyreluAlpha = getParamValue('leakyreluAlpha', node, tensorMap, context);\n if (isBiasAdd) {\n if (isPrelu && numArgs !== 2) {\n throw new Error('Fused MatMul with BiasAdd and Prelu must have two ' +\n 'extra arguments: bias and alpha.');\n }\n if (!isPrelu && numArgs !== 1) {\n throw new Error('Fused MatMul with BiasAdd must have one extra argument: bias.');\n }\n }\n const [biasArg, preluArg] = getParamValue('args', node, tensorMap, context);\n return [ops.fused.matMul({\n a: getParamValue('a', node, tensorMap, context),\n b: getParamValue('b', node, tensorMap, context),\n transposeA: getParamValue('transposeA', node, tensorMap, context),\n transposeB: getParamValue('transposeB', node, tensorMap, context),\n bias: biasArg,\n activation: activationFunc,\n preluActivationWeights: preluArg,\n leakyreluAlpha\n })];\n case 'MatrixBandPart':\n return [ops.linalg.bandPart(getParamValue('a', node, tensorMap, context), getParamValue('numLower', node, tensorMap, context), getParamValue('numUpper', node, tensorMap, context))];\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'matrices';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cmljZXNfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvbWF0cmljZXNfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssYUFBYSxDQUFDO1FBQ25CLEtBQUssZUFBZSxDQUFDO1FBQ3JCLEtBQUssUUFBUTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNkLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsRUFDeEQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUN4RCxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLEVBQ2hFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRXBCLEtBQUssUUFBUTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNkLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDN0QsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVyQixLQUFLLFdBQVc7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDakIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUMsQ0FBQyxDQUFDO1FBRXBFLEtBQUssY0FBYztZQUNqQixNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxHQUMxQixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFjLENBQUM7WUFFdEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQztZQUN4QyxNQUFNLE9BQU8sR0FBRyxjQUFjLEtBQUssT0FBTyxDQUFDO1lBRTNDLE1BQU0sT0FBTyxHQUNSLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVksQ0FBQztZQUNuRSxNQUFNLGNBQWMsR0FDaEIsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNsRCxDQUFDO1lBRVgsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtvQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDWCxvREFBb0Q7d0JBQ3BELGtDQUFrQyxDQUFDLENBQUM7aUJBQ3pDO2dCQUNELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtvQkFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDWCwrREFBK0QsQ0FBQyxDQUFDO2lCQUN0RTthQUNGO1lBQ0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FDckIsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDdkIsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWE7b0JBQzNELENBQUMsRUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhO29CQUMzRCxVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDckQ7b0JBQ1gsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3JEO29CQUNYLElBQUksRUFBRSxPQUFPO29CQUNiLFVBQVUsRUFBRSxjQUF3QztvQkFDcEQsc0JBQXNCLEVBQUUsUUFBUTtvQkFDaEMsY0FBYztpQkFDZixDQUFDLENBQUMsQ0FBQztRQUVOLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDdkIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUN4RCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzdELGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFFdEU7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IyRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ0JhdGNoTWF0TXVsJzpcbiAgICAgICAgY2FzZSAnQmF0Y2hNYXRNdWxWMic6XG4gICAgICAgIGNhc2UgJ01hdE11bCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWF0TXVsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMkQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBib29sZWFuKV07XG5cbiAgICAgICAgY2FzZSAnRWluc3VtJzpcbiAgICAgICAgICByZXR1cm4gW29wcy5laW5zdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VxdWF0aW9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgIC4uLmdldFBhcmFtVmFsdWUoJ3RlbnNvcnMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBUZW5zb3JbXSldO1xuXG4gICAgICAgIGNhc2UgJ1RyYW5zcG9zZSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMudHJhbnNwb3NlKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3Blcm0nLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdKV07XG5cbiAgICAgICAgY2FzZSAnX0Z1c2VkTWF0TXVsJzpcbiAgICAgICAgICBjb25zdCBbZXh0cmFPcCwgYWN0aXZhdGlvbkZ1bmNdID1cbiAgICAgICAgICAgICAgKGdldFBhcmFtVmFsdWUoJ2Z1c2VkT3BzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgICBjb25zdCBpc0JpYXNBZGQgPSBleHRyYU9wID09PSAnYmlhc2FkZCc7XG4gICAgICAgICAgY29uc3QgaXNQcmVsdSA9IGFjdGl2YXRpb25GdW5jID09PSAncHJlbHUnO1xuXG4gICAgICAgICAgY29uc3QgbnVtQXJncyA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdudW1BcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpO1xuICAgICAgICAgIGNvbnN0IGxlYWt5cmVsdUFscGhhID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVha3lyZWx1QWxwaGEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIG51bWJlcjtcblxuICAgICAgICAgIGlmIChpc0JpYXNBZGQpIHtcbiAgICAgICAgICAgIGlmIChpc1ByZWx1ICYmIG51bUFyZ3MgIT09IDIpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0Z1c2VkIE1hdE11bCB3aXRoIEJpYXNBZGQgYW5kIFByZWx1IG11c3QgaGF2ZSB0d28gJyArXG4gICAgICAgICAgICAgICAgICAnZXh0cmEgYXJndW1lbnRzOiBiaWFzIGFuZCBhbHBoYS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQcmVsdSAmJiBudW1BcmdzICE9PSAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdGdXNlZCBNYXRNdWwgd2l0aCBCaWFzQWRkIG11c3QgaGF2ZSBvbmUgZXh0cmEgYXJndW1lbnQ6IGJpYXMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFtiaWFzQXJnLCBwcmVsdUFyZ10gPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhcmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5mdXNlZC5tYXRNdWwoe1xuICAgICAgICAgICAgYTogZ2V0UGFyYW1WYWx1ZSgnYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMkQsXG4gICAgICAgICAgICBiOiBnZXRQYXJhbVZhbHVlKCdiJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgIHRyYW5zcG9zZUE6IGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUEnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgYm9vbGVhbixcbiAgICAgICAgICAgIHRyYW5zcG9zZUI6IGdldFBhcmFtVmFsdWUoJ3RyYW5zcG9zZUInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgYm9vbGVhbixcbiAgICAgICAgICAgIGJpYXM6IGJpYXNBcmcsXG4gICAgICAgICAgICBhY3RpdmF0aW9uOiBhY3RpdmF0aW9uRnVuYyBhcyB0Zk9wcy5mdXNlZC5BY3RpdmF0aW9uLFxuICAgICAgICAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0czogcHJlbHVBcmcsXG4gICAgICAgICAgICBsZWFreXJlbHVBbHBoYVxuICAgICAgICAgIH0pXTtcblxuICAgICAgICBjYXNlICdNYXRyaXhCYW5kUGFydCc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMubGluYWxnLmJhbmRQYXJ0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IyRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtTG93ZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFNjYWxhcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbnVtVXBwZXInLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFNjYWxhcildO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnbWF0cmljZXMnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'EuclideanNorm':\n return [ops.euclideanNorm(getParamValue('x', node, tensorMap, context), getParamValue('axis', node, tensorMap, context), getParamValue('keepDims', node, tensorMap, context))];\n case 'FusedBatchNorm':\n case 'FusedBatchNormV2': {\n return [ops.batchNorm(getParamValue('x', node, tensorMap, context), getParamValue('mean', node, tensorMap, context), getParamValue('variance', node, tensorMap, context), getParamValue('offset', node, tensorMap, context), getParamValue('scale', node, tensorMap, context), getParamValue('epsilon', node, tensorMap, context))];\n }\n case 'FusedBatchNormV3': {\n return [ops.batchNorm(getParamValue('x', node, tensorMap, context), getParamValue('mean', node, tensorMap, context), getParamValue('variance', node, tensorMap, context), getParamValue('offset', node, tensorMap, context), getParamValue('scale', node, tensorMap, context), getParamValue('epsilon', node, tensorMap, context))];\n }\n case 'LRN': {\n return [ops.localResponseNormalization(getParamValue('x', node, tensorMap, context), getParamValue('radius', node, tensorMap, context), getParamValue('bias', node, tensorMap, context), getParamValue('alpha', node, tensorMap, context), getParamValue('beta', node, tensorMap, context))];\n }\n case 'Softmax': {\n return [ops.softmax(getParamValue('x', node, tensorMap, context))];\n }\n case 'LogSoftmax': {\n return [ops.logSoftmax(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'normalization';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXphdGlvbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9ub3JtYWxpemF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUN0QyxPQUF5QixFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUNuRCxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLGVBQWU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQ3JCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDdEQsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBYSxFQUMzRCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssZ0JBQWdCLENBQUM7UUFDdEIsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUNqQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDekQsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM3RCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDMUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELEtBQUssa0JBQWtCLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDakIsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN0RCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3pELGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDN0QsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMzRCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzFELGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FDbEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0IsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDekQsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUNmLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNsQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvciwgVGVuc29yM0QsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnRXVjbGlkZWFuTm9ybSc6XG4gICAgICAgICAgcmV0dXJuIFtvcHMuZXVjbGlkZWFuTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4pXTtcbiAgICAgICAgY2FzZSAnRnVzZWRCYXRjaE5vcm0nOlxuICAgICAgICBjYXNlICdGdXNlZEJhdGNoTm9ybVYyJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJhdGNoTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtZWFuJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhcmlhbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZnNldCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzY2FsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlcHNpbG9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdGdXNlZEJhdGNoTm9ybVYzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJhdGNoTm9ybShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdtZWFuJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3ZhcmlhbmNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ29mZnNldCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzY2FsZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlcHNpbG9uJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdMUk4nOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9jYWxSZXNwb25zZU5vcm1hbGl6YXRpb24oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjNEIHxcbiAgICAgICAgICAgICAgICAgIFRlbnNvcjRELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyYWRpdXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmlhcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdhbHBoYScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiZXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXIpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTb2Z0bWF4Jzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnNvZnRtYXgoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0xvZ1NvZnRtYXgnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubG9nU29mdG1heChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdub3JtYWxpemF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'RaggedGather': {\n const { outputNestedSplits, outputDenseValues, } = ops.raggedGather(getParamValue('paramsNestedSplits', node, tensorMap, context), getParamValue('paramsDenseValues', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('outputRaggedRank', node, tensorMap, context));\n return outputNestedSplits.concat(outputDenseValues);\n }\n case 'RaggedRange': {\n const { rtNestedSplits, rtDenseValues } = ops.raggedRange(getParamValue('starts', node, tensorMap, context), getParamValue('limits', node, tensorMap, context), getParamValue('splits', node, tensorMap, context));\n return [rtNestedSplits, rtDenseValues];\n }\n case 'RaggedTensorToTensor': {\n return [ops.raggedTensorToTensor(getParamValue('shape', node, tensorMap, context), getParamValue('values', node, tensorMap, context), getParamValue('defaultValue', node, tensorMap, context), getParamValue('rowPartitionTensors', node, tensorMap, context), getParamValue('rowPartitionTypes', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'ragged';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnZ2VkX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3JhZ2dlZF9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFBRSxPQUF5QixFQUNqRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDeEIsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixNQUFNLEVBQ0osa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixHQUNHLEdBQUcsQ0FBQyxZQUFZLENBQ1osYUFBYSxDQUNULG9CQUFvQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN0QyxFQUNaLGFBQWEsQ0FDVCxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM1RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzVELGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDaEQsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDckQ7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FDbkQsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMzRCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzNELGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDeEM7UUFDRCxLQUFLLHNCQUFzQixDQUFDLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FDNUIsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDakUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUNqRCxFQUNaLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDL0MsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1JhZ2dlZEdhdGhlcic6IHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBvdXRwdXROZXN0ZWRTcGxpdHMsXG4gICAgICAgICAgICBvdXRwdXREZW5zZVZhbHVlcyxcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAgICAgb3BzLnJhZ2dlZEdhdGhlcihcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtc05lc3RlZFNwbGl0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JbXSxcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgJ3BhcmFtc0RlbnNlVmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdvdXRwdXRSYWdnZWRSYW5rJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgICAgIG51bWJlcik7XG4gICAgICAgICAgcmV0dXJuIG91dHB1dE5lc3RlZFNwbGl0cy5jb25jYXQob3V0cHV0RGVuc2VWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhZ2dlZFJhbmdlJzoge1xuICAgICAgICAgIGNvbnN0IHtydE5lc3RlZFNwbGl0cywgcnREZW5zZVZhbHVlc30gPSBvcHMucmFnZ2VkUmFuZ2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3N0YXJ0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdsaW1pdHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3BsaXRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpO1xuICAgICAgICAgIHJldHVybiBbcnROZXN0ZWRTcGxpdHMsIHJ0RGVuc2VWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JhZ2dlZFRlbnNvclRvVGVuc29yJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnJhZ2dlZFRlbnNvclRvVGVuc29yKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkZWZhdWx0VmFsdWUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncm93UGFydGl0aW9uVGVuc29ycycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIFRlbnNvcltdLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyb3dQYXJ0aXRpb25UeXBlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1tdKV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdyYWdnZWQnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Max': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.max(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Mean': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.mean(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Min': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.min(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Sum': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.sum(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'All': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.all(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Any': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.any(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'ArgMax': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.argMax(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'ArgMin': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.argMin(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Prod': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const keepDims = getParamValue('keepDims', node, tensorMap, context);\n return [ops.prod(getParamValue('x', node, tensorMap, context), axis, keepDims)];\n }\n case 'Cumprod': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const exclusive = getParamValue('exclusive', node, tensorMap, context);\n const reverse = getParamValue('reverse', node, tensorMap, context);\n return [ops.cumprod(getParamValue('x', node, tensorMap, context), axis, exclusive, reverse)];\n }\n case 'Cumsum': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const exclusive = getParamValue('exclusive', node, tensorMap, context);\n const reverse = getParamValue('reverse', node, tensorMap, context);\n return [ops.cumsum(getParamValue('x', node, tensorMap, context), axis, exclusive, reverse)];\n }\n case 'Bincount':\n const x = getParamValue('x', node, tensorMap, context);\n const weights = getParamValue('weights', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n return [ops.bincount(x, weights, size)];\n case 'DenseBincount': {\n const x = getParamValue('x', node, tensorMap, context);\n const weights = getParamValue('weights', node, tensorMap, context);\n const size = getParamValue('size', node, tensorMap, context);\n const binaryOutput = getParamValue('binaryOutput', node, tensorMap, context);\n return [ops.denseBincount(x, weights, size, binaryOutput)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'reduction';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWN0aW9uX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3JlZHVjdGlvbl9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNWLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQztZQUNoRSxNQUFNLFFBQVEsR0FDVixhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQUM7WUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1gsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUFFLElBQUksRUFDNUQsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNoQjtRQUNELEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxNQUFNLElBQUksR0FDTixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQ1YsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFD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NUQ7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VGVuc29yLCBUZW5zb3IxRCwgVGVuc29yMkR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWltcG9ydHMtZnJvbS1kaXN0XG5pbXBvcnQgKiBhcyB0Zk9wcyBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUvZGlzdC9vcHMvb3BzX2Zvcl9jb252ZXJ0ZXInO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge0V4ZWN1dGlvbkNvbnRleHR9IGZyb20gJy4uLy4uL2V4ZWN1dG9yL2V4ZWN1dGlvbl9jb250ZXh0JztcbmltcG9ydCB7SW50ZXJuYWxPcEV4ZWN1dG9yLCBOb2RlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7Z2V0UGFyYW1WYWx1ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlT3A6IEludGVybmFsT3BFeGVjdXRvciA9XG4gICAgKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBvcHMgPSB0Zk9wcyk6IFRlbnNvcltdID0+IHtcbiAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICBjYXNlICdNYXgnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGtlZXBEaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWF4KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWVhbic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3Qga2VlcERpbXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZWVwRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbjtcbiAgICAgICAgICByZXR1cm4gW29wcy5tZWFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnTWluJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLm1pbihcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBrZWVwRGltcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1N1bSc6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3Qga2VlcERpbXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdrZWVwRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbjtcbiAgICAgICAgICByZXR1cm4gW29wcy5zdW0oXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAga2VlcERpbXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdBbGwnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGtlZXBEaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgna2VlcERpbXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW47XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYWxsKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMsXG4gICAgICAgICAgICAgIGtlZXBEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQW55Jzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmFueShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBrZWVwRGltcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0FyZ01heCc6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIHJldHVybiBbb3BzLmFyZ01heChcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQXJnTWluJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYXJnTWluKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdQcm9kJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBrZWVwRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2tlZXBEaW1zJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLnByb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAga2VlcERpbXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDdW1wcm9kJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZXhjbHVzaXZlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZXhjbHVzaXZlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IHJldmVyc2UgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyZXZlcnNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmN1bXByb2QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYXhpcyxcbiAgICAgICAgICAgICAgZXhjbHVzaXZlLCByZXZlcnNlKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ3Vtc3VtJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZXhjbHVzaXZlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZXhjbHVzaXZlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIGNvbnN0IHJldmVyc2UgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyZXZlcnNlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBib29sZWFuO1xuICAgICAgICAgIHJldHVybiBbb3BzLmN1bXN1bShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCBheGlzLFxuICAgICAgICAgICAgICBleGNsdXNpdmUsIHJldmVyc2UpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCaW5jb3VudCc6XG4gICAgICAgICAgY29uc3QgeCA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFEO1xuICAgICAgICAgIGNvbnN0IHdlaWdodHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd3ZWlnaHRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICBjb25zdCBzaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc2l6ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuXG4gICAgICAgICAgcmV0dXJuIFtvcHMuYmluY291bnQoeCwgd2VpZ2h0cywgc2l6ZSldO1xuICAgICAgICBjYXNlICdEZW5zZUJpbmNvdW50Jzoge1xuICAgICAgICAgIGNvbnN0IHggPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCB8XG4gICAgICAgICAgICAgIFRlbnNvcjJEO1xuICAgICAgICAgIGNvbnN0IHdlaWdodHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd3ZWlnaHRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCB8XG4gICAgICAgICAgICAgIFRlbnNvcjJEO1xuICAgICAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG5cbiAgICAgICAgICBjb25zdCBiaW5hcnlPdXRwdXQgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiaW5hcnlPdXRwdXQnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIGJvb2xlYW47XG5cbiAgICAgICAgICByZXR1cm4gW29wcy5kZW5zZUJpbmNvdW50KHgsIHdlaWdodHMsIHNpemUsIGJpbmFyeU91dHB1dCldO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAncmVkdWN0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { tidy, util } from '@tensorflow/tfjs-core';\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'ConcatV2':\n case 'Concat': {\n const n = getParamValue('n', node, tensorMap, context);\n const axis = getParamValue('axis', node, tensorMap, context);\n let inputs = getParamValue('tensors', node, tensorMap, context);\n inputs = inputs.slice(0, n);\n return [ops.concat(inputs, axis)];\n }\n case 'Gather': {\n const input = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gather(input, ops.cast(indices, 'int32'), 0)];\n }\n case 'GatherV2': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const batchDims = getParamValue('batchDims', node, tensorMap, context);\n const input = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gather(input, ops.cast(indices, 'int32'), axis, batchDims)];\n }\n case 'Reverse': {\n const dims = getParamValue('dims', node, tensorMap, context);\n const axis = [];\n for (let i = 0; i < dims.length; i++) {\n if (dims[i]) {\n axis.push(i);\n }\n }\n const input = getParamValue('x', node, tensorMap, context);\n return [ops.reverse(input, axis)];\n }\n case 'ReverseV2': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const input = getParamValue('x', node, tensorMap, context);\n return [ops.reverse(input, axis)];\n }\n case 'Slice': {\n // tslint:disable-next-line:no-any\n const begin = getParamValue('begin', node, tensorMap, context);\n // tslint:disable-next-line:no-any\n const size = getParamValue('size', node, tensorMap, context);\n return [ops.slice(getParamValue('x', node, tensorMap, context), begin, size)];\n }\n case 'StridedSlice': {\n const begin = getParamValue('begin', node, tensorMap, context);\n const end = getParamValue('end', node, tensorMap, context);\n const strides = getParamValue('strides', node, tensorMap, context);\n const beginMask = getParamValue('beginMask', node, tensorMap, context);\n const endMask = getParamValue('endMask', node, tensorMap, context);\n const ellipsisMask = getParamValue('ellipsisMask', node, tensorMap, context);\n const newAxisMask = getParamValue('newAxisMask', node, tensorMap, context);\n const shrinkAxisMask = getParamValue('shrinkAxisMask', node, tensorMap, context);\n const tensor = getParamValue('x', node, tensorMap, context);\n return [ops.stridedSlice(tensor, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask)];\n }\n case 'Pack': {\n return tidy(() => {\n const axis = getParamValue('axis', node, tensorMap, context);\n const tensors = getParamValue('tensors', node, tensorMap, context);\n // Reshape the tensors to the first tensor's shape if they don't\n // match.\n const shape = tensors[0].shape;\n const squeezedShape = ops.squeeze(tensors[0]).shape;\n const mapped = tensors.map(tensor => {\n const sameShape = util.arraysEqual(tensor.shape, shape);\n if (!sameShape &&\n !util.arraysEqual(ops.squeeze(tensor).shape, squeezedShape)) {\n throw new Error('the input tensors shape does not match');\n }\n return sameShape ? tensor : ops.reshape(tensor, shape);\n });\n return [ops.stack(mapped, axis)];\n });\n }\n case 'Unpack': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const tensor = getParamValue('tensor', node, tensorMap, context);\n return ops.unstack(tensor, axis);\n }\n case 'Tile': {\n const reps = getParamValue('reps', node, tensorMap, context);\n return [ops.tile(getParamValue('x', node, tensorMap, context), reps)];\n }\n case 'Split':\n case 'SplitV': {\n const axis = getParamValue('axis', node, tensorMap, context);\n const numOrSizeSplits = getParamValue('numOrSizeSplits', node, tensorMap, context);\n const tensor = getParamValue('x', node, tensorMap, context);\n return ops.split(tensor, numOrSizeSplits, axis);\n }\n case 'ScatterNd': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const shape = getParamValue('shape', node, tensorMap, context);\n return [ops.scatterND(indices, values, shape)];\n }\n case 'GatherNd': {\n const x = getParamValue('x', node, tensorMap, context);\n const indices = getParamValue('indices', node, tensorMap, context);\n return [ops.gatherND(x, indices)];\n }\n case 'SparseToDense': {\n const indices = getParamValue('sparseIndices', node, tensorMap, context);\n const shape = getParamValue('outputShape', node, tensorMap, context);\n const sparseValues = getParamValue('sparseValues', node, tensorMap, context);\n const defaultValue = getParamValue('defaultValue', node, tensorMap, context);\n return [ops.sparseToDense(indices, sparseValues, shape, sparseValues.dtype === defaultValue.dtype ?\n defaultValue :\n ops.cast(defaultValue, sparseValues.dtype))];\n }\n case 'TensorScatterUpdate': {\n const indices = getParamValue('indices', node, tensorMap, context);\n const values = getParamValue('values', node, tensorMap, context);\n const tensor = getParamValue('tensor', node, tensorMap, context);\n return [ops.tensorScatterUpdate(tensor, indices, values)];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'slice_join';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2Vfam9pbl9leGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9vcGVyYXRpb25zL2V4ZWN1dG9ycy9zbGljZV9qb2luX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLGlEQUFpRDtBQUNqRCxPQUFPLEtBQUssS0FBSyxNQUFNLGtEQUFrRCxDQUFDO0FBTTFFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixDQUFDLElBQVUsRUFBRSxTQUEwQixFQUFFLE9BQXlCLEVBQ2pFLEdBQUcsR0FBRyxLQUFLLEVBQVksRUFBRTtJQUN4QixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDZixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUM5RCxJQUFJLE1BQU0sR0FDTixhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLENBQUM7WUFDbkUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsS0FBSyxRQUFRLENB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QUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUNULGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQztZQUNqRSxNQUFNLE1BQU0sR0FDUixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQ1IsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1NjYWxhciwgVGVuc29yLCBUZW5zb3IxRCwgdGlkeSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ0NvbmNhdFYyJzpcbiAgICAgICAgY2FzZSAnQ29uY2F0Jzoge1xuICAgICAgICAgIGNvbnN0IG4gPSBnZXRQYXJhbVZhbHVlKCduJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBsZXQgaW5wdXRzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29ycycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yW107XG4gICAgICAgICAgaW5wdXRzID0gaW5wdXRzLnNsaWNlKDAsIG4pO1xuICAgICAgICAgIHJldHVybiBbb3BzLmNvbmNhdChpbnB1dHMsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHYXRoZXInOiB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFEO1xuICAgICAgICAgIHJldHVybiBbb3BzLmdhdGhlcihpbnB1dCwgb3BzLmNhc3QoaW5kaWNlcywgJ2ludDMyJyksIDApXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdHYXRoZXJWMic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGJhdGNoRGltcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2JhdGNoRGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRDtcbiAgICAgICAgICByZXR1cm4gW29wcy5nYXRoZXIoXG4gICAgICAgICAgICAgIGlucHV0LCBvcHMuY2FzdChpbmRpY2VzLCAnaW50MzInKSwgYXhpcywgYmF0Y2hEaW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUmV2ZXJzZSc6IHtcbiAgICAgICAgICBjb25zdCBkaW1zID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGltcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbltdO1xuICAgICAgICAgIGNvbnN0IGF4aXMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkaW1zW2ldKSB7XG4gICAgICAgICAgICAgIGF4aXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmV2ZXJzZShpbnB1dCwgYXhpcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JldmVyc2VWMic6IHtcbiAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYXhpcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmV2ZXJzZShpbnB1dCwgYXhpcyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NsaWNlJzoge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICBjb25zdCBiZWdpbiA9IGdldFBhcmFtVmFsdWUoJ2JlZ2luJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnk7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGNvbnN0IHNpemUgPSBnZXRQYXJhbVZhbHVlKCdzaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBhbnk7XG4gICAgICAgICAgcmV0dXJuIFtvcHMuc2xpY2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvciwgYmVnaW4sXG4gICAgICAgICAgICAgIHNpemUpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpZGVkU2xpY2UnOiB7XG4gICAgICAgICAgY29uc3QgYmVnaW4gPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdiZWdpbicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgZW5kID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZW5kJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBzdHJpZGVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3RyaWRlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgY29uc3QgYmVnaW5NYXNrID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmVnaW5NYXNrJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZW5kTWFzayA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2VuZE1hc2snLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBlbGxpcHNpc01hc2sgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdlbGxpcHNpc01hc2snLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBuZXdBeGlzTWFzayA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ25ld0F4aXNNYXNrJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3Qgc2hyaW5rQXhpc01hc2sgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaHJpbmtBeGlzTWFzaycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IHRlbnNvciA9IGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcblxuICAgICAgICAgIHJldHVybiBbb3BzLnN0cmlkZWRTbGljZShcbiAgICAgICAgICAgICAgdGVuc29yLCBiZWdpbiwgZW5kLCBzdHJpZGVzLCBiZWdpbk1hc2ssIGVuZE1hc2ssIGVsbGlwc2lzTWFzayxcbiAgICAgICAgICAgICAgbmV3QXhpc01hc2ssIHNocmlua0F4aXNNYXNrKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUGFjayc6IHtcbiAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBheGlzID1cbiAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCB0ZW5zb3JzID1cbiAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd0ZW5zb3JzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3JbXTtcbiAgICAgICAgICAgIC8vIFJlc2hhcGUgdGhlIHRlbnNvcnMgdG8gdGhlIGZpcnN0IHRlbnNvcidzIHNoYXBlIGlmIHRoZXkgZG9uJ3RcbiAgICAgICAgICAgIC8vIG1hdGNoLlxuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSB0ZW5zb3JzWzBdLnNoYXBlO1xuICAgICAgICAgICAgY29uc3Qgc3F1ZWV6ZWRTaGFwZSA9IG9wcy5zcXVlZXplKHRlbnNvcnNbMF0pLnNoYXBlO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGVuc29ycy5tYXAodGVuc29yID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc2FtZVNoYXBlID0gdXRpbC5hcnJheXNFcXVhbCh0ZW5zb3Iuc2hhcGUsIHNoYXBlKTtcbiAgICAgICAgICAgICAgaWYgKCFzYW1lU2hhcGUgJiZcbiAgICAgICAgICAgICAgICAgICF1dGlsLmFycmF5c0VxdWFsKG9wcy5zcXVlZXplKHRlbnNvcikuc2hhcGUsIHNxdWVlemVkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgaW5wdXQgdGVuc29ycyBzaGFwZSBkb2VzIG5vdCBtYXRjaCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzYW1lU2hhcGUgPyB0ZW5zb3IgOiBvcHMucmVzaGFwZSh0ZW5zb3IsIHNoYXBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFtvcHMuc3RhY2sobWFwcGVkLCBheGlzKV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVW5wYWNrJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgdGVuc29yID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIG9wcy51bnN0YWNrKHRlbnNvciwgYXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnVGlsZSc6IHtcbiAgICAgICAgICBjb25zdCByZXBzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVwcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGlsZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLCByZXBzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BsaXQnOlxuICAgICAgICBjYXNlICdTcGxpdFYnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBudW1PclNpemVTcGxpdHMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdudW1PclNpemVTcGxpdHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBudW1iZXIgfFxuICAgICAgICAgICAgICBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCB0ZW5zb3IgPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG5cbiAgICAgICAgICByZXR1cm4gb3BzLnNwbGl0KHRlbnNvciwgbnVtT3JTaXplU3BsaXRzLCBheGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTY2F0dGVyTmQnOiB7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICBjb25zdCBzaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5zY2F0dGVyTkQoaW5kaWNlcywgdmFsdWVzLCBzaGFwZSldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0dhdGhlck5kJzoge1xuICAgICAgICAgIGNvbnN0IHggPSBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgaW5kaWNlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5nYXRoZXJORCh4LCBpbmRpY2VzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BhcnNlVG9EZW5zZSc6IHtcbiAgICAgICAgICBjb25zdCBpbmRpY2VzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnc3BhcnNlSW5kaWNlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IHNoYXBlID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnb3V0cHV0U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IHNwYXJzZVZhbHVlcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3NwYXJzZVZhbHVlcycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yO1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgU2NhbGFyO1xuICAgICAgICAgIHJldHVybiBbb3BzLnNwYXJzZVRvRGVuc2UoXG4gICAgICAgICAgICAgIGluZGljZXMsIHNwYXJzZVZhbHVlcywgc2hhcGUsXG4gICAgICAgICAgICAgIHNwYXJzZVZhbHVlcy5kdHlwZSA9PT0gZGVmYXVsdFZhbHVlLmR0eXBlID9cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICBvcHMuY2FzdChkZWZhdWx0VmFsdWUsIHNwYXJzZVZhbHVlcy5kdHlwZSkpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdUZW5zb3JTY2F0dGVyVXBkYXRlJzoge1xuICAgICAgICAgIGNvbnN0IGluZGljZXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndmFsdWVzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgY29uc3QgdGVuc29yID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgndGVuc29yJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3I7XG4gICAgICAgICAgcmV0dXJuIFtvcHMudGVuc29yU2NhdHRlclVwZGF0ZSh0ZW5zb3IsIGluZGljZXMsIHZhbHVlcyldO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnc2xpY2Vfam9pbic7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'SparseFillEmptyRows': {\n const { outputIndices, outputValues, emptyRowIndicator, reverseIndexMap } = ops.sparse.sparseFillEmptyRows(getParamValue('indices', node, tensorMap, context), getParamValue('values', node, tensorMap, context), getParamValue('denseShape', node, tensorMap, context), getParamValue('defaultValue', node, tensorMap, context));\n return [\n outputIndices, outputValues, emptyRowIndicator, reverseIndexMap\n ];\n }\n case 'SparseReshape': {\n const { outputIndices, outputShape } = ops.sparse.sparseReshape(getParamValue('inputIndices', node, tensorMap, context), getParamValue('inputShape', node, tensorMap, context), getParamValue('newShape', node, tensorMap, context));\n return [outputIndices, outputShape];\n }\n case 'SparseSegmentMean': {\n const outputData = ops.sparse.sparseSegmentMean(getParamValue('data', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('segmentIds', node, tensorMap, context));\n return [outputData];\n }\n case 'SparseSegmentSum': {\n const outputData = ops.sparse.sparseSegmentSum(getParamValue('data', node, tensorMap, context), getParamValue('indices', node, tensorMap, context), getParamValue('segmentIds', node, tensorMap, context));\n return [outputData];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'sparse';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3NwYXJzZV9leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sRUFDSixhQUFhLEVBQ2IsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixlQUFlLEVBQ2hCLEdBQ0csR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FDMUIsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDckMsRUFDWixhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzdELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLEVBQ1osYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDNUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU87Z0JBQ0wsYUFBYSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxlQUFlO2FBQ2hFLENBQUM7U0FDSDtRQUNELEtBQUssZUFBZSxDQUFDLENBQUM7WUFDcEIsTUFBTSxFQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDekQsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDMUMsRUFDWixhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQ2pFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDckM7UUFDRCxLQUFLLG1CQUFtQixDQUFDLENBQUM7WUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDM0MsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN6RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzlELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckI7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUM7WUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDMUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUN6RCxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzlELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3hDLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFELCBUZW5zb3IyRH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsXG4gICAgIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgc3dpdGNoIChub2RlLm9wKSB7XG4gICAgICAgIGNhc2UgJ1NwYXJzZUZpbGxFbXB0eVJvd3MnOiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb3V0cHV0SW5kaWNlcyxcbiAgICAgICAgICAgIG91dHB1dFZhbHVlcyxcbiAgICAgICAgICAgIGVtcHR5Um93SW5kaWNhdG9yLFxuICAgICAgICAgICAgcmV2ZXJzZUluZGV4TWFwXG4gICAgICAgICAgfSA9XG4gICAgICAgICAgICAgIG9wcy5zcGFyc2Uuc3BhcnNlRmlsbEVtcHR5Um93cyhcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICAgICAgVGVuc29yMkQsXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd2YWx1ZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGVuc2VTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3IxRCxcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlZmF1bHRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgICAgICBTY2FsYXIpO1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBvdXRwdXRJbmRpY2VzLCBvdXRwdXRWYWx1ZXMsIGVtcHR5Um93SW5kaWNhdG9yLCByZXZlcnNlSW5kZXhNYXBcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYXJzZVJlc2hhcGUnOiB7XG4gICAgICAgICAgY29uc3Qge291dHB1dEluZGljZXMsIG91dHB1dFNoYXBlfSA9IG9wcy5zcGFyc2Uuc3BhcnNlUmVzaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnaW5wdXRJbmRpY2VzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMkQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2lucHV0U2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCduZXdTaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0SW5kaWNlcywgb3V0cHV0U2hhcGVdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYXJzZVNlZ21lbnRNZWFuJzoge1xuICAgICAgICAgIGNvbnN0IG91dHB1dERhdGEgPSBvcHMuc3BhcnNlLnNwYXJzZVNlZ21lbnRNZWFuKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWdtZW50SWRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0RGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3BhcnNlU2VnbWVudFN1bSc6IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXREYXRhID0gb3BzLnNwYXJzZS5zcGFyc2VTZWdtZW50U3VtKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2luZGljZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjFELFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZWdtZW50SWRzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgICAgVGVuc29yMUQpO1xuICAgICAgICAgIHJldHVybiBbb3V0cHV0RGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYE5vZGUgdHlwZSAke25vZGUub3B9IGlzIG5vdCBpbXBsZW1lbnRlZGApO1xuICAgICAgfVxuICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdzcGFyc2UnO1xuIl19","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'FFT': {\n return [ops.fft(getParamValue('x', node, tensorMap, context))];\n }\n case 'IFFT': {\n return [ops.ifft(getParamValue('x', node, tensorMap, context))];\n }\n case 'RFFT': {\n return [ops.rfft(getParamValue('x', node, tensorMap, context))];\n }\n case 'IRFFT': {\n return [ops.irfft(getParamValue('x', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'spectral';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RyYWxfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvc3BlY3RyYWxfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3BCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDWCxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNaLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1osYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELEtBQUssT0FBTyxDQUFDLENBQUM7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDYixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0Q7WUFDRSxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDOUQ7QUFDSCxDQUFDLENBQUM7QUFFVixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8taW1wb3J0cy1mcm9tLWRpc3RcbmltcG9ydCAqIGFzIHRmT3BzIGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZS9kaXN0L29wcy9vcHNfZm9yX2NvbnZlcnRlcic7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwfSBmcm9tICcuLi8uLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7RXhlY3V0aW9uQ29udGV4dH0gZnJvbSAnLi4vLi4vZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHtJbnRlcm5hbE9wRXhlY3V0b3IsIE5vZGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtnZXRQYXJhbVZhbHVlfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVPcDogSW50ZXJuYWxPcEV4ZWN1dG9yID1cbiAgICAobm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgIG9wcyA9IHRmT3BzKTogVGVuc29yW10gPT4ge1xuICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkge1xuICAgICAgICAgICAgY2FzZSAnRkZUJzoge1xuICAgICAgICAgICAgICByZXR1cm4gW29wcy5mZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0lGRlQnOiB7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLmlmZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ1JGRlQnOiB7XG4gICAgICAgICAgICAgIHJldHVybiBbb3BzLnJmZnQoXG4gICAgICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0lSRkZUJzoge1xuICAgICAgICAgICAgICByZXR1cm4gW29wcy5pcmZmdChcbiAgICAgICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcildO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbmV4cG9ydCBjb25zdCBDQVRFR09SWSA9ICdzcGVjdHJhbCc7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'StaticRegexReplace': {\n return [ops.string.staticRegexReplace(getParamValue('input', node, tensorMap, context), getParamValue('pattern', node, tensorMap, context), getParamValue('rewrite', node, tensorMap, context), getParamValue('replaceGlobal', node, tensorMap, context))];\n }\n case 'StringNGrams': {\n const { nGrams, nGramsSplits } = ops.string.stringNGrams(getParamValue('data', node, tensorMap, context), getParamValue('dataSplits', node, tensorMap, context), getParamValue('separator', node, tensorMap, context), getParamValue('nGramWidths', node, tensorMap, context), getParamValue('leftPad', node, tensorMap, context), getParamValue('rightPad', node, tensorMap, context), getParamValue('padWidth', node, tensorMap, context), getParamValue('preserveShortSequences', node, tensorMap, context));\n return [nGrams, nGramsSplits];\n }\n case 'StringSplit': {\n const { indices, values, shape } = ops.string.stringSplit(getParamValue('input', node, tensorMap, context), getParamValue('delimiter', node, tensorMap, context), getParamValue('skipEmpty', node, tensorMap, context));\n return [indices, values, shape];\n }\n case 'StringToHashBucketFast': {\n const output = ops.string.stringToHashBucketFast(getParamValue('input', node, tensorMap, context), getParamValue('numBuckets', node, tensorMap, context));\n return [output];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'string';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvZXhlY3V0b3JzL3N0cmluZ19leGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxpREFBaUQ7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxrREFBa0QsQ0FBQztBQU0xRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FDbEIsQ0FBQyxJQUFVLEVBQUUsU0FBMEIsRUFDdEMsT0FBeUIsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFZLEVBQUU7SUFDbkQsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2YsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUNuQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzFELGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDNUQsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM1RCxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFZLENBQ3BFLENBQUMsQ0FBQztTQUNKO1FBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQztZQUNuQixNQUFNLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUNsRCxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzNELGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDL0QsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM5RCxhQUFhLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUN6QyxFQUNaLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDNUQsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUM3RCxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQzdELGFBQWEsQ0FDVCx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDM0MsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDL0I7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNuRCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFhLEVBQzVELGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFDOUQsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBWSxDQUFDLENBQUM7WUFDckUsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxLQUFLLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDNUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVyxFQUMxRCxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUMsQ0FBQztZQUNyRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakI7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7U2NhbGFyLCBUZW5zb3IsIFRlbnNvcjFEfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnU3RhdGljUmVnZXhSZXBsYWNlJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLnN0cmluZy5zdGF0aWNSZWdleFJlcGxhY2UoXG4gICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbnB1dCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncGF0dGVybicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmV3cml0ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgncmVwbGFjZUdsb2JhbCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgYm9vbGVhbixcbiAgICAgICAgICApXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpbmdOR3JhbXMnOiB7XG4gICAgICAgICAgY29uc3Qge25HcmFtcywgbkdyYW1zU3BsaXRzfSA9IG9wcy5zdHJpbmcuc3RyaW5nTkdyYW1zKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdkYXRhJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IxRCxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnZGF0YVNwbGl0cycsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzZXBhcmF0b3InLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbkdyYW1XaWR0aHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBudW1iZXJbXSxcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbGVmdFBhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdyaWdodFBhZCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdwYWRXaWR0aCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKFxuICAgICAgICAgICAgICAgICAgJ3ByZXNlcnZlU2hvcnRTZXF1ZW5jZXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBib29sZWFuKTtcbiAgICAgICAgICByZXR1cm4gW25HcmFtcywgbkdyYW1zU3BsaXRzXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTdHJpbmdTcGxpdCc6IHtcbiAgICAgICAgICBjb25zdCB7aW5kaWNlcywgdmFsdWVzLCBzaGFwZX0gPSBvcHMuc3RyaW5nLnN0cmluZ1NwbGl0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdpbnB1dCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yMUQsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2RlbGltaXRlcicsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgU2NhbGFyLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdza2lwRW1wdHknLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIGJvb2xlYW4pO1xuICAgICAgICAgIHJldHVybiBbaW5kaWNlcywgdmFsdWVzLCBzaGFwZV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3RyaW5nVG9IYXNoQnVja2V0RmFzdCc6IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBvcHMuc3RyaW5nLnN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2lucHV0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ251bUJ1Y2tldHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcik7XG4gICAgICAgICAgcmV0dXJuIFtvdXRwdXRdO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGBOb2RlIHR5cGUgJHtub2RlLm9wfSBpcyBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG5leHBvcnQgY29uc3QgQ0FURUdPUlkgPSAnc3RyaW5nJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line: no-imports-from-dist\nimport * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter';\nimport { getParamValue } from './utils';\nexport const executeOp = (node, tensorMap, context, ops = tfOps) => {\n switch (node.op) {\n case 'Cast': {\n return [ops.cast(getParamValue('x', node, tensorMap, context), getParamValue('dtype', node, tensorMap, context))];\n }\n case 'ExpandDims': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.expandDims(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Squeeze': {\n const axis = getParamValue('axis', node, tensorMap, context);\n return [ops.squeeze(getParamValue('x', node, tensorMap, context), axis)];\n }\n case 'Reshape': {\n return [ops.reshape(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'EnsureShape': {\n return [ops.ensureShape(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'MirrorPad': {\n return [ops.mirrorPad(getParamValue('x', node, tensorMap, context), getParamValue('padding', node, tensorMap, context), getParamValue('mode', node, tensorMap, context))];\n }\n case 'PadV2':\n case 'Pad': {\n return [ops.pad(getParamValue('x', node, tensorMap, context), getParamValue('padding', node, tensorMap, context), getParamValue('constantValue', node, tensorMap, context))];\n }\n case 'SpaceToBatchND': {\n const blockShape = getParamValue('blockShape', node, tensorMap, context);\n const paddings = getParamValue('paddings', node, tensorMap, context);\n return [ops.spaceToBatchND(getParamValue('x', node, tensorMap, context), blockShape, paddings)];\n }\n case 'BatchToSpaceND': {\n const blockShape = getParamValue('blockShape', node, tensorMap, context);\n const crops = getParamValue('crops', node, tensorMap, context);\n return [ops.batchToSpaceND(getParamValue('x', node, tensorMap, context), blockShape, crops)];\n }\n case 'DepthToSpace': {\n const blockSize = getParamValue('blockSize', node, tensorMap, context);\n const dataFormat = getParamValue('dataFormat', node, tensorMap, context).toUpperCase();\n return [ops.depthToSpace(getParamValue('x', node, tensorMap, context), blockSize, dataFormat)];\n }\n case 'BroadcastTo': {\n return [ops.broadcastTo(getParamValue('x', node, tensorMap, context), getParamValue('shape', node, tensorMap, context))];\n }\n case 'BroadcastArgs': {\n return [ops.broadcastArgs(getParamValue('s0', node, tensorMap, context), getParamValue('s1', node, tensorMap, context))];\n }\n default:\n throw TypeError(`Node type ${node.op} is not implemented`);\n }\n};\nexport const CATEGORY = 'transformation';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb25fZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvb3BlcmF0aW9ucy9leGVjdXRvcnMvdHJhbnNmb3JtYXRpb25fZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsaURBQWlEO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sa0RBQWtELENBQUM7QUFNMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLENBQUMsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsR0FBRyxHQUFHLEtBQUssRUFBWSxFQUFFO0lBQ3hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNmLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDWixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQ3pCLENBQUMsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxZQUFZLENBQUMsQ0FBQztZQUNqQixNQUFNLElBQUksR0FDTixhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLENBQUM7WUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2xCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxNQUFNLEVB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LElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUM3QyxDQUFDLFdBQVcsRUFDZCxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQ3BCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsRUFDeEQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUNuQixhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3RELGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQWEsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUNyQixhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFXLEVBQ3ZELGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQVcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNFLE1BQU0sU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztLQUM5RDtBQUNILENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUZW5zb3IsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1pbXBvcnRzLWZyb20tZGlzdFxuaW1wb3J0ICogYXMgdGZPcHMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlL2Rpc3Qvb3BzL29wc19mb3JfY29udmVydGVyJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uLy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi8uLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge0ludGVybmFsT3BFeGVjdXRvciwgTm9kZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2dldFBhcmFtVmFsdWV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZU9wOiBJbnRlcm5hbE9wRXhlY3V0b3IgPVxuICAgIChub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgb3BzID0gdGZPcHMpOiBUZW5zb3JbXSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUub3ApIHtcbiAgICAgICAgY2FzZSAnQ2FzdCc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5jYXN0KFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2R0eXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyAnaW50MzInIHxcbiAgICAgICAgICAgICAgICAgICdmbG9hdDMyJyB8ICdib29sJyldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0V4cGFuZERpbXMnOiB7XG4gICAgICAgICAgY29uc3QgYXhpcyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2F4aXMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcjtcbiAgICAgICAgICByZXR1cm4gW29wcy5leHBhbmREaW1zKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdTcXVlZXplJzoge1xuICAgICAgICAgIGNvbnN0IGF4aXMgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdheGlzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICByZXR1cm4gW29wcy5zcXVlZXplKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsIGF4aXMpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1Jlc2hhcGUnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucmVzaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdFbnN1cmVTaGFwZSc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5lbnN1cmVTaGFwZShcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdNaXJyb3JQYWQnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMubWlycm9yUGFkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmcnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnbW9kZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgJ3JlZmxlY3QnIHxcbiAgICAgICAgICAgICAgICAgICdzeW1tZXRyaWMnKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnUGFkVjInOlxuICAgICAgICBjYXNlICdQYWQnOiB7XG4gICAgICAgICAgcmV0dXJuIFtvcHMucGFkKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmcnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzXG4gICAgICAgICAgICAgICAgICBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY29uc3RhbnRWYWx1ZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXNcbiAgICAgICAgICAgICAgICAgIG51bWJlcildO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1NwYWNlVG9CYXRjaE5EJzoge1xuICAgICAgICAgIGNvbnN0IGJsb2NrU2hhcGUgPVxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdibG9ja1NoYXBlJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXTtcbiAgICAgICAgICBjb25zdCBwYWRkaW5ncyA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3BhZGRpbmdzJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXJbXVtdO1xuICAgICAgICAgIHJldHVybiBbb3BzLnNwYWNlVG9CYXRjaE5EKFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCd4Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGJsb2NrU2hhcGUsIHBhZGRpbmdzKV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQmF0Y2hUb1NwYWNlTkQnOiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaGFwZSA9XG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2Jsb2NrU2hhcGUnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdO1xuICAgICAgICAgIGNvbnN0IGNyb3BzID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnY3JvcHMnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIG51bWJlcltdW107XG4gICAgICAgICAgcmV0dXJuIFtvcHMuYmF0Y2hUb1NwYWNlTkQoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcixcbiAgICAgICAgICAgICAgYmxvY2tTaGFwZSwgY3JvcHMpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdEZXB0aFRvU3BhY2UnOiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID1cbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgnYmxvY2tTaXplJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgZGF0YUZvcm1hdCA9XG4gICAgICAgICAgICAgIChnZXRQYXJhbVZhbHVlKCdkYXRhRm9ybWF0Jywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhc1xuICAgICAgICAgICAgICAgc3RyaW5nKS50b1VwcGVyQ2FzZSgpIGFzICdOSFdDJyB8XG4gICAgICAgICAgICAgICdOQ0hXJztcbiAgICAgICAgICByZXR1cm4gW29wcy5kZXB0aFRvU3BhY2UoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3gnLCBub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpIGFzIFRlbnNvcjRELFxuICAgICAgICAgICAgICBibG9ja1NpemUsIGRhdGFGb3JtYXQpXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCcm9hZGNhc3RUbyc6IHtcbiAgICAgICAgICByZXR1cm4gW29wcy5icm9hZGNhc3RUbyhcbiAgICAgICAgICAgICAgZ2V0UGFyYW1WYWx1ZSgneCcsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgVGVuc29yLFxuICAgICAgICAgICAgICBnZXRQYXJhbVZhbHVlKCdzaGFwZScsIG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkgYXMgbnVtYmVyW10pXTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdCcm9hZGNhc3RBcmdzJzoge1xuICAgICAgICAgIHJldHVybiBbb3BzLmJyb2FkY2FzdEFyZ3MoXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3MwJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IsXG4gICAgICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ3MxJywgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSBhcyBUZW5zb3IpXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgTm9kZSB0eXBlICR7bm9kZS5vcH0gaXMgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IENBVEVHT1JZID0gJ3RyYW5zZm9ybWF0aW9uJztcbiJdfQ==","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as tfc from '@tensorflow/tfjs-core';\nimport { NodeValueImpl } from './custom_op/node_value_impl';\nimport { getRegisteredOp } from './custom_op/register';\nimport * as arithmetic from './executors/arithmetic_executor';\nimport * as basicMath from './executors/basic_math_executor';\nimport * as control from './executors/control_executor';\nimport * as convolution from './executors/convolution_executor';\nimport * as creation from './executors/creation_executor';\nimport * as dynamic from './executors/dynamic_executor';\nimport * as evaluation from './executors/evaluation_executor';\nimport * as graph from './executors/graph_executor';\nimport * as hashTable from './executors/hash_table_executor';\nimport * as image from './executors/image_executor';\nimport * as logical from './executors/logical_executor';\nimport * as matrices from './executors/matrices_executor';\nimport * as normalization from './executors/normalization_executor';\nimport * as ragged from './executors/ragged_executor';\nimport * as reduction from './executors/reduction_executor';\nimport * as sliceJoin from './executors/slice_join_executor';\nimport * as sparse from './executors/sparse_executor';\nimport * as spectral from './executors/spectral_executor';\nimport * as string from './executors/string_executor';\nimport * as transformation from './executors/transformation_executor';\n/**\n * Executes the op defined by the node object.\n * @param node\n * @param tensorMap contains tensors for executed nodes and weights\n * @param context contains tensors and information for running the current node.\n * @param resourceManager Optional. Contains global resources of the model.\n */\nexport function executeOp(node, tensorMap, context, resourceManager, tidy = tfc.tidy) {\n const value = ((node, tensorMap, context) => {\n switch (node.category) {\n case 'arithmetic':\n return tidy(() => arithmetic.executeOp(node, tensorMap, context));\n case 'basic_math':\n return tidy(() => basicMath.executeOp(node, tensorMap, context));\n case 'control':\n return control.executeOp(node, tensorMap, context);\n case 'convolution':\n return tidy(() => convolution.executeOp(node, tensorMap, context));\n case 'creation':\n return tidy(() => creation.executeOp(node, tensorMap, context));\n case 'dynamic':\n return dynamic.executeOp(node, tensorMap, context);\n case 'evaluation':\n return tidy(() => evaluation.executeOp(node, tensorMap, context));\n case 'image':\n return tidy(() => image.executeOp(node, tensorMap, context));\n case 'graph':\n return tidy(() => graph.executeOp(node, tensorMap, context));\n case 'logical':\n return tidy(() => logical.executeOp(node, tensorMap, context));\n case 'matrices':\n return tidy(() => matrices.executeOp(node, tensorMap, context));\n case 'normalization':\n return tidy(() => normalization.executeOp(node, tensorMap, context));\n case 'ragged':\n return tidy(() => ragged.executeOp(node, tensorMap, context));\n case 'reduction':\n return tidy(() => reduction.executeOp(node, tensorMap, context));\n case 'slice_join':\n return tidy(() => sliceJoin.executeOp(node, tensorMap, context));\n case 'sparse':\n return tidy(() => sparse.executeOp(node, tensorMap, context));\n case 'spectral':\n return tidy(() => spectral.executeOp(node, tensorMap, context));\n case 'string':\n return tidy(() => string.executeOp(node, tensorMap, context));\n case 'transformation':\n return tidy(() => transformation.executeOp(node, tensorMap, context));\n case 'hash_table':\n return hashTable.executeOp(node, tensorMap, context, resourceManager);\n case 'custom':\n const opMapper = getRegisteredOp(node.op);\n if (opMapper && opMapper.customExecutor) {\n return opMapper.customExecutor(new NodeValueImpl(node, tensorMap, context));\n }\n else {\n throw TypeError(`Custom op ${node.op} is not registered.`);\n }\n default:\n throw TypeError(`Unknown op '${node.op}'. File an issue at ` +\n `https://github.com/tensorflow/tfjs/issues so we can add it` +\n `, or register a custom execution with tf.registerOp()`);\n }\n })(node, tensorMap, context);\n if (tfc.util.isPromise(value)) {\n return value.then((data) => [].concat(data));\n }\n return [].concat(value);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uX2V4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1jb252ZXJ0ZXIvc3JjL29wZXJhdGlvbnMvb3BlcmF0aW9uX2V4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sdUJBQXVCLENBQUM7QUFNN0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sS0FBSyxTQUFTLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxLQUFLLE9BQU8sTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEtBQUssV0FBVyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxRQUFRLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxLQUFLLE9BQU8sTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sS0FBSyxLQUFLLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEtBQUssS0FBSyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxPQUFPLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxLQUFLLFFBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEtBQUssYUFBYSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxNQUFNLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxLQUFLLFNBQVMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEtBQUss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SSxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNsRDtxQkFBTTtvQkFDTCxNQUFNLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7aUJBQzVEO1lBQ0g7Z0JBQ0UsTUFBTSxTQUFTLENBQ1gsZUFBZSxJQUFJLENBQUMsRUFBRSxzQkFBc0I7b0JBQzVDLDREQUE0RDtvQkFDNUQsdURBQXVELENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM5QztJQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQgKiBhcyB0ZmMgZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXB9IGZyb20gJy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0fSBmcm9tICcuLi9leGVjdXRvci9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSAnLi4vZXhlY3V0b3IvcmVzb3VyY2VfbWFuYWdlcic7XG5cbmltcG9ydCB7Tm9kZVZhbHVlSW1wbH0gZnJvbSAnLi9jdXN0b21fb3Avbm9kZV92YWx1ZV9pbXBsJztcbmltcG9ydCB7Z2V0UmVnaXN0ZXJlZE9wfSBmcm9tICcuL2N1c3RvbV9vcC9yZWdpc3Rlcic7XG5pbXBvcnQgKiBhcyBhcml0aG1ldGljIGZyb20gJy4vZXhlY3V0b3JzL2FyaXRobWV0aWNfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgYmFzaWNNYXRoIGZyb20gJy4vZXhlY3V0b3JzL2Jhc2ljX21hdGhfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgY29udHJvbCBmcm9tICcuL2V4ZWN1dG9ycy9jb250cm9sX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGNvbnZvbHV0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2NvbnZvbHV0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGNyZWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2NyZWF0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIGR5bmFtaWMgZnJvbSAnLi9leGVjdXRvcnMvZHluYW1pY19leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBldmFsdWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL2V2YWx1YXRpb25fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgZ3JhcGggZnJvbSAnLi9leGVjdXRvcnMvZ3JhcGhfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgaGFzaFRhYmxlIGZyb20gJy4vZXhlY3V0b3JzL2hhc2hfdGFibGVfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgaW1hZ2UgZnJvbSAnLi9leGVjdXRvcnMvaW1hZ2VfZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgbG9naWNhbCBmcm9tICcuL2V4ZWN1dG9ycy9sb2dpY2FsX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIG1hdHJpY2VzIGZyb20gJy4vZXhlY3V0b3JzL21hdHJpY2VzX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIG5vcm1hbGl6YXRpb24gZnJvbSAnLi9leGVjdXRvcnMvbm9ybWFsaXphdGlvbl9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyByYWdnZWQgZnJvbSAnLi9leGVjdXRvcnMvcmFnZ2VkX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIHJlZHVjdGlvbiBmcm9tICcuL2V4ZWN1dG9ycy9yZWR1Y3Rpb25fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgc2xpY2VKb2luIGZyb20gJy4vZXhlY3V0b3JzL3NsaWNlX2pvaW5fZXhlY3V0b3InO1xuaW1wb3J0ICogYXMgc3BhcnNlIGZyb20gJy4vZXhlY3V0b3JzL3NwYXJzZV9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBzcGVjdHJhbCBmcm9tICcuL2V4ZWN1dG9ycy9zcGVjdHJhbF9leGVjdXRvcic7XG5pbXBvcnQgKiBhcyBzdHJpbmcgZnJvbSAnLi9leGVjdXRvcnMvc3RyaW5nX2V4ZWN1dG9yJztcbmltcG9ydCAqIGFzIHRyYW5zZm9ybWF0aW9uIGZyb20gJy4vZXhlY3V0b3JzL3RyYW5zZm9ybWF0aW9uX2V4ZWN1dG9yJztcbmltcG9ydCB7Tm9kZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIG9wIGRlZmluZWQgYnkgdGhlIG5vZGUgb2JqZWN0LlxuICogQHBhcmFtIG5vZGVcbiAqIEBwYXJhbSB0ZW5zb3JNYXAgY29udGFpbnMgdGVuc29ycyBmb3IgZXhlY3V0ZWQgbm9kZXMgYW5kIHdlaWdodHNcbiAqIEBwYXJhbSBjb250ZXh0IGNvbnRhaW5zIHRlbnNvcnMgYW5kIGluZm9ybWF0aW9uIGZvciBydW5uaW5nIHRoZSBjdXJyZW50IG5vZGUuXG4gKiBAcGFyYW0gcmVzb3VyY2VNYW5hZ2VyIE9wdGlvbmFsLiBDb250YWlucyBnbG9iYWwgcmVzb3VyY2VzIG9mIHRoZSBtb2RlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVPcChcbiAgICBub2RlOiBOb2RlLCB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCxcbiAgICByZXNvdXJjZU1hbmFnZXI/OiBSZXNvdXJjZU1hbmFnZXIsIHRpZHkgPSB0ZmMudGlkeSk6IHRmYy5UZW5zb3JbXXxcbiAgICBQcm9taXNlPHRmYy5UZW5zb3JbXT4ge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgICAoKG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSA9PiB7XG4gICAgICAgIHN3aXRjaCAobm9kZS5jYXRlZ29yeSkge1xuICAgICAgICAgIGNhc2UgJ2FyaXRobWV0aWMnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gYXJpdGhtZXRpYy5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnYmFzaWNfbWF0aCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiBiYXNpY01hdGguZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2NvbnRyb2wnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICAgICAgY2FzZSAnY29udm9sdXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gY29udm9sdXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2NyZWF0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGNyZWF0aW9uLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdkeW5hbWljJzpcbiAgICAgICAgICAgIHJldHVybiBkeW5hbWljLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgIGNhc2UgJ2V2YWx1YXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gZXZhbHVhdGlvbi5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gaW1hZ2UuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2dyYXBoJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGdyYXBoLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IGxvZ2ljYWwuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ21hdHJpY2VzJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IG1hdHJpY2VzLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdub3JtYWxpemF0aW9uJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KFxuICAgICAgICAgICAgICAgICgpID0+IG5vcm1hbGl6YXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3JhZ2dlZCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiByYWdnZWQuZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3JlZHVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiByZWR1Y3Rpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ3NsaWNlX2pvaW4nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gc2xpY2VKb2luLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdzcGFyc2UnOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoKCkgPT4gc3BhcnNlLmV4ZWN1dGVPcChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICBjYXNlICdzcGVjdHJhbCc6XG4gICAgICAgICAgICByZXR1cm4gdGlkeSgoKSA9PiBzcGVjdHJhbC5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiB0aWR5KCgpID0+IHN0cmluZy5leGVjdXRlT3Aobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KSk7XG4gICAgICAgICAgY2FzZSAndHJhbnNmb3JtYXRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHRpZHkoXG4gICAgICAgICAgICAgICAgKCkgPT4gdHJhbnNmb3JtYXRpb24uZXhlY3V0ZU9wKG5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpO1xuICAgICAgICAgIGNhc2UgJ2hhc2hfdGFibGUnOlxuICAgICAgICAgICAgcmV0dXJuIGhhc2hUYWJsZS5leGVjdXRlT3AoXG4gICAgICAgICAgICAgICAgbm9kZSwgdGVuc29yTWFwLCBjb250ZXh0LCByZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgICAgICBjb25zdCBvcE1hcHBlciA9IGdldFJlZ2lzdGVyZWRPcChub2RlLm9wKTtcbiAgICAgICAgICAgIGlmIChvcE1hcHBlciAmJiBvcE1hcHBlci5jdXN0b21FeGVjdXRvcikge1xuICAgICAgICAgICAgICByZXR1cm4gb3BNYXBwZXIuY3VzdG9tRXhlY3V0b3IoXG4gICAgICAgICAgICAgICAgICBuZXcgTm9kZVZhbHVlSW1wbChub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihgQ3VzdG9tIG9wICR7bm9kZS5vcH0gaXMgbm90IHJlZ2lzdGVyZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5rbm93biBvcCAnJHtub2RlLm9wfScuIEZpbGUgYW4gaXNzdWUgYXQgYCArXG4gICAgICAgICAgICAgICAgYGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RmanMvaXNzdWVzIHNvIHdlIGNhbiBhZGQgaXRgICtcbiAgICAgICAgICAgICAgICBgLCBvciByZWdpc3RlciBhIGN1c3RvbSBleGVjdXRpb24gd2l0aCB0Zi5yZWdpc3Rlck9wKClgKTtcbiAgICAgICAgfVxuICAgICAgfSkobm9kZSwgdGVuc29yTWFwLCBjb250ZXh0KTtcbiAgaWYgKHRmYy51dGlsLmlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudGhlbigoZGF0YSkgPT4gW10uY29uY2F0KGRhdGEpKTtcbiAgfVxuICByZXR1cm4gW10uY29uY2F0KHZhbHVlKTtcbn1cbiJdfQ==","/**\n * ExecutionContext captures the runtime environment of the node. It keeps\n * track of the current frame and iteration for the control flow ops.\n *\n * For example, typical Dynamic RNN model may contain loops, for which\n * TensorFlow will generate graphs with Enter/Exit nodes to control the\n * current execution frame, and NextIteration Nodes for iteration id increment.\n * For model with branch logic, TensorFLow will generate Switch/Merge ops.\n */\nexport class ExecutionContext {\n constructor(weightMap = {}, tensorArrayMap = {}, tensorListMap = {}, functionMap = {}, parseNodeNameCache) {\n this.weightMap = weightMap;\n this.tensorArrayMap = tensorArrayMap;\n this.tensorListMap = tensorListMap;\n this.functionMap = functionMap;\n this.parseNodeNameCache = parseNodeNameCache;\n this.rootContext = { id: 0, frameName: '', iterationId: 0 };\n this.contexts = [this.rootContext];\n this.lastId = 0;\n this.generateCurrentContextIds();\n }\n newFrame(id, frameName) {\n return { id, frameName, iterationId: 0 };\n }\n /**\n * Set the current context\n * @param contexts: ExecutionContextInfo[] the current path of execution\n * frames\n */\n set currentContext(contexts) {\n if (this.contexts !== contexts) {\n this.contexts = contexts;\n this.generateCurrentContextIds();\n }\n }\n get currentContext() {\n return this.contexts;\n }\n /**\n * Returns the current context in string format.\n */\n get currentContextId() {\n return this._currentContextIds[0];\n }\n /**\n * Returns the current context and all parent contexts in string format.\n * This allow access to the nodes in the current and parent frames.\n */\n get currentContextIds() {\n return this._currentContextIds;\n }\n generateCurrentContextIds() {\n const names = [];\n for (let i = 0; i < this.contexts.length - 1; i++) {\n const contexts = this.contexts.slice(0, this.contexts.length - i);\n names.push(this.contextIdforContexts(contexts));\n }\n names.push('');\n this._currentContextIds = names;\n }\n contextIdforContexts(contexts) {\n return contexts ?\n contexts\n .map(context => (context.id === 0 && context.iterationId === 0) ?\n '' :\n `${context.frameName}-${context.iterationId}`)\n .join('/') :\n '';\n }\n /**\n * Enter a new frame, a new context is pushed on the current context list.\n * @param frameId new frame id\n */\n enterFrame(frameId) {\n if (this.contexts) {\n this.lastId++;\n this.contexts = this.contexts.slice();\n this.contexts.push(this.newFrame(this.lastId, frameId));\n this._currentContextIds.unshift(this.contextIdforContexts(this.contexts));\n }\n }\n /**\n * Exit the current frame, the last context is removed from the current\n * context list.\n */\n exitFrame() {\n if (this.contexts && this.contexts.length > 1) {\n this.contexts = this.contexts.slice();\n this.contexts.splice(-1);\n this.currentContextIds.shift();\n }\n else {\n throw new Error('Cannot exit frame, the context is empty');\n }\n }\n /**\n * Enter the next iteration of a loop, the iteration id of last context is\n * increased.\n */\n nextIteration() {\n if (this.contexts && this.contexts.length > 0) {\n this.contexts = this.contexts.slice();\n this.lastId++;\n const context = Object.assign({}, this.contexts[this.contexts.length - 1]);\n context.iterationId += 1;\n context.id = this.lastId;\n this.contexts.splice(-1, 1, context);\n this._currentContextIds.splice(0, 1, this.contextIdforContexts(this.contexts));\n }\n else {\n throw new Error('Cannot increase frame iteration, the context is empty');\n }\n }\n getWeight(name) {\n return this.weightMap[name];\n }\n addTensorArray(tensorArray) {\n this.tensorArrayMap[tensorArray.id] = tensorArray;\n }\n getTensorArray(id) {\n return this.tensorArrayMap[id];\n }\n addTensorList(tensorList) {\n this.tensorListMap[tensorList.id] = tensorList;\n }\n getTensorList(id) {\n return this.tensorListMap[id];\n }\n dispose(keepIds) {\n for (const key in this.tensorArrayMap) {\n this.tensorArrayMap[key].clearAndClose(keepIds);\n }\n for (const key in this.tensorListMap) {\n this.tensorListMap[key].clearAndClose(keepIds);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZXhlY3V0aW9uX2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0JBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUNhLFlBQTZCLEVBQUUsRUFDL0IsaUJBQWlDLEVBQUUsRUFDbkMsZ0JBQStCLEVBQUUsRUFDakMsY0FBaUQsRUFBRSxFQUNuRCxrQkFBMkQ7UUFKM0QsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQXFCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFvQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBd0M7UUFDbkQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF5QztRQVZoRSxnQkFBVyxHQUFHLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUNyRCxhQUFRLEdBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELFdBQU0sR0FBRyxDQUFDLENBQUM7UUFTakIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLFFBQVEsQ0FBQyxFQUFVLEVBQUUsU0FBaUI7UUFDNUMsT0FBTyxFQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxjQUFjLENBQUMsUUFBZ0M7UUFDakQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNsQztJQUNI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b0I7UUFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtUZW5zb3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TmFtZWRUZW5zb3JzTWFwLCBUZW5zb3JBcnJheU1hcCwgVGVuc29yTGlzdE1hcH0gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5cbmltcG9ydCB7VGVuc29yQXJyYXl9IGZyb20gJy4vdGVuc29yX2FycmF5JztcbmltcG9ydCB7VGVuc29yTGlzdH0gZnJvbSAnLi90ZW5zb3JfbGlzdCc7XG5pbXBvcnQge0Z1bmN0aW9uRXhlY3V0b3J9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkNvbnRleHRJbmZvIHtcbiAgaWQ6IG51bWJlcjsgICAgICAgICAgIC8vIHRoZSB1bmlxdWUgaWQgb2YgdGhlIGNvbnRleHQgaW5mb1xuICBmcmFtZU5hbWU6IHN0cmluZzsgICAgLy8gVGhlIGZyYW1lIG5hbWUgb2YgdGhlIGxvb3AsIHRoaXMgY29tZXMgZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFRlbnNvckZsb3cgTm9kZURlZi5cbiAgaXRlcmF0aW9uSWQ6IG51bWJlcjsgIC8vIFRoZSBpdGVyYXRpb24gaWQgb2YgdGhlIGxvb3Bcbn1cblxuLyoqXG4gKiBFeGVjdXRpb25Db250ZXh0IGNhcHR1cmVzIHRoZSBydW50aW1lIGVudmlyb25tZW50IG9mIHRoZSBub2RlLiBJdCBrZWVwc1xuICogdHJhY2sgb2YgdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGl0ZXJhdGlvbiBmb3IgdGhlIGNvbnRyb2wgZmxvdyBvcHMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHR5cGljYWwgRHluYW1pYyBSTk4gbW9kZWwgbWF5IGNvbnRhaW4gbG9vcHMsIGZvciB3aGljaFxuICogVGVuc29yRmxvdyB3aWxsIGdlbmVyYXRlIGdyYXBocyB3aXRoIEVudGVyL0V4aXQgbm9kZXMgdG8gY29udHJvbCB0aGVcbiAqIGN1cnJlbnQgZXhlY3V0aW9uIGZyYW1lLCBhbmQgTmV4dEl0ZXJhdGlvbiBOb2RlcyBmb3IgaXRlcmF0aW9uIGlkIGluY3JlbWVudC5cbiAqIEZvciBtb2RlbCB3aXRoIGJyYW5jaCBsb2dpYywgVGVuc29yRkxvdyB3aWxsIGdlbmVyYXRlIFN3aXRjaC9NZXJnZSBvcHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25Db250ZXh0IHtcbiAgcHJpdmF0ZSByb290Q29udGV4dCA9IHtpZDogMCwgZnJhbWVOYW1lOiAnJywgaXRlcmF0aW9uSWQ6IDB9O1xuICBwcml2YXRlIGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdID0gW3RoaXMucm9vdENvbnRleHRdO1xuICBwcml2YXRlIGxhc3RJZCA9IDA7XG4gIHByaXZhdGUgX2N1cnJlbnRDb250ZXh0SWRzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IHdlaWdodE1hcDogTmFtZWRUZW5zb3JzTWFwID0ge30sXG4gICAgICByZWFkb25seSB0ZW5zb3JBcnJheU1hcDogVGVuc29yQXJyYXlNYXAgPSB7fSxcbiAgICAgIHJlYWRvbmx5IHRlbnNvckxpc3RNYXA6IFRlbnNvckxpc3RNYXAgPSB7fSxcbiAgICAgIHJlYWRvbmx5IGZ1bmN0aW9uTWFwOiB7W2tleTogc3RyaW5nXTogRnVuY3Rpb25FeGVjdXRvcn0gPSB7fSxcbiAgICAgIHJlYWRvbmx5IHBhcnNlTm9kZU5hbWVDYWNoZT86IE1hcDxzdHJpbmcsIFtzdHJpbmcsIG51bWJlciwgc3RyaW5nP10+KSB7XG4gICAgdGhpcy5nZW5lcmF0ZUN1cnJlbnRDb250ZXh0SWRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5ld0ZyYW1lKGlkOiBudW1iZXIsIGZyYW1lTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtpZCwgZnJhbWVOYW1lLCBpdGVyYXRpb25JZDogMH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGNvbnRleHRcbiAgICogQHBhcmFtIGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdIHRoZSBjdXJyZW50IHBhdGggb2YgZXhlY3V0aW9uXG4gICAqIGZyYW1lc1xuICAgKi9cbiAgc2V0IGN1cnJlbnRDb250ZXh0KGNvbnRleHRzOiBFeGVjdXRpb25Db250ZXh0SW5mb1tdKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMgIT09IGNvbnRleHRzKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gICAgICB0aGlzLmdlbmVyYXRlQ3VycmVudENvbnRleHRJZHMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudENvbnRleHQoKTogRXhlY3V0aW9uQ29udGV4dEluZm9bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBjb250ZXh0IGluIHN0cmluZyBmb3JtYXQuXG4gICAqL1xuICBnZXQgY3VycmVudENvbnRleHRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q29udGV4dElkc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIGFsbCBwYXJlbnQgY29udGV4dHMgaW4gc3RyaW5nIGZvcm1hdC5cbiAgICogVGhpcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG5vZGVzIGluIHRoZSBjdXJyZW50IGFuZCBwYXJlbnQgZnJhbWVzLlxuICAgKi9cbiAgZ2V0IGN1cnJlbnRDb250ZXh0SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbnRleHRJZHM7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ3VycmVudENvbnRleHRJZHMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGV4dHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuY29udGV4dHMuc2xpY2UoMCwgdGhpcy5jb250ZXh0cy5sZW5ndGggLSBpKTtcbiAgICAgIG5hbWVzLnB1c2godGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyhjb250ZXh0cykpO1xuICAgIH1cbiAgICBuYW1lcy5wdXNoKCcnKTtcbiAgICB0aGlzLl9jdXJyZW50Q29udGV4dElkcyA9IG5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250ZXh0SWRmb3JDb250ZXh0cyhjb250ZXh0czogRXhlY3V0aW9uQ29udGV4dEluZm9bXSkge1xuICAgIHJldHVybiBjb250ZXh0cyA/XG4gICAgICAgIGNvbnRleHRzXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIGNvbnRleHQgPT4gKGNvbnRleHQuaWQgPT09IDAgJiYgY29udGV4dC5pdGVyYXRpb25JZCA9PT0gMCkgP1xuICAgICAgICAgICAgICAgICAgICAnJyA6XG4gICAgICAgICAgICAgICAgICAgIGAke2NvbnRleHQuZnJhbWVOYW1lfS0ke2NvbnRleHQuaXRlcmF0aW9uSWR9YClcbiAgICAgICAgICAgIC5qb2luKCcvJykgOlxuICAgICAgICAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRlciBhIG5ldyBmcmFtZSwgYSBuZXcgY29udGV4dCBpcyBwdXNoZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBsaXN0LlxuICAgKiBAcGFyYW0gZnJhbWVJZCBuZXcgZnJhbWUgaWRcbiAgICovXG4gIGVudGVyRnJhbWUoZnJhbWVJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMpIHtcbiAgICAgIHRoaXMubGFzdElkKys7XG4gICAgICB0aGlzLmNvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSgpO1xuICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKHRoaXMubmV3RnJhbWUodGhpcy5sYXN0SWQsIGZyYW1lSWQpKTtcbiAgICAgIHRoaXMuX2N1cnJlbnRDb250ZXh0SWRzLnVuc2hpZnQodGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyh0aGlzLmNvbnRleHRzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4aXQgdGhlIGN1cnJlbnQgZnJhbWUsIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjdXJyZW50XG4gICAqIGNvbnRleHQgbGlzdC5cbiAgICovXG4gIGV4aXRGcmFtZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0cyAmJiB0aGlzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY29udGV4dHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKCk7XG4gICAgICB0aGlzLmNvbnRleHRzLnNwbGljZSgtMSk7XG4gICAgICB0aGlzLmN1cnJlbnRDb250ZXh0SWRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4aXQgZnJhbWUsIHRoZSBjb250ZXh0IGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVudGVyIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiBhIGxvb3AsIHRoZSBpdGVyYXRpb24gaWQgb2YgbGFzdCBjb250ZXh0IGlzXG4gICAqIGluY3JlYXNlZC5cbiAgICovXG4gIG5leHRJdGVyYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dHMgJiYgdGhpcy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gdGhpcy5jb250ZXh0cy5zbGljZSgpO1xuICAgICAgdGhpcy5sYXN0SWQrKztcbiAgICAgIGNvbnN0IGNvbnRleHQgPVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udGV4dHNbdGhpcy5jb250ZXh0cy5sZW5ndGggLSAxXSk7XG4gICAgICBjb250ZXh0Lml0ZXJhdGlvbklkICs9IDE7XG4gICAgICBjb250ZXh0LmlkID0gdGhpcy5sYXN0SWQ7XG4gICAgICB0aGlzLmNvbnRleHRzLnNwbGljZSgtMSwgMSwgY29udGV4dCk7XG4gICAgICB0aGlzLl9jdXJyZW50Q29udGV4dElkcy5zcGxpY2UoXG4gICAgICAgICAgMCwgMSwgdGhpcy5jb250ZXh0SWRmb3JDb250ZXh0cyh0aGlzLmNvbnRleHRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGluY3JlYXNlIGZyYW1lIGl0ZXJhdGlvbiwgdGhlIGNvbnRleHQgaXMgZW1wdHknKTtcbiAgICB9XG4gIH1cblxuICBnZXRXZWlnaHQobmFtZTogc3RyaW5nKTogVGVuc29yW10ge1xuICAgIHJldHVybiB0aGlzLndlaWdodE1hcFtuYW1lXTtcbiAgfVxuXG4gIGFkZFRlbnNvckFycmF5KHRlbnNvckFycmF5OiBUZW5zb3JBcnJheSkge1xuICAgIHRoaXMudGVuc29yQXJyYXlNYXBbdGVuc29yQXJyYXkuaWRdID0gdGVuc29yQXJyYXk7XG4gIH1cblxuICBnZXRUZW5zb3JBcnJheShpZDogbnVtYmVyKTogVGVuc29yQXJyYXkge1xuICAgIHJldHVybiB0aGlzLnRlbnNvckFycmF5TWFwW2lkXTtcbiAgfVxuXG4gIGFkZFRlbnNvckxpc3QodGVuc29yTGlzdDogVGVuc29yTGlzdCkge1xuICAgIHRoaXMudGVuc29yTGlzdE1hcFt0ZW5zb3JMaXN0LmlkXSA9IHRlbnNvckxpc3Q7XG4gIH1cblxuICBnZXRUZW5zb3JMaXN0KGlkOiBudW1iZXIpOiBUZW5zb3JMaXN0IHtcbiAgICByZXR1cm4gdGhpcy50ZW5zb3JMaXN0TWFwW2lkXTtcbiAgfVxuXG4gIGRpc3Bvc2Uoa2VlcElkczogU2V0PG51bWJlcj4pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbnNvckFycmF5TWFwKSB7XG4gICAgICB0aGlzLnRlbnNvckFycmF5TWFwW2tleV0uY2xlYXJBbmRDbG9zZShrZWVwSWRzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbnNvckxpc3RNYXApIHtcbiAgICAgIHRoaXMudGVuc29yTGlzdE1hcFtrZXldLmNsZWFyQW5kQ2xvc2Uoa2VlcElkcyk7XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { parseNodeName } from '../operations/executors/utils';\n/**\n * Given graph inputs and desired outputs, find the minimal set of nodes\n * to execute in order to compute the outputs. In addition return other useful\n * info such:\n * - Missing inputs needed to compute the output.\n * - Whether the subgraph contains dynamic ops (control flow, dynamic shape).\n * - Alternative inputs in order to avoid async (dynamic op) execution.\n */\nexport function getExecutionSubgraph(inputs, outputs, weightMap, initNodes) {\n const usedNodes = new Set();\n const missingInputs = [];\n let dynamicNode = null;\n let syncInputs = null;\n // Start with the outputs, going backwards and find all the nodes that are\n // needed to compute those outputs.\n const seen = new Set();\n const inputNodeNames = new Set(Object.keys(inputs).map((name) => parseNodeName(name)[0]));\n initNodes = initNodes || [];\n const initNodeNames = new Set(initNodes.map((node) => parseNodeName(node.name)[0]));\n const frontier = [...outputs];\n while (frontier.length > 0) {\n const node = frontier.pop();\n if (isControlFlow(node) || isDynamicShape(node) || isHashTable(node)) {\n if (dynamicNode == null) {\n dynamicNode = node;\n syncInputs = dynamicNode.children.map(child => child.name)\n .filter(name => usedNodes.has(name));\n }\n }\n usedNodes.add(node.name);\n // Weights are dead end since we already have their values.\n if (weightMap[node.name] != null) {\n continue;\n }\n // This node is a dead end since it's one of the user-provided inputs.\n if (inputNodeNames.has(node.name)) {\n continue;\n }\n // This node is a dead end since it doesn't have any inputs.\n if (initNodeNames.has(node.name)) {\n continue;\n }\n if (node.inputs.length === 0) {\n missingInputs.push(node.name);\n continue;\n }\n node.inputs.forEach(input => {\n // Don't add to the frontier if it is already there.\n if (seen.has(input.name)) {\n return;\n }\n seen.add(input.name);\n frontier.push(input);\n });\n }\n return { inputs, outputs, usedNodes, missingInputs, dynamicNode, syncInputs };\n}\n/**\n * Given the execution info, return a list of nodes in topological order that\n * need to be executed to compute the output.\n */\nexport function getNodesInTopologicalOrder(graph, executionInfo) {\n const { usedNodes, inputs } = executionInfo;\n const inputNodes = Object.keys(inputs)\n .map(name => parseNodeName(name)[0])\n .map(name => graph.nodes[name]);\n const initNodes = graph.initNodes || [];\n const isUsed = (node) => usedNodes.has(typeof node === 'string' ? node : node.name);\n function unique(nodes) {\n return [...new Map(nodes.map((node) => [node.name, node])).values()];\n }\n const predefinedNodes = unique([\n ...inputNodes,\n ...graph.weights,\n ...initNodes,\n ]).filter(isUsed);\n const allNodes = unique([\n ...predefinedNodes,\n ...Object.values(graph.nodes),\n ]).filter(isUsed);\n const nameToNode = new Map(allNodes.map((node) => [node.name, node]));\n const inCounts = {};\n for (const node of allNodes) {\n inCounts[node.name] = inCounts[node.name] || 0;\n for (const child of node.children) {\n // When the child is unused, set in counts to infinity so that it will\n // never be decreased to 0 and added to the execution list.\n if (!isUsed(child)) {\n inCounts[child.name] = Number.POSITIVE_INFINITY;\n }\n inCounts[child.name] = (inCounts[child.name] || 0) + 1;\n }\n }\n // Build execution order for all used nodes regardless whether they are\n // predefined or not.\n const frontier = Object.entries(inCounts)\n .filter(([, inCount]) => inCount === 0)\n .map(([name]) => name);\n const orderedNodeNames = [...frontier];\n while (frontier.length > 0) {\n const nodeName = frontier.pop();\n const node = nameToNode.get(nodeName);\n for (const child of node.children.filter(isUsed)) {\n if (--inCounts[child.name] === 0) {\n orderedNodeNames.push(child.name);\n frontier.push(child.name);\n }\n }\n }\n const orderedNodes = orderedNodeNames.map((name) => nameToNode.get(name));\n const filteredOrderedNodes = filterPredefinedReachableNodes(orderedNodes, predefinedNodes);\n // TODO: Turn validation on/off with tf env flag.\n validateNodesExecutionOrder(filteredOrderedNodes, predefinedNodes);\n return filteredOrderedNodes;\n}\n/**\n * This is a helper function of `getNodesInTopologicalOrder`.\n * Returns ordered nodes reachable by at least one predefined node.\n * This can help us filter out redundant nodes from the returned node list.\n * For example:\n * If we have four nodes with dependencies like this:\n * a --> b --> c --> d\n * when node `c` is predefined (e.g. given as an input tensor), we can\n * skip node `a` and `b` since their outputs will never be used.\n *\n * @param orderedNodes Graph nodes in execution order.\n * @param predefinedNodes Graph inputs, weights, and init nodes. Nodes in this\n * list must have distinct names.\n */\nfunction filterPredefinedReachableNodes(orderedNodes, predefinedNodes) {\n const nameToNode = new Map(orderedNodes.map((node) => [node.name, node]));\n // TODO: Filter out more nodes when >=2 nodes are predefined in a path.\n const stack = predefinedNodes.map((node) => node.name);\n const predefinedReachableNodeNames = new Set(stack);\n // Perform a DFS starting from the set of all predefined nodes\n // to find the set of all nodes reachable from the predefined nodes.\n while (stack.length > 0) {\n const nodeName = stack.pop();\n const node = nameToNode.get(nodeName);\n for (const child of node.children) {\n if (!nameToNode.has(child.name) ||\n predefinedReachableNodeNames.has(child.name)) {\n continue;\n }\n predefinedReachableNodeNames.add(child.name);\n stack.push(child.name);\n }\n }\n // Filter out unreachable nodes and build the ordered node list.\n const filteredOrderedNodes = orderedNodes.filter((node) => predefinedReachableNodeNames.has(node.name));\n return filteredOrderedNodes;\n}\nclass NodesExecutionOrderError extends Error {\n constructor(message) {\n super(`NodesExecutionOrderError: ${message}`);\n }\n}\n/**\n * This is a helper function of `getNodesInTopologicalOrder`.\n * Validates property: given nodes `a` and `b`, Order(a) > Order(b) if `a`\n * is a child of `b`. This function throws an error if validation fails.\n *\n * @param orderedNodes Graph nodes in execution order.\n * @param predefinedNodes Graph inputs, weights, and init nodes. Nodes in this\n * list must have distinct names.\n */\nfunction validateNodesExecutionOrder(orderedNodes, predefinedNodes) {\n const nodeNameToOrder = new Map(orderedNodes.map((node, order) => [node.name, order]));\n const predefinedNodeNames = new Set(predefinedNodes.map((node) => node.name));\n const isPredefined = (node) => predefinedNodeNames.has(typeof node === 'string' ? node : node.name);\n const willBeExecutedNodeNames = new Set(orderedNodes.map((node) => node.name));\n const willBeExecuted = (node) => willBeExecutedNodeNames.has(typeof node === 'string' ? node : node.name);\n for (const node of orderedNodes) {\n for (const child of node.children.filter(willBeExecuted)) {\n if (!nodeNameToOrder.has(child.name)) {\n throw new NodesExecutionOrderError(`Child ${child.name} of node ${node.name} is unreachable.`);\n }\n if (nodeNameToOrder.get(node.name) > nodeNameToOrder.get(child.name)) {\n throw new NodesExecutionOrderError(`Node ${node.name} is scheduled to run after its child ${child.name}.`);\n }\n }\n if (!isPredefined(node)) {\n for (const input of node.inputs) {\n if (!nodeNameToOrder.has(input.name)) {\n throw new NodesExecutionOrderError(`Input ${input.name} of node ${node.name} is unreachable.`);\n }\n if (nodeNameToOrder.get(input.name) > nodeNameToOrder.get(node.name)) {\n throw new NodesExecutionOrderError(`Node ${node.name} is scheduled to run before its input ${input.name}.`);\n }\n }\n }\n }\n}\n/**\n * Given the execution info, return a map from node name to the disposable\n * node name list after its execution.\n *\n * @returns A map from node name to disposable nodes after its\n * execution. That is, for a node `x`, `nodeLiveUntilMap[x]` indicates\n * all nodes which their intermediate tensors should be disposed after `x`\n * being executed.\n */\nexport function getNodeLiveUntilMap(orderedNodes) {\n const nodeNameToOrder = new Map(orderedNodes.map((node, order) => [node.name, order]));\n const INF_LIFE = Number.MAX_SAFE_INTEGER;\n // Make control flow nodes (and consequently their direct parents)\n // live forever since they're tricky to track correctly.\n const selfLifespans = orderedNodes.map((node, nodeOrder) => isControlFlow(node) ? INF_LIFE : nodeOrder);\n const getSelfLifeSpan = (node) => {\n const selfLife = selfLifespans[nodeNameToOrder.get(node.name)];\n if (selfLife == null) {\n // If nodeToOrder does not contain the node, it is unused or\n // unreachable in graph.\n return -1;\n }\n return selfLife;\n };\n // `liveUntil[i]` points to the last node in the `orderedNodes` array that\n // may depend on tensors from node `i`. It indicates that all the\n // intermediate tensors from `orderedNodes[i]` should be disposed after\n // `orderedNodes[liveUntil[i]]` is executed.\n // A node lives long enough to pass on its tensors to its children.\n // It lives until at least `max(node's position, children's positions)`.\n const liveUntilOrders = orderedNodes.map((node, nodeOrder) => {\n return node.children.map(getSelfLifeSpan)\n .reduce((a, b) => Math.max(a, b), selfLifespans[nodeOrder]);\n });\n // liveUntilMap:\n // - Key: Name of a node `x`\n // - Values: All nodes whose intermediate tensors should be disposed\n // after `x` is executed.\n const liveUntilMap = new Map();\n for (let nodeOrder = 0; nodeOrder < orderedNodes.length; ++nodeOrder) {\n const liveUntilOrder = liveUntilOrders[nodeOrder];\n if (liveUntilOrder === INF_LIFE) {\n continue;\n }\n const node = orderedNodes[nodeOrder];\n const liveUntilNode = orderedNodes[liveUntilOrder];\n if (!liveUntilMap.has(liveUntilNode.name)) {\n liveUntilMap.set(liveUntilNode.name, []);\n }\n liveUntilMap.get(liveUntilNode.name).push(node);\n }\n return liveUntilMap;\n}\nconst CONTROL_FLOW_OPS = new Set([\n 'Switch', 'Merge', 'Enter', 'Exit', 'NextIteration', 'StatelessIf',\n 'StatelessWhile', 'if', 'While'\n]);\nconst DYNAMIC_SHAPE_OPS = new Set([\n 'NonMaxSuppressionV2', 'NonMaxSuppressionV3', 'NonMaxSuppressionV5', 'Where'\n]);\nconst HASH_TABLE_OPS = new Set([\n 'HashTable', 'HashTableV2', 'LookupTableImport', 'LookupTableImportV2',\n 'LookupTableFind', 'LookupTableFindV2', 'LookupTableSize', 'LookupTableSizeV2'\n]);\nexport function isControlFlow(node) {\n return CONTROL_FLOW_OPS.has(node.op);\n}\nexport function isDynamicShape(node) {\n return DYNAMIC_SHAPE_OPS.has(node.op);\n}\nexport function isHashTable(node) {\n return HASH_TABLE_OPS.has(node.op);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxfYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvbW9kZWxfYW5hbHlzaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBWTVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2hDLE1BQXNCLEVBQUUsT0FBZSxFQUFFLFNBQTBCLEVBQ25FLFNBQWtCO0lBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQ25DLElBQUksV0FBVyxHQUFTLElBQUksQ0FBQztJQUM3QixJQUFJLFVBQVUsR0FBYSxJQUFJLENBQUM7SUFFaEMsMEVBQTBFO0lBQzFFLG1DQUFtQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sY0FBYyxHQUNoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RSxTQUFTLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUM1QixNQUFNLGFBQWEsR0FDZixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3ZCLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN2RDtTQUNGO1FBQ0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekIsMkRBQTJEO1FBQzNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDaEMsU0FBUztTQUNWO1FBQ0Qsc0VBQXNFO1FBQ3RFLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsU0FBUztTQUNWO1FBQ0QsNERBQTREO1FBQzVELElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsU0FBUztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsU0FBUztTQUNWO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsb0RBQW9EO1lBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3RDLEtBQVksRUFBRSxhQUE0QjtJQUM1QyxNQUFNLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxHQUFHLGFBQWEsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FDakMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9ELFNBQVMsTUFBTSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7UUFDTCxHQUFHLFVBQVU7UUFDYixHQUFHLEtBQUssQ0FBQyxPQUFPO1FBQ2hCLEdBQUcsU0FBUztLQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ0wsR0FBRyxlQUFlO1FBQ2xCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsTUFBTSxVQUFVLEdBQ1osSUFBSSxHQUFHLENBQWUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyRSxNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO0lBQzVDLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFO1FBQzNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pDLHNFQUFzRTtZQUN0RSwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7YUFDakQ7WUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEQ7S0FDRjtJQUVELHVFQUF1RTtJQUN2RSxxQkFBcUI7SUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1NBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRCxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7S0FDRjtJQUVELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sb0JBQW9CLEdBQ3RCLDhCQUE4QixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUVsRSxpREFBaUQ7SUFDakQsMkJBQTJCLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFbkUsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsOEJBQThCLENBQ25DLFlBQW9CLEVBQUUsZUFBdUI7SUFDL0MsTUFBTSxVQUFVLEdBQ1osSUFBSSxHQUFHLENBQWUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RSx1RUFBdUU7SUFDdkUsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsOERBQThEO0lBQzlELG9FQUFvRTtJQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDO1FBQ3ZDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUMzQiw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoRCxTQUFTO2FBQ1Y7WUFDRCw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7SUFFRCxnRUFBZ0U7SUFDaEUsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUM1QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTNELE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sd0JBQXlCLFNBQVEsS0FBSztJQUMxQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLDZCQUE2QixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUywyQkFBMkIsQ0FDaEMsWUFBb0IsRUFBRSxlQUF1QjtJQUMvQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FDM0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUN2QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxNQUFNLHVCQUF1QixHQUN6QixJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUN6Qyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtRQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxJQUFJLHdCQUF3QixDQUM5QixTQUFTLEtBQUssQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BFLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxRQUMvQixJQUFJLENBQUMsSUFBSSx3Q0FBd0MsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7YUFDckU7U0FDRjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sSUFBSSx3QkFBd0IsQ0FDOUIsU0FBUyxLQUFLLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7aUJBQ2pFO2dCQUNELElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3BFLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyxRQUMvQixJQUFJLENBQUMsSUFBSSx5Q0FBeUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7U0FDRjtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFlBQW9CO0lBQ3RELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUMzQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDekMsa0VBQWtFO0lBQ2xFLHdEQUF3RDtJQUN4RCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUNsQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRSxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNwQiw0REFBNEQ7WUFDNUQsd0JBQXdCO1lBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGLDBFQUEwRTtJQUMxRSxpRUFBaUU7SUFDakUsdUVBQXVFO0lBQ3ZFLDRDQUE0QztJQUM1QyxtRUFBbUU7SUFDbkUsd0VBQXdFO0lBQ3hFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDM0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7YUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBZ0I7SUFDaEIsNEJBQTRCO0lBQzVCLG9FQUFvRTtJQUNwRSxtQ0FBbUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDL0MsS0FBSyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUU7UUFDcEUsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRTtZQUMvQixTQUFTO1NBQ1Y7UUFDRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDMUM7UUFDRCxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEQ7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWE7SUFDbEUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE9BQU87Q0FDaEMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNoQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxPQUFPO0NBQzdFLENBQUMsQ0FBQztBQUNILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzdCLFdBQVcsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCO0lBQ3RFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQjtDQUMvRSxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVU7SUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVU7SUFDdkMsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVU7SUFDcEMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge05hbWVkVGVuc29yTWFwfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge05hbWVkVGVuc29yc01hcH0gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge3BhcnNlTm9kZU5hbWV9IGZyb20gJy4uL29wZXJhdGlvbnMvZXhlY3V0b3JzL3V0aWxzJztcbmltcG9ydCB7R3JhcGgsIE5vZGV9IGZyb20gJy4uL29wZXJhdGlvbnMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkluZm8ge1xuICBpbnB1dHM6IE5hbWVkVGVuc29yTWFwO1xuICBvdXRwdXRzOiBOb2RlW107XG4gIHVzZWROb2RlczogU2V0PHN0cmluZz47XG4gIG1pc3NpbmdJbnB1dHM6IHN0cmluZ1tdO1xuICBkeW5hbWljTm9kZTogTm9kZTtcbiAgc3luY0lucHV0czogc3RyaW5nW107XG59XG5cbi8qKlxuICogR2l2ZW4gZ3JhcGggaW5wdXRzIGFuZCBkZXNpcmVkIG91dHB1dHMsIGZpbmQgdGhlIG1pbmltYWwgc2V0IG9mIG5vZGVzXG4gKiB0byBleGVjdXRlIGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIG91dHB1dHMuIEluIGFkZGl0aW9uIHJldHVybiBvdGhlciB1c2VmdWxcbiAqIGluZm8gc3VjaDpcbiAqIC0gTWlzc2luZyBpbnB1dHMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlIG91dHB1dC5cbiAqIC0gV2hldGhlciB0aGUgc3ViZ3JhcGggY29udGFpbnMgZHluYW1pYyBvcHMgKGNvbnRyb2wgZmxvdywgZHluYW1pYyBzaGFwZSkuXG4gKiAtIEFsdGVybmF0aXZlIGlucHV0cyBpbiBvcmRlciB0byBhdm9pZCBhc3luYyAoZHluYW1pYyBvcCkgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhlY3V0aW9uU3ViZ3JhcGgoXG4gICAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0czogTm9kZVtdLCB3ZWlnaHRNYXA6IE5hbWVkVGVuc29yc01hcCxcbiAgICBpbml0Tm9kZXM/OiBOb2RlW10pOiBFeGVjdXRpb25JbmZvIHtcbiAgY29uc3QgdXNlZE5vZGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG1pc3NpbmdJbnB1dHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBkeW5hbWljTm9kZTogTm9kZSA9IG51bGw7XG4gIGxldCBzeW5jSW5wdXRzOiBzdHJpbmdbXSA9IG51bGw7XG5cbiAgLy8gU3RhcnQgd2l0aCB0aGUgb3V0cHV0cywgZ29pbmcgYmFja3dhcmRzIGFuZCBmaW5kIGFsbCB0aGUgbm9kZXMgdGhhdCBhcmVcbiAgLy8gbmVlZGVkIHRvIGNvbXB1dGUgdGhvc2Ugb3V0cHV0cy5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBpbnB1dE5vZGVOYW1lcyA9XG4gICAgICBuZXcgU2V0KE9iamVjdC5rZXlzKGlucHV0cykubWFwKChuYW1lKSA9PiBwYXJzZU5vZGVOYW1lKG5hbWUpWzBdKSk7XG5cbiAgaW5pdE5vZGVzID0gaW5pdE5vZGVzIHx8IFtdO1xuICBjb25zdCBpbml0Tm9kZU5hbWVzID1cbiAgICAgIG5ldyBTZXQoaW5pdE5vZGVzLm1hcCgobm9kZSkgPT4gcGFyc2VOb2RlTmFtZShub2RlLm5hbWUpWzBdKSk7XG5cbiAgY29uc3QgZnJvbnRpZXIgPSBbLi4ub3V0cHV0c107XG4gIHdoaWxlIChmcm9udGllci5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IGZyb250aWVyLnBvcCgpO1xuICAgIGlmIChpc0NvbnRyb2xGbG93KG5vZGUpIHx8IGlzRHluYW1pY1NoYXBlKG5vZGUpIHx8IGlzSGFzaFRhYmxlKG5vZGUpKSB7XG4gICAgICBpZiAoZHluYW1pY05vZGUgPT0gbnVsbCkge1xuICAgICAgICBkeW5hbWljTm9kZSA9IG5vZGU7XG4gICAgICAgIHN5bmNJbnB1dHMgPSBkeW5hbWljTm9kZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdXNlZE5vZGVzLmhhcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHVzZWROb2Rlcy5hZGQobm9kZS5uYW1lKTtcblxuICAgIC8vIFdlaWdodHMgYXJlIGRlYWQgZW5kIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGVpciB2YWx1ZXMuXG4gICAgaWYgKHdlaWdodE1hcFtub2RlLm5hbWVdICE9IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBUaGlzIG5vZGUgaXMgYSBkZWFkIGVuZCBzaW5jZSBpdCdzIG9uZSBvZiB0aGUgdXNlci1wcm92aWRlZCBpbnB1dHMuXG4gICAgaWYgKGlucHV0Tm9kZU5hbWVzLmhhcyhub2RlLm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gVGhpcyBub2RlIGlzIGEgZGVhZCBlbmQgc2luY2UgaXQgZG9lc24ndCBoYXZlIGFueSBpbnB1dHMuXG4gICAgaWYgKGluaXROb2RlTmFtZXMuaGFzKG5vZGUubmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBtaXNzaW5nSW5wdXRzLnB1c2gobm9kZS5uYW1lKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBub2RlLmlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIC8vIERvbid0IGFkZCB0byB0aGUgZnJvbnRpZXIgaWYgaXQgaXMgYWxyZWFkeSB0aGVyZS5cbiAgICAgIGlmIChzZWVuLmhhcyhpbnB1dC5uYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChpbnB1dC5uYW1lKTtcbiAgICAgIGZyb250aWVyLnB1c2goaW5wdXQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7aW5wdXRzLCBvdXRwdXRzLCB1c2VkTm9kZXMsIG1pc3NpbmdJbnB1dHMsIGR5bmFtaWNOb2RlLCBzeW5jSW5wdXRzfTtcbn1cblxuLyoqXG4gKiBHaXZlbiB0aGUgZXhlY3V0aW9uIGluZm8sIHJldHVybiBhIGxpc3Qgb2Ygbm9kZXMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIgdGhhdFxuICogbmVlZCB0byBiZSBleGVjdXRlZCB0byBjb21wdXRlIHRoZSBvdXRwdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlcihcbiAgICBncmFwaDogR3JhcGgsIGV4ZWN1dGlvbkluZm86IEV4ZWN1dGlvbkluZm8pOiBOb2RlW10ge1xuICBjb25zdCB7dXNlZE5vZGVzLCBpbnB1dHN9ID0gZXhlY3V0aW9uSW5mbztcbiAgY29uc3QgaW5wdXROb2RlcyA9IE9iamVjdC5rZXlzKGlucHV0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gcGFyc2VOb2RlTmFtZShuYW1lKVswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gZ3JhcGgubm9kZXNbbmFtZV0pO1xuICBjb25zdCBpbml0Tm9kZXMgPSBncmFwaC5pbml0Tm9kZXMgfHwgW107XG5cbiAgY29uc3QgaXNVc2VkID0gKG5vZGU6IE5vZGV8c3RyaW5nKSA9PlxuICAgICAgdXNlZE5vZGVzLmhhcyh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5uYW1lKTtcblxuICBmdW5jdGlvbiB1bmlxdWUobm9kZXM6IE5vZGVbXSk6IE5vZGVbXSB7XG4gICAgcmV0dXJuIFsuLi5uZXcgTWFwKG5vZGVzLm1hcCgobm9kZSkgPT4gW25vZGUubmFtZSwgbm9kZV0pKS52YWx1ZXMoKV07XG4gIH1cbiAgY29uc3QgcHJlZGVmaW5lZE5vZGVzID0gdW5pcXVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyYXBoLndlaWdodHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5pdE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5maWx0ZXIoaXNVc2VkKTtcbiAgY29uc3QgYWxsTm9kZXMgPSB1bmlxdWUoW1xuICAgICAgICAgICAgICAgICAgICAgLi4ucHJlZGVmaW5lZE5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhncmFwaC5ub2RlcyksXG4gICAgICAgICAgICAgICAgICAgXSkuZmlsdGVyKGlzVXNlZCk7XG4gIGNvbnN0IG5hbWVUb05vZGUgPVxuICAgICAgbmV3IE1hcDxzdHJpbmcsIE5vZGU+KGFsbE5vZGVzLm1hcCgobm9kZSkgPT4gW25vZGUubmFtZSwgbm9kZV0pKTtcblxuICBjb25zdCBpbkNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgYWxsTm9kZXMpIHtcbiAgICBpbkNvdW50c1tub2RlLm5hbWVdID0gaW5Db3VudHNbbm9kZS5uYW1lXSB8fCAwO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgLy8gV2hlbiB0aGUgY2hpbGQgaXMgdW51c2VkLCBzZXQgaW4gY291bnRzIHRvIGluZmluaXR5IHNvIHRoYXQgaXQgd2lsbFxuICAgICAgLy8gbmV2ZXIgYmUgZGVjcmVhc2VkIHRvIDAgYW5kIGFkZGVkIHRvIHRoZSBleGVjdXRpb24gbGlzdC5cbiAgICAgIGlmICghaXNVc2VkKGNoaWxkKSkge1xuICAgICAgICBpbkNvdW50c1tjaGlsZC5uYW1lXSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH1cbiAgICAgIGluQ291bnRzW2NoaWxkLm5hbWVdID0gKGluQ291bnRzW2NoaWxkLm5hbWVdIHx8IDApICsgMTtcbiAgICB9XG4gIH1cblxuICAvLyBCdWlsZCBleGVjdXRpb24gb3JkZXIgZm9yIGFsbCB1c2VkIG5vZGVzIHJlZ2FyZGxlc3Mgd2hldGhlciB0aGV5IGFyZVxuICAvLyBwcmVkZWZpbmVkIG9yIG5vdC5cbiAgY29uc3QgZnJvbnRpZXIgPSBPYmplY3QuZW50cmllcyhpbkNvdW50cylcbiAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoWywgaW5Db3VudF0pID0+IGluQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XG4gIGNvbnN0IG9yZGVyZWROb2RlTmFtZXMgPSBbLi4uZnJvbnRpZXJdO1xuICB3aGlsZSAoZnJvbnRpZXIubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGVOYW1lID0gZnJvbnRpZXIucG9wKCk7XG4gICAgY29uc3Qgbm9kZSA9IG5hbWVUb05vZGUuZ2V0KG5vZGVOYW1lKSE7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuLmZpbHRlcihpc1VzZWQpKSB7XG4gICAgICBpZiAoLS1pbkNvdW50c1tjaGlsZC5uYW1lXSA9PT0gMCkge1xuICAgICAgICBvcmRlcmVkTm9kZU5hbWVzLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICAgIGZyb250aWVyLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3JkZXJlZE5vZGVzID0gb3JkZXJlZE5vZGVOYW1lcy5tYXAoKG5hbWUpID0+IG5hbWVUb05vZGUuZ2V0KG5hbWUpKTtcbiAgY29uc3QgZmlsdGVyZWRPcmRlcmVkTm9kZXMgPVxuICAgICAgZmlsdGVyUHJlZGVmaW5lZFJlYWNoYWJsZU5vZGVzKG9yZGVyZWROb2RlcywgcHJlZGVmaW5lZE5vZGVzKTtcblxuICAvLyBUT0RPOiBUdXJuIHZhbGlkYXRpb24gb24vb2ZmIHdpdGggdGYgZW52IGZsYWcuXG4gIHZhbGlkYXRlTm9kZXNFeGVjdXRpb25PcmRlcihmaWx0ZXJlZE9yZGVyZWROb2RlcywgcHJlZGVmaW5lZE5vZGVzKTtcblxuICByZXR1cm4gZmlsdGVyZWRPcmRlcmVkTm9kZXM7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBvZiBgZ2V0Tm9kZXNJblRvcG9sb2dpY2FsT3JkZXJgLlxuICogUmV0dXJucyBvcmRlcmVkIG5vZGVzIHJlYWNoYWJsZSBieSBhdCBsZWFzdCBvbmUgcHJlZGVmaW5lZCBub2RlLlxuICogVGhpcyBjYW4gaGVscCB1cyBmaWx0ZXIgb3V0IHJlZHVuZGFudCBub2RlcyBmcm9tIHRoZSByZXR1cm5lZCBub2RlIGxpc3QuXG4gKiBGb3IgZXhhbXBsZTpcbiAqIElmIHdlIGhhdmUgZm91ciBub2RlcyB3aXRoIGRlcGVuZGVuY2llcyBsaWtlIHRoaXM6XG4gKiAgIGEgLS0+IGIgLS0+IGMgLS0+IGRcbiAqIHdoZW4gbm9kZSBgY2AgaXMgcHJlZGVmaW5lZCAoZS5nLiBnaXZlbiBhcyBhbiBpbnB1dCB0ZW5zb3IpLCB3ZSBjYW5cbiAqIHNraXAgbm9kZSBgYWAgYW5kIGBiYCBzaW5jZSB0aGVpciBvdXRwdXRzIHdpbGwgbmV2ZXIgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0gb3JkZXJlZE5vZGVzIEdyYXBoIG5vZGVzIGluIGV4ZWN1dGlvbiBvcmRlci5cbiAqIEBwYXJhbSBwcmVkZWZpbmVkTm9kZXMgR3JhcGggaW5wdXRzLCB3ZWlnaHRzLCBhbmQgaW5pdCBub2Rlcy4gTm9kZXMgaW4gdGhpc1xuICogICAgIGxpc3QgbXVzdCBoYXZlIGRpc3RpbmN0IG5hbWVzLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJQcmVkZWZpbmVkUmVhY2hhYmxlTm9kZXMoXG4gICAgb3JkZXJlZE5vZGVzOiBOb2RlW10sIHByZWRlZmluZWROb2RlczogTm9kZVtdKSB7XG4gIGNvbnN0IG5hbWVUb05vZGUgPVxuICAgICAgbmV3IE1hcDxzdHJpbmcsIE5vZGU+KG9yZGVyZWROb2Rlcy5tYXAoKG5vZGUpID0+IFtub2RlLm5hbWUsIG5vZGVdKSk7XG5cbiAgLy8gVE9ETzogRmlsdGVyIG91dCBtb3JlIG5vZGVzIHdoZW4gPj0yIG5vZGVzIGFyZSBwcmVkZWZpbmVkIGluIGEgcGF0aC5cbiAgY29uc3Qgc3RhY2sgPSBwcmVkZWZpbmVkTm9kZXMubWFwKChub2RlKSA9PiBub2RlLm5hbWUpO1xuICBjb25zdCBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzID0gbmV3IFNldChzdGFjayk7XG4gIC8vIFBlcmZvcm0gYSBERlMgc3RhcnRpbmcgZnJvbSB0aGUgc2V0IG9mIGFsbCBwcmVkZWZpbmVkIG5vZGVzXG4gIC8vIHRvIGZpbmQgdGhlIHNldCBvZiBhbGwgbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhlIHByZWRlZmluZWQgbm9kZXMuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZU5hbWUgPSBzdGFjay5wb3AoKTtcbiAgICBjb25zdCBub2RlID0gbmFtZVRvTm9kZS5nZXQobm9kZU5hbWUpITtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmICghbmFtZVRvTm9kZS5oYXMoY2hpbGQubmFtZSkgfHxcbiAgICAgICAgICBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZWRlZmluZWRSZWFjaGFibGVOb2RlTmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICAgICAgc3RhY2sucHVzaChjaGlsZC5uYW1lKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaWx0ZXIgb3V0IHVucmVhY2hhYmxlIG5vZGVzIGFuZCBidWlsZCB0aGUgb3JkZXJlZCBub2RlIGxpc3QuXG4gIGNvbnN0IGZpbHRlcmVkT3JkZXJlZE5vZGVzID0gb3JkZXJlZE5vZGVzLmZpbHRlcihcbiAgICAgIChub2RlKSA9PiBwcmVkZWZpbmVkUmVhY2hhYmxlTm9kZU5hbWVzLmhhcyhub2RlLm5hbWUpKTtcblxuICByZXR1cm4gZmlsdGVyZWRPcmRlcmVkTm9kZXM7XG59XG5cbmNsYXNzIE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcjogJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBvZiBgZ2V0Tm9kZXNJblRvcG9sb2dpY2FsT3JkZXJgLlxuICogVmFsaWRhdGVzIHByb3BlcnR5OiBnaXZlbiBub2RlcyBgYWAgYW5kIGBiYCwgT3JkZXIoYSkgPiBPcmRlcihiKSBpZiBgYWBcbiAqIGlzIGEgY2hpbGQgb2YgYGJgLiBUaGlzIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICpcbiAqIEBwYXJhbSBvcmRlcmVkTm9kZXMgR3JhcGggbm9kZXMgaW4gZXhlY3V0aW9uIG9yZGVyLlxuICogQHBhcmFtIHByZWRlZmluZWROb2RlcyBHcmFwaCBpbnB1dHMsIHdlaWdodHMsIGFuZCBpbml0IG5vZGVzLiBOb2RlcyBpbiB0aGlzXG4gKiAgICAgbGlzdCBtdXN0IGhhdmUgZGlzdGluY3QgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTm9kZXNFeGVjdXRpb25PcmRlcihcbiAgICBvcmRlcmVkTm9kZXM6IE5vZGVbXSwgcHJlZGVmaW5lZE5vZGVzOiBOb2RlW10pIHtcbiAgY29uc3Qgbm9kZU5hbWVUb09yZGVyID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oXG4gICAgICBvcmRlcmVkTm9kZXMubWFwKChub2RlLCBvcmRlcikgPT4gW25vZGUubmFtZSwgb3JkZXJdKSk7XG4gIGNvbnN0IHByZWRlZmluZWROb2RlTmFtZXMgPSBuZXcgU2V0KHByZWRlZmluZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUubmFtZSkpO1xuICBjb25zdCBpc1ByZWRlZmluZWQgPSAobm9kZTogTm9kZXxzdHJpbmcpID0+XG4gICAgICBwcmVkZWZpbmVkTm9kZU5hbWVzLmhhcyh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5uYW1lKTtcbiAgY29uc3Qgd2lsbEJlRXhlY3V0ZWROb2RlTmFtZXMgPVxuICAgICAgbmV3IFNldChvcmRlcmVkTm9kZXMubWFwKChub2RlKSA9PiBub2RlLm5hbWUpKTtcbiAgY29uc3Qgd2lsbEJlRXhlY3V0ZWQgPSAobm9kZTogTm9kZXxzdHJpbmcpID0+XG4gICAgICB3aWxsQmVFeGVjdXRlZE5vZGVOYW1lcy5oYXModHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubmFtZSk7XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIG9yZGVyZWROb2Rlcykge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbi5maWx0ZXIod2lsbEJlRXhlY3V0ZWQpKSB7XG4gICAgICBpZiAoIW5vZGVOYW1lVG9PcmRlci5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcihcbiAgICAgICAgICAgIGBDaGlsZCAke2NoaWxkLm5hbWV9IG9mIG5vZGUgJHtub2RlLm5hbWV9IGlzIHVucmVhY2hhYmxlLmApO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSA+IG5vZGVOYW1lVG9PcmRlci5nZXQoY2hpbGQubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vZGVzRXhlY3V0aW9uT3JkZXJFcnJvcihgTm9kZSAke1xuICAgICAgICAgICAgbm9kZS5uYW1lfSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGl0cyBjaGlsZCAke2NoaWxkLm5hbWV9LmApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzUHJlZGVmaW5lZChub2RlKSkge1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBub2RlLmlucHV0cykge1xuICAgICAgICBpZiAoIW5vZGVOYW1lVG9PcmRlci5oYXMoaW5wdXQubmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9kZXNFeGVjdXRpb25PcmRlckVycm9yKFxuICAgICAgICAgICAgICBgSW5wdXQgJHtpbnB1dC5uYW1lfSBvZiBub2RlICR7bm9kZS5uYW1lfSBpcyB1bnJlYWNoYWJsZS5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZU5hbWVUb09yZGVyLmdldChpbnB1dC5uYW1lKSA+IG5vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb2Rlc0V4ZWN1dGlvbk9yZGVyRXJyb3IoYE5vZGUgJHtcbiAgICAgICAgICAgICAgbm9kZS5uYW1lfSBpcyBzY2hlZHVsZWQgdG8gcnVuIGJlZm9yZSBpdHMgaW5wdXQgJHtpbnB1dC5uYW1lfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBleGVjdXRpb24gaW5mbywgcmV0dXJuIGEgbWFwIGZyb20gbm9kZSBuYW1lIHRvIHRoZSBkaXNwb3NhYmxlXG4gKiBub2RlIG5hbWUgbGlzdCBhZnRlciBpdHMgZXhlY3V0aW9uLlxuICpcbiAqIEByZXR1cm5zIEEgbWFwIGZyb20gbm9kZSBuYW1lIHRvIGRpc3Bvc2FibGUgbm9kZXMgYWZ0ZXIgaXRzXG4gKiAgICAgZXhlY3V0aW9uLiBUaGF0IGlzLCBmb3IgYSBub2RlIGB4YCwgYG5vZGVMaXZlVW50aWxNYXBbeF1gIGluZGljYXRlc1xuICogICAgIGFsbCBub2RlcyB3aGljaCB0aGVpciBpbnRlcm1lZGlhdGUgdGVuc29ycyBzaG91bGQgYmUgZGlzcG9zZWQgYWZ0ZXIgYHhgXG4gKiAgICAgYmVpbmcgZXhlY3V0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlTGl2ZVVudGlsTWFwKG9yZGVyZWROb2RlczogTm9kZVtdKTogTWFwPHN0cmluZywgTm9kZVtdPiB7XG4gIGNvbnN0IG5vZGVOYW1lVG9PcmRlciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxuICAgICAgb3JkZXJlZE5vZGVzLm1hcCgobm9kZSwgb3JkZXIpID0+IFtub2RlLm5hbWUsIG9yZGVyXSkpO1xuXG4gIGNvbnN0IElORl9MSUZFID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gIC8vIE1ha2UgY29udHJvbCBmbG93IG5vZGVzIChhbmQgY29uc2VxdWVudGx5IHRoZWlyIGRpcmVjdCBwYXJlbnRzKVxuICAvLyBsaXZlIGZvcmV2ZXIgc2luY2UgdGhleSdyZSB0cmlja3kgdG8gdHJhY2sgY29ycmVjdGx5LlxuICBjb25zdCBzZWxmTGlmZXNwYW5zID0gb3JkZXJlZE5vZGVzLm1hcChcbiAgICAgIChub2RlLCBub2RlT3JkZXIpID0+IGlzQ29udHJvbEZsb3cobm9kZSkgPyBJTkZfTElGRSA6IG5vZGVPcmRlcik7XG4gIGNvbnN0IGdldFNlbGZMaWZlU3BhbiA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgY29uc3Qgc2VsZkxpZmUgPSBzZWxmTGlmZXNwYW5zW25vZGVOYW1lVG9PcmRlci5nZXQobm9kZS5uYW1lKSFdO1xuICAgIGlmIChzZWxmTGlmZSA9PSBudWxsKSB7XG4gICAgICAvLyBJZiBub2RlVG9PcmRlciBkb2VzIG5vdCBjb250YWluIHRoZSBub2RlLCBpdCBpcyB1bnVzZWQgb3JcbiAgICAgIC8vIHVucmVhY2hhYmxlIGluIGdyYXBoLlxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZkxpZmU7XG4gIH07XG5cbiAgLy8gYGxpdmVVbnRpbFtpXWAgcG9pbnRzIHRvIHRoZSBsYXN0IG5vZGUgaW4gdGhlIGBvcmRlcmVkTm9kZXNgIGFycmF5IHRoYXRcbiAgLy8gbWF5IGRlcGVuZCBvbiB0ZW5zb3JzIGZyb20gbm9kZSBgaWAuIEl0IGluZGljYXRlcyB0aGF0IGFsbCB0aGVcbiAgLy8gaW50ZXJtZWRpYXRlIHRlbnNvcnMgZnJvbSBgb3JkZXJlZE5vZGVzW2ldYCBzaG91bGQgYmUgZGlzcG9zZWQgYWZ0ZXJcbiAgLy8gYG9yZGVyZWROb2Rlc1tsaXZlVW50aWxbaV1dYCBpcyBleGVjdXRlZC5cbiAgLy8gQSBub2RlIGxpdmVzIGxvbmcgZW5vdWdoIHRvIHBhc3Mgb24gaXRzIHRlbnNvcnMgdG8gaXRzIGNoaWxkcmVuLlxuICAvLyBJdCBsaXZlcyB1bnRpbCBhdCBsZWFzdCBgbWF4KG5vZGUncyBwb3NpdGlvbiwgY2hpbGRyZW4ncyBwb3NpdGlvbnMpYC5cbiAgY29uc3QgbGl2ZVVudGlsT3JkZXJzID0gb3JkZXJlZE5vZGVzLm1hcCgobm9kZSwgbm9kZU9yZGVyKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ubWFwKGdldFNlbGZMaWZlU3BhbilcbiAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYiksIHNlbGZMaWZlc3BhbnNbbm9kZU9yZGVyXSk7XG4gIH0pO1xuXG4gIC8vIGxpdmVVbnRpbE1hcDpcbiAgLy8gLSBLZXk6IE5hbWUgb2YgYSBub2RlIGB4YFxuICAvLyAtIFZhbHVlczogQWxsIG5vZGVzIHdob3NlIGludGVybWVkaWF0ZSB0ZW5zb3JzIHNob3VsZCBiZSBkaXNwb3NlZFxuICAvLyAgICAgICAgICAgYWZ0ZXIgYHhgIGlzIGV4ZWN1dGVkLlxuICBjb25zdCBsaXZlVW50aWxNYXAgPSBuZXcgTWFwPHN0cmluZywgTm9kZVtdPigpO1xuICBmb3IgKGxldCBub2RlT3JkZXIgPSAwOyBub2RlT3JkZXIgPCBvcmRlcmVkTm9kZXMubGVuZ3RoOyArK25vZGVPcmRlcikge1xuICAgIGNvbnN0IGxpdmVVbnRpbE9yZGVyID0gbGl2ZVVudGlsT3JkZXJzW25vZGVPcmRlcl07XG4gICAgaWYgKGxpdmVVbnRpbE9yZGVyID09PSBJTkZfTElGRSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSBvcmRlcmVkTm9kZXNbbm9kZU9yZGVyXTtcbiAgICBjb25zdCBsaXZlVW50aWxOb2RlID0gb3JkZXJlZE5vZGVzW2xpdmVVbnRpbE9yZGVyXTtcbiAgICBpZiAoIWxpdmVVbnRpbE1hcC5oYXMobGl2ZVVudGlsTm9kZS5uYW1lKSkge1xuICAgICAgbGl2ZVVudGlsTWFwLnNldChsaXZlVW50aWxOb2RlLm5hbWUsIFtdKTtcbiAgICB9XG4gICAgbGl2ZVVudGlsTWFwLmdldChsaXZlVW50aWxOb2RlLm5hbWUpIS5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBsaXZlVW50aWxNYXA7XG59XG5cbmNvbnN0IENPTlRST0xfRkxPV19PUFMgPSBuZXcgU2V0KFtcbiAgJ1N3aXRjaCcsICdNZXJnZScsICdFbnRlcicsICdFeGl0JywgJ05leHRJdGVyYXRpb24nLCAnU3RhdGVsZXNzSWYnLFxuICAnU3RhdGVsZXNzV2hpbGUnLCAnaWYnLCAnV2hpbGUnXG5dKTtcbmNvbnN0IERZTkFNSUNfU0hBUEVfT1BTID0gbmV3IFNldChbXG4gICdOb25NYXhTdXBwcmVzc2lvblYyJywgJ05vbk1heFN1cHByZXNzaW9uVjMnLCAnTm9uTWF4U3VwcHJlc3Npb25WNScsICdXaGVyZSdcbl0pO1xuY29uc3QgSEFTSF9UQUJMRV9PUFMgPSBuZXcgU2V0KFtcbiAgJ0hhc2hUYWJsZScsICdIYXNoVGFibGVWMicsICdMb29rdXBUYWJsZUltcG9ydCcsICdMb29rdXBUYWJsZUltcG9ydFYyJyxcbiAgJ0xvb2t1cFRhYmxlRmluZCcsICdMb29rdXBUYWJsZUZpbmRWMicsICdMb29rdXBUYWJsZVNpemUnLCAnTG9va3VwVGFibGVTaXplVjInXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udHJvbEZsb3cobm9kZTogTm9kZSkge1xuICByZXR1cm4gQ09OVFJPTF9GTE9XX09QUy5oYXMobm9kZS5vcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNTaGFwZShub2RlOiBOb2RlKSB7XG4gIHJldHVybiBEWU5BTUlDX1NIQVBFX09QUy5oYXMobm9kZS5vcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hhc2hUYWJsZShub2RlOiBOb2RlKSB7XG4gIHJldHVybiBIQVNIX1RBQkxFX09QUy5oYXMobm9kZS5vcCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env, keep, tidy, util } from '@tensorflow/tfjs-core';\nimport { getNodeNameAndIndex, getParamValue, getTensor, getTensorsForCurrentContext, parseNodeName } from '../operations/executors/utils';\nimport { executeOp } from '../operations/operation_executor';\nimport { ExecutionContext } from './execution_context';\nimport { getExecutionSubgraph, getNodeLiveUntilMap, getNodesInTopologicalOrder, isControlFlow } from './model_analysis';\nexport class GraphExecutor {\n get weightIds() {\n return this.parent ? this.parent.weightIds : this._weightIds;\n }\n get functionExecutorMap() {\n return this.parent ? this.parent.functionExecutorMap :\n this._functionExecutorMap;\n }\n get weightMap() {\n return this.parent ? this.parent.weightMap : this._weightMap;\n }\n set weightMap(weightMap) {\n const weightIds = Object.keys(weightMap).map(key => weightMap[key].map(tensor => tensor.id));\n this._weightIds = [].concat(...weightIds);\n this._weightMap = weightMap;\n }\n /**\n * Set `ResourceManager` shared by executors of a model.\n * @param resourceManager: `ResourceManager` of the `GraphModel`.\n */\n set resourceManager(resourceManager) {\n this._resourceManager = resourceManager;\n }\n get inputs() {\n return this._inputs.map(node => {\n return {\n name: node.name,\n shape: node.attrParams['shape'] ?\n node.attrParams['shape'].value :\n undefined,\n dtype: node.attrParams['dtype'] ?\n node.attrParams['dtype'].value :\n undefined\n };\n });\n }\n get outputs() {\n return this._outputs.map(node => {\n return {\n name: node.name,\n shape: node.attrParams['shape'] ?\n node.attrParams['shape'].value :\n undefined,\n dtype: node.attrParams['dtype'] ?\n node.attrParams['dtype'].value :\n undefined\n };\n });\n }\n get inputNodes() {\n return this._inputs.map(node => node.signatureKey || node.name);\n }\n get outputNodes() {\n return this._outputs.map((node) => {\n const name = node.signatureKey || node.name;\n return node.defaultOutput ? (`${name}:${node.defaultOutput}`) : name;\n });\n }\n get functions() {\n return Object.keys(this._functions).reduce((map, key) => {\n map[key] = this._functions[key].signature;\n return map;\n }, {});\n }\n /**\n *\n * @param graph Graph the model or function graph to be executed.\n * @param parent When building function exector you need to set the parent\n * executor. Since the weights and function executor maps are set at parant\n * level, that function executor can access the function maps and weight maps\n * through the parent.\n */\n constructor(graph, parent) {\n this.graph = graph;\n this.parent = parent;\n this.compiledMap = new Map();\n this.parseNodeNameCache = new Map();\n this._weightMap = {};\n this.SEPARATOR = ',';\n this._functions = {};\n this._functionExecutorMap = {};\n this.keepIntermediateTensors = false;\n this._outputs = graph.outputs;\n this._inputs = graph.inputs;\n this._initNodes = graph.initNodes;\n this._signature = graph.signature;\n this._functions = graph.functions;\n // create sub-graph executors\n if (graph.functions != null) {\n Object.keys(graph.functions).forEach(name => {\n this._functionExecutorMap[name] =\n new GraphExecutor(graph.functions[name], this);\n });\n }\n }\n getCompilationKey(inputs, outputs) {\n const sortedInputs = inputs.map(node => node.name).sort();\n const sortedOutputs = outputs.map(node => node.name).sort();\n return sortedInputs.join(this.SEPARATOR) + '--' +\n sortedOutputs.join(this.SEPARATOR);\n }\n /**\n * Compiles the inference graph and returns the minimal set of nodes that are\n * required for execution, in the correct execution order.\n * @returns {Object} compilation The compile result.\n * @returns {Node[]} compilation.orderedNodes Nodes in the correct execution\n * order.\n * @returns {Map} compilation.nodeLiveUntilMap A map from node\n * to disposable nodes after its execution. That is, for a node `x`,\n * `nodeLiveUntilMap[x]` indicates all nodes whose intermediate\n * tensors should be disposed after `x` is executed.\n */\n compile(inputs, outputs) {\n const executionInfo = getExecutionSubgraph(inputs, outputs, this.weightMap, this._initNodes);\n const { missingInputs, dynamicNode, syncInputs } = executionInfo;\n if (dynamicNode != null) {\n throw new Error(`This execution contains the node '${dynamicNode.name}', which has ` +\n `the dynamic op '${dynamicNode.op}'. Please use ` +\n `model.executeAsync() instead. Alternatively, to avoid the ` +\n `dynamic ops, specify the inputs [${syncInputs}]`);\n }\n if (missingInputs.length > 0) {\n const outNames = outputs.map(n => n.name);\n const inNames = Object.keys(inputs);\n throw new Error(`Cannot compute the outputs [${outNames}] from the provided inputs ` +\n `[${inNames}]. Missing the following inputs: [${missingInputs}]`);\n }\n const orderedNodes = getNodesInTopologicalOrder(this.graph, executionInfo);\n const nodeLiveUntilMap = getNodeLiveUntilMap(orderedNodes);\n return { orderedNodes, nodeLiveUntilMap };\n }\n cloneAndKeepTensor(tensor) {\n if (tensor == null) {\n return null;\n }\n const clone = tensor.clone();\n // Keep the clone because`model.execute()` may be called within\n // a `tidy()`, but the user may inspect these tensors after the\n // tidy.\n keep(clone);\n return clone;\n }\n cloneTensorList(tensors) {\n if (!tensors) {\n return null;\n }\n const clonedTensor = tensors.map(tensor => {\n return this.cloneAndKeepTensor(tensor);\n });\n return clonedTensor;\n }\n cloneTensorMap(tensorsMap) {\n return Object.fromEntries(Object.entries(tensorsMap).map(([name, tensorsList]) => {\n return [name, this.cloneTensorList(tensorsList)];\n }));\n }\n /**\n * Executes the inference for given input tensors.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs Optional. output node name from the Tensorflow model, if\n * no outputs are specified, the default outputs of the model would be used.\n * You can inspect intermediate nodes of the model by adding them to the\n * outputs array.\n */\n execute(inputs, outputs) {\n // Dispose any tensors from a prior run to avoid leaking them.\n this.disposeIntermediateTensors();\n inputs = this.mapInputs(inputs);\n const names = Object.keys(inputs).sort();\n this.checkInputs(inputs);\n this.checkInputShapeAndType(inputs);\n outputs = this.mapOutputs(outputs);\n this.checkOutputs(outputs);\n const inputNodes = names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n const outputNodeNames = outputs.map(name => parseNodeName(name)[0]);\n const outputNodeNameSet = new Set(outputNodeNames);\n let outputNodes = outputNodeNames.map(name => this.graph.nodes[name]);\n // If no outputs are specified, then use the default outputs of the model.\n if (outputNodes.length === 0) {\n outputNodes = this._outputs;\n }\n const compilationKey = this.getCompilationKey(inputNodes, outputNodes);\n // Do nothing if the compiled graph cache contains the input.\n let compilation = this.compiledMap.get(compilationKey);\n if (compilation == null) {\n compilation = this.compile(inputs, outputNodes);\n this.compiledMap.set(compilationKey, compilation);\n }\n // Keep tensors if KEEP_INTERMEDIATE_TENSORS is on.\n try {\n this.keepIntermediateTensors = env().getBool('KEEP_INTERMEDIATE_TENSORS');\n }\n catch (e) {\n this.keepIntermediateTensors = false;\n console.warn(e.message);\n }\n const tensorArrayMap = {};\n const tensorListMap = {};\n return tidy(() => {\n const context = new ExecutionContext(this.weightMap, tensorArrayMap, tensorListMap, this.functionExecutorMap, this.parseNodeNameCache);\n const tensorsMap = Object.assign({}, this.weightMap);\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap = this.cloneTensorMap(this.weightMap);\n }\n Object.keys(inputs).forEach(name => {\n const [nodeName, index] = parseNodeName(name, context);\n const tensors = [];\n tensors[index] = inputs[name];\n tensorsMap[nodeName] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(tensors);\n }\n });\n const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n const { orderedNodes, nodeLiveUntilMap } = compilation;\n for (const node of orderedNodes) {\n if (tensorsMap[node.name]) {\n continue;\n }\n const tensors = executeOp(node, tensorsMap, context, this._resourceManager);\n if (util.isPromise(tensors)) {\n throw new Error(`The execution of the op '${node.op}' returned a promise. ` +\n `Please use model.executeAsync() instead.`);\n }\n tensorsMap[node.name] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[node.name] = this.cloneTensorList(tensors);\n }\n this.checkTensorForDisposalWithNodeLiveUntilInfo(node, tensorsMap, context, tensorsToKeep, outputNodeNameSet, nodeLiveUntilMap.get(node.name));\n }\n // dispose the context for the root executor\n if (this.parent == null) {\n context.dispose(tensorsToKeep);\n }\n return outputs.map(name => getTensor(name, tensorsMap, context));\n });\n }\n getFrozenTensorIds(tensorMap) {\n const ids = [].concat.apply([], Object.keys(tensorMap)\n .map(key => tensorMap[key])\n .map(tensors => tensors.map(tensor => tensor.id)));\n return new Set(ids);\n }\n checkTensorForDisposal(nodeName, node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount) {\n // Skip output nodes and any control flow nodes, since its dependency is\n // tricky to track correctly.\n if (isControlFlow(node) || outputNodeNameSet.has(nodeName)) {\n return;\n }\n for (const tensor of tensorMap[nodeName]) {\n if (tensor == null) {\n continue;\n }\n intermediateTensorConsumerCount[tensor.id] =\n (intermediateTensorConsumerCount[tensor.id] || 0) +\n node.children.length;\n }\n for (const input of node.inputs) {\n // Skip any control flow nodes, since its dependency is tricky to track\n // correctly.\n if (isControlFlow(input)) {\n continue;\n }\n const tensors = getTensorsForCurrentContext(input.name, tensorMap, context);\n if (tensors == null) {\n continue;\n }\n for (const tensor of tensors) {\n if (!tensor || tensor.kept || tensorsToKeep.has(tensor.id)) {\n continue;\n }\n // Only intermediate nodes' tensors have counts set, not marked as\n // kept, and not in `tensorsToKeep`.\n // Input and weight nodes' tensors should exist in `tensorsToKeep`.\n // Output and control flow nodes' tensors should never have count set.\n const count = intermediateTensorConsumerCount[tensor.id];\n if (count === 1) {\n tensor.dispose();\n delete intermediateTensorConsumerCount[tensor.id];\n }\n else if (count != null) {\n intermediateTensorConsumerCount[tensor.id]--;\n }\n }\n }\n }\n checkTensorForDisposalWithNodeLiveUntilInfo(node, tensorMap, context, tensorsToKeep, outputNodeNameSet, liveUntilNodes) {\n function isNonDisposableNode(node) {\n // Skip output nodes and any control flow nodes, since its dependency is\n // tricky to track correctly.\n return isControlFlow(node) || outputNodeNameSet.has(node.name);\n }\n if (isControlFlow(node) || liveUntilNodes == null) {\n return;\n }\n for (const nodeToDispose of liveUntilNodes) {\n if (isNonDisposableNode(nodeToDispose)) {\n continue;\n }\n const tensors = getTensorsForCurrentContext(nodeToDispose.name, tensorMap, context);\n for (const tensor of tensors) {\n if (!tensor || tensor.kept || tensorsToKeep.has(tensor.id)) {\n continue;\n }\n tensor.dispose();\n }\n }\n }\n /**\n * Executes the inference for given input tensors in Async fashion.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs output node name from the Tensorflow model, if no outputs\n * are specified, the default outputs of the model would be used. You can\n * inspect intermediate nodes of the model by adding them to the outputs\n * array.\n */\n async executeAsync(inputs, outputs) {\n return this._executeAsync(inputs, outputs);\n }\n disposeIntermediateTensors() {\n if (!this.clonedTensorsMap) {\n return;\n }\n Object.values(this.clonedTensorsMap).forEach(tensorsList => {\n for (const tensor of tensorsList) {\n if (tensor && !tensor.isDisposed) {\n tensor.dispose();\n }\n }\n });\n this.clonedTensorsMap = null;\n }\n getIntermediateTensors() {\n return this.clonedTensorsMap;\n }\n /**\n * Executes the inference for given input tensors in Async fashion.\n * @param inputs Tensor map for the model inputs, keyed by the input node\n * names.\n * @param outputs Optional. output node name from the Tensorflow model,\n * if no outputs are specified, the default outputs of the model would be\n * used. You can inspect intermediate nodes of the model by adding them to\n * the outputs array.\n * @param isFunctionExecution Optional. Flag for executing a function.\n * @param tensorArrayMap Optional, global TensorArray map by id. Used for\n * function execution.\n * @param tensorArrayMap Optinal global TensorList map by id. Used for\n * function execution.\n */\n async _executeAsync(inputs, outputs, isFunctionExecution = false, tensorArrayMap = {}, tensorListMap = {}) {\n // Dispose any tensors from a prior run to avoid leaking them.\n this.disposeIntermediateTensors();\n if (!isFunctionExecution) {\n inputs = this.mapInputs(inputs);\n this.checkInputs(inputs);\n this.checkInputShapeAndType(inputs);\n outputs = this.mapOutputs(outputs);\n this.checkOutputs(outputs);\n }\n // Keep tensors if KEEP_INTERMEDIATE_TENSORS is on.\n try {\n this.keepIntermediateTensors = env().getBool('KEEP_INTERMEDIATE_TENSORS');\n }\n catch (e) {\n this.keepIntermediateTensors = false;\n console.warn(e.message);\n }\n const context = new ExecutionContext(this.weightMap, tensorArrayMap, tensorListMap, this.functionExecutorMap, this.parseNodeNameCache);\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap = this.cloneTensorMap(this.weightMap);\n }\n // Graph with control flow op requires runtime evaluation of the execution\n // order, while without control flow the execution order is pre-determined\n // in the compile method.\n const tensorsMap = await this.executeWithControlFlow(inputs, context, outputs, isFunctionExecution);\n const results = outputs.map(name => getTensor(name, tensorsMap, context));\n // dispose all the intermediate tensors\n const outputIds = results.map(t => t.id);\n const inputIds = Object.keys(inputs).map(name => inputs[name].id);\n const keepIds = new Set([...outputIds, ...inputIds, ...this.weightIds]);\n Object.values(tensorsMap).forEach(tensorsList => {\n tensorsList.forEach(tensor => {\n if (tensor && !tensor.isDisposed && !keepIds.has(tensor.id)) {\n tensor.dispose();\n }\n });\n });\n // dispose the context for the root executor\n if (this.parent == null) {\n context.dispose(keepIds);\n }\n return results;\n }\n async executeFunctionAsync(inputs, tensorArrayMap, tensorListMap) {\n const mappedInputs = inputs.reduce((map, tensor, index) => {\n map[this.inputs[index].name] = tensor;\n return map;\n }, {});\n return this._executeAsync(mappedInputs, this.outputNodes, true, tensorArrayMap, tensorListMap);\n }\n /**\n * When there are control flow nodes in the graph, the graph execution use\n * ExecutionContext to keep track of the frames and loop iterators.\n * @param inputs placeholder tensors for the graph.\n * @param context the execution context object for current execution.\n * @param outputNames Optional. output node name from the Tensorflow model,\n * if no outputs are specified, the default outputs of the model would be\n * used. You can inspect intermediate nodes of the model by adding them to\n * the outputs array.\n * @param isFunctionExecution Flag for executing a function.\n */\n async executeWithControlFlow(inputs, context, outputNames, isFunctionExecution) {\n const names = Object.keys(inputs);\n const inputNodes = names.map(name => this.graph.nodes[parseNodeName(name)[0]]);\n const outputNodeNames = outputNames.map(name => parseNodeName(name)[0]);\n const outputNodeNameSet = new Set(outputNodeNames);\n let outputNodes = outputNodeNames.map(name => this.graph.nodes[name]);\n // If no outputs are specified, then use the default outputs of the model.\n if (outputNodes.length === 0) {\n outputNodes = this._outputs;\n }\n const { usedNodes, missingInputs, dynamicNode, syncInputs } = getExecutionSubgraph(inputs, outputNodes, this.weightMap, this._initNodes);\n // First nodes to execute include inputNodes, weights, and initNodes.\n const stack = [\n ...inputNodes, ...this.graph.weights, ...(this._initNodes || [])\n ].map(node => {\n return { node, contexts: context.currentContext };\n });\n const tensorsMap = Object.assign({}, this.weightMap);\n Object.keys(inputs).forEach(name => {\n const [nodeName, index] = parseNodeName(name);\n const tensors = [];\n tensors[index] = inputs[name];\n tensorsMap[nodeName] = tensors;\n });\n const intermediateTensorConsumerCount = {};\n const tensorsToKeep = this.getFrozenTensorIds(tensorsMap);\n const added = {};\n while (stack.length > 0) {\n const promises = this.processStack(inputNodes, stack, context, tensorsMap, added, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount, usedNodes);\n await Promise.all(promises);\n }\n if (dynamicNode == null && !isFunctionExecution) {\n console.warn(`This model execution did not contain any nodes with control flow ` +\n `or dynamic output shapes. You can use model.execute() instead.`);\n }\n const missingOutputs = outputNodes\n .filter(node => !isControlFlow(node) &&\n !getTensor(node.name, tensorsMap, context))\n .map(node => node.name);\n if (missingOutputs.length > 0) {\n let alternativeMsg = '';\n if (dynamicNode != null) {\n alternativeMsg =\n `Alternatively, to avoid the dynamic ops, use model.execute() ` +\n `and specify the inputs [${syncInputs}]`;\n }\n throw new Error(`Cannot compute the outputs [${missingOutputs}] from the provided ` +\n `inputs [${names}]. Consider providing the following inputs: ` +\n `[${missingInputs}]. ${alternativeMsg}`);\n }\n return tensorsMap;\n }\n processStack(inputNodes, stack, context, tensorMap, added, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount, usedNodes) {\n const promises = [];\n while (stack.length > 0) {\n const item = stack.pop();\n context.currentContext = item.contexts;\n let nodeName = '';\n // The tensor of the Enter op with isConstant set should be set\n // in the parent scope, so it will be available as constant for the\n // whole loop.\n if (item.node.op === 'Enter' &&\n getParamValue('isConstant', item.node, tensorMap, context)) {\n [nodeName] = getNodeNameAndIndex(item.node.name, context);\n }\n // only process nodes that are not in the tensorMap yet, this include\n // inputNodes and internal initNodes.\n if (tensorMap[item.node.name] == null) {\n const tensors = executeOp(item.node, tensorMap, context, this._resourceManager);\n if (!nodeName) {\n [nodeName] = getNodeNameAndIndex(item.node.name, context);\n }\n const currentContext = context.currentContext;\n if (util.isPromise(tensors)) {\n promises.push(tensors.then(t => {\n tensorMap[nodeName] = t;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(t);\n }\n context.currentContext = currentContext;\n this.checkTensorForDisposal(nodeName, item.node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount);\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n return t;\n }));\n }\n else {\n tensorMap[nodeName] = tensors;\n if (this.keepIntermediateTensors) {\n this.clonedTensorsMap[nodeName] = this.cloneTensorList(tensors);\n }\n this.checkTensorForDisposal(nodeName, item.node, tensorMap, context, tensorsToKeep, outputNodeNameSet, intermediateTensorConsumerCount);\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n }\n }\n else {\n this.processChildNodes(item.node, stack, context, tensorMap, added, usedNodes);\n }\n }\n return promises;\n }\n processChildNodes(node, stack, context, tensorMap, added, usedNodes) {\n node.children.forEach((childNode) => {\n const [nodeName,] = getNodeNameAndIndex(childNode.name, context);\n if (added[nodeName] || !usedNodes.has(childNode.name)) {\n return;\n }\n // Merge op can be pushed if any of its inputs has value.\n if (childNode.op === 'Merge') {\n if (childNode.inputNames.some(name => {\n return !!getTensor(name, tensorMap, context);\n })) {\n added[nodeName] = true;\n stack.push({ contexts: context.currentContext, node: childNode });\n }\n }\n else // Otherwise all inputs must to have value.\n if (childNode.inputNames.every(name => {\n return !!getTensor(name, tensorMap, context);\n })) {\n added[nodeName] = true;\n stack.push({ contexts: context.currentContext, node: childNode });\n }\n });\n }\n /**\n * Releases the memory used by the weight tensors.\n */\n dispose() {\n Object.keys(this.weightMap)\n .forEach(key => this.weightMap[key].forEach(tensor => tensor.dispose()));\n }\n checkInputShapeAndType(inputs) {\n Object.keys(inputs).forEach(name => {\n const input = inputs[name];\n const [nodeName,] = parseNodeName(name);\n const node = this.graph.nodes[nodeName];\n if (node.attrParams['shape'] && node.attrParams['shape'].value) {\n const shape = node.attrParams['shape'].value;\n const match = shape.length === input.shape.length &&\n input.shape.every((dim, index) => shape[index] === -1 || shape[index] === dim);\n util.assert(match, () => `The shape of dict['${node.name}'] provided in ` +\n `model.execute(dict) must be [${shape}], but was ` +\n `[${input.shape}]`);\n }\n if (node.attrParams['dtype'] && node.attrParams['dtype'].value) {\n util.assert(input.dtype === node.attrParams['dtype'].value, () => `The dtype of dict['${node.name}'] provided in ` +\n `model.execute(dict) must be ` +\n `${node.attrParams['dtype'].value}, but was ${input.dtype}`);\n }\n });\n }\n mapInputs(inputs) {\n var _a, _b;\n const result = {};\n for (const inputName in inputs) {\n const tensor = (_b = (_a = this._signature) === null || _a === void 0 ? void 0 : _a.inputs) === null || _b === void 0 ? void 0 : _b[inputName];\n if (tensor != null) {\n result[tensor.name] = inputs[inputName];\n }\n else {\n result[inputName] = inputs[inputName];\n }\n }\n return result;\n }\n checkInputs(inputs) {\n const notInGraph = Object.keys(inputs).filter(name => {\n const [nodeName] = parseNodeName(name);\n return this.graph.nodes[nodeName] == null;\n });\n if (notInGraph.length > 0) {\n throw new Error(`The dict provided in model.execute(dict) has ` +\n `keys: [${notInGraph}] that are not part of graph`);\n }\n }\n mapOutputs(outputs) {\n return outputs.map(name => {\n var _a, _b;\n const tensor = (_b = (_a = this._signature) === null || _a === void 0 ? void 0 : _a.outputs) === null || _b === void 0 ? void 0 : _b[name];\n if (tensor != null) {\n return tensor.name;\n }\n return name;\n }, {});\n }\n checkOutputs(outputs) {\n outputs.forEach(name => {\n const [normalizedName] = parseNodeName(name);\n if (!this.graph.nodes[normalizedName]) {\n throw new Error(`The output '${name}' is not found in the graph`);\n }\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZ3JhcGhfZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFXLEdBQUcsRUFBRSxJQUFJLEVBQTBCLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk5RixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN4SSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHM0QsT0FBTyxFQUFDLGdCQUFnQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQVN0SCxNQUFNLE9BQU8sYUFBYTtJQWdCeEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUEwQjtRQUN0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FDeEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksZUFBZSxDQUFDLGVBQWdDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFpQixDQUFDLENBQUM7b0JBQzVDLFNBQVM7Z0JBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFpQixDQUFDLENBQUM7b0JBQzVDLFNBQVM7YUFDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWlCLENBQUMsQ0FBQztvQkFDNUMsU0FBUztnQkFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWlCLENBQUMsQ0FBQztvQkFDNUMsU0FBUzthQUNkLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzFDLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQW9DLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFlBQW9CLEtBQVksRUFBVSxNQUFzQjtRQUE1QyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFqR3hELGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQTJDLENBQUM7UUFDakUsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDbEUsZUFBVSxHQUFvQixFQUFFLENBQUM7UUFNakMsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNoQixlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUN4Qyx5QkFBb0IsR0FBc0MsRUFBRSxDQUFDO1FBRzdELDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQXFGdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyw2QkFBNkI7UUFDN0IsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7b0JBQzNCLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsT0FBZTtRQUN2RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJO1lBQzNDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ssT0FBTyxDQUFDLE1BQXNCLEVBQUUsT0FBZTtRQUVyRCxNQUFNLGFBQWEsR0FDZixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sRUFBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLGFBQWEsQ0FBQztRQUMvRCxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxxQ0FBcUMsV0FBVyxDQUFDLElBQUksZUFBZTtnQkFDcEUsbUJBQW1CLFdBQVcsQ0FBQyxFQUFFLGdCQUFnQjtnQkFDakQsNERBQTREO2dCQUM1RCxvQ0FBb0MsVUFBVSxHQUFHLENBQUMsQ0FBQztTQUN4RDtRQUVELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ1gsK0JBQStCLFFBQVEsNkJBQTZCO2dCQUNwRSxJQUFJLE9BQU8scUNBQXFDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDdkU7UUFFRCxNQUFNLFlBQVksR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFjO1FBQ3ZDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLCtEQUErRDtRQUMvRCwrREFBK0Q7UUFDL0QsUUFBUTtRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNaLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFpQjtRQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQTJCO1FBQ2hELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPLENBQUMsTUFBc0IsRUFBRSxPQUFrQjtRQUNoRCw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUNaLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLDBFQUEwRTtRQUMxRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVCLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQzdCO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV2RSw2REFBNkQ7UUFDN0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSTtZQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUMzRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QjtRQUNELE1BQU0sY0FBYyxHQUFtQixFQUFFLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQWtCLEVBQUUsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUNoQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQzdDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN2RCxNQUFNLFVBQVUscUJBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUMvQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2pFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBQyxHQUFHLFdBQVcsQ0FBQztZQUNyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtnQkFDL0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN6QixTQUFTO2lCQUNWO2dCQUNELE1BQU0sT0FBTyxHQUNULFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQ2xELENBQUM7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUMzQixNQUFNLElBQUksS0FBSyxDQUNYLDRCQUE0QixJQUFJLENBQUMsRUFBRSx3QkFBd0I7d0JBQzNELDBDQUEwQyxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNsRTtnQkFDRCxJQUFJLENBQUMsMkNBQTJDLENBQzVDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFDM0QsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1lBRUQsNENBQTRDO1lBQzVDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDaEM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQTBCO1FBQ25ELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2QixFQUFFLEVBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDakIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVPLHNCQUFzQixDQUMxQixRQUFnQixFQUFFLElBQVUsRUFBRSxTQUEwQixFQUN4RCxPQUF5QixFQUFFLGFBQTBCLEVBQ3JELGlCQUE4QixFQUM5QiwrQkFBd0Q7UUFDMUQsd0VBQXdFO1FBQ3hFLDZCQUE2QjtRQUM3QixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDMUQsT0FBTztTQUNSO1FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUNsQixTQUFTO2FBQ1Y7WUFDRCwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQzFCO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9CLHVFQUF1RTtZQUN2RSxhQUFhO1lBQ2IsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVM7YUFDVjtZQUVELE1BQU0sT0FBTyxHQUNULDJCQUEyQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDbkIsU0FBUzthQUNWO1lBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDMUQsU0FBUztpQkFDVjtnQkFFRCxrRUFBa0U7Z0JBQ2xFLG9DQUFvQztnQkFDcEMsbUVBQW1FO2dCQUNuRSxzRUFBc0U7Z0JBQ3RFLE1BQU0sS0FBSyxHQUFHLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUNmLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakIsT0FBTywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25EO3FCQUFNLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtvQkFDeEIsK0JBQStCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQzlDO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTywyQ0FBMkMsQ0FDL0MsSUFBVSxFQUFFLFNBQTBCLEVBQUUsT0FBeUIsRUFDakUsYUFBMEIsRUFBRSxpQkFBOEIsRUFDMUQsY0FBdUI7UUFDekIsU0FBUyxtQkFBbUIsQ0FBQyxJQUFVO1lBQ3JDLHdFQUF3RTtZQUN4RSw2QkFBNkI7WUFDN0IsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxJQUFJLElBQUksRUFBRTtZQUNqRCxPQUFPO1NBQ1I7UUFFRCxLQUFLLE1BQU0sYUFBYSxJQUFJLGNBQWMsRUFBRTtZQUMxQyxJQUFJLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN0QyxTQUFTO2FBQ1Y7WUFDRCxNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FDdkMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDMUQsU0FBUztpQkFDVjtnQkFDRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDbEI7U0FDRjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBc0IsRUFBRSxPQUFrQjtRQUUzRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRTtnQkFDaEMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO29CQUNoQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2xCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQ3ZCLE1BQXNCLEVBQUUsT0FBa0IsRUFBRSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3ZFLGlCQUFpQyxFQUFFLEVBQ25DLGdCQUErQixFQUFFO1FBQ25DLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QjtRQUVELG1EQUFtRDtRQUNuRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzNFO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsMEVBQTBFO1FBQzFFLDBFQUEwRTtRQUMxRSx5QkFBeUI7UUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQ2hELE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFMUUsdUNBQXVDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxPQUFPLEdBQ1QsSUFBSSxHQUFHLENBQVMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNCLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUMzRCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUI7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN0QixNQUFnQixFQUFFLGNBQThCLEVBQ2hELGFBQTRCO1FBQzlCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN0QyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7UUFFekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ssS0FBSyxDQUFDLHNCQUFzQixDQUNoQyxNQUFzQixFQUFFLE9BQXlCLEVBQUUsV0FBc0IsRUFDekUsbUJBQTZCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQ1osS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxXQUFXLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdEUsMEVBQTBFO1FBQzFFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDN0I7UUFFRCxNQUFNLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQ3JELG9CQUFvQixDQUNoQixNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlELHFFQUFxRTtRQUNyRSxNQUFNLEtBQUssR0FBdUI7WUFDaEMsR0FBRyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7U0FDakUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDWCxPQUFPLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUscUJBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSwrQkFBK0IsR0FBNEIsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBNkIsRUFBRSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDOUIsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQzVELGlCQUFpQixFQUFFLCtCQUErQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QjtRQUNELElBQUksV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQ1IsbUVBQW1FO2dCQUNuRSxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsTUFBTSxjQUFjLEdBQ2hCLFdBQVc7YUFDTixNQUFNLENBQ0gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbEQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDdkIsY0FBYztvQkFDViwrREFBK0Q7d0JBQy9ELDJCQUEyQixVQUFVLEdBQUcsQ0FBQzthQUM5QztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ1gsK0JBQStCLGNBQWMsc0JBQXNCO2dCQUNuRSxXQUFXLEtBQUssOENBQThDO2dCQUM5RCxJQUFJLGFBQWEsTUFBTSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLFlBQVksQ0FDaEIsVUFBa0IsRUFBRSxLQUF5QixFQUFFLE9BQXlCLEVBQ3hFLFNBQTBCLEVBQUUsS0FBK0IsRUFDM0QsYUFBMEIsRUFBRSxpQkFBOEIsRUFDMUQsK0JBQXdELEVBQ3hELFNBQXNCO1FBQ3hCLE1BQU0sUUFBUSxHQUE2QixFQUFFLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQiwrREFBK0Q7WUFDL0QsbUVBQW1FO1lBQ25FLGNBQWM7WUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU87Z0JBQ3hCLGFBQWEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQzlELENBQUMsUUFBUSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDM0Q7WUFFRCxxRUFBcUU7WUFDckUscUNBQXFDO1lBQ3JDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNyQyxNQUFNLE9BQU8sR0FDVCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLENBQUMsUUFBUSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQzNEO2dCQUNELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUM3QixTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTs0QkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzNEO3dCQUNELE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUN0RCxpQkFBaUIsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLENBQUMsaUJBQWlCLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUM1RCxPQUFPLENBQUMsQ0FBQztvQkFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNMO3FCQUFNO29CQUNMLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7b0JBQzlCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO3dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDakU7b0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFDdEQsaUJBQWlCLEVBQUUsK0JBQStCLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsaUJBQWlCLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzdEO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8saUJBQWlCLENBQ3JCLElBQVUsRUFBRSxLQUF5QixFQUFFLE9BQXlCLEVBQ2hFLFNBQTBCLEVBQUUsS0FBK0IsRUFDM0QsU0FBc0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNsQyxNQUFNLENBQUMsUUFBUSxFQUFHLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyRCxPQUFPO2FBQ1I7WUFDRCx5REFBeUQ7WUFDekQsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRTtnQkFDNUIsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxFQUFFO29CQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztpQkFDakU7YUFDRjtpQkFBTywyQ0FBMkM7YUFDL0MsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO2FBQ2pFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQ3RCLE9BQU8sQ0FDSixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBc0I7UUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxRQUFRLEVBQUcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWlCLENBQUM7Z0JBQ3pELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUM3QyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDYixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxFQUNMLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixJQUFJLENBQUMsSUFBSSxpQkFBaUI7b0JBQ2xELGdDQUFnQyxLQUFLLGFBQWE7b0JBQ2xELElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDN0I7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQzlELElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQWUsRUFDeEQsR0FBRyxFQUFFLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLGlCQUFpQjtvQkFDbEQsOEJBQThCO29CQUM5QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxhQUFhLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQXNCOztRQUN0QyxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRyxNQUFNLDBDQUFJLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2QztTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFzQjtRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNuRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLCtDQUErQztnQkFDL0MsVUFBVSxVQUFVLDhCQUE4QixDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQWlCO1FBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFHLE9BQU8sMENBQUksSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUNsQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDcEI7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxZQUFZLENBQUMsT0FBaUI7UUFDcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksNkJBQTZCLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTggR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RhdGFUeXBlLCBlbnYsIGtlZXAsIE5hbWVkVGVuc29yTWFwLCBUZW5zb3IsIHRpZHksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7SVNpZ25hdHVyZURlZn0gZnJvbSAnLi4vZGF0YS9jb21waWxlZF9hcGknO1xuaW1wb3J0IHtOYW1lZFRlbnNvcnNNYXAsIFRlbnNvckFycmF5TWFwLCBUZW5zb3JJbmZvLCBUZW5zb3JMaXN0TWFwfSBmcm9tICcuLi9kYXRhL3R5cGVzJztcbmltcG9ydCB7Z2V0Tm9kZU5hbWVBbmRJbmRleCwgZ2V0UGFyYW1WYWx1ZSwgZ2V0VGVuc29yLCBnZXRUZW5zb3JzRm9yQ3VycmVudENvbnRleHQsIHBhcnNlTm9kZU5hbWV9IGZyb20gJy4uL29wZXJhdGlvbnMvZXhlY3V0b3JzL3V0aWxzJztcbmltcG9ydCB7ZXhlY3V0ZU9wfSBmcm9tICcuLi9vcGVyYXRpb25zL29wZXJhdGlvbl9leGVjdXRvcic7XG5pbXBvcnQge0dyYXBoLCBOb2RlfSBmcm9tICcuLi9vcGVyYXRpb25zL3R5cGVzJztcblxuaW1wb3J0IHtFeGVjdXRpb25Db250ZXh0LCBFeGVjdXRpb25Db250ZXh0SW5mb30gZnJvbSAnLi9leGVjdXRpb25fY29udGV4dCc7XG5pbXBvcnQge2dldEV4ZWN1dGlvblN1YmdyYXBoLCBnZXROb2RlTGl2ZVVudGlsTWFwLCBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlciwgaXNDb250cm9sRmxvd30gZnJvbSAnLi9tb2RlbF9hbmFseXNpcyc7XG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSAnLi9yZXNvdXJjZV9tYW5hZ2VyJztcbmltcG9ydCB7RnVuY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBOb2RlV2l0aENvbnRleHRzIHtcbiAgY29udGV4dHM6IEV4ZWN1dGlvbkNvbnRleHRJbmZvW107XG4gIG5vZGU6IE5vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaEV4ZWN1dG9yIGltcGxlbWVudHMgRnVuY3Rpb25FeGVjdXRvciB7XG4gIHByaXZhdGUgY29tcGlsZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jb21waWxlPj4oKTtcbiAgcHJpdmF0ZSBwYXJzZU5vZGVOYW1lQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgW3N0cmluZywgbnVtYmVyLCBzdHJpbmc/XT4oKTtcbiAgcHJpdmF0ZSBfd2VpZ2h0TWFwOiBOYW1lZFRlbnNvcnNNYXAgPSB7fTtcbiAgcHJpdmF0ZSBfd2VpZ2h0SWRzOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlOiBJU2lnbmF0dXJlRGVmO1xuICBwcml2YXRlIF9pbnB1dHM6IE5vZGVbXTtcbiAgcHJpdmF0ZSBfb3V0cHV0czogTm9kZVtdO1xuICBwcml2YXRlIF9pbml0Tm9kZXM6IE5vZGVbXTsgIC8vIEludGVybmFsIGluaXQgbm9kZXMgdG8gc3RhcnQgaW5pdGlhbGl6YXRpb24uXG4gIHByaXZhdGUgU0VQQVJBVE9SID0gJywnO1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHtba2V5OiBzdHJpbmddOiBHcmFwaH0gPSB7fTtcbiAgcHJpdmF0ZSBfZnVuY3Rpb25FeGVjdXRvck1hcDoge1trZXk6IHN0cmluZ106IEZ1bmN0aW9uRXhlY3V0b3J9ID0ge307XG4gIHByaXZhdGUgX3Jlc291cmNlTWFuYWdlcjogUmVzb3VyY2VNYW5hZ2VyO1xuICBwcml2YXRlIGNsb25lZFRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcDtcbiAgcHJpdmF0ZSBrZWVwSW50ZXJtZWRpYXRlVGVuc29ycyA9IGZhbHNlO1xuXG4gIGdldCB3ZWlnaHRJZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LndlaWdodElkcyA6IHRoaXMuX3dlaWdodElkcztcbiAgfVxuXG4gIGdldCBmdW5jdGlvbkV4ZWN1dG9yTWFwKCk6IHtba2V5OiBzdHJpbmddOiBGdW5jdGlvbkV4ZWN1dG9yfSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZnVuY3Rpb25FeGVjdXRvck1hcCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVuY3Rpb25FeGVjdXRvck1hcDtcbiAgfVxuXG4gIGdldCB3ZWlnaHRNYXAoKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC53ZWlnaHRNYXAgOiB0aGlzLl93ZWlnaHRNYXA7XG4gIH1cblxuICBzZXQgd2VpZ2h0TWFwKHdlaWdodE1hcDogTmFtZWRUZW5zb3JzTWFwKSB7XG4gICAgY29uc3Qgd2VpZ2h0SWRzID0gT2JqZWN0LmtleXMod2VpZ2h0TWFwKS5tYXAoXG4gICAgICAgIGtleSA9PiB3ZWlnaHRNYXBba2V5XS5tYXAodGVuc29yID0+IHRlbnNvci5pZCkpO1xuICAgIHRoaXMuX3dlaWdodElkcyA9IFtdLmNvbmNhdCguLi53ZWlnaHRJZHMpO1xuICAgIHRoaXMuX3dlaWdodE1hcCA9IHdlaWdodE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYFJlc291cmNlTWFuYWdlcmAgc2hhcmVkIGJ5IGV4ZWN1dG9ycyBvZiBhIG1vZGVsLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VNYW5hZ2VyOiBgUmVzb3VyY2VNYW5hZ2VyYCBvZiB0aGUgYEdyYXBoTW9kZWxgLlxuICAgKi9cbiAgc2V0IHJlc291cmNlTWFuYWdlcihyZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcikge1xuICAgIHRoaXMuX3Jlc291cmNlTWFuYWdlciA9IHJlc291cmNlTWFuYWdlcjtcbiAgfVxuXG4gIGdldCBpbnB1dHMoKTogVGVuc29ySW5mb1tdIHtcbiAgICByZXR1cm4gdGhpcy5faW5wdXRzLm1hcChub2RlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgc2hhcGU6IG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXSA/XG4gICAgICAgICAgICBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUgYXMgbnVtYmVyW10gOlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBkdHlwZTogbm9kZS5hdHRyUGFyYW1zWydkdHlwZSddID9cbiAgICAgICAgICAgIG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSBhcyBEYXRhVHlwZSA6XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgb3V0cHV0cygpOiBUZW5zb3JJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzLm1hcChub2RlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgc2hhcGU6IG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXSA/XG4gICAgICAgICAgICBub2RlLmF0dHJQYXJhbXNbJ3NoYXBlJ10udmFsdWUgYXMgbnVtYmVyW10gOlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBkdHlwZTogbm9kZS5hdHRyUGFyYW1zWydkdHlwZSddID9cbiAgICAgICAgICAgIG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSBhcyBEYXRhVHlwZSA6XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaW5wdXROb2RlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0cy5tYXAobm9kZSA9PiBub2RlLnNpZ25hdHVyZUtleSB8fCBub2RlLm5hbWUpO1xuICB9XG5cbiAgZ2V0IG91dHB1dE5vZGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cy5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnNpZ25hdHVyZUtleSB8fCBub2RlLm5hbWU7XG4gICAgICByZXR1cm4gbm9kZS5kZWZhdWx0T3V0cHV0ID8gKGAke25hbWV9OiR7bm9kZS5kZWZhdWx0T3V0cHV0fWApIDogbmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBmdW5jdGlvbnMoKToge1trZXk6IHN0cmluZ106IElTaWduYXR1cmVEZWZ9IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZnVuY3Rpb25zKS5yZWR1Y2UoKG1hcCwga2V5KSA9PiB7XG4gICAgICBtYXBba2V5XSA9IHRoaXMuX2Z1bmN0aW9uc1trZXldLnNpZ25hdHVyZTtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30gYXMge1trZXk6IHN0cmluZ106IElTaWduYXR1cmVEZWZ9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhcGggR3JhcGggdGhlIG1vZGVsIG9yIGZ1bmN0aW9uIGdyYXBoIHRvIGJlIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0gcGFyZW50IFdoZW4gYnVpbGRpbmcgZnVuY3Rpb24gZXhlY3RvciB5b3UgbmVlZCB0byBzZXQgdGhlIHBhcmVudFxuICAgKiBleGVjdXRvci4gU2luY2UgdGhlIHdlaWdodHMgYW5kIGZ1bmN0aW9uIGV4ZWN1dG9yIG1hcHMgYXJlIHNldCBhdCBwYXJhbnRcbiAgICogbGV2ZWwsIHRoYXQgZnVuY3Rpb24gZXhlY3V0b3IgY2FuIGFjY2VzcyB0aGUgZnVuY3Rpb24gbWFwcyBhbmQgd2VpZ2h0IG1hcHNcbiAgICogdGhyb3VnaCB0aGUgcGFyZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncmFwaDogR3JhcGgsIHByaXZhdGUgcGFyZW50PzogR3JhcGhFeGVjdXRvcikge1xuICAgIHRoaXMuX291dHB1dHMgPSBncmFwaC5vdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGdyYXBoLmlucHV0cztcbiAgICB0aGlzLl9pbml0Tm9kZXMgPSBncmFwaC5pbml0Tm9kZXM7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gZ3JhcGguc2lnbmF0dXJlO1xuICAgIHRoaXMuX2Z1bmN0aW9ucyA9IGdyYXBoLmZ1bmN0aW9ucztcbiAgICAvLyBjcmVhdGUgc3ViLWdyYXBoIGV4ZWN1dG9yc1xuICAgIGlmIChncmFwaC5mdW5jdGlvbnMgIT0gbnVsbCkge1xuICAgICAgT2JqZWN0LmtleXMoZ3JhcGguZnVuY3Rpb25zKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbkV4ZWN1dG9yTWFwW25hbWVdID1cbiAgICAgICAgICAgIG5ldyBHcmFwaEV4ZWN1dG9yKGdyYXBoLmZ1bmN0aW9uc1tuYW1lXSwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBpbGF0aW9uS2V5KGlucHV0czogTm9kZVtdLCBvdXRwdXRzOiBOb2RlW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvcnRlZElucHV0cyA9IGlucHV0cy5tYXAobm9kZSA9PiBub2RlLm5hbWUpLnNvcnQoKTtcbiAgICBjb25zdCBzb3J0ZWRPdXRwdXRzID0gb3V0cHV0cy5tYXAobm9kZSA9PiBub2RlLm5hbWUpLnNvcnQoKTtcbiAgICByZXR1cm4gc29ydGVkSW5wdXRzLmpvaW4odGhpcy5TRVBBUkFUT1IpICsgJy0tJyArXG4gICAgICAgIHNvcnRlZE91dHB1dHMuam9pbih0aGlzLlNFUEFSQVRPUik7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGlsZXMgdGhlIGluZmVyZW5jZSBncmFwaCBhbmQgcmV0dXJucyB0aGUgbWluaW1hbCBzZXQgb2Ygbm9kZXMgdGhhdCBhcmVcbiAgICogcmVxdWlyZWQgZm9yIGV4ZWN1dGlvbiwgaW4gdGhlIGNvcnJlY3QgZXhlY3V0aW9uIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBjb21waWxhdGlvbiBUaGUgY29tcGlsZSByZXN1bHQuXG4gICAqIEByZXR1cm5zIHtOb2RlW119IGNvbXBpbGF0aW9uLm9yZGVyZWROb2RlcyBOb2RlcyBpbiB0aGUgY29ycmVjdCBleGVjdXRpb25cbiAgICogICAgIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgTm9kZVtdPn0gY29tcGlsYXRpb24ubm9kZUxpdmVVbnRpbE1hcCBBIG1hcCBmcm9tIG5vZGVcbiAgICogICAgIHRvIGRpc3Bvc2FibGUgbm9kZXMgYWZ0ZXIgaXRzIGV4ZWN1dGlvbi4gVGhhdCBpcywgZm9yIGEgbm9kZSBgeGAsXG4gICAqICAgICBgbm9kZUxpdmVVbnRpbE1hcFt4XWAgaW5kaWNhdGVzIGFsbCBub2RlcyB3aG9zZSBpbnRlcm1lZGlhdGVcbiAgICogICAgIHRlbnNvcnMgc2hvdWxkIGJlIGRpc3Bvc2VkIGFmdGVyIGB4YCBpcyBleGVjdXRlZC5cbiAgICovXG4gIHByaXZhdGUgY29tcGlsZShpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzOiBOb2RlW10pOlxuICAgICAge29yZGVyZWROb2RlczogTm9kZVtdLCBub2RlTGl2ZVVudGlsTWFwOiBNYXA8c3RyaW5nLCBOb2RlW10+fSB7XG4gICAgY29uc3QgZXhlY3V0aW9uSW5mbyA9XG4gICAgICAgIGdldEV4ZWN1dGlvblN1YmdyYXBoKGlucHV0cywgb3V0cHV0cywgdGhpcy53ZWlnaHRNYXAsIHRoaXMuX2luaXROb2Rlcyk7XG4gICAgY29uc3Qge21pc3NpbmdJbnB1dHMsIGR5bmFtaWNOb2RlLCBzeW5jSW5wdXRzfSA9IGV4ZWN1dGlvbkluZm87XG4gICAgaWYgKGR5bmFtaWNOb2RlICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhpcyBleGVjdXRpb24gY29udGFpbnMgdGhlIG5vZGUgJyR7ZHluYW1pY05vZGUubmFtZX0nLCB3aGljaCBoYXMgYCArXG4gICAgICAgICAgYHRoZSBkeW5hbWljIG9wICcke2R5bmFtaWNOb2RlLm9wfScuIFBsZWFzZSB1c2UgYCArXG4gICAgICAgICAgYG1vZGVsLmV4ZWN1dGVBc3luYygpIGluc3RlYWQuIEFsdGVybmF0aXZlbHksIHRvIGF2b2lkIHRoZSBgICtcbiAgICAgICAgICBgZHluYW1pYyBvcHMsIHNwZWNpZnkgdGhlIGlucHV0cyBbJHtzeW5jSW5wdXRzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAobWlzc2luZ0lucHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBvdXROYW1lcyA9IG91dHB1dHMubWFwKG4gPT4gbi5uYW1lKTtcbiAgICAgIGNvbnN0IGluTmFtZXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY29tcHV0ZSB0aGUgb3V0cHV0cyBbJHtvdXROYW1lc31dIGZyb20gdGhlIHByb3ZpZGVkIGlucHV0cyBgICtcbiAgICAgICAgICBgWyR7aW5OYW1lc31dLiBNaXNzaW5nIHRoZSBmb2xsb3dpbmcgaW5wdXRzOiBbJHttaXNzaW5nSW5wdXRzfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkTm9kZXMgPSBnZXROb2Rlc0luVG9wb2xvZ2ljYWxPcmRlcih0aGlzLmdyYXBoLCBleGVjdXRpb25JbmZvKTtcbiAgICBjb25zdCBub2RlTGl2ZVVudGlsTWFwID0gZ2V0Tm9kZUxpdmVVbnRpbE1hcChvcmRlcmVkTm9kZXMpO1xuICAgIHJldHVybiB7b3JkZXJlZE5vZGVzLCBub2RlTGl2ZVVudGlsTWFwfTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVBbmRLZWVwVGVuc29yKHRlbnNvcjogVGVuc29yKSB7XG4gICAgaWYgKHRlbnNvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2xvbmUgPSB0ZW5zb3IuY2xvbmUoKTtcbiAgICAvLyBLZWVwIHRoZSBjbG9uZSBiZWNhdXNlYG1vZGVsLmV4ZWN1dGUoKWAgbWF5IGJlIGNhbGxlZCB3aXRoaW5cbiAgICAvLyBhIGB0aWR5KClgLCBidXQgdGhlIHVzZXIgbWF5IGluc3BlY3QgdGhlc2UgdGVuc29ycyBhZnRlciB0aGVcbiAgICAvLyB0aWR5LlxuICAgIGtlZXAoY2xvbmUpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVUZW5zb3JMaXN0KHRlbnNvcnM6IFRlbnNvcltdKSB7XG4gICAgaWYgKCF0ZW5zb3JzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY2xvbmVkVGVuc29yID0gdGVuc29ycy5tYXAodGVuc29yID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNsb25lQW5kS2VlcFRlbnNvcih0ZW5zb3IpO1xuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWRUZW5zb3I7XG4gIH1cblxuICBwcml2YXRlIGNsb25lVGVuc29yTWFwKHRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcCk6IE5hbWVkVGVuc29yc01hcCB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGVuc29yc01hcCkubWFwKChbbmFtZSwgdGVuc29yc0xpc3RdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtuYW1lLCB0aGlzLmNsb25lVGVuc29yTGlzdCh0ZW5zb3JzTGlzdCldO1xuICAgICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGluZmVyZW5jZSBmb3IgZ2l2ZW4gaW5wdXQgdGVuc29ycy5cbiAgICogQHBhcmFtIGlucHV0cyBUZW5zb3IgbWFwIGZvciB0aGUgbW9kZWwgaW5wdXRzLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZVxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgT3B0aW9uYWwuIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCwgaWZcbiAgICogbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZSB1c2VkLlxuICAgKiBZb3UgY2FuIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0byB0aGVcbiAgICogb3V0cHV0cyBhcnJheS5cbiAgICovXG4gIGV4ZWN1dGUoaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgb3V0cHV0cz86IHN0cmluZ1tdKTogVGVuc29yW10ge1xuICAgIC8vIERpc3Bvc2UgYW55IHRlbnNvcnMgZnJvbSBhIHByaW9yIHJ1biB0byBhdm9pZCBsZWFraW5nIHRoZW0uXG4gICAgdGhpcy5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ycygpO1xuICAgIGlucHV0cyA9IHRoaXMubWFwSW5wdXRzKGlucHV0cyk7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLnNvcnQoKTtcbiAgICB0aGlzLmNoZWNrSW5wdXRzKGlucHV0cyk7XG4gICAgdGhpcy5jaGVja0lucHV0U2hhcGVBbmRUeXBlKGlucHV0cyk7XG4gICAgb3V0cHV0cyA9IHRoaXMubWFwT3V0cHV0cyhvdXRwdXRzKTtcbiAgICB0aGlzLmNoZWNrT3V0cHV0cyhvdXRwdXRzKTtcbiAgICBjb25zdCBpbnB1dE5vZGVzID1cbiAgICAgICAgbmFtZXMubWFwKG5hbWUgPT4gdGhpcy5ncmFwaC5ub2Rlc1twYXJzZU5vZGVOYW1lKG5hbWUpWzBdXSk7XG4gICAgY29uc3Qgb3V0cHV0Tm9kZU5hbWVzID0gb3V0cHV0cy5tYXAobmFtZSA9PiBwYXJzZU5vZGVOYW1lKG5hbWUpWzBdKTtcbiAgICBjb25zdCBvdXRwdXROb2RlTmFtZVNldCA9IG5ldyBTZXQob3V0cHV0Tm9kZU5hbWVzKTtcbiAgICBsZXQgb3V0cHV0Tm9kZXMgPSBvdXRwdXROb2RlTmFtZXMubWFwKG5hbWUgPT4gdGhpcy5ncmFwaC5ub2Rlc1tuYW1lXSk7XG4gICAgLy8gSWYgbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGVuIHVzZSB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbC5cbiAgICBpZiAob3V0cHV0Tm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBvdXRwdXROb2RlcyA9IHRoaXMuX291dHB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGlsYXRpb25LZXkgPSB0aGlzLmdldENvbXBpbGF0aW9uS2V5KGlucHV0Tm9kZXMsIG91dHB1dE5vZGVzKTtcblxuICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIGNvbXBpbGVkIGdyYXBoIGNhY2hlIGNvbnRhaW5zIHRoZSBpbnB1dC5cbiAgICBsZXQgY29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGVkTWFwLmdldChjb21waWxhdGlvbktleSk7XG4gICAgaWYgKGNvbXBpbGF0aW9uID09IG51bGwpIHtcbiAgICAgIGNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxlKGlucHV0cywgb3V0cHV0Tm9kZXMpO1xuICAgICAgdGhpcy5jb21waWxlZE1hcC5zZXQoY29tcGlsYXRpb25LZXksIGNvbXBpbGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRlbnNvcnMgaWYgS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUyBpcyBvbi5cbiAgICB0cnkge1xuICAgICAgdGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycyA9IGVudigpLmdldEJvb2woJ0tFRVBfSU5URVJNRURJQVRFX1RFTlNPUlMnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzID0gZmFsc2U7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICB9XG4gICAgY29uc3QgdGVuc29yQXJyYXlNYXA6IFRlbnNvckFycmF5TWFwID0ge307XG4gICAgY29uc3QgdGVuc29yTGlzdE1hcDogVGVuc29yTGlzdE1hcCA9IHt9O1xuXG4gICAgcmV0dXJuIHRpZHkoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgIHRoaXMud2VpZ2h0TWFwLCB0ZW5zb3JBcnJheU1hcCwgdGVuc29yTGlzdE1hcCxcbiAgICAgICAgICB0aGlzLmZ1bmN0aW9uRXhlY3V0b3JNYXAsIHRoaXMucGFyc2VOb2RlTmFtZUNhY2hlKTtcbiAgICAgIGNvbnN0IHRlbnNvcnNNYXA6IE5hbWVkVGVuc29yc01hcCA9IHsuLi50aGlzLndlaWdodE1hcH07XG4gICAgICBpZiAodGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycykge1xuICAgICAgICB0aGlzLmNsb25lZFRlbnNvcnNNYXAgPSB0aGlzLmNsb25lVGVuc29yTWFwKHRoaXMud2VpZ2h0TWFwKTtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBjb25zdCBbbm9kZU5hbWUsIGluZGV4XSA9IHBhcnNlTm9kZU5hbWUobmFtZSwgY29udGV4dCk7XG4gICAgICAgIGNvbnN0IHRlbnNvcnM6IFRlbnNvcltdID0gW107XG4gICAgICAgIHRlbnNvcnNbaW5kZXhdID0gaW5wdXRzW25hbWVdO1xuICAgICAgICB0ZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRlbnNvcnM7XG4gICAgICAgIGlmICh0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzKSB7XG4gICAgICAgICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRoaXMuY2xvbmVUZW5zb3JMaXN0KHRlbnNvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGVuc29yc1RvS2VlcCA9IHRoaXMuZ2V0RnJvemVuVGVuc29ySWRzKHRlbnNvcnNNYXApO1xuICAgICAgY29uc3Qge29yZGVyZWROb2Rlcywgbm9kZUxpdmVVbnRpbE1hcH0gPSBjb21waWxhdGlvbjtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBvcmRlcmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKHRlbnNvcnNNYXBbbm9kZS5uYW1lXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbnNvcnMgPVxuICAgICAgICAgICAgZXhlY3V0ZU9wKG5vZGUsIHRlbnNvcnNNYXAsIGNvbnRleHQsIHRoaXMuX3Jlc291cmNlTWFuYWdlcikgYXNcbiAgICAgICAgICAgIFRlbnNvcltdO1xuICAgICAgICBpZiAodXRpbC5pc1Byb21pc2UodGVuc29ycykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgZXhlY3V0aW9uIG9mIHRoZSBvcCAnJHtub2RlLm9wfScgcmV0dXJuZWQgYSBwcm9taXNlLiBgICtcbiAgICAgICAgICAgICAgYFBsZWFzZSB1c2UgbW9kZWwuZXhlY3V0ZUFzeW5jKCkgaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3JzTWFwW25vZGUubmFtZV0gPSB0ZW5zb3JzO1xuICAgICAgICBpZiAodGhpcy5rZWVwSW50ZXJtZWRpYXRlVGVuc29ycykge1xuICAgICAgICAgIHRoaXMuY2xvbmVkVGVuc29yc01hcFtub2RlLm5hbWVdID0gdGhpcy5jbG9uZVRlbnNvckxpc3QodGVuc29ycyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1RlbnNvckZvckRpc3Bvc2FsV2l0aE5vZGVMaXZlVW50aWxJbmZvKFxuICAgICAgICAgICAgbm9kZSwgdGVuc29yc01hcCwgY29udGV4dCwgdGVuc29yc1RvS2VlcCwgb3V0cHV0Tm9kZU5hbWVTZXQsXG4gICAgICAgICAgICBub2RlTGl2ZVVudGlsTWFwLmdldChub2RlLm5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gZGlzcG9zZSB0aGUgY29udGV4dCBmb3IgdGhlIHJvb3QgZXhlY3V0b3JcbiAgICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZGlzcG9zZSh0ZW5zb3JzVG9LZWVwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dHMubWFwKG5hbWUgPT4gZ2V0VGVuc29yKG5hbWUsIHRlbnNvcnNNYXAsIGNvbnRleHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RnJvemVuVGVuc29ySWRzKHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwKTogU2V0PG51bWJlcj4ge1xuICAgIGNvbnN0IGlkcyA9IFtdLmNvbmNhdC5hcHBseShcbiAgICAgICAgW10sXG4gICAgICAgIE9iamVjdC5rZXlzKHRlbnNvck1hcClcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHRlbnNvck1hcFtrZXldKVxuICAgICAgICAgICAgLm1hcCh0ZW5zb3JzID0+IHRlbnNvcnMubWFwKHRlbnNvciA9PiB0ZW5zb3IuaWQpKSk7XG4gICAgcmV0dXJuIG5ldyBTZXQoaWRzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tUZW5zb3JGb3JEaXNwb3NhbChcbiAgICAgIG5vZGVOYW1lOiBzdHJpbmcsIG5vZGU6IE5vZGUsIHRlbnNvck1hcDogTmFtZWRUZW5zb3JzTWFwLFxuICAgICAgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgdGVuc29yc1RvS2VlcDogU2V0PG51bWJlcj4sXG4gICAgICBvdXRwdXROb2RlTmFtZVNldDogU2V0PHN0cmluZz4sXG4gICAgICBpbnRlcm1lZGlhdGVUZW5zb3JDb25zdW1lckNvdW50OiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSkge1xuICAgIC8vIFNraXAgb3V0cHV0IG5vZGVzIGFuZCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpc1xuICAgIC8vIHRyaWNreSB0byB0cmFjayBjb3JyZWN0bHkuXG4gICAgaWYgKGlzQ29udHJvbEZsb3cobm9kZSkgfHwgb3V0cHV0Tm9kZU5hbWVTZXQuaGFzKG5vZGVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvck1hcFtub2RlTmFtZV0pIHtcbiAgICAgIGlmICh0ZW5zb3IgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXSA9XG4gICAgICAgICAgKGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXSB8fCAwKSArXG4gICAgICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBub2RlLmlucHV0cykge1xuICAgICAgLy8gU2tpcCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpcyB0cmlja3kgdG8gdHJhY2tcbiAgICAgIC8vIGNvcnJlY3RseS5cbiAgICAgIGlmIChpc0NvbnRyb2xGbG93KGlucHV0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVuc29ycyA9XG4gICAgICAgICAgZ2V0VGVuc29yc0ZvckN1cnJlbnRDb250ZXh0KGlucHV0Lm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICBpZiAodGVuc29ycyA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgICAgIGlmICghdGVuc29yIHx8IHRlbnNvci5rZXB0IHx8IHRlbnNvcnNUb0tlZXAuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgaW50ZXJtZWRpYXRlIG5vZGVzJyB0ZW5zb3JzIGhhdmUgY291bnRzIHNldCwgbm90IG1hcmtlZCBhc1xuICAgICAgICAvLyBrZXB0LCBhbmQgbm90IGluIGB0ZW5zb3JzVG9LZWVwYC5cbiAgICAgICAgLy8gSW5wdXQgYW5kIHdlaWdodCBub2RlcycgdGVuc29ycyBzaG91bGQgZXhpc3QgaW4gYHRlbnNvcnNUb0tlZXBgLlxuICAgICAgICAvLyBPdXRwdXQgYW5kIGNvbnRyb2wgZmxvdyBub2RlcycgdGVuc29ycyBzaG91bGQgbmV2ZXIgaGF2ZSBjb3VudCBzZXQuXG4gICAgICAgIGNvbnN0IGNvdW50ID0gaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudFt0ZW5zb3IuaWRdO1xuICAgICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgICAgIGRlbGV0ZSBpbnRlcm1lZGlhdGVUZW5zb3JDb25zdW1lckNvdW50W3RlbnNvci5pZF07XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnQgIT0gbnVsbCkge1xuICAgICAgICAgIGludGVybWVkaWF0ZVRlbnNvckNvbnN1bWVyQ291bnRbdGVuc29yLmlkXS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1RlbnNvckZvckRpc3Bvc2FsV2l0aE5vZGVMaXZlVW50aWxJbmZvKFxuICAgICAgbm9kZTogTm9kZSwgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICB0ZW5zb3JzVG9LZWVwOiBTZXQ8bnVtYmVyPiwgb3V0cHV0Tm9kZU5hbWVTZXQ6IFNldDxzdHJpbmc+LFxuICAgICAgbGl2ZVVudGlsTm9kZXM/OiBOb2RlW10pIHtcbiAgICBmdW5jdGlvbiBpc05vbkRpc3Bvc2FibGVOb2RlKG5vZGU6IE5vZGUpIHtcbiAgICAgIC8vIFNraXAgb3V0cHV0IG5vZGVzIGFuZCBhbnkgY29udHJvbCBmbG93IG5vZGVzLCBzaW5jZSBpdHMgZGVwZW5kZW5jeSBpc1xuICAgICAgLy8gdHJpY2t5IHRvIHRyYWNrIGNvcnJlY3RseS5cbiAgICAgIHJldHVybiBpc0NvbnRyb2xGbG93KG5vZGUpIHx8IG91dHB1dE5vZGVOYW1lU2V0Lmhhcyhub2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRyb2xGbG93KG5vZGUpIHx8IGxpdmVVbnRpbE5vZGVzID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVUb0Rpc3Bvc2Ugb2YgbGl2ZVVudGlsTm9kZXMpIHtcbiAgICAgIGlmIChpc05vbkRpc3Bvc2FibGVOb2RlKG5vZGVUb0Rpc3Bvc2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVuc29ycyA9IGdldFRlbnNvcnNGb3JDdXJyZW50Q29udGV4dChcbiAgICAgICAgICBub2RlVG9EaXNwb3NlLm5hbWUsIHRlbnNvck1hcCwgY29udGV4dCk7XG4gICAgICBmb3IgKGNvbnN0IHRlbnNvciBvZiB0ZW5zb3JzKSB7XG4gICAgICAgIGlmICghdGVuc29yIHx8IHRlbnNvci5rZXB0IHx8IHRlbnNvcnNUb0tlZXAuaGFzKHRlbnNvci5pZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0ZW5zb3IuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgaW5mZXJlbmNlIGZvciBnaXZlbiBpbnB1dCB0ZW5zb3JzIGluIEFzeW5jIGZhc2hpb24uXG4gICAqIEBwYXJhbSBpbnB1dHMgVGVuc29yIG1hcCBmb3IgdGhlIG1vZGVsIGlucHV0cywga2V5ZWQgYnkgdGhlIGlucHV0IG5vZGVcbiAgICogbmFtZXMuXG4gICAqIEBwYXJhbSBvdXRwdXRzIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCwgaWYgbm8gb3V0cHV0c1xuICAgKiBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZSB1c2VkLiBZb3UgY2FuXG4gICAqIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0byB0aGUgb3V0cHV0c1xuICAgKiBhcnJheS5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBc3luYyhpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzPzogc3RyaW5nW10pOlxuICAgICAgUHJvbWlzZTxUZW5zb3JbXT4ge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRlQXN5bmMoaW5wdXRzLCBvdXRwdXRzKTtcbiAgfVxuXG4gIGRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JzKCkge1xuICAgIGlmICghdGhpcy5jbG9uZWRUZW5zb3JzTWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jbG9uZWRUZW5zb3JzTWFwKS5mb3JFYWNoKHRlbnNvcnNMaXN0ID0+IHtcbiAgICAgIGZvciAoY29uc3QgdGVuc29yIG9mIHRlbnNvcnNMaXN0KSB7XG4gICAgICAgIGlmICh0ZW5zb3IgJiYgIXRlbnNvci5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwID0gbnVsbDtcbiAgfVxuXG4gIGdldEludGVybWVkaWF0ZVRlbnNvcnMoKTogTmFtZWRUZW5zb3JzTWFwIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZWRUZW5zb3JzTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBpbmZlcmVuY2UgZm9yIGdpdmVuIGlucHV0IHRlbnNvcnMgaW4gQXN5bmMgZmFzaGlvbi5cbiAgICogQHBhcmFtIGlucHV0cyBUZW5zb3IgbWFwIGZvciB0aGUgbW9kZWwgaW5wdXRzLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZVxuICAgKiBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgT3B0aW9uYWwuIG91dHB1dCBub2RlIG5hbWUgZnJvbSB0aGUgVGVuc29yZmxvdyBtb2RlbCxcbiAgICogaWYgbm8gb3V0cHV0cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvdXRwdXRzIG9mIHRoZSBtb2RlbCB3b3VsZCBiZVxuICAgKiB1c2VkLiBZb3UgY2FuIGluc3BlY3QgaW50ZXJtZWRpYXRlIG5vZGVzIG9mIHRoZSBtb2RlbCBieSBhZGRpbmcgdGhlbSB0b1xuICAgKiB0aGUgb3V0cHV0cyBhcnJheS5cbiAgICogQHBhcmFtIGlzRnVuY3Rpb25FeGVjdXRpb24gT3B0aW9uYWwuIEZsYWcgZm9yIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gdGVuc29yQXJyYXlNYXAgT3B0aW9uYWwsIGdsb2JhbCBUZW5zb3JBcnJheSBtYXAgYnkgaWQuIFVzZWQgZm9yXG4gICAqIGZ1bmN0aW9uIGV4ZWN1dGlvbi5cbiAgICogQHBhcmFtIHRlbnNvckFycmF5TWFwIE9wdGluYWwgZ2xvYmFsIFRlbnNvckxpc3QgbWFwIGJ5IGlkLiBVc2VkIGZvclxuICAgKiBmdW5jdGlvbiBleGVjdXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9leGVjdXRlQXN5bmMoXG4gICAgICBpbnB1dHM6IE5hbWVkVGVuc29yTWFwLCBvdXRwdXRzPzogc3RyaW5nW10sIGlzRnVuY3Rpb25FeGVjdXRpb24gPSBmYWxzZSxcbiAgICAgIHRlbnNvckFycmF5TWFwOiBUZW5zb3JBcnJheU1hcCA9IHt9LFxuICAgICAgdGVuc29yTGlzdE1hcDogVGVuc29yTGlzdE1hcCA9IHt9KTogUHJvbWlzZTxUZW5zb3JbXT4ge1xuICAgIC8vIERpc3Bvc2UgYW55IHRlbnNvcnMgZnJvbSBhIHByaW9yIHJ1biB0byBhdm9pZCBsZWFraW5nIHRoZW0uXG4gICAgdGhpcy5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ycygpO1xuICAgIGlmICghaXNGdW5jdGlvbkV4ZWN1dGlvbikge1xuICAgICAgaW5wdXRzID0gdGhpcy5tYXBJbnB1dHMoaW5wdXRzKTtcbiAgICAgIHRoaXMuY2hlY2tJbnB1dHMoaW5wdXRzKTtcbiAgICAgIHRoaXMuY2hlY2tJbnB1dFNoYXBlQW5kVHlwZShpbnB1dHMpO1xuICAgICAgb3V0cHV0cyA9IHRoaXMubWFwT3V0cHV0cyhvdXRwdXRzKTtcbiAgICAgIHRoaXMuY2hlY2tPdXRwdXRzKG91dHB1dHMpO1xuICAgIH1cblxuICAgIC8vIEtlZXAgdGVuc29ycyBpZiBLRUVQX0lOVEVSTUVESUFURV9URU5TT1JTIGlzIG9uLlxuICAgIHRyeSB7XG4gICAgICB0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzID0gZW52KCkuZ2V0Qm9vbCgnS0VFUF9JTlRFUk1FRElBVEVfVEVOU09SUycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMua2VlcEludGVybWVkaWF0ZVRlbnNvcnMgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRXhlY3V0aW9uQ29udGV4dChcbiAgICAgICAgdGhpcy53ZWlnaHRNYXAsIHRlbnNvckFycmF5TWFwLCB0ZW5zb3JMaXN0TWFwLCB0aGlzLmZ1bmN0aW9uRXhlY3V0b3JNYXAsXG4gICAgICAgIHRoaXMucGFyc2VOb2RlTmFtZUNhY2hlKTtcblxuICAgIGlmICh0aGlzLmtlZXBJbnRlcm1lZGlhdGVUZW5zb3JzKSB7XG4gICAgICB0aGlzLmNsb25lZFRlbnNvcnNNYXAgPSB0aGlzLmNsb25lVGVuc29yTWFwKHRoaXMud2VpZ2h0TWFwKTtcbiAgICB9XG5cbiAgICAvLyBHcmFwaCB3aXRoIGNvbnRyb2wgZmxvdyBvcCByZXF1aXJlcyBydW50aW1lIGV2YWx1YXRpb24gb2YgdGhlIGV4ZWN1dGlvblxuICAgIC8vIG9yZGVyLCB3aGlsZSB3aXRob3V0IGNvbnRyb2wgZmxvdyB0aGUgZXhlY3V0aW9uIG9yZGVyIGlzIHByZS1kZXRlcm1pbmVkXG4gICAgLy8gaW4gdGhlIGNvbXBpbGUgbWV0aG9kLlxuICAgIGNvbnN0IHRlbnNvcnNNYXAgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXaXRoQ29udHJvbEZsb3coXG4gICAgICAgIGlucHV0cywgY29udGV4dCwgb3V0cHV0cywgaXNGdW5jdGlvbkV4ZWN1dGlvbik7XG4gICAgY29uc3QgcmVzdWx0cyA9IG91dHB1dHMubWFwKG5hbWUgPT4gZ2V0VGVuc29yKG5hbWUsIHRlbnNvcnNNYXAsIGNvbnRleHQpKTtcblxuICAgIC8vIGRpc3Bvc2UgYWxsIHRoZSBpbnRlcm1lZGlhdGUgdGVuc29yc1xuICAgIGNvbnN0IG91dHB1dElkcyA9IHJlc3VsdHMubWFwKHQgPT4gdC5pZCk7XG4gICAgY29uc3QgaW5wdXRJZHMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLm1hcChuYW1lID0+IGlucHV0c1tuYW1lXS5pZCk7XG4gICAgY29uc3Qga2VlcElkcyA9XG4gICAgICAgIG5ldyBTZXQ8bnVtYmVyPihbLi4ub3V0cHV0SWRzLCAuLi5pbnB1dElkcywgLi4udGhpcy53ZWlnaHRJZHNdKTtcblxuICAgIE9iamVjdC52YWx1ZXModGVuc29yc01hcCkuZm9yRWFjaCh0ZW5zb3JzTGlzdCA9PiB7XG4gICAgICB0ZW5zb3JzTGlzdC5mb3JFYWNoKHRlbnNvciA9PiB7XG4gICAgICAgIGlmICh0ZW5zb3IgJiYgIXRlbnNvci5pc0Rpc3Bvc2VkICYmICFrZWVwSWRzLmhhcyh0ZW5zb3IuaWQpKSB7XG4gICAgICAgICAgdGVuc29yLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBkaXNwb3NlIHRoZSBjb250ZXh0IGZvciB0aGUgcm9vdCBleGVjdXRvclxuICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRpc3Bvc2Uoa2VlcElkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBhc3luYyBleGVjdXRlRnVuY3Rpb25Bc3luYyhcbiAgICAgIGlucHV0czogVGVuc29yW10sIHRlbnNvckFycmF5TWFwOiBUZW5zb3JBcnJheU1hcCxcbiAgICAgIHRlbnNvckxpc3RNYXA6IFRlbnNvckxpc3RNYXApOiBQcm9taXNlPFRlbnNvcltdPiB7XG4gICAgY29uc3QgbWFwcGVkSW5wdXRzID0gaW5wdXRzLnJlZHVjZSgobWFwLCB0ZW5zb3IsIGluZGV4KSA9PiB7XG4gICAgICBtYXBbdGhpcy5pbnB1dHNbaW5kZXhdLm5hbWVdID0gdGVuc29yO1xuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCB7fSBhcyBOYW1lZFRlbnNvck1hcCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXhlY3V0ZUFzeW5jKFxuICAgICAgICBtYXBwZWRJbnB1dHMsIHRoaXMub3V0cHV0Tm9kZXMsIHRydWUsIHRlbnNvckFycmF5TWFwLCB0ZW5zb3JMaXN0TWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZXJlIGFyZSBjb250cm9sIGZsb3cgbm9kZXMgaW4gdGhlIGdyYXBoLCB0aGUgZ3JhcGggZXhlY3V0aW9uIHVzZVxuICAgKiBFeGVjdXRpb25Db250ZXh0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGZyYW1lcyBhbmQgbG9vcCBpdGVyYXRvcnMuXG4gICAqIEBwYXJhbSBpbnB1dHMgcGxhY2Vob2xkZXIgdGVuc29ycyBmb3IgdGhlIGdyYXBoLlxuICAgKiBAcGFyYW0gY29udGV4dCB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2JqZWN0IGZvciBjdXJyZW50IGV4ZWN1dGlvbi5cbiAgICogQHBhcmFtIG91dHB1dE5hbWVzIE9wdGlvbmFsLiBvdXRwdXQgbm9kZSBuYW1lIGZyb20gdGhlIFRlbnNvcmZsb3cgbW9kZWwsXG4gICAqIGlmIG5vIG91dHB1dHMgYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgb3V0cHV0cyBvZiB0aGUgbW9kZWwgd291bGQgYmVcbiAgICogdXNlZC4gWW91IGNhbiBpbnNwZWN0IGludGVybWVkaWF0ZSBub2RlcyBvZiB0aGUgbW9kZWwgYnkgYWRkaW5nIHRoZW0gdG9cbiAgICogdGhlIG91dHB1dHMgYXJyYXkuXG4gICAqIEBwYXJhbSBpc0Z1bmN0aW9uRXhlY3V0aW9uIEZsYWcgZm9yIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlV2l0aENvbnRyb2xGbG93KFxuICAgICAgaW5wdXRzOiBOYW1lZFRlbnNvck1hcCwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgb3V0cHV0TmFtZXM/OiBzdHJpbmdbXSxcbiAgICAgIGlzRnVuY3Rpb25FeGVjdXRpb24/OiBib29sZWFuKTogUHJvbWlzZTxOYW1lZFRlbnNvcnNNYXA+IHtcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGlucHV0cyk7XG4gICAgY29uc3QgaW5wdXROb2RlcyA9XG4gICAgICAgIG5hbWVzLm1hcChuYW1lID0+IHRoaXMuZ3JhcGgubm9kZXNbcGFyc2VOb2RlTmFtZShuYW1lKVswXV0pO1xuICAgIGNvbnN0IG91dHB1dE5vZGVOYW1lcyA9IG91dHB1dE5hbWVzLm1hcChuYW1lID0+IHBhcnNlTm9kZU5hbWUobmFtZSlbMF0pO1xuICAgIGNvbnN0IG91dHB1dE5vZGVOYW1lU2V0ID0gbmV3IFNldChvdXRwdXROb2RlTmFtZXMpO1xuICAgIGxldCBvdXRwdXROb2RlcyA9IG91dHB1dE5vZGVOYW1lcy5tYXAobmFtZSA9PiB0aGlzLmdyYXBoLm5vZGVzW25hbWVdKTtcblxuICAgIC8vIElmIG5vIG91dHB1dHMgYXJlIHNwZWNpZmllZCwgdGhlbiB1c2UgdGhlIGRlZmF1bHQgb3V0cHV0cyBvZiB0aGUgbW9kZWwuXG4gICAgaWYgKG91dHB1dE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgb3V0cHV0Tm9kZXMgPSB0aGlzLl9vdXRwdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IHt1c2VkTm9kZXMsIG1pc3NpbmdJbnB1dHMsIGR5bmFtaWNOb2RlLCBzeW5jSW5wdXRzfSA9XG4gICAgICAgIGdldEV4ZWN1dGlvblN1YmdyYXBoKFxuICAgICAgICAgICAgaW5wdXRzLCBvdXRwdXROb2RlcywgdGhpcy53ZWlnaHRNYXAsIHRoaXMuX2luaXROb2Rlcyk7XG5cbiAgICAvLyBGaXJzdCBub2RlcyB0byBleGVjdXRlIGluY2x1ZGUgaW5wdXROb2Rlcywgd2VpZ2h0cywgYW5kIGluaXROb2Rlcy5cbiAgICBjb25zdCBzdGFjazogTm9kZVdpdGhDb250ZXh0c1tdID0gW1xuICAgICAgLi4uaW5wdXROb2RlcywgLi4udGhpcy5ncmFwaC53ZWlnaHRzLCAuLi4odGhpcy5faW5pdE5vZGVzIHx8IFtdKVxuICAgIF0ubWFwKG5vZGUgPT4ge1xuICAgICAgcmV0dXJuIHtub2RlLCBjb250ZXh0czogY29udGV4dC5jdXJyZW50Q29udGV4dH07XG4gICAgfSk7XG4gICAgY29uc3QgdGVuc29yc01hcDogTmFtZWRUZW5zb3JzTWFwID0gey4uLnRoaXMud2VpZ2h0TWFwfTtcbiAgICBPYmplY3Qua2V5cyhpbnB1dHMpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBjb25zdCBbbm9kZU5hbWUsIGluZGV4XSA9IHBhcnNlTm9kZU5hbWUobmFtZSk7XG4gICAgICBjb25zdCB0ZW5zb3JzOiBUZW5zb3JbXSA9IFtdO1xuICAgICAgdGVuc29yc1tpbmRleF0gPSBpbnB1dHNbbmFtZV07XG4gICAgICB0ZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRlbnNvcnM7XG4gICAgfSk7XG4gICAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudDoge1trZXk6IG51bWJlcl06IG51bWJlcn0gPSB7fTtcbiAgICBjb25zdCB0ZW5zb3JzVG9LZWVwID0gdGhpcy5nZXRGcm96ZW5UZW5zb3JJZHModGVuc29yc01hcCk7XG4gICAgY29uc3QgYWRkZWQ6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSA9IHt9O1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMucHJvY2Vzc1N0YWNrKFxuICAgICAgICAgIGlucHV0Tm9kZXMsIHN0YWNrLCBjb250ZXh0LCB0ZW5zb3JzTWFwLCBhZGRlZCwgdGVuc29yc1RvS2VlcCxcbiAgICAgICAgICBvdXRwdXROb2RlTmFtZVNldCwgaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudCwgdXNlZE5vZGVzKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9XG4gICAgaWYgKGR5bmFtaWNOb2RlID09IG51bGwgJiYgIWlzRnVuY3Rpb25FeGVjdXRpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVGhpcyBtb2RlbCBleGVjdXRpb24gZGlkIG5vdCBjb250YWluIGFueSBub2RlcyB3aXRoIGNvbnRyb2wgZmxvdyBgICtcbiAgICAgICAgICBgb3IgZHluYW1pYyBvdXRwdXQgc2hhcGVzLiBZb3UgY2FuIHVzZSBtb2RlbC5leGVjdXRlKCkgaW5zdGVhZC5gKTtcbiAgICB9XG4gICAgY29uc3QgbWlzc2luZ091dHB1dHMgPVxuICAgICAgICBvdXRwdXROb2Rlc1xuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBub2RlID0+ICFpc0NvbnRyb2xGbG93KG5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICFnZXRUZW5zb3Iobm9kZS5uYW1lLCB0ZW5zb3JzTWFwLCBjb250ZXh0KSlcbiAgICAgICAgICAgIC5tYXAobm9kZSA9PiBub2RlLm5hbWUpO1xuICAgIGlmIChtaXNzaW5nT3V0cHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYWx0ZXJuYXRpdmVNc2cgPSAnJztcbiAgICAgIGlmIChkeW5hbWljTm9kZSAhPSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0aXZlTXNnID1cbiAgICAgICAgICAgIGBBbHRlcm5hdGl2ZWx5LCB0byBhdm9pZCB0aGUgZHluYW1pYyBvcHMsIHVzZSBtb2RlbC5leGVjdXRlKCkgYCArXG4gICAgICAgICAgICBgYW5kIHNwZWNpZnkgdGhlIGlucHV0cyBbJHtzeW5jSW5wdXRzfV1gO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgY29tcHV0ZSB0aGUgb3V0cHV0cyBbJHttaXNzaW5nT3V0cHV0c31dIGZyb20gdGhlIHByb3ZpZGVkIGAgK1xuICAgICAgICAgIGBpbnB1dHMgWyR7bmFtZXN9XS4gQ29uc2lkZXIgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgaW5wdXRzOiBgICtcbiAgICAgICAgICBgWyR7bWlzc2luZ0lucHV0c31dLiAke2FsdGVybmF0aXZlTXNnfWApO1xuICAgIH1cbiAgICByZXR1cm4gdGVuc29yc01hcDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0YWNrKFxuICAgICAgaW5wdXROb2RlczogTm9kZVtdLCBzdGFjazogTm9kZVdpdGhDb250ZXh0c1tdLCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LFxuICAgICAgdGVuc29yTWFwOiBOYW1lZFRlbnNvcnNNYXAsIGFkZGVkOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gICAgICB0ZW5zb3JzVG9LZWVwOiBTZXQ8bnVtYmVyPiwgb3V0cHV0Tm9kZU5hbWVTZXQ6IFNldDxzdHJpbmc+LFxuICAgICAgaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudDoge1trZXk6IG51bWJlcl06IG51bWJlcn0sXG4gICAgICB1c2VkTm9kZXM6IFNldDxzdHJpbmc+KSB7XG4gICAgY29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2U8VGVuc29yW10+PiA9IFtdO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpdGVtID0gc3RhY2sucG9wKCk7XG4gICAgICBjb250ZXh0LmN1cnJlbnRDb250ZXh0ID0gaXRlbS5jb250ZXh0cztcbiAgICAgIGxldCBub2RlTmFtZSA9ICcnO1xuICAgICAgLy8gVGhlIHRlbnNvciBvZiB0aGUgRW50ZXIgb3Agd2l0aCBpc0NvbnN0YW50IHNldCBzaG91bGQgYmUgc2V0XG4gICAgICAvLyBpbiB0aGUgcGFyZW50IHNjb3BlLCBzbyBpdCB3aWxsIGJlIGF2YWlsYWJsZSBhcyBjb25zdGFudCBmb3IgdGhlXG4gICAgICAvLyB3aG9sZSBsb29wLlxuICAgICAgaWYgKGl0ZW0ubm9kZS5vcCA9PT0gJ0VudGVyJyAmJlxuICAgICAgICAgIGdldFBhcmFtVmFsdWUoJ2lzQ29uc3RhbnQnLCBpdGVtLm5vZGUsIHRlbnNvck1hcCwgY29udGV4dCkpIHtcbiAgICAgICAgW25vZGVOYW1lXSA9IGdldE5vZGVOYW1lQW5kSW5kZXgoaXRlbS5ub2RlLm5hbWUsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IHByb2Nlc3Mgbm9kZXMgdGhhdCBhcmUgbm90IGluIHRoZSB0ZW5zb3JNYXAgeWV0LCB0aGlzIGluY2x1ZGVcbiAgICAgIC8vIGlucHV0Tm9kZXMgYW5kIGludGVybmFsIGluaXROb2Rlcy5cbiAgICAgIGlmICh0ZW5zb3JNYXBbaXRlbS5ub2RlLm5hbWVdID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGVuc29ycyA9XG4gICAgICAgICAgICBleGVjdXRlT3AoaXRlbS5ub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHRoaXMuX3Jlc291cmNlTWFuYWdlcik7XG4gICAgICAgIGlmICghbm9kZU5hbWUpIHtcbiAgICAgICAgICBbbm9kZU5hbWVdID0gZ2V0Tm9kZU5hbWVBbmRJbmRleChpdGVtLm5vZGUubmFtZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSBjb250ZXh0LmN1cnJlbnRDb250ZXh0O1xuICAgICAgICBpZiAodXRpbC5pc1Byb21pc2UodGVuc29ycykpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRlbnNvcnMudGhlbih0ID0+IHtcbiAgICAgICAgICAgIHRlbnNvck1hcFtub2RlTmFtZV0gPSB0O1xuICAgICAgICAgICAgaWYgKHRoaXMua2VlcEludGVybWVkaWF0ZVRlbnNvcnMpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9uZWRUZW5zb3JzTWFwW25vZGVOYW1lXSA9IHRoaXMuY2xvbmVUZW5zb3JMaXN0KHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5jdXJyZW50Q29udGV4dCA9IGN1cnJlbnRDb250ZXh0O1xuICAgICAgICAgICAgdGhpcy5jaGVja1RlbnNvckZvckRpc3Bvc2FsKFxuICAgICAgICAgICAgICAgIG5vZGVOYW1lLCBpdGVtLm5vZGUsIHRlbnNvck1hcCwgY29udGV4dCwgdGVuc29yc1RvS2VlcCxcbiAgICAgICAgICAgICAgICBvdXRwdXROb2RlTmFtZVNldCwgaW50ZXJtZWRpYXRlVGVuc29yQ29uc3VtZXJDb3VudCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZE5vZGVzKFxuICAgICAgICAgICAgICAgIGl0ZW0ubm9kZSwgc3RhY2ssIGNvbnRleHQsIHRlbnNvck1hcCwgYWRkZWQsIHVzZWROb2Rlcyk7XG4gICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGVuc29yTWFwW25vZGVOYW1lXSA9IHRlbnNvcnM7XG4gICAgICAgICAgaWYgKHRoaXMua2VlcEludGVybWVkaWF0ZVRlbnNvcnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvbmVkVGVuc29yc01hcFtub2RlTmFtZV0gPSB0aGlzLmNsb25lVGVuc29yTGlzdCh0ZW5zb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jaGVja1RlbnNvckZvckRpc3Bvc2FsKFxuICAgICAgICAgICAgICBub2RlTmFtZSwgaXRlbS5ub2RlLCB0ZW5zb3JNYXAsIGNvbnRleHQsIHRlbnNvcnNUb0tlZXAsXG4gICAgICAgICAgICAgIG91dHB1dE5vZGVOYW1lU2V0LCBpbnRlcm1lZGlhdGVUZW5zb3JDb25zdW1lckNvdW50KTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZE5vZGVzKFxuICAgICAgICAgICAgICBpdGVtLm5vZGUsIHN0YWNrLCBjb250ZXh0LCB0ZW5zb3JNYXAsIGFkZGVkLCB1c2VkTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NDaGlsZE5vZGVzKFxuICAgICAgICAgICAgaXRlbS5ub2RlLCBzdGFjaywgY29udGV4dCwgdGVuc29yTWFwLCBhZGRlZCwgdXNlZE5vZGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2hpbGROb2RlcyhcbiAgICAgIG5vZGU6IE5vZGUsIHN0YWNrOiBOb2RlV2l0aENvbnRleHRzW10sIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICB0ZW5zb3JNYXA6IE5hbWVkVGVuc29yc01hcCwgYWRkZWQ6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSxcbiAgICAgIHVzZWROb2RlczogU2V0PHN0cmluZz4pIHtcbiAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3QgW25vZGVOYW1lLCBdID0gZ2V0Tm9kZU5hbWVBbmRJbmRleChjaGlsZE5vZGUubmFtZSwgY29udGV4dCk7XG4gICAgICBpZiAoYWRkZWRbbm9kZU5hbWVdIHx8ICF1c2VkTm9kZXMuaGFzKGNoaWxkTm9kZS5uYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBNZXJnZSBvcCBjYW4gYmUgcHVzaGVkIGlmIGFueSBvZiBpdHMgaW5wdXRzIGhhcyB2YWx1ZS5cbiAgICAgIGlmIChjaGlsZE5vZGUub3AgPT09ICdNZXJnZScpIHtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5pbnB1dE5hbWVzLnNvbWUobmFtZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAhIWdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICBhZGRlZFtub2RlTmFtZV0gPSB0cnVlO1xuICAgICAgICAgIHN0YWNrLnB1c2goe2NvbnRleHRzOiBjb250ZXh0LmN1cnJlbnRDb250ZXh0LCBub2RlOiBjaGlsZE5vZGV9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlICAvLyBPdGhlcndpc2UgYWxsIGlucHV0cyBtdXN0IHRvIGhhdmUgdmFsdWUuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZS5pbnB1dE5hbWVzLmV2ZXJ5KG5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWdldFRlbnNvcihuYW1lLCB0ZW5zb3JNYXAsIGNvbnRleHQpO1xuICAgICAgICAgICAgICB9KSkge1xuICAgICAgICBhZGRlZFtub2RlTmFtZV0gPSB0cnVlO1xuICAgICAgICBzdGFjay5wdXNoKHtjb250ZXh0czogY29udGV4dC5jdXJyZW50Q29udGV4dCwgbm9kZTogY2hpbGROb2RlfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSB3ZWlnaHQgdGVuc29ycy5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy53ZWlnaHRNYXApXG4gICAgICAgIC5mb3JFYWNoKFxuICAgICAgICAgICAga2V5ID0+IHRoaXMud2VpZ2h0TWFwW2tleV0uZm9yRWFjaCh0ZW5zb3IgPT4gdGVuc29yLmRpc3Bvc2UoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lucHV0U2hhcGVBbmRUeXBlKGlucHV0czogTmFtZWRUZW5zb3JNYXApIHtcbiAgICBPYmplY3Qua2V5cyhpbnB1dHMpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucHV0c1tuYW1lXTtcbiAgICAgIGNvbnN0IFtub2RlTmFtZSwgXSA9IHBhcnNlTm9kZU5hbWUobmFtZSk7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ncmFwaC5ub2Rlc1tub2RlTmFtZV07XG4gICAgICBpZiAobm9kZS5hdHRyUGFyYW1zWydzaGFwZSddICYmIG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXS52YWx1ZSkge1xuICAgICAgICBjb25zdCBzaGFwZSA9IG5vZGUuYXR0clBhcmFtc1snc2hhcGUnXS52YWx1ZSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzaGFwZS5sZW5ndGggPT09IGlucHV0LnNoYXBlLmxlbmd0aCAmJlxuICAgICAgICAgICAgaW5wdXQuc2hhcGUuZXZlcnkoXG4gICAgICAgICAgICAgICAgKGRpbSwgaW5kZXgpID0+IHNoYXBlW2luZGV4XSA9PT0gLTEgfHwgc2hhcGVbaW5kZXhdID09PSBkaW0pO1xuICAgICAgICB1dGlsLmFzc2VydChcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgKCkgPT4gYFRoZSBzaGFwZSBvZiBkaWN0Wycke25vZGUubmFtZX0nXSBwcm92aWRlZCBpbiBgICtcbiAgICAgICAgICAgICAgICBgbW9kZWwuZXhlY3V0ZShkaWN0KSBtdXN0IGJlIFske3NoYXBlfV0sIGJ1dCB3YXMgYCArXG4gICAgICAgICAgICAgICAgYFske2lucHV0LnNoYXBlfV1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmF0dHJQYXJhbXNbJ2R0eXBlJ10gJiYgbm9kZS5hdHRyUGFyYW1zWydkdHlwZSddLnZhbHVlKSB7XG4gICAgICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAgICAgaW5wdXQuZHR5cGUgPT09IG5vZGUuYXR0clBhcmFtc1snZHR5cGUnXS52YWx1ZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAoKSA9PiBgVGhlIGR0eXBlIG9mIGRpY3RbJyR7bm9kZS5uYW1lfSddIHByb3ZpZGVkIGluIGAgK1xuICAgICAgICAgICAgICAgIGBtb2RlbC5leGVjdXRlKGRpY3QpIG11c3QgYmUgYCArXG4gICAgICAgICAgICAgICAgYCR7bm9kZS5hdHRyUGFyYW1zWydkdHlwZSddLnZhbHVlfSwgYnV0IHdhcyAke2lucHV0LmR0eXBlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBJbnB1dHMoaW5wdXRzOiBOYW1lZFRlbnNvck1hcCkge1xuICAgIGNvbnN0IHJlc3VsdDogTmFtZWRUZW5zb3JNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGlucHV0TmFtZSBpbiBpbnB1dHMpIHtcbiAgICAgIGNvbnN0IHRlbnNvciA9IHRoaXMuX3NpZ25hdHVyZSA/LmlucHV0cyA/LltpbnB1dE5hbWVdO1xuICAgICAgaWYgKHRlbnNvciAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdFt0ZW5zb3IubmFtZV0gPSBpbnB1dHNbaW5wdXROYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtpbnB1dE5hbWVdID0gaW5wdXRzW2lucHV0TmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSW5wdXRzKGlucHV0czogTmFtZWRUZW5zb3JNYXApIHtcbiAgICBjb25zdCBub3RJbkdyYXBoID0gT2JqZWN0LmtleXMoaW5wdXRzKS5maWx0ZXIobmFtZSA9PiB7XG4gICAgICBjb25zdCBbbm9kZU5hbWVdID0gcGFyc2VOb2RlTmFtZShuYW1lKTtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBoLm5vZGVzW25vZGVOYW1lXSA9PSBudWxsO1xuICAgIH0pO1xuICAgIGlmIChub3RJbkdyYXBoLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGRpY3QgcHJvdmlkZWQgaW4gbW9kZWwuZXhlY3V0ZShkaWN0KSBoYXMgYCArXG4gICAgICAgICAgYGtleXM6IFske25vdEluR3JhcGh9XSB0aGF0IGFyZSBub3QgcGFydCBvZiBncmFwaGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwT3V0cHV0cyhvdXRwdXRzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBvdXRwdXRzLm1hcChuYW1lID0+IHtcbiAgICAgIGNvbnN0IHRlbnNvciA9IHRoaXMuX3NpZ25hdHVyZSA/Lm91dHB1dHMgPy5bbmFtZV07XG4gICAgICBpZiAodGVuc29yICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRlbnNvci5uYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja091dHB1dHMob3V0cHV0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBvdXRwdXRzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICBjb25zdCBbbm9ybWFsaXplZE5hbWVdID0gcGFyc2VOb2RlTmFtZShuYW1lKTtcbiAgICAgIGlmICghdGhpcy5ncmFwaC5ub2Rlc1tub3JtYWxpemVkTmFtZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgb3V0cHV0ICcke25hbWV9JyBpcyBub3QgZm91bmQgaW4gdGhlIGdyYXBoYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Contains global resources of a model.\n */\nexport class ResourceManager {\n constructor(hashTableNameToHandle = {}, hashTableMap = {}) {\n this.hashTableNameToHandle = hashTableNameToHandle;\n this.hashTableMap = hashTableMap;\n }\n /**\n * Register a `HashTable` in the resource manager.\n *\n * The `HashTable` can be retrieved by `resourceManager.getHashTableById`,\n * where id is the table handle tensor's id.\n *\n * @param name Op node name that creates the `HashTable`.\n * @param hashTable The `HashTable` to be added to resource manager.\n */\n addHashTable(name, hashTable) {\n this.hashTableNameToHandle[name] = hashTable.handle;\n this.hashTableMap[hashTable.id] = hashTable;\n }\n /**\n * Get the table handle by node name.\n * @param name Op node name that creates the `HashTable`. This name is also\n * used in the inputs list of lookup and import `HashTable` ops.\n */\n getHashTableHandleByName(name) {\n return this.hashTableNameToHandle[name];\n }\n /**\n * Get the actual `HashTable` by its handle tensor's id.\n * @param id The id of the handle tensor.\n */\n getHashTableById(id) {\n return this.hashTableMap[id];\n }\n /**\n * Dispose `ResourceManager`, including its hashTables and tensors in them.\n */\n dispose() {\n for (const key in this.hashTableMap) {\n this.hashTableMap[key].clearAndClose();\n delete this.hashTableMap[key];\n }\n for (const name in this.hashTableNameToHandle) {\n this.hashTableNameToHandle[name].dispose();\n delete this.hashTableNameToHandle[name];\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VfbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtY29udmVydGVyL3NyYy9leGVjdXRvci9yZXNvdXJjZV9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQTs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ2Esd0JBQXdDLEVBQUUsRUFDMUMsZUFBNkIsRUFBRTtRQUQvQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXFCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtJQUFHLENBQUM7SUFFaEQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHdCQUF3QixDQUFDLElBQVk7UUFDbkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0I7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0hhc2hUYWJsZU1hcCwgTmFtZWRUZW5zb3JNYXB9IGZyb20gJy4uL2RhdGEvdHlwZXMnO1xuaW1wb3J0IHtIYXNoVGFibGV9IGZyb20gJy4vaGFzaF90YWJsZSc7XG5cbi8qKlxuICogQ29udGFpbnMgZ2xvYmFsIHJlc291cmNlcyBvZiBhIG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBoYXNoVGFibGVOYW1lVG9IYW5kbGU6IE5hbWVkVGVuc29yTWFwID0ge30sXG4gICAgICByZWFkb25seSBoYXNoVGFibGVNYXA6IEhhc2hUYWJsZU1hcCA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGBIYXNoVGFibGVgIGluIHRoZSByZXNvdXJjZSBtYW5hZ2VyLlxuICAgKlxuICAgKiBUaGUgYEhhc2hUYWJsZWAgY2FuIGJlIHJldHJpZXZlZCBieSBgcmVzb3VyY2VNYW5hZ2VyLmdldEhhc2hUYWJsZUJ5SWRgLFxuICAgKiB3aGVyZSBpZCBpcyB0aGUgdGFibGUgaGFuZGxlIHRlbnNvcidzIGlkLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBPcCBub2RlIG5hbWUgdGhhdCBjcmVhdGVzIHRoZSBgSGFzaFRhYmxlYC5cbiAgICogQHBhcmFtIGhhc2hUYWJsZSBUaGUgYEhhc2hUYWJsZWAgdG8gYmUgYWRkZWQgdG8gcmVzb3VyY2UgbWFuYWdlci5cbiAgICovXG4gIGFkZEhhc2hUYWJsZShuYW1lOiBzdHJpbmcsIGhhc2hUYWJsZTogSGFzaFRhYmxlKSB7XG4gICAgdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV0gPSBoYXNoVGFibGUuaGFuZGxlO1xuICAgIHRoaXMuaGFzaFRhYmxlTWFwW2hhc2hUYWJsZS5pZF0gPSBoYXNoVGFibGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0YWJsZSBoYW5kbGUgYnkgbm9kZSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBPcCBub2RlIG5hbWUgdGhhdCBjcmVhdGVzIHRoZSBgSGFzaFRhYmxlYC4gVGhpcyBuYW1lIGlzIGFsc29cbiAgICogICAgIHVzZWQgaW4gdGhlIGlucHV0cyBsaXN0IG9mIGxvb2t1cCBhbmQgaW1wb3J0IGBIYXNoVGFibGVgIG9wcy5cbiAgICovXG4gIGdldEhhc2hUYWJsZUhhbmRsZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhY3R1YWwgYEhhc2hUYWJsZWAgYnkgaXRzIGhhbmRsZSB0ZW5zb3IncyBpZC5cbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgaGFuZGxlIHRlbnNvci5cbiAgICovXG4gIGdldEhhc2hUYWJsZUJ5SWQoaWQ6IG51bWJlcik6IEhhc2hUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzaFRhYmxlTWFwW2lkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIGBSZXNvdXJjZU1hbmFnZXJgLCBpbmNsdWRpbmcgaXRzIGhhc2hUYWJsZXMgYW5kIHRlbnNvcnMgaW4gdGhlbS5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5oYXNoVGFibGVNYXApIHtcbiAgICAgIHRoaXMuaGFzaFRhYmxlTWFwW2tleV0uY2xlYXJBbmRDbG9zZSgpO1xuICAgICAgZGVsZXRlIHRoaXMuaGFzaFRhYmxlTWFwW2tleV07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMuaGFzaFRhYmxlTmFtZVRvSGFuZGxlKSB7XG4gICAgICB0aGlzLmhhc2hUYWJsZU5hbWVUb0hhbmRsZVtuYW1lXS5kaXNwb3NlKCk7XG4gICAgICBkZWxldGUgdGhpcy5oYXNoVGFibGVOYW1lVG9IYW5kbGVbbmFtZV07XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { dispose, io, Tensor, util } from '@tensorflow/tfjs-core';\nimport { OperationMapper } from '../operations/operation_mapper';\nimport { GraphExecutor } from './graph_executor';\nimport { ResourceManager } from './resource_manager';\nexport const TFHUB_SEARCH_PARAM = '?tfjs-format=file';\nexport const DEFAULT_MODEL_NAME = 'model.json';\n/**\n * A `tf.GraphModel` is a directed, acyclic graph built from a\n * SavedModel GraphDef and allows inference execution.\n *\n * A `tf.GraphModel` can only be created by loading from a model converted from\n * a [TensorFlow SavedModel](https://www.tensorflow.org/guide/saved_model) using\n * the command line converter tool and loaded via `tf.loadGraphModel`.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\nexport class GraphModel {\n // Returns the version information for the tensorflow model GraphDef.\n get modelVersion() {\n return this.version;\n }\n get inputNodes() {\n return this.executor.inputNodes;\n }\n get outputNodes() {\n return this.executor.outputNodes;\n }\n get inputs() {\n return this.executor.inputs;\n }\n get outputs() {\n return this.executor.outputs;\n }\n get weights() {\n return this.executor.weightMap;\n }\n get metadata() {\n return this.artifacts.userDefinedMetadata;\n }\n get modelSignature() {\n return this.signature;\n }\n get modelStructuredOutputKeys() {\n return this.structuredOutputKeys;\n }\n /**\n * @param modelUrl url for the model, or an `io.IOHandler`.\n * @param weightManifestUrl url for the weight file generated by\n * scripts/convert.py script.\n * @param requestOption options for Request, which allows to send credentials\n * and custom headers.\n * @param onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n */\n constructor(modelUrl, loadOptions = {}, tfio = io) {\n this.modelUrl = modelUrl;\n this.loadOptions = loadOptions;\n this.version = 'n/a';\n this.io = tfio;\n if (loadOptions == null) {\n this.loadOptions = {};\n }\n this.resourceManager = new ResourceManager();\n }\n findIOHandler() {\n const path = this.modelUrl;\n if (path.load != null) {\n // Path is an IO Handler.\n this.handler = path;\n }\n else if (this.loadOptions.requestInit != null) {\n this.handler = this.io.browserHTTPRequest(path, this.loadOptions);\n }\n else {\n const handlers = this.io.getLoadHandlers(path, this.loadOptions);\n if (handlers.length === 0) {\n // For backward compatibility: if no load handler can be found,\n // assume it is a relative http path.\n handlers.push(this.io.browserHTTPRequest(path, this.loadOptions));\n }\n else if (handlers.length > 1) {\n throw new Error(`Found more than one (${handlers.length}) load handlers for ` +\n `URL '${[path]}'`);\n }\n this.handler = handlers[0];\n }\n }\n /**\n * Loads the model and weight files, construct the in memory weight map and\n * compile the inference graph.\n */\n load() {\n this.findIOHandler();\n if (this.handler.load == null) {\n throw new Error('Cannot proceed with model loading because the IOHandler provided ' +\n 'does not have the `load` method implemented.');\n }\n const loadResult = this.handler.load();\n if (util.isPromise(loadResult)) {\n return loadResult.then(artifacts => this.loadSync(artifacts));\n }\n return this.loadSync(loadResult);\n }\n /**\n * Synchronously construct the in memory weight map and\n * compile the inference graph.\n *\n * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n */\n loadSync(artifacts) {\n this.artifacts = artifacts;\n const graph = this.artifacts.modelTopology;\n let signature = this.artifacts.signature;\n if (this.artifacts.userDefinedMetadata != null) {\n const metadata = this.artifacts.userDefinedMetadata;\n if (metadata.signature != null) {\n signature = metadata.signature;\n }\n if (metadata.structuredOutputKeys != null) {\n this.structuredOutputKeys = metadata.structuredOutputKeys;\n }\n }\n this.signature = signature;\n this.version = `${graph.versions.producer}.${graph.versions.minConsumer}`;\n const weightMap = this.io.decodeWeights(this.artifacts.weightData, this.artifacts.weightSpecs);\n this.executor = new GraphExecutor(OperationMapper.Instance.transformGraph(graph, this.signature));\n this.executor.weightMap = this.convertTensorMapToTensorsMap(weightMap);\n // Attach a model-level resourceManager to each executor to share resources,\n // such as `HashTable`.\n this.executor.resourceManager = this.resourceManager;\n if (artifacts.modelInitializer != null &&\n artifacts.modelInitializer.node != null) {\n const initializer = OperationMapper.Instance.transformGraph(artifacts.modelInitializer);\n this.initializer = new GraphExecutor(initializer);\n this.initializer.weightMap = this.executor.weightMap;\n // Attach a model-level resourceManager to the initializer, the\n // hashTables created from when executing the initializer will be stored\n // in the resourceManager.\n this.initializer.resourceManager = this.resourceManager;\n this.initializerSignature = artifacts.initializerSignature;\n }\n return true;\n }\n /**\n * Save the configuration and/or weights of the GraphModel.\n *\n * An `IOHandler` is an object that has a `save` method of the proper\n * signature defined. The `save` method manages the storing or\n * transmission of serialized data (\"artifacts\") that represent the\n * model's topology and weights onto or via a specific medium, such as\n * file downloads, local storage, IndexedDB in the web browser and HTTP\n * requests to a server. TensorFlow.js provides `IOHandler`\n * implementations for a number of frequently used saving mediums, such as\n * `tf.io.browserDownloads` and `tf.io.browserLocalStorage`. See `tf.io`\n * for more details.\n *\n * This method also allows you to refer to certain types of `IOHandler`s\n * as URL-like string shortcuts, such as 'localstorage://' and\n * 'indexeddb://'.\n *\n * Example 1: Save `model`'s topology and weights to browser [local\n * storage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage);\n * then load it back.\n *\n * ```js\n * const modelUrl =\n * 'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n * const model = await tf.loadGraphModel(modelUrl);\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n *\n * const saveResults = await model.save('localstorage://my-model-1');\n *\n * const loadedModel = await tf.loadGraphModel('localstorage://my-model-1');\n * console.log('Prediction from loaded model:');\n * model.predict(zeros).print();\n * ```\n *\n * @param handlerOrURL An instance of `IOHandler` or a URL-like,\n * scheme-based string shortcut for `IOHandler`.\n * @param config Options for saving the model.\n * @returns A `Promise` of `SaveResult`, which summarizes the result of\n * the saving, such as byte sizes of the saved artifacts for the model's\n * topology and weight values.\n *\n * @doc {heading: 'Models', subheading: 'Classes', ignoreCI: true}\n */\n async save(handlerOrURL, config) {\n if (typeof handlerOrURL === 'string') {\n const handlers = this.io.getSaveHandlers(handlerOrURL);\n if (handlers.length === 0) {\n throw new Error(`Cannot find any save handlers for URL '${handlerOrURL}'`);\n }\n else if (handlers.length > 1) {\n throw new Error(`Found more than one (${handlers.length}) save handlers for ` +\n `URL '${handlerOrURL}'`);\n }\n handlerOrURL = handlers[0];\n }\n if (handlerOrURL.save == null) {\n throw new Error('GraphModel.save() cannot proceed because the IOHandler ' +\n 'provided does not have the `save` attribute defined.');\n }\n return handlerOrURL.save(this.artifacts);\n }\n addStructuredOutputNames(outputTensors) {\n if (this.structuredOutputKeys) {\n const outputTensorsArray = outputTensors instanceof Tensor ? [outputTensors] : outputTensors;\n const outputTensorMap = {};\n outputTensorsArray.forEach((outputTensor, i) => outputTensorMap[this.structuredOutputKeys[i]] =\n outputTensor);\n return outputTensorMap;\n }\n return outputTensors;\n }\n /**\n * Execute the inference for the input tensors.\n *\n * @param input The input tensors, when there is single input for the model,\n * inputs param should be a `tf.Tensor`. For models with mutliple inputs,\n * inputs params should be in either `tf.Tensor`[] if the input order is\n * fixed, or otherwise NamedTensorMap format.\n *\n * For model with multiple inputs, we recommend you use NamedTensorMap as the\n * input type, if you use `tf.Tensor`[], the order of the array needs to\n * follow the\n * order of inputNodes array. @see {@link GraphModel.inputNodes}\n *\n * You can also feed any intermediate nodes using the NamedTensorMap as the\n * input type. For example, given the graph\n * InputNode => Intermediate => OutputNode,\n * you can execute the subgraph Intermediate => OutputNode by calling\n * model.execute('IntermediateNode' : tf.tensor(...));\n *\n * This is useful for models that uses tf.dynamic_rnn, where the intermediate\n * state needs to be fed manually.\n *\n * For batch inference execution, the tensors for each input need to be\n * concatenated together. For example with mobilenet, the required input shape\n * is [1, 244, 244, 3], which represents the [batch, height, width, channel].\n * If we are provide a batched data of 100 images, the input tensor should be\n * in the shape of [100, 244, 244, 3].\n *\n * @param config Prediction configuration for specifying the batch size.\n * Currently the batch size option is ignored for graph model.\n *\n * @returns Inference result tensors. If the model is converted and it\n * originally had structured_outputs in tensorflow, then a NamedTensorMap\n * will be returned matching the structured_outputs. If no structured_outputs\n * are present, the output will be single `tf.Tensor` if the model has single\n * output node, otherwise Tensor[].\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n predict(inputs, config) {\n const outputTensors = this.execute(inputs, this.outputNodes);\n return this.addStructuredOutputNames(outputTensors);\n }\n /**\n * Execute the inference for the input tensors in async fashion, use this\n * method when your model contains control flow ops.\n *\n * @param input The input tensors, when there is single input for the model,\n * inputs param should be a `tf.Tensor`. For models with mutliple inputs,\n * inputs params should be in either `tf.Tensor`[] if the input order is\n * fixed, or otherwise NamedTensorMap format.\n *\n * For model with multiple inputs, we recommend you use NamedTensorMap as the\n * input type, if you use `tf.Tensor`[], the order of the array needs to\n * follow the\n * order of inputNodes array. @see {@link GraphModel.inputNodes}\n *\n * You can also feed any intermediate nodes using the NamedTensorMap as the\n * input type. For example, given the graph\n * InputNode => Intermediate => OutputNode,\n * you can execute the subgraph Intermediate => OutputNode by calling\n * model.execute('IntermediateNode' : tf.tensor(...));\n *\n * This is useful for models that uses tf.dynamic_rnn, where the intermediate\n * state needs to be fed manually.\n *\n * For batch inference execution, the tensors for each input need to be\n * concatenated together. For example with mobilenet, the required input shape\n * is [1, 244, 244, 3], which represents the [batch, height, width, channel].\n * If we are provide a batched data of 100 images, the input tensor should be\n * in the shape of [100, 244, 244, 3].\n *\n * @param config Prediction configuration for specifying the batch size.\n * Currently the batch size option is ignored for graph model.\n *\n * @returns A Promise of inference result tensors. If the model is converted\n * and it originally had structured_outputs in tensorflow, then a\n * NamedTensorMap will be returned matching the structured_outputs. If no\n * structured_outputs are present, the output will be single `tf.Tensor` if\n * the model has single output node, otherwise Tensor[].\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n async predictAsync(inputs, config) {\n const outputTensors = await this.executeAsync(inputs, this.outputNodes);\n return this.addStructuredOutputNames(outputTensors);\n }\n normalizeInputs(inputs) {\n var _a;\n if (!(inputs instanceof Tensor) && !Array.isArray(inputs)) {\n // The input is already a NamedTensorMap.\n const signatureInputs = (_a = this.signature) === null || _a === void 0 ? void 0 : _a.inputs;\n if (signatureInputs != null) {\n for (const input in signatureInputs) {\n const tensor = signatureInputs[input];\n if (tensor.resourceId != null) {\n inputs[input] = this.resourceIdToCapturedInput[tensor.resourceId];\n }\n }\n }\n return inputs;\n }\n inputs = Array.isArray(inputs) ? inputs : [inputs];\n const numCapturedInputs = Object.keys(this.resourceIdToCapturedInput).length;\n if (inputs.length + numCapturedInputs !== this.inputNodes.length) {\n throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length -\n numCapturedInputs} non-resource placeholders, while there are ${inputs.length} input tensors provided.`);\n }\n let inputIndex = 0;\n return this.inputNodes.reduce((map, inputName) => {\n var _a, _b, _c;\n const resourceId = (_c = (_b = (_a = this.signature) === null || _a === void 0 ? void 0 : _a.inputs) === null || _b === void 0 ? void 0 : _b[inputName]) === null || _c === void 0 ? void 0 : _c.resourceId;\n if (resourceId != null) {\n map[inputName] = this.resourceIdToCapturedInput[resourceId];\n }\n else {\n map[inputName] = inputs[inputIndex++];\n }\n return map;\n }, {});\n }\n normalizeOutputs(outputs) {\n outputs = outputs || this.outputNodes;\n return !Array.isArray(outputs) ? [outputs] : outputs;\n }\n executeInitializerGraph() {\n if (this.initializer == null) {\n return [];\n }\n if (this.initializerSignature == null) {\n return this.initializer.execute({}, []);\n }\n else {\n return this.initializer.execute({}, Object.keys(this.initializerSignature.outputs));\n }\n }\n async executeInitializerGraphAsync() {\n if (this.initializer == null) {\n return [];\n }\n if (this.initializerSignature == null) {\n return this.initializer.executeAsync({}, []);\n }\n else {\n return this.initializer.executeAsync({}, Object.keys(this.initializerSignature.outputs));\n }\n }\n setResourceIdToCapturedInput(outputs) {\n this.resourceIdToCapturedInput = {};\n if (this.initializerSignature) {\n const signatureOutputs = this.initializerSignature.outputs;\n const outputNames = Object.keys(signatureOutputs);\n for (let i = 0; i < outputNames.length; i++) {\n const outputName = outputNames[i];\n const tensorInfo = signatureOutputs[outputName];\n this.resourceIdToCapturedInput[tensorInfo.resourceId] = outputs[i];\n }\n }\n }\n /**\n * Executes inference for the model for given input tensors.\n * @param inputs tensor, tensor array or tensor map of the inputs for the\n * model, keyed by the input node names.\n * @param outputs output node name from the TensorFlow model, if no\n * outputs are specified, the default outputs of the model would be used.\n * You can inspect intermediate nodes of the model by adding them to the\n * outputs array.\n *\n * @returns A single tensor if provided with a single output or no outputs\n * are provided and there is only one default output, otherwise return a\n * tensor array. The order of the tensor array is the same as the outputs\n * if provided, otherwise the order of outputNodes attribute of the model.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n execute(inputs, outputs) {\n if (this.resourceIdToCapturedInput == null) {\n this.setResourceIdToCapturedInput(this.executeInitializerGraph());\n }\n inputs = this.normalizeInputs(inputs);\n outputs = this.normalizeOutputs(outputs);\n const result = this.executor.execute(inputs, outputs);\n return result.length > 1 ? result : result[0];\n }\n /**\n * Executes inference for the model for given input tensors in async\n * fashion, use this method when your model contains control flow ops.\n * @param inputs tensor, tensor array or tensor map of the inputs for the\n * model, keyed by the input node names.\n * @param outputs output node name from the TensorFlow model, if no outputs\n * are specified, the default outputs of the model would be used. You can\n * inspect intermediate nodes of the model by adding them to the outputs\n * array.\n *\n * @returns A Promise of single tensor if provided with a single output or\n * no outputs are provided and there is only one default output, otherwise\n * return a tensor map.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n async executeAsync(inputs, outputs) {\n if (this.resourceIdToCapturedInput == null) {\n this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync());\n }\n inputs = this.normalizeInputs(inputs);\n outputs = this.normalizeOutputs(outputs);\n const result = await this.executor.executeAsync(inputs, outputs);\n return result.length > 1 ? result : result[0];\n }\n /**\n * Get intermediate tensors for model debugging mode (flag\n * KEEP_INTERMEDIATE_TENSORS is true).\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n getIntermediateTensors() {\n return this.executor.getIntermediateTensors();\n }\n /**\n * Dispose intermediate tensors for model debugging mode (flag\n * KEEP_INTERMEDIATE_TENSORS is true).\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n disposeIntermediateTensors() {\n this.executor.disposeIntermediateTensors();\n }\n convertTensorMapToTensorsMap(map) {\n return Object.keys(map).reduce((newMap, key) => {\n newMap[key] = [map[key]];\n return newMap;\n }, {});\n }\n /**\n * Releases the memory used by the weight tensors and resourceManager.\n *\n * @doc {heading: 'Models', subheading: 'Classes'}\n */\n dispose() {\n this.executor.dispose();\n if (this.initializer) {\n this.initializer.dispose();\n if (this.resourceIdToCapturedInput) {\n dispose(this.resourceIdToCapturedInput);\n }\n }\n this.resourceManager.dispose();\n }\n}\n/**\n * Load a graph model given a URL to the model definition.\n *\n * Example of loading MobileNetV2 from a URL and making a prediction with a\n * zeros input:\n *\n * ```js\n * const modelUrl =\n * 'https://storage.googleapis.com/tfjs-models/savedmodel/mobilenet_v2_1.0_224/model.json';\n * const model = await tf.loadGraphModel(modelUrl);\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n *\n * Example of loading MobileNetV2 from a TF Hub URL and making a prediction\n * with a zeros input:\n *\n * ```js\n * const modelUrl =\n * 'https://tfhub.dev/google/imagenet/mobilenet_v2_140_224/classification/2';\n * const model = await tf.loadGraphModel(modelUrl, {fromTFHub: true});\n * const zeros = tf.zeros([1, 224, 224, 3]);\n * model.predict(zeros).print();\n * ```\n * @param modelUrl The url or an `io.IOHandler` that loads the model.\n * @param options Options for the HTTP request, which allows to send\n * credentials\n * and custom headers.\n *\n * @doc {heading: 'Models', subheading: 'Loading'}\n */\nexport async function loadGraphModel(modelUrl, options = {}, tfio = io) {\n if (modelUrl == null) {\n throw new Error('modelUrl in loadGraphModel() cannot be null. Please provide a url ' +\n 'or an IOHandler that loads the model');\n }\n if (options == null) {\n options = {};\n }\n if (options.fromTFHub && typeof modelUrl === 'string') {\n modelUrl = getTFHubUrl(modelUrl);\n }\n const model = new GraphModel(modelUrl, options, tfio);\n await model.load();\n return model;\n}\n/**\n * Load a graph model given a synchronous IO handler with a 'load' method.\n *\n * @param modelSource The `io.IOHandlerSync` that loads the model, or the\n * `io.ModelArtifacts` that encode the model, or a tuple of\n * `[io.ModelJSON, ArrayBuffer]` of which the first element encodes the\n * model and the second contains the weights.\n *\n * @doc {heading: 'Models', subheading: 'Loading'}\n */\nexport function loadGraphModelSync(modelSource) {\n if (modelSource == null) {\n throw new Error('modelUrl in loadGraphModelSync() cannot be null. Please provide ' +\n 'model artifacts or an IOHandler that loads the model');\n }\n let ioHandler;\n if (modelSource instanceof Array) {\n const [modelJSON, weights] = modelSource;\n if (!modelJSON) {\n throw new Error('modelJSON must be the first element of the array');\n }\n if (!weights || !(weights instanceof ArrayBuffer)) {\n throw new Error('An ArrayBuffer of weights must be the second element of' +\n ' the array');\n }\n if (!('modelTopology' in modelJSON)) {\n throw new Error('Model JSON is missing \\'modelTopology\\'');\n }\n if (!('weightsManifest' in modelJSON)) {\n throw new Error('Model JSON is missing \\'weightsManifest\\'');\n }\n const weightSpecs = io.getWeightSpecs(modelJSON.weightsManifest);\n const modelArtifacts = io.getModelArtifactsForJSONSync(modelJSON, weightSpecs, weights);\n ioHandler = io.fromMemorySync(modelArtifacts);\n }\n else if ('load' in modelSource) {\n // Then modelSource is already an IOHandlerSync.\n ioHandler = modelSource;\n }\n else if ('modelTopology' in modelSource && 'weightSpecs' in modelSource &&\n 'weightData' in modelSource) {\n // modelSource is of type ModelArtifacts.\n ioHandler = io.fromMemorySync(modelSource);\n }\n else {\n throw new Error('Unknown model format');\n }\n const model = new GraphModel(ioHandler);\n model.load();\n return model;\n}\nfunction getTFHubUrl(modelUrl) {\n if (!modelUrl.endsWith('/')) {\n modelUrl = (modelUrl) + '/';\n }\n return `${modelUrl}${DEFAULT_MODEL_NAME}${TFHUB_SEARCH_PARAM}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhfbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWNvbnZlcnRlci9zcmMvZXhlY3V0b3IvZ3JhcGhfbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBa0IsRUFBRSxFQUFzQyxNQUFNLEVBQUUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJcEgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRS9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDO0FBSS9DOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBY3JCLHFFQUFxRTtJQUNyRSxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakMs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TEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtkaXNwb3NlLCBJbmZlcmVuY2VNb2RlbCwgaW8sIE1vZGVsUHJlZGljdENvbmZpZywgTmFtZWRUZW5zb3JNYXAsIFRlbnNvciwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0ICogYXMgdGVuc29yZmxvdyBmcm9tICcuLi9kYXRhL2NvbXBpbGVkX2FwaSc7XG5pbXBvcnQge05hbWVkVGVuc29yc01hcCwgVGVuc29ySW5mb30gZnJvbSAnLi4vZGF0YS90eXBlcyc7XG5pbXBvcnQge09wZXJhdGlvbk1hcHBlcn0gZnJvbSAnLi4vb3BlcmF0aW9ucy9vcGVyYXRpb25fbWFwcGVyJztcblxuaW1wb3J0IHtHcmFwaEV4ZWN1dG9yfSBmcm9tICcuL2dyYXBoX2V4ZWN1dG9yJztcbmltcG9ydCB7UmVzb3VyY2VNYW5hZ2VyfSBmcm9tICcuL3Jlc291cmNlX21hbmFnZXInO1xuXG5leHBvcnQgY29uc3QgVEZIVUJfU0VBUkNIX1BBUkFNID0gJz90ZmpzLWZvcm1hdD1maWxlJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX05BTUUgPSAnbW9kZWwuanNvbic7XG50eXBlIFVybCA9IHN0cmluZ3xpby5JT0hhbmRsZXJ8aW8uSU9IYW5kbGVyU3luYztcbnR5cGUgVXJsSU9IYW5kbGVyPFQgZXh0ZW5kcyBVcmw+ID0gVCBleHRlbmRzIHN0cmluZyA/IGlvLklPSGFuZGxlciA6IFQ7XG5cbi8qKlxuICogQSBgdGYuR3JhcGhNb2RlbGAgaXMgYSBkaXJlY3RlZCwgYWN5Y2xpYyBncmFwaCBidWlsdCBmcm9tIGFcbiAqIFNhdmVkTW9kZWwgR3JhcGhEZWYgYW5kIGFsbG93cyBpbmZlcmVuY2UgZXhlY3V0aW9uLlxuICpcbiAqIEEgYHRmLkdyYXBoTW9kZWxgIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgbG9hZGluZyBmcm9tIGEgbW9kZWwgY29udmVydGVkIGZyb21cbiAqIGEgW1RlbnNvckZsb3cgU2F2ZWRNb2RlbF0oaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ3VpZGUvc2F2ZWRfbW9kZWwpIHVzaW5nXG4gKiB0aGUgY29tbWFuZCBsaW5lIGNvbnZlcnRlciB0b29sIGFuZCBsb2FkZWQgdmlhIGB0Zi5sb2FkR3JhcGhNb2RlbGAuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJ31cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoTW9kZWw8TW9kZWxVUkwgZXh0ZW5kcyBVcmwgPSBzdHJpbmcgfCBpby5JT0hhbmRsZXI+IGltcGxlbWVudHNcbiAgICBJbmZlcmVuY2VNb2RlbCB7XG4gIHByaXZhdGUgZXhlY3V0b3I6IEdyYXBoRXhlY3V0b3I7XG4gIHByaXZhdGUgdmVyc2lvbiA9ICduL2EnO1xuICBwcml2YXRlIGhhbmRsZXI6IFVybElPSGFuZGxlcjxNb2RlbFVSTD47XG4gIHByaXZhdGUgYXJ0aWZhY3RzOiBpby5Nb2RlbEFydGlmYWN0cztcbiAgcHJpdmF0ZSBpbml0aWFsaXplcjogR3JhcGhFeGVjdXRvcjtcbiAgcHJpdmF0ZSByZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0OiB7W2tleTogbnVtYmVyXTogVGVuc29yfTtcbiAgcHJpdmF0ZSByZXNvdXJjZU1hbmFnZXI6IFJlc291cmNlTWFuYWdlcjtcbiAgcHJpdmF0ZSBzaWduYXR1cmU6IHRlbnNvcmZsb3cuSVNpZ25hdHVyZURlZjtcbiAgcHJpdmF0ZSBpbml0aWFsaXplclNpZ25hdHVyZTogdGVuc29yZmxvdy5JU2lnbmF0dXJlRGVmO1xuICBwcml2YXRlIHN0cnVjdHVyZWRPdXRwdXRLZXlzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbzogdHlwZW9mIGlvO1xuXG4gIC8vIFJldHVybnMgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW5zb3JmbG93IG1vZGVsIEdyYXBoRGVmLlxuICBnZXQgbW9kZWxWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIGdldCBpbnB1dE5vZGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRvci5pbnB1dE5vZGVzO1xuICB9XG5cbiAgZ2V0IG91dHB1dE5vZGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRvci5vdXRwdXROb2RlcztcbiAgfVxuXG4gIGdldCBpbnB1dHMoKTogVGVuc29ySW5mb1tdIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRvci5pbnB1dHM7XG4gIH1cblxuICBnZXQgb3V0cHV0cygpOiBUZW5zb3JJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dG9yLm91dHB1dHM7XG4gIH1cblxuICBnZXQgd2VpZ2h0cygpOiBOYW1lZFRlbnNvcnNNYXAge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dG9yLndlaWdodE1hcDtcbiAgfVxuXG4gIGdldCBtZXRhZGF0YSgpOiB7fSB7XG4gICAgcmV0dXJuIHRoaXMuYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGE7XG4gIH1cblxuICBnZXQgbW9kZWxTaWduYXR1cmUoKToge30ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCBtb2RlbFN0cnVjdHVyZWRPdXRwdXRLZXlzKCk6IHt9IHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3R1cmVkT3V0cHV0S2V5cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbW9kZWxVcmwgdXJsIGZvciB0aGUgbW9kZWwsIG9yIGFuIGBpby5JT0hhbmRsZXJgLlxuICAgKiBAcGFyYW0gd2VpZ2h0TWFuaWZlc3RVcmwgdXJsIGZvciB0aGUgd2VpZ2h0IGZpbGUgZ2VuZXJhdGVkIGJ5XG4gICAqIHNjcmlwdHMvY29udmVydC5weSBzY3JpcHQuXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9uIG9wdGlvbnMgZm9yIFJlcXVlc3QsIHdoaWNoIGFsbG93cyB0byBzZW5kIGNyZWRlbnRpYWxzXG4gICAqIGFuZCBjdXN0b20gaGVhZGVycy5cbiAgICogQHBhcmFtIG9uUHJvZ3Jlc3MgT3B0aW9uYWwsIHByb2dyZXNzIGNhbGxiYWNrIGZ1bmN0aW9uLCBmaXJlZCBwZXJpb2RpY2FsbHlcbiAgICogYmVmb3JlIHRoZSBsb2FkIGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBtb2RlbFVybDogTW9kZWxVUkwsIHByaXZhdGUgbG9hZE9wdGlvbnM6IGlvLkxvYWRPcHRpb25zID0ge30sXG4gICAgICB0ZmlvID0gaW8pIHtcbiAgICB0aGlzLmlvID0gdGZpbztcbiAgICBpZiAobG9hZE9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgdGhpcy5sb2FkT3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJlc291cmNlTWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZElPSGFuZGxlcigpIHtcbiAgICB0eXBlIElPSGFuZGxlciA9IFVybElPSGFuZGxlcjxNb2RlbFVSTD47XG4gICAgY29uc3QgcGF0aCA9IHRoaXMubW9kZWxVcmw7XG4gICAgaWYgKChwYXRoIGFzIGlvLklPSGFuZGxlcikubG9hZCAhPSBudWxsKSB7XG4gICAgICAvLyBQYXRoIGlzIGFuIElPIEhhbmRsZXIuXG4gICAgICB0aGlzLmhhbmRsZXIgPSBwYXRoIGFzIElPSGFuZGxlcjtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9hZE9wdGlvbnMucmVxdWVzdEluaXQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5oYW5kbGVyID0gdGhpcy5pby5icm93c2VySFRUUFJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBhcyBzdHJpbmcsIHRoaXMubG9hZE9wdGlvbnMpIGFzIElPSGFuZGxlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPVxuICAgICAgICAgIHRoaXMuaW8uZ2V0TG9hZEhhbmRsZXJzKHBhdGggYXMgc3RyaW5nLCB0aGlzLmxvYWRPcHRpb25zKTtcbiAgICAgIGlmIChoYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGlmIG5vIGxvYWQgaGFuZGxlciBjYW4gYmUgZm91bmQsXG4gICAgICAgIC8vIGFzc3VtZSBpdCBpcyBhIHJlbGF0aXZlIGh0dHAgcGF0aC5cbiAgICAgICAgaGFuZGxlcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuaW8uYnJvd3NlckhUVFBSZXF1ZXN0KHBhdGggYXMgc3RyaW5nLCB0aGlzLmxvYWRPcHRpb25zKSk7XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZvdW5kIG1vcmUgdGhhbiBvbmUgKCR7aGFuZGxlcnMubGVuZ3RofSkgbG9hZCBoYW5kbGVycyBmb3IgYCArXG4gICAgICAgICAgICBgVVJMICcke1twYXRoXX0nYCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyc1swXSBhcyBJT0hhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBtb2RlbCBhbmQgd2VpZ2h0IGZpbGVzLCBjb25zdHJ1Y3QgdGhlIGluIG1lbW9yeSB3ZWlnaHQgbWFwIGFuZFxuICAgKiBjb21waWxlIHRoZSBpbmZlcmVuY2UgZ3JhcGguXG4gICAqL1xuICBsb2FkKCk6IFVybElPSGFuZGxlcjxNb2RlbFVSTD4gZXh0ZW5kcyBpby5JT0hhbmRsZXJTeW5jPyBib29sZWFuOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHlwZSBJT0hhbmRsZXIgPSBVcmxJT0hhbmRsZXI8TW9kZWxVUkw+O1xuICAgIHRoaXMuZmluZElPSGFuZGxlcigpO1xuICAgIGlmICh0aGlzLmhhbmRsZXIubG9hZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBwcm9jZWVkIHdpdGggbW9kZWwgbG9hZGluZyBiZWNhdXNlIHRoZSBJT0hhbmRsZXIgcHJvdmlkZWQgJyArXG4gICAgICAgICAgJ2RvZXMgbm90IGhhdmUgdGhlIGBsb2FkYCBtZXRob2QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuXG4gICAgdHlwZSBSZXN1bHQgPVxuICAgICAgICBJT0hhbmRsZXIgZXh0ZW5kcyBpby5JT0hhbmRsZXJTeW5jID8gYm9vbGVhbiA6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgICBjb25zdCBsb2FkUmVzdWx0ID0gdGhpcy5oYW5kbGVyLmxvYWQoKSBhcyBSZXR1cm5UeXBlPElPSGFuZGxlclsnbG9hZCddPjtcbiAgICBpZiAodXRpbC5pc1Byb21pc2UobG9hZFJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBsb2FkUmVzdWx0LnRoZW4oYXJ0aWZhY3RzID0+IHRoaXMubG9hZFN5bmMoYXJ0aWZhY3RzKSkgYXMgUmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYWRTeW5jKGxvYWRSZXN1bHQpIGFzIFJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91c2x5IGNvbnN0cnVjdCB0aGUgaW4gbWVtb3J5IHdlaWdodCBtYXAgYW5kXG4gICAqIGNvbXBpbGUgdGhlIGluZmVyZW5jZSBncmFwaC5cbiAgICpcbiAgICogQGRvYyB7aGVhZGluZzogJ01vZGVscycsIHN1YmhlYWRpbmc6ICdDbGFzc2VzJywgaWdub3JlQ0k6IHRydWV9XG4gICAqL1xuICBsb2FkU3luYyhhcnRpZmFjdHM6IGlvLk1vZGVsQXJ0aWZhY3RzKSB7XG4gICAgdGhpcy5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzLmFydGlmYWN0cy5tb2RlbFRvcG9sb2d5IGFzIHRlbnNvcmZsb3cuSUdyYXBoRGVmO1xuXG4gICAgbGV0IHNpZ25hdHVyZSA9IHRoaXMuYXJ0aWZhY3RzLnNpZ25hdHVyZTtcbiAgICBpZiAodGhpcy5hcnRpZmFjdHMudXNlckRlZmluZWRNZXRhZGF0YSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXJ0aWZhY3RzLnVzZXJEZWZpbmVkTWV0YWRhdGE7XG4gICAgICBpZiAobWV0YWRhdGEuc2lnbmF0dXJlICE9IG51bGwpIHtcbiAgICAgICAgc2lnbmF0dXJlID0gbWV0YWRhdGEuc2lnbmF0dXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0YWRhdGEuc3RydWN0dXJlZE91dHB1dEtleXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN0cnVjdHVyZWRPdXRwdXRLZXlzID0gbWV0YWRhdGEuc3RydWN0dXJlZE91dHB1dEtleXMgYXMgc3RyaW5nW107XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXG4gICAgdGhpcy52ZXJzaW9uID0gYCR7Z3JhcGgudmVyc2lvbnMucHJvZHVjZXJ9LiR7Z3JhcGgudmVyc2lvbnMubWluQ29uc3VtZXJ9YDtcbiAgICBjb25zdCB3ZWlnaHRNYXAgPSB0aGlzLmlvLmRlY29kZVdlaWdodHMoXG4gICAgICAgIHRoaXMuYXJ0aWZhY3RzLndlaWdodERhdGEsIHRoaXMuYXJ0aWZhY3RzLndlaWdodFNwZWNzKTtcbiAgICB0aGlzLmV4ZWN1dG9yID0gbmV3IEdyYXBoRXhlY3V0b3IoXG4gICAgICAgIE9wZXJhdGlvbk1hcHBlci5JbnN0YW5jZS50cmFuc2Zvcm1HcmFwaChncmFwaCwgdGhpcy5zaWduYXR1cmUpKTtcbiAgICB0aGlzLmV4ZWN1dG9yLndlaWdodE1hcCA9IHRoaXMuY29udmVydFRlbnNvck1hcFRvVGVuc29yc01hcCh3ZWlnaHRNYXApO1xuICAgIC8vIEF0dGFjaCBhIG1vZGVsLWxldmVsIHJlc291cmNlTWFuYWdlciB0byBlYWNoIGV4ZWN1dG9yIHRvIHNoYXJlIHJlc291cmNlcyxcbiAgICAvLyBzdWNoIGFzIGBIYXNoVGFibGVgLlxuICAgIHRoaXMuZXhlY3V0b3IucmVzb3VyY2VNYW5hZ2VyID0gdGhpcy5yZXNvdXJjZU1hbmFnZXI7XG5cbiAgICBpZiAoYXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgIT0gbnVsbCAmJlxuICAgICAgICAoYXJ0aWZhY3RzLm1vZGVsSW5pdGlhbGl6ZXIgYXMgdGVuc29yZmxvdy5JR3JhcGhEZWYpLm5vZGUgIT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZXIgPVxuICAgICAgICAgIE9wZXJhdGlvbk1hcHBlci5JbnN0YW5jZS50cmFuc2Zvcm1HcmFwaChhcnRpZmFjdHMubW9kZWxJbml0aWFsaXplcik7XG4gICAgICB0aGlzLmluaXRpYWxpemVyID0gbmV3IEdyYXBoRXhlY3V0b3IoaW5pdGlhbGl6ZXIpO1xuICAgICAgdGhpcy5pbml0aWFsaXplci53ZWlnaHRNYXAgPSB0aGlzLmV4ZWN1dG9yLndlaWdodE1hcDtcbiAgICAgIC8vIEF0dGFjaCBhIG1vZGVsLWxldmVsIHJlc291cmNlTWFuYWdlciB0byB0aGUgaW5pdGlhbGl6ZXIsIHRoZVxuICAgICAgLy8gaGFzaFRhYmxlcyBjcmVhdGVkIGZyb20gd2hlbiBleGVjdXRpbmcgdGhlIGluaXRpYWxpemVyIHdpbGwgYmUgc3RvcmVkXG4gICAgICAvLyBpbiB0aGUgcmVzb3VyY2VNYW5hZ2VyLlxuICAgICAgdGhpcy5pbml0aWFsaXplci5yZXNvdXJjZU1hbmFnZXIgPSB0aGlzLnJlc291cmNlTWFuYWdlcjtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUgPSBhcnRpZmFjdHMuaW5pdGlhbGl6ZXJTaWduYXR1cmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQvb3Igd2VpZ2h0cyBvZiB0aGUgR3JhcGhNb2RlbC5cbiAgICpcbiAgICogQW4gYElPSGFuZGxlcmAgaXMgYW4gb2JqZWN0IHRoYXQgaGFzIGEgYHNhdmVgIG1ldGhvZCBvZiB0aGUgcHJvcGVyXG4gICAqIHNpZ25hdHVyZSBkZWZpbmVkLiBUaGUgYHNhdmVgIG1ldGhvZCBtYW5hZ2VzIHRoZSBzdG9yaW5nIG9yXG4gICAqIHRyYW5zbWlzc2lvbiBvZiBzZXJpYWxpemVkIGRhdGEgKFwiYXJ0aWZhY3RzXCIpIHRoYXQgcmVwcmVzZW50IHRoZVxuICAgKiBtb2RlbCdzIHRvcG9sb2d5IGFuZCB3ZWlnaHRzIG9udG8gb3IgdmlhIGEgc3BlY2lmaWMgbWVkaXVtLCBzdWNoIGFzXG4gICAqIGZpbGUgZG93bmxvYWRzLCBsb2NhbCBzdG9yYWdlLCBJbmRleGVkREIgaW4gdGhlIHdlYiBicm93c2VyIGFuZCBIVFRQXG4gICAqIHJlcXVlc3RzIHRvIGEgc2VydmVyLiBUZW5zb3JGbG93LmpzIHByb3ZpZGVzIGBJT0hhbmRsZXJgXG4gICAqIGltcGxlbWVudGF0aW9ucyBmb3IgYSBudW1iZXIgb2YgZnJlcXVlbnRseSB1c2VkIHNhdmluZyBtZWRpdW1zLCBzdWNoIGFzXG4gICAqIGB0Zi5pby5icm93c2VyRG93bmxvYWRzYCBhbmQgYHRmLmlvLmJyb3dzZXJMb2NhbFN0b3JhZ2VgLiBTZWUgYHRmLmlvYFxuICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhbHNvIGFsbG93cyB5b3UgdG8gcmVmZXIgdG8gY2VydGFpbiB0eXBlcyBvZiBgSU9IYW5kbGVyYHNcbiAgICogYXMgVVJMLWxpa2Ugc3RyaW5nIHNob3J0Y3V0cywgc3VjaCBhcyAnbG9jYWxzdG9yYWdlOi8vJyBhbmRcbiAgICogJ2luZGV4ZWRkYjovLycuXG4gICAqXG4gICAqIEV4YW1wbGUgMTogU2F2ZSBgbW9kZWxgJ3MgdG9wb2xvZ3kgYW5kIHdlaWdodHMgdG8gYnJvd3NlciBbbG9jYWxcbiAgICogc3RvcmFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9sb2NhbFN0b3JhZ2UpO1xuICAgKiB0aGVuIGxvYWQgaXQgYmFjay5cbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgbW9kZWxVcmwgPVxuICAgKiAgICAnaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3RmanMtbW9kZWxzL3NhdmVkbW9kZWwvbW9iaWxlbmV0X3YyXzEuMF8yMjQvbW9kZWwuanNvbic7XG4gICAqIGNvbnN0IG1vZGVsID0gYXdhaXQgdGYubG9hZEdyYXBoTW9kZWwobW9kZWxVcmwpO1xuICAgKiBjb25zdCB6ZXJvcyA9IHRmLnplcm9zKFsxLCAyMjQsIDIyNCwgM10pO1xuICAgKiBtb2RlbC5wcmVkaWN0KHplcm9zKS5wcmludCgpO1xuICAgKlxuICAgKiBjb25zdCBzYXZlUmVzdWx0cyA9IGF3YWl0IG1vZGVsLnNhdmUoJ2xvY2Fsc3RvcmFnZTovL215LW1vZGVsLTEnKTtcbiAgICpcbiAgICogY29uc3QgbG9hZGVkTW9kZWwgPSBhd2FpdCB0Zi5sb2FkR3JhcGhNb2RlbCgnbG9jYWxzdG9yYWdlOi8vbXktbW9kZWwtMScpO1xuICAgKiBjb25zb2xlLmxvZygnUHJlZGljdGlvbiBmcm9tIGxvYWRlZCBtb2RlbDonKTtcbiAgICogbW9kZWwucHJlZGljdCh6ZXJvcykucHJpbnQoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyT3JVUkwgQW4gaW5zdGFuY2Ugb2YgYElPSGFuZGxlcmAgb3IgYSBVUkwtbGlrZSxcbiAgICogc2NoZW1lLWJhc2VkIHN0cmluZyBzaG9ydGN1dCBmb3IgYElPSGFuZGxlcmAuXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9ucyBmb3Igc2F2aW5nIHRoZSBtb2RlbC5cbiAgICogQHJldHVybnMgQSBgUHJvbWlzZWAgb2YgYFNhdmVSZXN1bHRgLCB3aGljaCBzdW1tYXJpemVzIHRoZSByZXN1bHQgb2ZcbiAgICogdGhlIHNhdmluZywgc3VjaCBhcyBieXRlIHNpemVzIG9mIHRoZSBzYXZlZCBhcnRpZmFjdHMgZm9yIHRoZSBtb2RlbCdzXG4gICAqICAgdG9wb2xvZ3kgYW5kIHdlaWdodCB2YWx1ZXMuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3NlcycsIGlnbm9yZUNJOiB0cnVlfVxuICAgKi9cbiAgYXN5bmMgc2F2ZShoYW5kbGVyT3JVUkw6IGlvLklPSGFuZGxlcnxzdHJpbmcsIGNvbmZpZz86IGlvLlNhdmVDb25maWcpOlxuICAgICAgUHJvbWlzZTxpby5TYXZlUmVzdWx0PiB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyT3JVUkwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaW8uZ2V0U2F2ZUhhbmRsZXJzKGhhbmRsZXJPclVSTCk7XG4gICAgICBpZiAoaGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgc2F2ZSBoYW5kbGVycyBmb3IgVVJMICcke2hhbmRsZXJPclVSTH0nYCk7XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZXJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZvdW5kIG1vcmUgdGhhbiBvbmUgKCR7aGFuZGxlcnMubGVuZ3RofSkgc2F2ZSBoYW5kbGVycyBmb3IgYCArXG4gICAgICAgICAgICBgVVJMICcke2hhbmRsZXJPclVSTH0nYCk7XG4gICAgICB9XG4gICAgICBoYW5kbGVyT3JVUkwgPSBoYW5kbGVyc1swXTtcbiAgICB9XG4gICAgaWYgKGhhbmRsZXJPclVSTC5zYXZlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnR3JhcGhNb2RlbC5zYXZlKCkgY2Fubm90IHByb2NlZWQgYmVjYXVzZSB0aGUgSU9IYW5kbGVyICcgK1xuICAgICAgICAgICdwcm92aWRlZCBkb2VzIG5vdCBoYXZlIHRoZSBgc2F2ZWAgYXR0cmlidXRlIGRlZmluZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhbmRsZXJPclVSTC5zYXZlKHRoaXMuYXJ0aWZhY3RzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3RydWN0dXJlZE91dHB1dE5hbWVzKG91dHB1dFRlbnNvcnM6IFRlbnNvcnxUZW5zb3JbXSkge1xuICAgIGlmICh0aGlzLnN0cnVjdHVyZWRPdXRwdXRLZXlzKSB7XG4gICAgICBjb25zdCBvdXRwdXRUZW5zb3JzQXJyYXkgPVxuICAgICAgICAgIG91dHB1dFRlbnNvcnMgaW5zdGFuY2VvZiBUZW5zb3IgPyBbb3V0cHV0VGVuc29yc10gOiBvdXRwdXRUZW5zb3JzO1xuICAgICAgY29uc3Qgb3V0cHV0VGVuc29yTWFwOiBOYW1lZFRlbnNvck1hcCA9IHt9O1xuXG4gICAgICBvdXRwdXRUZW5zb3JzQXJyYXkuZm9yRWFjaChcbiAgICAgICAgICAob3V0cHV0VGVuc29yLCBpKSA9PiBvdXRwdXRUZW5zb3JNYXBbdGhpcy5zdHJ1Y3R1cmVkT3V0cHV0S2V5c1tpXV0gPVxuICAgICAgICAgICAgICBvdXRwdXRUZW5zb3IpO1xuXG4gICAgICByZXR1cm4gb3V0cHV0VGVuc29yTWFwO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0VGVuc29ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBpbmZlcmVuY2UgZm9yIHRoZSBpbnB1dCB0ZW5zb3JzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHRlbnNvcnMsIHdoZW4gdGhlcmUgaXMgc2luZ2xlIGlucHV0IGZvciB0aGUgbW9kZWwsXG4gICAqIGlucHV0cyBwYXJhbSBzaG91bGQgYmUgYSBgdGYuVGVuc29yYC4gRm9yIG1vZGVscyB3aXRoIG11dGxpcGxlIGlucHV0cyxcbiAgICogaW5wdXRzIHBhcmFtcyBzaG91bGQgYmUgaW4gZWl0aGVyIGB0Zi5UZW5zb3JgW10gaWYgdGhlIGlucHV0IG9yZGVyIGlzXG4gICAqIGZpeGVkLCBvciBvdGhlcndpc2UgTmFtZWRUZW5zb3JNYXAgZm9ybWF0LlxuICAgKlxuICAgKiBGb3IgbW9kZWwgd2l0aCBtdWx0aXBsZSBpbnB1dHMsIHdlIHJlY29tbWVuZCB5b3UgdXNlIE5hbWVkVGVuc29yTWFwIGFzIHRoZVxuICAgKiBpbnB1dCB0eXBlLCBpZiB5b3UgdXNlIGB0Zi5UZW5zb3JgW10sIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgbmVlZHMgdG9cbiAgICogZm9sbG93IHRoZVxuICAgKiBvcmRlciBvZiBpbnB1dE5vZGVzIGFycmF5LiBAc2VlIHtAbGluayBHcmFwaE1vZGVsLmlucHV0Tm9kZXN9XG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBmZWVkIGFueSBpbnRlcm1lZGlhdGUgbm9kZXMgdXNpbmcgdGhlIE5hbWVkVGVuc29yTWFwIGFzIHRoZVxuICAgKiBpbnB1dCB0eXBlLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGdyYXBoXG4gICAqICAgIElucHV0Tm9kZSA9PiBJbnRlcm1lZGlhdGUgPT4gT3V0cHV0Tm9kZSxcbiAgICogeW91IGNhbiBleGVjdXRlIHRoZSBzdWJncmFwaCBJbnRlcm1lZGlhdGUgPT4gT3V0cHV0Tm9kZSBieSBjYWxsaW5nXG4gICAqICAgIG1vZGVsLmV4ZWN1dGUoJ0ludGVybWVkaWF0ZU5vZGUnIDogdGYudGVuc29yKC4uLikpO1xuICAgKlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgbW9kZWxzIHRoYXQgdXNlcyB0Zi5keW5hbWljX3Jubiwgd2hlcmUgdGhlIGludGVybWVkaWF0ZVxuICAgKiBzdGF0ZSBuZWVkcyB0byBiZSBmZWQgbWFudWFsbHkuXG4gICAqXG4gICAqIEZvciBiYXRjaCBpbmZlcmVuY2UgZXhlY3V0aW9uLCB0aGUgdGVuc29ycyBmb3IgZWFjaCBpbnB1dCBuZWVkIHRvIGJlXG4gICAqIGNvbmNhdGVuYXRlZCB0b2dldGhlci4gRm9yIGV4YW1wbGUgd2l0aCBtb2JpbGVuZXQsIHRoZSByZXF1aXJlZCBpbnB1dCBzaGFwZVxuICAgKiBpcyBbMSwgMjQ0LCAyNDQsIDNdLCB3aGljaCByZXByZXNlbnRzIHRoZSBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxdLlxuICAgKiBJZiB3ZSBhcmUgcHJvdmlkZSBhIGJhdGNoZWQgZGF0YSBvZiAxMDAgaW1hZ2VzLCB0aGUgaW5wdXQgdGVuc29yIHNob3VsZCBiZVxuICAgKiBpbiB0aGUgc2hhcGUgb2YgWzEwMCwgMjQ0LCAyNDQsIDNdLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIFByZWRpY3Rpb24gY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmeWluZyB0aGUgYmF0Y2ggc2l6ZS5cbiAgICogQ3VycmVudGx5IHRoZSBiYXRjaCBzaXplIG9wdGlvbiBpcyBpZ25vcmVkIGZvciBncmFwaCBtb2RlbC5cbiAgICpcbiAgICogQHJldHVybnMgSW5mZXJlbmNlIHJlc3VsdCB0ZW5zb3JzLiBJZiB0aGUgbW9kZWwgaXMgY29udmVydGVkIGFuZCBpdFxuICAgKiBvcmlnaW5hbGx5IGhhZCBzdHJ1Y3R1cmVkX291dHB1dHMgaW4gdGVuc29yZmxvdywgdGhlbiBhIE5hbWVkVGVuc29yTWFwXG4gICAqIHdpbGwgYmUgcmV0dXJuZWQgbWF0Y2hpbmcgdGhlIHN0cnVjdHVyZWRfb3V0cHV0cy4gSWYgbm8gc3RydWN0dXJlZF9vdXRwdXRzXG4gICAqIGFyZSBwcmVzZW50LCB0aGUgb3V0cHV0IHdpbGwgYmUgc2luZ2xlIGB0Zi5UZW5zb3JgIGlmIHRoZSBtb2RlbCBoYXMgc2luZ2xlXG4gICAqIG91dHB1dCBub2RlLCBvdGhlcndpc2UgVGVuc29yW10uXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBwcmVkaWN0KGlucHV0czogVGVuc29yfFRlbnNvcltdfE5hbWVkVGVuc29yTWFwLCBjb25maWc/OiBNb2RlbFByZWRpY3RDb25maWcpOlxuICAgICAgVGVuc29yfFRlbnNvcltdfE5hbWVkVGVuc29yTWFwIHtcbiAgICBjb25zdCBvdXRwdXRUZW5zb3JzID0gdGhpcy5leGVjdXRlKGlucHV0cywgdGhpcy5vdXRwdXROb2Rlcyk7XG4gICAgcmV0dXJuIHRoaXMuYWRkU3RydWN0dXJlZE91dHB1dE5hbWVzKG91dHB1dFRlbnNvcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGluZmVyZW5jZSBmb3IgdGhlIGlucHV0IHRlbnNvcnMgaW4gYXN5bmMgZmFzaGlvbiwgdXNlIHRoaXNcbiAgICogbWV0aG9kIHdoZW4geW91ciBtb2RlbCBjb250YWlucyBjb250cm9sIGZsb3cgb3BzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHRlbnNvcnMsIHdoZW4gdGhlcmUgaXMgc2luZ2xlIGlucHV0IGZvciB0aGUgbW9kZWwsXG4gICAqIGlucHV0cyBwYXJhbSBzaG91bGQgYmUgYSBgdGYuVGVuc29yYC4gRm9yIG1vZGVscyB3aXRoIG11dGxpcGxlIGlucHV0cyxcbiAgICogaW5wdXRzIHBhcmFtcyBzaG91bGQgYmUgaW4gZWl0aGVyIGB0Zi5UZW5zb3JgW10gaWYgdGhlIGlucHV0IG9yZGVyIGlzXG4gICAqIGZpeGVkLCBvciBvdGhlcndpc2UgTmFtZWRUZW5zb3JNYXAgZm9ybWF0LlxuICAgKlxuICAgKiBGb3IgbW9kZWwgd2l0aCBtdWx0aXBsZSBpbnB1dHMsIHdlIHJlY29tbWVuZCB5b3UgdXNlIE5hbWVkVGVuc29yTWFwIGFzIHRoZVxuICAgKiBpbnB1dCB0eXBlLCBpZiB5b3UgdXNlIGB0Zi5UZW5zb3JgW10sIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgbmVlZHMgdG9cbiAgICogZm9sbG93IHRoZVxuICAgKiBvcmRlciBvZiBpbnB1dE5vZGVzIGFycmF5LiBAc2VlIHtAbGluayBHcmFwaE1vZGVsLmlucHV0Tm9kZXN9XG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBmZWVkIGFueSBpbnRlcm1lZGlhdGUgbm9kZXMgdXNpbmcgdGhlIE5hbWVkVGVuc29yTWFwIGFzIHRoZVxuICAgKiBpbnB1dCB0eXBlLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGdyYXBoXG4gICAqICAgIElucHV0Tm9kZSA9PiBJbnRlcm1lZGlhdGUgPT4gT3V0cHV0Tm9kZSxcbiAgICogeW91IGNhbiBleGVjdXRlIHRoZSBzdWJncmFwaCBJbnRlcm1lZGlhdGUgPT4gT3V0cHV0Tm9kZSBieSBjYWxsaW5nXG4gICAqICAgIG1vZGVsLmV4ZWN1dGUoJ0ludGVybWVkaWF0ZU5vZGUnIDogdGYudGVuc29yKC4uLikpO1xuICAgKlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgbW9kZWxzIHRoYXQgdXNlcyB0Zi5keW5hbWljX3Jubiwgd2hlcmUgdGhlIGludGVybWVkaWF0ZVxuICAgKiBzdGF0ZSBuZWVkcyB0byBiZSBmZWQgbWFudWFsbHkuXG4gICAqXG4gICAqIEZvciBiYXRjaCBpbmZlcmVuY2UgZXhlY3V0aW9uLCB0aGUgdGVuc29ycyBmb3IgZWFjaCBpbnB1dCBuZWVkIHRvIGJlXG4gICAqIGNvbmNhdGVuYXRlZCB0b2dldGhlci4gRm9yIGV4YW1wbGUgd2l0aCBtb2JpbGVuZXQsIHRoZSByZXF1aXJlZCBpbnB1dCBzaGFwZVxuICAgKiBpcyBbMSwgMjQ0LCAyNDQsIDNdLCB3aGljaCByZXByZXNlbnRzIHRoZSBbYmF0Y2gsIGhlaWdodCwgd2lkdGgsIGNoYW5uZWxdLlxuICAgKiBJZiB3ZSBhcmUgcHJvdmlkZSBhIGJhdGNoZWQgZGF0YSBvZiAxMDAgaW1hZ2VzLCB0aGUgaW5wdXQgdGVuc29yIHNob3VsZCBiZVxuICAgKiBpbiB0aGUgc2hhcGUgb2YgWzEwMCwgMjQ0LCAyNDQsIDNdLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIFByZWRpY3Rpb24gY29uZmlndXJhdGlvbiBmb3Igc3BlY2lmeWluZyB0aGUgYmF0Y2ggc2l6ZS5cbiAgICogQ3VycmVudGx5IHRoZSBiYXRjaCBzaXplIG9wdGlvbiBpcyBpZ25vcmVkIGZvciBncmFwaCBtb2RlbC5cbiAgICpcbiAgICogQHJldHVybnMgQSBQcm9taXNlIG9mIGluZmVyZW5jZSByZXN1bHQgdGVuc29ycy4gSWYgdGhlIG1vZGVsIGlzIGNvbnZlcnRlZFxuICAgKiBhbmQgaXQgb3JpZ2luYWxseSBoYWQgc3RydWN0dXJlZF9vdXRwdXRzIGluIHRlbnNvcmZsb3csIHRoZW4gYVxuICAgKiBOYW1lZFRlbnNvck1hcCB3aWxsIGJlIHJldHVybmVkIG1hdGNoaW5nIHRoZSBzdHJ1Y3R1cmVkX291dHB1dHMuIElmIG5vXG4gICAqIHN0cnVjdHVyZWRfb3V0cHV0cyBhcmUgcHJlc2VudCwgdGhlIG91dHB1dCB3aWxsIGJlIHNpbmdsZSBgdGYuVGVuc29yYCBpZlxuICAgKiB0aGUgbW9kZWwgaGFzIHNpbmdsZSBvdXRwdXQgbm9kZSwgb3RoZXJ3aXNlIFRlbnNvcltdLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgYXN5bmMgcHJlZGljdEFzeW5jKFxuICAgICAgaW5wdXRzOiBUZW5zb3J8VGVuc29yW118TmFtZWRUZW5zb3JNYXAsXG4gICAgICBjb25maWc/OiBNb2RlbFByZWRpY3RDb25maWcpOiBQcm9taXNlPFRlbnNvcnxUZW5zb3JbXXxOYW1lZFRlbnNvck1hcD4ge1xuICAgIGNvbnN0IG91dHB1dFRlbnNvcnMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBc3luYyhpbnB1dHMsIHRoaXMub3V0cHV0Tm9kZXMpO1xuICAgIHJldHVybiB0aGlzLmFkZFN0cnVjdHVyZWRPdXRwdXROYW1lcyhvdXRwdXRUZW5zb3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplSW5wdXRzKGlucHV0czogVGVuc29yfFRlbnNvcltdfFxuICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lZFRlbnNvck1hcCk6IE5hbWVkVGVuc29yTWFwIHtcbiAgICBpZiAoIShpbnB1dHMgaW5zdGFuY2VvZiBUZW5zb3IpICYmICFBcnJheS5pc0FycmF5KGlucHV0cykpIHtcbiAgICAgIC8vIFRoZSBpbnB1dCBpcyBhbHJlYWR5IGEgTmFtZWRUZW5zb3JNYXAuXG4gICAgICBjb25zdCBzaWduYXR1cmVJbnB1dHMgPSB0aGlzLnNpZ25hdHVyZT8uaW5wdXRzO1xuICAgICAgaWYgKHNpZ25hdHVyZUlucHV0cyAhPSBudWxsKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5wdXQgaW4gc2lnbmF0dXJlSW5wdXRzKSB7XG4gICAgICAgICAgY29uc3QgdGVuc29yID0gc2lnbmF0dXJlSW5wdXRzW2lucHV0XTtcbiAgICAgICAgICBpZiAodGVuc29yLnJlc291cmNlSWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXRzW2lucHV0XSA9IHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dFt0ZW5zb3IucmVzb3VyY2VJZF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5wdXRzO1xuICAgIH1cbiAgICBpbnB1dHMgPSBBcnJheS5pc0FycmF5KGlucHV0cykgPyBpbnB1dHMgOiBbaW5wdXRzXTtcblxuICAgIGNvbnN0IG51bUNhcHR1cmVkSW5wdXRzID1cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KS5sZW5ndGg7XG4gICAgaWYgKGlucHV0cy5sZW5ndGggKyBudW1DYXB0dXJlZElucHV0cyAhPT0gdGhpcy5pbnB1dE5vZGVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCB0ZW5zb3IgY291bnQgbWlzbWF0Y2gsIHRoZSBncmFwaCBtb2RlbCBoYXMgJHtcbiAgICAgICAgICB0aGlzLmlucHV0Tm9kZXMubGVuZ3RoIC1cbiAgICAgICAgICBudW1DYXB0dXJlZElucHV0c30gbm9uLXJlc291cmNlIHBsYWNlaG9sZGVycywgd2hpbGUgdGhlcmUgYXJlICR7XG4gICAgICAgICAgaW5wdXRzLmxlbmd0aH0gaW5wdXQgdGVuc29ycyBwcm92aWRlZC5gKTtcbiAgICB9XG5cbiAgICBsZXQgaW5wdXRJbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXROb2Rlcy5yZWR1Y2UoKG1hcCwgaW5wdXROYW1lKSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZUlkID0gdGhpcy5zaWduYXR1cmU/LmlucHV0cz8uW2lucHV0TmFtZV0/LnJlc291cmNlSWQ7XG4gICAgICBpZiAocmVzb3VyY2VJZCAhPSBudWxsKSB7XG4gICAgICAgIG1hcFtpbnB1dE5hbWVdID0gdGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0W3Jlc291cmNlSWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwW2lucHV0TmFtZV0gPSAoaW5wdXRzIGFzIFRlbnNvcltdKVtpbnB1dEluZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LCB7fSBhcyBOYW1lZFRlbnNvck1hcCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZU91dHB1dHMob3V0cHV0czogc3RyaW5nfHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIG91dHB1dHMgPSBvdXRwdXRzIHx8IHRoaXMub3V0cHV0Tm9kZXM7XG4gICAgcmV0dXJuICFBcnJheS5pc0FycmF5KG91dHB1dHMpID8gW291dHB1dHNdIDogb3V0cHV0cztcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZUluaXRpYWxpemVyR3JhcGgoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbml0aWFsaXplclNpZ25hdHVyZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplci5leGVjdXRlKHt9LCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVyLmV4ZWN1dGUoXG4gICAgICAgICAge30sIE9iamVjdC5rZXlzKHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUub3V0cHV0cykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUluaXRpYWxpemVyR3JhcGhBc3luYygpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICh0aGlzLmluaXRpYWxpemVyU2lnbmF0dXJlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVyLmV4ZWN1dGVBc3luYyh7fSwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplci5leGVjdXRlQXN5bmMoXG4gICAgICAgICAge30sIE9iamVjdC5rZXlzKHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUub3V0cHV0cykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dChvdXRwdXRzOiBUZW5zb3JbXSkge1xuICAgIHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dCA9IHt9O1xuXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZXJTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZU91dHB1dHMgPSB0aGlzLmluaXRpYWxpemVyU2lnbmF0dXJlLm91dHB1dHM7XG4gICAgICBjb25zdCBvdXRwdXROYW1lcyA9IE9iamVjdC5rZXlzKHNpZ25hdHVyZU91dHB1dHMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvdXRwdXROYW1lID0gb3V0cHV0TmFtZXNbaV07XG4gICAgICAgIGNvbnN0IHRlbnNvckluZm8gPSBzaWduYXR1cmVPdXRwdXRzW291dHB1dE5hbWVdO1xuICAgICAgICB0aGlzLnJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXRbdGVuc29ySW5mby5yZXNvdXJjZUlkXSA9IG91dHB1dHNbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGluZmVyZW5jZSBmb3IgdGhlIG1vZGVsIGZvciBnaXZlbiBpbnB1dCB0ZW5zb3JzLlxuICAgKiBAcGFyYW0gaW5wdXRzIHRlbnNvciwgdGVuc29yIGFycmF5IG9yIHRlbnNvciBtYXAgb2YgdGhlIGlucHV0cyBmb3IgdGhlXG4gICAqIG1vZGVsLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZSBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgb3V0cHV0IG5vZGUgbmFtZSBmcm9tIHRoZSBUZW5zb3JGbG93IG1vZGVsLCBpZiBub1xuICAgKiBvdXRwdXRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IG91dHB1dHMgb2YgdGhlIG1vZGVsIHdvdWxkIGJlIHVzZWQuXG4gICAqIFlvdSBjYW4gaW5zcGVjdCBpbnRlcm1lZGlhdGUgbm9kZXMgb2YgdGhlIG1vZGVsIGJ5IGFkZGluZyB0aGVtIHRvIHRoZVxuICAgKiBvdXRwdXRzIGFycmF5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHNpbmdsZSB0ZW5zb3IgaWYgcHJvdmlkZWQgd2l0aCBhIHNpbmdsZSBvdXRwdXQgb3Igbm8gb3V0cHV0c1xuICAgKiBhcmUgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG9ubHkgb25lIGRlZmF1bHQgb3V0cHV0LCBvdGhlcndpc2UgcmV0dXJuIGFcbiAgICogdGVuc29yIGFycmF5LiBUaGUgb3JkZXIgb2YgdGhlIHRlbnNvciBhcnJheSBpcyB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0c1xuICAgKiBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHRoZSBvcmRlciBvZiBvdXRwdXROb2RlcyBhdHRyaWJ1dGUgb2YgdGhlIG1vZGVsLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgZXhlY3V0ZShpbnB1dHM6IFRlbnNvcnxUZW5zb3JbXXxOYW1lZFRlbnNvck1hcCwgb3V0cHV0cz86IHN0cmluZ3xzdHJpbmdbXSk6XG4gICAgICBUZW5zb3J8VGVuc29yW10ge1xuICAgIGlmICh0aGlzLnJlc291cmNlSWRUb0NhcHR1cmVkSW5wdXQgPT0gbnVsbCkge1xuICAgICAgdGhpcy5zZXRSZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0KHRoaXMuZXhlY3V0ZUluaXRpYWxpemVyR3JhcGgoKSk7XG4gICAgfVxuICAgIGlucHV0cyA9IHRoaXMubm9ybWFsaXplSW5wdXRzKGlucHV0cyk7XG4gICAgb3V0cHV0cyA9IHRoaXMubm9ybWFsaXplT3V0cHV0cyhvdXRwdXRzKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV4ZWN1dG9yLmV4ZWN1dGUoaW5wdXRzLCBvdXRwdXRzKTtcbiAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA+IDEgPyByZXN1bHQgOiByZXN1bHRbMF07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgaW5mZXJlbmNlIGZvciB0aGUgbW9kZWwgZm9yIGdpdmVuIGlucHV0IHRlbnNvcnMgaW4gYXN5bmNcbiAgICogZmFzaGlvbiwgdXNlIHRoaXMgbWV0aG9kIHdoZW4geW91ciBtb2RlbCBjb250YWlucyBjb250cm9sIGZsb3cgb3BzLlxuICAgKiBAcGFyYW0gaW5wdXRzIHRlbnNvciwgdGVuc29yIGFycmF5IG9yIHRlbnNvciBtYXAgb2YgdGhlIGlucHV0cyBmb3IgdGhlXG4gICAqIG1vZGVsLCBrZXllZCBieSB0aGUgaW5wdXQgbm9kZSBuYW1lcy5cbiAgICogQHBhcmFtIG91dHB1dHMgb3V0cHV0IG5vZGUgbmFtZSBmcm9tIHRoZSBUZW5zb3JGbG93IG1vZGVsLCBpZiBubyBvdXRwdXRzXG4gICAqIGFyZSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IG91dHB1dHMgb2YgdGhlIG1vZGVsIHdvdWxkIGJlIHVzZWQuIFlvdSBjYW5cbiAgICogaW5zcGVjdCBpbnRlcm1lZGlhdGUgbm9kZXMgb2YgdGhlIG1vZGVsIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBvdXRwdXRzXG4gICAqIGFycmF5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIFByb21pc2Ugb2Ygc2luZ2xlIHRlbnNvciBpZiBwcm92aWRlZCB3aXRoIGEgc2luZ2xlIG91dHB1dCBvclxuICAgKiBubyBvdXRwdXRzIGFyZSBwcm92aWRlZCBhbmQgdGhlcmUgaXMgb25seSBvbmUgZGVmYXVsdCBvdXRwdXQsIG90aGVyd2lzZVxuICAgKiByZXR1cm4gYSB0ZW5zb3IgbWFwLlxuICAgKlxuICAgKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0NsYXNzZXMnfVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUFzeW5jKFxuICAgICAgaW5wdXRzOiBUZW5zb3J8VGVuc29yW118TmFtZWRUZW5zb3JNYXAsXG4gICAgICBvdXRwdXRzPzogc3RyaW5nfHN0cmluZ1tdKTogUHJvbWlzZTxUZW5zb3J8VGVuc29yW10+IHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZUlkVG9DYXB0dXJlZElucHV0ID09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0UmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dChcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVJbml0aWFsaXplckdyYXBoQXN5bmMoKSk7XG4gICAgfVxuICAgIGlucHV0cyA9IHRoaXMubm9ybWFsaXplSW5wdXRzKGlucHV0cyk7XG4gICAgb3V0cHV0cyA9IHRoaXMubm9ybWFsaXplT3V0cHV0cyhvdXRwdXRzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dG9yLmV4ZWN1dGVBc3luYyhpbnB1dHMsIG91dHB1dHMpO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID4gMSA/IHJlc3VsdCA6IHJlc3VsdFswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW50ZXJtZWRpYXRlIHRlbnNvcnMgZm9yIG1vZGVsIGRlYnVnZ2luZyBtb2RlIChmbGFnXG4gICAqIEtFRVBfSU5URVJNRURJQVRFX1RFTlNPUlMgaXMgdHJ1ZSkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBnZXRJbnRlcm1lZGlhdGVUZW5zb3JzKCk6IE5hbWVkVGVuc29yc01hcCB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0b3IuZ2V0SW50ZXJtZWRpYXRlVGVuc29ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgaW50ZXJtZWRpYXRlIHRlbnNvcnMgZm9yIG1vZGVsIGRlYnVnZ2luZyBtb2RlIChmbGFnXG4gICAqIEtFRVBfSU5URVJNRURJQVRFX1RFTlNPUlMgaXMgdHJ1ZSkuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBkaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ycygpIHtcbiAgICB0aGlzLmV4ZWN1dG9yLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JzKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUZW5zb3JNYXBUb1RlbnNvcnNNYXAobWFwOiBOYW1lZFRlbnNvck1hcCk6IE5hbWVkVGVuc29yc01hcCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hcCkucmVkdWNlKChuZXdNYXA6IE5hbWVkVGVuc29yc01hcCwga2V5KSA9PiB7XG4gICAgICBuZXdNYXBba2V5XSA9IFttYXBba2V5XV07XG4gICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIHdlaWdodCB0ZW5zb3JzIGFuZCByZXNvdXJjZU1hbmFnZXIuXG4gICAqXG4gICAqIEBkb2Mge2hlYWRpbmc6ICdNb2RlbHMnLCBzdWJoZWFkaW5nOiAnQ2xhc3Nlcyd9XG4gICAqL1xuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuZXhlY3V0b3IuZGlzcG9zZSgpO1xuXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZXIpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZXIuZGlzcG9zZSgpO1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dCkge1xuICAgICAgICBkaXNwb3NlKHRoaXMucmVzb3VyY2VJZFRvQ2FwdHVyZWRJbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZU1hbmFnZXIuZGlzcG9zZSgpO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBhIGdyYXBoIG1vZGVsIGdpdmVuIGEgVVJMIHRvIHRoZSBtb2RlbCBkZWZpbml0aW9uLlxuICpcbiAqIEV4YW1wbGUgb2YgbG9hZGluZyBNb2JpbGVOZXRWMiBmcm9tIGEgVVJMIGFuZCBtYWtpbmcgYSBwcmVkaWN0aW9uIHdpdGggYVxuICogemVyb3MgaW5wdXQ6XG4gKlxuICogYGBganNcbiAqIGNvbnN0IG1vZGVsVXJsID1cbiAqICAgICdodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdGZqcy1tb2RlbHMvc2F2ZWRtb2RlbC9tb2JpbGVuZXRfdjJfMS4wXzIyNC9tb2RlbC5qc29uJztcbiAqIGNvbnN0IG1vZGVsID0gYXdhaXQgdGYubG9hZEdyYXBoTW9kZWwobW9kZWxVcmwpO1xuICogY29uc3QgemVyb3MgPSB0Zi56ZXJvcyhbMSwgMjI0LCAyMjQsIDNdKTtcbiAqIG1vZGVsLnByZWRpY3QoemVyb3MpLnByaW50KCk7XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlIG9mIGxvYWRpbmcgTW9iaWxlTmV0VjIgZnJvbSBhIFRGIEh1YiBVUkwgYW5kIG1ha2luZyBhIHByZWRpY3Rpb25cbiAqIHdpdGggYSB6ZXJvcyBpbnB1dDpcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9kZWxVcmwgPVxuICogICAgJ2h0dHBzOi8vdGZodWIuZGV2L2dvb2dsZS9pbWFnZW5ldC9tb2JpbGVuZXRfdjJfMTQwXzIyNC9jbGFzc2lmaWNhdGlvbi8yJztcbiAqIGNvbnN0IG1vZGVsID0gYXdhaXQgdGYubG9hZEdyYXBoTW9kZWwobW9kZWxVcmwsIHtmcm9tVEZIdWI6IHRydWV9KTtcbiAqIGNvbnN0IHplcm9zID0gdGYuemVyb3MoWzEsIDIyNCwgMjI0LCAzXSk7XG4gKiBtb2RlbC5wcmVkaWN0KHplcm9zKS5wcmludCgpO1xuICogYGBgXG4gKiBAcGFyYW0gbW9kZWxVcmwgVGhlIHVybCBvciBhbiBgaW8uSU9IYW5kbGVyYCB0aGF0IGxvYWRzIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBIVFRQIHJlcXVlc3QsIHdoaWNoIGFsbG93cyB0byBzZW5kXG4gKiAgICAgY3JlZGVudGlhbHNcbiAqICAgIGFuZCBjdXN0b20gaGVhZGVycy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0xvYWRpbmcnfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdyYXBoTW9kZWwoXG4gICAgbW9kZWxVcmw6IHN0cmluZ3xpby5JT0hhbmRsZXIsIG9wdGlvbnM6IGlvLkxvYWRPcHRpb25zID0ge30sXG4gICAgdGZpbyA9IGlvKTogUHJvbWlzZTxHcmFwaE1vZGVsPiB7XG4gIGlmIChtb2RlbFVybCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnbW9kZWxVcmwgaW4gbG9hZEdyYXBoTW9kZWwoKSBjYW5ub3QgYmUgbnVsbC4gUGxlYXNlIHByb3ZpZGUgYSB1cmwgJyArXG4gICAgICAgICdvciBhbiBJT0hhbmRsZXIgdGhhdCBsb2FkcyB0aGUgbW9kZWwnKTtcbiAgfVxuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuZnJvbVRGSHViICYmIHR5cGVvZiBtb2RlbFVybCA9PT0gJ3N0cmluZycpIHtcbiAgICBtb2RlbFVybCA9IGdldFRGSHViVXJsKG1vZGVsVXJsKTtcbiAgfVxuICBjb25zdCBtb2RlbCA9IG5ldyBHcmFwaE1vZGVsKG1vZGVsVXJsLCBvcHRpb25zLCB0ZmlvKTtcbiAgYXdhaXQgbW9kZWwubG9hZCgpO1xuICByZXR1cm4gbW9kZWw7XG59XG5cbi8qKlxuICogTG9hZCBhIGdyYXBoIG1vZGVsIGdpdmVuIGEgc3luY2hyb25vdXMgSU8gaGFuZGxlciB3aXRoIGEgJ2xvYWQnIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0gbW9kZWxTb3VyY2UgVGhlIGBpby5JT0hhbmRsZXJTeW5jYCB0aGF0IGxvYWRzIHRoZSBtb2RlbCwgb3IgdGhlXG4gKiAgICAgYGlvLk1vZGVsQXJ0aWZhY3RzYCB0aGF0IGVuY29kZSB0aGUgbW9kZWwsIG9yIGEgdHVwbGUgb2ZcbiAqICAgICBgW2lvLk1vZGVsSlNPTiwgQXJyYXlCdWZmZXJdYCBvZiB3aGljaCB0aGUgZmlyc3QgZWxlbWVudCBlbmNvZGVzIHRoZVxuICogICAgICBtb2RlbCBhbmQgdGhlIHNlY29uZCBjb250YWlucyB0aGUgd2VpZ2h0cy5cbiAqXG4gKiBAZG9jIHtoZWFkaW5nOiAnTW9kZWxzJywgc3ViaGVhZGluZzogJ0xvYWRpbmcnfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEdyYXBoTW9kZWxTeW5jKFxuICAgIG1vZGVsU291cmNlOiBpby5JT0hhbmRsZXJTeW5jfFxuICAgIGlvLk1vZGVsQXJ0aWZhY3RzfFtpby5Nb2RlbEpTT04sIC8qIFdlaWdodHMgKi8gQXJyYXlCdWZmZXJdKTpcbiAgICBHcmFwaE1vZGVsPGlvLklPSGFuZGxlclN5bmM+IHtcbiAgaWYgKG1vZGVsU291cmNlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdtb2RlbFVybCBpbiBsb2FkR3JhcGhNb2RlbFN5bmMoKSBjYW5ub3QgYmUgbnVsbC4gUGxlYXNlIHByb3ZpZGUgJyArXG4gICAgICAgICdtb2RlbCBhcnRpZmFjdHMgb3IgYW4gSU9IYW5kbGVyIHRoYXQgbG9hZHMgdGhlIG1vZGVsJyk7XG4gIH1cblxuICBsZXQgaW9IYW5kbGVyOiBpby5JT0hhbmRsZXJTeW5jO1xuICBpZiAobW9kZWxTb3VyY2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGNvbnN0IFttb2RlbEpTT04sIHdlaWdodHNdID0gbW9kZWxTb3VyY2U7XG4gICAgaWYgKCFtb2RlbEpTT04pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbW9kZWxKU09OIG11c3QgYmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmICghd2VpZ2h0cyB8fCAhKHdlaWdodHMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQW4gQXJyYXlCdWZmZXIgb2Ygd2VpZ2h0cyBtdXN0IGJlIHRoZSBzZWNvbmQgZWxlbWVudCBvZicgK1xuICAgICAgICAgICcgdGhlIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmICghKCdtb2RlbFRvcG9sb2d5JyBpbiBtb2RlbEpTT04pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIEpTT04gaXMgbWlzc2luZyBcXCdtb2RlbFRvcG9sb2d5XFwnJyk7XG4gICAgfVxuICAgIGlmICghKCd3ZWlnaHRzTWFuaWZlc3QnIGluIG1vZGVsSlNPTikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgSlNPTiBpcyBtaXNzaW5nIFxcJ3dlaWdodHNNYW5pZmVzdFxcJycpO1xuICAgIH1cblxuICAgIGNvbnN0IHdlaWdodFNwZWNzID0gaW8uZ2V0V2VpZ2h0U3BlY3MobW9kZWxKU09OLndlaWdodHNNYW5pZmVzdCk7XG4gICAgY29uc3QgbW9kZWxBcnRpZmFjdHMgPVxuICAgICAgICBpby5nZXRNb2RlbEFydGlmYWN0c0ZvckpTT05TeW5jKG1vZGVsSlNPTiwgd2VpZ2h0U3BlY3MsIHdlaWdodHMpO1xuICAgIGlvSGFuZGxlciA9IGlvLmZyb21NZW1vcnlTeW5jKG1vZGVsQXJ0aWZhY3RzKTtcbiAgfSBlbHNlIGlmICgnbG9hZCcgaW4gbW9kZWxTb3VyY2UpIHtcbiAgICAvLyBUaGVuIG1vZGVsU291cmNlIGlzIGFscmVhZHkgYW4gSU9IYW5kbGVyU3luYy5cbiAgICBpb0hhbmRsZXIgPSBtb2RlbFNvdXJjZTtcbiAgfSBlbHNlIGlmIChcbiAgICAgICdtb2RlbFRvcG9sb2d5JyBpbiBtb2RlbFNvdXJjZSAmJiAnd2VpZ2h0U3BlY3MnIGluIG1vZGVsU291cmNlICYmXG4gICAgICAnd2VpZ2h0RGF0YScgaW4gbW9kZWxTb3VyY2UpIHtcbiAgICAvLyBtb2RlbFNvdXJjZSBpcyBvZiB0eXBlIE1vZGVsQXJ0aWZhY3RzLlxuICAgIGlvSGFuZGxlciA9IGlvLmZyb21NZW1vcnlTeW5jKG1vZGVsU291cmNlKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbW9kZWwgZm9ybWF0Jyk7XG4gIH1cblxuICBjb25zdCBtb2RlbCA9IG5ldyBHcmFwaE1vZGVsKGlvSGFuZGxlcik7XG4gIG1vZGVsLmxvYWQoKTtcbiAgcmV0dXJuIG1vZGVsO1xufVxuXG5mdW5jdGlvbiBnZXRURkh1YlVybChtb2RlbFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFtb2RlbFVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbW9kZWxVcmwgPSAobW9kZWxVcmwpICsgJy8nO1xuICB9XG4gIHJldHVybiBgJHttb2RlbFVybH0ke0RFRkFVTFRfTU9ERUxfTkFNRX0ke1RGSFVCX1NFQVJDSF9QQVJBTX1gO1xufVxuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport{FaceDetection as e}from\"@mediapipe/face_detection\";import{Tensor as t,browser as n,util as i,tidy as o,add as r,mul as a,tensor2d as s,image as h,expandDims as u,cast as c,slice as l,squeeze as f,dispose as d,tensor1d as p,div as m,exp as x,sub as g,concat as y,reshape as v,clipByValue as w,sigmoid as M}from\"@tensorflow/tfjs-core\";import{loadGraphModel as S}from\"@tensorflow/tfjs-converter\";var b=function(){return b=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&o[o.length-1])||6!==r[0]&&2!==r[0])){a=0;continue}if(3===r[0]&&(!o||r[1]>o[0]&&r[1]h?(r=e.width,a=e.width*s,c=(1-h/s)/2):(r=e.height/s,a=e.height,u=(1-s/h)/2),e.width=r,e.height=a,{top:c,left:u,right:u,bottom:c}}(d,i,r),m=A(d,f.width,f.height,!1),x=o((function(){var t=E(e),n=s(function(e,t,n){return R(n,\"inputResolution\"),[1/n.width*e[0][0]*t.width,1/n.height*e[0][1]*t.width,e[0][3]*t.width,1/n.width*e[1][0]*t.height,1/n.height*e[1][1]*t.height,e[1][3]*t.height,0,0]}(m,f,i),[1,8]),o=\"zero\"===a?\"constant\":\"nearest\",r=h.transform(u(c(t,\"float32\")),n,\"bilinear\",o,0,[i.height,i.width]);return null!=l?L(r,l):r}));return{imageTensor:x,padding:p,transformationMatrix:m}}function k(e){null==e.reduceBoxesInLowestLayer&&(e.reduceBoxesInLowestLayer=!1),null==e.interpolatedScaleAspectRatio&&(e.interpolatedScaleAspectRatio=1),null==e.fixedAnchorSize&&(e.fixedAnchorSize=!1);for(var t=[],n=0;n0){var c=s===e.strides.length-1?1:P(e.minScale,e.maxScale,s+1,e.strides.length);a.push(Math.sqrt(h*c)),r.push(e.interpolatedScaleAspectRatio)}}s++}for(var l=0;l0)d=e.featureMapHeight[n],p=e.featureMapWidth[n];else{var m=e.strides[n];d=Math.ceil(e.inputSizeHeight/m),p=Math.ceil(e.inputSizeWidth/m)}for(var x=0;x-1})),d([i,o,r]),[2,u]}}))}))}function j(e,t,n){return T(this,void 0,void 0,(function(){var i,s,h,u,c;return C(this,(function(p){switch(p.label){case 0:return i=e[0],s=e[1],h=function(e,t,n){return o((function(){var i,o,s,h;n.reverseOutputOrder?(o=f(l(e,[0,n.boxCoordOffset+0],[-1,1])),i=f(l(e,[0,n.boxCoordOffset+1],[-1,1])),h=f(l(e,[0,n.boxCoordOffset+2],[-1,1])),s=f(l(e,[0,n.boxCoordOffset+3],[-1,1]))):(i=f(l(e,[0,n.boxCoordOffset+0],[-1,1])),o=f(l(e,[0,n.boxCoordOffset+1],[-1,1])),s=f(l(e,[0,n.boxCoordOffset+2],[-1,1])),h=f(l(e,[0,n.boxCoordOffset+3],[-1,1]))),o=r(a(m(o,n.xScale),t.w),t.x),i=r(a(m(i,n.yScale),t.h),t.y),n.applyExponentialOnBoxSize?(s=a(x(m(s,n.hScale)),t.h),h=a(x(m(h,n.wScale)),t.w)):(s=a(m(s,n.hScale),t.h),h=a(m(h,n.wScale),t.h));var u=g(i,m(s,2)),c=g(o,m(h,2)),d=r(i,m(s,2)),p=r(o,m(h,2)),w=y([v(u,[n.numBoxes,1]),v(c,[n.numBoxes,1]),v(d,[n.numBoxes,1]),v(p,[n.numBoxes,1])],1);if(n.numKeypoints)for(var M=0;M0)for((c=h.locationData).relativeKeypoints=[],l=n.numKeypoints*n.numValuesPerKeypoint,f=0;f-1,[4,S(t.detectorModelUrl,{fromTFHub:n})];case 1:return i=o.sent(),[2,new Z(t.modelType,i,t.maxFaces)]}}))}))}function te(e,t){return T(this,void 0,void 0,(function(){var n,i;return C(this,(function(o){if(e===Q.MediaPipeFaceDetector){if(i=void 0,null!=(n=t)){if(\"tfjs\"===n.runtime)return[2,ee(n)];if(\"mediapipe\"===n.runtime)return[2,D(n)];i=n.runtime}throw new Error(\"Expect modelConfig.runtime to be either 'tfjs' \"+\"or 'mediapipe', but got \".concat(i))}throw new Error(\"\".concat(e,\" is not a supported model name.\"))}))}))}!function(e){e.MediaPipeFaceDetector=\"MediaPipeFaceDetector\"}(Q||(Q={}));export{z as MediaPipeFaceDetectorMediaPipe,Z as MediaPipeFaceDetectorTfjs,Q as SupportedModels,te as createDetector};\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// This enum must align with the enum defined in cc/backend.h.\nexport var CppDType;\n(function (CppDType) {\n CppDType[CppDType[\"float32\"] = 0] = \"float32\";\n CppDType[CppDType[\"int32\"] = 1] = \"int32\";\n CppDType[CppDType[\"bool\"] = 2] = \"bool\";\n CppDType[CppDType[\"string\"] = 3] = \"string\";\n CppDType[CppDType[\"complex64\"] = 4] = \"complex64\";\n})(CppDType || (CppDType = {}));\n// Must match enum in cc/fusable_activations.h.\nexport var FusableActivation;\n(function (FusableActivation) {\n FusableActivation[FusableActivation[\"linear\"] = 0] = \"linear\";\n FusableActivation[FusableActivation[\"relu\"] = 1] = \"relu\";\n FusableActivation[FusableActivation[\"relu6\"] = 2] = \"relu6\";\n FusableActivation[FusableActivation[\"prelu\"] = 3] = \"prelu\";\n FusableActivation[FusableActivation[\"leakyrelu\"] = 4] = \"leakyrelu\";\n FusableActivation[FusableActivation[\"sigmoid\"] = 5] = \"sigmoid\";\n FusableActivation[FusableActivation[\"elu\"] = 6] = \"elu\";\n})(FusableActivation || (FusableActivation = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCw4REFBOEQ7QUFDOUQsTUFBTSxDQUFOLElBQVksUUFNWDtBQU5ELFdBQVksUUFBUTtJQUNsQiw2Q0FBVyxDQUFBO0lBQ1gseUNBQVMsQ0FBQTtJQUNULHVDQUFRLENBQUE7SUFDUiwyQ0FBVSxDQUFBO0lBQ1YsaURBQWEsQ0FBQTtBQUNmLENBQUMsRUFOVyxRQUFRLEtBQVIsUUFBUSxRQU1uQjtBQUVELCtDQUErQztBQUMvQyxNQUFNLENBQU4sSUFBWSxpQkFRWDtBQVJELFdBQVksaUJBQWlCO0lBQzNCLDZEQUFVLENBQUE7SUFDVix5REFBUSxDQUFBO0lBQ1IsMkRBQVMsQ0FBQTtJQUNULDJEQUFTLENBQUE7SUFDVCxtRUFBYSxDQUFBO0lBQ2IsK0RBQVcsQ0FBQTtJQUNYLHVEQUFPLENBQUE7QUFDVCxDQUFDLEVBUlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQVE1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gVGhpcyBlbnVtIG11c3QgYWxpZ24gd2l0aCB0aGUgZW51bSBkZWZpbmVkIGluIGNjL2JhY2tlbmQuaC5cbmV4cG9ydCBlbnVtIENwcERUeXBlIHtcbiAgZmxvYXQzMiA9IDAsXG4gIGludDMyID0gMSxcbiAgYm9vbCA9IDIsXG4gIHN0cmluZyA9IDMsXG4gIGNvbXBsZXg2NCA9IDRcbn1cblxuLy8gTXVzdCBtYXRjaCBlbnVtIGluIGNjL2Z1c2FibGVfYWN0aXZhdGlvbnMuaC5cbmV4cG9ydCBlbnVtIEZ1c2FibGVBY3RpdmF0aW9uIHtcbiAgbGluZWFyID0gMCxcbiAgcmVsdSA9IDEsXG4gIHJlbHU2ID0gMixcbiAgcHJlbHUgPSAzLFxuICBsZWFreXJlbHUgPSA0LFxuICBzaWdtb2lkID0gNSxcbiAgZWx1ID0gNlxufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { _FusedMatMul, broadcast_util } from '@tensorflow/tfjs-core';\nimport { FusableActivation } from './types';\nlet wasmFusedMatMul;\nfunction setup(backend) {\n wasmFusedMatMul = backend.wasm.cwrap(_FusedMatMul, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction fusedBatchMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b, bias, preluActivationWeights } = inputs;\n if (a.dtype !== 'float32' || b.dtype !== 'float32') {\n throw new Error(`_FusedMatMul for non non-float32 tensors not yet supported.`);\n }\n const { transposeA, transposeB, activation, leakyreluAlpha } = attrs;\n const aId = backend.dataIdMap.get(a.dataId).id;\n const bId = backend.dataIdMap.get(b.dataId).id;\n let biasId = 0;\n if (bias != null) {\n const biasData = backend.dataIdMap.get(bias.dataId);\n if (biasData.shape.length !== 1) {\n throw new Error(`_FusedMatMul only supports rank-1 bias but got ` +\n `rank ${biasData.shape.length}.`);\n }\n biasId = biasData.id;\n }\n const preluActivationWeightsId = preluActivationWeights == null ?\n 0 :\n backend.dataIdMap.get(preluActivationWeights.dataId).id;\n const fusedActivation = FusableActivation[activation];\n if (fusedActivation == null) {\n throw new Error(`${activation} activation not yet supported for FusedConv2D ` +\n `in the wasm backend.`);\n }\n const leftDim = transposeA ? a.shape[2] : a.shape[1];\n const rightDim = transposeB ? b.shape[1] : b.shape[2];\n const batchDims = broadcast_util.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2));\n const out = backend.makeOutput([...batchDims, leftDim, rightDim], a.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer);\n const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer);\n wasmFusedMatMul(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, transposeA, transposeB, fusedActivation, biasId, preluActivationWeightsId, leakyreluAlpha || 0, outId);\n return out;\n}\nexport const _fusedMatMulConfig = {\n kernelName: _FusedMatMul,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: fusedBatchMatMul\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX0Z1c2VkTWF0TXVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvX0Z1c2VkTWF0TXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXlDLGNBQWMsRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUlwSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFMUMsSUFBSSxlQUtRLENBQUM7QUFFYixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDbEUsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxDQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXBELElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDWCw2REFBNkQsQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsTUFBTSxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFB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RWhDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsZ0JBQXlDO0NBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7X0Z1c2VkTWF0TXVsLCBfRnVzZWRNYXRNdWxBdHRycywgX0Z1c2VkTWF0TXVsSW5wdXRzLCBicm9hZGNhc3RfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0Z1c2FibGVBY3RpdmF0aW9ufSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21GdXNlZE1hdE11bDpcbiAgICAoYUlkOiBudW1iZXIsIGFTaGFwZTogVWludDhBcnJheSwgYVNoYXBlU2l6ZTogbnVtYmVyLCBiSWQ6IG51bWJlcixcbiAgICAgYlNoYXBlOiBVaW50OEFycmF5LCBiU2hhcGVTaXplOiBudW1iZXIsIHRyYW5zcG9zZUE6IGJvb2xlYW4sXG4gICAgIHRyYW5zcG9zZUI6IGJvb2xlYW4sIGFjdGl2YXRpb246IG51bWJlciwgYmlhc0lkOiBudW1iZXIsXG4gICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHNJZDogbnVtYmVyLCBsZWFreXJlbHVBbHBoYTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PlxuICAgICAgICB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtRnVzZWRNYXRNdWwgPSBiYWNrZW5kLndhc20uY3dyYXAoX0Z1c2VkTWF0TXVsLCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIGFfaWRcbiAgICAnYXJyYXknLCAgIC8vIGFfc2hhcGVcbiAgICAnbnVtYmVyJywgIC8vIGFfc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyBiX2lkXG4gICAgJ2FycmF5JywgICAvLyBiX3NoYXBlXG4gICAgJ251bWJlcicsICAvLyBiX3NoYXBlLmxlbmd0aFxuICAgICdudW1iZXInLCAgLy8gdHJhbnNwb3NlX2FcbiAgICAnbnVtYmVyJywgIC8vIHRyYW5zcG9zZV9iXG4gICAgJ251bWJlcicsICAvLyBhY3RpdmF0aW9uXG4gICAgJ251bWJlcicsICAvLyBiaWFzSWRcbiAgICAnbnVtYmVyJywgIC8vIHByZWx1QWN0aXZhdGlvbldlaWdodHNJZFxuICAgICdudW1iZXInLCAgLy8gbGVha3lyZWx1QWxwaGFcbiAgICAnbnVtYmVyJyAgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZnVzZWRCYXRjaE1hdE11bChhcmdzOiB7XG4gIGlucHV0czogX0Z1c2VkTWF0TXVsSW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgYXR0cnM6IF9GdXNlZE1hdE11bEF0dHJzXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHthLCBiLCBiaWFzLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzfSA9IGlucHV0cztcblxuICBpZiAoYS5kdHlwZSAhPT0gJ2Zsb2F0MzInIHx8IGIuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYF9GdXNlZE1hdE11bCBmb3Igbm9uIG5vbi1mbG9hdDMyIHRlbnNvcnMgbm90IHlldCBzdXBwb3J0ZWQuYCk7XG4gIH1cblxuICBjb25zdCB7dHJhbnNwb3NlQSwgdHJhbnNwb3NlQiwgYWN0aXZhdGlvbiwgbGVha3lyZWx1QWxwaGF9ID0gYXR0cnM7XG4gIGNvbnN0IGFJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChhLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGJJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChiLmRhdGFJZCkuaWQ7XG5cbiAgbGV0IGJpYXNJZCA9IDA7XG4gIGlmIChiaWFzICE9IG51bGwpIHtcbiAgICBjb25zdCBiaWFzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChiaWFzLmRhdGFJZCk7XG4gICAgaWYgKGJpYXNEYXRhLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBfRnVzZWRNYXRNdWwgb25seSBzdXBwb3J0cyByYW5rLTEgYmlhcyBidXQgZ290IGAgK1xuICAgICAgICAgIGByYW5rICR7Ymlhc0RhdGEuc2hhcGUubGVuZ3RofS5gKTtcbiAgICB9XG4gICAgYmlhc0lkID0gYmlhc0RhdGEuaWQ7XG4gIH1cbiAgY29uc3QgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkID0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9PSBudWxsID9cbiAgICAgIDAgOlxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHByZWx1QWN0aXZhdGlvbldlaWdodHMuZGF0YUlkKS5pZDtcbiAgY29uc3QgZnVzZWRBY3RpdmF0aW9uID1cbiAgICAgIEZ1c2FibGVBY3RpdmF0aW9uW2FjdGl2YXRpb24gYXMgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5b2YgdHlwZW9mIEZ1c2FibGVBY3RpdmF0aW9uXTtcbiAgaWYgKGZ1c2VkQWN0aXZhdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHthY3RpdmF0aW9ufSBhY3RpdmF0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBGdXNlZENvbnYyRCBgICtcbiAgICAgICAgYGluIHRoZSB3YXNtIGJhY2tlbmQuYCk7XG4gIH1cblxuICBjb25zdCBsZWZ0RGltID0gdHJhbnNwb3NlQSA/IGEuc2hhcGVbMl0gOiBhLnNoYXBlWzFdO1xuICBjb25zdCByaWdodERpbSA9IHRyYW5zcG9zZUIgPyBiLnNoYXBlWzFdIDogYi5zaGFwZVsyXTtcbiAgY29uc3QgYmF0Y2hEaW1zID0gYnJvYWRjYXN0X3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoXG4gICAgICBhLnNoYXBlLnNsaWNlKDAsIC0yKSwgYi5zaGFwZS5zbGljZSgwLCAtMikpO1xuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChbLi4uYmF0Y2hEaW1zLCBsZWZ0RGltLCByaWdodERpbV0sIGEuZHR5cGUpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBhU2hhcGVCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGEuc2hhcGUpLmJ1ZmZlcik7XG4gIGNvbnN0IGJTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoYi5zaGFwZSkuYnVmZmVyKTtcblxuICB3YXNtRnVzZWRNYXRNdWwoXG4gICAgICBhSWQsIGFTaGFwZUJ5dGVzLCBhLnNoYXBlLmxlbmd0aCwgYklkLCBiU2hhcGVCeXRlcywgYi5zaGFwZS5sZW5ndGgsXG4gICAgICB0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBmdXNlZEFjdGl2YXRpb24sIGJpYXNJZCwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkLFxuICAgICAgbGVha3lyZWx1QWxwaGEgfHwgMCwgb3V0SWQpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBfZnVzZWRNYXRNdWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogX0Z1c2VkTWF0TXVsLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBmdXNlZEJhdGNoTWF0TXVsIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nexport function createUnaryKernelConfig(kernelName, outType) {\n let wasmFunc;\n function setupFunc(backend) {\n wasmFunc = backend.wasm.cwrap(kernelName, null /* void */, [\n 'number',\n 'number',\n 'number', // out_id\n ]);\n }\n function kernelFunc(args) {\n const { backend, inputs: { x } } = args;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(x.shape, outType || x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(out.shape) === 0) {\n return out;\n }\n wasmFunc(xId, CppDType[x.dtype], outId);\n return out;\n }\n return { kernelName, backendName: 'wasm', setupFunc, kernelFunc };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfa2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvdW5hcnlfa2VybmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBa0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFVBQWtCLEVBQUUsT0FBa0I7SUFDeEMsSUFBSSxRQUE2RCxDQUFDO0lBRWxFLFNBQVMsU0FBUyxDQUFDLE9BQW9CO1FBQ3JDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6RCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsRUFBRyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFpRDtRQUVuRSxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVuRCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkMsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIEtlcm5lbENvbmZpZywgVGVuc29ySW5mbywgVW5hcnlJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoXG4gICAga2VybmVsTmFtZTogc3RyaW5nLCBvdXRUeXBlPzogRGF0YVR5cGUpOiBLZXJuZWxDb25maWcge1xuICBsZXQgd2FzbUZ1bmM6ICh4SWQ6IG51bWJlciwgZHR5cGU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuICBmdW5jdGlvbiBzZXR1cEZ1bmMoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgICB3YXNtRnVuYyA9IGJhY2tlbmQud2FzbS5jd3JhcChrZXJuZWxOYW1lLCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAgICdudW1iZXInLCAgLy8geF9pZFxuICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgJ251bWJlcicsICAvLyBvdXRfaWRcbiAgICBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGtlcm5lbEZ1bmMoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IFVuYXJ5SW5wdXRzfSk6XG4gICAgICBUZW5zb3JJbmZvIHtcbiAgICBjb25zdCB7YmFja2VuZCwgaW5wdXRzOiB7eH19ID0gYXJncztcbiAgICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICAgIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCBvdXRUeXBlIHx8IHguZHR5cGUpO1xuICAgIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCB6ZXJvLXNpemVkIHRlbnNvcnMuXG4gICAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXQuc2hhcGUpID09PSAwKSB7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIHdhc21GdW5jKHhJZCwgQ3BwRFR5cGVbeC5kdHlwZV0sIG91dElkKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcmV0dXJuIHtrZXJuZWxOYW1lLCBiYWNrZW5kTmFtZTogJ3dhc20nLCBzZXR1cEZ1bmMsIGtlcm5lbEZ1bmN9O1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Abs } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const absConfig = createUnaryKernelConfig(Abs);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtBYnMsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgYWJzQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhBYnMpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acos } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const acosConfig = createUnaryKernelConfig(Acos);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Fjb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QWNvcywgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhY29zQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhBY29zKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acosh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const acoshConfig = createUnaryKernelConfig(Acosh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9BY29zaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBY29zaCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhY29zaENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoQWNvc2gpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nexport function createBinaryKernelConfig(kernelName, supportsFullBroadcast, dtype) {\n let wasmFunc;\n function setupFunc(backend) {\n wasmFunc = backend.wasm.cwrap(kernelName, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n }\n function kernelFunc(args) {\n const { backend, inputs } = args;\n const { a, b } = inputs;\n const aId = backend.dataIdMap.get(a.dataId).id;\n const bId = backend.dataIdMap.get(b.dataId).id;\n const outputType = dtype != null ? dtype : a.dtype;\n const newShape = backend_util.assertAndGetBroadcastShape(a.shape, b.shape);\n const out = backend.makeOutput(newShape, outputType);\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(newShape) === 0) {\n return out;\n }\n const aShapeBytes = new Uint8Array(new Int32Array(a.shape).buffer);\n const bShapeBytes = new Uint8Array(new Int32Array(b.shape).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const kernelFunc = () => wasmFunc(aId, aShapeBytes, a.shape.length, bId, bShapeBytes, b.shape.length, CppDType[a.dtype], outId);\n kernelFunc();\n return out;\n }\n return { kernelName, backendName: 'wasm', setupFunc, kernelFunc };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL2JpbmFyeV9rZXJuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBb0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJM0csT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLFVBQWtCLEVBQUUscUJBQThCLEVBQ2xELEtBQWdCO0lBQ2xCLElBQUksUUFHUSxDQUFDO0lBRWIsU0FBUyxTQUFTLENBQUMsT0FBb0I7UUFDckMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pELFFBQVE7WUFDUixPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLENBQUcsU0FBUztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxVQUFVLENBQUMsSUFBa0Q7UUFFcEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUM7UUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRS9DLE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFckQsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQzdCLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDbEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU5QixVQUFVLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJpbmFyeUlucHV0cywgRGF0YVR5cGUsIEtlcm5lbENvbmZpZywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoXG4gICAga2VybmVsTmFtZTogc3RyaW5nLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3Q6IGJvb2xlYW4sXG4gICAgZHR5cGU/OiBEYXRhVHlwZSk6IEtlcm5lbENvbmZpZyB7XG4gIGxldCB3YXNtRnVuYzpcbiAgICAgIChhSWQ6IG51bWJlciwgYVNoYXBlOiBVaW50OEFycmF5LCBhU2hhcGVMZW46IG51bWJlciwgYklkOiBudW1iZXIsXG4gICAgICAgYlNoYXBlOiBVaW50OEFycmF5LCBiU2hhcGVMZW46IG51bWJlciwgZHR5cGU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT5cbiAgICAgICAgICB2b2lkO1xuXG4gIGZ1bmN0aW9uIHNldHVwRnVuYyhiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICAgIHdhc21GdW5jID0gYmFja2VuZC53YXNtLmN3cmFwKGtlcm5lbE5hbWUsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICAgJ251bWJlcicsICAvLyBhX2lkLFxuICAgICAgJ2FycmF5JywgICAvLyBhX3NoYXBlXG4gICAgICAnbnVtYmVyJywgIC8vIGFfc2hhcGUubGVuZ3RoXG4gICAgICAnbnVtYmVyJywgIC8vIGJfaWRcbiAgICAgICdhcnJheScsICAgLy8gYl9zaGFwZVxuICAgICAgJ251bWJlcicsICAvLyBiX3NoYXBlLmxlbmd0aFxuICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgJ251bWJlcicgICAvLyBvdXRfaWRcbiAgICBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGtlcm5lbEZ1bmMoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IEJpbmFyeUlucHV0c30pOlxuICAgICAgVGVuc29ySW5mbyB7XG4gICAgY29uc3Qge2JhY2tlbmQsIGlucHV0c30gPSBhcmdzO1xuICAgIGNvbnN0IHthLCBifSA9IGlucHV0cztcbiAgICBjb25zdCBhSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoYS5kYXRhSWQpLmlkO1xuICAgIGNvbnN0IGJJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChiLmRhdGFJZCkuaWQ7XG5cbiAgICBjb25zdCBvdXRwdXRUeXBlID0gZHR5cGUgIT0gbnVsbCA/IGR0eXBlIDogYS5kdHlwZTtcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShhLnNoYXBlLCBiLnNoYXBlKTtcbiAgICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQobmV3U2hhcGUsIG91dHB1dFR5cGUpO1xuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCB6ZXJvLXNpemVkIHRlbnNvcnMuXG4gICAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShuZXdTaGFwZSkgPT09IDApIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgY29uc3QgYVNoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShhLnNoYXBlKS5idWZmZXIpO1xuICAgIGNvbnN0IGJTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoYi5zaGFwZSkuYnVmZmVyKTtcbiAgICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgICBjb25zdCBrZXJuZWxGdW5jID0gKCkgPT4gd2FzbUZ1bmMoXG4gICAgICAgIGFJZCwgYVNoYXBlQnl0ZXMsIGEuc2hhcGUubGVuZ3RoLCBiSWQsIGJTaGFwZUJ5dGVzLCBiLnNoYXBlLmxlbmd0aCxcbiAgICAgICAgQ3BwRFR5cGVbYS5kdHlwZV0sIG91dElkKTtcblxuICAgIGtlcm5lbEZ1bmMoKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcmV0dXJuIHtrZXJuZWxOYW1lLCBiYWNrZW5kTmFtZTogJ3dhc20nLCBzZXR1cEZ1bmMsIGtlcm5lbEZ1bmN9O1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Add } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const addConfig = createBinaryKernelConfig(Add, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQWRkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FkZCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi9iaW5hcnlfa2VybmVsJztcblxuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gdHJ1ZTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoQWRkLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AddN, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmFunc;\nfunction setupFunc(backend) {\n wasmFunc = backend.wasm.cwrap(AddN, null /* void */, [\n 'array',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nfunction addn(args) {\n const { inputs, backend } = args;\n const out = backend.makeOutput(inputs[0].shape, inputs[0].dtype);\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(out.shape) === 0) {\n return out;\n }\n const inputIds = inputs.map(x => backend.dataIdMap.get(x.dataId).id);\n const inputIdsBytes = new Uint8Array(new Int32Array(inputIds).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmFunc(inputIdsBytes, inputIds.length, CppDType[out.dtype], outId);\n return out;\n}\nexport const addNConfig = {\n kernelName: AddN,\n backendName: 'wasm',\n setupFunc,\n kernelFunc: addn,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkTi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0FkZE4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLFFBRVEsQ0FBQztBQUViLFNBQVMsU0FBUyxDQUFDLE9BQW9CO0lBQ3JDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNuRCxPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsSUFBa0Q7SUFDOUQsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxvQ0FBb0M7SUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdkMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckUsTUFBTSxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxRQUFRLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVM7SUFDVCxVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBZGROLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbUZ1bmM6XG4gICAgKGlucHV0SWRzOiBVaW50OEFycmF5LCBpbnB1dElkc0xlbjogbnVtYmVyLCBkdHlwZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PlxuICAgICAgICB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cEZ1bmMoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbUZ1bmMgPSBiYWNrZW5kLndhc20uY3dyYXAoQWRkTiwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ2FycmF5JywgICAvLyBpbnB1dF9pZHNcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0X2lkcy5sZW5ndGhcbiAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgJ251bWJlcicsICAvLyBvdXRfaWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGFkZG4oYXJnczoge2lucHV0czogVGVuc29ySW5mb1tdLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoaW5wdXRzWzBdLnNoYXBlLCBpbnB1dHNbMF0uZHR5cGUpO1xuXG4gIC8vIFNob3J0LWNpcmN1aXQgemVyby1zaXplZCB0ZW5zb3JzLlxuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKG91dC5zaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29uc3QgaW5wdXRJZHMgPSBpbnB1dHMubWFwKHggPT4gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCk7XG4gIGNvbnN0IGlucHV0SWRzQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShpbnB1dElkcykuYnVmZmVyKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gIHdhc21GdW5jKGlucHV0SWRzQnl0ZXMsIGlucHV0SWRzLmxlbmd0aCwgQ3BwRFR5cGVbb3V0LmR0eXBlXSwgb3V0SWQpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBhZGROQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFkZE4sXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYyxcbiAga2VybmVsRnVuYzogYWRkbiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Identity, tensor } from '@tensorflow/tfjs-core';\nexport function identity(args) {\n const { inputs: { x }, backend } = args;\n if (x.dtype === 'string') {\n return tensor(backend.readSync(x.dataId), x.shape, x.dtype);\n }\n const out = backend.makeOutput(x.shape, x.dtype);\n const inVals = backend.typedArrayFromHeap(x);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.set(inVals);\n return out;\n}\nexport const identityConfig = {\n kernelName: Identity,\n backendName: 'wasm',\n kernelFunc: identity,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9JZGVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUE0QyxNQUFNLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUtqRyxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQW9EO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFFcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3RDtJQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLFFBQWlDO0NBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SWRlbnRpdHksIElkZW50aXR5SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIHRlbnNvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7VGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KGFyZ3M6IHtpbnB1dHM6IElkZW50aXR5SW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzOiB7eH0sIGJhY2tlbmR9ID0gYXJncztcblxuICBpZiAoeC5kdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGVuc29yKGJhY2tlbmQucmVhZFN5bmMoeC5kYXRhSWQpLCB4LnNoYXBlLCB4LmR0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCB4LmR0eXBlKTtcbiAgY29uc3QgaW5WYWxzID0gYmFja2VuZC50eXBlZEFycmF5RnJvbUhlYXAoeCk7XG4gIGNvbnN0IG91dFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChvdXQpO1xuICBvdXRWYWxzLnNldChpblZhbHMpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSWRlbnRpdHksXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IGlkZW50aXR5IGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transpose } from '@tensorflow/tfjs-core';\nimport { identity } from './Identity';\nimport { CppDType } from './types';\nlet wasmTranspose;\nfunction setup(backend) {\n wasmTranspose = backend.wasm.cwrap(Transpose, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number', // perm.length\n ]);\n}\nexport function transpose(args) {\n const { inputs, backend, attrs } = args;\n // Reduce any dimensions with size one. Lower-rank transpose kernel performs\n // better due to simpler memory access pattern.\n const [reducedShape, perm] = removeOneSizeDims(inputs.x.shape, attrs.perm);\n let permIsNoOp = true;\n for (let i = 0; i < perm.length; i++) {\n if (perm[i] !== i) {\n permIsNoOp = false;\n }\n }\n const outShape = computeOutShape(inputs.x.shape, attrs.perm);\n const x = {\n dataId: inputs.x.dataId,\n shape: reducedShape,\n dtype: inputs.x.dtype\n };\n if (permIsNoOp) {\n const cloned = identity({ inputs, backend });\n cloned.shape = outShape;\n return cloned;\n }\n const out = backend.makeOutput(outShape, x.dtype);\n const xId = backend.dataIdMap.get(x.dataId).id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n const permBytes = new Uint8Array(new Int32Array(perm).buffer);\n const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n wasmTranspose(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], outId, permBytes, perm.length);\n return out;\n}\nfunction computeOutShape(inShape, perm) {\n const outShape = new Array(inShape.length);\n for (let i = 0; i < outShape.length; i++) {\n outShape[i] = inShape[perm[i]];\n }\n return outShape;\n}\nfunction removeOneSizeDims(shape, perm) {\n const newShape = [];\n const newPerm = [];\n for (let i = 0; i < shape.length; ++i) {\n if (shape[i] !== 1) {\n newShape.push(shape[i]);\n }\n if (shape[perm[i]] !== 1) {\n newPerm.push(perm[i]);\n }\n }\n for (let i = 0; i < newPerm.length; ++i) {\n let minValIdx = -1;\n for (let j = 0; j < newPerm.length; ++j) {\n if (newPerm[j] >= i &&\n (minValIdx === -1 || newPerm[minValIdx] > newPerm[j])) {\n minValIdx = j;\n }\n }\n newPerm[minValIdx] = i;\n }\n return [newShape, newPerm];\n}\nexport const transposeConfig = {\n kernelName: Transpose,\n backendName: 'wasm',\n kernelFunc: transpose,\n setupFunc: setup,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvVHJhbnNwb3NlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBdUMsU0FBUyxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLGFBRTRELENBQUM7QUFFakUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQzdELFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVEsRUFBRyxjQUFjO0tBQzFCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUNyQixJQUMwRTtJQUU1RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsNEVBQTRFO0lBQzVFLCtDQUErQztJQUMvQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUzRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFD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Q3ZDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6RCxTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEI7SUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxTQUFrQztJQUM5QyxTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHJhbnNwb3NlLCBUcmFuc3Bvc2VBdHRycywgVHJhbnNwb3NlSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVRyYW5zcG9zZTogKFxuICAgIHhJZDogbnVtYmVyLCB4U2hhcGU6IFVpbnQ4QXJyYXksIHhTaGFwZUxlbmd0aDogbnVtYmVyLCBkdHlwZTogQ3BwRFR5cGUsXG4gICAgb3V0SWQ6IG51bWJlciwgcGVybTogVWludDhBcnJheSwgcGVybUxlbmd0aDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtVHJhbnNwb3NlID0gYmFja2VuZC53YXNtLmN3cmFwKFRyYW5zcG9zZSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnYXJyYXknLCAgIC8vIHguc2hhcGVcbiAgICAnbnVtYmVyJywgIC8vIHguc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgICAnYXJyYXknLCAgIC8vIHBlcm1cbiAgICAnbnVtYmVyJywgIC8vIHBlcm0ubGVuZ3RoXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKFxuICAgIGFyZ3M6XG4gICAgICAgIHtpbnB1dHM6IFRyYW5zcG9zZUlucHV0cywgYmFja2VuZDogQmFja2VuZFdhc20sIGF0dHJzOiBUcmFuc3Bvc2VBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICAvLyBSZWR1Y2UgYW55IGRpbWVuc2lvbnMgd2l0aCBzaXplIG9uZS4gTG93ZXItcmFuayB0cmFuc3Bvc2Uga2VybmVsIHBlcmZvcm1zXG4gIC8vIGJldHRlciBkdWUgdG8gc2ltcGxlciBtZW1vcnkgYWNjZXNzIHBhdHRlcm4uXG4gIGNvbnN0IFtyZWR1Y2VkU2hhcGUsIHBlcm1dID0gcmVtb3ZlT25lU2l6ZURpbXMoaW5wdXRzLnguc2hhcGUsIGF0dHJzLnBlcm0pO1xuXG4gIGxldCBwZXJtSXNOb09wID0gdHJ1ZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZXJtLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHBlcm1baV0gIT09IGkpIHtcbiAgICAgIHBlcm1Jc05vT3AgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgb3V0U2hhcGUgPSBjb21wdXRlT3V0U2hhcGUoaW5wdXRzLnguc2hhcGUsIGF0dHJzLnBlcm0pO1xuICBjb25zdCB4ID0ge1xuICAgIGRhdGFJZDogaW5wdXRzLnguZGF0YUlkLFxuICAgIHNoYXBlOiByZWR1Y2VkU2hhcGUsXG4gICAgZHR5cGU6IGlucHV0cy54LmR0eXBlXG4gIH07XG5cbiAgaWYgKHBlcm1Jc05vT3ApIHtcbiAgICBjb25zdCBjbG9uZWQgPSBpZGVudGl0eSh7aW5wdXRzLCBiYWNrZW5kfSk7XG4gICAgY2xvbmVkLnNoYXBlID0gb3V0U2hhcGU7XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRTaGFwZSwgeC5kdHlwZSk7XG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICBjb25zdCBwZXJtQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShwZXJtKS5idWZmZXIpO1xuICBjb25zdCB4U2hhcGVCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHguc2hhcGUpLmJ1ZmZlcik7XG5cbiAgd2FzbVRyYW5zcG9zZShcbiAgICAgIHhJZCwgeFNoYXBlQnl0ZXMsIHguc2hhcGUubGVuZ3RoLCBDcHBEVHlwZVt4LmR0eXBlXSwgb3V0SWQsIHBlcm1CeXRlcyxcbiAgICAgIHBlcm0ubGVuZ3RoKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZU91dFNoYXBlKGluU2hhcGU6IG51bWJlcltdLCBwZXJtOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3Qgb3V0U2hhcGUgPSBuZXcgQXJyYXkoaW5TaGFwZS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0U2hhcGVbaV0gPSBpblNoYXBlW3Blcm1baV1dO1xuICB9XG4gIHJldHVybiBvdXRTaGFwZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlT25lU2l6ZURpbXMoXG4gICAgc2hhcGU6IG51bWJlcltdLCBwZXJtOiBudW1iZXJbXSk6IFtudW1iZXJbXSwgbnVtYmVyW11dIHtcbiAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gW107XG4gIGNvbnN0IG5ld1Blcm06IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoc2hhcGVbaV0gIT09IDEpIHtcbiAgICAgIG5ld1NoYXBlLnB1c2goc2hhcGVbaV0pO1xuICAgIH1cbiAgICBpZiAoc2hhcGVbcGVybVtpXV0gIT09IDEpIHtcbiAgICAgIG5ld1Blcm0ucHVzaChwZXJtW2ldKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdQZXJtLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IG1pblZhbElkeCA9IC0xO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3UGVybS5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKG5ld1Blcm1bal0gPj0gaSAmJlxuICAgICAgICAgIChtaW5WYWxJZHggPT09IC0xIHx8IG5ld1Blcm1bbWluVmFsSWR4XSA+IG5ld1Blcm1bal0pKSB7XG4gICAgICAgIG1pblZhbElkeCA9IGo7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld1Blcm1bbWluVmFsSWR4XSA9IGk7XG4gIH1cbiAgcmV0dXJuIFtuZXdTaGFwZSwgbmV3UGVybV07XG59XG5cbmV4cG9ydCBjb25zdCB0cmFuc3Bvc2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVHJhbnNwb3NlLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiB0cmFuc3Bvc2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { transpose } from './Transpose';\n/**\n * Compute permutation axes and do a transpose if necessary.\n *\n * Used by reduction ops.\n * @param x input TensorInfo\n * @param axis reduction axes\n * @param backend wasm backend instance\n */\nexport function permuteAxesAndTranspose(x, axis, backend) {\n const xShape = x.shape;\n const xRank = x.shape.length;\n const originalAxes = util.parseAxisParam(axis, xShape);\n let axes = originalAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let xTransposed = null;\n let inputWasTransposed = false;\n if (permutedAxes != null) {\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = xShape[permutedAxes[i]];\n }\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n xTransposed =\n transpose({ inputs: { x }, attrs: { perm: permutedAxes }, backend });\n const xId = backend.dataIdMap.get(x.dataId).id;\n const transposedId = backend.dataIdMap.get(xTransposed.dataId).id;\n if (transposedId !== xId) {\n inputWasTransposed = true;\n }\n }\n return { transposed: xTransposed, originalAxes, axes, inputWasTransposed };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMva2VybmVsX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxDQUFhLEVBQUUsSUFBcUIsRUFBRSxPQUFvQjtJQU01RCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQztJQUN4QixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztJQUN2QixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMvQixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQWEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxXQUFXO1lBQ1AsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFFbkUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLEdBQUcsRUFBRTtZQUN4QixrQkFBa0IsR0FBRyxJQUFJLENBQUM7U0FDM0I7S0FDRjtJQUVELE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG4vKipcbiAqIENvbXB1dGUgcGVybXV0YXRpb24gYXhlcyBhbmQgZG8gYSB0cmFuc3Bvc2UgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIFVzZWQgYnkgcmVkdWN0aW9uIG9wcy5cbiAqIEBwYXJhbSB4IGlucHV0IFRlbnNvckluZm9cbiAqIEBwYXJhbSBheGlzIHJlZHVjdGlvbiBheGVzXG4gKiBAcGFyYW0gYmFja2VuZCB3YXNtIGJhY2tlbmQgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcm11dGVBeGVzQW5kVHJhbnNwb3NlKFxuICAgIHg6IFRlbnNvckluZm8sIGF4aXM6IG51bWJlcnxudW1iZXJbXSwgYmFja2VuZDogQmFja2VuZFdhc20pOiB7XG4gIHRyYW5zcG9zZWQ6IFRlbnNvckluZm98bnVsbCxcbiAgYXhlczogbnVtYmVyW10sXG4gIG9yaWdpbmFsQXhlczogbnVtYmVyW10sXG4gIGlucHV0V2FzVHJhbnNwb3NlZDogYm9vbGVhblxufSB7XG4gIGNvbnN0IHhTaGFwZSA9IHguc2hhcGU7XG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3Qgb3JpZ2luYWxBeGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4U2hhcGUpO1xuICBsZXQgYXhlcyA9IG9yaWdpbmFsQXhlcztcbiAgY29uc3QgcGVybXV0ZWRBeGVzID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCB4UmFuayk7XG4gIGxldCB4VHJhbnNwb3NlZCA9IG51bGw7XG4gIGxldCBpbnB1dFdhc1RyYW5zcG9zZWQgPSBmYWxzZTtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KHhSYW5rKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1NoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdTaGFwZVtpXSA9IHhTaGFwZVtwZXJtdXRlZEF4ZXNbaV1dO1xuICAgIH1cblxuICAgIGF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhheGVzLmxlbmd0aCwgeFJhbmspO1xuICAgIHhUcmFuc3Bvc2VkID1cbiAgICAgICAgdHJhbnNwb3NlKHtpbnB1dHM6IHt4fSwgYXR0cnM6IHtwZXJtOiBwZXJtdXRlZEF4ZXN9LCBiYWNrZW5kfSk7XG5cbiAgICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICAgIGNvbnN0IHRyYW5zcG9zZWRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4VHJhbnNwb3NlZC5kYXRhSWQpLmlkO1xuICAgIGlmICh0cmFuc3Bvc2VkSWQgIT09IHhJZCkge1xuICAgICAgaW5wdXRXYXNUcmFuc3Bvc2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge3RyYW5zcG9zZWQ6IHhUcmFuc3Bvc2VkLCBvcmlnaW5hbEF4ZXMsIGF4ZXMsIGlucHV0V2FzVHJhbnNwb3NlZH07XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { All, backend_util, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nlet wasmAll;\nfunction setup(backend) {\n wasmAll = backend.wasm.cwrap(All, null /*void*/, ['number, number, number']);\n}\nfunction all(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n input = transposed;\n inputId = transposedId;\n }\n const inputRank = input.shape.length;\n backend_util.assertAxesAreInnerMostDims('all', axes, inputRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, x.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmAll(inputId, reduceSize, outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const allConfig = {\n kernelName: All,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: all\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQXVCLFlBQVksRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsSUFBSSxPQUFpRSxDQUFDO0FBRXRFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBZ0U7SUFFM0UsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDbkIsT0FBTyxHQUFHLFlBQVksQ0FBQztLQUN4QjtJQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckM7SUFFRCxJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLG9DQUFvQztRQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksUUFBUSxFQUFFO1FBQ1osVUFBVTtRQUNWLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FsbCwgQWxsQXR0cnMsIEFsbElucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2V9IGZyb20gJy4va2VybmVsX3V0aWxzJztcblxubGV0IHdhc21BbGw6ICh4SWQ6IG51bWJlciwgcmVkdWNlU2l6ZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtQWxsID0gYmFja2VuZC53YXNtLmN3cmFwKEFsbCwgbnVsbCAvKnZvaWQqLywgWydudW1iZXIsIG51bWJlciwgbnVtYmVyJ10pO1xufVxuXG5mdW5jdGlvbiBhbGwoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IEFsbElucHV0cywgYXR0cnM6IEFsbEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBsZXQgaW5wdXRJZCA9IHhJZDtcbiAgbGV0IGlucHV0ID0geDtcblxuICBjb25zdCB7dHJhbnNwb3NlZCwgYXhlcywgb3JpZ2luYWxBeGVzLCBpbnB1dFdhc1RyYW5zcG9zZWR9ID1cbiAgICAgIHBlcm11dGVBeGVzQW5kVHJhbnNwb3NlKHgsIGF4aXMsIGJhY2tlbmQpO1xuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICBjb25zdCB0cmFuc3Bvc2VkSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQodHJhbnNwb3NlZC5kYXRhSWQpLmlkO1xuICAgIGlucHV0ID0gdHJhbnNwb3NlZDtcbiAgICBpbnB1dElkID0gdHJhbnNwb3NlZElkO1xuICB9XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXQuc2hhcGUubGVuZ3RoO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2FsbCcsIGF4ZXMsIGlucHV0UmFuayk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LnNoYXBlLCBheGVzKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCB4LmR0eXBlKTtcbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgIT09IDApIHtcbiAgICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgICB3YXNtQWxsKGlucHV0SWQsIHJlZHVjZVNpemUsIG91dElkKTtcbiAgfVxuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICAvLyBkaXNwb3NlIG9mIHRoZSB0cmFuc3Bvc2VkIHRlbnNvci5cbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRyYW5zcG9zZWQuZGF0YUlkKTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIC8vIHJlc2hhcGVcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXQuc2hhcGUsIG9yaWdpbmFsQXhlcyk7XG4gICAgb3V0LnNoYXBlID0gbmV3U2hhcGU7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgYWxsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFsbCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogYWxsIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Any, backend_util, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nlet wasmAny;\nfunction setup(backend) {\n wasmAny = backend.wasm.cwrap(Any, null /*void*/, ['number, number, number']);\n}\nfunction any(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n input = transposed;\n inputId = transposedId;\n }\n const inputRank = input.shape.length;\n backend_util.assertAxesAreInnerMostDims('any', axes, inputRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, x.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmAny(inputId, reduceSize, outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const anyConfig = {\n kernelName: Any,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: any\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQW55LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQXVCLFlBQVksRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsSUFBSSxPQUFpRSxDQUFDO0FBRXRFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBZ0U7SUFFM0UsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDbkIsT0FBTyxHQUFHLFlBQVksQ0FBQztLQUN4QjtJQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckM7SUFFRCxJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLG9DQUFvQztRQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksUUFBUSxFQUFFO1FBQ1osVUFBVTtRQUNWLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FueSwgQW55QXR0cnMsIEFueUlucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2V9IGZyb20gJy4va2VybmVsX3V0aWxzJztcblxubGV0IHdhc21Bbnk6ICh4SWQ6IG51bWJlciwgcmVkdWNlU2l6ZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtQW55ID0gYmFja2VuZC53YXNtLmN3cmFwKEFueSwgbnVsbCAvKnZvaWQqLywgWydudW1iZXIsIG51bWJlciwgbnVtYmVyJ10pO1xufVxuXG5mdW5jdGlvbiBhbnkoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IEFueUlucHV0cywgYXR0cnM6IEFueUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBsZXQgaW5wdXRJZCA9IHhJZDtcbiAgbGV0IGlucHV0ID0geDtcblxuICBjb25zdCB7dHJhbnNwb3NlZCwgYXhlcywgb3JpZ2luYWxBeGVzLCBpbnB1dFdhc1RyYW5zcG9zZWR9ID1cbiAgICAgIHBlcm11dGVBeGVzQW5kVHJhbnNwb3NlKHgsIGF4aXMsIGJhY2tlbmQpO1xuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICBjb25zdCB0cmFuc3Bvc2VkSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQodHJhbnNwb3NlZC5kYXRhSWQpLmlkO1xuICAgIGlucHV0ID0gdHJhbnNwb3NlZDtcbiAgICBpbnB1dElkID0gdHJhbnNwb3NlZElkO1xuICB9XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXQuc2hhcGUubGVuZ3RoO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2FueScsIGF4ZXMsIGlucHV0UmFuayk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LnNoYXBlLCBheGVzKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCB4LmR0eXBlKTtcbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgIT09IDApIHtcbiAgICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgICB3YXNtQW55KGlucHV0SWQsIHJlZHVjZVNpemUsIG91dElkKTtcbiAgfVxuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICAvLyBkaXNwb3NlIG9mIHRoZSB0cmFuc3Bvc2VkIHRlbnNvci5cbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRyYW5zcG9zZWQuZGF0YUlkKTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIC8vIHJlc2hhcGVcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXQuc2hhcGUsIG9yaWdpbmFsQXhlcyk7XG4gICAgb3V0LnNoYXBlID0gbmV3U2hhcGU7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgYW55Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFueSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogYW55IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nimport { CppDType } from './types';\nexport function createArgMinMaxKernelConfig(kernelName) {\n let wasmFunc;\n function setupFunc(backend) {\n wasmFunc = backend.wasm.cwrap(kernelName, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n }\n function kernelFunc(args) {\n const { backend, inputs, attrs } = args;\n const { axis } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n if (transposedId !== xId) {\n // transpose was not a no-op. We will need to dispose of this\n // once we are done.\n input = transposed;\n inputId = transposedId;\n }\n }\n const outShape = input.shape.slice(0, -1);\n const out = backend.makeOutput(outShape, 'int32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n const outerSize = util.sizeFromShape(out.shape);\n const innerSize = input.shape[axes[0]];\n wasmFunc(inputId, CppDType[input.dtype], outerSize, innerSize, outId);\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n return out;\n }\n return {\n kernelName,\n backendName: 'wasm',\n setupFunc,\n kernelFunc: kernelFunc,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJnbWlubWF4X2tlcm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL2FyZ21pbm1heF9rZXJuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUE2RixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxVQUNRO0lBQ2xELElBQUksUUFFc0IsQ0FBQztJQUUzQixTQUFTLFNBQVMsQ0FBQyxPQUFvQjtRQUNyQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDekQsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsQ0FBRyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUluQjtRQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztRQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7UUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsR0FDeEMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU5QyxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxZQUFZLEtBQUssR0FBRyxFQUFFO2dCQUN4Qiw2REFBNkQ7Z0JBQzdELG9CQUFvQjtnQkFDcEIsS0FBSyxHQUFHLFVBQVUsQ0FBQztnQkFDbkIsT0FBTyxHQUFHLFlBQVksQ0FBQzthQUN4QjtTQUNGO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRFLElBQUksa0JBQWtCLEVBQUU7WUFDdEIsb0NBQW9DO1lBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsT0FBTztRQUNMLFVBQVU7UUFDVixXQUFXLEVBQUUsTUFBTTtRQUNuQixTQUFTO1FBQ1QsVUFBVSxFQUFFLFVBQW1DO0tBQ2hELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtBcmdNYXhBdHRycywgQXJnTWF4SW5wdXRzLCBBcmdNaW5BdHRycywgQXJnTWluSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2V9IGZyb20gJy4va2VybmVsX3V0aWxzJztcbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJnTWluTWF4S2VybmVsQ29uZmlnKGtlcm5lbE5hbWU6ICdBcmdNaW4nfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJnTWF4Jyk6IEtlcm5lbENvbmZpZyB7XG4gIGxldCB3YXNtRnVuYzogKFxuICAgICAgeElkOiBudW1iZXIsIGR0eXBlOiBudW1iZXIsIG91dGVyU2l6ZTogbnVtYmVyLCBpbm5lclNpemU6IG51bWJlcixcbiAgICAgIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgZnVuY3Rpb24gc2V0dXBGdW5jKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gICAgd2FzbUZ1bmMgPSBiYWNrZW5kLndhc20uY3dyYXAoa2VybmVsTmFtZSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgICAnbnVtYmVyJywgIC8vIHhfaWRcbiAgICAgICdudW1iZXInLCAgLy8gZHR5cGVcbiAgICAgICdudW1iZXInLCAgLy8gb3V0ZXJfc2l6ZVxuICAgICAgJ251bWJlcicsICAvLyBpbm5lcl9zaXplXG4gICAgICAnbnVtYmVyJyAgIC8vIG91dF9pZFxuICAgIF0pO1xuICB9XG5cbiAgZnVuY3Rpb24ga2VybmVsRnVuYyhhcmdzOiB7XG4gICAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gICAgaW5wdXRzOiBBcmdNaW5JbnB1dHMmQXJnTWF4SW5wdXRzLFxuICAgIGF0dHJzOiBBcmdNaW5BdHRycyZBcmdNYXhBdHRycyxcbiAgfSk6IFRlbnNvckluZm8ge1xuICAgIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gICAgY29uc3Qge2F4aXN9ID0gYXR0cnM7XG4gICAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICAgIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gICAgbGV0IGlucHV0SWQgPSB4SWQ7XG4gICAgbGV0IGlucHV0ID0geDtcblxuICAgIGNvbnN0IHt0cmFuc3Bvc2VkLCBheGVzLCBpbnB1dFdhc1RyYW5zcG9zZWR9ID1cbiAgICAgICAgcGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2UoeCwgYXhpcywgYmFja2VuZCk7XG5cbiAgICBpZiAoaW5wdXRXYXNUcmFuc3Bvc2VkKSB7XG4gICAgICBjb25zdCB0cmFuc3Bvc2VkSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQodHJhbnNwb3NlZC5kYXRhSWQpLmlkO1xuICAgICAgaWYgKHRyYW5zcG9zZWRJZCAhPT0geElkKSB7XG4gICAgICAgIC8vIHRyYW5zcG9zZSB3YXMgbm90IGEgbm8tb3AuIFdlIHdpbGwgbmVlZCB0byBkaXNwb3NlIG9mIHRoaXNcbiAgICAgICAgLy8gb25jZSB3ZSBhcmUgZG9uZS5cbiAgICAgICAgaW5wdXQgPSB0cmFuc3Bvc2VkO1xuICAgICAgICBpbnB1dElkID0gdHJhbnNwb3NlZElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG91dFNoYXBlID0gaW5wdXQuc2hhcGUuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRTaGFwZSwgJ2ludDMyJyk7XG4gICAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gICAgY29uc3Qgb3V0ZXJTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dC5zaGFwZSk7XG4gICAgY29uc3QgaW5uZXJTaXplID0gaW5wdXQuc2hhcGVbYXhlc1swXV07XG4gICAgd2FzbUZ1bmMoaW5wdXRJZCwgQ3BwRFR5cGVbaW5wdXQuZHR5cGVdLCBvdXRlclNpemUsIGlubmVyU2l6ZSwgb3V0SWQpO1xuXG4gICAgaWYgKGlucHV0V2FzVHJhbnNwb3NlZCkge1xuICAgICAgLy8gZGlzcG9zZSBvZiB0aGUgdHJhbnNwb3NlZCB0ZW5zb3IuXG4gICAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRyYW5zcG9zZWQuZGF0YUlkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXJuZWxOYW1lLFxuICAgIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gICAgc2V0dXBGdW5jLFxuICAgIGtlcm5lbEZ1bmM6IGtlcm5lbEZ1bmMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMax } from '@tensorflow/tfjs-core';\nimport { createArgMinMaxKernelConfig } from './argminmax_kernel';\nexport const argMaxConfig = createArgMinMaxKernelConfig(ArgMax);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQXJnTWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FyZ01heCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUFyZ01pbk1heEtlcm5lbENvbmZpZ30gZnJvbSAnLi9hcmdtaW5tYXhfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGFyZ01heENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlQXJnTWluTWF4S2VybmVsQ29uZmlnKEFyZ01heCk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMin } from '@tensorflow/tfjs-core';\nimport { createArgMinMaxKernelConfig } from './argminmax_kernel';\nexport const argMinConfig = createArgMinMaxKernelConfig(ArgMin);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQXJnTWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FyZ01pbiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUFyZ01pbk1heEtlcm5lbENvbmZpZ30gZnJvbSAnLi9hcmdtaW5tYXhfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGFyZ01pbkNvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlQXJnTWluTWF4S2VybmVsQ29uZmlnKEFyZ01pbik7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asin } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const asinConfig = createUnaryKernelConfig(Asin);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0FzaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QXNpbiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhc2luQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhBc2luKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asinh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const asinhConfig = createUnaryKernelConfig(Asinh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Bc2luaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBc2luaCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhc2luaENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoQXNpbmgpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const atanConfig = createUnaryKernelConfig(Atan);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0F0YW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QXRhbiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhdGFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhBdGFuKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan2 } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nexport const atan2Config = createBinaryKernelConfig(Atan2, /*supportsFullBroadcast=*/ false);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9BdGFuMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQix3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUEsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QXRhbjIsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhdGFuMkNvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoQXRhbjIsIC8qc3VwcG9ydHNGdWxsQnJvYWRjYXN0PSovZmFsc2UpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atanh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const atanhConfig = createUnaryKernelConfig(Atanh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9BdGFuaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBdGFuaCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBhdGFuaENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoQXRhbmgpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool, backend_util } from '@tensorflow/tfjs-core';\nlet wasmAvgPool;\nfunction setup(backend) {\n wasmAvgPool = backend.wasm.cwrap(AvgPool, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction avgPool(args) {\n const { inputs, attrs, backend } = args;\n const x = inputs.x;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const channels = convInfo.inChannels;\n if (convInfo.dataFormat !== 'channelsLast') {\n throw new Error(`wasm backend does not support dataFormat:'` +\n `${convInfo.dataFormat}'. Please use 'channelsLast'.`);\n }\n if (convInfo.dilationWidth !== 1 || convInfo.dilationHeight !== 1) {\n throw new Error(`was backend only supports average pooling with dilation = [1, 1], ` +\n `got [${convInfo.dilationHeight}, ${convInfo.dilationWidth}].`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmAvgPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, strideHeight, strideWidth, channels, outId);\n return out;\n}\nexport const avgPoolConfig = {\n kernelName: AvgPool,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: avgPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0F2Z1Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBK0IsWUFBWSxFQUFxQyxNQUFNLHVCQUF1QixDQUFDO0FBSTdILElBQUksV0FJNkQsQ0FBQztBQUVsRSxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDekQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FDWixJQUF3RTtJQUMxRSxNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFFdEMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQWEsQ0FBQztJQUMvQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRS9DLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFM0UsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBRXJDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxjQUFjLEVBQUU7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCw0Q0FBNEM7WUFDNUMsR0FBRyxRQUFRLENBQUMsVUFBVSwrQkFBK0IsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtRQUNqRSxNQUFNLElBQUksS0FBSyxDQUNYLG9FQUFvRTtZQUNwRSxRQUFRLFFBQVEsQ0FBQyxjQUFjLEtBQUssUUFBUSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7S0FDckU7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVuRCxXQUFXLENBQ1AsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQ2xFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFDekUsS0FBSyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F2Z1Bvb2wsIEF2Z1Bvb2xBdHRycywgQXZnUG9vbElucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbUF2Z1Bvb2w6IChcbiAgICB4SWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsIGlucHV0SGVpZ2h0OiBudW1iZXIsIGlucHV0V2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZFJpZ2h0OiBudW1iZXIsXG4gICAgcGFkQm90dG9tOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gICAgc3RyaWRlV2lkdGg6IG51bWJlciwgY2hhbm5lbHM6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbUF2Z1Bvb2wgPSBiYWNrZW5kLndhc20uY3dyYXAoQXZnUG9vbCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gaW5wdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0V2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlckhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkUmlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHBhZEJvdHRvbVxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVXaWR0aFxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBhdmdQb29sKFxuICAgIGFyZ3M6IHtpbnB1dHM6IEF2Z1Bvb2xJbnB1dHMsIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLCBhdHRyczogQXZnUG9vbEF0dHJzfSkge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuXG4gIGNvbnN0IHggPSBpbnB1dHMueCBhcyBUZW5zb3I0RDtcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcblxuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBkaW1Sb3VuZGluZ01vZGV9ID0gYXR0cnM7XG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sMkRJbmZvKFxuICAgICAgeC5zaGFwZSwgZmlsdGVyU2l6ZSwgc3RyaWRlcywgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBmaWx0ZXJIZWlnaHQgPSBjb252SW5mby5maWx0ZXJIZWlnaHQ7XG4gIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG4gIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCBwYWRSaWdodCA9IGNvbnZJbmZvLnBhZEluZm8ucmlnaHQ7XG4gIGNvbnN0IHBhZEJvdHRvbSA9IGNvbnZJbmZvLnBhZEluZm8uYm90dG9tO1xuICBjb25zdCBwYWRMZWZ0ID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGNoYW5uZWxzID0gY29udkluZm8uaW5DaGFubmVscztcblxuICBpZiAoY29udkluZm8uZGF0YUZvcm1hdCAhPT0gJ2NoYW5uZWxzTGFzdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB3YXNtIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBkYXRhRm9ybWF0OidgICtcbiAgICAgICAgYCR7Y29udkluZm8uZGF0YUZvcm1hdH0nLiBQbGVhc2UgdXNlICdjaGFubmVsc0xhc3QnLmApO1xuICB9XG5cbiAgaWYgKGNvbnZJbmZvLmRpbGF0aW9uV2lkdGggIT09IDEgfHwgY29udkluZm8uZGlsYXRpb25IZWlnaHQgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB3YXMgYmFja2VuZCBvbmx5IHN1cHBvcnRzIGF2ZXJhZ2UgcG9vbGluZyB3aXRoIGRpbGF0aW9uID0gWzEsIDFdLCBgICtcbiAgICAgICAgYGdvdCBbJHtjb252SW5mby5kaWxhdGlvbkhlaWdodH0sICR7Y29udkluZm8uZGlsYXRpb25XaWR0aH1dLmApO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLm91dFNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICB3YXNtQXZnUG9vbChcbiAgICAgIHhJZCwgeC5zaGFwZVswXSwgeC5zaGFwZVsxXSwgeC5zaGFwZVsyXSwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCxcbiAgICAgIHBhZFRvcCwgcGFkUmlnaHQsIHBhZEJvdHRvbSwgcGFkTGVmdCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgY2hhbm5lbHMsXG4gICAgICBvdXRJZCk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBhdmdQb29sQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEF2Z1Bvb2wsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGF2Z1Bvb2wgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3D, backend_util } from '@tensorflow/tfjs-core';\nlet wasmAvgPool3D;\nfunction setup(backend) {\n wasmAvgPool3D = backend.wasm.cwrap('AvgPool3D', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function avgPool3D(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dimRoundingMode, dataFormat } = attrs;\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, \n /*dilations=*/ 1, pad, dimRoundingMode, dataFormat);\n const out = backend.makeOutput(convInfo.outShape, x.dtype);\n wasmAvgPool3D(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(out.dataId).id, convInfo.batchSize, \n // Since Pool3D ops (AvgPool3D and MaxPool3D) support 3D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterDepth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return out;\n}\nexport const avgPool3DConfig = {\n kernelName: AvgPool3D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: avgPool3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQXZnUG9vbDNELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQW1DLFlBQVksRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQztBQUlySSxJQUFJLGFBTzBELENBQUM7QUFFL0QsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7UUFDcEQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFVBQVU7S0FDdEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0RSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFBRSxPQUFPO0lBQ3hFLGNBQWMsQ0FBQSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNELGFBQWEsQ0FDVCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNwQyxRQUFRLENBQUMsU0FBUztJQUNsQix3RUFBd0U7SUFDeEUsZ0RBQWdEO0lBQ2hELGdCQUFnQixDQUFBLFFBQVEsQ0FBQyxVQUFVLEVBQ25DLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxvQkFBb0IsRUFDN0IsUUFBUSxDQUFDLHFCQUFxQixFQUM5QixRQUFRLENBQUMsb0JBQW9CLEVBQzdCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hCLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F2Z1Bvb2wzRCwgQXZnUG9vbDNEQXR0cnMsIEF2Z1Bvb2wzRElucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtQXZnUG9vbDNEOiAoXG4gICAgeElkOiBudW1iZXIsIG91dElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBjaGFubmVsU2l6ZTogbnVtYmVyLFxuICAgIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBvdXREZXB0aDogbnVtYmVyLFxuICAgIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLCBzdHJpZGVEZXB0aDogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCBkaWxhdGlvbkRlcHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJEZXB0aDogbnVtYmVyLFxuICAgIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICAgIHBhZEZyb250OiBudW1iZXIsIHBhZFRvcDogbnVtYmVyLCBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21BdmdQb29sM0QgPSBiYWNrZW5kLndhc20uY3dyYXAoJ0F2Z1Bvb2wzRCcsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJEZXB0aFxuICAgICdudW1iZXInLCAgLy8gZWZmZWN0aXZlRmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgLy8gcGFkRnJvbnRcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF2Z1Bvb2wzRChhcmdzOiB7XG4gIGlucHV0czogQXZnUG9vbDNESW5wdXRzLFxuICBhdHRyczogQXZnUG9vbDNEQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdH0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIC8qZGlsYXRpb25zPSovMSwgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXQpO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuXG4gIHdhc21BdmdQb29sM0QoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkLFxuICAgICAgY29udkluZm8uYmF0Y2hTaXplLFxuICAgICAgLy8gU2luY2UgUG9vbDNEIG9wcyAoQXZnUG9vbDNEIGFuZCBNYXhQb29sM0QpIHN1cHBvcnQgM0QgZmlsdGVyIG9ubHksIGluXG4gICAgICAvLyBjaGFubmVscyBzaG91bGQgYWx3YXlzIGVxdWFsIHRvIG91dCBjaGFubmVscy5cbiAgICAgIC8qY2hhbm5lbFNpemU9Ki9jb252SW5mby5pbkNoYW5uZWxzLFxuICAgICAgY29udkluZm8uaW5EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dERlcHRoLFxuICAgICAgY29udkluZm8ub3V0SGVpZ2h0LFxuICAgICAgY29udkluZm8ub3V0V2lkdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVEZXB0aCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZVdpZHRoLFxuICAgICAgY29udkluZm8uZGlsYXRpb25EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LFxuICAgICAgY29udkluZm8uZGlsYXRpb25XaWR0aCxcbiAgICAgIGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoLFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmZyb250LFxuICAgICAgY29udkluZm8ucGFkSW5mby50b3AsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBhdmdQb29sM0RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXZnUG9vbDNELFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sM0QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3DGrad, backend_util } from '@tensorflow/tfjs-core';\nlet wasmAvgPool3DGrad;\nfunction setup(backend) {\n wasmAvgPool3DGrad = backend.wasm.cwrap('AvgPool3DGrad', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // filterWidth\n ]);\n}\nexport function avgPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool3DInfo(input.shape, filterSize, strides, /*dilations=*/ 1, pad, dimRoundingMode);\n const dx = backend.makeOutput(input.shape, input.dtype);\n wasmAvgPool3DGrad(backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, convInfo.batchSize, \n // Since Pool3D ops (AvgPool3D and MaxPool3D) support 3D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterDepth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left, convInfo.filterDepth, convInfo.filterHeight, convInfo.filterWidth);\n return dx;\n}\nexport const avgPool3DGradConfig = {\n kernelName: AvgPool3DGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: avgPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0F2Z1Bvb2wzREdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBMkMsWUFBWSxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBSWpKLElBQUksaUJBUWtELENBQUM7QUFFdkQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRTtRQUM1RCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsY0FBYztLQUMxQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUk3QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsS0FBSyxDQUFDLEtBQWlELEVBQUUsVUFBVSxFQUNuRSxPQUFPLEVBQUUsY0FBYyxDQUFBLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDcEQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxpQkFBaUIsQ0FDYixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxRQUFRLENBQUMsU0FBUztJQUNsQix3RUFBd0U7SUFDeEUsZ0RBQWdEO0lBQ2hELGdCQUFnQixDQUFBLFFBQVEsQ0FBQyxVQUFVLEVBQ25DLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxvQkFBb0IsRUFDN0IsUUFBUSxDQUFDLHFCQUFxQixFQUM5QixRQUFRLENBQUMsb0JBQW9CLEVBQzdCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLENBQ3ZCLENBQUM7SUFDRixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLGFBQXNDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QXZnUG9vbDNER3JhZCwgQXZnUG9vbDNER3JhZEF0dHJzLCBBdmdQb29sM0RHcmFkSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxubGV0IHdhc21BdmdQb29sM0RHcmFkOiAoXG4gICAgZHlJZDogbnVtYmVyLCBkeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBjaGFubmVsU2l6ZTogbnVtYmVyLFxuICAgIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBvdXREZXB0aDogbnVtYmVyLFxuICAgIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLCBzdHJpZGVEZXB0aDogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCBkaWxhdGlvbkRlcHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJEZXB0aDogbnVtYmVyLFxuICAgIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICAgIHBhZEZyb250OiBudW1iZXIsIHBhZFRvcDogbnVtYmVyLCBwYWRMZWZ0OiBudW1iZXIsIGZpbHRlckRlcHRoOiBudW1iZXIsXG4gICAgZmlsdGVySGVpZ2h0OiBudW1iZXIsIGZpbHRlcldpZHRoOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21BdmdQb29sM0RHcmFkID0gYmFja2VuZC53YXNtLmN3cmFwKCdBdmdQb29sM0RHcmFkJywgbnVsbCwgW1xuICAgICdudW1iZXInLCAgLy8gZHlJZFxuICAgICdudW1iZXInLCAgLy8gZHhJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgJ251bWJlcicsICAvLyBjaGFubmVsU2l6ZVxuICAgICdudW1iZXInLCAgLy8gaW5EZXB0aFxuICAgICdudW1iZXInLCAgLy8gaW5IZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGluV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIG91dERlcHRoXG4gICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIG91dFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVEZXB0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVXaWR0aFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25EZXB0aFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGVmZmVjdGl2ZUZpbHRlckRlcHRoXG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGVmZmVjdGl2ZUZpbHRlcldpZHRoXG4gICAgJ251bWJlcicsICAvLyBwYWRGcm9udFxuICAgICdudW1iZXInLCAgLy8gcGFkVG9wXG4gICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJEZXB0aFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJXaWR0aFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF2Z1Bvb2wzREdyYWQoYXJnczoge1xuICBpbnB1dHM6IEF2Z1Bvb2wzREdyYWRJbnB1dHMsXG4gIGF0dHJzOiBBdmdQb29sM0RHcmFkQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0fSA9IGlucHV0cztcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sM0RJbmZvKFxuICAgICAgaW5wdXQuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSxcbiAgICAgIHN0cmlkZXMsIC8qZGlsYXRpb25zPSovMSwgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBkeCA9IGJhY2tlbmQubWFrZU91dHB1dChpbnB1dC5zaGFwZSwgaW5wdXQuZHR5cGUpO1xuXG4gIHdhc21BdmdQb29sM0RHcmFkKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIC8vIFNpbmNlIFBvb2wzRCBvcHMgKEF2Z1Bvb2wzRCBhbmQgTWF4UG9vbDNEKSBzdXBwb3J0IDNEIGZpbHRlciBvbmx5LCBpblxuICAgICAgLy8gY2hhbm5lbHMgc2hvdWxkIGFsd2F5cyBlcXVhbCB0byBvdXQgY2hhbm5lbHMuXG4gICAgICAvKmNoYW5uZWxTaXplPSovY29udkluZm8uaW5DaGFubmVscyxcbiAgICAgIGNvbnZJbmZvLmluRGVwdGgsXG4gICAgICBjb252SW5mby5pbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmluV2lkdGgsXG4gICAgICBjb252SW5mby5vdXREZXB0aCxcbiAgICAgIGNvbnZJbmZvLm91dEhlaWdodCxcbiAgICAgIGNvbnZJbmZvLm91dFdpZHRoLFxuICAgICAgY29udkluZm8uc3RyaWRlRGVwdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVIZWlnaHQsXG4gICAgICBjb252SW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uRGVwdGgsXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uV2lkdGgsXG4gICAgICBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJEZXB0aCxcbiAgICAgIGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoLFxuICAgICAgY29udkluZm8ucGFkSW5mby5mcm9udCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8udG9wLFxuICAgICAgY29udkluZm8ucGFkSW5mby5sZWZ0LFxuICAgICAgY29udkluZm8uZmlsdGVyRGVwdGgsXG4gICAgICBjb252SW5mby5maWx0ZXJIZWlnaHQsXG4gICAgICBjb252SW5mby5maWx0ZXJXaWR0aCxcbiAgKTtcbiAgcmV0dXJuIGR4O1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbDNER3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdmdQb29sM0RHcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sM0RHcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPoolGrad, backend_util } from '@tensorflow/tfjs-core';\nlet wasmAvgPoolGrad;\nfunction setup(backend) {\n wasmAvgPoolGrad = backend.wasm.cwrap('AvgPoolGrad', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // filterWidth\n ]);\n}\nexport function avgPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad } = attrs;\n const convInfo = backend_util.computePool2DInfo(input.shape, filterSize, strides, \n /*dilations=*/ 1, pad);\n const dx = backend.makeOutput(input.shape, input.dtype);\n wasmAvgPoolGrad(backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, convInfo.batchSize, \n // Since Pool ops (AvgPool and MaxPool) support 2D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inHeight, convInfo.inWidth, convInfo.outHeight, convInfo.outWidth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.top, convInfo.padInfo.left, convInfo.filterHeight, convInfo.filterWidth);\n return dx;\n}\nexport const avgPoolGradConfig = {\n kernelName: AvgPoolGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: avgPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9BdmdQb29sR3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsV0FBVyxFQUF1QyxZQUFZLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFJM0ksSUFBSSxlQU1rRCxDQUFDO0FBRXZELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFO1FBQ3hELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLGNBQWM7S0FDMUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXpDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsS0FBSyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU87SUFDcEUsY0FBYyxDQUFBLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELGVBQWUsQ0FDWCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxRQUFRLENBQUMsU0FBUztJQUNsQixrRUFBa0U7SUFDbEUsZ0RBQWdEO0lBQ2hELGdCQUFnQixDQUFBLFFBQVEsQ0FBQyxVQUFVLEVBQ25DLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxxQkFBcUIsRUFDOUIsUUFBUSxDQUFDLG9CQUFvQixFQUM3QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQ3JCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLENBQ3ZCLENBQUM7SUFDRixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QXZnUG9vbEdyYWQsIEF2Z1Bvb2xHcmFkQXR0cnMsIEF2Z1Bvb2xHcmFkSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxubGV0IHdhc21BdmdQb29sR3JhZDogKFxuICAgIGR5SWQ6IG51bWJlciwgZHhJZDogbnVtYmVyLCBiYXRjaFNpemU6IG51bWJlciwgY2hhbm5lbFNpemU6IG51bWJlcixcbiAgICBpbkhlaWdodDogbnVtYmVyLCBpbldpZHRoOiBudW1iZXIsIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLFxuICAgIGRpbGF0aW9uV2lkdGg6IG51bWJlciwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gICAgZWZmZWN0aXZlRmlsdGVyV2lkdGg6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbUF2Z1Bvb2xHcmFkID0gYmFja2VuZC53YXNtLmN3cmFwKCdBdmdQb29sR3JhZCcsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAnbnVtYmVyJywgIC8vIGR4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIG91dFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICdudW1iZXInLCAgLy8gZWZmZWN0aXZlRmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgLy8gcGFkVG9wXG4gICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcldpZHRoXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbEdyYWQoYXJnczoge1xuICBpbnB1dHM6IEF2Z1Bvb2xHcmFkSW5wdXRzLFxuICBhdHRyczogQXZnUG9vbEdyYWRBdHRycyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkeSwgaW5wdXR9ID0gaW5wdXRzO1xuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sMkRJbmZvKFxuICAgICAgaW5wdXQuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICAvKmRpbGF0aW9ucz0qLzEsIHBhZCk7XG4gIGNvbnN0IGR4ID0gYmFja2VuZC5tYWtlT3V0cHV0KGlucHV0LnNoYXBlLCBpbnB1dC5kdHlwZSk7XG5cbiAgd2FzbUF2Z1Bvb2xHcmFkKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIC8vIFNpbmNlIFBvb2wgb3BzIChBdmdQb29sIGFuZCBNYXhQb29sKSBzdXBwb3J0IDJEIGZpbHRlciBvbmx5LCBpblxuICAgICAgLy8gY2hhbm5lbHMgc2hvdWxkIGFsd2F5cyBlcXVhbCB0byBvdXQgY2hhbm5lbHMuXG4gICAgICAvKmNoYW5uZWxTaXplPSovY29udkluZm8uaW5DaGFubmVscyxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dEhlaWdodCxcbiAgICAgIGNvbnZJbmZvLm91dFdpZHRoLFxuICAgICAgY29udkluZm8uc3RyaWRlSGVpZ2h0LFxuICAgICAgY29udkluZm8uc3RyaWRlV2lkdGgsXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uV2lkdGgsXG4gICAgICBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQsXG4gICAgICBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJXaWR0aCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8udG9wLFxuICAgICAgY29udkluZm8ucGFkSW5mby5sZWZ0LFxuICAgICAgY29udkluZm8uZmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZmlsdGVyV2lkdGgsXG4gICk7XG4gIHJldHVybiBkeDtcbn1cblxuZXhwb3J0IGNvbnN0IGF2Z1Bvb2xHcmFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEF2Z1Bvb2xHcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reshape, util } from '@tensorflow/tfjs-core';\nexport function reshape(args) {\n const { inputs, attrs } = args;\n const { x } = inputs;\n const { shape } = attrs;\n const xSize = util.sizeFromShape(x.shape);\n const $shape = util.inferFromImplicitShape(shape, xSize);\n util.assert(xSize === util.sizeFromShape($shape), () => `new shape: ${$shape}, old shape: ${x.shape}. New shape and old ` +\n `shape must have the same number of elements.`);\n // Backend needs to track refCount for the dataId for reshape op\n args.backend.incRef(x.dataId);\n return { dataId: x.dataId, shape: $shape, dtype: x.dtype };\n}\nexport const reshapeConfig = {\n kernelName: Reshape,\n backendName: 'wasm',\n kernelFunc: reshape\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1Jlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixPQUFPLEVBQStCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNHLE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQXdFO0lBQzFFLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdCLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXpELElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQ3BDLEdBQUcsRUFBRSxDQUFDLGNBQWMsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssc0JBQXNCO1FBQ25FLDhDQUE4QyxDQUFDLENBQUM7SUFFeEQsZ0VBQWdFO0lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaGFwZSwgUmVzaGFwZUF0dHJzLCBSZXNoYXBlSW5wdXRzLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaGFwZShcbiAgICBhcmdzOiB7aW5wdXRzOiBSZXNoYXBlSW5wdXRzLCBhdHRyczogUmVzaGFwZUF0dHJzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pIHtcbiAgY29uc3Qge2lucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7c2hhcGV9ID0gYXR0cnM7XG5cbiAgY29uc3QgeFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSk7XG4gIGNvbnN0ICRzaGFwZSA9IHV0aWwuaW5mZXJGcm9tSW1wbGljaXRTaGFwZShzaGFwZSwgeFNpemUpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeFNpemUgPT09IHV0aWwuc2l6ZUZyb21TaGFwZSgkc2hhcGUpLFxuICAgICAgKCkgPT4gYG5ldyBzaGFwZTogJHskc2hhcGV9LCBvbGQgc2hhcGU6ICR7eC5zaGFwZX0uIE5ldyBzaGFwZSBhbmQgb2xkIGAgK1xuICAgICAgICAgIGBzaGFwZSBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLmApO1xuXG4gIC8vIEJhY2tlbmQgbmVlZHMgdG8gdHJhY2sgcmVmQ291bnQgZm9yIHRoZSBkYXRhSWQgZm9yIHJlc2hhcGUgb3BcbiAgYXJncy5iYWNrZW5kLmluY1JlZih4LmRhdGFJZCk7XG4gIHJldHVybiB7ZGF0YUlkOiB4LmRhdGFJZCwgc2hhcGU6ICRzaGFwZSwgZHR5cGU6IHguZHR5cGV9O1xufVxuXG5leHBvcnQgY29uc3QgcmVzaGFwZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNoYXBlLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiByZXNoYXBlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BatchMatMul, broadcast_util, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nlet wasmBatchMatMul;\nfunction setup(backend) {\n wasmBatchMatMul = backend.wasm.cwrap(BatchMatMul, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction batchMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b } = inputs;\n const { transposeA, transposeB } = attrs;\n if (a.dtype !== 'float32' || b.dtype !== 'float32') {\n throw new Error(`BatchMatMul for non non-float32 tensors not yet supported.`);\n }\n const aRank = a.shape.length;\n const bRank = b.shape.length;\n const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1];\n const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2];\n const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2];\n const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1];\n const outerDimsA = a.shape.slice(0, -2);\n const outerDimsB = b.shape.slice(0, -2);\n const batchDimA = util.sizeFromShape(outerDimsA);\n const batchDimB = util.sizeFromShape(outerDimsB);\n const outShapeOuterDims = broadcast_util.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2));\n const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]);\n util.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (` +\n `${innerShapeB}) of Tensors with shapes ${a.shape} and ` +\n `${b.shape} and transposeA=${transposeA}` +\n ` and transposeB=${transposeB} must match.`);\n const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] :\n [batchDimA, outerShapeA, innerShapeA];\n const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] :\n [batchDimB, innerShapeB, outerShapeB];\n // The rest of the implementation is designed to operate on rank-3 tensors\n const a3d = reshape({ inputs: { x: a }, backend, attrs: { shape: a3dShape } });\n const b3d = reshape({ inputs: { x: b }, backend, attrs: { shape: b3dShape } });\n const a3dId = backend.dataIdMap.get(a3d.dataId).id;\n const b3dId = backend.dataIdMap.get(b3d.dataId).id;\n const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1];\n const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2];\n const batchDim = Math.max(batchDimA, batchDimB);\n const out = backend.makeOutput([batchDim, leftDim, rightDim], a3d.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const aShapeBytes = new Uint8Array(new Int32Array(a3d.shape).buffer);\n const bShapeBytes = new Uint8Array(new Int32Array(b3d.shape).buffer);\n wasmBatchMatMul(a3dId, aShapeBytes, a3d.shape.length, b3dId, bShapeBytes, b3d.shape.length, transposeA, transposeB, outId);\n backend.disposeData(a3d.dataId);\n backend.disposeData(b3d.dataId);\n out.shape = outShape;\n return out;\n}\nexport const batchMatMulConfig = {\n kernelName: BatchMatMul,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: batchMatMul\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hNYXRNdWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9CYXRjaE1hdE11bC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsV0FBVyxFQUF1QyxjQUFjLEVBQTRCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZJLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsSUFBSSxlQUcyQyxDQUFDO0FBRWhELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNqRSxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRyxTQUFTO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUlwQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN0QixNQUFNLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV2QyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ1gsNERBQTRELENBQUMsQ0FBQztLQUNuRTtJQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQywwQkFBMEIsQ0FDL0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUV0RSxJQUFJLENBQUMsTUFBTSxDQUNQLFdBQVcsS0FBSyxXQUFXLEVBQzNCLEdBQUcsRUFBRSxDQUFDLGtDQUFrQyxXQUFXLFNBQVM7UUFDeEQsR0FBRyxXQUFXLDRCQUE0QixDQUFDLENBQUMsS0FBSyxPQUFPO1FBQ3hELEdBQUcsQ0FBQyxDQUFDLEtBQUssbUJBQW1CLFVBQVUsRUFBRTtRQUN6QyxtQkFBbUIsVUFBVSxjQUFjLENBQUMsQ0FBQztJQUVyRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVwRSwwRUFBMEU7SUFDMUUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV6RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJFLGVBQWUsQ0FDWCxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFckQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFaEMsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JhdGNoTWF0TXVsLCBCYXRjaE1hdE11bEF0dHJzLCBCYXRjaE1hdE11bElucHV0cywgYnJvYWRjYXN0X3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5sZXQgd2FzbUJhdGNoTWF0TXVsOiAoXG4gICAgYUlkOiBudW1iZXIsIGFTaGFwZTogVWludDhBcnJheSwgYVNoYXBlU2l6ZTogbnVtYmVyLCBiSWQ6IG51bWJlcixcbiAgICBiU2hhcGU6IFVpbnQ4QXJyYXksIGJTaGFwZVNpemU6IG51bWJlciwgdHJhbnNwb3NlQTogYm9vbGVhbixcbiAgICB0cmFuc3Bvc2VCOiBib29sZWFuLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQmF0Y2hNYXRNdWwgPSBiYWNrZW5kLndhc20uY3dyYXAoQmF0Y2hNYXRNdWwsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICdudW1iZXInLCAgLy8gYV9pZFxuICAgICdhcnJheScsICAgLy8gYV9zaGFwZVxuICAgICdudW1iZXInLCAgLy8gYV9zaGFwZS5sZW5ndGhcbiAgICAnbnVtYmVyJywgIC8vIGJfaWRcbiAgICAnYXJyYXknLCAgIC8vIGJfc2hhcGVcbiAgICAnbnVtYmVyJywgIC8vIGJfc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyB0cmFuc3Bvc2VfYVxuICAgICdudW1iZXInLCAgLy8gdHJhbnNwb3NlX2JcbiAgICAnbnVtYmVyJyAgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hNYXRNdWwoYXJnczoge1xuICBpbnB1dHM6IEJhdGNoTWF0TXVsSW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgYXR0cnM6IEJhdGNoTWF0TXVsQXR0cnNcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2EsIGJ9ID0gaW5wdXRzO1xuICBjb25zdCB7dHJhbnNwb3NlQSwgdHJhbnNwb3NlQn0gPSBhdHRycztcblxuICBpZiAoYS5kdHlwZSAhPT0gJ2Zsb2F0MzInIHx8IGIuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEJhdGNoTWF0TXVsIGZvciBub24gbm9uLWZsb2F0MzIgdGVuc29ycyBub3QgeWV0IHN1cHBvcnRlZC5gKTtcbiAgfVxuXG4gIGNvbnN0IGFSYW5rID0gYS5zaGFwZS5sZW5ndGg7XG4gIGNvbnN0IGJSYW5rID0gYi5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3QgaW5uZXJTaGFwZUEgPSB0cmFuc3Bvc2VBID8gYS5zaGFwZVthUmFuayAtIDJdIDogYS5zaGFwZVthUmFuayAtIDFdO1xuICBjb25zdCBpbm5lclNoYXBlQiA9IHRyYW5zcG9zZUIgPyBiLnNoYXBlW2JSYW5rIC0gMV0gOiBiLnNoYXBlW2JSYW5rIC0gMl07XG5cbiAgY29uc3Qgb3V0ZXJTaGFwZUEgPSB0cmFuc3Bvc2VBID8gYS5zaGFwZVthUmFuayAtIDFdIDogYS5zaGFwZVthUmFuayAtIDJdO1xuICBjb25zdCBvdXRlclNoYXBlQiA9IHRyYW5zcG9zZUIgPyBiLnNoYXBlW2JSYW5rIC0gMl0gOiBiLnNoYXBlW2JSYW5rIC0gMV07XG5cbiAgY29uc3Qgb3V0ZXJEaW1zQSA9IGEuc2hhcGUuc2xpY2UoMCwgLTIpO1xuICBjb25zdCBvdXRlckRpbXNCID0gYi5zaGFwZS5zbGljZSgwLCAtMik7XG5cbiAgY29uc3QgYmF0Y2hEaW1BID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dGVyRGltc0EpO1xuICBjb25zdCBiYXRjaERpbUIgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0ZXJEaW1zQik7XG5cbiAgY29uc3Qgb3V0U2hhcGVPdXRlckRpbXMgPSBicm9hZGNhc3RfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShcbiAgICAgIGEuc2hhcGUuc2xpY2UoMCwgLTIpLCBiLnNoYXBlLnNsaWNlKDAsIC0yKSk7XG4gIGNvbnN0IG91dFNoYXBlID0gb3V0U2hhcGVPdXRlckRpbXMuY29uY2F0KFtvdXRlclNoYXBlQSwgb3V0ZXJTaGFwZUJdKTtcblxuICB1dGlsLmFzc2VydChcbiAgICAgIGlubmVyU2hhcGVBID09PSBpbm5lclNoYXBlQixcbiAgICAgICgpID0+IGBFcnJvciBpbiBtYXRNdWw6IGlubmVyIHNoYXBlcyAoJHtpbm5lclNoYXBlQX0pIGFuZCAoYCArXG4gICAgICAgICAgYCR7aW5uZXJTaGFwZUJ9KSBvZiBUZW5zb3JzIHdpdGggc2hhcGVzICR7YS5zaGFwZX0gYW5kIGAgK1xuICAgICAgICAgIGAke2Iuc2hhcGV9IGFuZCB0cmFuc3Bvc2VBPSR7dHJhbnNwb3NlQX1gICtcbiAgICAgICAgICBgIGFuZCB0cmFuc3Bvc2VCPSR7dHJhbnNwb3NlQn0gbXVzdCBtYXRjaC5gKTtcblxuICBjb25zdCBhM2RTaGFwZSA9IHRyYW5zcG9zZUEgPyBbYmF0Y2hEaW1BLCBpbm5lclNoYXBlQSwgb3V0ZXJTaGFwZUFdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JhdGNoRGltQSwgb3V0ZXJTaGFwZUEsIGlubmVyU2hhcGVBXTtcbiAgY29uc3QgYjNkU2hhcGUgPSB0cmFuc3Bvc2VCID8gW2JhdGNoRGltQiwgb3V0ZXJTaGFwZUIsIGlubmVyU2hhcGVCXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYXRjaERpbUIsIGlubmVyU2hhcGVCLCBvdXRlclNoYXBlQl07XG5cbiAgLy8gVGhlIHJlc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRlc2lnbmVkIHRvIG9wZXJhdGUgb24gcmFuay0zIHRlbnNvcnNcbiAgY29uc3QgYTNkID0gcmVzaGFwZSh7aW5wdXRzOiB7eDogYX0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGEzZFNoYXBlfX0pO1xuICBjb25zdCBiM2QgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiBifSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogYjNkU2hhcGV9fSk7XG5cbiAgY29uc3QgYTNkSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoYTNkLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGIzZElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGIzZC5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IGxlZnREaW0gPSB0cmFuc3Bvc2VBID8gYTNkLnNoYXBlWzJdIDogYTNkLnNoYXBlWzFdO1xuICBjb25zdCByaWdodERpbSA9IHRyYW5zcG9zZUIgPyBiM2Quc2hhcGVbMV0gOiBiM2Quc2hhcGVbMl07XG4gIGNvbnN0IGJhdGNoRGltID0gTWF0aC5tYXgoYmF0Y2hEaW1BLCBiYXRjaERpbUIpO1xuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChbYmF0Y2hEaW0sIGxlZnREaW0sIHJpZ2h0RGltXSwgYTNkLmR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgYVNoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShhM2Quc2hhcGUpLmJ1ZmZlcik7XG4gIGNvbnN0IGJTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoYjNkLnNoYXBlKS5idWZmZXIpO1xuXG4gIHdhc21CYXRjaE1hdE11bChcbiAgICAgIGEzZElkLCBhU2hhcGVCeXRlcywgYTNkLnNoYXBlLmxlbmd0aCwgYjNkSWQsIGJTaGFwZUJ5dGVzLFxuICAgICAgYjNkLnNoYXBlLmxlbmd0aCwgdHJhbnNwb3NlQSwgdHJhbnNwb3NlQiwgb3V0SWQpO1xuXG4gIGJhY2tlbmQuZGlzcG9zZURhdGEoYTNkLmRhdGFJZCk7XG4gIGJhY2tlbmQuZGlzcG9zZURhdGEoYjNkLmRhdGFJZCk7XG5cbiAgb3V0LnNoYXBlID0gb3V0U2hhcGU7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaE1hdE11bENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBCYXRjaE1hdE11bCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogYmF0Y2hNYXRNdWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function assertNotComplex(tensor, opName) {\n if (!Array.isArray(tensor)) {\n tensor = [tensor];\n }\n tensor.forEach(t => {\n if (t != null) {\n util.assert(t.dtype !== 'complex64', () => `${opName} does not support complex64 tensors in the CPU backend.`);\n }\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3B1X3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9jcHVfdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixNQUErQixFQUFFLE1BQWM7SUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLEdBQ0YsTUFBTSx5REFBeUQsQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1RlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3RDb21wbGV4KFxuICAgIHRlbnNvcjogVGVuc29ySW5mb3xUZW5zb3JJbmZvW10sIG9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh0ZW5zb3IpKSB7XG4gICAgdGVuc29yID0gW3RlbnNvcl07XG4gIH1cbiAgdGVuc29yLmZvckVhY2godCA9PiB7XG4gICAgaWYgKHQgIT0gbnVsbCkge1xuICAgICAgdXRpbC5hc3NlcnQoXG4gICAgICAgICAgdC5kdHlwZSAhPT0gJ2NvbXBsZXg2NCcsXG4gICAgICAgICAgKCkgPT4gYCR7XG4gICAgICAgICAgICAgIG9wTmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBjb21wbGV4NjQgdGVuc29ycyBpbiB0aGUgQ1BVIGJhY2tlbmQuYCk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Abs, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function simpleAbsImpl(vals) {\n const resultValues = new Float32Array(vals.length);\n for (let i = 0; i < vals.length; ++i) {\n resultValues[i] = Math.abs(vals[i]);\n }\n return resultValues;\n}\nexport const abs = (args) => {\n const { x } = args.inputs;\n const cpuBackend = args.backend;\n assertNotComplex(x, 'abs');\n let resultValues = new Float32Array(util.sizeFromShape(x.shape));\n const values = cpuBackend.data.get(x.dataId).values;\n resultValues = simpleAbsImpl(values);\n return cpuBackend.makeOutput(resultValues, x.shape, x.dtype);\n};\nexport const absConfig = {\n kernelName: Abs,\n backendName: 'cpu',\n kernelFunc: abs,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBZ0I7SUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQWtELEVBQUUsRUFBRTtJQUN4RSxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBRWhDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUzQixJQUFJLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2xFLFlBQVksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FicywgQWJzSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlQWJzSW1wbCh2YWxzOiBUeXBlZEFycmF5KTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgcmVzdWx0VmFsdWVzID0gbmV3IEZsb2F0MzJBcnJheSh2YWxzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7ICsraSkge1xuICAgIHJlc3VsdFZhbHVlc1tpXSA9IE1hdGguYWJzKHZhbHNbaV0pO1xuICB9XG4gIHJldHVybiByZXN1bHRWYWx1ZXM7XG59XG5cbmV4cG9ydCBjb25zdCBhYnMgPSAoYXJnczoge2lucHV0czogQWJzSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pID0+IHtcbiAgY29uc3Qge3h9ID0gYXJncy5pbnB1dHM7XG4gIGNvbnN0IGNwdUJhY2tlbmQgPSBhcmdzLmJhY2tlbmQ7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYWJzJyk7XG5cbiAgbGV0IHJlc3VsdFZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkodXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpKTtcbiAgY29uc3QgdmFsdWVzID0gY3B1QmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIHJlc3VsdFZhbHVlcyA9IHNpbXBsZUFic0ltcGwodmFsdWVzKTtcblxuICByZXR1cm4gY3B1QmFja2VuZC5tYWtlT3V0cHV0KHJlc3VsdFZhbHVlcywgeC5zaGFwZSwgeC5kdHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWJzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFicyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhYnMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\n/**\n * Template that creates implementation for binary ops. Supports broadcast.\n */\nexport function createSimpleBinaryKernelImpl(op) {\n return (aShape, bShape, aVals, bVals, dtype) => {\n const newShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n const resultRank = newShape.length;\n const resultStrides = util.computeStrides(newShape);\n const resultSize = util.sizeFromShape(newShape);\n const result = util.getTypedArrayFromDType(dtype, resultSize);\n const aRank = aShape.length;\n const bRank = bShape.length;\n const aStrides = util.computeStrides(aShape);\n const bStrides = util.computeStrides(bShape);\n const aBroadcastDims = backend_util.getBroadcastDims(aShape, newShape);\n const bBroadcastDims = backend_util.getBroadcastDims(bShape, newShape);\n if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n for (let i = 0; i < result.length; ++i) {\n result[i] = op(aVals[i % aVals.length], bVals[i % bVals.length]);\n }\n }\n else {\n for (let i = 0; i < result.length; ++i) {\n const loc = util.indexToLoc(i, resultRank, resultStrides);\n const aLoc = loc.slice(-aRank);\n aBroadcastDims.forEach(d => aLoc[d] = 0);\n const aIndex = util.locToIndex(aLoc, aRank, aStrides);\n const bLoc = loc.slice(-bRank);\n bBroadcastDims.forEach(d => bLoc[d] = 0);\n const bIndex = util.locToIndex(bLoc, bRank, bStrides);\n result[i] = op(aVals[aIndex], bVals[bIndex]);\n }\n }\n return [result, newShape];\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy91dGlscy9iaW5hcnlfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFxRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk1Rzs7R0FFRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxFQUF5QjtJQUVwRSxPQUFPLENBQUMsTUFBZ0IsRUFBRSxNQUFnQixFQUFFLEtBQWlCLEVBQ3JELEtBQWlCLEVBQUUsS0FBZSxFQUEwQixFQUFFO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEQsTUFBTSxNQUFNLEdBQ1IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQXdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbEU7U0FDRjthQUFNO1lBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFFMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRXRELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUM5QztTQUNGO1FBRUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIERhdGFWYWx1ZXMsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtTaW1wbGVCaW5hcnlLZXJuZWxJbXBsLCBTaW1wbGVCaW5hcnlPcGVyYXRpb259IGZyb20gJy4vYmluYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgaW1wbGVtZW50YXRpb24gZm9yIGJpbmFyeSBvcHMuIFN1cHBvcnRzIGJyb2FkY2FzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwob3A6IFNpbXBsZUJpbmFyeU9wZXJhdGlvbik6XG4gICAgU2ltcGxlQmluYXJ5S2VybmVsSW1wbCB7XG4gIHJldHVybiAoYVNoYXBlOiBudW1iZXJbXSwgYlNoYXBlOiBudW1iZXJbXSwgYVZhbHM6IERhdGFWYWx1ZXMsXG4gICAgICAgICAgYlZhbHM6IERhdGFWYWx1ZXMsIGR0eXBlOiBEYXRhVHlwZSk6IFtUeXBlZEFycmF5LCBudW1iZXJbXV0gPT4ge1xuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKGFTaGFwZSwgYlNoYXBlKTtcblxuICAgIGNvbnN0IHJlc3VsdFJhbmsgPSBuZXdTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMobmV3U2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUobmV3U2hhcGUpO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKGR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgcmVzdWx0U2l6ZSk7XG5cbiAgICBjb25zdCBhUmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYlJhbmsgPSBiU2hhcGUubGVuZ3RoO1xuXG4gICAgY29uc3QgYVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGFTaGFwZSk7XG4gICAgY29uc3QgYlN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGJTaGFwZSk7XG5cbiAgICBjb25zdCBhQnJvYWRjYXN0RGltcyA9IGJhY2tlbmRfdXRpbC5nZXRCcm9hZGNhc3REaW1zKGFTaGFwZSwgbmV3U2hhcGUpO1xuICAgIGNvbnN0IGJCcm9hZGNhc3REaW1zID0gYmFja2VuZF91dGlsLmdldEJyb2FkY2FzdERpbXMoYlNoYXBlLCBuZXdTaGFwZSk7XG5cbiAgICBpZiAoYUJyb2FkY2FzdERpbXMubGVuZ3RoICsgYkJyb2FkY2FzdERpbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXN1bHRbaV0gPSBvcChhVmFsc1tpICUgYVZhbHMubGVuZ3RoXSwgYlZhbHNbaSAlIGJWYWxzLmxlbmd0aF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBsb2MgPSB1dGlsLmluZGV4VG9Mb2MoaSwgcmVzdWx0UmFuaywgcmVzdWx0U3RyaWRlcyk7XG5cbiAgICAgICAgY29uc3QgYUxvYyA9IGxvYy5zbGljZSgtYVJhbmspO1xuICAgICAgICBhQnJvYWRjYXN0RGltcy5mb3JFYWNoKGQgPT4gYUxvY1tkXSA9IDApO1xuICAgICAgICBjb25zdCBhSW5kZXggPSB1dGlsLmxvY1RvSW5kZXgoYUxvYywgYVJhbmssIGFTdHJpZGVzKTtcblxuICAgICAgICBjb25zdCBiTG9jID0gbG9jLnNsaWNlKC1iUmFuayk7XG4gICAgICAgIGJCcm9hZGNhc3REaW1zLmZvckVhY2goZCA9PiBiTG9jW2RdID0gMCk7XG4gICAgICAgIGNvbnN0IGJJbmRleCA9IHV0aWwubG9jVG9JbmRleChiTG9jLCBiUmFuaywgYlN0cmlkZXMpO1xuXG4gICAgICAgIHJlc3VsdFtpXSA9IG9wKGFWYWxzW2FJbmRleF0sIGJWYWxzW2JJbmRleF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbcmVzdWx0LCBuZXdTaGFwZV07XG4gIH07XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Complex } from '@tensorflow/tfjs-core';\nexport function complex(args) {\n const { inputs, backend } = args;\n const { real, imag } = inputs;\n const realVals = backend.data.get(real.dataId).values;\n const imagVals = backend.data.get(imag.dataId).values;\n const complexInfo = backend.makeTensorInfo(real.shape, 'complex64');\n const complex = backend.data.get(complexInfo.dataId);\n // The complex tensor owns the underlying real and imag tensorInfos, only the\n // complex tensor tracks refCount, when complexData is disposed the\n // underlying tensorData will be disposed.\n complex.complexTensorInfos = {\n real: backend.makeTensorInfo(real.shape, 'float32', realVals),\n imag: backend.makeTensorInfo(imag.shape, 'float32', imagVals)\n };\n return complexInfo;\n}\nexport const complexConfig = {\n kernelName: Complex,\n backendName: 'cpu',\n kernelFunc: complex\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29tcGxleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFrRSxNQUFNLHVCQUF1QixDQUFDO0FBSS9HLE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBc0Q7SUFFNUUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFNUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFcEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVyRCw2RUFBNkU7SUFDN0UsbUVBQW1FO0lBQ25FLDBDQUEwQztJQUMxQyxPQUFPLENBQUMsa0JBQWtCLEdBQUc7UUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzdELElBQUksRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQztLQUM5RCxDQUFDO0lBRUYsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q29tcGxleCwgQ29tcGxleElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4KGFyZ3M6IHtpbnB1dHM6IENvbXBsZXhJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3JlYWwsIGltYWd9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IHJlYWxWYWxzID0gYmFja2VuZC5kYXRhLmdldChyZWFsLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGltYWdWYWxzID0gYmFja2VuZC5kYXRhLmdldChpbWFnLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgY29tcGxleEluZm8gPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlYWwuc2hhcGUsICdjb21wbGV4NjQnKTtcblxuICBjb25zdCBjb21wbGV4ID0gYmFja2VuZC5kYXRhLmdldChjb21wbGV4SW5mby5kYXRhSWQpO1xuXG4gIC8vIFRoZSBjb21wbGV4IHRlbnNvciBvd25zIHRoZSB1bmRlcmx5aW5nIHJlYWwgYW5kIGltYWcgdGVuc29ySW5mb3MsIG9ubHkgdGhlXG4gIC8vIGNvbXBsZXggdGVuc29yIHRyYWNrcyByZWZDb3VudCwgd2hlbiBjb21wbGV4RGF0YSBpcyBkaXNwb3NlZCB0aGVcbiAgLy8gdW5kZXJseWluZyB0ZW5zb3JEYXRhIHdpbGwgYmUgZGlzcG9zZWQuXG4gIGNvbXBsZXguY29tcGxleFRlbnNvckluZm9zID0ge1xuICAgIHJlYWw6IGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVhbC5zaGFwZSwgJ2Zsb2F0MzInLCByZWFsVmFscyksXG4gICAgaW1hZzogYmFja2VuZC5tYWtlVGVuc29ySW5mbyhpbWFnLnNoYXBlLCAnZmxvYXQzMicsIGltYWdWYWxzKVxuICB9O1xuXG4gIHJldHVybiBjb21wbGV4SW5mbztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBsZXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29tcGxleCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb21wbGV4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { complex } from '../kernels/Complex';\n/**\n * Generates a tensorInfo with all zeros value.\n * @param backend cpu backend.\n * @param shape Shape for the zeros tensor.\n * @param dtype Optional. If set, the result has this dtype.\n */\nexport function zeros(backend, shape, dtype = 'float32') {\n if (dtype === 'complex64') {\n const real = zeros(backend, shape, 'float32');\n const imag = zeros(backend, shape, 'float32');\n return complex({ inputs: { real, imag }, backend });\n }\n const values = util.makeZerosTypedArray(util.sizeFromShape(shape), dtype);\n return backend.makeTensorInfo(shape, dtype, values);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVyb3NfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL3V0aWxzL3plcm9zX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFM0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNqQixPQUF1QixFQUFFLEtBQWUsRUFDeEMsUUFBa0IsU0FBUztJQUM3QixJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7UUFDekIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsT0FBTyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUNqRDtJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2tlcm5lbHMvQ29tcGxleCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdGVuc29ySW5mbyB3aXRoIGFsbCB6ZXJvcyB2YWx1ZS5cbiAqIEBwYXJhbSBiYWNrZW5kIGNwdSBiYWNrZW5kLlxuICogQHBhcmFtIHNoYXBlIFNoYXBlIGZvciB0aGUgemVyb3MgdGVuc29yLlxuICogQHBhcmFtIGR0eXBlIE9wdGlvbmFsLiBJZiBzZXQsIHRoZSByZXN1bHQgaGFzIHRoaXMgZHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvcyhcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgc2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSA9ICdmbG9hdDMyJyk6IFRlbnNvckluZm8ge1xuICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgY29uc3QgcmVhbCA9IHplcm9zKGJhY2tlbmQsIHNoYXBlLCAnZmxvYXQzMicpO1xuICAgIGNvbnN0IGltYWcgPSB6ZXJvcyhiYWNrZW5kLCBzaGFwZSwgJ2Zsb2F0MzInKTtcblxuICAgIHJldHVybiBjb21wbGV4KHtpbnB1dHM6IHtyZWFsLCBpbWFnfSwgYmFja2VuZH0pO1xuICB9XG5cbiAgY29uc3QgdmFsdWVzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSksIGR0eXBlKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhzaGFwZSwgZHR5cGUsIHZhbHVlcyk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Identity } from '@tensorflow/tfjs-core';\nexport function identity(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n backend.incRef(x.dataId);\n return { dataId: x.dataId, shape: x.shape, dtype: x.dtype };\n}\nexport const identityConfig = {\n kernelName: Identity,\n backendName: 'cpu',\n kernelFunc: identity\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0lkZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQXVELE1BQU0sdUJBQXVCLENBQUM7QUFJckcsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsSUFBdUQ7SUFDekQsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVuQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QixPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJZGVudGl0eSwgSWRlbnRpdHlJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoXG4gICAgYXJnczoge2lucHV0czogSWRlbnRpdHlJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBiYWNrZW5kLmluY1JlZih4LmRhdGFJZCk7XG5cbiAgcmV0dXJuIHtkYXRhSWQ6IHguZGF0YUlkLCBzaGFwZTogeC5zaGFwZSwgZHR5cGU6IHguZHR5cGV9O1xufVxuXG5leHBvcnQgY29uc3QgaWRlbnRpdHlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSWRlbnRpdHksXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogaWRlbnRpdHkgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Real } from '@tensorflow/tfjs-core';\nexport function real(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const real = backend.data.get(input.dataId).complexTensorInfos.real;\n const realVal = backend.data.get(real.dataId).values;\n // When complex tensor is disposed, its underlying parts will be disposed too.\n // Make new tensor out of the real value of the complex. This makes sure the\n // value is still accessible even if complex tensor is disposed.\n return backend.makeTensorInfo(real.shape, real.dtype, realVal);\n}\nexport const realConfig = {\n kernelName: Real,\n backendName: 'cpu',\n kernelFunc: real\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLElBQUksRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUk3RixNQUFNLFVBQVUsSUFBSSxDQUFDLElBQW1EO0lBRXRFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXJELDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsZ0VBQWdFO0lBQ2hFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZWFsLCBSZWFsSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFsKGFyZ3M6IHtpbnB1dHM6IFJlYWxJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2lucHV0fSA9IGlucHV0cztcblxuICBjb25zdCByZWFsID0gYmFja2VuZC5kYXRhLmdldChpbnB1dC5kYXRhSWQpLmNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsO1xuICBjb25zdCByZWFsVmFsID0gYmFja2VuZC5kYXRhLmdldChyZWFsLmRhdGFJZCkudmFsdWVzO1xuXG4gIC8vIFdoZW4gY29tcGxleCB0ZW5zb3IgaXMgZGlzcG9zZWQsIGl0cyB1bmRlcmx5aW5nIHBhcnRzIHdpbGwgYmUgZGlzcG9zZWQgdG9vLlxuICAvLyBNYWtlIG5ldyB0ZW5zb3Igb3V0IG9mIHRoZSByZWFsIHZhbHVlIG9mIHRoZSBjb21wbGV4LiBUaGlzIG1ha2VzIHN1cmUgdGhlXG4gIC8vIHZhbHVlIGlzIHN0aWxsIGFjY2Vzc2libGUgZXZlbiBpZiBjb21wbGV4IHRlbnNvciBpcyBkaXNwb3NlZC5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVhbC5zaGFwZSwgcmVhbC5kdHlwZSwgcmVhbFZhbCk7XG59XG5cbmV4cG9ydCBjb25zdCByZWFsQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlYWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVhbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cast, util } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { zeros } from '../utils/zeros_impl';\nimport { complex } from './Complex';\nimport { identity } from './Identity';\nimport { real } from './Real';\nexport function castImpl(values, shape, inputType, dtype) {\n if (dtype === 'int32') {\n const resultValues = Int32Array.from(values);\n return [shape, 'int32', resultValues];\n }\n if (dtype === 'bool') {\n // This is essentially the result of notEqual(x, 0). We avoid using\n // kernel notEqual to avoid circular dependency, i.e. binary_utils ->\n // cast -> notEqual -> binary_utils.\n const zero = util.toTypedArray([0], inputType);\n const [resultData, resultShape] = createSimpleBinaryKernelImpl((a, b) => (a !== b) ? 1 : 0)(shape, [], values, zero, 'bool');\n return [resultShape, 'bool', resultData];\n }\n throw new Error(`Error in Cast: failed to cast ${inputType} to ${dtype}`);\n}\nexport function cast(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dtype } = attrs;\n // Casting to complex64.\n if (dtype === 'complex64') {\n if (x.dtype === 'complex64') {\n return identity({ inputs: { x }, backend });\n }\n const zerosTensorInfo = zeros(backend, x.shape, x.dtype);\n const floatX = cast({ inputs: { x }, backend, attrs: { dtype: 'float32' } });\n const result = complex({ inputs: { real: floatX, imag: zerosTensorInfo }, backend });\n backend.disposeIntermediateTensorInfo(zerosTensorInfo);\n backend.disposeIntermediateTensorInfo(floatX);\n return result;\n }\n // Casting from complex64\n if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const result = cast({ inputs: { x: realPart }, backend, attrs: { dtype } });\n backend.disposeIntermediateTensorInfo(realPart);\n return result;\n }\n if (!util.hasEncodingLoss(x.dtype, dtype)) {\n // We don't change the underlying data, since we cast to higher\n // precision.\n const result = identity({ inputs: { x }, backend });\n return { dataId: result.dataId, shape: result.shape, dtype };\n }\n const values = backend.data.get(x.dataId).values;\n const [resultShape, resultType, resultData] = castImpl(values, x.shape, x.dtype, dtype);\n return backend.makeTensorInfo(resultShape, resultType, resultData);\n}\nexport const castConfig = {\n kernelName: Cast,\n backendName: 'cpu',\n kernelFunc: cast\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsSUFBSSxFQUFxRixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwSSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsTUFBa0IsRUFBRSxLQUFlLEVBQUUsU0FBbUIsRUFDeEQsS0FBZTtJQUNqQixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDckIsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUN2QztJQUVELElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtRQUNwQixtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLG9DQUFvQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FBRyw0QkFBNEIsQ0FDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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QUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtDYXN0LCBDYXN0QXR0cnMsIENhc3RJbnB1dHMsIERhdGFUeXBlLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi4vdXRpbHMvemVyb3NfaW1wbCc7XG5cbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi9Db21wbGV4JztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuL1JlYWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FzdEltcGwoXG4gICAgdmFsdWVzOiBUeXBlZEFycmF5LCBzaGFwZTogbnVtYmVyW10sIGlucHV0VHlwZTogRGF0YVR5cGUsXG4gICAgZHR5cGU6IERhdGFUeXBlKTogW251bWJlcltdLCBEYXRhVHlwZSwgVHlwZWRBcnJheV0ge1xuICBpZiAoZHR5cGUgPT09ICdpbnQzMicpIHtcbiAgICBjb25zdCByZXN1bHRWYWx1ZXMgPSBJbnQzMkFycmF5LmZyb20odmFsdWVzKTtcbiAgICByZXR1cm4gW3NoYXBlLCAnaW50MzInLCByZXN1bHRWYWx1ZXNdO1xuICB9XG5cbiAgaWYgKGR0eXBlID09PSAnYm9vbCcpIHtcbiAgICAvLyBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSByZXN1bHQgb2Ygbm90RXF1YWwoeCwgMCkuIFdlIGF2b2lkIHVzaW5nXG4gICAgLy8ga2VybmVsIG5vdEVxdWFsIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3ksIGkuZS4gYmluYXJ5X3V0aWxzIC0+XG4gICAgLy8gY2FzdCAtPiBub3RFcXVhbCAtPiBiaW5hcnlfdXRpbHMuXG4gICAgY29uc3QgemVybyA9IHV0aWwudG9UeXBlZEFycmF5KFswXSwgaW5wdXRUeXBlKTtcblxuICAgIGNvbnN0IFtyZXN1bHREYXRhLCByZXN1bHRTaGFwZV0gPSBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKFxuICAgICAgICAoYSwgYikgPT4gKGEgIT09IGIpID8gMSA6IDApKHNoYXBlLCBbXSwgdmFsdWVzLCB6ZXJvLCAnYm9vbCcpO1xuXG4gICAgcmV0dXJuIFtyZXN1bHRTaGFwZSwgJ2Jvb2wnLCByZXN1bHREYXRhXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIENhc3Q6IGZhaWxlZCB0byBjYXN0ICR7aW5wdXRUeXBlfSB0byAke2R0eXBlfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FzdChcbiAgICBhcmdzOiB7aW5wdXRzOiBDYXN0SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IENhc3RBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtkdHlwZX0gPSBhdHRycztcblxuICAvLyBDYXN0aW5nIHRvIGNvbXBsZXg2NC5cbiAgaWYgKGR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgICAgcmV0dXJuIGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHplcm9zVGVuc29ySW5mbyA9IHplcm9zKGJhY2tlbmQsIHguc2hhcGUsIHguZHR5cGUpO1xuICAgIGNvbnN0IGZsb2F0WCA9IGNhc3Qoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG5cbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBjb21wbGV4KHtpbnB1dHM6IHtyZWFsOiBmbG9hdFgsIGltYWc6IHplcm9zVGVuc29ySW5mb30sIGJhY2tlbmR9KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oemVyb3NUZW5zb3JJbmZvKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGZsb2F0WCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ2FzdGluZyBmcm9tIGNvbXBsZXg2NFxuICBpZiAoeC5kdHlwZSA9PT0gJ2NvbXBsZXg2NCcpIHtcbiAgICBjb25zdCByZWFsUGFydCA9IHJlYWwoe2lucHV0czoge2lucHV0OiB4fSwgYmFja2VuZH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNhc3Qoe2lucHV0czoge3g6IHJlYWxQYXJ0fSwgYmFja2VuZCwgYXR0cnM6IHtkdHlwZX19KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNFbmNvZGluZ0xvc3MoeC5kdHlwZSwgZHR5cGUpKSB7XG4gICAgLy8gV2UgZG9uJ3QgY2hhbmdlIHRoZSB1bmRlcmx5aW5nIGRhdGEsIHNpbmNlIHdlIGNhc3QgdG8gaGlnaGVyXG4gICAgLy8gcHJlY2lzaW9uLlxuICAgIGNvbnN0IHJlc3VsdCA9IGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICAgIHJldHVybiB7ZGF0YUlkOiByZXN1bHQuZGF0YUlkLCBzaGFwZTogcmVzdWx0LnNoYXBlLCBkdHlwZX07XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgW3Jlc3VsdFNoYXBlLCByZXN1bHRUeXBlLCByZXN1bHREYXRhXSA9XG4gICAgICBjYXN0SW1wbCh2YWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIGR0eXBlKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIHJlc3VsdFR5cGUsIHJlc3VsdERhdGEpO1xufVxuXG5leHBvcnQgY29uc3QgY2FzdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDYXN0LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNhc3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { cast } from '../kernels/Cast';\nimport { complex } from '../kernels/Complex';\n/**\n * Template that creates a `KernelFunc` for binary ops.\n * @param name Kernel name.\n * @param binaryKernelImpl A `SimpleBinaryKernelImpl` for the kernel.\n * @param binaryKernelComplexImpl Optional. If exists, represents a\n * `ComplexBinaryKernelImpl` for the kernel, will be used when input dtype\n * is `complex64`.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the first input. This is mainly used in\n * comparison kernels, such as Equal, Less, Greater, etc.\n */\nexport function binaryKernelFunc(name, simpleImpl, complexImpl, dtype) {\n if (complexImpl == null) {\n return ({ inputs, backend }) => {\n const { a, b } = inputs;\n const cpuBackend = backend;\n assertNotComplex([a, b], name);\n const aVals = cpuBackend.data.get(a.dataId).values;\n const bVals = cpuBackend.data.get(b.dataId).values;\n const decodedAVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(aVals) :\n aVals;\n const decodedBVals = a.dtype === 'string' ?\n // tslint:disable-next-line: no-any\n backend_util.fromUint8ToStringArray(bVals) :\n bVals;\n const $dtype = dtype || a.dtype;\n const [resultData, resultShape] = simpleImpl(a.shape, b.shape, decodedAVals, decodedBVals, $dtype);\n return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData);\n };\n }\n return ({ inputs, backend }) => {\n const { a, b } = inputs;\n const cpuBackend = backend;\n if (a.dtype === 'complex64' || b.dtype === 'complex64') {\n const $aComplex = cast({ inputs: { x: a }, backend: cpuBackend, attrs: { dtype: 'complex64' } });\n const $aComplexVals = cpuBackend.data.get($aComplex.dataId);\n const aReal = $aComplexVals.complexTensorInfos.real;\n const aImag = $aComplexVals.complexTensorInfos.imag;\n const aRealVals = cpuBackend.data.get(aReal.dataId).values;\n const aImagVals = cpuBackend.data.get(aImag.dataId).values;\n const $bComplex = cast({ inputs: { x: b }, backend: cpuBackend, attrs: { dtype: 'complex64' } });\n const $bComplexVals = cpuBackend.data.get($bComplex.dataId);\n const bReal = $bComplexVals.complexTensorInfos.real;\n const bImag = $bComplexVals.complexTensorInfos.imag;\n const bRealVals = cpuBackend.data.get(bReal.dataId).values;\n const bImagVals = cpuBackend.data.get(bImag.dataId).values;\n const [resultRealData, resultImagData, resultShape] = complexImpl(a.shape, b.shape, aRealVals, aImagVals, bRealVals, bImagVals);\n const resultReal = cpuBackend.makeTensorInfo(resultShape, 'float32', resultRealData);\n const resultImag = cpuBackend.makeTensorInfo(resultShape, 'float32', resultImagData);\n const result = complex({ inputs: { real: resultReal, imag: resultImag }, backend: cpuBackend });\n cpuBackend.disposeIntermediateTensorInfo($aComplex);\n cpuBackend.disposeIntermediateTensorInfo($bComplex);\n cpuBackend.disposeIntermediateTensorInfo(resultReal);\n cpuBackend.disposeIntermediateTensorInfo(resultImag);\n return result;\n }\n else {\n const aVals = cpuBackend.data.get(a.dataId).values;\n const bVals = cpuBackend.data.get(b.dataId).values;\n const $dtype = dtype || a.dtype;\n const [resultData, resultShape] = simpleImpl(a.shape, b.shape, aVals, bVals, $dtype);\n return cpuBackend.makeTensorInfo(resultShape, $dtype, resultData);\n }\n };\n}\n/**\n * Template that creates the complex type implementation for binary ops.\n * Supports broadcast.\n */\nexport function createComplexBinaryKernelImpl(op) {\n return (aShape, bShape, aRealVals, aImagVals, bRealVals, bImagVals) => {\n const resultShape = backend_util.assertAndGetBroadcastShape(aShape, bShape);\n const resultSize = util.sizeFromShape(resultShape);\n const resultRank = resultShape.length;\n const resultStrides = util.computeStrides(resultShape);\n const resultRealVals = util.getTypedArrayFromDType('float32', resultSize);\n const resultImagVals = util.getTypedArrayFromDType('float32', resultSize);\n const aBroadcastDims = backend_util.getBroadcastDims(aShape, resultShape);\n const bBroadcastDims = backend_util.getBroadcastDims(bShape, resultShape);\n const aVals = backend_util.mergeRealAndImagArrays(aRealVals, aImagVals);\n const bVals = backend_util.mergeRealAndImagArrays(bRealVals, bImagVals);\n const aRank = aShape.length;\n const aStrides = util.computeStrides(aShape);\n const bRank = bShape.length;\n const bStrides = util.computeStrides(bShape);\n if (aBroadcastDims.length + bBroadcastDims.length === 0) {\n for (let i = 0; i < resultRealVals.length; i++) {\n const aIdx = i % aVals.length;\n const bIdx = i % bVals.length;\n const result = op(aVals[aIdx * 2], aVals[aIdx * 2 + 1], bVals[bIdx * 2], bVals[bIdx * 2 + 1]);\n resultRealVals[i] = result.real;\n resultImagVals[i] = result.imag;\n }\n }\n else {\n for (let i = 0; i < resultRealVals.length; i++) {\n const loc = util.indexToLoc(i, resultRank, resultStrides);\n const aLoc = loc.slice(-aRank);\n aBroadcastDims.forEach(d => aLoc[d] = 0);\n const aIndex = util.locToIndex(aLoc, aRank, aStrides);\n const bLoc = loc.slice(-bRank);\n bBroadcastDims.forEach(d => bLoc[d] = 0);\n const bIndex = util.locToIndex(bLoc, bRank, bStrides);\n const opResult = op(aVals[aIndex * 2], aVals[aIndex * 2 + 1], bVals[bIndex * 2], bVals[bIndex * 2 + 1]);\n resultRealVals[i] = opResult.real;\n resultImagVals[i] = opResult.imag;\n }\n }\n return [resultRealVals, resultImagVals, resultShape];\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5X3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMvdXRpbHMvYmluYXJ5X3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWtELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBSTNDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLElBQVksRUFBRSxVQUFrQyxFQUNoRCxXQUFxQyxFQUFFLEtBQWdCO0lBQ3pELElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtZQUMzQixNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQXNCLENBQUM7WUFDdEMsTUFBTSxVQUFVLEdBQUcsT0FBeUIsQ0FBQztZQUU3QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUvQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztZQUVqRSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxD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QUFLLENBQUMsQ0FBQztnQkFDL0IsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUV0RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxRQUFRLEdBQ1YsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDM0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFOUIsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ25DO1NBQ0Y7UUFDRCxPQUFPLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQmluYXJ5SW5wdXRzLCBEYXRhVHlwZSwgS2VybmVsRnVuYywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4uL2tlcm5lbHMvQ2FzdCc7XG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4uL2tlcm5lbHMvQ29tcGxleCc7XG5cbmltcG9ydCB7Q29tcGxleEJpbmFyeUtlcm5lbEltcGwsIENvbXBsZXhCaW5hcnlPcGVyYXRpb24sIFNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4vYmluYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBgS2VybmVsRnVuY2AgZm9yIGJpbmFyeSBvcHMuXG4gKiBAcGFyYW0gbmFtZSBLZXJuZWwgbmFtZS5cbiAqIEBwYXJhbSBiaW5hcnlLZXJuZWxJbXBsIEEgYFNpbXBsZUJpbmFyeUtlcm5lbEltcGxgIGZvciB0aGUga2VybmVsLlxuICogQHBhcmFtIGJpbmFyeUtlcm5lbENvbXBsZXhJbXBsIE9wdGlvbmFsLiBJZiBleGlzdHMsIHJlcHJlc2VudHMgYVxuICogICAgIGBDb21wbGV4QmluYXJ5S2VybmVsSW1wbGAgZm9yIHRoZSBrZXJuZWwsIHdpbGwgYmUgdXNlZCB3aGVuIGlucHV0IGR0eXBlXG4gKiAgICAgaXMgYGNvbXBsZXg2NGAuXG4gKiBAcGFyYW0gZHR5cGUgT3B0aW9uYWwuIElmIHNldCwgdGhlIHJlc3VsdCBoYXMgdGhpcyBkdHlwZS4gT3RoZXJ3aXNlLCB0aGVcbiAqICAgICByZXN1bHQgaGFzIHRoZSBzYW1lIGR0eXBlIGFzIHRoZSBmaXJzdCBpbnB1dC4gVGhpcyBpcyBtYWlubHkgdXNlZCBpblxuICogICAgIGNvbXBhcmlzb24ga2VybmVscywgc3VjaCBhcyBFcXVhbCwgTGVzcywgR3JlYXRlciwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluYXJ5S2VybmVsRnVuYyhcbiAgICBuYW1lOiBzdHJpbmcsIHNpbXBsZUltcGw6IFNpbXBsZUJpbmFyeUtlcm5lbEltcGwsXG4gICAgY29tcGxleEltcGw/OiBDb21wbGV4QmluYXJ5S2VybmVsSW1wbCwgZHR5cGU/OiBEYXRhVHlwZSk6IEtlcm5lbEZ1bmMge1xuICBpZiAoY29tcGxleEltcGwgPT0gbnVsbCkge1xuICAgIHJldHVybiAoe2lucHV0cywgYmFja2VuZH0pID0+IHtcbiAgICAgIGNvbnN0IHthLCBifSA9IGlucHV0cyBhcyBCaW5hcnlJbnB1dHM7XG4gICAgICBjb25zdCBjcHVCYWNrZW5kID0gYmFja2VuZCBhcyBNYXRoQmFja2VuZENQVTtcblxuICAgICAgYXNzZXJ0Tm90Q29tcGxleChbYSwgYl0sIG5hbWUpO1xuXG4gICAgICBjb25zdCBhVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoYS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICAgICAgY29uc3QgYlZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgY29uc3QgZGVjb2RlZEFWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYVZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGFWYWxzO1xuICAgICAgY29uc3QgZGVjb2RlZEJWYWxzID0gYS5kdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYW55XG4gICAgICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkoYlZhbHMgYXMgYW55IGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGJWYWxzO1xuICAgICAgY29uc3QgJGR0eXBlID0gZHR5cGUgfHwgYS5kdHlwZTtcblxuICAgICAgY29uc3QgW3Jlc3VsdERhdGEsIHJlc3VsdFNoYXBlXSA9XG4gICAgICAgICAgc2ltcGxlSW1wbChhLnNoYXBlLCBiLnNoYXBlLCBkZWNvZGVkQVZhbHMsIGRlY29kZWRCVmFscywgJGR0eXBlKTtcblxuICAgICAgcmV0dXJuIGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsICRkdHlwZSwgcmVzdWx0RGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAoe2lucHV0cywgYmFja2VuZH0pID0+IHtcbiAgICBjb25zdCB7YSwgYn0gPSBpbnB1dHMgYXMgQmluYXJ5SW5wdXRzO1xuICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kQ1BVO1xuXG4gICAgaWYgKGEuZHR5cGUgPT09ICdjb21wbGV4NjQnIHx8IGIuZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICBjb25zdCAkYUNvbXBsZXggPSBjYXN0KFxuICAgICAgICAgIHtpbnB1dHM6IHt4OiBhfSwgYmFja2VuZDogY3B1QmFja2VuZCwgYXR0cnM6IHtkdHlwZTogJ2NvbXBsZXg2NCd9fSk7XG5cbiAgICAgIGNvbnN0ICRhQ29tcGxleFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KCRhQ29tcGxleC5kYXRhSWQpO1xuXG4gICAgICBjb25zdCBhUmVhbCA9ICRhQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLnJlYWw7XG4gICAgICBjb25zdCBhSW1hZyA9ICRhQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLmltYWc7XG5cbiAgICAgIGNvbnN0IGFSZWFsVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChhUmVhbC5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICBjb25zdCBhSW1hZ1ZhbHMgPVxuICAgICAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoYUltYWcuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuXG4gICAgICBjb25zdCAkYkNvbXBsZXggPSBjYXN0KFxuICAgICAgICAgIHtpbnB1dHM6IHt4OiBifSwgYmFja2VuZDogY3B1QmFja2VuZCwgYXR0cnM6IHtkdHlwZTogJ2NvbXBsZXg2NCd9fSk7XG5cbiAgICAgIGNvbnN0ICRiQ29tcGxleFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KCRiQ29tcGxleC5kYXRhSWQpO1xuXG4gICAgICBjb25zdCBiUmVhbCA9ICRiQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLnJlYWw7XG4gICAgICBjb25zdCBiSW1hZyA9ICRiQ29tcGxleFZhbHMuY29tcGxleFRlbnNvckluZm9zLmltYWc7XG5cbiAgICAgIGNvbnN0IGJSZWFsVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChiUmVhbC5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICBjb25zdCBiSW1hZ1ZhbHMgPVxuICAgICAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoYkltYWcuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuXG4gICAgICBjb25zdCBbcmVzdWx0UmVhbERhdGEsIHJlc3VsdEltYWdEYXRhLCByZXN1bHRTaGFwZV0gPSBjb21wbGV4SW1wbChcbiAgICAgICAgICBhLnNoYXBlLCBiLnNoYXBlLCBhUmVhbFZhbHMsIGFJbWFnVmFscywgYlJlYWxWYWxzLCBiSW1hZ1ZhbHMpO1xuXG4gICAgICBjb25zdCByZXN1bHRSZWFsID1cbiAgICAgICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAnZmxvYXQzMicsIHJlc3VsdFJlYWxEYXRhKTtcblxuICAgICAgY29uc3QgcmVzdWx0SW1hZyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5tYWtlVGVuc29ySW5mbyhyZXN1bHRTaGFwZSwgJ2Zsb2F0MzInLCByZXN1bHRJbWFnRGF0YSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBsZXgoXG4gICAgICAgICAge2lucHV0czoge3JlYWw6IHJlc3VsdFJlYWwsIGltYWc6IHJlc3VsdEltYWd9LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSk7XG5cbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGFDb21wbGV4KTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGJDb21wbGV4KTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0UmVhbCk7XG4gICAgICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdEltYWcpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoYS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICAgICAgY29uc3QgYlZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgY29uc3QgJGR0eXBlID0gZHR5cGUgfHwgYS5kdHlwZTtcblxuICAgICAgY29uc3QgW3Jlc3VsdERhdGEsIHJlc3VsdFNoYXBlXSA9XG4gICAgICAgICAgc2ltcGxlSW1wbChhLnNoYXBlLCBiLnNoYXBlLCBhVmFscywgYlZhbHMsICRkdHlwZSk7XG5cbiAgICAgIHJldHVybiBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAkZHR5cGUsIHJlc3VsdERhdGEpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgdGhlIGNvbXBsZXggdHlwZSBpbXBsZW1lbnRhdGlvbiBmb3IgYmluYXJ5IG9wcy5cbiAqIFN1cHBvcnRzIGJyb2FkY2FzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsKG9wOiBDb21wbGV4QmluYXJ5T3BlcmF0aW9uKTpcbiAgICBDb21wbGV4QmluYXJ5S2VybmVsSW1wbCB7XG4gIHJldHVybiAoYVNoYXBlOiBudW1iZXJbXSwgYlNoYXBlOiBudW1iZXJbXSwgYVJlYWxWYWxzOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgYUltYWdWYWxzOiBGbG9hdDMyQXJyYXksIGJSZWFsVmFsczogRmxvYXQzMkFycmF5LFxuICAgICAgICAgIGJJbWFnVmFsczogRmxvYXQzMkFycmF5KTogW1R5cGVkQXJyYXksIFR5cGVkQXJyYXksIG51bWJlcltdXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0U2hhcGUgPSBiYWNrZW5kX3V0aWwuYXNzZXJ0QW5kR2V0QnJvYWRjYXN0U2hhcGUoYVNoYXBlLCBiU2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVzdWx0U2hhcGUpO1xuICAgIGNvbnN0IHJlc3VsdFJhbmsgPSByZXN1bHRTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgcmVzdWx0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMocmVzdWx0U2hhcGUpO1xuXG4gICAgY29uc3QgcmVzdWx0UmVhbFZhbHMgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2Zsb2F0MzInLCByZXN1bHRTaXplKTtcbiAgICBjb25zdCByZXN1bHRJbWFnVmFscyA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZSgnZmxvYXQzMicsIHJlc3VsdFNpemUpO1xuXG4gICAgY29uc3QgYUJyb2FkY2FzdERpbXMgPSBiYWNrZW5kX3V0aWwuZ2V0QnJvYWRjYXN0RGltcyhhU2hhcGUsIHJlc3VsdFNoYXBlKTtcbiAgICBjb25zdCBiQnJvYWRjYXN0RGltcyA9IGJhY2tlbmRfdXRpbC5nZXRCcm9hZGNhc3REaW1zKGJTaGFwZSwgcmVzdWx0U2hhcGUpO1xuXG4gICAgY29uc3QgYVZhbHMgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhhUmVhbFZhbHMsIGFJbWFnVmFscyk7XG4gICAgY29uc3QgYlZhbHMgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhiUmVhbFZhbHMsIGJJbWFnVmFscyk7XG5cbiAgICBjb25zdCBhUmFuayA9IGFTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGFTaGFwZSk7XG5cbiAgICBjb25zdCBiUmFuayA9IGJTaGFwZS5sZW5ndGg7XG4gICAgY29uc3QgYlN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGJTaGFwZSk7XG5cbiAgICBpZiAoYUJyb2FkY2FzdERpbXMubGVuZ3RoICsgYkJyb2FkY2FzdERpbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJlYWxWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFJZHggPSBpICUgYVZhbHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBiSWR4ID0gaSAlIGJWYWxzLmxlbmd0aDtcblxuICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgb3AoYVZhbHNbYUlkeCAqIDJdLCBhVmFsc1thSWR4ICogMiArIDFdLCBiVmFsc1tiSWR4ICogMl0sXG4gICAgICAgICAgICAgICBiVmFsc1tiSWR4ICogMiArIDFdKTtcblxuICAgICAgICByZXN1bHRSZWFsVmFsc1tpXSA9IHJlc3VsdC5yZWFsO1xuICAgICAgICByZXN1bHRJbWFnVmFsc1tpXSA9IHJlc3VsdC5pbWFnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJlYWxWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHV0aWwuaW5kZXhUb0xvYyhpLCByZXN1bHRSYW5rLCByZXN1bHRTdHJpZGVzKTtcblxuICAgICAgICBjb25zdCBhTG9jID0gbG9jLnNsaWNlKC1hUmFuayk7XG4gICAgICAgIGFCcm9hZGNhc3REaW1zLmZvckVhY2goZCA9PiBhTG9jW2RdID0gMCk7XG4gICAgICAgIGNvbnN0IGFJbmRleCA9IHV0aWwubG9jVG9JbmRleChhTG9jLCBhUmFuaywgYVN0cmlkZXMpO1xuXG4gICAgICAgIGNvbnN0IGJMb2MgPSBsb2Muc2xpY2UoLWJSYW5rKTtcbiAgICAgICAgYkJyb2FkY2FzdERpbXMuZm9yRWFjaChkID0+IGJMb2NbZF0gPSAwKTtcbiAgICAgICAgY29uc3QgYkluZGV4ID0gdXRpbC5sb2NUb0luZGV4KGJMb2MsIGJSYW5rLCBiU3RyaWRlcyk7XG5cbiAgICAgICAgY29uc3Qgb3BSZXN1bHQgPVxuICAgICAgICAgICAgb3AoYVZhbHNbYUluZGV4ICogMl0sIGFWYWxzW2FJbmRleCAqIDIgKyAxXSwgYlZhbHNbYkluZGV4ICogMl0sXG4gICAgICAgICAgICAgICBiVmFsc1tiSW5kZXggKiAyICsgMV0pO1xuXG4gICAgICAgIHJlc3VsdFJlYWxWYWxzW2ldID0gb3BSZXN1bHQucmVhbDtcbiAgICAgICAgcmVzdWx0SW1hZ1ZhbHNbaV0gPSBvcFJlc3VsdC5pbWFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3Jlc3VsdFJlYWxWYWxzLCByZXN1bHRJbWFnVmFscywgcmVzdWx0U2hhcGVdO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Add } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const addImpl = createSimpleBinaryKernelImpl(((a, b) => a + b));\nexport const addComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return { real: aReal + bReal, imag: aImag + bImag };\n}));\nexport const add = binaryKernelFunc(Add, addImpl, addComplexImpl);\nexport const addConfig = {\n kernelName: Add,\n backendName: 'cpu',\n kernelFunc: add\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFUixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBZGQsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgYWRkSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICsgYikpO1xuZXhwb3J0IGNvbnN0IGFkZENvbXBsZXhJbXBsID1cbiAgICBjcmVhdGVDb21wbGV4QmluYXJ5S2VybmVsSW1wbCgoKGFSZWFsLCBhSW1hZywgYlJlYWwsIGJJbWFnKSA9PiB7XG4gICAgICByZXR1cm4ge3JlYWw6IGFSZWFsICsgYlJlYWwsIGltYWc6IGFJbWFnICsgYkltYWd9O1xuICAgIH0pKTtcblxuZXhwb3J0IGNvbnN0IGFkZCA9IGJpbmFyeUtlcm5lbEZ1bmMoQWRkLCBhZGRJbXBsLCBhZGRDb21wbGV4SW1wbCk7XG5cbmV4cG9ydCBjb25zdCBhZGRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQWRkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGFkZFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, util } from '@tensorflow/tfjs-core';\nexport function bincountImpl(xVals, weightsVals, weightsDtype, weightsShape, size) {\n const weightsSize = util.sizeFromShape(weightsShape);\n const outVals = util.makeZerosTypedArray(size, weightsDtype);\n for (let i = 0; i < xVals.length; i++) {\n const value = xVals[i];\n if (value < 0) {\n throw new Error('Input x must be non-negative!');\n }\n if (value >= size) {\n continue;\n }\n if (weightsSize > 0) {\n outVals[value] += weightsVals[i];\n }\n else {\n outVals[value] += 1;\n }\n }\n return outVals;\n}\nexport function bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput = false) {\n const numRows = xBuf.shape[0];\n const numCols = xBuf.shape[1];\n const outBuf = buffer([numRows, size], weightsBuf.dtype);\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numCols; j++) {\n const value = xBuf.get(i, j);\n if (value < 0) {\n throw new Error('Input x must be non-negative!');\n }\n if (value >= size) {\n continue;\n }\n if (binaryOutput) {\n outBuf.set(1, i, value);\n }\n else {\n if (weightsBuf.size > 0) {\n outBuf.set(outBuf.get(i, value) + weightsBuf.get(i, j), i, value);\n }\n else {\n outBuf.set(outBuf.get(i, value) + 1, i, value);\n }\n }\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluY291bnRfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQmluY291bnRfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUE0QyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RixNQUFNLFVBQVUsWUFBWSxDQUN4QixLQUFpQixFQUFFLFdBQXVCLEVBQUUsWUFBc0IsRUFDbEUsWUFBc0IsRUFBRSxJQUFZO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxZQUFZLENBQWUsQ0FBQztJQUUzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLFNBQVM7U0FDVjtRQUVELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JCO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUM5QixJQUFxQixFQUFFLFVBQTJCLEVBQUUsSUFBWSxFQUNoRSxZQUFZLEdBQUcsS0FBSztJQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQzthQUNsRDtZQUVELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsU0FBUzthQUNWO1lBRUQsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbkU7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNoRDthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sTUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgRGF0YVR5cGUsIFJhbmssIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmNvdW50SW1wbChcbiAgICB4VmFsczogVHlwZWRBcnJheSwgd2VpZ2h0c1ZhbHM6IFR5cGVkQXJyYXksIHdlaWdodHNEdHlwZTogRGF0YVR5cGUsXG4gICAgd2VpZ2h0c1NoYXBlOiBudW1iZXJbXSwgc2l6ZTogbnVtYmVyKTogVHlwZWRBcnJheSB7XG4gIGNvbnN0IHdlaWdodHNTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHdlaWdodHNTaGFwZSk7XG4gIGNvbnN0IG91dFZhbHMgPSB1dGlsLm1ha2VaZXJvc1R5cGVkQXJyYXkoc2l6ZSwgd2VpZ2h0c0R0eXBlKSBhcyBUeXBlZEFycmF5O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZSA9IHhWYWxzW2ldO1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgeCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSEnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPj0gc2l6ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHdlaWdodHNTaXplID4gMCkge1xuICAgICAgb3V0VmFsc1t2YWx1ZV0gKz0gd2VpZ2h0c1ZhbHNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFZhbHNbdmFsdWVdICs9IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFZhbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5jb3VudFJlZHVjZUltcGw8UiBleHRlbmRzIFJhbms+KFxuICAgIHhCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgd2VpZ2h0c0J1ZjogVGVuc29yQnVmZmVyPFI+LCBzaXplOiBudW1iZXIsXG4gICAgYmluYXJ5T3V0cHV0ID0gZmFsc2UpOiBUZW5zb3JCdWZmZXI8Uj4ge1xuICBjb25zdCBudW1Sb3dzID0geEJ1Zi5zaGFwZVswXTtcbiAgY29uc3QgbnVtQ29scyA9IHhCdWYuc2hhcGVbMV07XG5cbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKFtudW1Sb3dzLCBzaXplXSwgd2VpZ2h0c0J1Zi5kdHlwZSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbHM7IGorKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB4QnVmLmdldChpLCBqKTtcbiAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCB4IG11c3QgYmUgbm9uLW5lZ2F0aXZlIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPj0gc2l6ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJpbmFyeU91dHB1dCkge1xuICAgICAgICBvdXRCdWYuc2V0KDEsIGksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh3ZWlnaHRzQnVmLnNpemUgPiAwKSB7XG4gICAgICAgICAgb3V0QnVmLnNldChvdXRCdWYuZ2V0KGksIHZhbHVlKSArIHdlaWdodHNCdWYuZ2V0KGksIGopLCBpLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0QnVmLnNldChvdXRCdWYuZ2V0KGksIHZhbHVlKSArIDEsIGksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRCdWYgYXMgVGVuc29yQnVmZmVyPFI+O1xufVxuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BitwiseAnd } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const bitwiseAndImpl = createSimpleBinaryKernelImpl(((a, b) => a & b));\nexport const bitwiseAnd = binaryKernelFunc(BitwiseAnd, bitwiseAndImpl);\nexport const bitwiseAndConfig = {\n kernelName: BitwiseAnd,\n backendName: 'cpu',\n kernelFunc: bitwiseAnd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0d2lzZUFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQml0d2lzZUFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFL0QsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFVBQVU7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCaXR3aXNlQW5kLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgYml0d2lzZUFuZEltcGwgPVxuICAgIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSAmIGIpKTtcblxuZXhwb3J0IGNvbnN0IGJpdHdpc2VBbmQgPSBiaW5hcnlLZXJuZWxGdW5jKEJpdHdpc2VBbmQsIGJpdHdpc2VBbmRJbXBsKTtcblxuZXhwb3J0IGNvbnN0IGJpdHdpc2VBbmRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQml0d2lzZUFuZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBiaXR3aXNlQW5kXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * Template that creates implementation for unary op.\n */\nexport function createSimpleUnaryImpl(op) {\n return (values, dtype, attrs) => {\n const newValues = util.getArrayFromDType(dtype, values.length);\n for (let i = 0; i < values.length; ++i) {\n newValues[i] = op(values[i], attrs);\n }\n return newValues;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL3V0aWxzL3VuYXJ5X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNDLEVBQThCO0lBRWxFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzlCLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHt1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge1NpbXBsZVVuYXJ5SW1wbCwgU2ltcGxlVW5hcnlPcGVyYXRpb259IGZyb20gJy4vdW5hcnlfdHlwZXMnO1xuXG4vKipcbiAqIFRlbXBsYXRlIHRoYXQgY3JlYXRlcyBpbXBsZW1lbnRhdGlvbiBmb3IgdW5hcnkgb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW1wbGVVbmFyeUltcGw8SSBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcixcbiAgTyBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcj4ob3A6IFNpbXBsZVVuYXJ5T3BlcmF0aW9uPEksIE8+KTpcbiAgICBTaW1wbGVVbmFyeUltcGw8SSwgTz4ge1xuICByZXR1cm4gKHZhbHVlcywgZHR5cGUsIGF0dHJzKSA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWVzID1cbiAgICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShkdHlwZSwgdmFsdWVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIG5ld1ZhbHVlc1tpXSA9IG9wKHZhbHVlc1tpXSwgYXR0cnMpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3VmFsdWVzO1xuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { createSimpleUnaryImpl } from './unary_impl';\n/**\n * Template that creates a `KernelFunc` for unary ops.\n * @param name Kernel name.\n * @param op A `SimpleUnaryOperation` for the kernel.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the input. This is mainly used in certain\n * kernels that return bool type, such as isFinite, isInf, etc.\n */\nexport function unaryKernelFunc(name, op, dtype) {\n const impl = createSimpleUnaryImpl(op);\n return unaryKernelFuncFromImpl(name, impl, dtype);\n}\n/**\n * Template that creates a `KernelFunc` for unary ops from the given\n * `SimpleUnaryImpl`..\n * @param name Kernel name.\n * @param unaryImpl A `SimpleUnaryImpl` that implements the op.\n * @param dtype Optional. If set, the result has this dtype. Otherwise, the\n * result has the same dtype as the input. This is mainly used in certain\n * kernels that return bool type, such as isFinite, isInf, etc.\n */\nexport function unaryKernelFuncFromImpl(name, unaryImpl, dtype) {\n return ({ inputs, attrs, backend }) => {\n const { x } = inputs;\n assertNotComplex(x, name);\n const cpuBackend = backend;\n const values = cpuBackend.data.get(x.dataId).values;\n let decoded;\n if (x.dtype === 'string') {\n if (!Array.isArray(values)) {\n throw new Error('String tensor\\'s value was not an instance of Array');\n }\n decoded = backend_util.fromUint8ToStringArray(values);\n }\n else {\n decoded = values;\n }\n const $dtype = dtype || x.dtype;\n const newValues = unaryImpl(decoded, $dtype, attrs);\n return cpuBackend.makeTensorInfo(x.shape, $dtype, newValues);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy91dGlscy91bmFyeV91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUF1QyxNQUFNLHVCQUF1QixDQUFDO0FBR3pGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFJbkQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBRTdCLElBQVksRUFBRSxFQUE4QixFQUM1QyxLQUFzQjtJQUV0QixNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBTyxFQUFFLENBQUMsQ0FBQztJQUU3QyxPQUFPLHVCQUF1QixDQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUVyQyxJQUFZLEVBQUUsU0FBZ0MsRUFDOUMsS0FBc0I7SUFFdEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFxQixDQUFDO1FBQ2xDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQixNQUFNLFVBQVUsR0FBRyxPQUF5QixDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEQsSUFBSSxPQUFxQixDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUN4RTtZQUNELE9BQU8sR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUN0QyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxPQUFPLEdBQUcsTUFBaUMsQ0FBQztTQUM3QztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBdUIsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERhdGFUeXBlRm9yLCBLZXJuZWxGdW5jLCBVbmFyeUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi91bmFyeV9pbXBsJztcblxuaW1wb3J0IHtTaW1wbGVVbmFyeUltcGwsIFNpbXBsZVVuYXJ5T3BlcmF0aW9ufSBmcm9tICcuL3VuYXJ5X3R5cGVzJztcblxuLyoqXG4gKiBUZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBgS2VybmVsRnVuY2AgZm9yIHVuYXJ5IG9wcy5cbiAqIEBwYXJhbSBuYW1lIEtlcm5lbCBuYW1lLlxuICogQHBhcmFtIG9wIEEgYFNpbXBsZVVuYXJ5T3BlcmF0aW9uYCBmb3IgdGhlIGtlcm5lbC5cbiAqIEBwYXJhbSBkdHlwZSBPcHRpb25hbC4gSWYgc2V0LCB0aGUgcmVzdWx0IGhhcyB0aGlzIGR0eXBlLiBPdGhlcndpc2UsIHRoZVxuICogICAgIHJlc3VsdCBoYXMgdGhlIHNhbWUgZHR5cGUgYXMgdGhlIGlucHV0LiBUaGlzIGlzIG1haW5seSB1c2VkIGluIGNlcnRhaW5cbiAqICAgICBrZXJuZWxzIHRoYXQgcmV0dXJuIGJvb2wgdHlwZSwgc3VjaCBhcyBpc0Zpbml0ZSwgaXNJbmYsIGV0Yy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuYXJ5S2VybmVsRnVuYzxJIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgbnVtYmVyIHwgc3RyaW5nID0gbnVtYmVyPihcbiAgbmFtZTogc3RyaW5nLCBvcDogU2ltcGxlVW5hcnlPcGVyYXRpb248SSwgTz4sXG4gIGR0eXBlPzogRGF0YVR5cGVGb3I8Tz4pOiBLZXJuZWxGdW5jIHtcblxuICBjb25zdCBpbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsPEksIE8+KG9wKTtcblxuICByZXR1cm4gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGw8SSwgTz4obmFtZSwgaW1wbCwgZHR5cGUpO1xufVxuXG4vKipcbiAqIFRlbXBsYXRlIHRoYXQgY3JlYXRlcyBhIGBLZXJuZWxGdW5jYCBmb3IgdW5hcnkgb3BzIGZyb20gdGhlIGdpdmVuXG4gKiBgU2ltcGxlVW5hcnlJbXBsYC4uXG4gKiBAcGFyYW0gbmFtZSBLZXJuZWwgbmFtZS5cbiAqIEBwYXJhbSB1bmFyeUltcGwgQSBgU2ltcGxlVW5hcnlJbXBsYCB0aGF0IGltcGxlbWVudHMgdGhlIG9wLlxuICogQHBhcmFtIGR0eXBlIE9wdGlvbmFsLiBJZiBzZXQsIHRoZSByZXN1bHQgaGFzIHRoaXMgZHR5cGUuIE90aGVyd2lzZSwgdGhlXG4gKiAgICAgcmVzdWx0IGhhcyB0aGUgc2FtZSBkdHlwZSBhcyB0aGUgaW5wdXQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gY2VydGFpblxuICogICAgIGtlcm5lbHMgdGhhdCByZXR1cm4gYm9vbCB0eXBlLCBzdWNoIGFzIGlzRmluaXRlLCBpc0luZiwgZXRjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGw8SSBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcixcbiAgTyBleHRlbmRzIG51bWJlciB8IHN0cmluZyA9IG51bWJlcj4oXG4gIG5hbWU6IHN0cmluZywgdW5hcnlJbXBsOiBTaW1wbGVVbmFyeUltcGw8SSwgTz4sXG4gIGR0eXBlPzogRGF0YVR5cGVGb3I8Tz4pOiBLZXJuZWxGdW5jIHtcblxuICByZXR1cm4gKHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHt4fSA9IGlucHV0cyBhcyBVbmFyeUlucHV0cztcbiAgICBhc3NlcnROb3RDb21wbGV4KHgsIG5hbWUpO1xuXG4gICAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRDUFU7XG4gICAgY29uc3QgdmFsdWVzID0gY3B1QmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzO1xuICAgIGxldCBkZWNvZGVkOiBBcnJheUxpa2U8ST47XG4gICAgaWYgKHguZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyB0ZW5zb3JcXCdzIHZhbHVlIHdhcyBub3QgYW4gaW5zdGFuY2Ugb2YgQXJyYXknKTtcbiAgICAgIH1cbiAgICAgIGRlY29kZWQgPSBiYWNrZW5kX3V0aWwuZnJvbVVpbnQ4VG9TdHJpbmdBcnJheSh2YWx1ZXMpIGFzIHVua25vd24gYXNcbiAgICAgICAgQXJyYXlMaWtlPEk+O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGVkID0gdmFsdWVzIGFzIHVua25vd24gYXMgQXJyYXlMaWtlPEk+O1xuICAgIH1cblxuICAgIGNvbnN0ICRkdHlwZSA9IGR0eXBlIHx8IHguZHR5cGUgYXMgRGF0YVR5cGVGb3I8Tz47XG4gICAgY29uc3QgbmV3VmFsdWVzID0gdW5hcnlJbXBsKGRlY29kZWQsICRkdHlwZSwgYXR0cnMpO1xuICAgIHJldHVybiBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHguc2hhcGUsICRkdHlwZSwgbmV3VmFsdWVzKTtcbiAgfTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Ceil } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const ceilImpl = createSimpleUnaryImpl((xi) => Math.ceil(xi));\nexport const ceil = unaryKernelFuncFromImpl(Ceil, ceilImpl);\nexport const ceilConfig = {\n kernelName: Ceil,\n backendName: 'cpu',\n kernelFunc: ceil,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ2VpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NlaWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgY2VpbEltcGwgPSBjcmVhdGVTaW1wbGVVbmFyeUltcGwoKHhpKSA9PiBNYXRoLmNlaWwoeGkpKTtcbmV4cG9ydCBjb25zdCBjZWlsID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoQ2VpbCwgY2VpbEltcGwpO1xuXG5leHBvcnQgY29uc3QgY2VpbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDZWlsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNlaWwsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function concatImpl(inputs, outShape, dtype, simplyConcat) {\n const outVals = util.getArrayFromDType(dtype, util.sizeFromShape(outShape));\n if (simplyConcat && dtype !== 'string') {\n // Use built-in TypedArray.set() method for speed.\n let offset = 0;\n inputs.forEach(input => {\n const size = util.sizeFromShape(input.shape);\n outVals.set(input.vals, offset);\n offset += size;\n });\n }\n else {\n let colOffset = 0;\n inputs.forEach(input => {\n const decodedData = dtype === 'string' ?\n backend_util.fromUint8ToStringArray(input.vals) :\n input.vals;\n let tIdx = 0;\n for (let row = 0; row < input.shape[0]; ++row) {\n const resIdx = row * outShape[1] + colOffset;\n for (let col = 0; col < input.shape[1]; ++col) {\n outVals[resIdx + col] = decodedData[tIdx++];\n }\n }\n colOffset += input.shape[1];\n });\n }\n return outVals;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0NvbmNhdF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXVDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlGLE1BQU0sVUFBVSxVQUFVLENBQ3RCLE1BQXFELEVBQUUsUUFBa0IsRUFDekUsS0FBZSxFQUFFLFlBQXFCO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTVFLElBQUksWUFBWSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUMsT0FBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLFdBQVcsR0FBRyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsSUFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLEtBQUssQ0FBQyxJQUFrQixDQUFDO1lBRTdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztZQUViLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDN0MsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7b0JBQzdDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQzdDO2FBQ0Y7WUFFRCxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhY2tlbmRWYWx1ZXMsIERhdGFUeXBlLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0SW1wbChcbiAgICBpbnB1dHM6IEFycmF5PHt2YWxzOiBCYWNrZW5kVmFsdWVzLCBzaGFwZTogbnVtYmVyW119Piwgb3V0U2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSwgc2ltcGx5Q29uY2F0OiBib29sZWFuKTogVHlwZWRBcnJheXxzdHJpbmdbXSB7XG4gIGNvbnN0IG91dFZhbHMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKGR0eXBlLCB1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpKTtcblxuICBpZiAoc2ltcGx5Q29uY2F0ICYmIGR0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiBUeXBlZEFycmF5LnNldCgpIG1ldGhvZCBmb3Igc3BlZWQuXG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSk7XG5cbiAgICAgIChvdXRWYWxzIGFzIFR5cGVkQXJyYXkpLnNldChpbnB1dC52YWxzIGFzIFR5cGVkQXJyYXksIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgY29sT2Zmc2V0ID0gMDtcblxuICAgIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gZHR5cGUgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZnJvbVVpbnQ4VG9TdHJpbmdBcnJheShpbnB1dC52YWxzIGFzIFVpbnQ4QXJyYXlbXSkgOlxuICAgICAgICAgIGlucHV0LnZhbHMgYXMgVHlwZWRBcnJheTtcblxuICAgICAgbGV0IHRJZHggPSAwO1xuXG4gICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBpbnB1dC5zaGFwZVswXTsgKytyb3cpIHtcbiAgICAgICAgY29uc3QgcmVzSWR4ID0gcm93ICogb3V0U2hhcGVbMV0gKyBjb2xPZmZzZXQ7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGlucHV0LnNoYXBlWzFdOyArK2NvbCkge1xuICAgICAgICAgIG91dFZhbHNbcmVzSWR4ICsgY29sXSA9IGRlY29kZWREYXRhW3RJZHgrK107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29sT2Zmc2V0ICs9IGlucHV0LnNoYXBlWzFdO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbHM7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Equal } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const equalImpl = createSimpleBinaryKernelImpl((a, b) => (a === b) ? 1 : 0);\nexport const equal = binaryKernelFunc(Equal, equalImpl, null /* complexImpl */, 'bool');\nexport const equalConfig = {\n kernelName: Equal,\n backendName: 'cpu',\n kernelFunc: equal\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0VxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLDRCQUE0QixDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFcXVhbCwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGVxdWFsSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhID09PSBiKSA/IDEgOiAwKTtcbmV4cG9ydCBjb25zdCBlcXVhbCA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhFcXVhbCwgZXF1YWxJbXBsLCBudWxsIC8qIGNvbXBsZXhJbXBsICovLCAnYm9vbCcpO1xuXG5leHBvcnQgY29uc3QgZXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZXF1YWxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Exp } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const expImpl = createSimpleUnaryImpl((xi) => Math.exp(xi));\nexport const exp = unaryKernelFuncFromImpl(Exp, expImpl, 'float32');\nexport const expConfig = {\n kernelName: Exp,\n backendName: 'cpu',\n kernelFunc: exp,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9FeHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFeHAsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhwSW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IE1hdGguZXhwKHhpKSk7XG5leHBvcnQgY29uc3QgZXhwID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRXhwLCBleHBJbXBsLCAnZmxvYXQzMicpO1xuXG5leHBvcnQgY29uc3QgZXhwQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEV4cCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBleHAsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Expm1 } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const expm1Impl = createSimpleUnaryImpl((xi) => Math.expm1(xi));\nexport const expm1 = unaryKernelFuncFromImpl(Expm1, expm1Impl);\nexport const expm1Config = {\n kernelName: Expm1,\n backendName: 'cpu',\n kernelFunc: expm1,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0V4cG0xLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RXhwbTEsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXhwbTFJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5leHBtMSh4aSkpO1xuZXhwb3J0IGNvbnN0IGV4cG0xID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRXhwbTEsIGV4cG0xSW1wbCk7XG5cbmV4cG9ydCBjb25zdCBleHBtMUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFeHBtMSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBleHBtMSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Floor } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const floorImpl = createSimpleUnaryImpl((xi) => Math.floor(xi));\nexport const floor = unaryKernelFuncFromImpl(Floor, floorImpl);\nexport const floorConfig = {\n kernelName: Floor,\n backendName: 'cpu',\n kernelFunc: floor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Zsb29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Rmxvb3IsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVVbmFyeUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X2ltcGwnO1xuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZmxvb3JJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5mbG9vcih4aSkpO1xuZXhwb3J0IGNvbnN0IGZsb29yID0gdW5hcnlLZXJuZWxGdW5jRnJvbUltcGwoRmxvb3IsIGZsb29ySW1wbCk7XG5cbmV4cG9ydCBjb25zdCBmbG9vckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbG9vcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBmbG9vcixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FloorDiv } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const floorDivImpl = createSimpleBinaryKernelImpl((a, b) => Math.floor(a / b));\nexport const floorDiv = binaryKernelFunc(FloorDiv, floorDivImpl, null /* complexImpl */, 'int32');\nexport const floorDivConfig = {\n kernelName: FloorDiv,\n backendName: 'cpu',\n kernelFunc: floorDiv\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3JEaXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Zsb29yRGl2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLDRCQUE0QixDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQ2pCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGbG9vckRpdiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGZsb29yRGl2SW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IE1hdGguZmxvb3IoYSAvIGIpKTtcbmV4cG9ydCBjb25zdCBmbG9vckRpdiA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhGbG9vckRpdiwgZmxvb3JEaXZJbXBsLCBudWxsIC8qIGNvbXBsZXhJbXBsICovLCAnaW50MzInKTtcblxuZXhwb3J0IGNvbnN0IGZsb29yRGl2Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZsb29yRGl2LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGZsb29yRGl2XG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function gatherNdImpl(indicesData, paramsBuf, dtype, numSlices, sliceRank, sliceSize, strides, paramsShape, paramsSize) {\n const outBuf = buffer([numSlices, sliceSize], dtype);\n for (let i = 0; i < numSlices; i++) {\n const index = [];\n let flattenIndex = 0;\n for (let j = 0; j < sliceRank; j++) {\n const dim = indicesData[i * sliceRank + j];\n flattenIndex += dim * strides[j];\n index.push(dim);\n }\n if (flattenIndex < 0 || flattenIndex >= paramsSize / sliceSize) {\n throw new Error(`Invalid indices: ${index} does not index into ${paramsShape}`);\n }\n for (let k = 0; k < sliceSize; k++) {\n outBuf.values[i * sliceSize + k] =\n paramsBuf.get(...paramsBuf.indexToLoc(flattenIndex * sliceSize + k));\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyTmRfSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR2F0aGVyTmRfSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUEyQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE1BQU0sVUFBVSxZQUFZLENBQ3hCLFdBQXVCLEVBQUUsU0FBMEIsRUFBRSxLQUFlLEVBQ3BFLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLE9BQWlCLEVBQzFFLFdBQXFCLEVBQUUsVUFBa0I7SUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXJELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLFlBQVksSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakI7UUFDRCxJQUFJLFlBQVksR0FBRyxDQUFDLElBQUksWUFBWSxJQUFJLFVBQVUsR0FBRyxTQUFTLEVBQUU7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FDWCxvQkFBb0IsS0FBSyx3QkFBd0IsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFFO0tBQ0Y7SUFFRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtidWZmZXIsIERhdGFUeXBlLCBSYW5rLCBUZW5zb3JCdWZmZXIsIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJOZEltcGw8UiBleHRlbmRzIFJhbms+KFxuICAgIGluZGljZXNEYXRhOiBUeXBlZEFycmF5LCBwYXJhbXNCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgZHR5cGU6IERhdGFUeXBlLFxuICAgIG51bVNsaWNlczogbnVtYmVyLCBzbGljZVJhbms6IG51bWJlciwgc2xpY2VTaXplOiBudW1iZXIsIHN0cmlkZXM6IG51bWJlcltdLFxuICAgIHBhcmFtc1NoYXBlOiBudW1iZXJbXSwgcGFyYW1zU2l6ZTogbnVtYmVyKTogVGVuc29yQnVmZmVyPFI+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKFtudW1TbGljZXMsIHNsaWNlU2l6ZV0sIGR0eXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVNsaWNlczsgaSsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBbXTtcbiAgICBsZXQgZmxhdHRlbkluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNsaWNlUmFuazsgaisrKSB7XG4gICAgICBjb25zdCBkaW0gPSBpbmRpY2VzRGF0YVtpICogc2xpY2VSYW5rICsgal07XG4gICAgICBmbGF0dGVuSW5kZXggKz0gZGltICogc3RyaWRlc1tqXTtcbiAgICAgIGluZGV4LnB1c2goZGltKTtcbiAgICB9XG4gICAgaWYgKGZsYXR0ZW5JbmRleCA8IDAgfHwgZmxhdHRlbkluZGV4ID49IHBhcmFtc1NpemUgLyBzbGljZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBpbmRpY2VzOiAke2luZGV4fSBkb2VzIG5vdCBpbmRleCBpbnRvICR7cGFyYW1zU2hhcGV9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBzbGljZVNpemU7IGsrKykge1xuICAgICAgb3V0QnVmLnZhbHVlc1tpICogc2xpY2VTaXplICsga10gPVxuICAgICAgICAgIHBhcmFtc0J1Zi5nZXQoLi4ucGFyYW1zQnVmLmluZGV4VG9Mb2MoZmxhdHRlbkluZGV4ICogc2xpY2VTaXplICsgaykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRCdWYgYXMgVGVuc29yQnVmZmVyPFI+O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function gatherV2Impl(xBuf, indicesBuf, flattenOutputShape) {\n const outBuf = buffer(flattenOutputShape, xBuf.dtype);\n for (let i = 0; i < outBuf.size; ++i) {\n const newLoc = outBuf.indexToLoc(i);\n const originalLoc = newLoc.slice();\n const batchIdx = originalLoc[0];\n const indicesIdx = originalLoc[2];\n const indicesIndex = indicesBuf.locToIndex([batchIdx, indicesIdx]);\n originalLoc[2] = indicesBuf.values[indicesIndex];\n const originalIndex = xBuf.locToIndex(originalLoc);\n if (0 <= originalIndex && originalIndex < xBuf.values.length) {\n outBuf.values[i] = xBuf.values[originalIndex];\n } // Else, index is out of bounds, so leave the default zero val in outBuf.\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyVjJfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR2F0aGVyVjJfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUErQixNQUFNLHVCQUF1QixDQUFDO0FBRTNFLE1BQU0sVUFBVSxZQUFZLENBQ3hCLElBQXdCLEVBQUUsVUFBOEIsRUFDeEQsa0JBQTRCO0lBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBYSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFXLENBQUM7UUFFM0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsSUFBSSxhQUFhLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvQyxDQUFDLHlFQUF5RTtLQUM1RTtJQUVELE9BQU8sTUFBNEIsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgRGF0YVR5cGUsIFJhbmssIFRlbnNvckJ1ZmZlcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdhdGhlclYySW1wbDxSIGV4dGVuZHMgUmFuaywgRCBleHRlbmRzIERhdGFUeXBlPihcbiAgICB4QnVmOiBUZW5zb3JCdWZmZXI8UiwgRD4sIGluZGljZXNCdWY6IFRlbnNvckJ1ZmZlcjxSLCBEPixcbiAgICBmbGF0dGVuT3V0cHV0U2hhcGU6IG51bWJlcltdKTogVGVuc29yQnVmZmVyPFIsIEQ+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKGZsYXR0ZW5PdXRwdXRTaGFwZSwgeEJ1Zi5kdHlwZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0QnVmLnNpemU7ICsraSkge1xuICAgIGNvbnN0IG5ld0xvYyA9IG91dEJ1Zi5pbmRleFRvTG9jKGkpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxMb2M6IG51bWJlcltdID0gbmV3TG9jLnNsaWNlKCk7XG4gICAgY29uc3QgYmF0Y2hJZHggPSBvcmlnaW5hbExvY1swXTtcbiAgICBjb25zdCBpbmRpY2VzSWR4ID0gb3JpZ2luYWxMb2NbMl07XG4gICAgY29uc3QgaW5kaWNlc0luZGV4ID0gaW5kaWNlc0J1Zi5sb2NUb0luZGV4KFtiYXRjaElkeCwgaW5kaWNlc0lkeF0pO1xuICAgIG9yaWdpbmFsTG9jWzJdID0gaW5kaWNlc0J1Zi52YWx1ZXNbaW5kaWNlc0luZGV4XSBhcyBudW1iZXI7XG5cbiAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0geEJ1Zi5sb2NUb0luZGV4KG9yaWdpbmFsTG9jKTtcblxuICAgIGlmICgwIDw9IG9yaWdpbmFsSW5kZXggJiYgb3JpZ2luYWxJbmRleCA8IHhCdWYudmFsdWVzLmxlbmd0aCkge1xuICAgICAgb3V0QnVmLnZhbHVlc1tpXSA9IHhCdWYudmFsdWVzW29yaWdpbmFsSW5kZXhdO1xuICAgIH0gLy8gRWxzZSwgaW5kZXggaXMgb3V0IG9mIGJvdW5kcywgc28gbGVhdmUgdGhlIGRlZmF1bHQgemVybyB2YWwgaW4gb3V0QnVmLlxuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8UiwgRD47XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Greater } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const greaterImpl = createSimpleBinaryKernelImpl((a, b) => (a > b) ? 1 : 0);\nexport const greater = binaryKernelFunc(Greater, greaterImpl, null /* complexImpl */, 'bool');\nexport const greaterConfig = {\n kernelName: Greater,\n backendName: 'cpu',\n kernelFunc: greater\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvR3JlYXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsT0FBTztDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0dyZWF0ZXIsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVySW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IChhID4gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgZ3JlYXRlciA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhHcmVhdGVyLCBncmVhdGVySW1wbCwgbnVsbCAvKiBjb21wbGV4SW1wbCAqLywgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGdyZWF0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR3JlYXRlcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBncmVhdGVyXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { GreaterEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const greaterEqualImpl = createSimpleBinaryKernelImpl((a, b) => (a >= b) ? 1 : 0);\nexport const greaterEqual = binaryKernelFunc(GreaterEqual, greaterEqualImpl, null /* complexImpl */, 'bool');\nexport const greaterEqualConfig = {\n kernelName: GreaterEqual,\n backendName: 'cpu',\n kernelFunc: greaterEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlckVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9HcmVhdGVyRXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FDeEMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFlBQVk7Q0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtHcmVhdGVyRXF1YWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyRXF1YWxJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPj0gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgZ3JlYXRlckVxdWFsID0gYmluYXJ5S2VybmVsRnVuYyhcbiAgICBHcmVhdGVyRXF1YWwsIGdyZWF0ZXJFcXVhbEltcGwsIG51bGwgLyogY29tcGxleEltcGwgKi8sICdib29sJyk7XG5cbmV4cG9ydCBjb25zdCBncmVhdGVyRXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR3JlYXRlckVxdWFsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGdyZWF0ZXJFcXVhbFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Less } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const lessImpl = createSimpleBinaryKernelImpl((a, b) => (a < b) ? 1 : 0);\nexport const less = binaryKernelFunc(Less, lessImpl, null /* complexImpl */, 'bool');\nexport const lessConfig = {\n kernelName: Less,\n backendName: 'cpu',\n kernelFunc: less\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTGVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUNqQiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FDYixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMZXNzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGxlc3NJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPCBiKSA/IDEgOiAwKTtcbmV4cG9ydCBjb25zdCBsZXNzID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKExlc3MsIGxlc3NJbXBsLCBudWxsIC8qIGNvbXBsZXhJbXBsICovLCAnYm9vbCcpO1xuXG5leHBvcnQgY29uc3QgbGVzc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMZXNzLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGxlc3Ncbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LessEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const lessEqualImpl = createSimpleBinaryKernelImpl((a, b) => (a <= b) ? 1 : 0);\nexport const lessEqual = binaryKernelFunc(LessEqual, lessEqualImpl, null /* complexImpl */, 'bool');\nexport const lessEqualConfig = {\n kernelName: LessEqual,\n backendName: 'cpu',\n kernelFunc: lessEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzc0VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9MZXNzRXF1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRS9FLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFNBQVM7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIExlc3NFcXVhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsZXNzRXF1YWxJbXBsID1cbiAgICBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gKGEgPD0gYikgPyAxIDogMCk7XG5leHBvcnQgY29uc3QgbGVzc0VxdWFsID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKExlc3NFcXVhbCwgbGVzc0VxdWFsSW1wbCwgbnVsbCAvKiBjb21wbGV4SW1wbCAqLywgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGxlc3NFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMZXNzRXF1YWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbGVzc0VxdWFsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function linSpaceImpl(start, stop, num) {\n const step = (stop - start) / (num - 1);\n const values = util.makeZerosTypedArray(num, 'float32');\n values[0] = start;\n for (let i = 1; i < values.length; i++) {\n values[i] = values[i - 1] + step;\n }\n return values;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluU3BhY2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTGluU3BhY2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxVQUFVLFlBQVksQ0FDeEIsS0FBYSxFQUFFLElBQVksRUFBRSxHQUFXO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDbEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1R5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5TcGFjZUltcGwoXG4gICAgc3RhcnQ6IG51bWJlciwgc3RvcDogbnVtYmVyLCBudW06IG51bWJlcik6IFR5cGVkQXJyYXkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyAobnVtIC0gMSk7XG5cbiAgY29uc3QgdmFsdWVzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KG51bSwgJ2Zsb2F0MzInKTtcbiAgdmFsdWVzWzBdID0gc3RhcnQ7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWVzW2ldID0gdmFsdWVzW2kgLSAxXSArIHN0ZXA7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const logImpl = createSimpleUnaryImpl((xi) => Math.log(xi));\nexport const log = unaryKernelFuncFromImpl(Log, logImpl);\nexport const logConfig = {\n kernelName: Log,\n backendName: 'cpu',\n kernelFunc: log,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Mb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUFHO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9nfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfaW1wbCc7XG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY0Zyb21JbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsb2dJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gTWF0aC5sb2coeGkpKTtcbmV4cG9ydCBjb25zdCBsb2cgPSB1bmFyeUtlcm5lbEZ1bmNGcm9tSW1wbChMb2csIGxvZ0ltcGwpO1xuXG5leHBvcnQgY29uc3QgbG9nQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExvZyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBsb2csXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function maxImpl(aVals, reduceSize, outShape, dtype) {\n const vals = util.getTypedArrayFromDType(dtype, util.sizeFromShape(outShape));\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let max = aVals[offset];\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n if (Number.isNaN(value) ||\n value > max) { // comparison with NaN always return false\n max = value;\n }\n }\n vals[i] = max;\n }\n return vals;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4X2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL01heF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBd0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEYsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsS0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWtCLEVBQ3pELEtBQWU7SUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUNwQyxLQUF3QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFHLDBDQUEwQztnQkFDNUQsR0FBRyxHQUFHLEtBQUssQ0FBQzthQUNiO1NBQ0Y7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1heEltcGwoXG4gICAgYVZhbHM6IFR5cGVkQXJyYXksIHJlZHVjZVNpemU6IG51bWJlciwgb3V0U2hhcGU6IG51bWJlcltdLFxuICAgIGR0eXBlOiBEYXRhVHlwZSk6IFR5cGVkQXJyYXkge1xuICBjb25zdCB2YWxzID0gdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKFxuICAgICAgZHR5cGUgYXMgTnVtZXJpY0RhdGFUeXBlLCB1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogcmVkdWNlU2l6ZTtcbiAgICBsZXQgbWF4ID0gYVZhbHNbb2Zmc2V0XTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlZHVjZVNpemU7ICsraikge1xuICAgICAgY29uc3QgdmFsdWUgPSBhVmFsc1tvZmZzZXQgKyBqXTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpIHx8XG4gICAgICAgICAgdmFsdWUgPiBtYXgpIHsgIC8vIGNvbXBhcmlzb24gd2l0aCBOYU4gYWx3YXlzIHJldHVybiBmYWxzZVxuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsc1tpXSA9IG1heDtcbiAgfVxuICByZXR1cm4gdmFscztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Maximum } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const maximumImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => Math.max(aValue, bValue)));\nexport const maximum = binaryKernelFunc(Maximum, maximumImpl);\nexport const maximumConfig = {\n kernelName: Maximum,\n backendName: 'cpu',\n kernelFunc: maximum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWF4aW11bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUNuRCxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFnQixFQUFFLE1BQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBNYXhpbXVtfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1heGltdW1JbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZSwgYlZhbHVlKSA9PiBNYXRoLm1heChhVmFsdWUgYXMgbnVtYmVyLCBiVmFsdWUgYXMgbnVtYmVyKSkpO1xuZXhwb3J0IGNvbnN0IG1heGltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKE1heGltdW0sIG1heGltdW1JbXBsKTtcblxuZXhwb3J0IGNvbnN0IG1heGltdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4aW11bSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtYXhpbXVtXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Minimum } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const minimumImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => Math.min(aValue, bValue)));\nexport const minimum = binaryKernelFunc(Minimum, minimumImpl);\nexport const minimumConfig = {\n kernelName: Minimum,\n backendName: 'cpu',\n kernelFunc: minimum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWluaW11bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUNuRCxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFnQixFQUFFLE1BQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFPO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBNaW5pbXVtfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG1pbmltdW1JbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZSwgYlZhbHVlKSA9PiBNYXRoLm1pbihhVmFsdWUgYXMgbnVtYmVyLCBiVmFsdWUgYXMgbnVtYmVyKSkpO1xuZXhwb3J0IGNvbnN0IG1pbmltdW0gPSBiaW5hcnlLZXJuZWxGdW5jKE1pbmltdW0sIG1pbmltdW1JbXBsKTtcblxuZXhwb3J0IGNvbnN0IG1pbmltdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWluaW11bSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtaW5pbXVtXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multiply } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const multiplyImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => aValue * bValue));\nexport const multiplyComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return {\n real: aReal * bReal - aImag * bImag,\n imag: aReal * bImag + aImag * bReal\n };\n}));\nexport const multiply = binaryKernelFunc(Multiply, multiplyImpl, multiplyComplexImpl);\nexport const multiplyConfig = {\n kernelName: Multiply,\n backendName: 'cpu',\n kernelFunc: multiply\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlwbHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL011bHRpcGx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsNEJBQTRCLENBQ3BELENBQUMsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDNUIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU87UUFDTCxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztRQUNuQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVSLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FDakIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE11bHRpcGx5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlJbXBsID0gY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbChcbiAgICAoKGFWYWx1ZTogbnVtYmVyLCBiVmFsdWU6IG51bWJlcikgPT4gYVZhbHVlICogYlZhbHVlKSk7XG5leHBvcnQgY29uc3QgbXVsdGlwbHlDb21wbGV4SW1wbCA9XG4gICAgY3JlYXRlQ29tcGxleEJpbmFyeUtlcm5lbEltcGwoKChhUmVhbCwgYUltYWcsIGJSZWFsLCBiSW1hZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVhbDogYVJlYWwgKiBiUmVhbCAtIGFJbWFnICogYkltYWcsXG4gICAgICAgIGltYWc6IGFSZWFsICogYkltYWcgKyBhSW1hZyAqIGJSZWFsXG4gICAgICB9O1xuICAgIH0pKTtcblxuZXhwb3J0IGNvbnN0IG11bHRpcGx5ID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKE11bHRpcGx5LCBtdWx0aXBseUltcGwsIG11bHRpcGx5Q29tcGxleEltcGwpO1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTXVsdGlwbHksXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbXVsdGlwbHlcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Neg, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { multiplyImpl } from './Multiply';\nexport function negImpl(xVals, xShape, xDtype) {\n const minusOne = util.createScalarValue(-1, xDtype);\n return multiplyImpl([], xShape, minusOne, xVals, xDtype);\n}\nexport function neg(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n assertNotComplex(x, 'neg');\n const xVals = backend.data.get(x.dataId).values;\n const [res, newShape] = negImpl(xVals, x.shape, x.dtype);\n return backend.makeTensorInfo(newShape, x.dtype, res);\n}\nexport const negConfig = {\n kernelName: Neg,\n backendName: 'cpu',\n kernelFunc: neg\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9OZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFxQyxHQUFHLEVBQXVDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBaUIsRUFBRSxNQUFnQixFQUFFLE1BQWdCO0lBRTNFLE1BQU0sUUFBUSxHQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQXlCLEVBQUUsTUFBTSxDQUFlLENBQUM7SUFDN0UsT0FBTyxZQUFZLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQW9EO0lBRXRFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzlELE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBOZWcsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIFVuYXJ5SW5wdXRzLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7bXVsdGlwbHlJbXBsfSBmcm9tICcuL011bHRpcGx5JztcblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ0ltcGwoeFZhbHM6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIHhEdHlwZTogRGF0YVR5cGUpOlxuICAgIFtUeXBlZEFycmF5LCBudW1iZXJbXV0ge1xuICBjb25zdCBtaW51c09uZSA9XG4gICAgICB1dGlsLmNyZWF0ZVNjYWxhclZhbHVlKC0xIGFzIHVua25vd24gYXMgJ2Zsb2F0MzInLCB4RHR5cGUpIGFzIFR5cGVkQXJyYXk7XG4gIHJldHVybiBtdWx0aXBseUltcGwoW10sIHhTaGFwZSwgbWludXNPbmUsIHhWYWxzLCB4RHR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnKGFyZ3M6IHtpbnB1dHM6IFVuYXJ5SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICduZWcnKTtcblxuICBjb25zdCB4VmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBbcmVzLCBuZXdTaGFwZV0gPSBuZWdJbXBsKHhWYWxzLCB4LnNoYXBlLCB4LmR0eXBlKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhuZXdTaGFwZSwgeC5kdHlwZSwgcmVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5lZ0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOZWcsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbmVnIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NotEqual } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const notEqualImpl = createSimpleBinaryKernelImpl(((a, b) => (a !== b) ? 1 : 0));\nexport const notEqual = binaryKernelFunc(NotEqual, notEqualImpl, null /* complexOp */, 'bool');\nexport const notEqualConfig = {\n kernelName: NotEqual,\n backendName: 'cpu',\n kernelFunc: notEqual\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90RXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL05vdEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FDakIsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE5vdEVxdWFsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGx9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV9pbXBsJztcbmltcG9ydCB7YmluYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG5vdEVxdWFsSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoKGEsIGIpID0+IChhICE9PSBiKSA/IDEgOiAwKSk7XG5leHBvcnQgY29uc3Qgbm90RXF1YWwgPVxuICAgIGJpbmFyeUtlcm5lbEZ1bmMoTm90RXF1YWwsIG5vdEVxdWFsSW1wbCwgbnVsbCAvKiBjb21wbGV4T3AgKi8sICdib29sJyk7XG5cbmV4cG9ydCBjb25zdCBub3RFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOb3RFcXVhbCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBub3RFcXVhbFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function transposeImpl(xVals, xShape, dtype, perm, newShape) {\n const xRank = xShape.length;\n const xSize = util.sizeFromShape(xShape);\n const xStrides = util.computeStrides(xShape);\n const newStrides = util.computeStrides(newShape);\n const result = util.getTypedArrayFromDType(dtype, util.sizeFromShape(newShape));\n for (let i = 0; i < xSize; ++i) {\n const loc = util.indexToLoc(i, xRank, xStrides);\n // Permute location.\n const newLoc = new Array(loc.length);\n for (let i = 0; i < newLoc.length; i++) {\n newLoc[i] = loc[perm[i]];\n }\n const newIndex = util.locToIndex(newLoc, xRank, newStrides);\n result[newIndex] = xVals[i];\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1RyYW5zcG9zZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUdILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLFVBQVUsYUFBYSxDQUN6QixLQUFpQixFQUFFLE1BQWdCLEVBQUUsS0FBZSxFQUFFLElBQWMsRUFDcEUsUUFBa0I7SUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3RDLEtBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWhELG9CQUFvQjtRQUNwQixNQUFNLE1BQU0sR0FBYSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgTnVtZXJpY0RhdGFUeXBlLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHt1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlSW1wbChcbiAgICB4VmFsczogVHlwZWRBcnJheSwgeFNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLCBwZXJtOiBudW1iZXJbXSxcbiAgICBuZXdTaGFwZTogbnVtYmVyW10pOiBUeXBlZEFycmF5IHtcbiAgY29uc3QgeFJhbmsgPSB4U2hhcGUubGVuZ3RoO1xuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4U2hhcGUpO1xuICBjb25zdCB4U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoeFNoYXBlKTtcbiAgY29uc3QgbmV3U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMobmV3U2hhcGUpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZShcbiAgICAgIGR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKG5ld1NoYXBlKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4U2l6ZTsgKytpKSB7XG4gICAgY29uc3QgbG9jID0gdXRpbC5pbmRleFRvTG9jKGksIHhSYW5rLCB4U3RyaWRlcyk7XG5cbiAgICAvLyBQZXJtdXRlIGxvY2F0aW9uLlxuICAgIGNvbnN0IG5ld0xvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkobG9jLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMb2MubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0xvY1tpXSA9IGxvY1twZXJtW2ldXTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IHV0aWwubG9jVG9JbmRleChuZXdMb2MsIHhSYW5rLCBuZXdTdHJpZGVzKTtcbiAgICByZXN1bHRbbmV3SW5kZXhdID0geFZhbHNbaV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transpose } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transposeImpl } from './Transpose_impl';\nexport function transpose(args) {\n const { inputs, attrs, backend } = args;\n const { x } = inputs;\n const { perm } = attrs;\n assertNotComplex(x, 'transpose');\n const xRank = x.shape.length;\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = x.shape[perm[i]];\n }\n const values = backend.data.get(x.dataId).values;\n const result = transposeImpl(values, x.shape, x.dtype, perm, newShape);\n const dataId = backend.write(result, newShape, x.dtype);\n return { dataId, shape: newShape, dtype: x.dtype };\n}\nexport const transposeConfig = {\n kernelName: Transpose,\n backendName: 'cpu',\n kernelFunc: transpose\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNwb3NlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9UcmFuc3Bvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxTQUFTLEVBQThDLE1BQU0sdUJBQXVCLENBQUM7QUFHbkksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxRQUFRLEdBQWEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdkUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxPQUFPLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFRyYW5zcG9zZSwgVHJhbnNwb3NlQXR0cnMsIFRyYW5zcG9zZUlucHV0cywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmltcG9ydCB7dHJhbnNwb3NlSW1wbH0gZnJvbSAnLi9UcmFuc3Bvc2VfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2UoYXJnczoge1xuICBpbnB1dHM6IFRyYW5zcG9zZUlucHV0cyxcbiAgYXR0cnM6IFRyYW5zcG9zZUF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVVxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtwZXJtfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ3RyYW5zcG9zZScpO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KHhSYW5rKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1NoYXBlW2ldID0geC5zaGFwZVtwZXJtW2ldXTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCByZXN1bHQgPSB0cmFuc3Bvc2VJbXBsKHZhbHVlcywgeC5zaGFwZSwgeC5kdHlwZSwgcGVybSwgbmV3U2hhcGUpO1xuXG4gIGNvbnN0IGRhdGFJZCA9IGJhY2tlbmQud3JpdGUocmVzdWx0LCBuZXdTaGFwZSwgeC5kdHlwZSk7XG4gIHJldHVybiB7ZGF0YUlkLCBzaGFwZTogbmV3U2hhcGUsIGR0eXBlOiB4LmR0eXBlfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zcG9zZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUcmFuc3Bvc2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogdHJhbnNwb3NlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Prod, upcastType, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function prodImpl(xShape, xDtype, xVals, reductionAxes) {\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(xShape, reductionAxes);\n const outDtype = upcastType(xDtype, 'int32');\n const outVals = util.makeZerosTypedArray(util.sizeFromShape(outShape), outDtype);\n const reduceSize = util.sizeFromShape(reduceShape);\n for (let i = 0; i < outVals.length; ++i) {\n const offset = i * reduceSize;\n let prod = 1;\n for (let j = 0; j < reduceSize; ++j) {\n prod *= xVals[offset + j];\n }\n outVals[i] = prod;\n }\n return { outVals, outShape, outDtype };\n}\nexport function prod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'prod');\n const xRank = x.shape.length;\n const axes = util.parseAxisParam(axis, x.shape);\n const permutation = backend_util.getAxesPermutation(axes, xRank);\n let reductionAxes = axes;\n let permutedX = x;\n const intermediateTensorInfos = [];\n if (permutation != null) {\n permutedX = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n intermediateTensorInfos.push(permutedX);\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, xRank);\n }\n const xVals = backend.data.get(permutedX.dataId).values;\n const { outVals, outShape, outDtype } = prodImpl(permutedX.shape, permutedX.dtype, xVals, reductionAxes);\n let resultShape = outShape;\n if (keepDims) {\n resultShape = backend_util.expandShapeToKeepDim(outShape, axes);\n }\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return backend.makeTensorInfo(resultShape, outDtype, outVals);\n}\nexport const prodConfig = {\n kernelName: Prod,\n backendName: 'cpu',\n kernelFunc: prod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUHJvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFzQyxJQUFJLEVBQWlELFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsUUFBUSxDQUNwQixNQUFnQixFQUFFLE1BQWdCLEVBQUUsS0FBaUIsRUFDckQsYUFBdUI7SUFFekIsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQWUsQ0FBQztJQUMxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDbkI7SUFFRCxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FDaEIsSUFBcUU7SUFFdkUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTVCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDbkMsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1FBQ3ZCLFNBQVMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMxRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsYUFBYSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzVFO0lBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDdEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLEdBQy9CLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXJFLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUMzQixJQUFJLFFBQVEsRUFBRTtRQUNaLFdBQVcsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsdUJBQXVCLENBQUMsT0FBTyxDQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUHJvZCwgUHJvZEF0dHJzLCBQcm9kSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1cGNhc3RUeXBlLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9kSW1wbChcbiAgICB4U2hhcGU6IG51bWJlcltdLCB4RHR5cGU6IERhdGFUeXBlLCB4VmFsczogVHlwZWRBcnJheSxcbiAgICByZWR1Y3Rpb25BeGVzOiBudW1iZXJbXSk6XG4gICAge291dFZhbHM6IFR5cGVkQXJyYXksIG91dFNoYXBlOiBudW1iZXJbXSwgb3V0RHR5cGU6IERhdGFUeXBlfSB7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKHhTaGFwZSwgcmVkdWN0aW9uQXhlcyk7XG4gIGNvbnN0IG91dER0eXBlID0gdXBjYXN0VHlwZSh4RHR5cGUsICdpbnQzMicpO1xuICBjb25zdCBvdXRWYWxzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSksIG91dER0eXBlKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dFZhbHMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBvZmZzZXQgPSBpICogcmVkdWNlU2l6ZTtcbiAgICBsZXQgcHJvZCA9IDE7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIHByb2QgKj0geFZhbHNbb2Zmc2V0ICsgal07XG4gICAgfVxuICAgIG91dFZhbHNbaV0gPSBwcm9kO1xuICB9XG5cbiAgcmV0dXJuIHtvdXRWYWxzLCBvdXRTaGFwZSwgb3V0RHR5cGV9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvZChcbiAgICBhcmdzOiB7aW5wdXRzOiBQcm9kSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFByb2RBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICdwcm9kJyk7XG5cbiAgY29uc3QgeFJhbmsgPSB4LnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgYXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG5cbiAgY29uc3QgcGVybXV0YXRpb24gPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHhSYW5rKTtcbiAgbGV0IHJlZHVjdGlvbkF4ZXMgPSBheGVzO1xuICBsZXQgcGVybXV0ZWRYID0geDtcbiAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MgPSBbXTtcbiAgaWYgKHBlcm11dGF0aW9uICE9IG51bGwpIHtcbiAgICBwZXJtdXRlZFggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGF0aW9ufX0pO1xuICAgIGludGVybWVkaWF0ZVRlbnNvckluZm9zLnB1c2gocGVybXV0ZWRYKTtcbiAgICByZWR1Y3Rpb25BeGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMocmVkdWN0aW9uQXhlcy5sZW5ndGgsIHhSYW5rKTtcbiAgfVxuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldChwZXJtdXRlZFguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qge291dFZhbHMsIG91dFNoYXBlLCBvdXREdHlwZX0gPVxuICAgICAgcHJvZEltcGwocGVybXV0ZWRYLnNoYXBlLCBwZXJtdXRlZFguZHR5cGUsIHhWYWxzLCByZWR1Y3Rpb25BeGVzKTtcblxuICBsZXQgcmVzdWx0U2hhcGUgPSBvdXRTaGFwZTtcbiAgaWYgKGtlZXBEaW1zKSB7XG4gICAgcmVzdWx0U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0U2hhcGUsIGF4ZXMpO1xuICB9XG5cbiAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgIHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIG91dER0eXBlLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUHJvZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBwcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nfunction validateIndices(indices, indicesShape, numParams) {\n indices.forEach((index, i) => {\n if (index < 0 || index >= numParams) {\n const locString = util.indexToLoc(i, indicesShape.length, util.computeStrides(indicesShape))\n .join(',');\n throw new Error(`indices[${locString}] = ${index} is not in [0, ${numParams})`);\n }\n });\n}\nfunction validateSplits(paramsNestedSplits, numParamsDenseValues) {\n // Validate\n for (let dim = 0; dim < paramsNestedSplits.length; ++dim) {\n const splits = paramsNestedSplits[dim];\n const lastSplit = (dim === paramsNestedSplits.length - 1) ?\n numParamsDenseValues :\n paramsNestedSplits[dim + 1].length;\n if (splits.length === 0) {\n throw new Error('Ragged splits may not be empty');\n }\n if (splits[0] < 0) {\n throw new Error('Ragged splits must be non-negative');\n }\n if (splits[splits.length - 1] > lastSplit) {\n throw new Error('Ragged splits must not point past values');\n }\n for (let i = 1; i < splits.length; ++i) {\n if (splits[i - 1] > splits[i]) {\n throw new Error('Ragged splits must be sorted in ascending order');\n }\n }\n }\n}\n// Construct the `splits` output tensors, encoded using a nested vector.\n// Also find the slices of values that need to be copied, and store them\n// in `valueSlices`. The total number of values that will be copied (which\n// we need for allocating the output values tensor) is stored in `numValues`.\nfunction makeSplits(indices, indicesShape, paramsNestedSplits, numParamsDenseValues) {\n const valueSlices = [];\n let numValues = 0;\n const numSplits = indicesShape.length - 1 + paramsNestedSplits.length;\n const outSplits = new Array(numSplits).fill(null).map(() => [0]);\n validateSplits(paramsNestedSplits, numParamsDenseValues);\n // Add `splits` that come from all but the last dimension of the dense\n // Tensor `indices`. In particular, for each dimension D, we add a\n // splits tensor whose values are:\n // range(reduceProd(splits.shape[:D]) + 1) * splits.shape[D+1]\n // E.g., if indices.shape=[2, 3, 4] then we will add splits tensors:\n // [0, 3, 6] # length=2+1, stride=3\n // [0, 4, 8, 12, 16, 20, 24] # length=2*3+1, stride=4\n let nrows = 1;\n for (let dim = 0; dim < indicesShape.length - 1; ++dim) {\n nrows *= indicesShape[dim];\n const rowLength = indicesShape[dim + 1];\n for (let i = 1; i < nrows + 1; ++i) {\n outSplits[dim].push(i * rowLength);\n }\n }\n // Add `splits` that come from `paramsNestedSplits`. Starting with the\n // outermost ragged dimension (i.e., the first `splits` tensor), we work\n // our way in, finding the range of values that should be copied. As we\n // go, we update the output `splits` for each dimension with the appropriate\n // values. In particular, the *lengths* of the slices from `param_splits`\n // should be copied to generate corresponding slice lengths in the output\n // splits. E.g., if we are copying a ragged row with length 4, then we\n // should add a new split point to outSplits that is 4 greater than the\n // previous split point in outSplits.\n for (let i = 0; i < indices.length; ++i) {\n let start = indices[i];\n let limit = indices[i] + 1;\n // Copy splits.\n for (let dim = 0; dim < paramsNestedSplits.length; ++dim) {\n const splits = paramsNestedSplits[dim];\n const outDim = dim + indicesShape.length - 1;\n if (outDim >= 0) {\n const outSplitsOutDim = outSplits[outDim];\n const delta = outSplitsOutDim[outSplitsOutDim.length - 1] - splits[start];\n for (let j = start; j < limit; ++j) {\n outSplits[outDim].push(splits[j + 1] + delta);\n }\n }\n start = splits[start];\n limit = splits[limit];\n }\n if (limit !== start) {\n valueSlices.push([start, limit]);\n numValues += limit - start;\n }\n }\n return { outSplits, valueSlices, numValues };\n}\nfunction getSplits(outSplits) {\n const splitsOut = [];\n for (let i = 0; i < outSplits.length; ++i) {\n const numSplits = outSplits[i].length;\n const splits = util.getArrayFromDType('int32', numSplits);\n splitsOut.push(splits);\n outSplits[i].forEach((value, j) => splits[j] = value);\n }\n return splitsOut;\n}\nfunction computeFlatOuterDims(orig, numOutDims) {\n const outDims = orig.slice(0, numOutDims);\n while (outDims.length < numOutDims) {\n outDims.push(1);\n }\n for (let inDim = numOutDims; inDim < orig.length; inDim++) {\n outDims[numOutDims - 1] *= orig[inDim];\n }\n return outDims;\n}\n// For each slice in `(start, limit)` in `valueSlices`, append\n// `paramsDenseValues[start,...,limit] to `values`. `valueSize` indicates\n// the number of scalars contained in each value paramsDenseValues[i].\nfunction writeValueSlices(paramsDenseValues, paramsDenseValuesShape, valueSlices, valueSize, values, valuesShape) {\n const denseM = computeFlatOuterDims(paramsDenseValuesShape, 2)[1];\n const valuesM = computeFlatOuterDims(valuesShape, 2)[1];\n let outPos = 0;\n for (const slice of valueSlices) {\n for (let i = slice[0]; i < slice[1]; ++i) {\n for (let j = 0; j < valueSize; ++j) {\n values[outPos * valuesM + j] = paramsDenseValues[i * denseM + j];\n }\n ++outPos;\n }\n }\n}\nfunction getValues(paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, valueSlices, numValues) {\n const valuesShape = paramsDenseValuesShape.slice();\n valuesShape[0] = numValues;\n const valuesOut = util.getArrayFromDType(paramsDenseValuesDType, util.sizeFromShape(valuesShape));\n const numElements = paramsDenseValues.length;\n const valueSize = numElements === 0 ? 0 : (numElements / paramsDenseValuesShape[0]);\n writeValueSlices(paramsDenseValues, paramsDenseValuesShape, valueSlices, valueSize, valuesOut, valuesShape);\n return [valuesOut, valuesShape];\n}\nexport function raggedGatherImpl(paramsNestedSplits, paramsNestedSplitsShapes, paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, indices, indicesShape, outputRaggedRank) {\n if (paramsNestedSplits.length === 0) {\n throw new Error('paramsNestedSplits must be non empty');\n }\n if (paramsNestedSplitsShapes[0].length === 0) {\n throw new Error('Split tensors must not be scalars');\n }\n const numParams = paramsNestedSplitsShapes[0][0] - 1;\n validateIndices(indices, indicesShape, numParams);\n if (paramsDenseValuesShape.length === 0) {\n throw new Error('params.rank must be nonzero');\n }\n const numParamsDenseValues = paramsDenseValuesShape[0];\n // Calculate the `splits`, and store the value slices that we need to\n // copy in `valueSlices`.\n const { outSplits, valueSlices, numValues } = makeSplits(indices, indicesShape, paramsNestedSplits, numParamsDenseValues);\n // Write the output tensors.\n const outputNestedSplits = getSplits(outSplits);\n const outputDenseValues = getValues(paramsDenseValues, paramsDenseValuesShape, paramsDenseValuesDType, valueSlices, numValues);\n return [outputNestedSplits, outputDenseValues[0], outputDenseValues[1]];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkR2F0aGVyX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JhZ2dlZEdhdGhlcl9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBdUIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsU0FBUyxlQUFlLENBQ3BCLE9BQW1CLEVBQUUsWUFBc0IsRUFBRSxTQUFpQjtJQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLENBQVMsRUFBRSxFQUFFO1FBQzNDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ25DLE1BQU0sU0FBUyxHQUNYLElBQUksQ0FBQyxVQUFVLENBQ1AsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDN0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gsV0FBVyxTQUFTLE9BQU8sS0FBSyxrQkFBa0IsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNuQixrQkFBZ0MsRUFBRSxvQkFBNEI7SUFDaEUsV0FBVztJQUNYLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEtBQUssa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsb0JBQW9CLENBQUMsQ0FBQztZQUN0QixrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztTQUM3RDtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQzthQUNwRTtTQUNGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLFNBQVMsVUFBVSxDQUNmLE9BQW1CLEVBQUUsWUFBc0IsRUFDM0Msa0JBQWdDLEVBQUUsb0JBQTRCO0lBQ2hFLE1BQU0sV0FBVyxHQUE0QixFQUFFLENBQUM7SUFDaEQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztJQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUV6RCxzRUFBc0U7SUFDdEUsbUVBQW1FO0lBQ25FLGtDQUFrQztJQUNsQyxnRUFBZ0U7SUFDaEUsb0VBQW9FO0lBQ3BFLHdEQUF3RDtJQUN4RCwwREFBMEQ7SUFDMUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3RELEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztTQUNwQztLQUNGO0lBRUQsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxxQ0FBcUM7SUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0IsZUFBZTtRQUNmLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUU7WUFDeEQsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDZixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sS0FBSyxHQUNQLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtvQkFDbEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO2lCQUMvQzthQUNGO1lBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ25CLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQyxTQUFTLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztTQUM1QjtLQUNGO0lBRUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLFNBQXFCO0lBQ3RDLE1BQU0sU0FBUyxHQUFpQixFQUFFLENBQUM7SUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDekMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBZSxDQUFDO1FBQ3hFLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztLQUMvRDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLElBQWMsRUFBRSxVQUFrQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7SUFFRCxLQUFLLElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN6RCxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN4QztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFDRCw4REFBOEQ7QUFDOUQsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSxTQUFTLGdCQUFnQixDQUNyQixpQkFBNkIsRUFBRSxzQkFBZ0MsRUFDL0QsV0FBb0MsRUFBRSxTQUFpQixFQUFFLE1BQWtCLEVBQzNFLFdBQXFCO0lBQ3ZCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4RCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRTtRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbEU7WUFDRCxFQUFFLE1BQU0sQ0FBQztTQUNWO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQ2QsaUJBQTZCLEVBQUUsc0JBQWdDLEVBQy9ELHNCQUFnQyxFQUFFLFdBQW9DLEVBQ3RFLFNBQWlCO0lBQ25CLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25ELFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFFM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBZSxDQUFDO0lBRXJFLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FDWCxXQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsZ0JBQWdCLENBQ1osaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFDakUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTVCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsa0JBQWdDLEVBQUUsd0JBQW9DLEVBQ3RFLGlCQUE2QixFQUFFLHNCQUFnQyxFQUMvRCxzQkFBZ0MsRUFBRSxPQUFtQixFQUNyRCxZQUFzQixFQUN0QixnQkFBd0I7SUFDMUIsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztLQUN6RDtJQUVELElBQUksd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDdEQ7SUFDRCxNQUFNLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFbEQsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUNoRDtJQUNELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkQscUVBQXFFO0lBQ3JFLHlCQUF5QjtJQUN6QixNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsR0FBRyxVQUFVLENBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUVyRSw0QkFBNEI7SUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQy9CLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUNqRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFNUIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZnVuY3Rpb24gdmFsaWRhdGVJbmRpY2VzKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sIG51bVBhcmFtczogbnVtYmVyKSB7XG4gIGluZGljZXMuZm9yRWFjaCgoaW5kZXg6IG51bWJlciwgaTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1QYXJhbXMpIHtcbiAgICAgIGNvbnN0IGxvY1N0cmluZyA9XG4gICAgICAgICAgdXRpbC5pbmRleFRvTG9jKFxuICAgICAgICAgICAgICAgICAgaSwgaW5kaWNlc1NoYXBlLmxlbmd0aCwgdXRpbC5jb21wdXRlU3RyaWRlcyhpbmRpY2VzU2hhcGUpKVxuICAgICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBpbmRpY2VzWyR7bG9jU3RyaW5nfV0gPSAke2luZGV4fSBpcyBub3QgaW4gWzAsICR7bnVtUGFyYW1zfSlgKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNwbGl0cyhcbiAgICBwYXJhbXNOZXN0ZWRTcGxpdHM6IFR5cGVkQXJyYXlbXSwgbnVtUGFyYW1zRGVuc2VWYWx1ZXM6IG51bWJlcikge1xuICAvLyBWYWxpZGF0ZVxuICBmb3IgKGxldCBkaW0gPSAwOyBkaW0gPCBwYXJhbXNOZXN0ZWRTcGxpdHMubGVuZ3RoOyArK2RpbSkge1xuICAgIGNvbnN0IHNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0c1tkaW1dO1xuICAgIGNvbnN0IGxhc3RTcGxpdCA9IChkaW0gPT09IHBhcmFtc05lc3RlZFNwbGl0cy5sZW5ndGggLSAxKSA/XG4gICAgICAgIG51bVBhcmFtc0RlbnNlVmFsdWVzIDpcbiAgICAgICAgcGFyYW1zTmVzdGVkU3BsaXRzW2RpbSArIDFdLmxlbmd0aDtcbiAgICBpZiAoc3BsaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYWdnZWQgc3BsaXRzIG1heSBub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKHNwbGl0c1swXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmFnZ2VkIHNwbGl0cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICBpZiAoc3BsaXRzW3NwbGl0cy5sZW5ndGggLSAxXSA+IGxhc3RTcGxpdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYWdnZWQgc3BsaXRzIG11c3Qgbm90IHBvaW50IHBhc3QgdmFsdWVzJyk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3BsaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoc3BsaXRzW2kgLSAxXSA+IHNwbGl0c1tpXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhZ2dlZCBzcGxpdHMgbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENvbnN0cnVjdCB0aGUgYHNwbGl0c2Agb3V0cHV0IHRlbnNvcnMsIGVuY29kZWQgdXNpbmcgYSBuZXN0ZWQgdmVjdG9yLlxuLy8gQWxzbyBmaW5kIHRoZSBzbGljZXMgb2YgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb3BpZWQsIGFuZCBzdG9yZSB0aGVtXG4vLyBpbiBgdmFsdWVTbGljZXNgLiAgVGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgdGhhdCB3aWxsIGJlIGNvcGllZCAod2hpY2hcbi8vIHdlIG5lZWQgZm9yIGFsbG9jYXRpbmcgdGhlIG91dHB1dCB2YWx1ZXMgdGVuc29yKSBpcyBzdG9yZWQgaW4gYG51bVZhbHVlc2AuXG5mdW5jdGlvbiBtYWtlU3BsaXRzKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sXG4gICAgcGFyYW1zTmVzdGVkU3BsaXRzOiBUeXBlZEFycmF5W10sIG51bVBhcmFtc0RlbnNlVmFsdWVzOiBudW1iZXIpIHtcbiAgY29uc3QgdmFsdWVTbGljZXM6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+ID0gW107XG4gIGxldCBudW1WYWx1ZXMgPSAwO1xuXG4gIGNvbnN0IG51bVNwbGl0cyA9IGluZGljZXNTaGFwZS5sZW5ndGggLSAxICsgcGFyYW1zTmVzdGVkU3BsaXRzLmxlbmd0aDtcbiAgY29uc3Qgb3V0U3BsaXRzID0gbmV3IEFycmF5KG51bVNwbGl0cykuZmlsbChudWxsKS5tYXAoKCkgPT4gWzBdKTtcblxuICB2YWxpZGF0ZVNwbGl0cyhwYXJhbXNOZXN0ZWRTcGxpdHMsIG51bVBhcmFtc0RlbnNlVmFsdWVzKTtcblxuICAvLyBBZGQgYHNwbGl0c2AgdGhhdCBjb21lIGZyb20gYWxsIGJ1dCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIGRlbnNlXG4gIC8vIFRlbnNvciBgaW5kaWNlc2AuICBJbiBwYXJ0aWN1bGFyLCBmb3IgZWFjaCBkaW1lbnNpb24gRCwgd2UgYWRkIGFcbiAgLy8gc3BsaXRzIHRlbnNvciB3aG9zZSB2YWx1ZXMgYXJlOlxuICAvLyAgIHJhbmdlKHJlZHVjZVByb2Qoc3BsaXRzLnNoYXBlWzpEXSkgKyAxKSAqIHNwbGl0cy5zaGFwZVtEKzFdXG4gIC8vIEUuZy4sIGlmIGluZGljZXMuc2hhcGU9WzIsIDMsIDRdIHRoZW4gd2Ugd2lsbCBhZGQgc3BsaXRzIHRlbnNvcnM6XG4gIC8vICAgWzAsIDMsIDZdICAgICAgICAgICAgICAgICAgICAjIGxlbmd0aD0yKzEsIHN0cmlkZT0zXG4gIC8vICAgWzAsIDQsIDgsIDEyLCAxNiwgMjAsIDI0XSAgICAjIGxlbmd0aD0yKjMrMSwgc3RyaWRlPTRcbiAgbGV0IG5yb3dzID0gMTtcbiAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7ICsrZGltKSB7XG4gICAgbnJvd3MgKj0gaW5kaWNlc1NoYXBlW2RpbV07XG4gICAgY29uc3Qgcm93TGVuZ3RoID0gaW5kaWNlc1NoYXBlW2RpbSArIDFdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnJvd3MgKyAxOyArK2kpIHtcbiAgICAgIG91dFNwbGl0c1tkaW1dLnB1c2goaSAqIHJvd0xlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGBzcGxpdHNgIHRoYXQgY29tZSBmcm9tIGBwYXJhbXNOZXN0ZWRTcGxpdHNgLiAgU3RhcnRpbmcgd2l0aCB0aGVcbiAgLy8gb3V0ZXJtb3N0IHJhZ2dlZCBkaW1lbnNpb24gKGkuZS4sIHRoZSBmaXJzdCBgc3BsaXRzYCB0ZW5zb3IpLCB3ZSB3b3JrXG4gIC8vIG91ciB3YXkgaW4sIGZpbmRpbmcgdGhlIHJhbmdlIG9mIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBjb3BpZWQuICBBcyB3ZVxuICAvLyBnbywgd2UgdXBkYXRlIHRoZSBvdXRwdXQgYHNwbGl0c2AgZm9yIGVhY2ggZGltZW5zaW9uIHdpdGggdGhlIGFwcHJvcHJpYXRlXG4gIC8vIHZhbHVlcy4gIEluIHBhcnRpY3VsYXIsIHRoZSAqbGVuZ3Rocyogb2YgdGhlIHNsaWNlcyBmcm9tIGBwYXJhbV9zcGxpdHNgXG4gIC8vIHNob3VsZCBiZSBjb3BpZWQgdG8gZ2VuZXJhdGUgY29ycmVzcG9uZGluZyBzbGljZSBsZW5ndGhzIGluIHRoZSBvdXRwdXRcbiAgLy8gc3BsaXRzLiAgRS5nLiwgaWYgd2UgYXJlIGNvcHlpbmcgYSByYWdnZWQgcm93IHdpdGggbGVuZ3RoIDQsIHRoZW4gd2VcbiAgLy8gc2hvdWxkIGFkZCBhIG5ldyBzcGxpdCBwb2ludCB0byBvdXRTcGxpdHMgdGhhdCBpcyA0IGdyZWF0ZXIgdGhhbiB0aGVcbiAgLy8gcHJldmlvdXMgc3BsaXQgcG9pbnQgaW4gb3V0U3BsaXRzLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgc3RhcnQgPSBpbmRpY2VzW2ldO1xuICAgIGxldCBsaW1pdCA9IGluZGljZXNbaV0gKyAxO1xuXG4gICAgLy8gQ29weSBzcGxpdHMuXG4gICAgZm9yIChsZXQgZGltID0gMDsgZGltIDwgcGFyYW1zTmVzdGVkU3BsaXRzLmxlbmd0aDsgKytkaW0pIHtcbiAgICAgIGNvbnN0IHNwbGl0cyA9IHBhcmFtc05lc3RlZFNwbGl0c1tkaW1dO1xuICAgICAgY29uc3Qgb3V0RGltID0gZGltICsgaW5kaWNlc1NoYXBlLmxlbmd0aCAtIDE7XG4gICAgICBpZiAob3V0RGltID49IDApIHtcbiAgICAgICAgY29uc3Qgb3V0U3BsaXRzT3V0RGltID0gb3V0U3BsaXRzW291dERpbV07XG4gICAgICAgIGNvbnN0IGRlbHRhID1cbiAgICAgICAgICAgIG91dFNwbGl0c091dERpbVtvdXRTcGxpdHNPdXREaW0ubGVuZ3RoIC0gMV0gLSBzcGxpdHNbc3RhcnRdO1xuICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPCBsaW1pdDsgKytqKSB7XG4gICAgICAgICAgb3V0U3BsaXRzW291dERpbV0ucHVzaChzcGxpdHNbaiArIDFdICsgZGVsdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydCA9IHNwbGl0c1tzdGFydF07XG4gICAgICBsaW1pdCA9IHNwbGl0c1tsaW1pdF07XG4gICAgfVxuICAgIGlmIChsaW1pdCAhPT0gc3RhcnQpIHtcbiAgICAgIHZhbHVlU2xpY2VzLnB1c2goW3N0YXJ0LCBsaW1pdF0pO1xuICAgICAgbnVtVmFsdWVzICs9IGxpbWl0IC0gc3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtvdXRTcGxpdHMsIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXN9O1xufVxuXG5mdW5jdGlvbiBnZXRTcGxpdHMob3V0U3BsaXRzOiBudW1iZXJbXVtdKSB7XG4gIGNvbnN0IHNwbGl0c091dDogVHlwZWRBcnJheVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0U3BsaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbnVtU3BsaXRzID0gb3V0U3BsaXRzW2ldLmxlbmd0aDtcbiAgICBjb25zdCBzcGxpdHMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIG51bVNwbGl0cykgYXMgVHlwZWRBcnJheTtcbiAgICBzcGxpdHNPdXQucHVzaChzcGxpdHMpO1xuXG4gICAgb3V0U3BsaXRzW2ldLmZvckVhY2goKHZhbHVlLCBqOiBudW1iZXIpID0+IHNwbGl0c1tqXSA9IHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBzcGxpdHNPdXQ7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGbGF0T3V0ZXJEaW1zKG9yaWc6IG51bWJlcltdLCBudW1PdXREaW1zOiBudW1iZXIpIHtcbiAgY29uc3Qgb3V0RGltcyA9IG9yaWcuc2xpY2UoMCwgbnVtT3V0RGltcyk7XG4gIHdoaWxlIChvdXREaW1zLmxlbmd0aCA8IG51bU91dERpbXMpIHtcbiAgICBvdXREaW1zLnB1c2goMSk7XG4gIH1cblxuICBmb3IgKGxldCBpbkRpbSA9IG51bU91dERpbXM7IGluRGltIDwgb3JpZy5sZW5ndGg7IGluRGltKyspIHtcbiAgICBvdXREaW1zW251bU91dERpbXMgLSAxXSAqPSBvcmlnW2luRGltXTtcbiAgfVxuXG4gIHJldHVybiBvdXREaW1zO1xufVxuLy8gRm9yIGVhY2ggc2xpY2UgaW4gYChzdGFydCwgbGltaXQpYCBpbiBgdmFsdWVTbGljZXNgLCBhcHBlbmRcbi8vIGBwYXJhbXNEZW5zZVZhbHVlc1tzdGFydCwuLi4sbGltaXRdIHRvIGB2YWx1ZXNgLiAgYHZhbHVlU2l6ZWAgaW5kaWNhdGVzXG4vLyB0aGUgbnVtYmVyIG9mIHNjYWxhcnMgY29udGFpbmVkIGluIGVhY2ggdmFsdWUgcGFyYW1zRGVuc2VWYWx1ZXNbaV0uXG5mdW5jdGlvbiB3cml0ZVZhbHVlU2xpY2VzKFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiBUeXBlZEFycmF5LCBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlOiBudW1iZXJbXSxcbiAgICB2YWx1ZVNsaWNlczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sIHZhbHVlU2l6ZTogbnVtYmVyLCB2YWx1ZXM6IFR5cGVkQXJyYXksXG4gICAgdmFsdWVzU2hhcGU6IG51bWJlcltdKSB7XG4gIGNvbnN0IGRlbnNlTSA9IGNvbXB1dGVGbGF0T3V0ZXJEaW1zKHBhcmFtc0RlbnNlVmFsdWVzU2hhcGUsIDIpWzFdO1xuICBjb25zdCB2YWx1ZXNNID0gY29tcHV0ZUZsYXRPdXRlckRpbXModmFsdWVzU2hhcGUsIDIpWzFdO1xuXG4gIGxldCBvdXRQb3MgPSAwO1xuICBmb3IgKGNvbnN0IHNsaWNlIG9mIHZhbHVlU2xpY2VzKSB7XG4gICAgZm9yIChsZXQgaSA9IHNsaWNlWzBdOyBpIDwgc2xpY2VbMV07ICsraSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2YWx1ZVNpemU7ICsraikge1xuICAgICAgICB2YWx1ZXNbb3V0UG9zICogdmFsdWVzTSArIGpdID0gcGFyYW1zRGVuc2VWYWx1ZXNbaSAqIGRlbnNlTSArIGpdO1xuICAgICAgfVxuICAgICAgKytvdXRQb3M7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlcyhcbiAgICBwYXJhbXNEZW5zZVZhbHVlczogVHlwZWRBcnJheSwgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZTogbnVtYmVyW10sXG4gICAgcGFyYW1zRGVuc2VWYWx1ZXNEVHlwZTogRGF0YVR5cGUsIHZhbHVlU2xpY2VzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBudW1WYWx1ZXM6IG51bWJlcik6IFtUeXBlZEFycmF5LCBudW1iZXJbXV0ge1xuICBjb25zdCB2YWx1ZXNTaGFwZSA9IHBhcmFtc0RlbnNlVmFsdWVzU2hhcGUuc2xpY2UoKTtcbiAgdmFsdWVzU2hhcGVbMF0gPSBudW1WYWx1ZXM7XG5cbiAgY29uc3QgdmFsdWVzT3V0ID0gdXRpbC5nZXRBcnJheUZyb21EVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc0RlbnNlVmFsdWVzRFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnNpemVGcm9tU2hhcGUodmFsdWVzU2hhcGUpKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IG51bUVsZW1lbnRzID0gcGFyYW1zRGVuc2VWYWx1ZXMubGVuZ3RoO1xuICBjb25zdCB2YWx1ZVNpemUgPVxuICAgICAgbnVtRWxlbWVudHMgPT09IDAgPyAwIDogKG51bUVsZW1lbnRzIC8gcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZVswXSk7XG4gIHdyaXRlVmFsdWVTbGljZXMoXG4gICAgICBwYXJhbXNEZW5zZVZhbHVlcywgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZSwgdmFsdWVTbGljZXMsIHZhbHVlU2l6ZSxcbiAgICAgIHZhbHVlc091dCwgdmFsdWVzU2hhcGUpO1xuXG4gIHJldHVybiBbdmFsdWVzT3V0LCB2YWx1ZXNTaGFwZV07XG59XG5leHBvcnQgZnVuY3Rpb24gcmFnZ2VkR2F0aGVySW1wbChcbiAgICBwYXJhbXNOZXN0ZWRTcGxpdHM6IFR5cGVkQXJyYXlbXSwgcGFyYW1zTmVzdGVkU3BsaXRzU2hhcGVzOiBudW1iZXJbXVtdLFxuICAgIHBhcmFtc0RlbnNlVmFsdWVzOiBUeXBlZEFycmF5LCBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlOiBudW1iZXJbXSxcbiAgICBwYXJhbXNEZW5zZVZhbHVlc0RUeXBlOiBEYXRhVHlwZSwgaW5kaWNlczogVHlwZWRBcnJheSxcbiAgICBpbmRpY2VzU2hhcGU6IG51bWJlcltdLFxuICAgIG91dHB1dFJhZ2dlZFJhbms6IG51bWJlcik6IFtUeXBlZEFycmF5W10sIFR5cGVkQXJyYXksIG51bWJlcltdXSB7XG4gIGlmIChwYXJhbXNOZXN0ZWRTcGxpdHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJhbXNOZXN0ZWRTcGxpdHMgbXVzdCBiZSBub24gZW1wdHknKTtcbiAgfVxuXG4gIGlmIChwYXJhbXNOZXN0ZWRTcGxpdHNTaGFwZXNbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTcGxpdCB0ZW5zb3JzIG11c3Qgbm90IGJlIHNjYWxhcnMnKTtcbiAgfVxuICBjb25zdCBudW1QYXJhbXMgPSBwYXJhbXNOZXN0ZWRTcGxpdHNTaGFwZXNbMF1bMF0gLSAxO1xuICB2YWxpZGF0ZUluZGljZXMoaW5kaWNlcywgaW5kaWNlc1NoYXBlLCBudW1QYXJhbXMpO1xuXG4gIGlmIChwYXJhbXNEZW5zZVZhbHVlc1NoYXBlLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyYW1zLnJhbmsgbXVzdCBiZSBub256ZXJvJyk7XG4gIH1cbiAgY29uc3QgbnVtUGFyYW1zRGVuc2VWYWx1ZXMgPSBwYXJhbXNEZW5zZVZhbHVlc1NoYXBlWzBdO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgYHNwbGl0c2AsIGFuZCBzdG9yZSB0aGUgdmFsdWUgc2xpY2VzIHRoYXQgd2UgbmVlZCB0b1xuICAvLyBjb3B5IGluIGB2YWx1ZVNsaWNlc2AuXG4gIGNvbnN0IHtvdXRTcGxpdHMsIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXN9ID0gbWFrZVNwbGl0cyhcbiAgICAgIGluZGljZXMsIGluZGljZXNTaGFwZSwgcGFyYW1zTmVzdGVkU3BsaXRzLCBudW1QYXJhbXNEZW5zZVZhbHVlcyk7XG5cbiAgLy8gV3JpdGUgdGhlIG91dHB1dCB0ZW5zb3JzLlxuICBjb25zdCBvdXRwdXROZXN0ZWRTcGxpdHMgPSBnZXRTcGxpdHMob3V0U3BsaXRzKTtcbiAgY29uc3Qgb3V0cHV0RGVuc2VWYWx1ZXMgPSBnZXRWYWx1ZXMoXG4gICAgICBwYXJhbXNEZW5zZVZhbHVlcywgcGFyYW1zRGVuc2VWYWx1ZXNTaGFwZSwgcGFyYW1zRGVuc2VWYWx1ZXNEVHlwZSxcbiAgICAgIHZhbHVlU2xpY2VzLCBudW1WYWx1ZXMpO1xuXG4gIHJldHVybiBbb3V0cHV0TmVzdGVkU3BsaXRzLCBvdXRwdXREZW5zZVZhbHVlc1swXSwgb3V0cHV0RGVuc2VWYWx1ZXNbMV1dO1xufVxuIl19","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nconst INT32_MAX = 2147483647;\nexport function raggedRangeImpl(starts, startsShape, startsDType, limits, limitsShape, deltas, deltasShape) {\n // Check input tensor shapes.\n if (startsShape.length > 1) {\n throw new Error('starts must be a scalar or vector');\n }\n if (limitsShape.length > 1) {\n throw new Error('limits must be a scalar or vector');\n }\n if (deltasShape.length > 1) {\n throw new Error('deltas must be a scalar or vector');\n }\n // Determine which tensors we need to broadcast.\n const broadcastStarts = startsShape.length === 0;\n const broadcastLimits = limitsShape.length === 0;\n const broadcastDeltas = deltasShape.length === 0;\n // nRows (number of output rows) is the size of the non-broadcast inputs,\n // or 1 if all inputs are scalars.\n const inSizes = [];\n if (!broadcastStarts) {\n inSizes.push(startsShape[0]);\n }\n if (!broadcastLimits) {\n inSizes.push(limitsShape[0]);\n }\n if (!broadcastDeltas) {\n inSizes.push(deltasShape[0]);\n }\n for (let i = 1; i < inSizes.length; ++i) {\n if (inSizes[i] !== inSizes[i - 1]) {\n throw new Error('starts, limits, and deltas must have the same shape');\n }\n }\n const nRows = inSizes.length === 0 ? 1 : inSizes[0];\n // Construct the rtNestedSplits tensor.\n const rtNestedSplits = util.getArrayFromDType('int32', nRows + 1);\n rtNestedSplits[0] = 0;\n for (let row = 0; row < nRows; ++row) {\n const start = broadcastStarts ? starts[0] : starts[row];\n const limit = broadcastLimits ? limits[0] : limits[row];\n const delta = broadcastDeltas ? deltas[0] : deltas[row];\n if (delta === 0) {\n throw new Error('Requires delta != 0');\n }\n let size; // The number of elements in the specified range.\n if (((delta > 0) && (limit < start)) || ((delta < 0) && (limit > start))) {\n size = 0;\n }\n else {\n size = Math.ceil(Math.abs((limit - start) / delta));\n if (size > INT32_MAX) {\n throw new Error(`Requires ((limit - start) / delta) <= ${INT32_MAX}`);\n }\n }\n rtNestedSplits[row + 1] = rtNestedSplits[row] + size;\n }\n const nVals = rtNestedSplits[nRows];\n // Construct the rtDenseValues tensor.\n const rtDenseValues = util.getArrayFromDType(startsDType, nVals);\n let valueIndex = 0;\n for (let row = 0; row < nRows; ++row) {\n const rowSize = rtNestedSplits[row + 1] - rtNestedSplits[row];\n let value = broadcastStarts ? starts[0] : starts[row];\n const delta = broadcastDeltas ? deltas[0] : deltas[row];\n for (let i = 0; i < rowSize; ++i) {\n rtDenseValues[valueIndex++] = value;\n value += delta;\n }\n }\n return [rtNestedSplits, rtDenseValues];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkUmFuZ2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFnZ2VkUmFuZ2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztBQUU3QixNQUFNLFVBQVUsZUFBZSxDQUMzQixNQUFrQixFQUFFLFdBQXFCLEVBQUUsV0FBcUIsRUFDaEUsTUFBa0IsRUFBRSxXQUFxQixFQUFFLE1BQWtCLEVBQzdELFdBQXFCO0lBQ3ZCLDZCQUE2QjtJQUM3QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztLQUN0RDtJQUNELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7S0FDdEQ7SUFFRCxnREFBZ0Q7SUFDaEQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFakQseUVBQXlFO0lBQ3pFLGtDQUFrQztJQUNsQyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDdkMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDeEU7S0FDRjtJQUNELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRCx1Q0FBdUM7SUFDdkMsTUFBTSxjQUFjLEdBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBZSxDQUFDO0lBQzdELGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUNwQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLElBQVksQ0FBQyxDQUFFLGlEQUFpRDtRQUNwRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEUsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNWO2FBQU07WUFDTCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFcEQsSUFBSSxJQUFJLEdBQUcsU0FBUyxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7UUFDRCxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDdEQ7SUFFRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEMsc0NBQXNDO0lBQ3RDLE1BQU0sYUFBYSxHQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFlLENBQUM7SUFFN0QsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDaEMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLEtBQUssSUFBSSxLQUFLLENBQUM7U0FDaEI7S0FDRjtJQUVELE9BQU8sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgSU5UMzJfTUFYID0gMjE0NzQ4MzY0NztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhZ2dlZFJhbmdlSW1wbChcbiAgICBzdGFydHM6IFR5cGVkQXJyYXksIHN0YXJ0c1NoYXBlOiBudW1iZXJbXSwgc3RhcnRzRFR5cGU6IERhdGFUeXBlLFxuICAgIGxpbWl0czogVHlwZWRBcnJheSwgbGltaXRzU2hhcGU6IG51bWJlcltdLCBkZWx0YXM6IFR5cGVkQXJyYXksXG4gICAgZGVsdGFzU2hhcGU6IG51bWJlcltdKTogW1R5cGVkQXJyYXksIFR5cGVkQXJyYXldIHtcbiAgLy8gQ2hlY2sgaW5wdXQgdGVuc29yIHNoYXBlcy5cbiAgaWYgKHN0YXJ0c1NoYXBlLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0cyBtdXN0IGJlIGEgc2NhbGFyIG9yIHZlY3RvcicpO1xuICB9XG4gIGlmIChsaW1pdHNTaGFwZS5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdsaW1pdHMgbXVzdCBiZSBhIHNjYWxhciBvciB2ZWN0b3InKTtcbiAgfVxuICBpZiAoZGVsdGFzU2hhcGUubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVsdGFzIG11c3QgYmUgYSBzY2FsYXIgb3IgdmVjdG9yJyk7XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgd2hpY2ggdGVuc29ycyB3ZSBuZWVkIHRvIGJyb2FkY2FzdC5cbiAgY29uc3QgYnJvYWRjYXN0U3RhcnRzID0gc3RhcnRzU2hhcGUubGVuZ3RoID09PSAwO1xuICBjb25zdCBicm9hZGNhc3RMaW1pdHMgPSBsaW1pdHNTaGFwZS5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGJyb2FkY2FzdERlbHRhcyA9IGRlbHRhc1NoYXBlLmxlbmd0aCA9PT0gMDtcblxuICAvLyBuUm93cyAobnVtYmVyIG9mIG91dHB1dCByb3dzKSBpcyB0aGUgc2l6ZSBvZiB0aGUgbm9uLWJyb2FkY2FzdCBpbnB1dHMsXG4gIC8vIG9yIDEgaWYgYWxsIGlucHV0cyBhcmUgc2NhbGFycy5cbiAgY29uc3QgaW5TaXplczogbnVtYmVyW10gPSBbXTtcbiAgaWYgKCFicm9hZGNhc3RTdGFydHMpIHtcbiAgICBpblNpemVzLnB1c2goc3RhcnRzU2hhcGVbMF0pO1xuICB9XG4gIGlmICghYnJvYWRjYXN0TGltaXRzKSB7XG4gICAgaW5TaXplcy5wdXNoKGxpbWl0c1NoYXBlWzBdKTtcbiAgfVxuICBpZiAoIWJyb2FkY2FzdERlbHRhcykge1xuICAgIGluU2l6ZXMucHVzaChkZWx0YXNTaGFwZVswXSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGluU2l6ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaW5TaXplc1tpXSAhPT0gaW5TaXplc1tpIC0gMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRzLCBsaW1pdHMsIGFuZCBkZWx0YXMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5Sb3dzID0gaW5TaXplcy5sZW5ndGggPT09IDAgPyAxIDogaW5TaXplc1swXTtcblxuICAvLyBDb25zdHJ1Y3QgdGhlIHJ0TmVzdGVkU3BsaXRzIHRlbnNvci5cbiAgY29uc3QgcnROZXN0ZWRTcGxpdHMgPVxuICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZSgnaW50MzInLCBuUm93cyArIDEpIGFzIFR5cGVkQXJyYXk7XG4gIHJ0TmVzdGVkU3BsaXRzWzBdID0gMDtcbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgblJvd3M7ICsrcm93KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBicm9hZGNhc3RTdGFydHMgPyBzdGFydHNbMF0gOiBzdGFydHNbcm93XTtcbiAgICBjb25zdCBsaW1pdCA9IGJyb2FkY2FzdExpbWl0cyA/IGxpbWl0c1swXSA6IGxpbWl0c1tyb3ddO1xuICAgIGNvbnN0IGRlbHRhID0gYnJvYWRjYXN0RGVsdGFzID8gZGVsdGFzWzBdIDogZGVsdGFzW3Jvd107XG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVzIGRlbHRhICE9IDAnKTtcbiAgICB9XG4gICAgbGV0IHNpemU6IG51bWJlcjsgIC8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS5cbiAgICBpZiAoKChkZWx0YSA+IDApICYmIChsaW1pdCA8IHN0YXJ0KSkgfHwgKChkZWx0YSA8IDApICYmIChsaW1pdCA+IHN0YXJ0KSkpIHtcbiAgICAgIHNpemUgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5jZWlsKE1hdGguYWJzKChsaW1pdCAtIHN0YXJ0KSAvIGRlbHRhKSk7XG5cbiAgICAgIGlmIChzaXplID4gSU5UMzJfTUFYKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWlyZXMgKChsaW1pdCAtIHN0YXJ0KSAvIGRlbHRhKSA8PSAke0lOVDMyX01BWH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcnROZXN0ZWRTcGxpdHNbcm93ICsgMV0gPSBydE5lc3RlZFNwbGl0c1tyb3ddICsgc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG5WYWxzID0gcnROZXN0ZWRTcGxpdHNbblJvd3NdO1xuXG4gIC8vIENvbnN0cnVjdCB0aGUgcnREZW5zZVZhbHVlcyB0ZW5zb3IuXG4gIGNvbnN0IHJ0RGVuc2VWYWx1ZXMgPVxuICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShzdGFydHNEVHlwZSwgblZhbHMpIGFzIFR5cGVkQXJyYXk7XG5cbiAgbGV0IHZhbHVlSW5kZXggPSAwO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBuUm93czsgKytyb3cpIHtcbiAgICBjb25zdCByb3dTaXplID0gcnROZXN0ZWRTcGxpdHNbcm93ICsgMV0gLSBydE5lc3RlZFNwbGl0c1tyb3ddO1xuICAgIGxldCB2YWx1ZSA9IGJyb2FkY2FzdFN0YXJ0cyA/IHN0YXJ0c1swXSA6IHN0YXJ0c1tyb3ddO1xuICAgIGNvbnN0IGRlbHRhID0gYnJvYWRjYXN0RGVsdGFzID8gZGVsdGFzWzBdIDogZGVsdGFzW3Jvd107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dTaXplOyArK2kpIHtcbiAgICAgIHJ0RGVuc2VWYWx1ZXNbdmFsdWVJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgdmFsdWUgKz0gZGVsdGE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtydE5lc3RlZFNwbGl0cywgcnREZW5zZVZhbHVlc107XG59XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, broadcastTo, reshape, tidy, util } from '@tensorflow/tfjs-core';\nvar RowPartitionType = backend_util.RowPartitionType;\n// Based on\n// https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/ragged_tensor_to_tensor_op.cc\nclass RaggedTensorToTensorOp {\n constructor(shape, shapeShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypeStrings) {\n this.shape = shape;\n this.shapeShape = shapeShape;\n this.values = values;\n this.valuesShape = valuesShape;\n this.valuesDType = valuesDType;\n this.defaultValue = defaultValue;\n this.defaultValueShape = defaultValueShape;\n this.rowPartitionValues = rowPartitionValues;\n this.rowPartitionValuesShapes = rowPartitionValuesShapes;\n this.rowPartitionTypes =\n backend_util.getRowPartitionTypesHelper(rowPartitionTypeStrings);\n this.raggedRank = backend_util.getRaggedRank(this.rowPartitionTypes);\n }\n getRowPartitionTypeByDimension(dimension) {\n if (this.rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return this.rowPartitionTypes[dimension + 1];\n }\n else {\n return this.rowPartitionTypes[dimension];\n }\n }\n // Returns the relationship between dimension and dimension + 1.\n getRowPartitionTensor(dimension) {\n if (this.rowPartitionTypes[0] === RowPartitionType.FIRST_DIM_SIZE) {\n return this.rowPartitionValues[dimension + 1];\n }\n else {\n return this.rowPartitionValues[dimension];\n }\n }\n getMaxWidth(dimension) {\n const rowPartitionTensor = this.getRowPartitionTensor(dimension - 1);\n switch (this.getRowPartitionTypeByDimension(dimension - 1)) {\n case RowPartitionType.VALUE_ROWIDS:\n return RaggedTensorToTensorOp.getMaxWidthValueRowID(rowPartitionTensor);\n case RowPartitionType.ROW_SPLITS:\n return RaggedTensorToTensorOp.getMaxWidthRowSplit(rowPartitionTensor);\n default:\n throw new Error(`Cannot handle partition type ${RowPartitionType[this.getRowPartitionTypeByDimension(dimension - 1)]}`);\n }\n }\n static getMaxWidthRowSplit(rowSplit) {\n const tensorLength = rowSplit.length;\n if (tensorLength === 0 || tensorLength === 1) {\n return 0;\n }\n let maxWidth = 0;\n for (let i = 0; i < tensorLength - 1; ++i) {\n const currentWidth = rowSplit[i + 1] - rowSplit[i];\n if (currentWidth > maxWidth) {\n maxWidth = currentWidth;\n }\n }\n return maxWidth;\n }\n static getMaxWidthValueRowID(valueRowIds) {\n const indexLength = valueRowIds.length;\n if (indexLength === 0) {\n return 0;\n }\n let firstEqualIndex = 0;\n let firstEqualIndexValue = valueRowIds[0];\n let maxWidth = 0;\n for (let i = 1; i < indexLength; ++i) {\n const value = valueRowIds[i];\n if (value !== firstEqualIndexValue) {\n firstEqualIndexValue = value;\n maxWidth = Math.max(i - firstEqualIndex, maxWidth);\n firstEqualIndex = i;\n }\n }\n return Math.max(indexLength - firstEqualIndex, maxWidth);\n }\n tensorShapeFromTensor(t, tShape, isPartial = true) {\n if (tShape.length === 0) {\n if (t[0] === -1) {\n return [];\n }\n throw new Error(`The only valid scalar shape tensor is the fully unknown shape specified as -1.`);\n }\n // MakePartialShape/MakeShapeHelper.\n return makeShape(t, isPartial);\n }\n calculateOutputSize(firstDim) {\n const valueShape = this.valuesShape;\n const defaultValueShape = this.defaultValueShape;\n backend_util.validateDefaultValueShape(defaultValueShape, valueShape);\n const shape = this.tensorShapeFromTensor(this.shape, this.shapeShape);\n const outputShape = backend_util.combineRaggedTensorToTensorShapes(this.raggedRank, shape, valueShape);\n const result = outputShape;\n if (result[0] < 0) {\n result[0] = firstDim;\n }\n for (let i = 1; i <= this.raggedRank; ++i) {\n if (result[i] < 0) {\n result[i] = this.getMaxWidth(i);\n }\n }\n return result;\n }\n /**\n * The outputIndex represents the index in the output tensor\n * where the first element of a particular dimension would be written.\n * If it is -1, it indicates that the index is out of scope.\n * Example, given firstDimension = 10, firstDimensionOutput = 6,\n * and outputIndexMultiplier = 100:\n * result = [0 100 200 300 400 500 -1 -1 -1 -1]\n * If firstDimensionOutput = 11 instead, then:\n * result = [0 100 200 300 400 500 600 700 800 900]\n */\n calculateFirstParentOutputIndex(firstDimension, outputIndexMultiplier, firstDimensionOutput) {\n const minDimension = Math.min(firstDimension, firstDimensionOutput);\n const result = [];\n let currentOutputIndex = 0;\n for (let i = 0; i < minDimension; ++i, currentOutputIndex += outputIndexMultiplier) {\n result.push(currentOutputIndex);\n }\n for (let i = minDimension; i < firstDimension; ++i) {\n result.push(-1);\n }\n util.assert(result.length === firstDimension, () => 'Final length of result must be equal to firstDimension.');\n return result;\n }\n calculateOutputIndexRowSplit(rowSplit, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const rowSplitSize = rowSplit.length;\n const result = [];\n for (let i = 0; i < rowSplitSize - 1; ++i) {\n const rowLength = rowSplit[i + 1] - rowSplit[i];\n let realLength = Math.min(outputSize, rowLength);\n let parentOutputIndexCurrent = parentOutputIndex[i];\n if (parentOutputIndexCurrent === -1) {\n realLength = 0;\n }\n for (let j = 0; j < realLength; ++j) {\n result.push(parentOutputIndexCurrent);\n parentOutputIndexCurrent += outputIndexMultiplier;\n }\n for (let j = 0; j < rowLength - realLength; ++j) {\n result.push(-1);\n }\n }\n if (rowSplitSize > 0 && result.length !== rowSplit[rowSplitSize - 1]) {\n throw new Error('Invalid row split size.');\n }\n return result;\n }\n // Calculate the output index of the first element of a list.\n // The parentOutputIndex is the same computation for the previous list.\n // -1 indicates an element or list that is out of range.\n // The outputIndexMultiplier is the number of output indices one moves\n // forward for each column.\n // E.g., given:\n // valueRowIds:[0 1 2 2 2 3 5 5 6]\n // parentOutputIndex:[1000 1100 2000 2100 -1 3000 4000]\n // outputIndexMultiplier: 10\n // outputSize: 2\n // You get:\n // result = [1000 1100 2000 2010 -1 2100 -1 -1 3000]\n // result[0] = parentOutputIndex[valueRowIds[0]]\n // result[1] = parentOutputIndex[valueRowIds[1]]\n // result[2] = parentOutputIndex[valueRowIds[2]]\n // result[3] = parentOutputIndex[valueRowIds[2] + 10]\n // result[4] = -1 because it is the third element the size is 2.\n // result[5] = parentOutputIndex[valueRowIds[3]]\n // result[6] = -1 because parentOutputIndex[valueRowIds[6]] == -1\n // result[7] = -1 because parentOutputIndex[valueRowIds[6]] == -1\n // result[8] = parentOutputIndex[valueRowIds[7]]\n calculateOutputIndexValueRowID(valueRowIds, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const indexSize = valueRowIds.length;\n const result = [];\n if (indexSize === 0) {\n return [];\n }\n let currentOutputColumn = 0;\n let currentValueRowId = valueRowIds[0];\n if (currentValueRowId >= parentOutputIndex.length) {\n throw new Error(`Got currentValueRowId=${currentValueRowId}, which is not less than ${parentOutputIndex.length}`);\n }\n let currentOutputIndex = parentOutputIndex[currentValueRowId];\n result.push(currentOutputIndex);\n for (let i = 1; i < indexSize; ++i) {\n const nextValueRowId = valueRowIds[i];\n if (nextValueRowId === currentValueRowId) {\n if (currentOutputIndex >= 0) {\n ++currentOutputColumn;\n if (currentOutputColumn < outputSize) {\n currentOutputIndex += outputIndexMultiplier;\n }\n else {\n currentOutputIndex = -1;\n }\n }\n }\n else {\n currentOutputColumn = 0;\n currentValueRowId = nextValueRowId;\n if (nextValueRowId >= parentOutputIndex.length) {\n throw new Error(`Got nextValueRowId=${nextValueRowId} which is not less than ${parentOutputIndex.length}`);\n }\n currentOutputIndex = parentOutputIndex[nextValueRowId];\n }\n result.push(currentOutputIndex);\n }\n if (result.length !== valueRowIds.length) {\n throw new Error('Invalid row ids.');\n }\n return result;\n }\n calculateOutputIndex(dimension, parentOutputIndex, outputIndexMultiplier, outputSize) {\n const rowPartitionTensor = this.getRowPartitionTensor(dimension);\n const partitionType = this.getRowPartitionTypeByDimension(dimension);\n switch (partitionType) {\n case RowPartitionType.VALUE_ROWIDS:\n return this.calculateOutputIndexValueRowID(rowPartitionTensor, parentOutputIndex, outputIndexMultiplier, outputSize);\n case RowPartitionType.ROW_SPLITS:\n if (rowPartitionTensor.length - 1 > parentOutputIndex.length) {\n throw new Error(`Row partition size is greater than output size: ${rowPartitionTensor.length - 1} > ${parentOutputIndex.length}`);\n }\n return this.calculateOutputIndexRowSplit(rowPartitionTensor, parentOutputIndex, outputIndexMultiplier, outputSize);\n default:\n throw new Error(`Unsupported partition type: ${RowPartitionType[partitionType]}`);\n }\n }\n getFirstDimensionSize() {\n const firstPartitionTensor = this.rowPartitionValues[0];\n if (this.rowPartitionTypes.length === 0) {\n throw new Error('No row_partition_types given.');\n }\n const firstPartitionType = this.rowPartitionTypes[0];\n switch (firstPartitionType) {\n case RowPartitionType.FIRST_DIM_SIZE:\n return firstPartitionTensor[0];\n case RowPartitionType.VALUE_ROWIDS:\n throw new Error('Cannot handle VALUE_ROWIDS in first dimension.');\n case RowPartitionType.ROW_SPLITS:\n return this.rowPartitionValuesShapes[0][0] - 1;\n default:\n throw new Error(`Cannot handle type ${RowPartitionType[firstPartitionType]}`);\n }\n }\n compute() {\n const firstPartitionTensor = this.rowPartitionValues[0];\n if (firstPartitionTensor.length <= 0) {\n throw new Error('Invalid first partition input. ' +\n 'Tensor requires at least one element.');\n }\n const firstDimension = this.getFirstDimensionSize();\n const outputSize = this.calculateOutputSize(firstDimension);\n const multiplier = new Array(this.raggedRank + 1);\n multiplier[multiplier.length - 1] = 1;\n for (let i = multiplier.length - 2; i >= 0; --i) {\n multiplier[i] = multiplier[i + 1] * outputSize[i + 1];\n }\n // Full size of the tensor.\n const outputShape = makeShape(outputSize, false);\n const outputTensor = util.getArrayFromDType(this.valuesDType, util.sizeFromShape(outputShape));\n const fullSize = multiplier[0] * outputSize[0];\n if (fullSize > 0) {\n let outputIndex = this.calculateFirstParentOutputIndex(firstDimension, multiplier[0], outputSize[0]);\n for (let i = 1; i <= this.raggedRank; ++i) {\n const newOutputIndex = this.calculateOutputIndex(i - 1, outputIndex, multiplier[i], outputSize[i]);\n outputIndex = newOutputIndex;\n }\n this.setOutput(this.raggedRank, outputIndex, outputTensor, outputShape);\n }\n return [outputShape, outputTensor];\n }\n setOutput(raggedRank, outputIndex, outputTensor, outputShape) {\n if (outputTensor.length === 0) {\n return;\n }\n const valuesBase = this.values;\n const outputBase = outputTensor;\n let elementShape = outputShape.slice();\n elementShape = elementShape.slice(raggedRank + 1);\n const valueElementSize = util.sizeFromShape(elementShape);\n const outputIndexSize = outputIndex.length;\n // Broadcast the default value to value_element_size. (We can skip this\n // if defaultValueTensor.size == 1, since we use fill when that's true.)\n let defaultValue = this.defaultValue;\n if (defaultValue.length !== valueElementSize && defaultValue.length !== 1) {\n const srcShape = this.defaultValueShape;\n tidy(() => {\n const defaultValueTensor = reshape(defaultValue, srcShape);\n const bCastDefault = broadcastTo(defaultValueTensor, elementShape);\n defaultValue = bCastDefault.dataSync();\n });\n }\n // Loop through the outputIndex array, finding contiguous regions that\n // should be copied. Once we find the end of a contiguous region, copy it\n // and add any necessary padding (with defaultValue).\n let srcStart = 0; // Start of contiguous region (in values)\n let dstStart = 0; // Destination for contiguous region (in output)\n let dstEnd = 0; // Destination for contiguous region (in output)\n for (let srcI = 0; srcI <= outputIndexSize; ++srcI) {\n // dstI is the destination where the value at srcI should be copied.\n let dstI = srcI < outputIndexSize ? outputIndex[srcI] : -1;\n // If we're still in a contiguous region, then update dstEnd go to the\n // next srcI.\n if (dstI === dstEnd) {\n ++dstEnd;\n continue;\n }\n // We found the end of contiguous region. This can be because we found\n // a gap (dstI > dstEnd), or a source value that shouldn't be copied\n // because it's out-of-bounds (dstI == -1), or the end of the tensor\n // (dstI === -1).\n if (dstStart < dstEnd) {\n // Copy the contiguous region.\n const src = valuesBase.subarray(srcStart * valueElementSize);\n const dst = outputBase.subarray(dstStart * valueElementSize);\n const nVals = (dstEnd - dstStart) * valueElementSize;\n copyArray(dst, src, nVals);\n }\n // Add any necessary padding (w/ defaultValue).\n if (srcI >= outputIndexSize) {\n // We reached the end of values: pad to the end of output.\n const outputSize = outputTensor.length;\n dstI = Math.floor(outputSize / valueElementSize);\n }\n if (dstI > dstEnd) {\n if (this.defaultValue.length === 1) {\n outputBase\n .subarray(dstEnd * valueElementSize, dstI * valueElementSize)\n .fill(this.defaultValue[0]);\n dstEnd = dstI;\n }\n else {\n while (dstI > dstEnd) {\n const dst = outputBase.slice(dstEnd * valueElementSize);\n copyArray(dst, defaultValue, valueElementSize);\n ++dstEnd;\n }\n }\n }\n // Update indices.\n if (dstI < 0) {\n // srcI should be skipped -- leave it out of the contiguous region.\n srcStart = srcI + 1;\n dstStart = dstEnd;\n }\n else {\n // srcI should be copied -- include it in the contiguous region.\n srcStart = srcI;\n dstStart = dstEnd;\n dstEnd = dstStart + 1;\n }\n }\n }\n}\nfunction copyArray(dst, src, size) {\n for (let i = 0; i < size; i++) {\n dst[i] = src[i];\n }\n}\nfunction makeShape(shape, isPartial) {\n const out = [];\n for (let dim of shape) {\n if (dim < 0) {\n if (!isPartial) {\n throw new Error(`Dimension ${dim} must be >= 0`);\n }\n if (dim < -1) {\n throw new Error(`Dimension ${dim} must be >= -1`);\n }\n dim = -1;\n }\n out.push(dim);\n }\n return out;\n}\nexport function raggedTensorToTensorImpl(shape, shapesShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes) {\n return new RaggedTensorToTensorOp(shape, shapesShape, values, valuesShape, valuesDType, defaultValue, defaultValueShape, rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes)\n .compute();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkVGVuc29yVG9UZW5zb3JfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFnZ2VkVGVuc29yVG9UZW5zb3JfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBWSxPQUFPLEVBQUUsSUFBSSxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTNHLElBQU8sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDO0FBQ3hELFdBQVc7QUFDWCw2R0FBNkc7QUFDN0csTUFBTSxzQkFBc0I7SUFHMUIsWUFDWSxLQUFpQixFQUFVLFVBQW9CLEVBQy9DLE1BQWtCLEVBQVUsV0FBcUIsRUFDakQsV0FBcUIsRUFBVSxZQUF3QixFQUN2RCxpQkFBMkIsRUFDbEIsa0JBQWdDLEVBQ2hDLHdCQUFvQyxFQUNyRCx1QkFBaUM7UUFOekIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVU7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQ2pELGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQVk7UUFDdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFVO1FBQ2xCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBYztRQUNoQyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQVk7UUFFdkQsSUFBSSxDQUFDLGlCQUFpQjtZQUNsQixZQUFZLENBQUMsMEJBQTBCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJ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QUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsS0FBaUIsRUFBRSxXQUFxQixFQUFFLE1BQWtCLEVBQzVELFdBQXFCLEVBQUUsV0FBcUIsRUFBRSxZQUF3QixFQUN0RSxpQkFBMkIsRUFBRSxrQkFBZ0MsRUFDN0Qsd0JBQW9DLEVBQ3BDLGlCQUEyQjtJQUM3QixPQUFPLElBQUksc0JBQXNCLENBQ3RCLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUNsRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFDL0QsaUJBQWlCLENBQUM7U0FDeEIsT0FBTyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIGJyb2FkY2FzdFRvLCBEYXRhVHlwZSwgcmVzaGFwZSwgdGlkeSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IFJvd1BhcnRpdGlvblR5cGUgPSBiYWNrZW5kX3V0aWwuUm93UGFydGl0aW9uVHlwZTtcbi8vIEJhc2VkIG9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvbWFzdGVyL3RlbnNvcmZsb3cvY29yZS9rZXJuZWxzL3JhZ2dlZF90ZW5zb3JfdG9fdGVuc29yX29wLmNjXG5jbGFzcyBSYWdnZWRUZW5zb3JUb1RlbnNvck9wIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dQYXJ0aXRpb25UeXBlczogUm93UGFydGl0aW9uVHlwZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJhZ2dlZFJhbms6IG51bWJlcjtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHNoYXBlOiBUeXBlZEFycmF5LCBwcml2YXRlIHNoYXBlU2hhcGU6IG51bWJlcltdLFxuICAgICAgcHJpdmF0ZSB2YWx1ZXM6IFR5cGVkQXJyYXksIHByaXZhdGUgdmFsdWVzU2hhcGU6IG51bWJlcltdLFxuICAgICAgcHJpdmF0ZSB2YWx1ZXNEVHlwZTogRGF0YVR5cGUsIHByaXZhdGUgZGVmYXVsdFZhbHVlOiBUeXBlZEFycmF5LFxuICAgICAgcHJpdmF0ZSBkZWZhdWx0VmFsdWVTaGFwZTogbnVtYmVyW10sXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHJvd1BhcnRpdGlvblZhbHVlczogVHlwZWRBcnJheVtdLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSByb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXM6IG51bWJlcltdW10sXG4gICAgICByb3dQYXJ0aXRpb25UeXBlU3RyaW5nczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnJvd1BhcnRpdGlvblR5cGVzID1cbiAgICAgICAgYmFja2VuZF91dGlsLmdldFJvd1BhcnRpdGlvblR5cGVzSGVscGVyKHJvd1BhcnRpdGlvblR5cGVTdHJpbmdzKTtcbiAgICB0aGlzLnJhZ2dlZFJhbmsgPSBiYWNrZW5kX3V0aWwuZ2V0UmFnZ2VkUmFuayh0aGlzLnJvd1BhcnRpdGlvblR5cGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93UGFydGl0aW9uVHlwZUJ5RGltZW5zaW9uKGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucm93UGFydGl0aW9uVHlwZXNbMF0gPT09IFJvd1BhcnRpdGlvblR5cGUuRklSU1RfRElNX1NJWkUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvd1BhcnRpdGlvblR5cGVzW2RpbWVuc2lvbiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25UeXBlc1tkaW1lbnNpb25dO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpbWVuc2lvbiBhbmQgZGltZW5zaW9uICsgMS5cbiAgcHJpdmF0ZSBnZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5yb3dQYXJ0aXRpb25UeXBlc1swXSA9PT0gUm93UGFydGl0aW9uVHlwZS5GSVJTVF9ESU1fU0laRSkge1xuICAgICAgcmV0dXJuIHRoaXMucm93UGFydGl0aW9uVmFsdWVzW2RpbWVuc2lvbiArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNbZGltZW5zaW9uXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1heFdpZHRoKGRpbWVuc2lvbjogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93UGFydGl0aW9uVGVuc29yID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uIC0gMSk7XG4gICAgc3dpdGNoICh0aGlzLmdldFJvd1BhcnRpdGlvblR5cGVCeURpbWVuc2lvbihkaW1lbnNpb24gLSAxKSkge1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLlZBTFVFX1JPV0lEUzpcbiAgICAgICAgcmV0dXJuIFJhZ2dlZFRlbnNvclRvVGVuc29yT3AuZ2V0TWF4V2lkdGhWYWx1ZVJvd0lEKHJvd1BhcnRpdGlvblRlbnNvcik7XG4gICAgICBjYXNlIFJvd1BhcnRpdGlvblR5cGUuUk9XX1NQTElUUzpcbiAgICAgICAgcmV0dXJuIFJhZ2dlZFRlbnNvclRvVGVuc29yT3AuZ2V0TWF4V2lkdGhSb3dTcGxpdChyb3dQYXJ0aXRpb25UZW5zb3IpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGFuZGxlIHBhcnRpdGlvbiB0eXBlICR7XG4gICAgICAgICAgICBSb3dQYXJ0aXRpb25UeXBlW3RoaXMuZ2V0Um93UGFydGl0aW9uVHlwZUJ5RGltZW5zaW9uKFxuICAgICAgICAgICAgICAgIGRpbWVuc2lvbiAtIDEpXX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF4V2lkdGhSb3dTcGxpdChyb3dTcGxpdDogVHlwZWRBcnJheSkge1xuICAgIGNvbnN0IHRlbnNvckxlbmd0aCA9IHJvd1NwbGl0Lmxlbmd0aDtcbiAgICBpZiAodGVuc29yTGVuZ3RoID09PSAwIHx8IHRlbnNvckxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW5zb3JMZW5ndGggLSAxOyArK2kpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IHJvd1NwbGl0W2kgKyAxXSAtIHJvd1NwbGl0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4V2lkdGg7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWF4V2lkdGhWYWx1ZVJvd0lEKHZhbHVlUm93SWRzOiBUeXBlZEFycmF5KSB7XG4gICAgY29uc3QgaW5kZXhMZW5ndGggPSB2YWx1ZVJvd0lkcy5sZW5ndGg7XG4gICAgaWYgKGluZGV4TGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGZpcnN0RXF1YWxJbmRleCA9IDA7XG4gICAgbGV0IGZpcnN0RXF1YWxJbmRleFZhbHVlID0gdmFsdWVSb3dJZHNbMF07XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4TGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVSb3dJZHNbaV07XG4gICAgICBpZiAodmFsdWUgIT09IGZpcnN0RXF1YWxJbmRleFZhbHVlKSB7XG4gICAgICAgIGZpcnN0RXF1YWxJbmRleFZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgoaSAtIGZpcnN0RXF1YWxJbmRleCwgbWF4V2lkdGgpO1xuICAgICAgICBmaXJzdEVxdWFsSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgoaW5kZXhMZW5ndGggLSBmaXJzdEVxdWFsSW5kZXgsIG1heFdpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVuc29yU2hhcGVGcm9tVGVuc29yKFxuICAgICAgdDogVHlwZWRBcnJheSwgdFNoYXBlOiBudW1iZXJbXSwgaXNQYXJ0aWFsID0gdHJ1ZSkge1xuICAgIGlmICh0U2hhcGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodFswXSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgb25seSB2YWxpZCBzY2FsYXIgc2hhcGUgdGVuc29yIGlzIHRoZSBmdWxseSB1bmtub3duIHNoYXBlIHNwZWNpZmllZCBhcyAtMS5gKTtcbiAgICB9XG4gICAgLy8gTWFrZVBhcnRpYWxTaGFwZS9NYWtlU2hhcGVIZWxwZXIuXG4gICAgcmV0dXJuIG1ha2VTaGFwZSh0LCBpc1BhcnRpYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVPdXRwdXRTaXplKGZpcnN0RGltOiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZVNoYXBlID0gdGhpcy52YWx1ZXNTaGFwZTtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVTaGFwZSA9IHRoaXMuZGVmYXVsdFZhbHVlU2hhcGU7XG5cbiAgICBiYWNrZW5kX3V0aWwudmFsaWRhdGVEZWZhdWx0VmFsdWVTaGFwZShkZWZhdWx0VmFsdWVTaGFwZSwgdmFsdWVTaGFwZSk7XG5cbiAgICBjb25zdCBzaGFwZSA9IHRoaXMudGVuc29yU2hhcGVGcm9tVGVuc29yKHRoaXMuc2hhcGUsIHRoaXMuc2hhcGVTaGFwZSk7XG4gICAgY29uc3Qgb3V0cHV0U2hhcGUgPSBiYWNrZW5kX3V0aWwuY29tYmluZVJhZ2dlZFRlbnNvclRvVGVuc29yU2hhcGVzKFxuICAgICAgICB0aGlzLnJhZ2dlZFJhbmssIHNoYXBlLCB2YWx1ZVNoYXBlKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG91dHB1dFNoYXBlO1xuXG4gICAgaWYgKHJlc3VsdFswXSA8IDApIHtcbiAgICAgIHJlc3VsdFswXSA9IGZpcnN0RGltO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnJhZ2dlZFJhbms7ICsraSkge1xuICAgICAgaWYgKHJlc3VsdFtpXSA8IDApIHtcbiAgICAgICAgcmVzdWx0W2ldID0gdGhpcy5nZXRNYXhXaWR0aChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRJbmRleCByZXByZXNlbnRzIHRoZSBpbmRleCBpbiB0aGUgb3V0cHV0IHRlbnNvclxuICAgKiB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHBhcnRpY3VsYXIgZGltZW5zaW9uIHdvdWxkIGJlIHdyaXR0ZW4uXG4gICAqIElmIGl0IGlzIC0xLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5kZXggaXMgb3V0IG9mIHNjb3BlLlxuICAgKiBFeGFtcGxlLCBnaXZlbiBmaXJzdERpbWVuc2lvbiA9IDEwLCBmaXJzdERpbWVuc2lvbk91dHB1dCA9IDYsXG4gICAqIGFuZCBvdXRwdXRJbmRleE11bHRpcGxpZXIgPSAxMDA6XG4gICAqIHJlc3VsdCA9IFswIDEwMCAyMDAgMzAwIDQwMCA1MDAgLTEgLTEgLTEgLTFdXG4gICAqIElmIGZpcnN0RGltZW5zaW9uT3V0cHV0ID0gMTEgaW5zdGVhZCwgdGhlbjpcbiAgICogcmVzdWx0ID0gWzAgMTAwIDIwMCAzMDAgNDAwIDUwMCA2MDAgNzAwIDgwMCA5MDBdXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUZpcnN0UGFyZW50T3V0cHV0SW5kZXgoXG4gICAgICBmaXJzdERpbWVuc2lvbjogbnVtYmVyLCBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlcixcbiAgICAgIGZpcnN0RGltZW5zaW9uT3V0cHV0OiBudW1iZXIpIHtcbiAgICBjb25zdCBtaW5EaW1lbnNpb24gPSBNYXRoLm1pbihmaXJzdERpbWVuc2lvbiwgZmlyc3REaW1lbnNpb25PdXRwdXQpO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgY3VycmVudE91dHB1dEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbkRpbWVuc2lvbjtcbiAgICAgICAgICsraSwgY3VycmVudE91dHB1dEluZGV4ICs9IG91dHB1dEluZGV4TXVsdGlwbGllcikge1xuICAgICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IG1pbkRpbWVuc2lvbjsgaSA8IGZpcnN0RGltZW5zaW9uOyArK2kpIHtcbiAgICAgIHJlc3VsdC5wdXNoKC0xKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIHJlc3VsdC5sZW5ndGggPT09IGZpcnN0RGltZW5zaW9uLFxuICAgICAgICAoKSA9PiAnRmluYWwgbGVuZ3RoIG9mIHJlc3VsdCBtdXN0IGJlIGVxdWFsIHRvIGZpcnN0RGltZW5zaW9uLicpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlT3V0cHV0SW5kZXhSb3dTcGxpdChcbiAgICAgIHJvd1NwbGl0OiBUeXBlZEFycmF5LCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93U3BsaXRTaXplID0gcm93U3BsaXQubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd1NwbGl0U2l6ZSAtIDE7ICsraSkge1xuICAgICAgY29uc3Qgcm93TGVuZ3RoID0gcm93U3BsaXRbaSArIDFdIC0gcm93U3BsaXRbaV07XG4gICAgICBsZXQgcmVhbExlbmd0aCA9IE1hdGgubWluKG91dHB1dFNpemUsIHJvd0xlbmd0aCk7XG4gICAgICBsZXQgcGFyZW50T3V0cHV0SW5kZXhDdXJyZW50ID0gcGFyZW50T3V0cHV0SW5kZXhbaV07XG5cbiAgICAgIGlmIChwYXJlbnRPdXRwdXRJbmRleEN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIHJlYWxMZW5ndGggPSAwO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWFsTGVuZ3RoOyArK2opIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGFyZW50T3V0cHV0SW5kZXhDdXJyZW50KTtcbiAgICAgICAgcGFyZW50T3V0cHV0SW5kZXhDdXJyZW50ICs9IG91dHB1dEluZGV4TXVsdGlwbGllcjtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93TGVuZ3RoIC0gcmVhbExlbmd0aDsgKytqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJvd1NwbGl0U2l6ZSA+IDAgJiYgcmVzdWx0Lmxlbmd0aCAhPT0gcm93U3BsaXRbcm93U3BsaXRTaXplIC0gMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb3cgc3BsaXQgc2l6ZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBvdXRwdXQgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICAvLyBUaGUgcGFyZW50T3V0cHV0SW5kZXggaXMgdGhlIHNhbWUgY29tcHV0YXRpb24gZm9yIHRoZSBwcmV2aW91cyBsaXN0LlxuICAvLyAtMSBpbmRpY2F0ZXMgYW4gZWxlbWVudCBvciBsaXN0IHRoYXQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyBUaGUgb3V0cHV0SW5kZXhNdWx0aXBsaWVyIGlzIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGluZGljZXMgb25lIG1vdmVzXG4gIC8vIGZvcndhcmQgZm9yIGVhY2ggY29sdW1uLlxuICAvLyBFLmcuLCBnaXZlbjpcbiAgLy8gdmFsdWVSb3dJZHM6WzAgMSAyIDIgMiAzIDUgNSA2XVxuICAvLyBwYXJlbnRPdXRwdXRJbmRleDpbMTAwMCAxMTAwIDIwMDAgMjEwMCAtMSAzMDAwIDQwMDBdXG4gIC8vIG91dHB1dEluZGV4TXVsdGlwbGllcjogMTBcbiAgLy8gb3V0cHV0U2l6ZTogMlxuICAvLyBZb3UgZ2V0OlxuICAvLyByZXN1bHQgPSBbMTAwMCAxMTAwIDIwMDAgMjAxMCAtMSAyMTAwIC0xIC0xIDMwMDBdXG4gIC8vIHJlc3VsdFswXSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzBdXVxuICAvLyByZXN1bHRbMV0gPSBwYXJlbnRPdXRwdXRJbmRleFt2YWx1ZVJvd0lkc1sxXV1cbiAgLy8gcmVzdWx0WzJdID0gcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbMl1dXG4gIC8vIHJlc3VsdFszXSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzJdICsgMTBdXG4gIC8vIHJlc3VsdFs0XSA9IC0xIGJlY2F1c2UgaXQgaXMgdGhlIHRoaXJkIGVsZW1lbnQgdGhlIHNpemUgaXMgMi5cbiAgLy8gcmVzdWx0WzVdID0gcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbM11dXG4gIC8vIHJlc3VsdFs2XSA9IC0xIGJlY2F1c2UgcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbNl1dID09IC0xXG4gIC8vIHJlc3VsdFs3XSA9IC0xIGJlY2F1c2UgcGFyZW50T3V0cHV0SW5kZXhbdmFsdWVSb3dJZHNbNl1dID09IC0xXG4gIC8vIHJlc3VsdFs4XSA9IHBhcmVudE91dHB1dEluZGV4W3ZhbHVlUm93SWRzWzddXVxuICBwcml2YXRlIGNhbGN1bGF0ZU91dHB1dEluZGV4VmFsdWVSb3dJRChcbiAgICAgIHZhbHVlUm93SWRzOiBUeXBlZEFycmF5LCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgaW5kZXhTaXplID0gdmFsdWVSb3dJZHMubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW10gPSBbXTtcbiAgICBpZiAoaW5kZXhTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRPdXRwdXRDb2x1bW4gPSAwO1xuICAgIGxldCBjdXJyZW50VmFsdWVSb3dJZCA9IHZhbHVlUm93SWRzWzBdO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZVJvd0lkID49IHBhcmVudE91dHB1dEluZGV4Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgY3VycmVudFZhbHVlUm93SWQ9JHtjdXJyZW50VmFsdWVSb3dJZH0sIHdoaWNoIGlzIG5vdCBsZXNzIHRoYW4gJHtcbiAgICAgICAgICAgICAgcGFyZW50T3V0cHV0SW5kZXgubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50T3V0cHV0SW5kZXggPSBwYXJlbnRPdXRwdXRJbmRleFtjdXJyZW50VmFsdWVSb3dJZF07XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4U2l6ZTsgKytpKSB7XG4gICAgICBjb25zdCBuZXh0VmFsdWVSb3dJZCA9IHZhbHVlUm93SWRzW2ldO1xuICAgICAgaWYgKG5leHRWYWx1ZVJvd0lkID09PSBjdXJyZW50VmFsdWVSb3dJZCkge1xuICAgICAgICBpZiAoY3VycmVudE91dHB1dEluZGV4ID49IDApIHtcbiAgICAgICAgICArK2N1cnJlbnRPdXRwdXRDb2x1bW47XG4gICAgICAgICAgaWYgKGN1cnJlbnRPdXRwdXRDb2x1bW4gPCBvdXRwdXRTaXplKSB7XG4gICAgICAgICAgICBjdXJyZW50T3V0cHV0SW5kZXggKz0gb3V0cHV0SW5kZXhNdWx0aXBsaWVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50T3V0cHV0SW5kZXggPSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRPdXRwdXRDb2x1bW4gPSAwO1xuICAgICAgICBjdXJyZW50VmFsdWVSb3dJZCA9IG5leHRWYWx1ZVJvd0lkO1xuXG4gICAgICAgIGlmIChuZXh0VmFsdWVSb3dJZCA+PSBwYXJlbnRPdXRwdXRJbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBHb3QgbmV4dFZhbHVlUm93SWQ9JHtuZXh0VmFsdWVSb3dJZH0gd2hpY2ggaXMgbm90IGxlc3MgdGhhbiAke1xuICAgICAgICAgICAgICAgICAgcGFyZW50T3V0cHV0SW5kZXgubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudE91dHB1dEluZGV4ID0gcGFyZW50T3V0cHV0SW5kZXhbbmV4dFZhbHVlUm93SWRdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goY3VycmVudE91dHB1dEluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCAhPT0gdmFsdWVSb3dJZHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm93IGlkcy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVPdXRwdXRJbmRleChcbiAgICAgIGRpbWVuc2lvbjogbnVtYmVyLCBwYXJlbnRPdXRwdXRJbmRleDogbnVtYmVyW10sXG4gICAgICBvdXRwdXRJbmRleE11bHRpcGxpZXI6IG51bWJlciwgb3V0cHV0U2l6ZTogbnVtYmVyKSB7XG4gICAgY29uc3Qgcm93UGFydGl0aW9uVGVuc29yID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UZW5zb3IoZGltZW5zaW9uKTtcbiAgICBjb25zdCBwYXJ0aXRpb25UeXBlID0gdGhpcy5nZXRSb3dQYXJ0aXRpb25UeXBlQnlEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICBzd2l0Y2ggKHBhcnRpdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgUm93UGFydGl0aW9uVHlwZS5WQUxVRV9ST1dJRFM6XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZU91dHB1dEluZGV4VmFsdWVSb3dJRChcbiAgICAgICAgICAgIHJvd1BhcnRpdGlvblRlbnNvciwgcGFyZW50T3V0cHV0SW5kZXgsIG91dHB1dEluZGV4TXVsdGlwbGllcixcbiAgICAgICAgICAgIG91dHB1dFNpemUpO1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLlJPV19TUExJVFM6XG4gICAgICAgIGlmIChyb3dQYXJ0aXRpb25UZW5zb3IubGVuZ3RoIC0gMSA+IHBhcmVudE91dHB1dEluZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IHBhcnRpdGlvbiBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvdXRwdXQgc2l6ZTogJHtcbiAgICAgICAgICAgICAgcm93UGFydGl0aW9uVGVuc29yLmxlbmd0aCAtIDF9ID4gJHtwYXJlbnRPdXRwdXRJbmRleC5sZW5ndGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlT3V0cHV0SW5kZXhSb3dTcGxpdChcbiAgICAgICAgICAgIHJvd1BhcnRpdGlvblRlbnNvciwgcGFyZW50T3V0cHV0SW5kZXgsIG91dHB1dEluZGV4TXVsdGlwbGllcixcbiAgICAgICAgICAgIG91dHB1dFNpemUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHBhcnRpdGlvbiB0eXBlOiAke1Jvd1BhcnRpdGlvblR5cGVbcGFydGl0aW9uVHlwZV19YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXJzdERpbWVuc2lvblNpemUoKSB7XG4gICAgY29uc3QgZmlyc3RQYXJ0aXRpb25UZW5zb3IgPSB0aGlzLnJvd1BhcnRpdGlvblZhbHVlc1swXTtcbiAgICBpZiAodGhpcy5yb3dQYXJ0aXRpb25UeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcm93X3BhcnRpdGlvbl90eXBlcyBnaXZlbi4nKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RQYXJ0aXRpb25UeXBlID0gdGhpcy5yb3dQYXJ0aXRpb25UeXBlc1swXTtcbiAgICBzd2l0Y2ggKGZpcnN0UGFydGl0aW9uVHlwZSkge1xuICAgICAgY2FzZSBSb3dQYXJ0aXRpb25UeXBlLkZJUlNUX0RJTV9TSVpFOlxuICAgICAgICByZXR1cm4gZmlyc3RQYXJ0aXRpb25UZW5zb3JbMF07XG4gICAgICBjYXNlIFJvd1BhcnRpdGlvblR5cGUuVkFMVUVfUk9XSURTOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYW5kbGUgVkFMVUVfUk9XSURTIGluIGZpcnN0IGRpbWVuc2lvbi4nKTtcbiAgICAgIGNhc2UgUm93UGFydGl0aW9uVHlwZS5ST1dfU1BMSVRTOlxuICAgICAgICByZXR1cm4gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXNbMF1bMF0gLSAxO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBoYW5kbGUgdHlwZSAke1Jvd1BhcnRpdGlvblR5cGVbZmlyc3RQYXJ0aXRpb25UeXBlXX1gKTtcbiAgICB9XG4gIH1cblxuICBjb21wdXRlKCk6IFtudW1iZXJbXSwgVHlwZWRBcnJheV0ge1xuICAgIGNvbnN0IGZpcnN0UGFydGl0aW9uVGVuc29yID0gdGhpcy5yb3dQYXJ0aXRpb25WYWx1ZXNbMF07XG4gICAgaWYgKGZpcnN0UGFydGl0aW9uVGVuc29yLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgZmlyc3QgcGFydGl0aW9uIGlucHV0LiAnICtcbiAgICAgICAgICAnVGVuc29yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBlbGVtZW50LicpO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdERpbWVuc2lvbiA9IHRoaXMuZ2V0Rmlyc3REaW1lbnNpb25TaXplKCk7XG4gICAgY29uc3Qgb3V0cHV0U2l6ZSA9IHRoaXMuY2FsY3VsYXRlT3V0cHV0U2l6ZShmaXJzdERpbWVuc2lvbik7XG4gICAgY29uc3QgbXVsdGlwbGllcjogbnVtYmVyW10gPSBuZXcgQXJyYXkodGhpcy5yYWdnZWRSYW5rICsgMSk7XG5cbiAgICBtdWx0aXBsaWVyW211bHRpcGxpZXIubGVuZ3RoIC0gMV0gPSAxO1xuICAgIGZvciAobGV0IGkgPSBtdWx0aXBsaWVyLmxlbmd0aCAtIDI7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBtdWx0aXBsaWVyW2ldID0gbXVsdGlwbGllcltpICsgMV0gKiBvdXRwdXRTaXplW2kgKyAxXTtcbiAgICB9XG4gICAgLy8gRnVsbCBzaXplIG9mIHRoZSB0ZW5zb3IuXG4gICAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gbWFrZVNoYXBlKG91dHB1dFNpemUsIGZhbHNlKTtcbiAgICBjb25zdCBvdXRwdXRUZW5zb3IgPVxuICAgICAgICB1dGlsLmdldEFycmF5RnJvbURUeXBlKFxuICAgICAgICAgICAgdGhpcy52YWx1ZXNEVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKG91dHB1dFNoYXBlKSkgYXMgVHlwZWRBcnJheTtcblxuICAgIGNvbnN0IGZ1bGxTaXplID0gbXVsdGlwbGllclswXSAqIG91dHB1dFNpemVbMF07XG4gICAgaWYgKGZ1bGxTaXplID4gMCkge1xuICAgICAgbGV0IG91dHB1dEluZGV4ID0gdGhpcy5jYWxjdWxhdGVGaXJzdFBhcmVudE91dHB1dEluZGV4KFxuICAgICAgICAgIGZpcnN0RGltZW5zaW9uLCBtdWx0aXBsaWVyWzBdLCBvdXRwdXRTaXplWzBdKTtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucmFnZ2VkUmFuazsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5ld091dHB1dEluZGV4ID0gdGhpcy5jYWxjdWxhdGVPdXRwdXRJbmRleChcbiAgICAgICAgICAgIGkgLSAxLCBvdXRwdXRJbmRleCwgbXVsdGlwbGllcltpXSwgb3V0cHV0U2l6ZVtpXSk7XG4gICAgICAgIG91dHB1dEluZGV4ID0gbmV3T3V0cHV0SW5kZXg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0T3V0cHV0KHRoaXMucmFnZ2VkUmFuaywgb3V0cHV0SW5kZXgsIG91dHB1dFRlbnNvciwgb3V0cHV0U2hhcGUpO1xuICAgIH1cblxuICAgIHJldHVybiBbb3V0cHV0U2hhcGUsIG91dHB1dFRlbnNvcl07XG4gIH1cbiAgc2V0T3V0cHV0KFxuICAgICAgcmFnZ2VkUmFuazogbnVtYmVyLCBvdXRwdXRJbmRleDogbnVtYmVyW10sIG91dHB1dFRlbnNvcjogVHlwZWRBcnJheSxcbiAgICAgIG91dHB1dFNoYXBlOiBudW1iZXJbXSkge1xuICAgIGlmIChvdXRwdXRUZW5zb3IubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzQmFzZSA9IHRoaXMudmFsdWVzO1xuICAgIGNvbnN0IG91dHB1dEJhc2UgPSBvdXRwdXRUZW5zb3I7XG5cbiAgICBsZXQgZWxlbWVudFNoYXBlID0gb3V0cHV0U2hhcGUuc2xpY2UoKTtcbiAgICBlbGVtZW50U2hhcGUgPSBlbGVtZW50U2hhcGUuc2xpY2UocmFnZ2VkUmFuayArIDEpO1xuICAgIGNvbnN0IHZhbHVlRWxlbWVudFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoZWxlbWVudFNoYXBlKTtcbiAgICBjb25zdCBvdXRwdXRJbmRleFNpemUgPSBvdXRwdXRJbmRleC5sZW5ndGg7XG5cbiAgICAvLyBCcm9hZGNhc3QgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdmFsdWVfZWxlbWVudF9zaXplLiAgKFdlIGNhbiBza2lwIHRoaXNcbiAgICAvLyBpZiBkZWZhdWx0VmFsdWVUZW5zb3Iuc2l6ZSA9PSAxLCBzaW5jZSB3ZSB1c2UgZmlsbCB3aGVuIHRoYXQncyB0cnVlLilcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IHZhbHVlRWxlbWVudFNpemUgJiYgZGVmYXVsdFZhbHVlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgY29uc3Qgc3JjU2hhcGUgPSB0aGlzLmRlZmF1bHRWYWx1ZVNoYXBlO1xuICAgICAgdGlkeSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZVRlbnNvciA9IHJlc2hhcGUoZGVmYXVsdFZhbHVlLCBzcmNTaGFwZSk7XG4gICAgICAgIGNvbnN0IGJDYXN0RGVmYXVsdCA9IGJyb2FkY2FzdFRvKGRlZmF1bHRWYWx1ZVRlbnNvciwgZWxlbWVudFNoYXBlKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gYkNhc3REZWZhdWx0LmRhdGFTeW5jKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG91dHB1dEluZGV4IGFycmF5LCBmaW5kaW5nIGNvbnRpZ3VvdXMgcmVnaW9ucyB0aGF0XG4gICAgLy8gc2hvdWxkIGJlIGNvcGllZC4gIE9uY2Ugd2UgZmluZCB0aGUgZW5kIG9mIGEgY29udGlndW91cyByZWdpb24sIGNvcHkgaXRcbiAgICAvLyBhbmQgYWRkIGFueSBuZWNlc3NhcnkgcGFkZGluZyAod2l0aCBkZWZhdWx0VmFsdWUpLlxuICAgIGxldCBzcmNTdGFydCA9IDA7ICAvLyBTdGFydCBvZiBjb250aWd1b3VzIHJlZ2lvbiAoaW4gdmFsdWVzKVxuICAgIGxldCBkc3RTdGFydCA9IDA7ICAvLyBEZXN0aW5hdGlvbiBmb3IgY29udGlndW91cyByZWdpb24gKGluIG91dHB1dClcbiAgICBsZXQgZHN0RW5kID0gMDsgICAgLy8gRGVzdGluYXRpb24gZm9yIGNvbnRpZ3VvdXMgcmVnaW9uIChpbiBvdXRwdXQpXG4gICAgZm9yIChsZXQgc3JjSSA9IDA7IHNyY0kgPD0gb3V0cHV0SW5kZXhTaXplOyArK3NyY0kpIHtcbiAgICAgIC8vIGRzdEkgaXMgdGhlIGRlc3RpbmF0aW9uIHdoZXJlIHRoZSB2YWx1ZSBhdCBzcmNJIHNob3VsZCBiZSBjb3BpZWQuXG4gICAgICBsZXQgZHN0SSA9IHNyY0kgPCBvdXRwdXRJbmRleFNpemUgPyBvdXRwdXRJbmRleFtzcmNJXSA6IC0xO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBzdGlsbCBpbiBhIGNvbnRpZ3VvdXMgcmVnaW9uLCB0aGVuIHVwZGF0ZSBkc3RFbmQgZ28gdG8gdGhlXG4gICAgICAvLyBuZXh0IHNyY0kuXG4gICAgICBpZiAoZHN0SSA9PT0gZHN0RW5kKSB7XG4gICAgICAgICsrZHN0RW5kO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgZm91bmQgdGhlIGVuZCBvZiBjb250aWd1b3VzIHJlZ2lvbi4gIFRoaXMgY2FuIGJlIGJlY2F1c2Ugd2UgZm91bmRcbiAgICAgIC8vIGEgZ2FwIChkc3RJID4gZHN0RW5kKSwgb3IgYSBzb3VyY2UgdmFsdWUgdGhhdCBzaG91bGRuJ3QgYmUgY29waWVkXG4gICAgICAvLyBiZWNhdXNlIGl0J3Mgb3V0LW9mLWJvdW5kcyAoZHN0SSA9PSAtMSksIG9yIHRoZSBlbmQgb2YgdGhlIHRlbnNvclxuICAgICAgLy8gKGRzdEkgPT09IC0xKS5cbiAgICAgIGlmIChkc3RTdGFydCA8IGRzdEVuZCkge1xuICAgICAgICAvLyBDb3B5IHRoZSBjb250aWd1b3VzIHJlZ2lvbi5cbiAgICAgICAgY29uc3Qgc3JjID0gdmFsdWVzQmFzZS5zdWJhcnJheShzcmNTdGFydCAqIHZhbHVlRWxlbWVudFNpemUpO1xuICAgICAgICBjb25zdCBkc3QgPSBvdXRwdXRCYXNlLnN1YmFycmF5KGRzdFN0YXJ0ICogdmFsdWVFbGVtZW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IG5WYWxzID0gKGRzdEVuZCAtIGRzdFN0YXJ0KSAqIHZhbHVlRWxlbWVudFNpemU7XG4gICAgICAgIGNvcHlBcnJheShkc3QsIHNyYywgblZhbHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYW55IG5lY2Vzc2FyeSBwYWRkaW5nICh3LyBkZWZhdWx0VmFsdWUpLlxuICAgICAgaWYgKHNyY0kgPj0gb3V0cHV0SW5kZXhTaXplKSB7XG4gICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB2YWx1ZXM6IHBhZCB0byB0aGUgZW5kIG9mIG91dHB1dC5cbiAgICAgICAgY29uc3Qgb3V0cHV0U2l6ZSA9IG91dHB1dFRlbnNvci5sZW5ndGg7XG4gICAgICAgIGRzdEkgPSBNYXRoLmZsb29yKG91dHB1dFNpemUgLyB2YWx1ZUVsZW1lbnRTaXplKTtcbiAgICAgIH1cbiAgICAgIGlmIChkc3RJID4gZHN0RW5kKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBvdXRwdXRCYXNlXG4gICAgICAgICAgICAgIC5zdWJhcnJheShkc3RFbmQgKiB2YWx1ZUVsZW1lbnRTaXplLCBkc3RJICogdmFsdWVFbGVtZW50U2l6ZSlcbiAgICAgICAgICAgICAgLmZpbGwodGhpcy5kZWZhdWx0VmFsdWVbMF0pO1xuICAgICAgICAgIGRzdEVuZCA9IGRzdEk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGRzdEkgPiBkc3RFbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzdCA9IG91dHB1dEJhc2Uuc2xpY2UoZHN0RW5kICogdmFsdWVFbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICBjb3B5QXJyYXkoZHN0LCBkZWZhdWx0VmFsdWUsIHZhbHVlRWxlbWVudFNpemUpO1xuICAgICAgICAgICAgKytkc3RFbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBpbmRpY2VzLlxuICAgICAgaWYgKGRzdEkgPCAwKSB7XG4gICAgICAgIC8vIHNyY0kgc2hvdWxkIGJlIHNraXBwZWQgLS0gbGVhdmUgaXQgb3V0IG9mIHRoZSBjb250aWd1b3VzIHJlZ2lvbi5cbiAgICAgICAgc3JjU3RhcnQgPSBzcmNJICsgMTtcbiAgICAgICAgZHN0U3RhcnQgPSBkc3RFbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzcmNJIHNob3VsZCBiZSBjb3BpZWQgLS0gaW5jbHVkZSBpdCBpbiB0aGUgY29udGlndW91cyByZWdpb24uXG4gICAgICAgIHNyY1N0YXJ0ID0gc3JjSTtcbiAgICAgICAgZHN0U3RhcnQgPSBkc3RFbmQ7XG4gICAgICAgIGRzdEVuZCA9IGRzdFN0YXJ0ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29weUFycmF5KGRzdDogVHlwZWRBcnJheSwgc3JjOiBUeXBlZEFycmF5LCBzaXplOiBudW1iZXIpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBkc3RbaV0gPSBzcmNbaV07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVNoYXBlKHNoYXBlOiBudW1iZXJbXXxUeXBlZEFycmF5LCBpc1BhcnRpYWw6IGJvb2xlYW4pIHtcbiAgY29uc3Qgb3V0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBkaW0gb2Ygc2hhcGUpIHtcbiAgICBpZiAoZGltIDwgMCkge1xuICAgICAgaWYgKCFpc1BhcnRpYWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaW1lbnNpb24gJHtkaW19IG11c3QgYmUgPj0gMGApO1xuICAgICAgfVxuICAgICAgaWYgKGRpbSA8IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGltZW5zaW9uICR7ZGltfSBtdXN0IGJlID49IC0xYCk7XG4gICAgICB9XG4gICAgICBkaW0gPSAtMTtcbiAgICB9XG4gICAgb3V0LnB1c2goZGltKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYWdnZWRUZW5zb3JUb1RlbnNvckltcGwoXG4gICAgc2hhcGU6IFR5cGVkQXJyYXksIHNoYXBlc1NoYXBlOiBudW1iZXJbXSwgdmFsdWVzOiBUeXBlZEFycmF5LFxuICAgIHZhbHVlc1NoYXBlOiBudW1iZXJbXSwgdmFsdWVzRFR5cGU6IERhdGFUeXBlLCBkZWZhdWx0VmFsdWU6IFR5cGVkQXJyYXksXG4gICAgZGVmYXVsdFZhbHVlU2hhcGU6IG51bWJlcltdLCByb3dQYXJ0aXRpb25WYWx1ZXM6IFR5cGVkQXJyYXlbXSxcbiAgICByb3dQYXJ0aXRpb25WYWx1ZXNTaGFwZXM6IG51bWJlcltdW10sXG4gICAgcm93UGFydGl0aW9uVHlwZXM6IHN0cmluZ1tdKTogW251bWJlcltdLCBUeXBlZEFycmF5XSB7XG4gIHJldHVybiBuZXcgUmFnZ2VkVGVuc29yVG9UZW5zb3JPcChcbiAgICAgICAgICAgICBzaGFwZSwgc2hhcGVzU2hhcGUsIHZhbHVlcywgdmFsdWVzU2hhcGUsIHZhbHVlc0RUeXBlLCBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgZGVmYXVsdFZhbHVlU2hhcGUsIHJvd1BhcnRpdGlvblZhbHVlcywgcm93UGFydGl0aW9uVmFsdWVzU2hhcGVzLFxuICAgICAgICAgICAgIHJvd1BhcnRpdGlvblR5cGVzKVxuICAgICAgLmNvbXB1dGUoKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function rangeImpl(start, stop, step, dtype) {\n const sameStartStop = start === stop;\n const increasingRangeNegativeStep = start < stop && step < 0;\n const decreasingRangePositiveStep = stop < start && step > 1;\n if (sameStartStop || increasingRangeNegativeStep ||\n decreasingRangePositiveStep) {\n return util.makeZerosTypedArray(0, dtype);\n }\n const numElements = Math.abs(Math.ceil((stop - start) / step));\n const values = util.makeZerosTypedArray(numElements, dtype);\n if (stop < start && step === 1) {\n // Auto adjust the step's sign if it hasn't been set\n // (or was set to 1)\n step = -1;\n }\n values[0] = start;\n for (let i = 1; i < values.length; i++) {\n values[i] = values[i - 1] + step;\n }\n return values;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZ2VfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmFuZ2VfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBYSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQ3pDLEtBQXdCO0lBQzFCLE1BQU0sYUFBYSxHQUFHLEtBQUssS0FBSyxJQUFJLENBQUM7SUFDckMsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFN0QsSUFBSSxhQUFhLElBQUksMkJBQTJCO1FBQzVDLDJCQUEyQixFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMzQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUQsSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDOUIsb0RBQW9EO1FBQ3BELG9CQUFvQjtRQUNwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZU1hcCwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlSW1wbChcbiAgICBzdGFydDogbnVtYmVyLCBzdG9wOiBudW1iZXIsIHN0ZXA6IG51bWJlcixcbiAgICBkdHlwZTogJ2Zsb2F0MzInfCdpbnQzMicpOiBEYXRhVHlwZU1hcFsnZmxvYXQzMicgfCAnaW50MzInXSB7XG4gIGNvbnN0IHNhbWVTdGFydFN0b3AgPSBzdGFydCA9PT0gc3RvcDtcbiAgY29uc3QgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwID0gc3RhcnQgPCBzdG9wICYmIHN0ZXAgPCAwO1xuICBjb25zdCBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXAgPSBzdG9wIDwgc3RhcnQgJiYgc3RlcCA+IDE7XG5cbiAgaWYgKHNhbWVTdGFydFN0b3AgfHwgaW5jcmVhc2luZ1JhbmdlTmVnYXRpdmVTdGVwIHx8XG4gICAgICBkZWNyZWFzaW5nUmFuZ2VQb3NpdGl2ZVN0ZXApIHtcbiAgICByZXR1cm4gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KDAsIGR0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IG51bUVsZW1lbnRzID0gTWF0aC5hYnMoTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpO1xuICBjb25zdCB2YWx1ZXMgPSB1dGlsLm1ha2VaZXJvc1R5cGVkQXJyYXkobnVtRWxlbWVudHMsIGR0eXBlKTtcblxuICBpZiAoc3RvcCA8IHN0YXJ0ICYmIHN0ZXAgPT09IDEpIHtcbiAgICAvLyBBdXRvIGFkanVzdCB0aGUgc3RlcCdzIHNpZ24gaWYgaXQgaGFzbid0IGJlZW4gc2V0XG4gICAgLy8gKG9yIHdhcyBzZXQgdG8gMSlcbiAgICBzdGVwID0gLTE7XG4gIH1cblxuICB2YWx1ZXNbMF0gPSBzdGFydDtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNbaV0gPSB2YWx1ZXNbaSAtIDFdICsgc3RlcDtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Rsqrt } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const rsqrtImpl = createSimpleUnaryImpl((xi) => 1 / Math.sqrt(xi));\nexport const rsqrt = unaryKernelFuncFromImpl(Rsqrt, rsqrtImpl);\nexport const rsqrtConfig = {\n kernelName: Rsqrt,\n backendName: 'cpu',\n kernelFunc: rsqrt,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JzcXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUnNxcnR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jRnJvbUltcGx9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHJzcXJ0SW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IDEgLyBNYXRoLnNxcnQoeGkpKTtcbmV4cG9ydCBjb25zdCByc3FydCA9IHVuYXJ5S2VybmVsRnVuY0Zyb21JbXBsKFJzcXJ0LCByc3FydEltcGwpO1xuXG5leHBvcnQgY29uc3QgcnNxcnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUnNxcnQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcnNxcnQsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, TensorBuffer } from '@tensorflow/tfjs-core';\nexport function scatterImpl(indices, updates, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, defaultValue, sumDupeIndices) {\n const flattenShape = [outputSize / sliceSize, sliceSize];\n const indicesData = indices.values;\n const updatesData = updates.values;\n if (outputSize === 0) {\n return buffer(shape, updates.dtype);\n }\n const outBuf = (defaultValue instanceof TensorBuffer) ?\n defaultValue :\n buffer(flattenShape, updates.dtype);\n if (typeof defaultValue === 'string') {\n outBuf.values.fill(defaultValue);\n }\n else if (typeof defaultValue === 'number') {\n outBuf.values.fill(defaultValue);\n }\n else if (typeof defaultValue === 'boolean') {\n outBuf.values.fill(+defaultValue);\n }\n for (let i = 0; i < numUpdates; i++) {\n const index = [];\n let flattenIndex = 0;\n for (let j = 0; j < sliceRank; j++) {\n const dim = indicesData[i * sliceRank + j];\n index.push(dim);\n flattenIndex += dim * strides[j];\n }\n if (flattenIndex < 0 || flattenIndex >= outputSize / sliceSize) {\n throw new Error(`Invalid indices: ${index} does not index into ${shape}`);\n }\n for (let k = 0; k < sliceSize; k++) {\n if (sumDupeIndices) {\n outBuf.values[flattenIndex * sliceSize + k] +=\n updatesData[i * sliceSize + k];\n }\n else {\n outBuf.values[flattenIndex * sliceSize + k] = updates.rank === 0 ?\n updatesData[0] :\n updatesData[i * sliceSize + k];\n }\n }\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlcl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TY2F0dGVyX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE1BQU0sRUFBa0IsWUFBWSxFQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFTdkYsTUFBTSxVQUNOLFdBQVcsQ0FDUCxPQUFpQyxFQUFFLE9BQTJCLEVBQzlELEtBQWUsRUFBRSxVQUFrQixFQUFFLFNBQWlCLEVBQUUsVUFBa0IsRUFDMUUsU0FBaUIsRUFBRSxPQUFpQixFQUNwQyxZQUF1RCxFQUN2RCxjQUF1QjtJQUN6QixNQUFNLFlBQVksR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFekQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQW9CLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUVuQyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxNQUFNLENBQUMsS0FBb0IsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLFlBQVksWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxDQUFDO1FBQ2QsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDbkMsTUFBTSxDQUFDLE1BQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDMUMsTUFBTSxDQUFDLE1BQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2xEO1NBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxTQUFTLEVBQUU7UUFDM0MsTUFBTSxDQUFDLE1BQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbkQ7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLFlBQVksSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxJQUFJLFlBQVksSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFO1lBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEtBQUssd0JBQXdCLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDM0U7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksY0FBYyxFQUFFO2dCQUNqQixNQUFNLENBQUMsTUFBcUIsQ0FBQyxZQUFZLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztvQkFDdEQsV0FBMEIsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUM5RCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsV0FBVyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDcEM7U0FDRjtLQUNGO0lBRUQsT0FBTyxNQUE0QixDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2J1ZmZlciwgUmFuaywgU2hhcGVNYXAsIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW50ZXJmYWNlIERlZmF1bHRWYWx1ZVR5cGVNYXAge1xuICBib29sOiBib29sZWFuO1xuICBpbnQzMjogbnVtYmVyO1xuICBmbG9hdDMyOiBudW1iZXI7XG4gIHN0cmluZzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb25cbnNjYXR0ZXJJbXBsPFIgZXh0ZW5kcyBSYW5rLCBEIGV4dGVuZHMgJ2Zsb2F0MzInfCdpbnQzMid8J2Jvb2wnfCdzdHJpbmcnPihcbiAgICBpbmRpY2VzOiBUZW5zb3JCdWZmZXI8UiwgJ2ludDMyJz4sIHVwZGF0ZXM6IFRlbnNvckJ1ZmZlcjxSLCBEPixcbiAgICBzaGFwZTogbnVtYmVyW10sIG91dHB1dFNpemU6IG51bWJlciwgc2xpY2VTaXplOiBudW1iZXIsIG51bVVwZGF0ZXM6IG51bWJlcixcbiAgICBzbGljZVJhbms6IG51bWJlciwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgZGVmYXVsdFZhbHVlOiBUZW5zb3JCdWZmZXI8UiwgRD58RGVmYXVsdFZhbHVlVHlwZU1hcFtEXSxcbiAgICBzdW1EdXBlSW5kaWNlczogYm9vbGVhbik6IFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9IFtvdXRwdXRTaXplIC8gc2xpY2VTaXplLCBzbGljZVNpemVdO1xuXG4gIGNvbnN0IGluZGljZXNEYXRhID0gaW5kaWNlcy52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgdXBkYXRlc0RhdGEgPSB1cGRhdGVzLnZhbHVlcztcblxuICBpZiAob3V0cHV0U2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBidWZmZXIoc2hhcGUgYXMgU2hhcGVNYXBbUl0sIHVwZGF0ZXMuZHR5cGUpO1xuICB9XG5cbiAgY29uc3Qgb3V0QnVmID0gKGRlZmF1bHRWYWx1ZSBpbnN0YW5jZW9mIFRlbnNvckJ1ZmZlcikgP1xuICAgICAgZGVmYXVsdFZhbHVlIDpcbiAgICAgIGJ1ZmZlcihmbGF0dGVuU2hhcGUsIHVwZGF0ZXMuZHR5cGUpO1xuICBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAob3V0QnVmLnZhbHVlcyBhcyBzdHJpbmdbXSkuZmlsbChkZWZhdWx0VmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgKG91dEJ1Zi52YWx1ZXMgYXMgVHlwZWRBcnJheSkuZmlsbChkZWZhdWx0VmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIChvdXRCdWYudmFsdWVzIGFzIFR5cGVkQXJyYXkpLmZpbGwoK2RlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVwZGF0ZXM7IGkrKykge1xuICAgIGNvbnN0IGluZGV4ID0gW107XG4gICAgbGV0IGZsYXR0ZW5JbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBzbGljZVJhbms7IGorKykge1xuICAgICAgY29uc3QgZGltID0gaW5kaWNlc0RhdGFbaSAqIHNsaWNlUmFuayArIGpdO1xuICAgICAgaW5kZXgucHVzaChkaW0pO1xuICAgICAgZmxhdHRlbkluZGV4ICs9IGRpbSAqIHN0cmlkZXNbal07XG4gICAgfVxuXG4gICAgaWYgKGZsYXR0ZW5JbmRleCA8IDAgfHwgZmxhdHRlbkluZGV4ID49IG91dHB1dFNpemUgLyBzbGljZVNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbmRpY2VzOiAke2luZGV4fSBkb2VzIG5vdCBpbmRleCBpbnRvICR7c2hhcGV9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBzbGljZVNpemU7IGsrKykge1xuICAgICAgaWYgKHN1bUR1cGVJbmRpY2VzKSB7XG4gICAgICAgIChvdXRCdWYudmFsdWVzIGFzIFR5cGVkQXJyYXkpW2ZsYXR0ZW5JbmRleCAqIHNsaWNlU2l6ZSArIGtdICs9XG4gICAgICAgICAgICAodXBkYXRlc0RhdGEgYXMgVHlwZWRBcnJheSlbaSAqIHNsaWNlU2l6ZSArIGtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0QnVmLnZhbHVlc1tmbGF0dGVuSW5kZXggKiBzbGljZVNpemUgKyBrXSA9IHVwZGF0ZXMucmFuayA9PT0gMCA/XG4gICAgICAgICAgICB1cGRhdGVzRGF0YVswXSA6XG4gICAgICAgICAgICB1cGRhdGVzRGF0YVtpICogc2xpY2VTaXplICsga107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8UiwgRD47XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sigmoid } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sigmoidImpl = createSimpleUnaryImpl((xi) => 1 / (1 + Math.exp(-xi)));\nexport const sigmoid = unaryKernelFunc(Sigmoid, (xi) => 1 / (1 + Math.exp(-xi)));\nexport const sigmoidConfig = {\n kernelName: Sigmoid,\n backendName: 'cpu',\n kernelFunc: sigmoid,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU2lnbW9pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FDcEIscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsT0FBTztDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpZ21vaWR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzaWdtb2lkSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlVW5hcnlJbXBsKCh4aSkgPT4gMSAvICgxICsgTWF0aC5leHAoLXhpKSkpO1xuZXhwb3J0IGNvbnN0IHNpZ21vaWQgPVxuICAgIHVuYXJ5S2VybmVsRnVuYyhTaWdtb2lkLCAoeGkpID0+IDEgLyAoMSArIE1hdGguZXhwKC14aSkpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ21vaWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2lnbW9pZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzaWdtb2lkLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, buffer, Slice, slice_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function sliceImpl(vals, begin, size, shape, dtype) {\n const isContinous = slice_util.isSliceContinous(shape, begin, size);\n const length = util.sizeFromShape(size);\n const xStrides = util.computeStrides(shape);\n if (isContinous) {\n const flatOffset = slice_util.computeFlatOffset(begin, xStrides);\n if (dtype === 'string') {\n return vals.slice(flatOffset, flatOffset + length);\n }\n return vals.subarray(flatOffset, flatOffset + length);\n }\n const decodedData = dtype === 'string' ?\n backend_util.fromUint8ToStringArray(vals) :\n vals;\n const inBuf = buffer(shape, dtype, decodedData);\n const outBuf = buffer(size, dtype);\n for (let i = 0; i < outBuf.size; ++i) {\n const outLoc = outBuf.indexToLoc(i);\n const inLoc = outLoc.map((idx, j) => idx + begin[j]);\n outBuf.set(inBuf.get(...inLoc), ...outLoc);\n }\n if (dtype === 'string') {\n return backend_util.fromStringArrayToUint8(outBuf.values);\n }\n return outBuf.values;\n}\nexport function slice(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { begin, size } = attrs;\n assertNotComplex(x, 'slice');\n const [$begin, $size] = slice_util.parseSliceParams(x, begin, size);\n slice_util.assertParamsValid(x, $begin, $size);\n const vals = backend.data.get(x.dataId).values;\n const outVals = sliceImpl(vals, $begin, $size, x.shape, x.dtype);\n return backend.makeTensorInfo($size, x.dtype, outVals);\n}\nexport const sliceConfig = {\n kernelName: Slice,\n backendName: 'cpu',\n kernelFunc: slice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWlCLE1BQU0sRUFBc0MsS0FBSyxFQUFFLFVBQVUsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEwsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxTQUFTLENBQ3JCLElBQW1CLEVBQUUsS0FBZSxFQUFFLElBQWMsRUFBRSxLQUFlLEVBQ3JFLEtBQWU7SUFDakIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLElBQUksV0FBVyxFQUFFO1FBQ2YsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEIsT0FBUSxJQUFxQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsT0FBUSxJQUFtQixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFvQixDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFrQixDQUFDO0lBRXZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7S0FDNUM7SUFFRCxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDdEIsT0FBTyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQWtCLENBQUMsQ0FBQztLQUN2RTtJQUNELE9BQU8sTUFBTSxDQUFDLE1BQW9CLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQ2pCLElBQXVFO0lBRXpFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTVCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU3QixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsS0FBOEI7Q0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhY2tlbmRWYWx1ZXMsIGJ1ZmZlciwgRGF0YVR5cGUsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2xpY2UsIHNsaWNlX3V0aWwsIFNsaWNlQXR0cnMsIFNsaWNlSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlSW1wbChcbiAgICB2YWxzOiBCYWNrZW5kVmFsdWVzLCBiZWdpbjogbnVtYmVyW10sIHNpemU6IG51bWJlcltdLCBzaGFwZTogbnVtYmVyW10sXG4gICAgZHR5cGU6IERhdGFUeXBlKTogQmFja2VuZFZhbHVlcyB7XG4gIGNvbnN0IGlzQ29udGlub3VzID0gc2xpY2VfdXRpbC5pc1NsaWNlQ29udGlub3VzKHNoYXBlLCBiZWdpbiwgc2l6ZSk7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWwuc2l6ZUZyb21TaGFwZShzaXplKTtcbiAgY29uc3QgeFN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKHNoYXBlKTtcblxuICBpZiAoaXNDb250aW5vdXMpIHtcbiAgICBjb25zdCBmbGF0T2Zmc2V0ID0gc2xpY2VfdXRpbC5jb21wdXRlRmxhdE9mZnNldChiZWdpbiwgeFN0cmlkZXMpO1xuXG4gICAgaWYgKGR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICh2YWxzIGFzIFVpbnQ4QXJyYXlbXSkuc2xpY2UoZmxhdE9mZnNldCwgZmxhdE9mZnNldCArIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh2YWxzIGFzIFR5cGVkQXJyYXkpLnN1YmFycmF5KGZsYXRPZmZzZXQsIGZsYXRPZmZzZXQgKyBsZW5ndGgpO1xuICB9XG5cbiAgY29uc3QgZGVjb2RlZERhdGEgPSBkdHlwZSA9PT0gJ3N0cmluZycgP1xuICAgICAgYmFja2VuZF91dGlsLmZyb21VaW50OFRvU3RyaW5nQXJyYXkodmFscyBhcyBVaW50OEFycmF5W10pIDpcbiAgICAgIHZhbHMgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCBpbkJ1ZiA9IGJ1ZmZlcihzaGFwZSwgZHR5cGUsIGRlY29kZWREYXRhKTtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKHNpemUsIGR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRCdWYuc2l6ZTsgKytpKSB7XG4gICAgY29uc3Qgb3V0TG9jID0gb3V0QnVmLmluZGV4VG9Mb2MoaSk7XG4gICAgY29uc3QgaW5Mb2MgPSBvdXRMb2MubWFwKChpZHg6IG51bWJlciwgaikgPT4gaWR4ICsgYmVnaW5bal0pO1xuICAgIG91dEJ1Zi5zZXQoaW5CdWYuZ2V0KC4uLmluTG9jKSwgLi4ub3V0TG9jKTtcbiAgfVxuXG4gIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYmFja2VuZF91dGlsLmZyb21TdHJpbmdBcnJheVRvVWludDgob3V0QnVmLnZhbHVlcyBhcyBzdHJpbmdbXSk7XG4gIH1cbiAgcmV0dXJuIG91dEJ1Zi52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFNsaWNlSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFNsaWNlQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmVnaW4sIHNpemV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnc2xpY2UnKTtcblxuICBjb25zdCBbJGJlZ2luLCAkc2l6ZV0gPSBzbGljZV91dGlsLnBhcnNlU2xpY2VQYXJhbXMoeCwgYmVnaW4sIHNpemUpO1xuICBzbGljZV91dGlsLmFzc2VydFBhcmFtc1ZhbGlkKHgsICRiZWdpbiwgJHNpemUpO1xuXG4gIGNvbnN0IHZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXM7XG4gIGNvbnN0IG91dFZhbHMgPSBzbGljZUltcGwodmFscywgJGJlZ2luLCAkc2l6ZSwgeC5zaGFwZSwgeC5kdHlwZSk7XG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKCRzaXplLCB4LmR0eXBlLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNsaWNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNsaWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseFillEmptyRowsImpl(indices, indicesShape, indicesDType, values, valuesDType, denseShape, defaultValue) {\n const indicesCount = indicesShape[0];\n const denseRows = denseShape[0];\n const emptyRowIndicator = new Array(denseRows);\n const reverseIndexMap = new Array(indicesCount);\n const rank = indicesShape[1];\n if (denseRows === 0) {\n if (indicesCount !== 0) {\n throw new Error(backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch(indicesCount));\n }\n const outputIndices = util.getArrayFromDType(indicesDType, 0);\n const outputValues = util.getArrayFromDType(valuesDType, 0);\n return [\n outputIndices, [0, rank], outputValues, emptyRowIndicator, reverseIndexMap\n ];\n }\n let rowsAreOrdered = true;\n let lastIndicesRow = 0;\n const csrOffset = new Array(denseRows).fill(0);\n for (let i = 0; i < indicesCount; ++i) {\n // indices is a 2d tensor with shape of [N, rank]\n const row = indices[i * rank];\n if (row < 0) {\n throw new Error(backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage(i, row));\n }\n if (row >= denseRows) {\n throw new Error(backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(i, row, denseRows));\n }\n ++csrOffset[row];\n rowsAreOrdered = rowsAreOrdered && (row >= lastIndicesRow);\n lastIndicesRow = row;\n }\n let allRowsFull = true;\n for (let row = 0; row < denseRows; ++row) {\n // csrOffset here describes the number of elements in this dense row\n const rowEmpty = (csrOffset[row] === 0);\n emptyRowIndicator[row] = rowEmpty;\n allRowsFull = allRowsFull && !rowEmpty;\n // In filled version, each row has at least one element.\n csrOffset[row] = Math.max(csrOffset[row], 1);\n // Update csrOffset to represent the number of elements up to and\n // including denseRows + 1:\n // csrOffset[0] == #{elements of row 0}\n // csrOffset[1] == #{elements of row 1} + #{elements of row 0}\n // ..\n // csrOffset[i] == starting index for elements in row i + 1.\n if (row > 0) {\n csrOffset[row] += csrOffset[row - 1];\n }\n }\n if (allRowsFull && rowsAreOrdered) {\n const outputIndices = indices;\n const outputValues = values;\n for (let i = 0; i < indicesCount; ++i) {\n reverseIndexMap[i] = i;\n }\n return [\n outputIndices, [indicesCount, rank], outputValues, emptyRowIndicator,\n reverseIndexMap\n ];\n }\n else {\n const fullIndicesCount = csrOffset[denseRows - 1];\n const outputIndices = util.getArrayFromDType(indicesDType, fullIndicesCount * rank);\n const outputValues = util.getArrayFromDType(valuesDType, fullIndicesCount);\n const filledCount = new Array(denseRows).fill(0);\n // Fill in values for rows that are not missing\n for (let i = 0; i < indicesCount; ++i) {\n // indices is a 2d tensor with shape of [N, rank]\n const row = indices[i * rank];\n const offset = filledCount[row];\n const outputI = ((row === 0) ? 0 : csrOffset[row - 1]) + offset;\n filledCount[row]++; // Increment the filled count for this row.\n for (let j = 0; j < rank; ++j) {\n // indices and outputIndices are 2d tensors with shape of [N, rank]\n outputIndices[outputI * rank + j] = indices[i * rank + j];\n }\n outputValues[outputI] = values[i];\n // We'll need this reverse index map to backprop correctly.\n reverseIndexMap[i] = outputI;\n }\n // Fill in values for rows that are missing\n for (let row = 0; row < denseRows; ++row) {\n const rowCount = filledCount[row];\n if (rowCount === 0) { // We haven't filled this row\n const startingIndex = (row === 0) ? 0 : csrOffset[row - 1];\n // Remaining index values were set to zero already.\n // Just need to set the row index in the right location.\n // outputIndices is a 2d tensor with shape of [N, rank]\n outputIndices[startingIndex * rank + 0] = row;\n for (let col = 1; col < rank; ++col) {\n outputIndices[startingIndex * rank + col] = 0;\n }\n outputValues[startingIndex] = defaultValue;\n }\n }\n return [\n outputIndices, [fullIndicesCount, rank], outputValues, emptyRowIndicator,\n reverseIndexMap\n ];\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlRmlsbEVtcHR5Um93c19pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VGaWxsRW1wdHlSb3dzX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxPQUFtQixFQUFFLFlBQXNCLEVBQUUsWUFBc0IsRUFDbkUsTUFBa0IsRUFBRSxXQUFxQixFQUFFLFVBQXNCLEVBQ2pFLFlBQW9CO0lBRXRCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEMsTUFBTSxpQkFBaUIsR0FBYyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxNQUFNLGVBQWUsR0FBYSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUxRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksWUFBWSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUNYLFlBQVksQ0FBQywrQ0FBK0MsQ0FDeEQsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFlLENBQUM7UUFDNUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQWUsQ0FBQztRQUMxRSxPQUFPO1lBQ0wsYUFBYSxFQUFFLENB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QUUsRUFBRyw2QkFBNkI7Z0JBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELG1EQUFtRDtnQkFDbkQsd0RBQXdEO2dCQUN4RCx1REFBdUQ7Z0JBQ3ZELGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDOUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRTtvQkFDbkMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDO2FBQzVDO1NBQ0Y7UUFDRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLGlCQUFpQjtZQUN4RSxlQUFlO1NBQ2hCLENBQUM7S0FDSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZUZpbGxFbXB0eVJvd3NJbXBsKFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIGluZGljZXNTaGFwZTogbnVtYmVyW10sIGluZGljZXNEVHlwZTogRGF0YVR5cGUsXG4gICAgdmFsdWVzOiBUeXBlZEFycmF5LCB2YWx1ZXNEVHlwZTogRGF0YVR5cGUsIGRlbnNlU2hhcGU6IFR5cGVkQXJyYXksXG4gICAgZGVmYXVsdFZhbHVlOiBudW1iZXIpOlxuICAgIFtUeXBlZEFycmF5LCBudW1iZXJbXSwgVHlwZWRBcnJheSwgYm9vbGVhbltdLCBudW1iZXJbXV0ge1xuICBjb25zdCBpbmRpY2VzQ291bnQgPSBpbmRpY2VzU2hhcGVbMF07XG4gIGNvbnN0IGRlbnNlUm93cyA9IGRlbnNlU2hhcGVbMF07XG5cbiAgY29uc3QgZW1wdHlSb3dJbmRpY2F0b3I6IGJvb2xlYW5bXSA9IG5ldyBBcnJheShkZW5zZVJvd3MpO1xuICBjb25zdCByZXZlcnNlSW5kZXhNYXA6IG51bWJlcltdID0gbmV3IEFycmF5KGluZGljZXNDb3VudCk7XG5cbiAgY29uc3QgcmFuayA9IGluZGljZXNTaGFwZVsxXTtcblxuICBpZiAoZGVuc2VSb3dzID09PSAwKSB7XG4gICAgaWYgKGluZGljZXNDb3VudCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VGaWxsRW1wdHlSb3dzSW5kaWNlc0RlbnNlU2hhcGVNaXNtYXRjaChcbiAgICAgICAgICAgICAgaW5kaWNlc0NvdW50KSk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dEluZGljZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKGluZGljZXNEVHlwZSwgMCkgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBvdXRwdXRWYWx1ZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKHZhbHVlc0RUeXBlLCAwKSBhcyBUeXBlZEFycmF5O1xuICAgIHJldHVybiBbXG4gICAgICBvdXRwdXRJbmRpY2VzLCBbMCwgcmFua10sIG91dHB1dFZhbHVlcywgZW1wdHlSb3dJbmRpY2F0b3IsIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH1cblxuICBsZXQgcm93c0FyZU9yZGVyZWQgPSB0cnVlO1xuICBsZXQgbGFzdEluZGljZXNSb3cgPSAwO1xuICBjb25zdCBjc3JPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KGRlbnNlUm93cykuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNDb3VudDsgKytpKSB7XG4gICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgIGNvbnN0IHJvdyA9IGluZGljZXNbaSAqIHJhbmtdO1xuICAgIGlmIChyb3cgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZUZpbGxFbXB0eVJvd3NOZWdhdGl2ZUluZGV4RXJyb3JNZXNzYWdlKGksIHJvdykpO1xuICAgIH1cbiAgICBpZiAocm93ID49IGRlbnNlUm93cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VGaWxsRW1wdHlSb3dzT3V0T2ZSYW5nZUluZGV4RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBpLCByb3csIGRlbnNlUm93cykpO1xuICAgIH1cbiAgICArK2Nzck9mZnNldFtyb3ddO1xuICAgIHJvd3NBcmVPcmRlcmVkID0gcm93c0FyZU9yZGVyZWQgJiYgKHJvdyA+PSBsYXN0SW5kaWNlc1Jvdyk7XG4gICAgbGFzdEluZGljZXNSb3cgPSByb3c7XG4gIH1cblxuICBsZXQgYWxsUm93c0Z1bGwgPSB0cnVlO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkZW5zZVJvd3M7ICsrcm93KSB7XG4gICAgLy8gY3NyT2Zmc2V0IGhlcmUgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBkZW5zZSByb3dcbiAgICBjb25zdCByb3dFbXB0eSA9IChjc3JPZmZzZXRbcm93XSA9PT0gMCk7XG4gICAgZW1wdHlSb3dJbmRpY2F0b3Jbcm93XSA9IHJvd0VtcHR5O1xuICAgIGFsbFJvd3NGdWxsID0gYWxsUm93c0Z1bGwgJiYgIXJvd0VtcHR5O1xuICAgIC8vIEluIGZpbGxlZCB2ZXJzaW9uLCBlYWNoIHJvdyBoYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQuXG4gICAgY3NyT2Zmc2V0W3Jvd10gPSBNYXRoLm1heChjc3JPZmZzZXRbcm93XSwgMSk7XG4gICAgLy8gVXBkYXRlIGNzck9mZnNldCB0byByZXByZXNlbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyB1cCB0byBhbmRcbiAgICAvLyBpbmNsdWRpbmcgZGVuc2VSb3dzICsgMTpcbiAgICAvLyAgY3NyT2Zmc2V0WzBdID09ICN7ZWxlbWVudHMgb2Ygcm93IDB9XG4gICAgLy8gIGNzck9mZnNldFsxXSA9PSAje2VsZW1lbnRzIG9mIHJvdyAxfSArICN7ZWxlbWVudHMgb2Ygcm93IDB9XG4gICAgLy8gIC4uXG4gICAgLy8gIGNzck9mZnNldFtpXSA9PSBzdGFydGluZyBpbmRleCBmb3IgZWxlbWVudHMgaW4gcm93IGkgKyAxLlxuICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICBjc3JPZmZzZXRbcm93XSArPSBjc3JPZmZzZXRbcm93IC0gMV07XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFJvd3NGdWxsICYmIHJvd3NBcmVPcmRlcmVkKSB7XG4gICAgY29uc3Qgb3V0cHV0SW5kaWNlczogVHlwZWRBcnJheSA9IGluZGljZXM7XG4gICAgY29uc3Qgb3V0cHV0VmFsdWVzOiBUeXBlZEFycmF5ID0gdmFsdWVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlc0NvdW50OyArK2kpIHtcbiAgICAgIHJldmVyc2VJbmRleE1hcFtpXSA9IGk7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBvdXRwdXRJbmRpY2VzLCBbaW5kaWNlc0NvdW50LCByYW5rXSwgb3V0cHV0VmFsdWVzLCBlbXB0eVJvd0luZGljYXRvcixcbiAgICAgIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnVsbEluZGljZXNDb3VudCA9IGNzck9mZnNldFtkZW5zZVJvd3MgLSAxXTtcbiAgICBjb25zdCBvdXRwdXRJbmRpY2VzID1cbiAgICAgICAgdXRpbC5nZXRBcnJheUZyb21EVHlwZShpbmRpY2VzRFR5cGUsIGZ1bGxJbmRpY2VzQ291bnQgKiByYW5rKSBhc1xuICAgICAgICBUeXBlZEFycmF5O1xuICAgIGNvbnN0IG91dHB1dFZhbHVlcyA9XG4gICAgICAgIHV0aWwuZ2V0QXJyYXlGcm9tRFR5cGUodmFsdWVzRFR5cGUsIGZ1bGxJbmRpY2VzQ291bnQpIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3QgZmlsbGVkQ291bnQ6IG51bWJlcltdID0gbmV3IEFycmF5KGRlbnNlUm93cykuZmlsbCgwKTtcblxuICAgIC8vIEZpbGwgaW4gdmFsdWVzIGZvciByb3dzIHRoYXQgYXJlIG5vdCBtaXNzaW5nXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzQ291bnQ7ICsraSkge1xuICAgICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgY29uc3Qgcm93ID0gaW5kaWNlc1tpICogcmFua107XG4gICAgICBjb25zdCBvZmZzZXQgPSBmaWxsZWRDb3VudFtyb3ddO1xuICAgICAgY29uc3Qgb3V0cHV0SSA9ICgocm93ID09PSAwKSA/IDAgOiBjc3JPZmZzZXRbcm93IC0gMV0pICsgb2Zmc2V0O1xuICAgICAgZmlsbGVkQ291bnRbcm93XSsrOyAgLy8gSW5jcmVtZW50IHRoZSBmaWxsZWQgY291bnQgZm9yIHRoaXMgcm93LlxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByYW5rOyArK2opIHtcbiAgICAgICAgLy8gaW5kaWNlcyBhbmQgb3V0cHV0SW5kaWNlcyBhcmUgMmQgdGVuc29ycyB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgICBvdXRwdXRJbmRpY2VzW291dHB1dEkgKiByYW5rICsgal0gPSBpbmRpY2VzW2kgKiByYW5rICsgal07XG4gICAgICB9XG4gICAgICBvdXRwdXRWYWx1ZXNbb3V0cHV0SV0gPSB2YWx1ZXNbaV07XG4gICAgICAvLyBXZSdsbCBuZWVkIHRoaXMgcmV2ZXJzZSBpbmRleCBtYXAgdG8gYmFja3Byb3AgY29ycmVjdGx5LlxuICAgICAgcmV2ZXJzZUluZGV4TWFwW2ldID0gb3V0cHV0STtcbiAgICB9XG5cbiAgICAvLyBGaWxsIGluIHZhbHVlcyBmb3Igcm93cyB0aGF0IGFyZSBtaXNzaW5nXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGVuc2VSb3dzOyArK3Jvdykge1xuICAgICAgY29uc3Qgcm93Q291bnQgPSBmaWxsZWRDb3VudFtyb3ddO1xuICAgICAgaWYgKHJvd0NvdW50ID09PSAwKSB7ICAvLyBXZSBoYXZlbid0IGZpbGxlZCB0aGlzIHJvd1xuICAgICAgICBjb25zdCBzdGFydGluZ0luZGV4ID0gKHJvdyA9PT0gMCkgPyAwIDogY3NyT2Zmc2V0W3JvdyAtIDFdO1xuICAgICAgICAvLyBSZW1haW5pbmcgaW5kZXggdmFsdWVzIHdlcmUgc2V0IHRvIHplcm8gYWxyZWFkeS5cbiAgICAgICAgLy8gSnVzdCBuZWVkIHRvIHNldCB0aGUgcm93IGluZGV4IGluIHRoZSByaWdodCBsb2NhdGlvbi5cbiAgICAgICAgLy8gb3V0cHV0SW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtOLCByYW5rXVxuICAgICAgICBvdXRwdXRJbmRpY2VzW3N0YXJ0aW5nSW5kZXggKiByYW5rICsgMF0gPSByb3c7XG4gICAgICAgIGZvciAobGV0IGNvbCA9IDE7IGNvbCA8IHJhbms7ICsrY29sKSB7XG4gICAgICAgICAgb3V0cHV0SW5kaWNlc1tzdGFydGluZ0luZGV4ICogcmFuayArIGNvbF0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dFZhbHVlc1tzdGFydGluZ0luZGV4XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIG91dHB1dEluZGljZXMsIFtmdWxsSW5kaWNlc0NvdW50LCByYW5rXSwgb3V0cHV0VmFsdWVzLCBlbXB0eVJvd0luZGljYXRvcixcbiAgICAgIHJldmVyc2VJbmRleE1hcFxuICAgIF07XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseReshapeImpl(inputIndices, inputIndicesShape, inputDType, inputShape, targetShape) {\n const denseSize = util.sizeFromShape(inputShape);\n const nnz = inputIndicesShape[0];\n const outputRank = targetShape.length;\n // Compute the output shape. Determine product of specified dimensions, and\n // find the index of the unspecified one.\n const outputShape = [];\n let product = 1;\n let unknownIndex = -1;\n for (let d = 0; d < outputRank; ++d) {\n const size = targetShape[d];\n if (size === -1) {\n if (unknownIndex !== -1) {\n throw new Error(backend_util\n .getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(unknownIndex, d));\n }\n unknownIndex = d;\n outputShape.push(1);\n }\n else {\n if (size < 0) {\n throw new Error(backend_util.getSparseReshapeNegativeOutputDimErrorMessage(d, size));\n }\n product *= size;\n outputShape.push(size);\n }\n }\n if (unknownIndex !== -1) {\n if (product <= 0) {\n throw new Error(backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());\n }\n const missing = Math.trunc(denseSize / product);\n if (product * missing !== denseSize) {\n throw new Error(backend_util.getSparseReshapeInputOutputMultipleErrorMessage(inputShape, outputShape));\n }\n outputShape[unknownIndex] = missing;\n }\n const outputSize = util.sizeFromShape(outputShape);\n if (outputSize !== denseSize) {\n throw new Error(backend_util.getSparseReshapeInputOutputMismatchErrorMessage(inputShape, outputShape));\n }\n const inputRank = inputShape.length;\n const inputStrides = [];\n if (inputRank > 0) {\n inputStrides[inputRank - 1] = 1;\n for (let d = inputRank - 2; d >= 0; --d) {\n inputStrides[d] = inputStrides[d + 1] * inputShape[d + 1];\n }\n }\n const outputStrides = [];\n if (outputRank > 0) {\n outputStrides[outputRank - 1] = 1;\n for (let d = outputRank - 2; d >= 0; --d) {\n outputStrides[d] = outputStrides[d + 1] * outputShape[d + 1];\n }\n }\n const newIndices = util.getArrayFromDType(inputDType, nnz * outputRank);\n for (let i = 0; i < nnz; ++i) {\n let id = 0;\n for (let j = 0; j < inputRank; ++j) {\n // inputIndices is a 2d tensor with shape of [nnz, inputRank]\n id += inputIndices[i * inputRank + j] * inputStrides[j];\n }\n for (let j = 0; j < outputRank; ++j) {\n // newIndices is a 2d tensor with shape of [nnz, outputRank]\n newIndices[i * outputRank + j] = Math.trunc(id / outputStrides[j]);\n id %= outputStrides[j];\n }\n }\n return [newIndices, [nnz, outputRank], outputShape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlUmVzaGFwZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VSZXNoYXBlX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixZQUF3QixFQUFFLGlCQUEyQixFQUFFLFVBQW9CLEVBQzNFLFVBQW9CLEVBQ3BCLFdBQXFCO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUV0QywyRUFBMkU7SUFDM0UseUNBQXlDO0lBQ3pDLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUNqQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDWCxZQUFZO3FCQUNQLHdEQUF3RCxDQUNyRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQjtZQUNELFlBQVksR0FBRyxDQUFDLENBQUM7WUFDakIs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LEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbkMsNERBQTREO1lBQzVELFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEVBQUUsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERhdGFUeXBlLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlUmVzaGFwZUltcGwoXG4gICAgaW5wdXRJbmRpY2VzOiBUeXBlZEFycmF5LCBpbnB1dEluZGljZXNTaGFwZTogbnVtYmVyW10sIGlucHV0RFR5cGU6IERhdGFUeXBlLFxuICAgIGlucHV0U2hhcGU6IG51bWJlcltdLFxuICAgIHRhcmdldFNoYXBlOiBudW1iZXJbXSk6IFtUeXBlZEFycmF5LCBudW1iZXJbXSwgbnVtYmVyW11dIHtcbiAgY29uc3QgZGVuc2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGlucHV0U2hhcGUpO1xuICBjb25zdCBubnogPSBpbnB1dEluZGljZXNTaGFwZVswXTtcbiAgY29uc3Qgb3V0cHV0UmFuayA9IHRhcmdldFNoYXBlLmxlbmd0aDtcblxuICAvLyBDb21wdXRlIHRoZSBvdXRwdXQgc2hhcGUuIERldGVybWluZSBwcm9kdWN0IG9mIHNwZWNpZmllZCBkaW1lbnNpb25zLCBhbmRcbiAgLy8gZmluZCB0aGUgaW5kZXggb2YgdGhlIHVuc3BlY2lmaWVkIG9uZS5cbiAgY29uc3Qgb3V0cHV0U2hhcGU6IG51bWJlcltdID0gW107XG4gIGxldCBwcm9kdWN0ID0gMTtcbiAgbGV0IHVua25vd25JbmRleCA9IC0xO1xuICBmb3IgKGxldCBkID0gMDsgZCA8IG91dHB1dFJhbms7ICsrZCkge1xuICAgIGNvbnN0IHNpemUgPSB0YXJnZXRTaGFwZVtkXTtcbiAgICBpZiAoc2l6ZSA9PT0gLTEpIHtcbiAgICAgIGlmICh1bmtub3duSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgICAgIC5nZXRTcGFyc2VSZXNoYXBlTXVsdGlwbGVOZWdhdGl2ZU9uZU91dHB1dERpbUVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bkluZGV4LCBkKSk7XG4gICAgICB9XG4gICAgICB1bmtub3duSW5kZXggPSBkO1xuICAgICAgb3V0cHV0U2hhcGUucHVzaCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VSZXNoYXBlTmVnYXRpdmVPdXRwdXREaW1FcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgZCwgc2l6ZSkpO1xuICAgICAgfVxuICAgICAgcHJvZHVjdCAqPSBzaXplO1xuICAgICAgb3V0cHV0U2hhcGUucHVzaChzaXplKTtcbiAgICB9XG4gIH1cbiAgaWYgKHVua25vd25JbmRleCAhPT0gLTEpIHtcbiAgICBpZiAocHJvZHVjdCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVJlc2hhcGVFbXB0eVRlbnNvclplcm9PdXRwdXREaW1FcnJvck1lc3NhZ2UoKSk7XG4gICAgfVxuICAgIGNvbnN0IG1pc3NpbmcgPSBNYXRoLnRydW5jKGRlbnNlU2l6ZSAvIHByb2R1Y3QpO1xuICAgIGlmIChwcm9kdWN0ICogbWlzc2luZyAhPT0gZGVuc2VTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVJlc2hhcGVJbnB1dE91dHB1dE11bHRpcGxlRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSkpO1xuICAgIH1cblxuICAgIG91dHB1dFNoYXBlW3Vua25vd25JbmRleF0gPSBtaXNzaW5nO1xuICB9XG4gIGNvbnN0IG91dHB1dFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0cHV0U2hhcGUpO1xuICBpZiAob3V0cHV0U2l6ZSAhPT0gZGVuc2VTaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TWlzbWF0Y2hFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICBpbnB1dFNoYXBlLCBvdXRwdXRTaGFwZSkpO1xuICB9XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXRTaGFwZS5sZW5ndGg7XG4gIGNvbnN0IGlucHV0U3RyaWRlczogbnVtYmVyW10gPSBbXTtcbiAgaWYgKGlucHV0UmFuayA+IDApIHtcbiAgICBpbnB1dFN0cmlkZXNbaW5wdXRSYW5rIC0gMV0gPSAxO1xuICAgIGZvciAobGV0IGQgPSBpbnB1dFJhbmsgLSAyOyBkID49IDA7IC0tZCkge1xuICAgICAgaW5wdXRTdHJpZGVzW2RdID0gaW5wdXRTdHJpZGVzW2QgKyAxXSAqIGlucHV0U2hhcGVbZCArIDFdO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG91dHB1dFN0cmlkZXM6IG51bWJlcltdID0gW107XG4gIGlmIChvdXRwdXRSYW5rID4gMCkge1xuICAgIG91dHB1dFN0cmlkZXNbb3V0cHV0UmFuayAtIDFdID0gMTtcbiAgICBmb3IgKGxldCBkID0gb3V0cHV0UmFuayAtIDI7IGQgPj0gMDsgLS1kKSB7XG4gICAgICBvdXRwdXRTdHJpZGVzW2RdID0gb3V0cHV0U3RyaWRlc1tkICsgMV0gKiBvdXRwdXRTaGFwZVtkICsgMV07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV3SW5kaWNlcyA9XG4gICAgICB1dGlsLmdldEFycmF5RnJvbURUeXBlKGlucHV0RFR5cGUsIG5ueiAqIG91dHB1dFJhbmspIGFzIFR5cGVkQXJyYXk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm56OyArK2kpIHtcbiAgICBsZXQgaWQgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRSYW5rOyArK2opIHtcbiAgICAgIC8vIGlucHV0SW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtubnosIGlucHV0UmFua11cbiAgICAgIGlkICs9IGlucHV0SW5kaWNlc1tpICogaW5wdXRSYW5rICsgal0gKiBpbnB1dFN0cmlkZXNbal07XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3V0cHV0UmFuazsgKytqKSB7XG4gICAgICAvLyBuZXdJbmRpY2VzIGlzIGEgMmQgdGVuc29yIHdpdGggc2hhcGUgb2YgW25ueiwgb3V0cHV0UmFua11cbiAgICAgIG5ld0luZGljZXNbaSAqIG91dHB1dFJhbmsgKyBqXSA9IE1hdGgudHJ1bmMoaWQgLyBvdXRwdXRTdHJpZGVzW2pdKTtcbiAgICAgIGlkICU9IG91dHB1dFN0cmlkZXNbal07XG4gICAgfVxuICB9XG4gIHJldHVybiBbbmV3SW5kaWNlcywgW25ueiwgb3V0cHV0UmFua10sIG91dHB1dFNoYXBlXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nexport function sparseSegmentReductionImpl(input, inputShape, inputDType, indices, segmentIds, isMean = false, defaultValue = 0) {\n const numIndices = indices.length;\n // Flatten the array to two dimensions\n const inputFlat = [inputShape[0], input.length / inputShape[0]];\n const numCol = inputFlat[1];\n // Note that the current implementation assumes that segmentIds values are\n // sorted.\n const lastSegmentIdPlusOne = numIndices > 0 ? segmentIds[numIndices - 1] + 1 : 0;\n const outputRows = lastSegmentIdPlusOne;\n if (outputRows < 0) {\n throw new Error(backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());\n }\n const outputShape = inputShape.slice();\n outputShape[0] = outputRows;\n const outputLength = outputShape.reduce((product, value) => product * value, 1);\n // Output array is initialized with the value 0 by default.\n const output = util.getArrayFromDType(inputDType, outputLength);\n // Note that we do not initialize the output buffer with a default value, so\n // we need to explicitly set missing indices to the default value.\n if (numIndices === 0) {\n if (outputRows > 0) {\n output.fill(defaultValue);\n }\n return [output, outputShape];\n }\n if (outputRows <= 0) {\n throw new Error(backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());\n }\n let start = 0, end = 1;\n // Index from which the output is not initialized.\n let uninitializedIndex = 0;\n let outIndex = segmentIds[start];\n while (true) {\n // We initialize nextIndex to 0 to avoid may be uninitialized warning\n let nextIndex = 0;\n if (end < numIndices) {\n nextIndex = segmentIds[end];\n if (outIndex === nextIndex) {\n ++end;\n continue;\n }\n // We have a new segment here. Verify that the segment ids are growing.\n if (outIndex >= nextIndex) {\n throw new Error(backend_util\n .getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage());\n }\n }\n if (outIndex < 0 || outIndex >= outputRows) {\n throw new Error(backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(outIndex, outputRows));\n }\n // If there is a gap between two indices, we need to set that gap to the\n // default value.\n if (outIndex > uninitializedIndex) {\n output.fill(defaultValue, uninitializedIndex * numCol, outIndex * numCol);\n }\n for (let i = start; i < end; ++i) {\n const index = indices[i];\n if (index < 0 || index >= inputFlat[0]) {\n throw new Error(backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(i, indices[i], inputFlat[0]));\n }\n for (let j = 0; j < numCol; j++) {\n output[outIndex * numCol + j] += input[index * numCol + j];\n }\n }\n if (isMean) {\n for (let j = 0; j < numCol; j++) {\n output[outIndex * numCol + j] /= end - start;\n }\n }\n start = end;\n ++end;\n uninitializedIndex = outIndex + 1;\n outIndex = nextIndex;\n if (end > numIndices) {\n break;\n }\n }\n // Fill the gap at the end with the default value.\n if (uninitializedIndex < outputRows) {\n output.fill(defaultValue, uninitializedIndex * numCol, outputRows * numCol);\n }\n return [output, outputShape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFJlZHVjdGlvbl9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGFyc2VTZWdtZW50UmVkdWN0aW9uX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBd0IsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0UsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxLQUFpQixFQUFFLFVBQW9CLEVBQUUsVUFBb0IsRUFDN0QsT0FBbUIsRUFBRSxVQUFzQixFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQzNELFlBQVksR0FBRyxDQUFDO0lBQ2xCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFFbEMsc0NBQXNDO0lBQ3RDLE1BQU0sU0FBUyxHQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLDBFQUEwRTtJQUMxRSxVQUFVO0lBQ1YsTUFBTSxvQkFBb0IsR0FDdEIsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztJQUV4QyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FDWCxZQUFZLENBQUMsdURBQXVELEVBQUUsQ0FBQyxDQUFDO0tBQzdFO0lBRUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lB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LE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQzthQUM5QztTQUNGO1FBRUQsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLEVBQUUsR0FBRyxDQUFDO1FBQ04sa0JBQWtCLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRTtZQUNwQixNQUFNO1NBQ1A7S0FDRjtJQUVELGtEQUFrRDtJQUNsRCxJQUFJLGtCQUFrQixHQUFHLFVBQVUsRUFBRTtRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsR0FBRyxNQUFNLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQzdFO0lBRUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGF0YVR5cGUsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbChcbiAgICBpbnB1dDogVHlwZWRBcnJheSwgaW5wdXRTaGFwZTogbnVtYmVyW10sIGlucHV0RFR5cGU6IERhdGFUeXBlLFxuICAgIGluZGljZXM6IFR5cGVkQXJyYXksIHNlZ21lbnRJZHM6IFR5cGVkQXJyYXksIGlzTWVhbiA9IGZhbHNlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IDApOiBbVHlwZWRBcnJheSwgbnVtYmVyW11dIHtcbiAgY29uc3QgbnVtSW5kaWNlcyA9IGluZGljZXMubGVuZ3RoO1xuXG4gIC8vIEZsYXR0ZW4gdGhlIGFycmF5IHRvIHR3byBkaW1lbnNpb25zXG4gIGNvbnN0IGlucHV0RmxhdDogbnVtYmVyW10gPSBbaW5wdXRTaGFwZVswXSwgaW5wdXQubGVuZ3RoIC8gaW5wdXRTaGFwZVswXV07XG4gIGNvbnN0IG51bUNvbCA9IGlucHV0RmxhdFsxXTtcbiAgLy8gTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCBzZWdtZW50SWRzIHZhbHVlcyBhcmVcbiAgLy8gc29ydGVkLlxuICBjb25zdCBsYXN0U2VnbWVudElkUGx1c09uZSA9XG4gICAgICBudW1JbmRpY2VzID4gMCA/IHNlZ21lbnRJZHNbbnVtSW5kaWNlcyAtIDFdICsgMSA6IDA7XG4gIGNvbnN0IG91dHB1dFJvd3MgPSBsYXN0U2VnbWVudElkUGx1c09uZTtcblxuICBpZiAob3V0cHV0Um93cyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uTmVnYXRpdmVTZWdtZW50SWRzRXJyb3JNZXNzYWdlKCkpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBpbnB1dFNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlWzBdID0gb3V0cHV0Um93cztcblxuICBjb25zdCBvdXRwdXRMZW5ndGggPVxuICAgICAgb3V0cHV0U2hhcGUucmVkdWNlKChwcm9kdWN0LCB2YWx1ZSkgPT4gcHJvZHVjdCAqIHZhbHVlLCAxKTtcbiAgLy8gT3V0cHV0IGFycmF5IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlIDAgYnkgZGVmYXVsdC5cbiAgY29uc3Qgb3V0cHV0ID0gdXRpbC5nZXRBcnJheUZyb21EVHlwZShpbnB1dERUeXBlLCBvdXRwdXRMZW5ndGgpIGFzIFR5cGVkQXJyYXk7XG5cbiAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBpbml0aWFsaXplIHRoZSBvdXRwdXQgYnVmZmVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCBzb1xuICAvLyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IG1pc3NpbmcgaW5kaWNlcyB0byB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgaWYgKG51bUluZGljZXMgPT09IDApIHtcbiAgICBpZiAob3V0cHV0Um93cyA+IDApIHtcbiAgICAgIG91dHB1dC5maWxsKGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBbb3V0cHV0LCBvdXRwdXRTaGFwZV07XG4gIH1cblxuICBpZiAob3V0cHV0Um93cyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlU2VnbWVudFJlZHVjdGlvbk5lZ2F0aXZlU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpKTtcbiAgfVxuXG4gIGxldCBzdGFydCA9IDAsIGVuZCA9IDE7XG4gIC8vIEluZGV4IGZyb20gd2hpY2ggdGhlIG91dHB1dCBpcyBub3QgaW5pdGlhbGl6ZWQuXG4gIGxldCB1bmluaXRpYWxpemVkSW5kZXggPSAwO1xuICBsZXQgb3V0SW5kZXggPSBzZWdtZW50SWRzW3N0YXJ0XTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIFdlIGluaXRpYWxpemUgbmV4dEluZGV4IHRvIDAgdG8gYXZvaWQgbWF5IGJlIHVuaW5pdGlhbGl6ZWQgd2FybmluZ1xuICAgIGxldCBuZXh0SW5kZXggPSAwO1xuICAgIGlmIChlbmQgPCBudW1JbmRpY2VzKSB7XG4gICAgICBuZXh0SW5kZXggPSBzZWdtZW50SWRzW2VuZF07XG4gICAgICBpZiAob3V0SW5kZXggPT09IG5leHRJbmRleCkge1xuICAgICAgICArK2VuZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBXZSBoYXZlIGEgbmV3IHNlZ21lbnQgaGVyZS4gIFZlcmlmeSB0aGF0IHRoZSBzZWdtZW50IGlkcyBhcmUgZ3Jvd2luZy5cbiAgICAgIGlmIChvdXRJbmRleCA+PSBuZXh0SW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25Ob25JbmNyZWFzaW5nU2VnbWVudElkc0Vycm9yTWVzc2FnZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3V0SW5kZXggPCAwIHx8IG91dEluZGV4ID49IG91dHB1dFJvd3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlU2VnbWVudFJlZHVjdGlvblNlZ21lbnRJZE91dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIG91dEluZGV4LCBvdXRwdXRSb3dzKSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0d28gaW5kaWNlcywgd2UgbmVlZCB0byBzZXQgdGhhdCBnYXAgdG8gdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZS5cbiAgICBpZiAob3V0SW5kZXggPiB1bmluaXRpYWxpemVkSW5kZXgpIHtcbiAgICAgIG91dHB1dC5maWxsKGRlZmF1bHRWYWx1ZSwgdW5pbml0aWFsaXplZEluZGV4ICogbnVtQ29sLCBvdXRJbmRleCAqIG51bUNvbCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5kaWNlc1tpXTtcbiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gaW5wdXRGbGF0WzBdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VTZWdtZW50UmVkdWN0aW9uSW5kaWNlc091dE9mUmFuZ2VFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgaSwgaW5kaWNlc1tpXSwgaW5wdXRGbGF0WzBdKSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbDsgaisrKSB7XG4gICAgICAgIG91dHB1dFtvdXRJbmRleCAqIG51bUNvbCArIGpdICs9IGlucHV0W2luZGV4ICogbnVtQ29sICsgal07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTWVhbikge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2w7IGorKykge1xuICAgICAgICBvdXRwdXRbb3V0SW5kZXggKiBudW1Db2wgKyBqXSAvPSBlbmQgLSBzdGFydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydCA9IGVuZDtcbiAgICArK2VuZDtcbiAgICB1bmluaXRpYWxpemVkSW5kZXggPSBvdXRJbmRleCArIDE7XG4gICAgb3V0SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgaWYgKGVuZCA+IG51bUluZGljZXMpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpbGwgdGhlIGdhcCBhdCB0aGUgZW5kIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUuXG4gIGlmICh1bmluaXRpYWxpemVkSW5kZXggPCBvdXRwdXRSb3dzKSB7XG4gICAgb3V0cHV0LmZpbGwoZGVmYXVsdFZhbHVlLCB1bmluaXRpYWxpemVkSW5kZXggKiBudW1Db2wsIG91dHB1dFJvd3MgKiBudW1Db2wpO1xuICB9XG5cbiAgcmV0dXJuIFtvdXRwdXQsIG91dHB1dFNoYXBlXTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sqrt } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sqrtImpl = createSimpleUnaryImpl((xi) => Math.sqrt(xi));\nexport const sqrt = unaryKernelFunc(Sqrt, (xi) => Math.sqrt(xi));\nexport const sqrtConfig = {\n kernelName: Sqrt,\n backendName: 'cpu',\n kernelFunc: sqrt,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNxcnR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlVW5hcnlJbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV9pbXBsJztcbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzcXJ0SW1wbCA9IGNyZWF0ZVNpbXBsZVVuYXJ5SW1wbCgoeGkpID0+IE1hdGguc3FydCh4aSkpO1xuZXhwb3J0IGNvbnN0IHNxcnQgPSB1bmFyeUtlcm5lbEZ1bmMoU3FydCwgKHhpKSA9PiBNYXRoLnNxcnQoeGkpKTtcblxuZXhwb3J0IGNvbnN0IHNxcnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3FydCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzcXJ0LFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SquaredDifference } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const squaredDifferenceImpl = createSimpleBinaryKernelImpl(((a, b) => {\n const diff = a - b;\n return diff * diff;\n}));\nexport const squaredDifference = binaryKernelFunc(SquaredDifference, squaredDifferenceImpl);\nexport const squaredDifferenceConfig = {\n kernelName: SquaredDifference,\n backendName: 'cpu',\n kernelFunc: squaredDifference\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlZERpZmZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NxdWFyZWREaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUM5Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFO0lBQ3JELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FDMUIsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUI7SUFDbkQsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsaUJBQWlCO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcXVhcmVkRGlmZmVyZW5jZX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzcXVhcmVkRGlmZmVyZW5jZUltcGwgPVxuICAgIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoKChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgZGlmZiA9IGEgLSBiO1xuICAgICAgcmV0dXJuIGRpZmYgKiBkaWZmO1xuICAgIH0pKTtcbmV4cG9ydCBjb25zdCBzcXVhcmVkRGlmZmVyZW5jZSA9XG4gICAgYmluYXJ5S2VybmVsRnVuYyhTcXVhcmVkRGlmZmVyZW5jZSwgc3F1YXJlZERpZmZlcmVuY2VJbXBsKTtcblxuZXhwb3J0IGNvbnN0IHNxdWFyZWREaWZmZXJlbmNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNxdWFyZWREaWZmZXJlbmNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNxdWFyZWREaWZmZXJlbmNlXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StaticRegexReplace } from '@tensorflow/tfjs-core';\nimport { createSimpleUnaryImpl } from '../utils/unary_impl';\nimport { unaryKernelFuncFromImpl } from '../utils/unary_utils';\nexport const staticRegexReplaceImpl = createSimpleUnaryImpl((x, attrs) => {\n const { pattern, replaceGlobal, rewrite } = attrs;\n // TODO(mattSoulanille): Don't create a regex each time.\n return x.replace(new RegExp(pattern, replaceGlobal ? 'g' : ''), rewrite);\n});\nconst staticRegexReplace = unaryKernelFuncFromImpl(StaticRegexReplace, staticRegexReplaceImpl);\nexport const staticRegexReplaceConfig = {\n kernelName: StaticRegexReplace,\n backendName: 'cpu',\n kernelFunc: staticRegexReplace,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGljUmVnZXhSZXBsYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdGF0aWNSZWdleFJlcGxhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLGtCQUFrQixFQUEwQixNQUFNLHVCQUF1QixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHFCQUFxQixDQUNqRCxDQUFDLENBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUMsR0FDckMsS0FBMkMsQ0FBQztJQUM5Qyx3REFBd0Q7SUFDeEQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUN0Qix1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFpQjtJQUNwRCxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxrQkFBa0I7Q0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN0YXRpY1JlZ2V4UmVwbGFjZSwgU3RhdGljUmVnZXhSZXBsYWNlQXR0cnN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge2NyZWF0ZVNpbXBsZVVuYXJ5SW1wbH0gZnJvbSAnLi4vdXRpbHMvdW5hcnlfaW1wbCc7XG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY0Zyb21JbXBsfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzdGF0aWNSZWdleFJlcGxhY2VJbXBsID0gY3JlYXRlU2ltcGxlVW5hcnlJbXBsPHN0cmluZyxcbiAgc3RyaW5nPigoeDogc3RyaW5nLCBhdHRycykgPT4ge1xuICAgIGNvbnN0IHtwYXR0ZXJuLCByZXBsYWNlR2xvYmFsLCByZXdyaXRlfSA9XG4gICAgICBhdHRycyBhcyB1bmtub3duIGFzIFN0YXRpY1JlZ2V4UmVwbGFjZUF0dHJzO1xuICAgIC8vIFRPRE8obWF0dFNvdWxhbmlsbGUpOiBEb24ndCBjcmVhdGUgYSByZWdleCBlYWNoIHRpbWUuXG4gICAgcmV0dXJuIHgucmVwbGFjZShuZXcgUmVnRXhwKHBhdHRlcm4sIHJlcGxhY2VHbG9iYWwgPyAnZycgOiAnJyksIHJld3JpdGUpO1xufSk7XG5cbmNvbnN0IHN0YXRpY1JlZ2V4UmVwbGFjZSA9XG4gIHVuYXJ5S2VybmVsRnVuY0Zyb21JbXBsKFN0YXRpY1JlZ2V4UmVwbGFjZSwgc3RhdGljUmVnZXhSZXBsYWNlSW1wbCk7XG5cbmV4cG9ydCBjb25zdCBzdGF0aWNSZWdleFJlcGxhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RhdGljUmVnZXhSZXBsYWNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHN0YXRpY1JlZ2V4UmVwbGFjZSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function stridedSliceImpl(outShape, xBuf, strides, begin) {\n const outBuf = buffer(outShape, xBuf.dtype);\n for (let i = 0; i < outBuf.size; i++) {\n const loc = outBuf.indexToLoc(i);\n const newLoc = new Array(loc.length);\n for (let j = 0; j < newLoc.length; j++) {\n newLoc[j] = loc[j] * strides[j] + begin[j];\n }\n outBuf.set(xBuf.get(...newLoc), ...loc);\n }\n return outBuf;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaWRlZFNsaWNlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1N0cmlkZWRTbGljZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxNQUFNLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFFakUsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixRQUFrQixFQUFFLElBQXFCLEVBQUUsT0FBaUIsRUFDNUQsS0FBZTtJQUNqQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sTUFBTSxHQUFhLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxNQUF5QixDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YnVmZmVyLCBSYW5rLCBUZW5zb3JCdWZmZXJ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpZGVkU2xpY2VJbXBsPFIgZXh0ZW5kcyBSYW5rPihcbiAgICBvdXRTaGFwZTogbnVtYmVyW10sIHhCdWY6IFRlbnNvckJ1ZmZlcjxSPiwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgYmVnaW46IG51bWJlcltdKTogVGVuc29yQnVmZmVyPFI+IHtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKG91dFNoYXBlLCB4QnVmLmR0eXBlKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dEJ1Zi5zaXplOyBpKyspIHtcbiAgICBjb25zdCBsb2MgPSBvdXRCdWYuaW5kZXhUb0xvYyhpKTtcblxuICAgIGNvbnN0IG5ld0xvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkobG9jLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdMb2MubGVuZ3RoOyBqKyspIHtcbiAgICAgIG5ld0xvY1tqXSA9IGxvY1tqXSAqIHN0cmlkZXNbal0gKyBiZWdpbltqXTtcbiAgICB9XG4gICAgb3V0QnVmLnNldCh4QnVmLmdldCguLi5uZXdMb2MpLCAuLi5sb2MpO1xuICB9XG5cbiAgcmV0dXJuIG91dEJ1ZiBhcyBUZW5zb3JCdWZmZXI8Uj47XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\n/**\n * The StringNGramsOp class creates ngrams from ragged string data.\n * The constructor contains all attributes related to the operation such as\n * padding widths and strings, and the compute function can be used to\n * compute the ngrams for different ragged tensor inputs.\n */\nclass StringNGramsOp {\n constructor(separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n this.separator = util.encodeString(separator);\n this.nGramWidths = nGramWidths;\n this.leftPad = util.encodeString(leftPad);\n this.rightPad = util.encodeString(rightPad);\n this.padWidth = padWidth;\n this.preserveShort = preserveShortSequences;\n }\n getPadWidth(nGramWidth) {\n // Ngrams can be padded with either a fixed pad width or a dynamic pad\n // width depending on the 'padWidth' arg, but in no case should the padding\n // ever be wider than 'nGramWidth' - 1.\n return Math.min(this.padWidth < 0 ? nGramWidth - 1 : this.padWidth, nGramWidth - 1);\n }\n getNumNGrams(length, nGramWidth) {\n const padWidth = this.getPadWidth(nGramWidth);\n return Math.max(0, ((length + 2 * padWidth) - nGramWidth) + 1);\n }\n createNGrams(data, splitIndex, output, outputStartIndex, numNGrams, nGramWidth) {\n for (let nGramIndex = 0; nGramIndex < numNGrams; ++nGramIndex) {\n const padWidth = this.getPadWidth(nGramWidth);\n const leftPadding = Math.max(0, padWidth - nGramIndex);\n const rightPadding = Math.max(0, padWidth - (numNGrams - (nGramIndex + 1)));\n const numTokens = nGramWidth - (leftPadding + rightPadding);\n const dataStartIndex = splitIndex + (leftPadding > 0 ? 0 : nGramIndex - padWidth);\n // Calculate the total expected size of the nGram so we can reserve the\n // correct amount of space in the string.\n let nGramSize = 0;\n // Size of the left padding.\n nGramSize += leftPadding * this.leftPad.length;\n // Size of the tokens.\n for (let n = 0; n < numTokens; ++n) {\n nGramSize += data[dataStartIndex + n].length;\n }\n // Size of the right padding.\n nGramSize += rightPadding * this.rightPad.length;\n // Size of the separators.\n const numSeparators = leftPadding + rightPadding + numTokens - 1;\n nGramSize += numSeparators * this.separator.length;\n // Build the nGram.\n output[outputStartIndex + nGramIndex] = new Uint8Array(nGramSize);\n const nGram = output[outputStartIndex + nGramIndex];\n let nextNGramIndex = 0;\n const appendToNGram = (str) => str.forEach((value) => nGram[nextNGramIndex++] = value);\n for (let n = 0; n < leftPadding; ++n) {\n appendToNGram(this.leftPad);\n appendToNGram(this.separator);\n }\n // Only output first numTokens - 1 pairs of data and separator\n for (let n = 0; n < numTokens - 1; ++n) {\n appendToNGram(data[dataStartIndex + n]);\n appendToNGram(this.separator);\n }\n // Handle case when there are no tokens or no right padding as these\n // can result in consecutive separators.\n if (numTokens > 0) {\n // If we have tokens, then output last and then pair each separator\n // with the right padding that follows, to ensure nGram ends either with\n // the token or with the right pad.\n appendToNGram(data[dataStartIndex + numTokens - 1]);\n for (let n = 0; n < rightPadding; ++n) {\n appendToNGram(this.separator);\n appendToNGram(this.rightPad);\n }\n }\n else {\n // If we don't have tokens, then the last item inserted into the nGram\n // has been the separator from the left padding loop above. Hence,\n // output right pad and separator and make sure to finish with a\n // padding, not a separator.\n for (let n = 0; n < rightPadding - 1; ++n) {\n appendToNGram(this.rightPad);\n appendToNGram(this.separator);\n }\n appendToNGram(this.rightPad);\n }\n }\n }\n // Data and splits together form the definition of the ragged tensor,\n // where data is 1 dimensional and contains the values of the tensor\n // and splits denotes the indices at which each row starts.\n compute(data, splits) {\n // Validate that the splits are valid indices into data, only if there are\n // splits specified.\n const inputDataSize = data.length;\n const splitsSize = splits.length;\n if (splitsSize > 0) {\n let prevSplit = splits[0];\n if (prevSplit !== 0) {\n throw new Error(`First split value must be 0, got ${prevSplit}`);\n }\n for (let i = 1; i < splitsSize; ++i) {\n let validSplits = splits[i] >= prevSplit;\n validSplits = validSplits && (splits[i] <= inputDataSize);\n if (!validSplits) {\n throw new Error(`Invalid split value ${splits[i]}, must be in [${prevSplit}, ${inputDataSize}]`);\n }\n prevSplit = splits[i];\n }\n if (prevSplit !== inputDataSize) {\n throw new Error(`Last split value must be data size. Expected ${inputDataSize}, got ${prevSplit}`);\n }\n }\n const numBatchItems = splitsSize - 1;\n const nGramsSplits = util.getArrayFromDType('int32', splitsSize);\n // If there is no data or size, return an empty ragged tensor.\n if (inputDataSize === 0 || splitsSize === 0) {\n const empty = new Array(inputDataSize);\n for (let i = 0; i <= numBatchItems; ++i) {\n nGramsSplits[i] = 0;\n }\n return [empty, nGramsSplits];\n }\n nGramsSplits[0] = 0;\n for (let i = 1; i <= numBatchItems; ++i) {\n const length = splits[i] - splits[i - 1];\n let numNGrams = 0;\n this.nGramWidths.forEach((nGramWidth) => {\n numNGrams += this.getNumNGrams(length, nGramWidth);\n });\n if (this.preserveShort && length > 0 && numNGrams === 0) {\n numNGrams = 1;\n }\n nGramsSplits[i] = nGramsSplits[i - 1] + numNGrams;\n }\n const nGrams = new Array(nGramsSplits[numBatchItems]);\n for (let i = 0; i < numBatchItems; ++i) {\n const splitIndex = splits[i];\n let outputStartIdx = nGramsSplits[i];\n this.nGramWidths.forEach((nGramWidth) => {\n const length = splits[i + 1] - splits[i];\n const numNGrams = this.getNumNGrams(length, nGramWidth);\n this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth);\n outputStartIdx += numNGrams;\n });\n // If we're preserving short sequences, check to see if no sequence was\n // generated by comparing the current output start idx to the original\n // one (nGramSplitsdata). If no ngrams were generated, then they will\n // be equal (since we increment outputStartIdx by numNGrams every\n // time we create a set of ngrams.)\n if (this.preserveShort && outputStartIdx === nGramsSplits[i]) {\n const dataLength = splits[i + 1] - splits[i];\n // One legitimate reason to not have any ngrams when this.preserveShort\n // is true is if the sequence itself is empty. In that case, move on.\n if (dataLength === 0) {\n continue;\n }\n // We don't have to worry about dynamic padding sizes here: if padding\n // was dynamic, every sequence would have had sufficient padding to\n // generate at least one nGram.\n const nGramWidth = dataLength + 2 * this.padWidth;\n const numNGrams = 1;\n this.createNGrams(data, splitIndex, nGrams, outputStartIdx, numNGrams, nGramWidth);\n }\n }\n return [nGrams, nGramsSplits];\n }\n}\nexport function stringNGramsImpl(data, dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences) {\n return new StringNGramsOp(separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences)\n .compute(data, dataSplits);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nTkdyYW1zX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1N0cmluZ05HcmFtc19pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzQzs7Ozs7R0FLRztBQUNILE1BQU0sY0FBYztJQVFsQixZQUNJLFNBQWlCLEVBQUUsV0FBcUIsRUFBRSxPQUFlLEVBQ3pELFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxzQkFBK0I7UUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztJQUM5QyxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQWtCO1FBQ3BDLHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsdUNBQXVDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDWCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsVUFBa0I7UUFDckQsTUFBTSxRQUFR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QVksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsSUFBa0IsRUFBRSxVQUFzQixFQUFFLFNBQWlCLEVBQzdELFdBQXFCLEVBQUUsT0FBZSxFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFDMUUsc0JBQStCO0lBQ2pDLE9BQU8sSUFBSSxjQUFjLENBQ2QsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDbkQsc0JBQXNCLENBQUM7U0FDN0IsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge3V0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8qKlxuICogVGhlIFN0cmluZ05HcmFtc09wIGNsYXNzIGNyZWF0ZXMgbmdyYW1zIGZyb20gcmFnZ2VkIHN0cmluZyBkYXRhLlxuICogVGhlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIGFsbCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIG9wZXJhdGlvbiBzdWNoIGFzXG4gKiBwYWRkaW5nIHdpZHRocyBhbmQgc3RyaW5ncywgYW5kIHRoZSBjb21wdXRlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvXG4gKiBjb21wdXRlIHRoZSBuZ3JhbXMgZm9yIGRpZmZlcmVudCByYWdnZWQgdGVuc29yIGlucHV0cy5cbiAqL1xuY2xhc3MgU3RyaW5nTkdyYW1zT3Age1xuICBwcml2YXRlIHNlcGFyYXRvcjogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBuR3JhbVdpZHRoczogbnVtYmVyW107XG4gIHByaXZhdGUgcGFkV2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBsZWZ0UGFkOiBVaW50OEFycmF5O1xuICBwcml2YXRlIHJpZ2h0UGFkOiBVaW50OEFycmF5O1xuICBwcml2YXRlIHByZXNlcnZlU2hvcnQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBzZXBhcmF0b3I6IHN0cmluZywgbkdyYW1XaWR0aHM6IG51bWJlcltdLCBsZWZ0UGFkOiBzdHJpbmcsXG4gICAgICByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLCBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB1dGlsLmVuY29kZVN0cmluZyhzZXBhcmF0b3IpO1xuICAgIHRoaXMubkdyYW1XaWR0aHMgPSBuR3JhbVdpZHRocztcbiAgICB0aGlzLmxlZnRQYWQgPSB1dGlsLmVuY29kZVN0cmluZyhsZWZ0UGFkKTtcbiAgICB0aGlzLnJpZ2h0UGFkID0gdXRpbC5lbmNvZGVTdHJpbmcocmlnaHRQYWQpO1xuICAgIHRoaXMucGFkV2lkdGggPSBwYWRXaWR0aDtcbiAgICB0aGlzLnByZXNlcnZlU2hvcnQgPSBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYWRXaWR0aChuR3JhbVdpZHRoOiBudW1iZXIpIHtcbiAgICAvLyBOZ3JhbXMgY2FuIGJlIHBhZGRlZCB3aXRoIGVpdGhlciBhIGZpeGVkIHBhZCB3aWR0aCBvciBhIGR5bmFtaWMgcGFkXG4gICAgLy8gd2lkdGggZGVwZW5kaW5nIG9uIHRoZSAncGFkV2lkdGgnIGFyZywgYnV0IGluIG5vIGNhc2Ugc2hvdWxkIHRoZSBwYWRkaW5nXG4gICAgLy8gZXZlciBiZSB3aWRlciB0aGFuICduR3JhbVdpZHRoJyAtIDEuXG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgICB0aGlzLnBhZFdpZHRoIDwgMCA/IG5HcmFtV2lkdGggLSAxIDogdGhpcy5wYWRXaWR0aCwgbkdyYW1XaWR0aCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1OR3JhbXMobGVuZ3RoOiBudW1iZXIsIG5HcmFtV2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZFdpZHRoID0gdGhpcy5nZXRQYWRXaWR0aChuR3JhbVdpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKChsZW5ndGggKyAyICogcGFkV2lkdGgpIC0gbkdyYW1XaWR0aCkgKyAxKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTkdyYW1zKFxuICAgICAgZGF0YTogVWludDhBcnJheVtdLCBzcGxpdEluZGV4OiBudW1iZXIsIG91dHB1dDogVWludDhBcnJheVtdLFxuICAgICAgb3V0cHV0U3RhcnRJbmRleDogbnVtYmVyLCBudW1OR3JhbXM6IG51bWJlciwgbkdyYW1XaWR0aDogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgbkdyYW1JbmRleCA9IDA7IG5HcmFtSW5kZXggPCBudW1OR3JhbXM7ICsrbkdyYW1JbmRleCkge1xuICAgICAgY29uc3QgcGFkV2lkdGggPSB0aGlzLmdldFBhZFdpZHRoKG5HcmFtV2lkdGgpO1xuICAgICAgY29uc3QgbGVmdFBhZGRpbmcgPSBNYXRoLm1heCgwLCBwYWRXaWR0aCAtIG5HcmFtSW5kZXgpO1xuICAgICAgY29uc3QgcmlnaHRQYWRkaW5nID1cbiAgICAgICAgICBNYXRoLm1heCgwLCBwYWRXaWR0aCAtIChudW1OR3JhbXMgLSAobkdyYW1JbmRleCArIDEpKSk7XG4gICAgICBjb25zdCBudW1Ub2tlbnMgPSBuR3JhbVdpZHRoIC0gKGxlZnRQYWRkaW5nICsgcmlnaHRQYWRkaW5nKTtcbiAgICAgIGNvbnN0IGRhdGFTdGFydEluZGV4ID1cbiAgICAgICAgICBzcGxpdEluZGV4ICsgKGxlZnRQYWRkaW5nID4gMCA/IDAgOiBuR3JhbUluZGV4IC0gcGFkV2lkdGgpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGV4cGVjdGVkIHNpemUgb2YgdGhlIG5HcmFtIHNvIHdlIGNhbiByZXNlcnZlIHRoZVxuICAgICAgLy8gY29ycmVjdCBhbW91bnQgb2Ygc3BhY2UgaW4gdGhlIHN0cmluZy5cbiAgICAgIGxldCBuR3JhbVNpemUgPSAwO1xuICAgICAgLy8gU2l6ZSBvZiB0aGUgbGVmdCBwYWRkaW5nLlxuICAgICAgbkdyYW1TaXplICs9IGxlZnRQYWRkaW5nICogdGhpcy5sZWZ0UGFkLmxlbmd0aDtcbiAgICAgIC8vIFNpemUgb2YgdGhlIHRva2Vucy5cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbnVtVG9rZW5zOyArK24pIHtcbiAgICAgICAgbkdyYW1TaXplICs9IGRhdGFbZGF0YVN0YXJ0SW5kZXggKyBuXS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBTaXplIG9mIHRoZSByaWdodCBwYWRkaW5nLlxuICAgICAgbkdyYW1TaXplICs9IHJpZ2h0UGFkZGluZyAqIHRoaXMucmlnaHRQYWQubGVuZ3RoO1xuICAgICAgLy8gU2l6ZSBvZiB0aGUgc2VwYXJhdG9ycy5cbiAgICAgIGNvbnN0IG51bVNlcGFyYXRvcnMgPSBsZWZ0UGFkZGluZyArIHJpZ2h0UGFkZGluZyArIG51bVRva2VucyAtIDE7XG4gICAgICBuR3JhbVNpemUgKz0gbnVtU2VwYXJhdG9ycyAqIHRoaXMuc2VwYXJhdG9yLmxlbmd0aDtcblxuICAgICAgLy8gQnVpbGQgdGhlIG5HcmFtLlxuICAgICAgb3V0cHV0W291dHB1dFN0YXJ0SW5kZXggKyBuR3JhbUluZGV4XSA9IG5ldyBVaW50OEFycmF5KG5HcmFtU2l6ZSk7XG4gICAgICBjb25zdCBuR3JhbSA9IG91dHB1dFtvdXRwdXRTdGFydEluZGV4ICsgbkdyYW1JbmRleF07XG5cbiAgICAgIGxldCBuZXh0TkdyYW1JbmRleCA9IDA7XG4gICAgICBjb25zdCBhcHBlbmRUb05HcmFtID0gKHN0cjogVWludDhBcnJheSkgPT5cbiAgICAgICAgICBzdHIuZm9yRWFjaCgodmFsdWUpID0+IG5HcmFtW25leHROR3JhbUluZGV4KytdID0gdmFsdWUpO1xuXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGxlZnRQYWRkaW5nOyArK24pIHtcbiAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLmxlZnRQYWQpO1xuICAgICAgICBhcHBlbmRUb05HcmFtKHRoaXMuc2VwYXJhdG9yKTtcbiAgICAgIH1cbiAgICAgIC8vIE9ubHkgb3V0cHV0IGZpcnN0IG51bVRva2VucyAtIDEgcGFpcnMgb2YgZGF0YSBhbmQgc2VwYXJhdG9yXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG51bVRva2VucyAtIDE7ICsrbikge1xuICAgICAgICBhcHBlbmRUb05HcmFtKGRhdGFbZGF0YVN0YXJ0SW5kZXggKyBuXSk7XG4gICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5zZXBhcmF0b3IpO1xuICAgICAgfVxuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0aGVyZSBhcmUgbm8gdG9rZW5zIG9yIG5vIHJpZ2h0IHBhZGRpbmcgYXMgdGhlc2VcbiAgICAgIC8vIGNhbiByZXN1bHQgaW4gY29uc2VjdXRpdmUgc2VwYXJhdG9ycy5cbiAgICAgIGlmIChudW1Ub2tlbnMgPiAwKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgdG9rZW5zLCB0aGVuIG91dHB1dCBsYXN0IGFuZCB0aGVuIHBhaXIgZWFjaCBzZXBhcmF0b3JcbiAgICAgICAgLy8gd2l0aCB0aGUgcmlnaHQgcGFkZGluZyB0aGF0IGZvbGxvd3MsIHRvIGVuc3VyZSBuR3JhbSBlbmRzIGVpdGhlciB3aXRoXG4gICAgICAgIC8vIHRoZSB0b2tlbiBvciB3aXRoIHRoZSByaWdodCBwYWQuXG4gICAgICAgIGFwcGVuZFRvTkdyYW0oZGF0YVtkYXRhU3RhcnRJbmRleCArIG51bVRva2VucyAtIDFdKTtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByaWdodFBhZGRpbmc7ICsrbikge1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5zZXBhcmF0b3IpO1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5yaWdodFBhZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9rZW5zLCB0aGVuIHRoZSBsYXN0IGl0ZW0gaW5zZXJ0ZWQgaW50byB0aGUgbkdyYW1cbiAgICAgICAgLy8gaGFzIGJlZW4gdGhlIHNlcGFyYXRvciBmcm9tIHRoZSBsZWZ0IHBhZGRpbmcgbG9vcCBhYm92ZS4gSGVuY2UsXG4gICAgICAgIC8vIG91dHB1dCByaWdodCBwYWQgYW5kIHNlcGFyYXRvciBhbmQgbWFrZSBzdXJlIHRvIGZpbmlzaCB3aXRoIGFcbiAgICAgICAgLy8gcGFkZGluZywgbm90IGEgc2VwYXJhdG9yLlxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJpZ2h0UGFkZGluZyAtIDE7ICsrbikge1xuICAgICAgICAgIGFwcGVuZFRvTkdyYW0odGhpcy5yaWdodFBhZCk7XG4gICAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLnNlcGFyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXBwZW5kVG9OR3JhbSh0aGlzLnJpZ2h0UGFkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEYXRhIGFuZCBzcGxpdHMgdG9nZXRoZXIgZm9ybSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmFnZ2VkIHRlbnNvcixcbiAgLy8gd2hlcmUgZGF0YSBpcyAxIGRpbWVuc2lvbmFsIGFuZCBjb250YWlucyB0aGUgdmFsdWVzIG9mIHRoZSB0ZW5zb3JcbiAgLy8gYW5kIHNwbGl0cyBkZW5vdGVzIHRoZSBpbmRpY2VzIGF0IHdoaWNoIGVhY2ggcm93IHN0YXJ0cy5cbiAgcHVibGljIGNvbXB1dGUoZGF0YTogVWludDhBcnJheVtdLCBzcGxpdHM6IEludDMyQXJyYXkpOlxuICAgICAgW1VpbnQ4QXJyYXlbXSwgSW50MzJBcnJheV0ge1xuICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHNwbGl0cyBhcmUgdmFsaWQgaW5kaWNlcyBpbnRvIGRhdGEsIG9ubHkgaWYgdGhlcmUgYXJlXG4gICAgLy8gc3BsaXRzIHNwZWNpZmllZC5cbiAgICBjb25zdCBpbnB1dERhdGFTaXplID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgc3BsaXRzU2l6ZSA9IHNwbGl0cy5sZW5ndGg7XG4gICAgaWYgKHNwbGl0c1NpemUgPiAwKSB7XG4gICAgICBsZXQgcHJldlNwbGl0ID0gc3BsaXRzWzBdO1xuICAgICAgaWYgKHByZXZTcGxpdCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpcnN0IHNwbGl0IHZhbHVlIG11c3QgYmUgMCwgZ290ICR7cHJldlNwbGl0fWApO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzcGxpdHNTaXplOyArK2kpIHtcbiAgICAgICAgbGV0IHZhbGlkU3BsaXRzID0gc3BsaXRzW2ldID49IHByZXZTcGxpdDtcbiAgICAgICAgdmFsaWRTcGxpdHMgPSB2YWxpZFNwbGl0cyAmJiAoc3BsaXRzW2ldIDw9IGlucHV0RGF0YVNpemUpO1xuICAgICAgICBpZiAoIXZhbGlkU3BsaXRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNwbGl0IHZhbHVlICR7c3BsaXRzW2ldfSwgbXVzdCBiZSBpbiBbJHtcbiAgICAgICAgICAgICAgcHJldlNwbGl0fSwgJHtpbnB1dERhdGFTaXplfV1gKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2U3BsaXQgPSBzcGxpdHNbaV07XG4gICAgICB9XG4gICAgICBpZiAocHJldlNwbGl0ICE9PSBpbnB1dERhdGFTaXplKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFzdCBzcGxpdCB2YWx1ZSBtdXN0IGJlIGRhdGEgc2l6ZS4gRXhwZWN0ZWQgJHtcbiAgICAgICAgICAgIGlucHV0RGF0YVNpemV9LCBnb3QgJHtwcmV2U3BsaXR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbnVtQmF0Y2hJdGVtcyA9IHNwbGl0c1NpemUgLSAxO1xuICAgIGNvbnN0IG5HcmFtc1NwbGl0cyA9IHV0aWwuZ2V0QXJyYXlGcm9tRFR5cGUoJ2ludDMyJywgc3BsaXRzU2l6ZSk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBvciBzaXplLCByZXR1cm4gYW4gZW1wdHkgcmFnZ2VkIHRlbnNvci5cbiAgICBpZiAoaW5wdXREYXRhU2l6ZSA9PT0gMCB8fCBzcGxpdHNTaXplID09PSAwKSB7XG4gICAgICBjb25zdCBlbXB0eTogVWludDhBcnJheVtdID0gbmV3IEFycmF5KGlucHV0RGF0YVNpemUpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICAgIG5HcmFtc1NwbGl0c1tpXSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2VtcHR5LCBuR3JhbXNTcGxpdHNdO1xuICAgIH1cblxuICAgIG5HcmFtc1NwbGl0c1swXSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBzcGxpdHNbaV0gLSBzcGxpdHNbaSAtIDFdO1xuICAgICAgbGV0IG51bU5HcmFtcyA9IDA7XG4gICAgICB0aGlzLm5HcmFtV2lkdGhzLmZvckVhY2goKG5HcmFtV2lkdGgpID0+IHtcbiAgICAgICAgbnVtTkdyYW1zICs9IHRoaXMuZ2V0TnVtTkdyYW1zKGxlbmd0aCwgbkdyYW1XaWR0aCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlU2hvcnQgJiYgbGVuZ3RoID4gMCAmJiBudW1OR3JhbXMgPT09IDApIHtcbiAgICAgICAgbnVtTkdyYW1zID0gMTtcbiAgICAgIH1cbiAgICAgIG5HcmFtc1NwbGl0c1tpXSA9IG5HcmFtc1NwbGl0c1tpIC0gMV0gKyBudW1OR3JhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgbkdyYW1zOiBVaW50OEFycmF5W10gPSBuZXcgQXJyYXkobkdyYW1zU3BsaXRzW251bUJhdGNoSXRlbXNdKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQmF0Y2hJdGVtczsgKytpKSB7XG4gICAgICBjb25zdCBzcGxpdEluZGV4ID0gc3BsaXRzW2ldO1xuICAgICAgbGV0IG91dHB1dFN0YXJ0SWR4ID0gbkdyYW1zU3BsaXRzW2ldO1xuICAgICAgdGhpcy5uR3JhbVdpZHRocy5mb3JFYWNoKChuR3JhbVdpZHRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHNwbGl0c1tpICsgMV0gLSBzcGxpdHNbaV07XG4gICAgICAgIGNvbnN0IG51bU5HcmFtcyA9IHRoaXMuZ2V0TnVtTkdyYW1zKGxlbmd0aCwgbkdyYW1XaWR0aCk7XG4gICAgICAgIHRoaXMuY3JlYXRlTkdyYW1zKFxuICAgICAgICAgICAgZGF0YSwgc3BsaXRJbmRleCwgbkdyYW1zLCBvdXRwdXRTdGFydElkeCwgbnVtTkdyYW1zLCBuR3JhbVdpZHRoKTtcbiAgICAgICAgb3V0cHV0U3RhcnRJZHggKz0gbnVtTkdyYW1zO1xuICAgICAgfSk7XG4gICAgICAvLyBJZiB3ZSdyZSBwcmVzZXJ2aW5nIHNob3J0IHNlcXVlbmNlcywgY2hlY2sgdG8gc2VlIGlmIG5vIHNlcXVlbmNlIHdhc1xuICAgICAgLy8gZ2VuZXJhdGVkIGJ5IGNvbXBhcmluZyB0aGUgY3VycmVudCBvdXRwdXQgc3RhcnQgaWR4IHRvIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gb25lIChuR3JhbVNwbGl0c2RhdGEpLiBJZiBubyBuZ3JhbXMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4gdGhleSB3aWxsXG4gICAgICAvLyBiZSBlcXVhbCAoc2luY2Ugd2UgaW5jcmVtZW50IG91dHB1dFN0YXJ0SWR4IGJ5IG51bU5HcmFtcyBldmVyeVxuICAgICAgLy8gdGltZSB3ZSBjcmVhdGUgYSBzZXQgb2YgbmdyYW1zLilcbiAgICAgIGlmICh0aGlzLnByZXNlcnZlU2hvcnQgJiYgb3V0cHV0U3RhcnRJZHggPT09IG5HcmFtc1NwbGl0c1tpXSkge1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gc3BsaXRzW2kgKyAxXSAtIHNwbGl0c1tpXTtcbiAgICAgICAgLy8gT25lIGxlZ2l0aW1hdGUgcmVhc29uIHRvIG5vdCBoYXZlIGFueSBuZ3JhbXMgd2hlbiB0aGlzLnByZXNlcnZlU2hvcnRcbiAgICAgICAgLy8gaXMgdHJ1ZSBpcyBpZiB0aGUgc2VxdWVuY2UgaXRzZWxmIGlzIGVtcHR5LiBJbiB0aGF0IGNhc2UsIG1vdmUgb24uXG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBkeW5hbWljIHBhZGRpbmcgc2l6ZXMgaGVyZTogaWYgcGFkZGluZ1xuICAgICAgICAvLyB3YXMgZHluYW1pYywgZXZlcnkgc2VxdWVuY2Ugd291bGQgaGF2ZSBoYWQgc3VmZmljaWVudCBwYWRkaW5nIHRvXG4gICAgICAgIC8vIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBuR3JhbS5cbiAgICAgICAgY29uc3QgbkdyYW1XaWR0aCA9IGRhdGFMZW5ndGggKyAyICogdGhpcy5wYWRXaWR0aDtcbiAgICAgICAgY29uc3QgbnVtTkdyYW1zID0gMTtcbiAgICAgICAgdGhpcy5jcmVhdGVOR3JhbXMoXG4gICAgICAgICAgICBkYXRhLCBzcGxpdEluZGV4LCBuR3JhbXMsIG91dHB1dFN0YXJ0SWR4LCBudW1OR3JhbXMsIG5HcmFtV2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW25HcmFtcywgbkdyYW1zU3BsaXRzXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTkdyYW1zSW1wbChcbiAgICBkYXRhOiBVaW50OEFycmF5W10sIGRhdGFTcGxpdHM6IEludDMyQXJyYXksIHNlcGFyYXRvcjogc3RyaW5nLFxuICAgIG5HcmFtV2lkdGhzOiBudW1iZXJbXSwgbGVmdFBhZDogc3RyaW5nLCByaWdodFBhZDogc3RyaW5nLCBwYWRXaWR0aDogbnVtYmVyLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXM6IGJvb2xlYW4pOiBbVWludDhBcnJheVtdLCBJbnQzMkFycmF5XSB7XG4gIHJldHVybiBuZXcgU3RyaW5nTkdyYW1zT3AoXG4gICAgICAgICAgICAgc2VwYXJhdG9yLCBuR3JhbVdpZHRocywgbGVmdFBhZCwgcmlnaHRQYWQsIHBhZFdpZHRoLFxuICAgICAgICAgICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXMpXG4gICAgICAuY29tcHV0ZShkYXRhLCBkYXRhU3BsaXRzKTtcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nfunction split(str, delimiters, skipEmpty, result) {\n if (!str.length) {\n return;\n }\n // When the delimiter is empty, the input is split into individual characters.\n if (delimiters.length === 0) {\n for (let i = 0; i < str.length; ++i) {\n result.push(str.subarray(i, i + 1));\n }\n return;\n }\n // When there is one delimiter, the input is split only at that delimiter.\n if (delimiters.length === 1) {\n const delimiter = delimiters[0];\n let f = str.indexOf(delimiter);\n while (f !== -1) {\n const token = str.subarray(0, f);\n if (!skipEmpty || token.length !== 0) {\n result.push(token);\n }\n str = str.subarray(f + 1);\n f = str.indexOf(delimiter);\n }\n if (!skipEmpty || str.length !== 0) {\n result.push(str);\n }\n return;\n }\n // When there are multiple delimiters, the input is split at every instance\n // one of the delimiters appears.\n let tokenStart = 0;\n for (let i = 0; i < str.length + 1; i++) {\n if ((i === str.length) || (delimiters.indexOf(str[i]) !== -1)) {\n const token = str.subarray(tokenStart, i);\n if (!skipEmpty || token.length !== 0) {\n result.push(token);\n }\n tokenStart = i + 1;\n }\n }\n}\nexport function stringSplitImpl(input, delimiter, skipEmpty) {\n const batchSize = input.length;\n // Empty delimiter means split the input character by character.\n const tokens = [];\n let outputSize = 0;\n let maxNumEntries = 0;\n const numIndices = new Array(batchSize);\n for (let i = 0; i < batchSize; ++i) {\n const prevTokensLength = tokens.length;\n split(input[i], delimiter, skipEmpty, tokens);\n const nEntries = tokens.length - prevTokensLength;\n numIndices[i] = nEntries;\n outputSize += nEntries;\n maxNumEntries = Math.max(maxNumEntries, nEntries);\n }\n const indices = util.getArrayFromDType('int32', outputSize * 2);\n const values = new Array(outputSize);\n const shape = [batchSize, maxNumEntries];\n let c = 0;\n for (let i = 0; i < batchSize; ++i) {\n for (let j = 0; j < numIndices[i]; ++j) {\n // indices is a 2d tensor with shape of [outputSize, 2]\n indices[c * 2] = i;\n indices[c * 2 + 1] = j;\n values[c] = tokens[c];\n ++c;\n }\n }\n return [indices, values, shape];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nU3BsaXRfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3RyaW5nU3BsaXRfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsU0FBUyxLQUFLLENBQ1YsR0FBZSxFQUFFLFVBQXNCLEVBQUUsU0FBa0IsRUFDM0QsTUFBb0I7SUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDZixPQUFPO0tBQ1I7SUFDRCw4RUFBOEU7SUFDOUUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTztLQUNSO0lBQ0QsMEVBQTBFO0lBQzFFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNwQyxN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LENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsRUFBRSxDQUFDLENBQUM7U0FDTDtLQUNGO0lBRUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5mdW5jdGlvbiBzcGxpdChcbiAgICBzdHI6IFVpbnQ4QXJyYXksIGRlbGltaXRlcnM6IFVpbnQ4QXJyYXksIHNraXBFbXB0eTogYm9vbGVhbixcbiAgICByZXN1bHQ6IFVpbnQ4QXJyYXlbXSk6IHZvaWQge1xuICBpZiAoIXN0ci5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gV2hlbiB0aGUgZGVsaW1pdGVyIGlzIGVtcHR5LCB0aGUgaW5wdXQgaXMgc3BsaXQgaW50byBpbmRpdmlkdWFsIGNoYXJhY3RlcnMuXG4gIGlmIChkZWxpbWl0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICByZXN1bHQucHVzaChzdHIuc3ViYXJyYXkoaSwgaSArIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdoZW4gdGhlcmUgaXMgb25lIGRlbGltaXRlciwgdGhlIGlucHV0IGlzIHNwbGl0IG9ubHkgYXQgdGhhdCBkZWxpbWl0ZXIuXG4gIGlmIChkZWxpbWl0ZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGRlbGltaXRlciA9IGRlbGltaXRlcnNbMF07XG4gICAgbGV0IGYgPSBzdHIuaW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgIHdoaWxlIChmICE9PSAtMSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBzdHIuc3ViYXJyYXkoMCwgZik7XG4gICAgICBpZiAoIXNraXBFbXB0eSB8fCB0b2tlbi5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgICAgc3RyID0gc3RyLnN1YmFycmF5KGYgKyAxKTtcbiAgICAgIGYgPSBzdHIuaW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgIH1cbiAgICBpZiAoIXNraXBFbXB0eSB8fCBzdHIubGVuZ3RoICE9PSAwKSB7XG4gICAgICByZXN1bHQucHVzaChzdHIpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZGVsaW1pdGVycywgdGhlIGlucHV0IGlzIHNwbGl0IGF0IGV2ZXJ5IGluc3RhbmNlXG4gIC8vIG9uZSBvZiB0aGUgZGVsaW1pdGVycyBhcHBlYXJzLlxuICBsZXQgdG9rZW5TdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCArIDE7IGkrKykge1xuICAgIGlmICgoaSA9PT0gc3RyLmxlbmd0aCkgfHwgKGRlbGltaXRlcnMuaW5kZXhPZihzdHJbaV0pICE9PSAtMSkpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gc3RyLnN1YmFycmF5KHRva2VuU3RhcnQsIGkpO1xuICAgICAgaWYgKCFza2lwRW1wdHkgfHwgdG9rZW4ubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRva2VuKTtcbiAgICAgIH1cbiAgICAgIHRva2VuU3RhcnQgPSBpICsgMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1NwbGl0SW1wbChcbiAgICBpbnB1dDogVWludDhBcnJheVtdLCBkZWxpbWl0ZXI6IFVpbnQ4QXJyYXksXG4gICAgc2tpcEVtcHR5OiBib29sZWFuKTogW1R5cGVkQXJyYXksIFVpbnQ4QXJyYXlbXSwgW251bWJlciwgbnVtYmVyXV0ge1xuICBjb25zdCBiYXRjaFNpemUgPSBpbnB1dC5sZW5ndGg7XG5cbiAgLy8gRW1wdHkgZGVsaW1pdGVyIG1lYW5zIHNwbGl0IHRoZSBpbnB1dCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLlxuICBjb25zdCB0b2tlbnM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuXG4gIGxldCBvdXRwdXRTaXplID0gMDtcbiAgbGV0IG1heE51bUVudHJpZXMgPSAwO1xuICBjb25zdCBudW1JbmRpY2VzOiBudW1iZXJbXSA9IG5ldyBBcnJheShiYXRjaFNpemUpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJhdGNoU2l6ZTsgKytpKSB7XG4gICAgY29uc3QgcHJldlRva2Vuc0xlbmd0aCA9IHRva2Vucy5sZW5ndGg7XG4gICAgc3BsaXQoaW5wdXRbaV0sIGRlbGltaXRlciwgc2tpcEVtcHR5LCB0b2tlbnMpO1xuICAgIGNvbnN0IG5FbnRyaWVzID0gdG9rZW5zLmxlbmd0aCAtIHByZXZUb2tlbnNMZW5ndGg7XG4gICAgbnVtSW5kaWNlc1tpXSA9IG5FbnRyaWVzO1xuICAgIG91dHB1dFNpemUgKz0gbkVudHJpZXM7XG4gICAgbWF4TnVtRW50cmllcyA9IE1hdGgubWF4KG1heE51bUVudHJpZXMsIG5FbnRyaWVzKTtcbiAgfVxuXG4gIGNvbnN0IGluZGljZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIG91dHB1dFNpemUgKiAyKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB2YWx1ZXM6IFVpbnQ4QXJyYXlbXSA9IG5ldyBBcnJheShvdXRwdXRTaXplKTtcbiAgY29uc3Qgc2hhcGU6IFtudW1iZXIsIG51bWJlcl0gPSBbYmF0Y2hTaXplLCBtYXhOdW1FbnRyaWVzXTtcblxuICBsZXQgYyA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2hTaXplOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUluZGljZXNbaV07ICsraikge1xuICAgICAgLy8gaW5kaWNlcyBpcyBhIDJkIHRlbnNvciB3aXRoIHNoYXBlIG9mIFtvdXRwdXRTaXplLCAyXVxuICAgICAgaW5kaWNlc1tjICogMl0gPSBpO1xuICAgICAgaW5kaWNlc1tjICogMiArIDFdID0gajtcbiAgICAgIHZhbHVlc1tjXSA9IHRva2Vuc1tjXTtcbiAgICAgICsrYztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2luZGljZXMsIHZhbHVlcywgc2hhcGVdO1xufVxuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nexport function stringToHashBucketFastImpl(input, numBuckets) {\n const output = util.getArrayFromDType('int32', input.length);\n for (let i = 0; i < input.length; ++i) {\n output[i] =\n util.fingerPrint64(input[i]).modulo(numBuckets).getLowBitsUnsigned();\n }\n return output;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVG9IYXNoQnVja2V0RmFzdF9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdHJpbmdUb0hhc2hCdWNrZXRGYXN0X2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sVUFBVSwwQkFBMEIsQ0FDdEMsS0FBbUIsRUFBRSxVQUFrQjtJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUUzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztLQUMxRTtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7VHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsKFxuICAgIGlucHV0OiBVaW50OEFycmF5W10sIG51bUJ1Y2tldHM6IG51bWJlcik6IFR5cGVkQXJyYXkge1xuICBjb25zdCBvdXRwdXQgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIGlucHV0Lmxlbmd0aCkgYXMgVHlwZWRBcnJheTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XG4gICAgb3V0cHV0W2ldID1cbiAgICAgICAgdXRpbC5maW5nZXJQcmludDY0KGlucHV0W2ldKS5tb2R1bG8obnVtQnVja2V0cykuZ2V0TG93Qml0c1Vuc2lnbmVkKCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sub } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc, createComplexBinaryKernelImpl } from '../utils/binary_utils';\nexport const subImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => aValue - bValue));\nexport const subComplexImpl = createComplexBinaryKernelImpl(((aReal, aImag, bReal, bImag) => {\n return { real: aReal - bReal, imag: aImag - bImag };\n}));\nexport const sub = binaryKernelFunc(Sub, subImpl, subComplexImpl);\nexport const subConfig = {\n kernelName: Sub,\n backendName: 'cpu',\n kernelFunc: sub\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FDL0MsQ0FBQyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDdkIsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzVELE9BQU8sRUFBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN1Yn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmMsIGNyZWF0ZUNvbXBsZXhCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc3ViSW1wbCA9IGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoXG4gICAgKChhVmFsdWU6IG51bWJlciwgYlZhbHVlOiBudW1iZXIpID0+IGFWYWx1ZSAtIGJWYWx1ZSkpO1xuZXhwb3J0IGNvbnN0IHN1YkNvbXBsZXhJbXBsID1cbiAgICBjcmVhdGVDb21wbGV4QmluYXJ5S2VybmVsSW1wbCgoKGFSZWFsLCBhSW1hZywgYlJlYWwsIGJJbWFnKSA9PiB7XG4gICAgICByZXR1cm4ge3JlYWw6IGFSZWFsIC0gYlJlYWwsIGltYWc6IGFJbWFnIC0gYkltYWd9O1xuICAgIH0pKTtcbmV4cG9ydCBjb25zdCBzdWIgPSBiaW5hcnlLZXJuZWxGdW5jKFN1Yiwgc3ViSW1wbCwgc3ViQ29tcGxleEltcGwpO1xuXG5leHBvcnQgY29uc3Qgc3ViQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN1YixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzdWJcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\n/**\n * An implementation of the tile kernel shared between webgl and cpu for string\n * tensors only.\n */\nexport function tileImpl(xBuf, reps) {\n const newShape = new Array(xBuf.rank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = xBuf.shape[i] * reps[i];\n }\n const result = buffer(newShape, xBuf.dtype);\n for (let i = 0; i < result.values.length; ++i) {\n const newLoc = result.indexToLoc(i);\n const originalLoc = new Array(xBuf.rank);\n for (let j = 0; j < originalLoc.length; j++) {\n originalLoc[j] = newLoc[j] % xBuf.shape[j];\n }\n const originalIndex = xBuf.locToIndex(originalLoc);\n result.values[i] = xBuf.values[originalIndex];\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGlsZV9pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9UaWxlX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBK0IsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRTs7O0dBR0c7QUFFSCxNQUFNLFVBQVUsUUFBUSxDQUNwQixJQUErQixFQUMvQixJQUFjO0lBQ2hCLE1BQU0sUUFBUSxHQUFhLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdkM7SUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBYSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLE1BQW1DLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtidWZmZXIsIERhdGFUeXBlLCBSYW5rLCBUZW5zb3JCdWZmZXJ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRpbGUga2VybmVsIHNoYXJlZCBiZXR3ZWVuIHdlYmdsIGFuZCBjcHUgZm9yIHN0cmluZ1xuICogdGVuc29ycyBvbmx5LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0aWxlSW1wbDxSIGV4dGVuZHMgUmFuaz4oXG4gICAgeEJ1ZjogVGVuc29yQnVmZmVyPFIsIERhdGFUeXBlPixcbiAgICByZXBzOiBudW1iZXJbXSk6IFRlbnNvckJ1ZmZlcjxSLCBEYXRhVHlwZT4ge1xuICBjb25zdCBuZXdTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkoeEJ1Zi5yYW5rKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1NoYXBlW2ldID0geEJ1Zi5zaGFwZVtpXSAqIHJlcHNbaV07XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYnVmZmVyKG5ld1NoYXBlLCB4QnVmLmR0eXBlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQudmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbmV3TG9jID0gcmVzdWx0LmluZGV4VG9Mb2MoaSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbExvYzogbnVtYmVyW10gPSBuZXcgQXJyYXkoeEJ1Zi5yYW5rKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9yaWdpbmFsTG9jLmxlbmd0aDsgaisrKSB7XG4gICAgICBvcmlnaW5hbExvY1tqXSA9IG5ld0xvY1tqXSAlIHhCdWYuc2hhcGVbal07XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IHhCdWYubG9jVG9JbmRleChvcmlnaW5hbExvYyk7XG5cbiAgICByZXN1bHQudmFsdWVzW2ldID0geEJ1Zi52YWx1ZXNbb3JpZ2luYWxJbmRleF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBUZW5zb3JCdWZmZXI8UiwgRGF0YVR5cGU+O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/** An implementation of the TopK kernel shared between webgl and cpu. */\nimport { buffer, util } from '@tensorflow/tfjs-core';\nconst comparePair = (a, b) => {\n const valueDiff = b.value - a.value;\n return valueDiff === 0 ? a.index - b.index : valueDiff;\n};\n/**\n * Partitions array where all elements smaller than the (k+1) smallest element\n * are found to the left of it, and all larger to the right of it.\n * Based on the Floyd-Rivest Algorithm, ref:\n * https://en.wikipedia.org/wiki/Floyd%E2%80%93Rivest_algorithm\n * @param array: Array to partition\n * @param left: Left index for the interval\n * @param right: Right index for the interval\n * @param k: Desired index value, where array[k] is the (k+1)th smallest element\n * when left = 0\n */\nfunction select(array, k, left = 0, right = array.length - 1) {\n while (right > left) {\n // Use select recursively to sample a smaller set of size s\n // the arbitrary constants 600 and 0.5 are used in the original\n // version to minimize execution time.\n if (right - left > 600) {\n const n = right - left + 1;\n const i = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * Math.sign(i - n / 2);\n const newLeft = Math.max(left, Math.floor(k - i * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - i) * s / n + sd));\n select(array, k, newLeft, newRight);\n }\n // partition the elements between left and right around t\n const t = array[k];\n let i = left;\n let j = right;\n util.swap(array, left, k);\n if (comparePair(array[right], t) > 0) {\n util.swap(array, left, right);\n }\n while (i < j) {\n util.swap(array, i, j);\n i++;\n j--;\n while (comparePair(array[i], t) < 0) {\n i = i + 1;\n }\n while (comparePair(array[j], t) > 0) {\n j = j - 1;\n }\n }\n if (comparePair(array[left], t) === 0) {\n util.swap(array, left, j);\n }\n else {\n j = j + 1;\n util.swap(array, j, right);\n }\n // Adjust left and right towards the boundaries of the subset\n // containing the (k - left + 1)th smallest element.\n if (j <= k) {\n left = j + 1;\n }\n if (k <= j) {\n right = j - 1;\n }\n }\n}\nexport function topKImpl(x, xShape, xDtype, k, sorted) {\n // Reshape into a 2d tensor [batch, lastDim] and compute topk along lastDim.\n const lastDim = xShape[xShape.length - 1];\n const [batch, size] = [x.length / lastDim, lastDim];\n const allTopKVals = util.getTypedArrayFromDType(xDtype, batch * k);\n const allTopKIndices = util.getTypedArrayFromDType('int32', batch * k);\n for (let b = 0; b < batch; b++) {\n const offset = b * size;\n const vals = x.subarray(offset, offset + size);\n let valAndInd = new Array(vals.length);\n vals.forEach((value, index) => valAndInd[index] = { value, index });\n if (k < valAndInd.length) {\n select(valAndInd, k);\n valAndInd = valAndInd.slice(0, k);\n }\n if (sorted) {\n valAndInd.sort(comparePair);\n }\n const outOffset = b * k;\n const topKVals = allTopKVals.subarray(outOffset, outOffset + k);\n const topKIndices = allTopKIndices.subarray(outOffset, outOffset + k);\n for (let i = 0; i < k; i++) {\n topKVals[i] = valAndInd[i].value;\n topKIndices[i] = valAndInd[i].index;\n }\n }\n // Reshape back to the original input shape, except that the last\n // dimension is k.\n const outputShape = xShape.slice();\n outputShape[outputShape.length - 1] = k;\n return [\n buffer(outputShape, xDtype, allTopKVals),\n buffer(outputShape, 'int32', allTopKIndices)\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wS19pbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Ub3BLX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgseUVBQXlFO0FBRXpFLE9BQU8sRUFBQyxNQUFNLEVBQXFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBT3RILE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwQyxPQUFPLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxLQUFhLEVBQUUsQ0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztJQUMxRSxPQUFPLEtBQUssR0FBRyxJQUFJLEVBQUU7UUFDbkIsMkRBQTJEO1FBQzNELCtEQUErRDtRQUMvRCxzQ0FBc0M7UUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFD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QUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3JDO0tBQ0Y7SUFDRCxpRUFBaUU7SUFDakUsa0JBQWtCO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEMsT0FBTztRQUNMLE1BQU0sQ0FBQyxXQUEwQixFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDdkQsTUFBTSxDQUFDLFdBQTBCLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQztLQUM1RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUb3BLIGtlcm5lbCBzaGFyZWQgYmV0d2VlbiB3ZWJnbCBhbmQgY3B1LiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgTnVtZXJpY0RhdGFUeXBlLCBSYW5rLCBTaGFwZU1hcCwgVGVuc29yLCBUZW5zb3JCdWZmZXIsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbnR5cGUgUGFpciA9IHtcbiAgdmFsdWU6IG51bWJlcixcbiAgaW5kZXg6IG51bWJlclxufTtcblxuY29uc3QgY29tcGFyZVBhaXIgPSAoYTogUGFpciwgYjogUGFpcikgPT4ge1xuICBjb25zdCB2YWx1ZURpZmYgPSBiLnZhbHVlIC0gYS52YWx1ZTtcbiAgcmV0dXJuIHZhbHVlRGlmZiA9PT0gMCA/IGEuaW5kZXggLSBiLmluZGV4IDogdmFsdWVEaWZmO1xufTtcblxuLyoqXG4gKiBQYXJ0aXRpb25zIGFycmF5IHdoZXJlIGFsbCBlbGVtZW50cyBzbWFsbGVyIHRoYW4gdGhlIChrKzEpIHNtYWxsZXN0IGVsZW1lbnRcbiAqIGFyZSBmb3VuZCB0byB0aGUgbGVmdCBvZiBpdCwgYW5kIGFsbCBsYXJnZXIgdG8gdGhlIHJpZ2h0IG9mIGl0LlxuICogQmFzZWQgb24gdGhlIEZsb3lkLVJpdmVzdCBBbGdvcml0aG0sIHJlZjpcbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zsb3lkJUUyJTgwJTkzUml2ZXN0X2FsZ29yaXRobVxuICogQHBhcmFtIGFycmF5OiBBcnJheSB0byBwYXJ0aXRpb25cbiAqIEBwYXJhbSBsZWZ0OiBMZWZ0IGluZGV4IGZvciB0aGUgaW50ZXJ2YWxcbiAqIEBwYXJhbSByaWdodDogUmlnaHQgaW5kZXggZm9yIHRoZSBpbnRlcnZhbFxuICogQHBhcmFtIGs6IERlc2lyZWQgaW5kZXggdmFsdWUsIHdoZXJlIGFycmF5W2tdIGlzIHRoZSAoaysxKXRoIHNtYWxsZXN0IGVsZW1lbnRcbiAqICAgICAgICAgICB3aGVuIGxlZnQgPSAwXG4gKi9cbmZ1bmN0aW9uIHNlbGVjdChhcnJheTogUGFpcltdLCBrOiBudW1iZXIsIGxlZnQgPSAwLCByaWdodCA9IGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgIC8vIFVzZSBzZWxlY3QgcmVjdXJzaXZlbHkgdG8gc2FtcGxlIGEgc21hbGxlciBzZXQgb2Ygc2l6ZSBzXG4gICAgLy8gdGhlIGFyYml0cmFyeSBjb25zdGFudHMgNjAwIGFuZCAwLjUgYXJlIHVzZWQgaW4gdGhlIG9yaWdpbmFsXG4gICAgLy8gdmVyc2lvbiB0byBtaW5pbWl6ZSBleGVjdXRpb24gdGltZS5cbiAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICBjb25zdCBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IGkgPSBrIC0gbGVmdCArIDE7XG4gICAgICBjb25zdCB6ID0gTWF0aC5sb2cobik7XG4gICAgICBjb25zdCBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgIGNvbnN0IHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogTWF0aC5zaWduKGkgLSBuIC8gMik7XG4gICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gaSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gaSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICBzZWxlY3QoYXJyYXksIGssIG5ld0xlZnQsIG5ld1JpZ2h0KTtcbiAgICB9XG4gICAgLy8gcGFydGl0aW9uIHRoZSBlbGVtZW50cyBiZXR3ZWVuIGxlZnQgYW5kIHJpZ2h0IGFyb3VuZCB0XG4gICAgY29uc3QgdCA9IGFycmF5W2tdO1xuICAgIGxldCBpID0gbGVmdDtcbiAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCBrKTtcblxuICAgIGlmIChjb21wYXJlUGFpcihhcnJheVtyaWdodF0sIHQpID4gMCkge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCByaWdodCk7XG4gICAgfVxuICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBpLCBqKTtcbiAgICAgIGkrKztcbiAgICAgIGotLTtcbiAgICAgIHdoaWxlIChjb21wYXJlUGFpcihhcnJheVtpXSwgdCkgPCAwKSB7XG4gICAgICAgIGkgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjb21wYXJlUGFpcihhcnJheVtqXSwgdCkgPiAwKSB7XG4gICAgICAgIGogPSBqIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbXBhcmVQYWlyKGFycmF5W2xlZnRdLCB0KSA9PT0gMCkge1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBsZWZ0LCBqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaiA9IGogKyAxO1xuICAgICAgdXRpbC5zd2FwKGFycmF5LCBqLCByaWdodCk7XG4gICAgfVxuICAgIC8vIEFkanVzdCBsZWZ0IGFuZCByaWdodCB0b3dhcmRzIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzdWJzZXRcbiAgICAvLyBjb250YWluaW5nIHRoZSAoayAtIGxlZnQgKyAxKXRoIHNtYWxsZXN0IGVsZW1lbnQuXG4gICAgaWYgKGogPD0gaykge1xuICAgICAgbGVmdCA9IGogKyAxO1xuICAgIH1cbiAgICBpZiAoayA8PSBqKSB7XG4gICAgICByaWdodCA9IGogLSAxO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wS0ltcGw8VCBleHRlbmRzIFRlbnNvciwgUiBleHRlbmRzIFJhbms+KFxuICAgIHg6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIHhEdHlwZTogTnVtZXJpY0RhdGFUeXBlLCBrOiBudW1iZXIsXG4gICAgc29ydGVkOiBib29sZWFuKTpcbiAgICBbVGVuc29yQnVmZmVyPFIsIE51bWVyaWNEYXRhVHlwZT4sIFRlbnNvckJ1ZmZlcjxSLCAnaW50MzInPl0ge1xuICAvLyBSZXNoYXBlIGludG8gYSAyZCB0ZW5zb3IgW2JhdGNoLCBsYXN0RGltXSBhbmQgY29tcHV0ZSB0b3BrIGFsb25nIGxhc3REaW0uXG4gIGNvbnN0IGxhc3REaW0gPSB4U2hhcGVbeFNoYXBlLmxlbmd0aCAtIDFdO1xuICBjb25zdCBbYmF0Y2gsIHNpemVdID0gW3gubGVuZ3RoIC8gbGFzdERpbSwgbGFzdERpbV07XG4gIGNvbnN0IGFsbFRvcEtWYWxzID0gdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKHhEdHlwZSwgYmF0Y2ggKiBrKTtcbiAgY29uc3QgYWxsVG9wS0luZGljZXMgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2ludDMyJywgYmF0Y2ggKiBrKTtcblxuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyBiKyspIHtcbiAgICBjb25zdCBvZmZzZXQgPSBiICogc2l6ZTtcbiAgICBjb25zdCB2YWxzID0geC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIHNpemUpO1xuXG4gICAgbGV0IHZhbEFuZEluZDogUGFpcltdID0gbmV3IEFycmF5KHZhbHMubGVuZ3RoKTtcbiAgICB2YWxzLmZvckVhY2goXG4gICAgICAgICh2YWx1ZTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSA9PiB2YWxBbmRJbmRbaW5kZXhdID0ge3ZhbHVlLCBpbmRleH0pO1xuXG4gICAgaWYgKGsgPCB2YWxBbmRJbmQubGVuZ3RoKSB7XG4gICAgICBzZWxlY3QodmFsQW5kSW5kLCBrKTtcbiAgICAgIHZhbEFuZEluZCA9IHZhbEFuZEluZC5zbGljZSgwLCBrKTtcbiAgICB9XG5cbiAgICBpZiAoc29ydGVkKSB7XG4gICAgICB2YWxBbmRJbmQuc29ydChjb21wYXJlUGFpcik7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG91dE9mZnNldCA9IGIgKiBrO1xuICAgIGNvbnN0IHRvcEtWYWxzID0gYWxsVG9wS1ZhbHMuc3ViYXJyYXkob3V0T2Zmc2V0LCBvdXRPZmZzZXQgKyBrKTtcbiAgICBjb25zdCB0b3BLSW5kaWNlcyA9IGFsbFRvcEtJbmRpY2VzLnN1YmFycmF5KG91dE9mZnNldCwgb3V0T2Zmc2V0ICsgayk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgIHRvcEtWYWxzW2ldID0gdmFsQW5kSW5kW2ldLnZhbHVlO1xuICAgICAgdG9wS0luZGljZXNbaV0gPSB2YWxBbmRJbmRbaV0uaW5kZXg7XG4gICAgfVxuICB9XG4gIC8vIFJlc2hhcGUgYmFjayB0byB0aGUgb3JpZ2luYWwgaW5wdXQgc2hhcGUsIGV4Y2VwdCB0aGF0IHRoZSBsYXN0XG4gIC8vIGRpbWVuc2lvbiBpcyBrLlxuICBjb25zdCBvdXRwdXRTaGFwZSA9IHhTaGFwZS5zbGljZSgpO1xuICBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZS5sZW5ndGggLSAxXSA9IGs7XG5cbiAgcmV0dXJuIFtcbiAgICBidWZmZXIob3V0cHV0U2hhcGUgYXMgU2hhcGVNYXBbUl0sIHhEdHlwZSwgYWxsVG9wS1ZhbHMpLFxuICAgIGJ1ZmZlcihvdXRwdXRTaGFwZSBhcyBTaGFwZU1hcFtSXSwgJ2ludDMyJywgYWxsVG9wS0luZGljZXMpXG4gIF07XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer, util } from '@tensorflow/tfjs-core';\nexport function uniqueImpl(values, axis, shape, dtype) {\n // Normalize and validate axis.\n const $axis = util.parseAxisParam(axis, shape)[0];\n // Calculate the new shape that is suitable for extracting data along the\n // given axis.\n //\n // The rank is 3.\n // The size of the 1st dimension is the size of all the axes < the given axis.\n // The size of the 2nd dimension is the same as the size of the given axis.\n // The size of the 3rd dimension is the size of all the axes > the given axis.\n //\n // For example, for a 4D tensor with shape=[2, 3, 5, 4] and axis=2, the\n // newShape would be: [2*3, 5, 4].\n //\n // Note that this is not the final output shape. This will be the shape for an\n // intermediate TensorBuffer (see inputBuffer below) to allow us to extract\n // values along the given axis. To demonstrate how it works, consider the\n // following example:\n //\n // Input: a 3D tensor, with shape [1, 2, 3]\n // [\n // [\n // [1,2,3],\n // [4,5,6]\n // ]\n // ]\n // Axis: 2 (the last axis).\n // Along axis 2, we expect to extract 3 tensors: [1,4], [2,5], [3,6].\n //\n // For this example, newShape would be: [2, 3, 1], where 2 is calculated from\n // 1*2. The re-shaped data would look like:\n //\n // [\n // [\n // [1], [2], [3]\n // ],\n // [\n // [4], [5], [6]\n // ]\n // ]\n //\n // Then, we can construct a 3-level nested loop by the following dimension\n // order to extract the values along the axis (dimension1):\n // i: dimension1 // 0,1,2 (newShape[1])\n // m: dimension0 // 0,1 (newShape[0])\n // n: dimension2 // 0 (newShape[2])\n //\n // m, i, n\n // ---------\n // Iteration 0: data at [0, 0, 0] => \"1\"\n // Iteration 1: data at [1, 0, 0] => \"4\"\n // We got [1,4].\n // Iteration 2: data at [0, 1, 0] => \"2\"\n // Iteration 3: data at [1, 1, 0] => \"5\"\n // We got [2,5].\n // Iteration 4: data at [0, 2, 0] => \"3\"\n // Iteration 5: data at [1, 2, 0] => \"6\"\n // We got [3,6].\n const newShape = [1, shape[0], 1];\n for (let i = 0; i < $axis; i++) {\n newShape[0] *= shape[i];\n }\n newShape[1] = shape[$axis];\n for (let i = $axis + 1; i < shape.length; i++) {\n newShape[2] *= shape[i];\n }\n // A map from unique elements (their string representations) to their values\n // in \"indices\" (below).\n const uniqueElements = new Map();\n // The indices of each unique element in the original tensor along the given\n // axis. It is 1D and has the same size as the given axis.\n const indices = new Int32Array(shape[$axis]);\n // Create a buffer so we can easily extract value at a given location.\n const inputBuffer = new TensorBuffer(newShape, dtype, values);\n // The indices along the given axis that have unique elements. This is a\n // de-duped version of \"indices\" above.\n const uniqueIndices = [];\n const is1DTensor = newShape[0] === 1 && newShape[2] === 1;\n for (let i = 0; i < shape[$axis]; i++) {\n // Extract values along the axis.\n let element;\n if (is1DTensor) {\n // Fast path for 1D tensor input.\n element = values[i].toString();\n }\n else {\n const axisValues = [];\n for (let m = 0; m < newShape[0]; m++) {\n for (let n = 0; n < newShape[2]; n++) {\n axisValues.push(inputBuffer.get(m, i, n));\n }\n }\n element = axisValues.join(',');\n }\n // Dedup and update various indices.\n const existingIndex = uniqueElements.get(element);\n if (existingIndex != null) {\n indices[i] = existingIndex;\n }\n else {\n const uniqueIndex = uniqueElements.size;\n uniqueElements.set(element, uniqueIndex);\n indices[i] = uniqueIndex;\n uniqueIndices.push(i);\n }\n }\n // Now we know where each of the unique elements are located along the axis\n // (uniqueIndices). Extract them from input buffer and store them in the\n // output buffer.\n const outputTmpShape = newShape.slice();\n outputTmpShape[1] = uniqueElements.size;\n const outputBuffer = new TensorBuffer(outputTmpShape, dtype);\n uniqueIndices.forEach((uniqueElementIndex, i) => {\n for (let m = 0; m < newShape[0]; m++) {\n for (let n = 0; n < newShape[2]; n++) {\n outputBuffer.set(inputBuffer.get(m, uniqueElementIndex, n), m, i, n);\n }\n }\n });\n // The output shape can be calculated from the input shape with the size of\n // the given axis replaced by the number of unique elements along that axis.\n const outputShape = shape.slice();\n outputShape[$axis] = outputTmpShape[1];\n return {\n outputValues: outputBuffer.values,\n outputShape,\n indices,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1VuaXF1ZV9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMEIsWUFBWSxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlGLE1BQU0sVUFBVSxVQUFVLENBQ3RCLE1BQXFCLEVBQUUsSUFBWSxFQUFFLEtBQWUsRUFBRSxLQUFlO0lBS3ZFLCtCQUErQjtJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRCx5RUFBeUU7SUFDekUsY0FBYztJQUNkLEVBQUU7SUFDRixpQkFBaUI7SUFDakIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsRUFBRTtJQUNGLHVFQUF1RTtJQUN2RSxrQ0FBa0M7SUFDbEMsRUFBRTtJQUNGLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLHFCQUFxQjtJQUNyQixFQUFFO0lBQ0YsMkNBQTJDO0lBQzNDLElBQUk7SUFDSixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixNQUFNO0lBQ04sSUFBSTtJQUNKLDJCQUEyQjtJQUMzQixxRUFBcUU7SUFDckUsRUFBRTtJQUNGLDZFQUE2RTtJQUM3RSwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGLElBQUk7SUFDSixNQUFNO0lBQ04sb0JBQW9CO0lBQ3BCLE9BQU87SUFDUCxNQUFNO0lBQ04sb0JBQW9CO0lBQ3BCLE1BQU07SUFDTixJQUFJO0lBQ0osRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSwyREFBMkQ7SUFDM0QsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3Qyw2Q0FBNkM7SUFDN0MsRUFBRTtJ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MjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmFja2VuZFZhbHVlcywgRGF0YVR5cGUsIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUltcGwoXG4gICAgdmFsdWVzOiBCYWNrZW5kVmFsdWVzLCBheGlzOiBudW1iZXIsIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlKToge1xuICBvdXRwdXRWYWx1ZXM6IEJhY2tlbmRWYWx1ZXMsXG4gIG91dHB1dFNoYXBlOiBudW1iZXJbXSxcbiAgaW5kaWNlczogQmFja2VuZFZhbHVlc1xufSB7XG4gIC8vIE5vcm1hbGl6ZSBhbmQgdmFsaWRhdGUgYXhpcy5cbiAgY29uc3QgJGF4aXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHNoYXBlKVswXTtcblxuICAvLyBDYWxjdWxhdGUgdGhlIG5ldyBzaGFwZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBleHRyYWN0aW5nIGRhdGEgYWxvbmcgdGhlXG4gIC8vIGdpdmVuIGF4aXMuXG4gIC8vXG4gIC8vIFRoZSByYW5rIGlzIDMuXG4gIC8vIFRoZSBzaXplIG9mIHRoZSAxc3QgZGltZW5zaW9uIGlzIHRoZSBzaXplIG9mIGFsbCB0aGUgYXhlcyA8IHRoZSBnaXZlbiBheGlzLlxuICAvLyBUaGUgc2l6ZSBvZiB0aGUgMm5kIGRpbWVuc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpcy5cbiAgLy8gVGhlIHNpemUgb2YgdGhlIDNyZCBkaW1lbnNpb24gaXMgdGhlIHNpemUgb2YgYWxsIHRoZSBheGVzID4gdGhlIGdpdmVuIGF4aXMuXG4gIC8vXG4gIC8vIEZvciBleGFtcGxlLCBmb3IgYSA0RCB0ZW5zb3Igd2l0aCBzaGFwZT1bMiwgMywgNSwgNF0gYW5kIGF4aXM9MiwgdGhlXG4gIC8vIG5ld1NoYXBlIHdvdWxkIGJlOiBbMiozLCA1LCA0XS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBmaW5hbCBvdXRwdXQgc2hhcGUuIFRoaXMgd2lsbCBiZSB0aGUgc2hhcGUgZm9yIGFuXG4gIC8vIGludGVybWVkaWF0ZSBUZW5zb3JCdWZmZXIgKHNlZSBpbnB1dEJ1ZmZlciBiZWxvdykgdG8gYWxsb3cgdXMgdG8gZXh0cmFjdFxuICAvLyB2YWx1ZXMgYWxvbmcgdGhlIGdpdmVuIGF4aXMuIFRvIGRlbW9uc3RyYXRlIGhvdyBpdCB3b3JrcywgY29uc2lkZXIgdGhlXG4gIC8vIGZvbGxvd2luZyBleGFtcGxlOlxuICAvL1xuICAvLyBJbnB1dDogYSAzRCB0ZW5zb3IsIHdpdGggc2hhcGUgWzEsIDIsIDNdXG4gIC8vIFtcbiAgLy8gICBbXG4gIC8vICAgICAgWzEsMiwzXSxcbiAgLy8gICAgICBbNCw1LDZdXG4gIC8vICAgXVxuICAvLyBdXG4gIC8vIEF4aXM6IDIgKHRoZSBsYXN0IGF4aXMpLlxuICAvLyBBbG9uZyBheGlzIDIsIHdlIGV4cGVjdCB0byBleHRyYWN0IDMgdGVuc29yczogWzEsNF0sIFsyLDVdLCBbMyw2XS5cbiAgLy9cbiAgLy8gRm9yIHRoaXMgZXhhbXBsZSwgbmV3U2hhcGUgd291bGQgYmU6IFsyLCAzLCAxXSwgd2hlcmUgMiBpcyBjYWxjdWxhdGVkIGZyb21cbiAgLy8gMSoyLiBUaGUgcmUtc2hhcGVkIGRhdGEgd291bGQgbG9vayBsaWtlOlxuICAvL1xuICAvLyBbXG4gIC8vICAgW1xuICAvLyAgICAgWzFdLCBbMl0sIFszXVxuICAvLyAgIF0sXG4gIC8vICAgW1xuICAvLyAgICAgWzRdLCBbNV0sIFs2XVxuICAvLyAgIF1cbiAgLy8gXVxuICAvL1xuICAvLyBUaGVuLCB3ZSBjYW4gY29uc3RydWN0IGEgMy1sZXZlbCBuZXN0ZWQgbG9vcCBieSB0aGUgZm9sbG93aW5nIGRpbWVuc2lvblxuICAvLyBvcmRlciB0byBleHRyYWN0IHRoZSB2YWx1ZXMgYWxvbmcgdGhlIGF4aXMgKGRpbWVuc2lvbjEpOlxuICAvLyBpOiBkaW1lbnNpb24xICAgICAgIC8vIDAsMSwyIChuZXdTaGFwZVsxXSlcbiAgLy8gICBtOiBkaW1lbnNpb24wICAgICAvLyAwLDEgICAobmV3U2hhcGVbMF0pXG4gIC8vICAgICBuOiBkaW1lbnNpb24yICAgLy8gMCAgICAgKG5ld1NoYXBlWzJdKVxuICAvL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgbSwgaSwgblxuICAvLyAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS1cbiAgLy8gSXRlcmF0aW9uIDA6IGRhdGEgYXQgWzAsIDAsIDBdID0+IFwiMVwiXG4gIC8vIEl0ZXJhdGlvbiAxOiBkYXRhIGF0IFsxLCAwLCAwXSA9PiBcIjRcIlxuICAvLyBXZSBnb3QgWzEsNF0uXG4gIC8vIEl0ZXJhdGlvbiAyOiBkYXRhIGF0IFswLCAxLCAwXSA9PiBcIjJcIlxuICAvLyBJdGVyYXRpb24gMzogZGF0YSBhdCBbMSwgMSwgMF0gPT4gXCI1XCJcbiAgLy8gV2UgZ290IFsyLDVdLlxuICAvLyBJdGVyYXRpb24gNDogZGF0YSBhdCBbMCwgMiwgMF0gPT4gXCIzXCJcbiAgLy8gSXRlcmF0aW9uIDU6IGRhdGEgYXQgWzEsIDIsIDBdID0+IFwiNlwiXG4gIC8vIFdlIGdvdCBbMyw2XS5cbiAgY29uc3QgbmV3U2hhcGUgPSBbMSwgc2hhcGVbMF0sIDFdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8ICRheGlzOyBpKyspIHtcbiAgICBuZXdTaGFwZVswXSAqPSBzaGFwZVtpXTtcbiAgfVxuICBuZXdTaGFwZVsxXSA9IHNoYXBlWyRheGlzXTtcbiAgZm9yIChsZXQgaSA9ICRheGlzICsgMTsgaSA8IHNoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgbmV3U2hhcGVbMl0gKj0gc2hhcGVbaV07XG4gIH1cblxuICAvLyBBIG1hcCBmcm9tIHVuaXF1ZSBlbGVtZW50cyAodGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9ucykgdG8gdGhlaXIgdmFsdWVzXG4gIC8vIGluIFwiaW5kaWNlc1wiIChiZWxvdykuXG4gIGNvbnN0IHVuaXF1ZUVsZW1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgLy8gVGhlIGluZGljZXMgb2YgZWFjaCB1bmlxdWUgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWwgdGVuc29yIGFsb25nIHRoZSBnaXZlblxuICAvLyBheGlzLiBJdCBpcyAxRCBhbmQgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhlIGdpdmVuIGF4aXMuXG4gIGNvbnN0IGluZGljZXMgPSBuZXcgSW50MzJBcnJheShzaGFwZVskYXhpc10pO1xuICAvLyBDcmVhdGUgYSBidWZmZXIgc28gd2UgY2FuIGVhc2lseSBleHRyYWN0IHZhbHVlIGF0IGEgZ2l2ZW4gbG9jYXRpb24uXG4gIGNvbnN0IGlucHV0QnVmZmVyID0gbmV3IFRlbnNvckJ1ZmZlcihuZXdTaGFwZSwgZHR5cGUsIHZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgLy8gVGhlIGluZGljZXMgYWxvbmcgdGhlIGdpdmVuIGF4aXMgdGhhdCBoYXZlIHVuaXF1ZSBlbGVtZW50cy4gVGhpcyBpcyBhXG4gIC8vIGRlLWR1cGVkIHZlcnNpb24gb2YgXCJpbmRpY2VzXCIgYWJvdmUuXG4gIGNvbnN0IHVuaXF1ZUluZGljZXM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IGlzMURUZW5zb3IgPSBuZXdTaGFwZVswXSA9PT0gMSAmJiBuZXdTaGFwZVsyXSA9PT0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZVskYXhpc107IGkrKykge1xuICAgIC8vIEV4dHJhY3QgdmFsdWVzIGFsb25nIHRoZSBheGlzLlxuICAgIGxldCBlbGVtZW50OiBzdHJpbmc7XG4gICAgaWYgKGlzMURUZW5zb3IpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3IgMUQgdGVuc29yIGlucHV0LlxuICAgICAgZWxlbWVudCA9IHZhbHVlc1tpXS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBheGlzVmFsdWVzID0gW107XG4gICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG5ld1NoYXBlWzBdOyBtKyspIHtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBuZXdTaGFwZVsyXTsgbisrKSB7XG4gICAgICAgICAgYXhpc1ZhbHVlcy5wdXNoKGlucHV0QnVmZmVyLmdldChtLCBpLCBuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQgPSBheGlzVmFsdWVzLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cCBhbmQgdXBkYXRlIHZhcmlvdXMgaW5kaWNlcy5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdW5pcXVlRWxlbWVudHMuZ2V0KGVsZW1lbnQpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9IG51bGwpIHtcbiAgICAgIGluZGljZXNbaV0gPSBleGlzdGluZ0luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB1bmlxdWVJbmRleCA9IHVuaXF1ZUVsZW1lbnRzLnNpemU7XG4gICAgICB1bmlxdWVFbGVtZW50cy5zZXQoZWxlbWVudCwgdW5pcXVlSW5kZXgpO1xuICAgICAgaW5kaWNlc1tpXSA9IHVuaXF1ZUluZGV4O1xuICAgICAgdW5pcXVlSW5kaWNlcy5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyB3ZSBrbm93IHdoZXJlIGVhY2ggb2YgdGhlIHVuaXF1ZSBlbGVtZW50cyBhcmUgbG9jYXRlZCBhbG9uZyB0aGUgYXhpc1xuICAvLyAodW5pcXVlSW5kaWNlcykuIEV4dHJhY3QgdGhlbSBmcm9tIGlucHV0IGJ1ZmZlciBhbmQgc3RvcmUgdGhlbSBpbiB0aGVcbiAgLy8gb3V0cHV0IGJ1ZmZlci5cbiAgY29uc3Qgb3V0cHV0VG1wU2hhcGUgPSBuZXdTaGFwZS5zbGljZSgpO1xuICBvdXRwdXRUbXBTaGFwZVsxXSA9IHVuaXF1ZUVsZW1lbnRzLnNpemU7XG4gIGNvbnN0IG91dHB1dEJ1ZmZlciA9IG5ldyBUZW5zb3JCdWZmZXIob3V0cHV0VG1wU2hhcGUsIGR0eXBlKTtcbiAgdW5pcXVlSW5kaWNlcy5mb3JFYWNoKCh1bmlxdWVFbGVtZW50SW5kZXgsIGkpID0+IHtcbiAgICBmb3IgKGxldCBtID0gMDsgbSA8IG5ld1NoYXBlWzBdOyBtKyspIHtcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbmV3U2hhcGVbMl07IG4rKykge1xuICAgICAgICBvdXRwdXRCdWZmZXIuc2V0KGlucHV0QnVmZmVyLmdldChtLCB1bmlxdWVFbGVtZW50SW5kZXgsIG4pLCBtLCBpLCBuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFRoZSBvdXRwdXQgc2hhcGUgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgaW5wdXQgc2hhcGUgd2l0aCB0aGUgc2l6ZSBvZlxuICAvLyB0aGUgZ2l2ZW4gYXhpcyByZXBsYWNlZCBieSB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBlbGVtZW50cyBhbG9uZyB0aGF0IGF4aXMuXG4gIGNvbnN0IG91dHB1dFNoYXBlID0gc2hhcGUuc2xpY2UoKTtcbiAgb3V0cHV0U2hhcGVbJGF4aXNdID0gb3V0cHV0VG1wU2hhcGVbMV07XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRWYWx1ZXM6IG91dHB1dEJ1ZmZlci52YWx1ZXMgYXMgQmFja2VuZFZhbHVlcyxcbiAgICBvdXRwdXRTaGFwZSxcbiAgICBpbmRpY2VzLFxuICB9O1xufVxuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Slice, slice_util, util } from '@tensorflow/tfjs-core';\nimport { sliceImplCPU } from '../kernel_utils/shared';\nexport function slice(args) {\n const { inputs: { x }, attrs: { begin, size }, backend } = args;\n const [begin_, size_] = slice_util.parseSliceParams(x, begin, size);\n const isContinous = slice_util.isSliceContinous(x.shape, begin_, size_);\n const xVals = backend.readSync(x.dataId);\n const out = backend.makeOutput(size_, x.dtype);\n const xStrides = util.computeStrides(x.shape);\n const outData = backend.dataIdMap.get(out.dataId);\n if (isContinous) {\n const flatOffset = slice_util.computeFlatOffset(begin_, xStrides);\n if (x.dtype === 'string') {\n outData.stringBytes =\n xVals\n .slice(flatOffset, flatOffset + util.sizeFromShape(size_));\n }\n else {\n const outVals = backend.typedArrayFromHeap(out);\n outVals.set(xVals\n .subarray(flatOffset, flatOffset + util.sizeFromShape(size_)));\n }\n return out;\n }\n if (x.dtype === 'string') {\n const res = sliceImplCPU(xVals, begin_, size_, x.shape, x.dtype);\n outData.stringBytes = res;\n return out;\n }\n const outVals = backend.typedArrayFromHeap(out);\n const rank = x.shape.length;\n if (rank === 2) {\n slice2d(xVals, xStrides[0], outVals, begin_, size_);\n }\n else if (rank === 3) {\n slice3d(xVals, xStrides[0], xStrides[1], outVals, begin_, size_);\n }\n else if (rank === 4) {\n slice4d(xVals, xStrides[0], xStrides[1], xStrides[2], outVals, begin_, size_);\n }\n else {\n const res = sliceImplCPU(xVals, begin_, size_, x.shape, x.dtype);\n outVals.set(res);\n }\n return out;\n}\nfunction slice2d(xVals, xStride, outVals, begin, size) {\n let outOffset = 0;\n const beginI = begin[0];\n const beginJ = begin[1];\n const endI = beginI + size[0];\n for (let i = beginI; i < endI; i++) {\n const xOffset = i * xStride + beginJ;\n outVals.set(xVals.subarray(xOffset, xOffset + size[1]), outOffset);\n outOffset += size[1];\n }\n}\nfunction slice3d(xVals, xStride1, xStride2, outVals, begin, size) {\n let outOffset = 0;\n const beginI = begin[0];\n const beginJ = begin[1];\n const beginK = begin[2];\n const endI = beginI + size[0];\n const endJ = beginJ + size[1];\n for (let i = beginI; i < endI; i++) {\n for (let j = beginJ; j < endJ; j++) {\n const xOffset = i * xStride1 + j * xStride2 + beginK;\n outVals.set(xVals.subarray(xOffset, xOffset + size[2]), outOffset);\n outOffset += size[2];\n }\n }\n}\nfunction slice4d(xVals, xStride1, xStride2, xStride3, outVals, begin, size) {\n let outOffset = 0;\n const beginI = begin[0];\n const beginJ = begin[1];\n const beginK = begin[2];\n const endI = beginI + size[0];\n const endJ = beginJ + size[1];\n const endK = beginK + size[2];\n const beginL = begin[3];\n for (let i = beginI; i < endI; i++) {\n for (let j = beginJ; j < endJ; j++) {\n for (let k = beginK; k < endK; k++) {\n const xOffset = i * xStride1 + j * xStride2 + k * xStride3 + beginL;\n outVals.set(xVals.subarray(xOffset, xOffset + size[3]), outOffset);\n outOffset += size[3];\n }\n }\n }\n}\nexport const sliceConfig = {\n kernelName: Slice,\n backendName: 'wasm',\n kernelFunc: slice,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9TbGljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXlDLEtBQUssRUFBRSxVQUFVLEVBQXVDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzNJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxNQUFNLFVBQVUsS0FBSyxDQUNqQixJQUFvRTtJQUN0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUUxRCxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXBFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWxELElBQUksV0FB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QUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtTQUNGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsS0FBOEI7Q0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2xpY2UsIHNsaWNlX3V0aWwsIFNsaWNlQXR0cnMsIFNsaWNlSW5wdXRzLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuaW1wb3J0IHtzbGljZUltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UoXG4gICAgYXJnczoge2lucHV0czogU2xpY2VJbnB1dHMsIGF0dHJzOiBTbGljZUF0dHJzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pIHtcbiAgY29uc3Qge2lucHV0czoge3h9LCBhdHRyczoge2JlZ2luLCBzaXplfSwgYmFja2VuZH0gPSBhcmdzO1xuXG4gIGNvbnN0IFtiZWdpbl8sIHNpemVfXSA9IHNsaWNlX3V0aWwucGFyc2VTbGljZVBhcmFtcyh4LCBiZWdpbiwgc2l6ZSk7XG5cbiAgY29uc3QgaXNDb250aW5vdXMgPSBzbGljZV91dGlsLmlzU2xpY2VDb250aW5vdXMoeC5zaGFwZSwgYmVnaW5fLCBzaXplXyk7XG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCk7XG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChzaXplXywgeC5kdHlwZSk7XG4gIGNvbnN0IHhTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcbiAgY29uc3Qgb3V0RGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKTtcblxuICBpZiAoaXNDb250aW5vdXMpIHtcbiAgICBjb25zdCBmbGF0T2Zmc2V0ID0gc2xpY2VfdXRpbC5jb21wdXRlRmxhdE9mZnNldChiZWdpbl8sIHhTdHJpZGVzKTtcblxuICAgIGlmICh4LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgb3V0RGF0YS5zdHJpbmdCeXRlcyA9XG4gICAgICAgICAgKHhWYWxzIGFzIFVpbnQ4QXJyYXlbXSlcbiAgICAgICAgICAgICAgLnNsaWNlKGZsYXRPZmZzZXQsIGZsYXRPZmZzZXQgKyB1dGlsLnNpemVGcm9tU2hhcGUoc2l6ZV8pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3V0VmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKG91dCk7XG4gICAgICBvdXRWYWxzLnNldChcbiAgICAgICAgICAoeFZhbHMgYXMgVHlwZWRBcnJheSlcbiAgICAgICAgICAgICAgLnN1YmFycmF5KGZsYXRPZmZzZXQsIGZsYXRPZmZzZXQgKyB1dGlsLnNpemVGcm9tU2hhcGUoc2l6ZV8pKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGlmICh4LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHJlcyA9IHNsaWNlSW1wbENQVSh4VmFscywgYmVnaW5fLCBzaXplXywgeC5zaGFwZSwgeC5kdHlwZSk7XG4gICAgb3V0RGF0YS5zdHJpbmdCeXRlcyA9IHJlcyBhcyBVaW50OEFycmF5W107XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGNvbnN0IG91dFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChvdXQpO1xuICBjb25zdCByYW5rID0geC5zaGFwZS5sZW5ndGg7XG4gIGlmIChyYW5rID09PSAyKSB7XG4gICAgc2xpY2UyZChcbiAgICAgICAgeFZhbHMgYXMgVHlwZWRBcnJheSwgeFN0cmlkZXNbMF0sIG91dFZhbHMsIGJlZ2luXyBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICBzaXplXyBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgfSBlbHNlIGlmIChyYW5rID09PSAzKSB7XG4gICAgc2xpY2UzZChcbiAgICAgICAgeFZhbHMgYXMgVHlwZWRBcnJheSwgeFN0cmlkZXNbMF0sIHhTdHJpZGVzWzFdLCBvdXRWYWxzLFxuICAgICAgICBiZWdpbl8gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzaXplXyBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pO1xuICB9IGVsc2UgaWYgKHJhbmsgPT09IDQpIHtcbiAgICBzbGljZTRkKFxuICAgICAgICB4VmFscyBhcyBUeXBlZEFycmF5LCB4U3RyaWRlc1swXSwgeFN0cmlkZXNbMV0sIHhTdHJpZGVzWzJdLCBvdXRWYWxzLFxuICAgICAgICBiZWdpbl8gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICAgIHNpemVfIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZXMgPVxuICAgICAgICBzbGljZUltcGxDUFUoeFZhbHMsIGJlZ2luXywgc2l6ZV8sIHguc2hhcGUsIHguZHR5cGUpIGFzIFR5cGVkQXJyYXk7XG4gICAgb3V0VmFscy5zZXQocmVzKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHNsaWNlMmQoXG4gICAgeFZhbHM6IGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5LCB4U3RyaWRlOiBudW1iZXIsXG4gICAgb3V0VmFsczogYmFja2VuZF91dGlsLlR5cGVkQXJyYXksIGJlZ2luOiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHNpemU6IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgbGV0IG91dE9mZnNldCA9IDA7XG4gIGNvbnN0IGJlZ2luSSA9IGJlZ2luWzBdO1xuICBjb25zdCBiZWdpbkogPSBiZWdpblsxXTtcbiAgY29uc3QgZW5kSSA9IGJlZ2luSSArIHNpemVbMF07XG4gIGZvciAobGV0IGkgPSBiZWdpbkk7IGkgPCBlbmRJOyBpKyspIHtcbiAgICBjb25zdCB4T2Zmc2V0ID0gaSAqIHhTdHJpZGUgKyBiZWdpbko7XG4gICAgb3V0VmFscy5zZXQoeFZhbHMuc3ViYXJyYXkoeE9mZnNldCwgeE9mZnNldCArIHNpemVbMV0pLCBvdXRPZmZzZXQpO1xuICAgIG91dE9mZnNldCArPSBzaXplWzFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNsaWNlM2QoXG4gICAgeFZhbHM6IGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5LCB4U3RyaWRlMTogbnVtYmVyLCB4U3RyaWRlMjogbnVtYmVyLFxuICAgIG91dFZhbHM6IGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5LCBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIHNpemU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICBsZXQgb3V0T2Zmc2V0ID0gMDtcbiAgY29uc3QgYmVnaW5JID0gYmVnaW5bMF07XG4gIGNvbnN0IGJlZ2luSiA9IGJlZ2luWzFdO1xuICBjb25zdCBiZWdpbksgPSBiZWdpblsyXTtcbiAgY29uc3QgZW5kSSA9IGJlZ2luSSArIHNpemVbMF07XG4gIGNvbnN0IGVuZEogPSBiZWdpbkogKyBzaXplWzFdO1xuICBmb3IgKGxldCBpID0gYmVnaW5JOyBpIDwgZW5kSTsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGJlZ2luSjsgaiA8IGVuZEo7IGorKykge1xuICAgICAgY29uc3QgeE9mZnNldCA9IGkgKiB4U3RyaWRlMSArIGogKiB4U3RyaWRlMiArIGJlZ2luSztcbiAgICAgIG91dFZhbHMuc2V0KHhWYWxzLnN1YmFycmF5KHhPZmZzZXQsIHhPZmZzZXQgKyBzaXplWzJdKSwgb3V0T2Zmc2V0KTtcbiAgICAgIG91dE9mZnNldCArPSBzaXplWzJdO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzbGljZTRkKFxuICAgIHhWYWxzOiBiYWNrZW5kX3V0aWwuVHlwZWRBcnJheSwgeFN0cmlkZTE6IG51bWJlciwgeFN0cmlkZTI6IG51bWJlcixcbiAgICB4U3RyaWRlMzogbnVtYmVyLCBvdXRWYWxzOiBiYWNrZW5kX3V0aWwuVHlwZWRBcnJheSxcbiAgICBiZWdpbjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgc2l6ZTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgbGV0IG91dE9mZnNldCA9IDA7XG4gIGNvbnN0IGJlZ2luSSA9IGJlZ2luWzBdO1xuICBjb25zdCBiZWdpbkogPSBiZWdpblsxXTtcbiAgY29uc3QgYmVnaW5LID0gYmVnaW5bMl07XG4gIGNvbnN0IGVuZEkgPSBiZWdpbkkgKyBzaXplWzBdO1xuICBjb25zdCBlbmRKID0gYmVnaW5KICsgc2l6ZVsxXTtcbiAgY29uc3QgZW5kSyA9IGJlZ2luSyArIHNpemVbMl07XG4gIGNvbnN0IGJlZ2luTCA9IGJlZ2luWzNdO1xuXG4gIGZvciAobGV0IGkgPSBiZWdpbkk7IGkgPCBlbmRJOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gYmVnaW5KOyBqIDwgZW5kSjsgaisrKSB7XG4gICAgICBmb3IgKGxldCBrID0gYmVnaW5LOyBrIDwgZW5kSzsgaysrKSB7XG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSBpICogeFN0cmlkZTEgKyBqICogeFN0cmlkZTIgKyBrICogeFN0cmlkZTMgKyBiZWdpbkw7XG4gICAgICAgIG91dFZhbHMuc2V0KHhWYWxzLnN1YmFycmF5KHhPZmZzZXQsIHhPZmZzZXQgKyBzaXplWzNdKSwgb3V0T2Zmc2V0KTtcbiAgICAgICAgb3V0T2Zmc2V0ICs9IHNpemVbM107XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTbGljZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogc2xpY2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BatchToSpaceND } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nimport { transpose } from './Transpose';\nfunction batchToSpaceND(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, crops } = attrs;\n const prod = blockShape.reduce((a, b) => a * b);\n const reshaped = backend_util.getReshaped(x.shape, blockShape, prod);\n const permuted = backend_util.getPermuted(reshaped.length, blockShape.length);\n const reshapedPermuted = backend_util.getReshapedPermuted(x.shape, blockShape, prod);\n const sliceBeginCoords = backend_util.getSliceBeginCoords(crops, blockShape.length);\n const sliceSize = backend_util.getSliceSize(reshapedPermuted, crops, blockShape.length);\n const xReshaped = reshape({ inputs: { x }, backend, attrs: { shape: reshaped } });\n const xTransposed = transpose({ inputs: { x: xReshaped }, backend, attrs: { perm: permuted } });\n const xTransposedReshaped = reshape({ inputs: { x: xTransposed }, backend, attrs: { shape: reshapedPermuted } });\n const result = slice({\n inputs: { x: xTransposedReshaped },\n backend,\n attrs: { begin: sliceBeginCoords, size: sliceSize }\n });\n backend.disposeData(xReshaped.dataId);\n backend.disposeData(xTransposed.dataId);\n backend.disposeData(xTransposedReshaped.dataId);\n return result;\n}\nexport const batchToSpaceNDConfig = {\n kernelName: BatchToSpaceND,\n backendName: 'wasm',\n kernelFunc: batchToSpaceND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hUb1NwYWNlTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9CYXRjaFRvU3BhY2VORC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBc0UsTUFBTSx1QkFBdUIsQ0FBQztBQUl4SSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxTQUFTLGNBQWMsQ0FBQyxJQUl2QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sZ0JBQWdCLEdBQ2xCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxNQUFNLGdCQUFnQixHQUNsQixZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FDWCxZQUFZLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLEdBQ2IsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUMvQixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUM7UUFDaEMsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDO0tBQ2xELENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFaEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhdGNoVG9TcGFjZU5ELCBCYXRjaFRvU3BhY2VOREF0dHJzLCBCYXRjaFRvU3BhY2VORElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL1NsaWNlJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmZ1bmN0aW9uIGJhdGNoVG9TcGFjZU5EKGFyZ3M6IHtcbiAgaW5wdXRzOiBCYXRjaFRvU3BhY2VORElucHV0cyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGF0dHJzOiBCYXRjaFRvU3BhY2VOREF0dHJzXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2Jsb2NrU2hhcGUsIGNyb3BzfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHByb2QgPSBibG9ja1NoYXBlLnJlZHVjZSgoYSwgYikgPT4gYSAqIGIpO1xuXG4gIGNvbnN0IHJlc2hhcGVkID0gYmFja2VuZF91dGlsLmdldFJlc2hhcGVkKHguc2hhcGUsIGJsb2NrU2hhcGUsIHByb2QpO1xuICBjb25zdCBwZXJtdXRlZCA9IGJhY2tlbmRfdXRpbC5nZXRQZXJtdXRlZChyZXNoYXBlZC5sZW5ndGgsIGJsb2NrU2hhcGUubGVuZ3RoKTtcbiAgY29uc3QgcmVzaGFwZWRQZXJtdXRlZCA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWRQZXJtdXRlZCh4LnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kKTtcbiAgY29uc3Qgc2xpY2VCZWdpbkNvb3JkcyA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0U2xpY2VCZWdpbkNvb3Jkcyhjcm9wcywgYmxvY2tTaGFwZS5sZW5ndGgpO1xuICBjb25zdCBzbGljZVNpemUgPVxuICAgICAgYmFja2VuZF91dGlsLmdldFNsaWNlU2l6ZShyZXNoYXBlZFBlcm11dGVkLCBjcm9wcywgYmxvY2tTaGFwZS5sZW5ndGgpO1xuXG4gIGNvbnN0IHhSZXNoYXBlZCA9IHJlc2hhcGUoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiByZXNoYXBlZH19KTtcbiAgY29uc3QgeFRyYW5zcG9zZWQgPVxuICAgICAgdHJhbnNwb3NlKHtpbnB1dHM6IHt4OiB4UmVzaGFwZWR9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkfX0pO1xuICBjb25zdCB4VHJhbnNwb3NlZFJlc2hhcGVkID0gcmVzaGFwZShcbiAgICAgIHtpbnB1dHM6IHt4OiB4VHJhbnNwb3NlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IHJlc2hhcGVkUGVybXV0ZWR9fSk7XG4gIGNvbnN0IHJlc3VsdCA9IHNsaWNlKHtcbiAgICBpbnB1dHM6IHt4OiB4VHJhbnNwb3NlZFJlc2hhcGVkfSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7YmVnaW46IHNsaWNlQmVnaW5Db29yZHMsIHNpemU6IHNsaWNlU2l6ZX1cbiAgfSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YSh4UmVzaGFwZWQuZGF0YUlkKTtcbiAgYmFja2VuZC5kaXNwb3NlRGF0YSh4VHJhbnNwb3NlZC5kYXRhSWQpO1xuICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHhUcmFuc3Bvc2VkUmVzaGFwZWQuZGF0YUlkKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgYmF0Y2hUb1NwYWNlTkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQmF0Y2hUb1NwYWNlTkQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IGJhdGNoVG9TcGFjZU5EIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Bincount } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmBincount;\nfunction setup(backend) {\n wasmBincount = backend.wasm.cwrap(Bincount, null /*void*/, [\n 'number',\n 'number',\n 'boolean',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction bincount(args) {\n const { backend, inputs, attrs } = args;\n const { x, weights } = inputs;\n const { size } = attrs;\n const hasWeights = weights.shape.reduce((p, v) => p * v, 1) !== 0;\n const outShape = x.shape.length === 1 ? [size] : [x.shape[0], size];\n const out = backend.makeOutput(outShape, weights.dtype);\n function tensorId(x) {\n return backend.dataIdMap.get(x.dataId).id;\n }\n wasmBincount(tensorId(x), size, hasWeights, tensorId(weights), CppDType[weights.dtype], tensorId(out));\n return out;\n}\nexport const bincountConfig = {\n kernelName: Bincount,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: bincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9CaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsUUFBUSxFQUFzRSxNQUFNLHVCQUF1QixDQUFDO0FBSXBILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFakMsSUFBSSxZQUU4QyxDQUFDO0FBRW5ELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUN6RCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBSSxRQUFRO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FDYixJQUEwRTtJQUU1RSxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxTQUFTLFFBQVEsQ0FBQyxDQUFhO1FBQzdCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsWUFBWSxDQUNSLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUN6RSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVuQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtCaW5jb3VudCwgQmluY291bnRBdHRycywgQmluY291bnRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtQmluY291bnQ6IChcbiAgICB4SWQ6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBoYXNXZWlnaHRzOiBib29sZWFuLCB3ZWlnaHRzSWQ6IG51bWJlcixcbiAgICB3ZWlnaHRzRFR5cGU6IENwcERUeXBlLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtQmluY291bnQgPSBiYWNrZW5kLndhc20uY3dyYXAoQmluY291bnQsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgICAvLyB4SWRcbiAgICAnbnVtYmVyJywgICAvLyBzaXplXG4gICAgJ2Jvb2xlYW4nLCAgLy8gaGFzV2VpZ2h0c1xuICAgICdudW1iZXInLCAgIC8vIHdlaWdodHNJZFxuICAgICdudW1iZXInLCAgIC8vIHdlaWdodHNEVHlwZVxuICAgICdudW1iZXInLCAgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBiaW5jb3VudChcbiAgICBhcmdzOiB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogQmluY291bnRJbnB1dHMsIGF0dHJzOiBCaW5jb3VudEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCB3ZWlnaHRzfSA9IGlucHV0cztcbiAgY29uc3Qge3NpemV9ID0gYXR0cnM7XG5cbiAgY29uc3QgaGFzV2VpZ2h0cyA9IHdlaWdodHMuc2hhcGUucmVkdWNlKChwLCB2KSA9PiBwICogdiwgMSkgIT09IDA7XG4gIGNvbnN0IG91dFNoYXBlID0geC5zaGFwZS5sZW5ndGggPT09IDEgPyBbc2l6ZV0gOiBbeC5zaGFwZVswXSwgc2l6ZV07XG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRTaGFwZSwgd2VpZ2h0cy5kdHlwZSk7XG5cbiAgZnVuY3Rpb24gdGVuc29ySWQoeDogVGVuc29ySW5mbykge1xuICAgIHJldHVybiBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICB9XG4gIHdhc21CaW5jb3VudChcbiAgICAgIHRlbnNvcklkKHgpLCBzaXplLCBoYXNXZWlnaHRzLCB0ZW5zb3JJZCh3ZWlnaHRzKSwgQ3BwRFR5cGVbd2VpZ2h0cy5kdHlwZV0sXG4gICAgICB0ZW5zb3JJZChvdXQpKTtcblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgYmluY291bnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQmluY291bnQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGJpbmNvdW50IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BitwiseAnd } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const bitwiseAndConfig = createBinaryKernelConfig(BitwiseAnd, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0d2lzZUFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0JpdHdpc2VBbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qix3QkFBd0IsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0JpdHdpc2VBbmQsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5cbmNvbnN0IHN1cHBvcnRzRnVsbEJyb2FkY2FzdCA9IHRydWU7XG5cbmV4cG9ydCBjb25zdCBiaXR3aXNlQW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhCaXR3aXNlQW5kLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BroadcastArgs } from '@tensorflow/tfjs-core';\nexport function broadcastArgs(args) {\n const { inputs, backend } = args;\n const { s0, s1 } = inputs;\n const s0Vals = backend.typedArrayFromHeap(s0);\n const s1Vals = backend.typedArrayFromHeap(s1);\n const broadcastShape = backend_util.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals));\n return backend.makeOutput([broadcastShape.length], 'int32', /*memoryOffset=*/ undefined, \n /*values=*/ new Int32Array(broadcastShape));\n}\nexport const broadcastArgsConfig = {\n kernelName: BroadcastArgs,\n backendName: 'wasm',\n kernelFunc: broadcastArgs\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJvYWRjYXN0QXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Jyb2FkY2FzdEFyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQWdELE1BQU0sdUJBQXVCLENBQUM7QUFJakgsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUc3QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXhCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFOUMsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLDBCQUEwQixDQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUU1QyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQ3JCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQSxTQUFTO0lBQzVELFdBQVcsQ0FBQSxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLGFBQWE7Q0FDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7YmFja2VuZF91dGlsLCBCcm9hZGNhc3RBcmdzLCBCcm9hZGNhc3RBcmdzSW5wdXRzLCBLZXJuZWxDb25maWcsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3RBcmdzKGFyZ3M6IHtcbiAgaW5wdXRzOiBCcm9hZGNhc3RBcmdzSW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7czAsIHMxfSA9IGlucHV0cztcblxuICBjb25zdCBzMFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChzMCk7XG4gIGNvbnN0IHMxVmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKHMxKTtcblxuICBjb25zdCBicm9hZGNhc3RTaGFwZSA9IGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShcbiAgICAgIEFycmF5LmZyb20oczBWYWxzKSwgQXJyYXkuZnJvbShzMVZhbHMpKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlT3V0cHV0KFxuICAgICAgW2Jyb2FkY2FzdFNoYXBlLmxlbmd0aF0sICdpbnQzMicsIC8qbWVtb3J5T2Zmc2V0PSovdW5kZWZpbmVkLFxuICAgICAgLyp2YWx1ZXM9Ki9uZXcgSW50MzJBcnJheShicm9hZGNhc3RTaGFwZSkpO1xufVxuXG5leHBvcnQgY29uc3QgYnJvYWRjYXN0QXJnc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBCcm9hZGNhc3RBcmdzLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiBicm9hZGNhc3RBcmdzXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cast } from '@tensorflow/tfjs-core';\nexport function cast(args) {\n const { inputs: { x }, attrs: { dtype }, backend } = args;\n const out = backend.makeOutput(x.shape, dtype);\n const inVals = backend.typedArrayFromHeap(x);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.set(inVals);\n return out;\n}\nexport const castConfig = {\n kernelName: Cast,\n backendName: 'wasm',\n kernelFunc: cast,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Nhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUs1RixNQUFNLFVBQVUsSUFBSSxDQUNoQixJQUFrRTtJQUVwRSxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3BELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtDYXN0LCBDYXN0QXR0cnMsIENhc3RJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuY30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7VGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhc3QoXG4gICAgYXJnczoge2lucHV0czogQ2FzdElucHV0cywgYXR0cnM6IENhc3RBdHRycywgYmFja2VuZDogQmFja2VuZFdhc219KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0czoge3h9LCBhdHRyczoge2R0eXBlfSwgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgZHR5cGUpO1xuICBjb25zdCBpblZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcCh4KTtcbiAgY29uc3Qgb3V0VmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKG91dCk7XG4gIG91dFZhbHMuc2V0KGluVmFscyk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBjYXN0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENhc3QsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IGNhc3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Ceil } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const ceilConfig = createUnaryKernelConfig(Ceil);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2VpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0NlaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgQ2VpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgY2VpbENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoQ2VpbCk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ClipByValue } from '@tensorflow/tfjs-core';\nlet wasmClip;\nfunction setup(backend) {\n wasmClip = backend.wasm.cwrap(ClipByValue, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction clip(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { clipValueMin, clipValueMax } = attrs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(x.shape, x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmClip(xId, clipValueMin, clipValueMax, outId);\n return out;\n}\nexport const clipByValueConfig = {\n kernelName: ClipByValue,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: clip\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcEJ5VmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9DbGlwQnlWYWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsV0FBVyxFQUFnRSxNQUFNLHVCQUF1QixDQUFDO0FBSWpILElBQUksUUFBd0UsQ0FBQztBQUU3RSxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDMUQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxDQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLElBSWI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxRQUFRLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NsaXBCeVZhbHVlLCBDbGlwQnlWYWx1ZUF0dHJzLCBDbGlwQnlWYWx1ZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbUNsaXA6ICh4SWQ6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQ2xpcCA9IGJhY2tlbmQud2FzbS5jd3JhcChDbGlwQnlWYWx1ZSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4X2lkXG4gICAgJ251bWJlcicsICAvLyBtaW5cbiAgICAnbnVtYmVyJywgIC8vIG1heFxuICAgICdudW1iZXInICAgLy8gb3V0X2lkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBjbGlwKGFyZ3M6IHtcbiAgaW5wdXRzOiBDbGlwQnlWYWx1ZUlucHV0cyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGF0dHJzOiBDbGlwQnlWYWx1ZUF0dHJzXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2NsaXBWYWx1ZU1pbiwgY2xpcFZhbHVlTWF4fSA9IGF0dHJzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSk7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICB3YXNtQ2xpcCh4SWQsIGNsaXBWYWx1ZU1pbiwgY2xpcFZhbHVlTWF4LCBvdXRJZCk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBjbGlwQnlWYWx1ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDbGlwQnlWYWx1ZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogY2xpcCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Concat, util } from '@tensorflow/tfjs-core';\nimport { concatImplCPU } from '../kernel_utils/shared';\nimport { identity } from './Identity';\nimport { reshape } from './Reshape';\nexport function concat(args) {\n const { inputs, backend } = args;\n const axis = util.parseAxisParam(args.attrs.axis, inputs[0].shape)[0];\n const shapes = inputs.map(t => t.shape);\n backend_util.assertParamsConsistent(shapes, axis);\n let outShape = backend_util.computeOutShape(inputs.map(t => t.shape), axis);\n // Keep only non-empty tensors (ignore tensors with 0 in their shape).\n const $inputs = inputs.filter(t => util.sizeFromShape(t.shape) > 0);\n if ($inputs.length === 1) {\n return identity({ inputs: { x: $inputs[0] }, backend });\n }\n const out = backend.makeOutput(outShape, inputs[0].dtype);\n if (util.sizeFromShape(outShape) === 0) {\n return out;\n }\n if ($inputs[0].dtype === 'string') {\n // Any concat of n-dimensional tensors across any axis can be reduced to\n // a concatenation of two-dimensional tensors across the axis 1 by first\n // partitioning the axes of the original tensors into those less than the\n // axis to be concatenated and the rest. Then reshape the tensors\n // into a two-dimensional tensor by collapsing these two sets of axes and\n // concatenate the resulting matrices across the axis 1, finally reshaping\n // the result to have the proper shape.\n const inputs2D = $inputs.map(t => {\n const innerSize = util.sizeFromShape(t.shape.slice(axis));\n const shape = [-1, innerSize];\n return reshape({ inputs: { x: t }, backend, attrs: { shape } });\n });\n const inputsValShapes = inputs2D.map(t => {\n return { vals: backend.readSync(t.dataId), shape: t.shape };\n });\n // Concats 2d tensors along axis=1.\n outShape =\n backend_util.computeOutShape(inputs2D.map(t => t.shape), 1 /* axis */);\n const simplyConcat = inputs2D[0].shape[0] === 1;\n const outVals = concatImplCPU(inputsValShapes, outShape, inputs[0].dtype, simplyConcat);\n const finalOutShape = backend_util.computeOutShape($inputs.map(t => t.shape), axis);\n out.shape = finalOutShape;\n const outData = backend.dataIdMap.get(out.dataId);\n outData.stringBytes = backend_util.fromStringArrayToUint8(outVals);\n inputs2D.forEach(t => backend.disposeData(t.dataId));\n return out;\n }\n const batchDim = util.sizeFromShape($inputs[0].shape.slice(0, axis));\n let sumInnerDims = 0;\n const innerDims = $inputs.map(input => {\n const innerDim = util.sizeFromShape(input.shape.slice(axis));\n sumInnerDims += innerDim;\n return innerDim;\n });\n const inVals = $inputs.map(input => backend.typedArrayFromHeap(input));\n const outVals = backend.typedArrayFromHeap(out);\n for (let b = 0; b < batchDim; b++) {\n let outOffset = b * sumInnerDims;\n for (let i = 0; i < inVals.length; i++) {\n const innerDim = innerDims[i];\n const inOffset = b * innerDim;\n const vals = inVals[i].subarray(inOffset, inOffset + innerDim);\n outVals.set(vals, outOffset);\n outOffset += innerDim;\n }\n }\n return out;\n}\nexport const concatConfig = {\n kernelName: Concat,\n backendName: 'wasm',\n kernelFunc: concat,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ29uY2F0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUF1RCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd0SCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXNFO0lBQ3hFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBRS9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVsRCxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFNUUsc0VBQXNFO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJ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QUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3QixTQUFTLElBQUksUUFBUSxDQUFDO1NBQ3ZCO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29uY2F0LCBDb25jYXRBdHRycywgQ29uY2F0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge2NvbmNhdEltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoXG4gICAgYXJnczoge2lucHV0czogQ29uY2F0SW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IENvbmNhdEF0dHJzfSkge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG5cbiAgY29uc3QgYXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXJncy5hdHRycy5heGlzLCBpbnB1dHNbMF0uc2hhcGUpWzBdO1xuXG4gIGNvbnN0IHNoYXBlcyA9IGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKTtcbiAgYmFja2VuZF91dGlsLmFzc2VydFBhcmFtc0NvbnNpc3RlbnQoc2hhcGVzLCBheGlzKTtcblxuICBsZXQgb3V0U2hhcGUgPSBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgYXhpcyk7XG5cbiAgLy8gS2VlcCBvbmx5IG5vbi1lbXB0eSB0ZW5zb3JzIChpZ25vcmUgdGVuc29ycyB3aXRoIDAgaW4gdGhlaXIgc2hhcGUpLlxuICBjb25zdCAkaW5wdXRzID0gaW5wdXRzLmZpbHRlcih0ID0+IHV0aWwuc2l6ZUZyb21TaGFwZSh0LnNoYXBlKSA+IDApO1xuICBpZiAoJGlucHV0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3g6ICRpbnB1dHNbMF19LCBiYWNrZW5kfSk7XG4gIH1cblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsIGlucHV0c1swXS5kdHlwZSk7XG5cbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgaWYgKCRpbnB1dHNbMF0uZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gQW55IGNvbmNhdCBvZiBuLWRpbWVuc2lvbmFsIHRlbnNvcnMgYWNyb3NzIGFueSBheGlzIGNhbiBiZSByZWR1Y2VkIHRvXG4gICAgLy8gYSBjb25jYXRlbmF0aW9uIG9mIHR3by1kaW1lbnNpb25hbCB0ZW5zb3JzIGFjcm9zcyB0aGUgYXhpcyAxIGJ5IGZpcnN0XG4gICAgLy8gcGFydGl0aW9uaW5nIHRoZSBheGVzIG9mIHRoZSBvcmlnaW5hbCB0ZW5zb3JzIGludG8gdGhvc2UgbGVzcyB0aGFuIHRoZVxuICAgIC8vIGF4aXMgdG8gYmUgY29uY2F0ZW5hdGVkIGFuZCB0aGUgcmVzdC4gVGhlbiByZXNoYXBlIHRoZSB0ZW5zb3JzXG4gICAgLy8gaW50byBhIHR3by1kaW1lbnNpb25hbCB0ZW5zb3IgYnkgY29sbGFwc2luZyB0aGVzZSB0d28gc2V0cyBvZiBheGVzIGFuZFxuICAgIC8vIGNvbmNhdGVuYXRlIHRoZSByZXN1bHRpbmcgbWF0cmljZXMgYWNyb3NzIHRoZSBheGlzIDEsIGZpbmFsbHkgcmVzaGFwaW5nXG4gICAgLy8gdGhlIHJlc3VsdCB0byBoYXZlIHRoZSBwcm9wZXIgc2hhcGUuXG4gICAgY29uc3QgaW5wdXRzMkQgPSAkaW5wdXRzLm1hcCh0ID0+IHtcbiAgICAgIGNvbnN0IGlubmVyU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh0LnNoYXBlLnNsaWNlKGF4aXMpKTtcbiAgICAgIGNvbnN0IHNoYXBlID0gWy0xLCBpbm5lclNpemVdO1xuICAgICAgcmV0dXJuIHJlc2hhcGUoe2lucHV0czoge3g6IHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlfX0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRzVmFsU2hhcGVzID0gaW5wdXRzMkQubWFwKHQgPT4ge1xuICAgICAgcmV0dXJuIHt2YWxzOiBiYWNrZW5kLnJlYWRTeW5jKHQuZGF0YUlkKSwgc2hhcGU6IHQuc2hhcGV9O1xuICAgIH0pO1xuXG4gICAgLy8gQ29uY2F0cyAyZCB0ZW5zb3JzIGFsb25nIGF4aXM9MS5cbiAgICBvdXRTaGFwZSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUoaW5wdXRzMkQubWFwKHQgPT4gdC5zaGFwZSksIDEgLyogYXhpcyAqLyk7XG4gICAgY29uc3Qgc2ltcGx5Q29uY2F0ID0gaW5wdXRzMkRbMF0uc2hhcGVbMF0gPT09IDE7XG4gICAgY29uc3Qgb3V0VmFscyA9IGNvbmNhdEltcGxDUFUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNWYWxTaGFwZXMsIG91dFNoYXBlLCBpbnB1dHNbMF0uZHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW1wbHlDb25jYXQpIGFzIHN0cmluZ1tdO1xuXG4gICAgY29uc3QgZmluYWxPdXRTaGFwZSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUoJGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgYXhpcyk7XG5cbiAgICBvdXQuc2hhcGUgPSBmaW5hbE91dFNoYXBlO1xuICAgIGNvbnN0IG91dERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCk7XG4gICAgb3V0RGF0YS5zdHJpbmdCeXRlcyA9IGJhY2tlbmRfdXRpbC5mcm9tU3RyaW5nQXJyYXlUb1VpbnQ4KG91dFZhbHMpO1xuXG4gICAgaW5wdXRzMkQuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZURhdGEodC5kYXRhSWQpKTtcblxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBjb25zdCBiYXRjaERpbSA9IHV0aWwuc2l6ZUZyb21TaGFwZSgkaW5wdXRzWzBdLnNoYXBlLnNsaWNlKDAsIGF4aXMpKTtcbiAgbGV0IHN1bUlubmVyRGltcyA9IDA7XG4gIGNvbnN0IGlubmVyRGltcyA9ICRpbnB1dHMubWFwKGlucHV0ID0+IHtcbiAgICBjb25zdCBpbm5lckRpbSA9IHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZS5zbGljZShheGlzKSk7XG4gICAgc3VtSW5uZXJEaW1zICs9IGlubmVyRGltO1xuICAgIHJldHVybiBpbm5lckRpbTtcbiAgfSk7XG4gIGNvbnN0IGluVmFscyA9ICRpbnB1dHMubWFwKGlucHV0ID0+IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKGlucHV0KSk7XG4gIGNvbnN0IG91dFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChvdXQpO1xuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoRGltOyBiKyspIHtcbiAgICBsZXQgb3V0T2Zmc2V0ID0gYiAqIHN1bUlubmVyRGltcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluVmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5uZXJEaW0gPSBpbm5lckRpbXNbaV07XG4gICAgICBjb25zdCBpbk9mZnNldCA9IGIgKiBpbm5lckRpbTtcbiAgICAgIGNvbnN0IHZhbHMgPSBpblZhbHNbaV0uc3ViYXJyYXkoaW5PZmZzZXQsIGluT2Zmc2V0ICsgaW5uZXJEaW0pO1xuICAgICAgb3V0VmFscy5zZXQodmFscywgb3V0T2Zmc2V0KTtcbiAgICAgIG91dE9mZnNldCArPSBpbm5lckRpbTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmNhdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDb25jYXQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IGNvbmNhdCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2D } from '@tensorflow/tfjs-core';\nlet wasmConv2d;\nfunction setup(backend) {\n wasmConv2d = backend.wasm.cwrap(Conv2D, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction conv2d(args) {\n const { inputs, attrs, backend } = args;\n const { x, filter } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const filterId = backend.dataIdMap.get(filter.dataId).id;\n const { strides, dilations, pad, dimRoundingMode, dataFormat } = attrs;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode, false, $dataFormat);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const inputChannels = convInfo.inChannels;\n const outputChannels = convInfo.outChannels;\n const isSamePad = convInfo.padInfo.type === 'SAME' ? 1 : 0;\n if (convInfo.dataFormat !== 'channelsLast') {\n throw new Error(`wasm backend Conv2D does not support dataFormat:'` +\n `${convInfo.dataFormat}'. Please use 'channelsLast'.`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId);\n return out;\n}\nexport const conv2DConfig = {\n kernelName: Conv2D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: conv2d\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ29udjJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFnRSxNQUFNLHVCQUF1QixDQUFDO0FBSTFILElBQUksVUFNc0IsQ0FBQztBQUUzQixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDdkQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUNYLElBQXNFO0lBQ3hFLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUV0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFekQsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDMUMsQ0FBYyxDQUFDLEtBQUssRUFBRyxNQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUNyRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUU5QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDcEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQzdDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDNUMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssY0FBYyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ1gsbURBQW1EO1lBQ25ELEdBQUcsUUFBUSxDQUFDLFVBQVUsK0JBQStCLENBQUMsQ0FBQztLQUM1RDtJQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25ELFVBQVUsQ0FDTixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFDL0QsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQzVELGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQ3ZFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjJELCBDb252MkRBdHRycywgQ29udjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbUNvbnYyZDogKFxuICAgIHhJZDogbnVtYmVyLCBiYXRjaFNpemU6IG51bWJlciwgaW5wdXRIZWlnaHQ6IG51bWJlciwgaW5wdXRXaWR0aDogbnVtYmVyLFxuICAgIGZpbHRlcklkOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLCBmaWx0ZXJXaWR0aDogbnVtYmVyLCBwYWRUb3A6IG51bWJlcixcbiAgICBwYWRSaWdodDogbnVtYmVyLCBwYWRCb3R0b206IG51bWJlciwgcGFkTGVmdDogbnVtYmVyLCBpc1NhbWVQYWQ6IG51bWJlcixcbiAgICBkaWxhdGlvbkhlaWdodDogbnVtYmVyLCBkaWxhdGlvbldpZHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICAgIHN0cmlkZVdpZHRoOiBudW1iZXIsIGlucHV0Q2hhbm5lbHM6IG51bWJlciwgb3V0cHV0Q2hhbm5lbHM6IG51bWJlcixcbiAgICBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQ29udjJkID0gYmFja2VuZC53YXNtLmN3cmFwKENvbnYyRCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gaW5wdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0V2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcklkXG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcldpZHRoXG4gICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAnbnVtYmVyJywgIC8vIHBhZFJpZ2h0XG4gICAgJ251bWJlcicsICAvLyBwYWRCb3R0b21cbiAgICAnbnVtYmVyJywgIC8vIHBhZExlZnRcbiAgICAnbnVtYmVyJywgIC8vIGlzU2FtZVBhZFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIG91dHB1dENoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY29udjJkKFxuICAgIGFyZ3M6IHtpbnB1dHM6IENvbnYyRElucHV0cywgYmFja2VuZDogQmFja2VuZFdhc20sIGF0dHJzOiBDb252MkRBdHRyc30pIHtcbiAgY29uc3Qge2lucHV0cywgYXR0cnMsIGJhY2tlbmR9ID0gYXJncztcblxuICBjb25zdCB7eCwgZmlsdGVyfSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3QgZmlsdGVySWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZmlsdGVyLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3Qge3N0cmlkZXMsIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXR9ID0gYXR0cnM7XG4gIGNvbnN0ICRkYXRhRm9ybWF0ID0gYmFja2VuZF91dGlsLmNvbnZlcnRDb252MkREYXRhRm9ybWF0KGRhdGFGb3JtYXQpO1xuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgICh4IGFzIFRlbnNvcjREKS5zaGFwZSwgKGZpbHRlciBhcyBUZW5zb3I0RCkuc2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucyxcbiAgICAgIHBhZCwgZGltUm91bmRpbmdNb2RlLCBmYWxzZSwgJGRhdGFGb3JtYXQpO1xuXG4gIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IHBhZFJpZ2h0ID0gY29udkluZm8ucGFkSW5mby5yaWdodDtcbiAgY29uc3QgcGFkQm90dG9tID0gY29udkluZm8ucGFkSW5mby5ib3R0b207XG4gIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGlucHV0Q2hhbm5lbHMgPSBjb252SW5mby5pbkNoYW5uZWxzO1xuICBjb25zdCBvdXRwdXRDaGFubmVscyA9IGNvbnZJbmZvLm91dENoYW5uZWxzO1xuICBjb25zdCBpc1NhbWVQYWQgPSBjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdTQU1FJyA/IDEgOiAwO1xuXG4gIGlmIChjb252SW5mby5kYXRhRm9ybWF0ICE9PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHdhc20gYmFja2VuZCBDb252MkQgZG9lcyBub3Qgc3VwcG9ydCBkYXRhRm9ybWF0OidgICtcbiAgICAgICAgYCR7Y29udkluZm8uZGF0YUZvcm1hdH0nLiBQbGVhc2UgdXNlICdjaGFubmVsc0xhc3QnLmApO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLm91dFNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgd2FzbUNvbnYyZChcbiAgICAgIHhJZCwgeC5zaGFwZVswXSwgeC5zaGFwZVsxXSwgeC5zaGFwZVsyXSwgZmlsdGVySWQsIGZpbHRlckhlaWdodCxcbiAgICAgIGZpbHRlcldpZHRoLCBwYWRUb3AsIHBhZFJpZ2h0LCBwYWRCb3R0b20sIHBhZExlZnQsIGlzU2FtZVBhZCxcbiAgICAgIGRpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoLCBpbnB1dENoYW5uZWxzLFxuICAgICAgb3V0cHV0Q2hhbm5lbHMsIG91dElkKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYyRENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDb252MkQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGNvbnYyZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2DBackpropInput, util } from '@tensorflow/tfjs-core';\nlet wasmConv2DBackpropInput;\nfunction setup(backend) {\n wasmConv2DBackpropInput = backend.wasm.cwrap(Conv2DBackpropInput, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction conv2DBackpropInput(args) {\n const { backend, inputs, attrs } = args;\n const { dy, filter } = inputs;\n const { strides, pad, dataFormat, dimRoundingMode, inputShape } = attrs;\n const dilations = 1;\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo;\n const topPad = filterHeight - 1 - convInfo.padInfo.top;\n const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const dxStrides = util.computeStrides(convInfo.inShape);\n const dyStrides = util.computeStrides(dy.shape);\n const [fltS0, fltS1, fltS2] = util.computeStrides(filter.shape);\n const xBatchStride = dxStrides[0];\n const xRowStride = isChannelsLast ? dxStrides[1] : dxStrides[2];\n const xColStride = isChannelsLast ? dxStrides[2] : 1;\n const xChannelStride = isChannelsLast ? 1 : dxStrides[1];\n const yBatchStride = dyStrides[0];\n const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2];\n const yColStride = isChannelsLast ? dyStrides[2] : 1;\n const yChannelStride = isChannelsLast ? 1 : dyStrides[1];\n const out = backend.makeOutput(convInfo.inShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n const dyId = backend.dataIdMap.get(dy.dataId).id;\n const filterId = backend.dataIdMap.get(filter.dataId).id;\n wasmConv2DBackpropInput(dyId, filterId, batchSize, filterHeight, filterWidth, inHeight, inWidth, inChannels, outHeight, outWidth, outChannels, strideHeight, strideWidth, topPad, leftPad, fltS0, fltS1, fltS2, xBatchStride, xRowStride, xColStride, xChannelStride, yBatchStride, yRowStride, yColStride, yChannelStride, outId);\n return out;\n}\nexport const conv2DBackpropInputConfig = {\n kernelName: Conv2DBackpropInput,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: conv2DBackpropInput\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEQmFja3Byb3BJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0NvbnYyREJhY2twcm9wSW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBNkYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekssSUFBSSx1QkFROEMsQ0FBQztBQUVuRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFDdEUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsRUFBRSxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUss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SSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUN2RSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDdkUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUM5RCxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUNoRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjJEQmFja3Byb3BJbnB1dCwgQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzLCBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtQ29udjJEQmFja3Byb3BJbnB1dDogKFxuICAgIGR5SWQ6IG51bWJlciwgZmlsdGVySWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLFxuICAgIGZpbHRlcldpZHRoOiBudW1iZXIsIGluSGVpZ2h0OiBudW1iZXIsIGluV2lkdGg6IG51bWJlciwgaW5DaGFubmVsczogbnVtYmVyLFxuICAgIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLCBvdXRDaGFubmVsczogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCB0b3BQYWQ6IG51bWJlciwgbGVmdFBhZDogbnVtYmVyLFxuICAgIGZsdFMwOiBudW1iZXIsIGZsdFMxOiBudW1iZXIsIGZsdFMyOiBudW1iZXIsIHhCYXRjaFN0cmlkZTogbnVtYmVyLFxuICAgIHhSb3dTdHJpZGU6IG51bWJlciwgeENvbFN0cmlkZTogbnVtYmVyLCB4Q2hhbm5lbFN0cmlkZTogbnVtYmVyLFxuICAgIHlCYXRjaFN0cmlkZTogbnVtYmVyLCB5Um93U3RyaWRlOiBudW1iZXIsIHlDb2xTdHJpZGU6IG51bWJlcixcbiAgICB5Q2hhbm5lbFN0cmlkZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtQ29udjJEQmFja3Byb3BJbnB1dCA9IGJhY2tlbmQud2FzbS5jd3JhcChDb252MkRCYWNrcHJvcElucHV0LCBudWxsLCBbXG4gICAgJ251bWJlcicsICAvLyBkeUlkXG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcldpZHRoXG4gICAgJ251bWJlcicsICAvLyBpbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gaW5XaWR0aFxuICAgICdudW1iZXInLCAgLy8gaW5DaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gb3V0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHRvcFBhZFxuICAgICdudW1iZXInLCAgLy8gbGVmdFBhZFxuICAgICdudW1iZXInLCAgLy8gZmx0UzBcbiAgICAnbnVtYmVyJywgIC8vIGZsdFMxXG4gICAgJ251bWJlcicsICAvLyBmbHRTMlxuICAgICdudW1iZXInLCAgLy8geEJhdGNoU3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB4Um93U3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB4Q29sU3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB4Q2hhbm5lbFN0cmlkZVxuICAgICdudW1iZXInLCAgLy8geUJhdGNoU3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB5Um93U3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB5Q29sU3RyaWRlXG4gICAgJ251bWJlcicsICAvLyB5Q2hhbm5lbFN0cmlkZVxuICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGNvbnYyREJhY2twcm9wSW5wdXQoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgaW5wdXRzOiBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzLFxuICBhdHRyczogQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkeSwgZmlsdGVyfSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGltUm91bmRpbmdNb2RlLCBpbnB1dFNoYXBlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGRpbGF0aW9ucyA9IDE7XG5cbiAgY29uc3QgJGRhdGFGb3JtYXQgPSBiYWNrZW5kX3V0aWwuY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdCk7XG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgaW5wdXRTaGFwZSwgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzdHJpZGVzLFxuICAgICAgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZmFsc2UgLyogZGVwdGh3aXNlICovLCAkZGF0YUZvcm1hdCk7XG4gIGNvbnN0IHtcbiAgICBiYXRjaFNpemUsXG4gICAgZmlsdGVySGVpZ2h0LFxuICAgIGZpbHRlcldpZHRoLFxuICAgIGluQ2hhbm5lbHMsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBvdXRIZWlnaHQsXG4gICAgb3V0V2lkdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoXG4gIH0gPSBjb252SW5mbztcblxuICBjb25zdCB0b3BQYWQgPSBmaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGxlZnRQYWQgPSBmaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBjb252SW5mby5kYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JztcbiAgY29uc3QgZHhTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhjb252SW5mby5pblNoYXBlKTtcbiAgY29uc3QgZHlTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhkeS5zaGFwZSk7XG4gIGNvbnN0IFtmbHRTMCwgZmx0UzEsIGZsdFMyXSA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoZmlsdGVyLnNoYXBlKTtcbiAgY29uc3QgeEJhdGNoU3RyaWRlID0gZHhTdHJpZGVzWzBdO1xuICBjb25zdCB4Um93U3RyaWRlID0gaXNDaGFubmVsc0xhc3QgPyBkeFN0cmlkZXNbMV0gOiBkeFN0cmlkZXNbMl07XG4gIGNvbnN0IHhDb2xTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IGR4U3RyaWRlc1syXSA6IDE7XG4gIGNvbnN0IHhDaGFubmVsU3RyaWRlID0gaXNDaGFubmVsc0xhc3QgPyAxIDogZHhTdHJpZGVzWzFdO1xuICBjb25zdCB5QmF0Y2hTdHJpZGUgPSBkeVN0cmlkZXNbMF07XG4gIGNvbnN0IHlSb3dTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IGR5U3RyaWRlc1sxXSA6IGR5U3RyaWRlc1syXTtcbiAgY29uc3QgeUNvbFN0cmlkZSA9IGlzQ2hhbm5lbHNMYXN0ID8gZHlTdHJpZGVzWzJdIDogMTtcbiAgY29uc3QgeUNoYW5uZWxTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IDEgOiBkeVN0cmlkZXNbMV07XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLmluU2hhcGUsICdmbG9hdDMyJyk7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICBjb25zdCBkeUlkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGZpbHRlci5kYXRhSWQpLmlkO1xuXG4gIHdhc21Db252MkRCYWNrcHJvcElucHV0KFxuICAgICAgZHlJZCwgZmlsdGVySWQsIGJhdGNoU2l6ZSwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCwgaW5IZWlnaHQsIGluV2lkdGgsXG4gICAgICBpbkNoYW5uZWxzLCBvdXRIZWlnaHQsIG91dFdpZHRoLCBvdXRDaGFubmVscywgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCxcbiAgICAgIHRvcFBhZCwgbGVmdFBhZCwgZmx0UzAsIGZsdFMxLCBmbHRTMiwgeEJhdGNoU3RyaWRlLCB4Um93U3RyaWRlLFxuICAgICAgeENvbFN0cmlkZSwgeENoYW5uZWxTdHJpZGUsIHlCYXRjaFN0cmlkZSwgeVJvd1N0cmlkZSwgeUNvbFN0cmlkZSxcbiAgICAgIHlDaGFubmVsU3RyaWRlLCBvdXRJZCk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBjb252MkRCYWNrcHJvcElucHV0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYyREJhY2twcm9wSW5wdXQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGNvbnYyREJhY2twcm9wSW5wdXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3D } from '@tensorflow/tfjs-core';\nlet wasmConv3D;\nfunction setup(backend) {\n wasmConv3D = backend.wasm.cwrap(Conv3D, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function conv3D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n if (x.dtype !== 'float32') {\n throw new Error(`Tensor x must have dtype float32, got ${x.dtype}`);\n }\n if (filter.dtype !== 'float32') {\n throw new Error(`Tensor filter must have dtype float32, got ${filter.dtype}`);\n }\n const convInfo = backend_util.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad);\n const out = backend.makeOutput(convInfo.outShape, x.dtype);\n wasmConv3D(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(out.dataId).id, convInfo.batchSize, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.inChannels, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.outChannels, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.filterDepth, convInfo.filterHeight, convInfo.filterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return out;\n}\nexport const conv3DConfig = {\n kernelName: Conv3D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: conv3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ29udjNELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFrRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVILElBQUksVUFPMEQsQ0FBQztBQUUvRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtRQUM1QyxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxVQUFVO0tBQ3RCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBSXRCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUN4QyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3JFO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhDQUE4QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRTtJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQWlELEVBQ25ELE1BQU0sQ0FBQyxLQUFpRCxFQUFFLE9BQU8sRUFDakUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsVUFBVSxDQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ2xDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3BDLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxVQUFVLEVBQ25CLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hCLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjNELCBDb252M0RBdHRycywgQ29udjNESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtQ29udjNEOiAoXG4gICAgeElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIG91dElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLFxuICAgIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBpbkNoYW5uZWxzOiBudW1iZXIsXG4gICAgb3V0RGVwdGg6IG51bWJlciwgb3V0SGVpZ2h0OiBudW1iZXIsIG91dFdpZHRoOiBudW1iZXIsIG91dENoYW5uZWxzOiBudW1iZXIsXG4gICAgc3RyaWRlRGVwdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsIHN0cmlkZVdpZHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25EZXB0aDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLCBkaWxhdGlvbldpZHRoOiBudW1iZXIsXG4gICAgZmlsdGVyRGVwdGg6IG51bWJlciwgZmlsdGVySGVpZ2h0OiBudW1iZXIsIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gICAgcGFkRnJvbnQ6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbUNvbnYzRCA9IGJhY2tlbmQud2FzbS5jd3JhcChDb252M0QsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVySWRcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgJ251bWJlcicsICAvLyBiYXRjaFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBpbkNoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gb3V0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZURlcHRoXG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkRlcHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlckhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHBhZEZyb250XG4gICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAnbnVtYmVyJywgIC8vIHBhZExlZnRcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252M0QoYXJnczoge1xuICBpbnB1dHM6IENvbnYzRElucHV0cyxcbiAgYXR0cnM6IENvbnYzREF0dHJzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlcn0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRpbGF0aW9uc30gPSBhdHRycztcbiAgaWYgKHguZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIHggbXVzdCBoYXZlIGR0eXBlIGZsb2F0MzIsIGdvdCAke3guZHR5cGV9YCk7XG4gIH1cbiAgaWYgKGZpbHRlci5kdHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGVuc29yIGZpbHRlciBtdXN0IGhhdmUgZHR5cGUgZmxvYXQzMiwgZ290ICR7ZmlsdGVyLmR0eXBlfWApO1xuICB9XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkKTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuICB3YXNtQ29udjNEKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChmaWx0ZXIuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIGNvbnZJbmZvLmluRGVwdGgsXG4gICAgICBjb252SW5mby5pbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmluV2lkdGgsXG4gICAgICBjb252SW5mby5pbkNoYW5uZWxzLFxuICAgICAgY29udkluZm8ub3V0RGVwdGgsXG4gICAgICBjb252SW5mby5vdXRIZWlnaHQsXG4gICAgICBjb252SW5mby5vdXRXaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dENoYW5uZWxzLFxuICAgICAgY29udkluZm8uc3RyaWRlRGVwdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVIZWlnaHQsXG4gICAgICBjb252SW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uRGVwdGgsXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uV2lkdGgsXG4gICAgICBjb252SW5mby5maWx0ZXJEZXB0aCxcbiAgICAgIGNvbnZJbmZvLmZpbHRlckhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmZpbHRlcldpZHRoLFxuICAgICAgY29udkluZm8ucGFkSW5mby5mcm9udCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8udG9wLFxuICAgICAgY29udkluZm8ucGFkSW5mby5sZWZ0LFxuICApO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgY29udjNEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYzRCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogY29udjNEIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropFilterV2 } from '@tensorflow/tfjs-core';\nlet wasmConv3DBackpropFilterV2;\nfunction setup(backend) {\n wasmConv3DBackpropFilterV2 =\n backend.wasm.cwrap(Conv3DBackpropFilterV2, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function conv3DBackpropFilterV2(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, pad, filterShape } = attrs;\n if (x.dtype !== 'float32') {\n throw new Error(`Tensor dy must have dtype float32, got ${x.dtype}`);\n }\n if (dy.dtype !== 'float32') {\n throw new Error(`Tensor filter must have dtype float32, got ${dy.dtype}`);\n }\n const convInfo = backend_util.computeConv3DInfo(x.shape, filterShape, strides, \n /*dilations=*/ 1, pad);\n const dw = backend.makeOutput(convInfo.filterShape, dy.dtype);\n wasmConv3DBackpropFilterV2(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dw.dataId).id, convInfo.batchSize, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.inChannels, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.outChannels, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.filterDepth, convInfo.filterHeight, convInfo.filterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return dw;\n}\nexport const conv3DBackpropFilterV2Config = {\n kernelName: Conv3DBackpropFilterV2,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: conv3DBackpropFilterV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BGaWx0ZXJWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0NvbnYzREJhY2twcm9wRmlsdGVyVjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBa0csTUFBTSx1QkFBdUIsQ0FBQztBQUk1SyxJQUFJLDBCQU8wRCxDQUFDO0FBRS9ELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLDBCQUEwQjtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUU7WUFDL0MsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLEVBQUcsVUFBVTtTQUN0QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBSXRDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUxQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzRTtJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQWlELEVBQUUsV0FBVyxFQUFFLE9BQU87SUFDekUsY0FBYyxDQUFBLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUUxQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELDBCQUEwQixDQUN0QixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsVUFBVSxFQUNuQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsY0FBYyxFQUN2QixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QixDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQWlCO0lBQ3hELFVBQVUsRUFBRSxzQkFBc0I7SUFDbEMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLHNCQUErQztDQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjNEQmFja3Byb3BGaWx0ZXJWMiwgQ29udjNEQmFja3Byb3BGaWx0ZXJWMkF0dHJzLCBDb252M0RCYWNrcHJvcEZpbHRlclYySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtQ29udjNEQmFja3Byb3BGaWx0ZXJWMjogKFxuICAgIHhJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGR3SWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsIGluRGVwdGg6IG51bWJlcixcbiAgICBpbkhlaWdodDogbnVtYmVyLCBpbldpZHRoOiBudW1iZXIsIGluQ2hhbm5lbHM6IG51bWJlciwgb3V0RGVwdGg6IG51bWJlcixcbiAgICBvdXRIZWlnaHQ6IG51bWJlciwgb3V0V2lkdGg6IG51bWJlciwgb3V0Q2hhbm5lbHM6IG51bWJlcixcbiAgICBzdHJpZGVEZXB0aDogbnVtYmVyLCBzdHJpZGVIZWlnaHQ6IG51bWJlciwgc3RyaWRlV2lkdGg6IG51bWJlcixcbiAgICBkaWxhdGlvbkRlcHRoOiBudW1iZXIsIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJEZXB0aDogbnVtYmVyLCBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlcixcbiAgICBwYWRGcm9udDogbnVtYmVyLCBwYWRUb3A6IG51bWJlciwgcGFkTGVmdDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQ29udjNEQmFja3Byb3BGaWx0ZXJWMiA9XG4gICAgICBiYWNrZW5kLndhc20uY3dyYXAoQ29udjNEQmFja3Byb3BGaWx0ZXJWMiwgbnVsbCwgW1xuICAgICAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkd0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgICAgICdudW1iZXInLCAgLy8gaW5EZXB0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gaW5XaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGluQ2hhbm5lbHNcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIG91dEhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIG91dFdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0Q2hhbm5lbHNcbiAgICAgICAgJ251bWJlcicsICAvLyBzdHJpZGVEZXB0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25EZXB0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uSGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGZpbHRlckRlcHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRGcm9udFxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZExlZnRcbiAgICAgIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udjNEQmFja3Byb3BGaWx0ZXJWMihhcmdzOiB7XG4gIGlucHV0czogQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cyxcbiAgYXR0cnM6IENvbnYzREJhY2twcm9wRmlsdGVyVjJBdHRycyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBkeX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGZpbHRlclNoYXBlfSA9IGF0dHJzO1xuXG4gIGlmICh4LmR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbnNvciBkeSBtdXN0IGhhdmUgZHR5cGUgZmxvYXQzMiwgZ290ICR7eC5kdHlwZX1gKTtcbiAgfVxuICBpZiAoZHkuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGZpbHRlciBtdXN0IGhhdmUgZHR5cGUgZmxvYXQzMiwgZ290ICR7ZHkuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2hhcGUsIHN0cmlkZXMsXG4gICAgICAvKmRpbGF0aW9ucz0qLzEsIHBhZCk7XG5cbiAgY29uc3QgZHcgPSBiYWNrZW5kLm1ha2VPdXRwdXQoY29udkluZm8uZmlsdGVyU2hhcGUsIGR5LmR0eXBlKTtcblxuICB3YXNtQ29udjNEQmFja3Byb3BGaWx0ZXJWMihcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHkuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChkdy5kYXRhSWQpLmlkLFxuICAgICAgY29udkluZm8uYmF0Y2hTaXplLFxuICAgICAgY29udkluZm8uaW5EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLmluQ2hhbm5lbHMsXG4gICAgICBjb252SW5mby5vdXREZXB0aCxcbiAgICAgIGNvbnZJbmZvLm91dEhlaWdodCxcbiAgICAgIGNvbnZJbmZvLm91dFdpZHRoLFxuICAgICAgY29udkluZm8ub3V0Q2hhbm5lbHMsXG4gICAgICBjb252SW5mby5zdHJpZGVEZXB0aCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZVdpZHRoLFxuICAgICAgY29udkluZm8uZGlsYXRpb25EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LFxuICAgICAgY29udkluZm8uZGlsYXRpb25XaWR0aCxcbiAgICAgIGNvbnZJbmZvLmZpbHRlckRlcHRoLFxuICAgICAgY29udkluZm8uZmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZmlsdGVyV2lkdGgsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmZyb250LFxuICAgICAgY29udkluZm8ucGFkSW5mby50b3AsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBkdztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnYzREJhY2twcm9wRmlsdGVyVjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjNEQmFja3Byb3BGaWx0ZXJWMixcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogY29udjNEQmFja3Byb3BGaWx0ZXJWMiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropInputV2 } from '@tensorflow/tfjs-core';\nlet wasmConv3DBackpropInputV2;\nfunction setup(backend) {\n wasmConv3DBackpropInputV2 = backend.wasm.cwrap(Conv3DBackpropInputV2, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function conv3DBackpropInputV2(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { pad, strides, inputShape } = attrs;\n if (dy.dtype !== 'float32') {\n throw new Error(`Tensor dy must have dtype float32, got ${dy.dtype}`);\n }\n if (filter.dtype !== 'float32') {\n throw new Error(`Tensor filter must have dtype float32, got ${filter.dtype}`);\n }\n const convInfo = backend_util.computeConv3DInfo(inputShape, filter.shape, strides, /*dilations=*/ 1, pad);\n const dx = backend.makeOutput(convInfo.inShape, dy.dtype);\n wasmConv3DBackpropInputV2(backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, convInfo.batchSize, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.inChannels, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.outChannels, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.filterDepth, convInfo.filterHeight, convInfo.filterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return dx;\n}\nexport const conv3DBackpropInputV2Config = {\n kernelName: Conv3DBackpropInputV2,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: conv3DBackpropInputV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BJbnB1dFYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ29udjNEQmFja3Byb3BJbnB1dFYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQWdHLE1BQU0sdUJBQXVCLENBQUM7QUFJekssSUFBSSx5QkFPMEQsQ0FBQztBQUUvRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7UUFDMUUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsVUFBVTtLQUN0QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBSXJDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUN6QyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhDQUE4QyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNuRTtJQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFpRCxFQUNwRSxPQUFPLEVBQUUsY0FBYyxDQUFBLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVuQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFELHlCQUF5QixDQUNyQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsVUFBVSxFQUNuQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsY0FBYyxFQUN2QixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QixDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQWlCO0lBQ3ZELFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLHFCQUE4QztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjNEQmFja3Byb3BJbnB1dFYyLCBDb252M0RCYWNrcHJvcElucHV0VjJBdHRycywgQ29udjNEQmFja3Byb3BJbnB1dFYySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtQ29udjNEQmFja3Byb3BJbnB1dFYyOiAoXG4gICAgZmlsdGVySWQ6IG51bWJlciwgZHlJZDogbnVtYmVyLCBkeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLFxuICAgIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBpbkNoYW5uZWxzOiBudW1iZXIsXG4gICAgb3V0RGVwdGg6IG51bWJlciwgb3V0SGVpZ2h0OiBudW1iZXIsIG91dFdpZHRoOiBudW1iZXIsIG91dENoYW5uZWxzOiBudW1iZXIsXG4gICAgc3RyaWRlRGVwdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsIHN0cmlkZVdpZHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25EZXB0aDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLCBkaWxhdGlvbldpZHRoOiBudW1iZXIsXG4gICAgZmlsdGVyRGVwdGg6IG51bWJlciwgZmlsdGVySGVpZ2h0OiBudW1iZXIsIGZpbHRlcldpZHRoOiBudW1iZXIsXG4gICAgcGFkRnJvbnQ6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbUNvbnYzREJhY2twcm9wSW5wdXRWMiA9IGJhY2tlbmQud2FzbS5jd3JhcChDb252M0RCYWNrcHJvcElucHV0VjIsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcklkXG4gICAgJ251bWJlcicsICAvLyBkeUlkXG4gICAgJ251bWJlcicsICAvLyBkeElkXG4gICAgJ251bWJlcicsICAvLyBiYXRjaFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBpbkNoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gb3V0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZURlcHRoXG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkRlcHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlckhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHBhZEZyb250XG4gICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAnbnVtYmVyJywgIC8vIHBhZExlZnRcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252M0RCYWNrcHJvcElucHV0VjIoYXJnczoge1xuICBpbnB1dHM6IENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cyxcbiAgYXR0cnM6IENvbnYzREJhY2twcm9wSW5wdXRWMkF0dHJzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7cGFkLCBzdHJpZGVzLCBpbnB1dFNoYXBlfSA9IGF0dHJzO1xuICBpZiAoZHkuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGVuc29yIGR5IG11c3QgaGF2ZSBkdHlwZSBmbG9hdDMyLCBnb3QgJHtkeS5kdHlwZX1gKTtcbiAgfVxuICBpZiAoZmlsdGVyLmR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUZW5zb3IgZmlsdGVyIG11c3QgaGF2ZSBkdHlwZSBmbG9hdDMyLCBnb3QgJHtmaWx0ZXIuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjNESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgc3RyaWRlcywgLypkaWxhdGlvbnM9Ki8xLCBwYWQpO1xuXG4gIGNvbnN0IGR4ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLmluU2hhcGUsIGR5LmR0eXBlKTtcblxuICB3YXNtQ29udjNEQmFja3Byb3BJbnB1dFYyKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGZpbHRlci5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIGNvbnZJbmZvLmluRGVwdGgsXG4gICAgICBjb252SW5mby5pbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmluV2lkdGgsXG4gICAgICBjb252SW5mby5pbkNoYW5uZWxzLFxuICAgICAgY29udkluZm8ub3V0RGVwdGgsXG4gICAgICBjb252SW5mby5vdXRIZWlnaHQsXG4gICAgICBjb252SW5mby5vdXRXaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dENoYW5uZWxzLFxuICAgICAgY29udkluZm8uc3RyaWRlRGVwdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVIZWlnaHQsXG4gICAgICBjb252SW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uRGVwdGgsXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uV2lkdGgsXG4gICAgICBjb252SW5mby5maWx0ZXJEZXB0aCxcbiAgICAgIGNvbnZJbmZvLmZpbHRlckhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmZpbHRlcldpZHRoLFxuICAgICAgY29udkluZm8ucGFkSW5mby5mcm9udCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8udG9wLFxuICAgICAgY29udkluZm8ucGFkSW5mby5sZWZ0LFxuICApO1xuICByZXR1cm4gZHg7XG59XG5cbmV4cG9ydCBjb25zdCBjb252M0RCYWNrcHJvcElucHV0VjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjNEQmFja3Byb3BJbnB1dFYyLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBjb252M0RCYWNrcHJvcElucHV0VjIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cos } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const cosConfig = createUnaryKernelConfig(Cos);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ29zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NvcywgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBjb3NDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKENvcyk7XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cosh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const coshConfig = createUnaryKernelConfig(Cosh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Nvc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLElBQUksRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0Nvc2gsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgY29zaENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoQ29zaCk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { CropAndResize } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\n// Must match enum in CropAndResize.cc\nvar InterpolationMethod;\n(function (InterpolationMethod) {\n InterpolationMethod[InterpolationMethod[\"bilinear\"] = 0] = \"bilinear\";\n InterpolationMethod[InterpolationMethod[\"nearest\"] = 1] = \"nearest\";\n})(InterpolationMethod || (InterpolationMethod = {}));\nlet wasmCropAndResize;\nfunction setup(backend) {\n wasmCropAndResize = backend.wasm.cwrap(CropAndResize, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // out id\n ]);\n}\nfunction cropAndResize(args) {\n const { backend, inputs, attrs } = args;\n const { method, extrapolationValue, cropSize } = attrs;\n const { image, boxes, boxInd } = inputs;\n const numBoxes = boxes.shape[0];\n const [cropHeight, cropWidth] = cropSize;\n const outShape = [numBoxes, cropHeight, cropWidth, image.shape[3]];\n let imagesData = backend.dataIdMap.get(image.dataId);\n let castedData;\n if (image.dtype !== 'float32') {\n castedData = cast({ backend, inputs: { x: image }, attrs: { dtype: 'float32' } });\n imagesData = backend.dataIdMap.get(castedData.dataId);\n }\n const imagesId = imagesData.id;\n const boxesId = backend.dataIdMap.get(boxes.dataId).id;\n const boxIndId = backend.dataIdMap.get(boxInd.dataId).id;\n const out = backend.makeOutput(outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n const imagesShapeBytes = new Uint8Array(new Int32Array(image.shape).buffer);\n wasmCropAndResize(imagesId, boxesId, boxIndId, numBoxes, imagesShapeBytes, cropHeight, cropWidth, InterpolationMethod[method], extrapolationValue, outId);\n if (castedData != null) {\n backend.disposeData(castedData.dataId);\n }\n return out;\n}\nexport const cropAndResizeConfig = {\n kernelName: CropAndResize,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: cropAndResize\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvcEFuZFJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0Nyb3BBbmRSZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBZ0YsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLHNDQUFzQztBQUN0QyxJQUFLLG1CQUdKO0FBSEQsV0FBSyxtQkFBbUI7SUFDdEIscUVBQVksQ0FBQTtJQUNaLG1FQUFXLENBQUE7QUFDYixDQUFDLEVBSEksbUJBQW1CLEtBQW5CLG1CQUFtQixRQUd2QjtBQUVELElBQUksaUJBR2tFLENBQUM7QUFFdkUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDbkUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxDQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBSXRCO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3JELE1BQU0sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBNEIsQ0FBQztJQUM3RCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDNUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN2RDtJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXpELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUUsaUJBQWlCLENBQ2IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFDbkUsU0FBUyxFQUNULG1CQUFtQixDQUFDLE1BQ2dDLENBQUMsRUFDckQsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFL0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0Nyb3BBbmRSZXNpemUsIENyb3BBbmRSZXNpemVBdHRycywgQ3JvcEFuZFJlc2l6ZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vQ2FzdCc7XG5cbi8vIE11c3QgbWF0Y2ggZW51bSBpbiBDcm9wQW5kUmVzaXplLmNjXG5lbnVtIEludGVycG9sYXRpb25NZXRob2Qge1xuICBiaWxpbmVhciA9IDAsXG4gIG5lYXJlc3QgPSAxXG59XG5cbmxldCB3YXNtQ3JvcEFuZFJlc2l6ZTogKFxuICAgIGltYWdlc0lkOiBudW1iZXIsIGJveGVzSWQ6IG51bWJlciwgYm94SW5kSWQ6IG51bWJlciwgbnVtQm94ZXM6IG51bWJlcixcbiAgICBpbWFnZXNTaGFwZTogVWludDhBcnJheSwgY3JvcEhlaWdodDogbnVtYmVyLCBjcm9wV2lkdGg6IG51bWJlcixcbiAgICBtZXRob2Q6IG51bWJlciwgZXh0cmFwb2xhdGlvblZhbHVlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21Dcm9wQW5kUmVzaXplID0gYmFja2VuZC53YXNtLmN3cmFwKENyb3BBbmRSZXNpemUsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIGltYWdlc0lkXG4gICAgJ251bWJlcicsICAvLyBib3hlc0lkXG4gICAgJ251bWJlcicsICAvLyBib3hJbmRJZFxuICAgICdudW1iZXInLCAgLy8gbnVtQm94ZXNcbiAgICAnYXJyYXknLCAgIC8vIGltYWdlcyBzaGFwZVxuICAgICdudW1iZXInLCAgLy8gY3JvcEhlaWdodFxuICAgICdudW1iZXInLCAgLy8gY3JvcFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBtZXRob2RcbiAgICAnbnVtYmVyJywgIC8vIGV4dHJhcG9sYXRpb24gdmFsdWVcbiAgICAnbnVtYmVyJyAgIC8vIG91dCBpZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gY3JvcEFuZFJlc2l6ZShhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IENyb3BBbmRSZXNpemVJbnB1dHMsXG4gIGF0dHJzOiBDcm9wQW5kUmVzaXplQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge21ldGhvZCwgZXh0cmFwb2xhdGlvblZhbHVlLCBjcm9wU2l6ZX0gPSBhdHRycztcbiAgY29uc3Qge2ltYWdlLCBib3hlcywgYm94SW5kfSA9IGlucHV0cztcblxuICBjb25zdCBudW1Cb3hlcyA9IGJveGVzLnNoYXBlWzBdO1xuXG4gIGNvbnN0IFtjcm9wSGVpZ2h0LCBjcm9wV2lkdGhdID0gY3JvcFNpemUgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbbnVtQm94ZXMsIGNyb3BIZWlnaHQsIGNyb3BXaWR0aCwgaW1hZ2Uuc2hhcGVbM11dO1xuXG4gIGxldCBpbWFnZXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGltYWdlLmRhdGFJZCk7XG4gIGxldCBjYXN0ZWREYXRhO1xuICBpZiAoaW1hZ2UuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZERhdGEgPSBjYXN0KHtiYWNrZW5kLCBpbnB1dHM6IHt4OiBpbWFnZX0sIGF0dHJzOiB7ZHR5cGU6ICdmbG9hdDMyJ319KTtcbiAgICBpbWFnZXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlc0lkID0gaW1hZ2VzRGF0YS5pZDtcbiAgY29uc3QgYm94ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hlcy5kYXRhSWQpLmlkO1xuICBjb25zdCBib3hJbmRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hJbmQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsICdmbG9hdDMyJyk7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IGltYWdlc1NoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShpbWFnZS5zaGFwZSkuYnVmZmVyKTtcblxuICB3YXNtQ3JvcEFuZFJlc2l6ZShcbiAgICAgIGltYWdlc0lkLCBib3hlc0lkLCBib3hJbmRJZCwgbnVtQm94ZXMsIGltYWdlc1NoYXBlQnl0ZXMsIGNyb3BIZWlnaHQsXG4gICAgICBjcm9wV2lkdGgsXG4gICAgICBJbnRlcnBvbGF0aW9uTWV0aG9kW21ldGhvZCBhcyB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleW9mIHR5cGVvZiBJbnRlcnBvbGF0aW9uTWV0aG9kXSxcbiAgICAgIGV4dHJhcG9sYXRpb25WYWx1ZSwgb3V0SWQpO1xuXG4gIGlmIChjYXN0ZWREYXRhICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcm9wQW5kUmVzaXplQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENyb3BBbmRSZXNpemUsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGNyb3BBbmRSZXNpemUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Cumprod, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nimport { transpose } from './Transpose';\nlet wasmCumprod;\nfunction setup(backend) {\n wasmCumprod = backend.wasm.cwrap(Cumprod, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // dtype\n ]);\n}\nexport function cumprod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n const xRank = x.shape.length;\n util.assert(x.dtype === 'float32' || x.dtype === 'int32', () => `cumprod does not support ${x.dtype} tensors in the WASM backend`);\n // permute required axis to inner most axis\n const permutation = backend_util.getAxesPermutation([axis], xRank);\n let permutedX = x;\n if (permutation !== null) {\n permutedX = transpose({ inputs: { x }, attrs: { perm: permutation }, backend });\n }\n const permutedAxis = backend_util.getInnerMostAxes(1, xRank)[0];\n backend_util.assertAxesAreInnerMostDims('cumprod', [permutedAxis], xRank);\n const permutedOut = backend.makeOutput(permutedX.shape, permutedX.dtype);\n const finalDim = permutedX.shape[permutedAxis];\n const permutedXId = backend.dataIdMap.get(permutedX.dataId).id;\n const permutedOutId = backend.dataIdMap.get(permutedOut.dataId).id;\n wasmCumprod(permutedXId, exclusive ? 1 : 0, reverse ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]);\n // transpose data back if permuted\n let out = permutedOut;\n if (permutation !== null) {\n const undoPermutation = backend_util.getUndoAxesPermutation(permutation);\n out = transpose({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend });\n backend.disposeData(permutedX.dataId);\n backend.disposeData(permutedOut.dataId);\n }\n return out;\n}\nexport const cumprodConfig = {\n kernelName: Cumprod,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: cumprod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VtcHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0N1bXByb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsT0FBTyxFQUEyQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUlySSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsSUFBSSxXQUNzRSxDQUFDO0FBRTNFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUN6RCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRSxRQUFRO0tBQ25CLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUNyQixJQUF3RTtJQUV4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFDdEQsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxLQUFLLDhCQUE4QixDQUFDLENBQUM7SUFDM0UsMkNBQTJDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDeEIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQzNFO0lBQ0QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxZQUFZLENBQUMsMEJBQTBCLENBQUMsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRSxXQUFXLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQ3pELGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFOUMsa0NBQWtDO0lBQ2xDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUN0QixJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7UUFDeEIsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLEdBQUcsR0FBRyxTQUFTLENBQ2IsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsV0FBVyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBDdW1wcm9kLCBDdW1wcm9kQXR0cnMsIEN1bXByb2RJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5sZXQgd2FzbUN1bXByb2Q6ICh4SWQ6IG51bWJlciwgZXhjbHVzaXZlOiBudW1iZXIsIHJldmVyc2U6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgZmluYWxEaW06IG51bWJlciwgb3V0SWQ6IG51bWJlciwgZHR5cGU6IENwcERUeXBlKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQ3VtcHJvZCA9IGJhY2tlbmQud2FzbS5jd3JhcChDdW1wcm9kLCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAnbnVtYmVyJywgLy8geF9pZFxuICAgICdudW1iZXInLCAvLyBleGNsdXNpdmVcbiAgICAnbnVtYmVyJywgLy8gcmV2ZXJzZVxuICAgICdudW1iZXInLCAvLyBmaW5hbF9kaW1cbiAgICAnbnVtYmVyJywgLy8gb3V0X2lkXG4gICAgJ251bWJlcicgIC8vIGR0eXBlXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VtcHJvZChcbiAgYXJnczoge2lucHV0czogQ3VtcHJvZElucHV0cywgYmFja2VuZDogQmFja2VuZFdhc20sIGF0dHJzOiBDdW1wcm9kQXR0cnN9KTpcblRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBleGNsdXNpdmUsIHJldmVyc2V9ID0gYXR0cnM7XG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgdXRpbC5hc3NlcnQoeC5kdHlwZSA9PT0gJ2Zsb2F0MzInIHx8IHguZHR5cGUgPT09ICdpbnQzMicsXG4gICAgKCkgPT4gYGN1bXByb2QgZG9lcyBub3Qgc3VwcG9ydCAke3guZHR5cGV9IHRlbnNvcnMgaW4gdGhlIFdBU00gYmFja2VuZGApO1xuICAvLyBwZXJtdXRlIHJlcXVpcmVkIGF4aXMgdG8gaW5uZXIgbW9zdCBheGlzXG4gIGNvbnN0IHBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihbYXhpc10sIHhSYW5rKTtcbiAgbGV0IHBlcm11dGVkWCA9IHg7XG4gIGlmIChwZXJtdXRhdGlvbiAhPT0gbnVsbCkge1xuICAgIHBlcm11dGVkWCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGF0dHJzOiB7cGVybTogcGVybXV0YXRpb259LCBiYWNrZW5kfSk7XG4gIH1cbiAgY29uc3QgcGVybXV0ZWRBeGlzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoMSwgeFJhbmspWzBdO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2N1bXByb2QnLCBbcGVybXV0ZWRBeGlzXSwgeFJhbmspO1xuXG4gIGNvbnN0IHBlcm11dGVkT3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHBlcm11dGVkWC5zaGFwZSwgcGVybXV0ZWRYLmR0eXBlKTtcbiAgY29uc3QgZmluYWxEaW0gPSBwZXJtdXRlZFguc2hhcGVbcGVybXV0ZWRBeGlzXTtcbiAgY29uc3QgcGVybXV0ZWRYSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQocGVybXV0ZWRYLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IHBlcm11dGVkT3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQocGVybXV0ZWRPdXQuZGF0YUlkKS5pZDtcbiAgd2FzbUN1bXByb2QocGVybXV0ZWRYSWQsIGV4Y2x1c2l2ZSA/IDEgOiAwLCByZXZlcnNlID8gMSA6IDAsIGZpbmFsRGltLFxuICAgICAgICAgICAgICBwZXJtdXRlZE91dElkLCBDcHBEVHlwZVt4LmR0eXBlXSk7XG5cbiAgLy8gdHJhbnNwb3NlIGRhdGEgYmFjayBpZiBwZXJtdXRlZFxuICBsZXQgb3V0ID0gcGVybXV0ZWRPdXQ7XG4gIGlmIChwZXJtdXRhdGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHVuZG9QZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRVbmRvQXhlc1Blcm11dGF0aW9uKHBlcm11dGF0aW9uKTtcbiAgICBvdXQgPSB0cmFuc3Bvc2UoXG4gICAgICB7aW5wdXRzOiB7eDogcGVybXV0ZWRPdXR9LCBhdHRyczoge3Blcm06IHVuZG9QZXJtdXRhdGlvbn0sIGJhY2tlbmR9KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHBlcm11dGVkWC5kYXRhSWQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEocGVybXV0ZWRPdXQuZGF0YUlkKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgY3VtcHJvZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDdW1wcm9kLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBjdW1wcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Cumsum, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nimport { transpose } from './Transpose';\nlet wasmCumsum;\nfunction setup(backend) {\n wasmCumsum = backend.wasm.cwrap(Cumsum, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // dtype\n ]);\n}\nexport function cumsum(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n const xRank = x.shape.length;\n util.assert(x.dtype === 'float32' || x.dtype === 'int32', () => `cumsum does not support ${x.dtype} tensors in the WASM backend`);\n // permute required axis to inner most axis\n const permutation = backend_util.getAxesPermutation([axis], xRank);\n let permutedX = x;\n if (permutation !== null) {\n permutedX = transpose({ inputs: { x }, attrs: { perm: permutation }, backend });\n }\n const permutedAxis = backend_util.getInnerMostAxes(1, xRank)[0];\n backend_util.assertAxesAreInnerMostDims('cumsum', [permutedAxis], xRank);\n const permutedOut = backend.makeOutput(permutedX.shape, permutedX.dtype);\n const finalDim = permutedX.shape[permutedAxis];\n const permutedXId = backend.dataIdMap.get(permutedX.dataId).id;\n const permutedOutId = backend.dataIdMap.get(permutedOut.dataId).id;\n wasmCumsum(permutedXId, exclusive ? 1 : 0, reverse ? 1 : 0, finalDim, permutedOutId, CppDType[x.dtype]);\n // transpose data back if permuted\n let out = permutedOut;\n if (permutation !== null) {\n const undoPermutation = backend_util.getUndoAxesPermutation(permutation);\n out = transpose({ inputs: { x: permutedOut }, attrs: { perm: undoPermutation }, backend });\n backend.disposeData(permutedX.dataId);\n backend.disposeData(permutedOut.dataId);\n }\n return out;\n}\nexport const cumsumConfig = {\n kernelName: Cumsum,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: cumsum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Vtc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvQ3Vtc3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLE1BQU0sRUFBeUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbEksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLElBQUksVUFDc0UsQ0FBQztBQUUzRSxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDdkQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLENBQUUsUUFBUTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsSUFBc0U7SUFFdEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLEVBQ3RELEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUMsS0FBSyw4QkFBOEIsQ0FBQyxDQUFDO0lBQzFFLDJDQUEyQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQ3hCLFNBQVMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsWUFBWSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXpFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9ELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkUsVUFBVSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUN6RCxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTdDLGtDQUFrQztJQUNsQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDdEIsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQ3hCLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RSxHQUFHLEdBQUcsU0FBUyxDQUNiLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgQ3Vtc3VtLCBDdW1zdW1BdHRycywgQ3Vtc3VtSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxubGV0IHdhc21DdW1zdW06ICh4SWQ6IG51bWJlciwgZXhjbHVzaXZlOiBudW1iZXIsIHJldmVyc2U6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgZmluYWxEaW06IG51bWJlciwgb3V0SWQ6IG51bWJlciwgZHR5cGU6IENwcERUeXBlKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtQ3Vtc3VtID0gYmFja2VuZC53YXNtLmN3cmFwKEN1bXN1bSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsIC8vIHhfaWRcbiAgICAnbnVtYmVyJywgLy8gZXhjbHVzaXZlXG4gICAgJ251bWJlcicsIC8vIHJldmVyc2VcbiAgICAnbnVtYmVyJywgLy8gZmluYWxfZGltXG4gICAgJ251bWJlcicsIC8vIG91dF9pZFxuICAgICdudW1iZXInICAvLyBkdHlwZVxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1bXN1bShcbiAgYXJnczoge2lucHV0czogQ3Vtc3VtSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IEN1bXN1bUF0dHJzfSk6XG5UZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpcywgZXhjbHVzaXZlLCByZXZlcnNlfSA9IGF0dHJzO1xuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gIHV0aWwuYXNzZXJ0KHguZHR5cGUgPT09ICdmbG9hdDMyJyB8fCB4LmR0eXBlID09PSAnaW50MzInLFxuICAgICgpID0+IGBjdW1zdW0gZG9lcyBub3Qgc3VwcG9ydCAke3guZHR5cGV9IHRlbnNvcnMgaW4gdGhlIFdBU00gYmFja2VuZGApO1xuICAvLyBwZXJtdXRlIHJlcXVpcmVkIGF4aXMgdG8gaW5uZXIgbW9zdCBheGlzXG4gIGNvbnN0IHBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihbYXhpc10sIHhSYW5rKTtcbiAgbGV0IHBlcm11dGVkWCA9IHg7XG4gIGlmIChwZXJtdXRhdGlvbiAhPT0gbnVsbCkge1xuICAgIHBlcm11dGVkWCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGF0dHJzOiB7cGVybTogcGVybXV0YXRpb259LCBiYWNrZW5kfSk7XG4gIH1cbiAgY29uc3QgcGVybXV0ZWRBeGlzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoMSwgeFJhbmspWzBdO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2N1bXN1bScsIFtwZXJtdXRlZEF4aXNdLCB4UmFuayk7XG5cbiAgY29uc3QgcGVybXV0ZWRPdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQocGVybXV0ZWRYLnNoYXBlLCBwZXJtdXRlZFguZHR5cGUpO1xuICBjb25zdCBmaW5hbERpbSA9IHBlcm11dGVkWC5zaGFwZVtwZXJtdXRlZEF4aXNdO1xuICBjb25zdCBwZXJtdXRlZFhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChwZXJtdXRlZFguZGF0YUlkKS5pZDtcbiAgY29uc3QgcGVybXV0ZWRPdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChwZXJtdXRlZE91dC5kYXRhSWQpLmlkO1xuICB3YXNtQ3Vtc3VtKHBlcm11dGVkWElkLCBleGNsdXNpdmUgPyAxIDogMCwgcmV2ZXJzZSA/IDEgOiAwLCBmaW5hbERpbSxcbiAgICAgICAgICAgICBwZXJtdXRlZE91dElkLCBDcHBEVHlwZVt4LmR0eXBlXSk7XG5cbiAgLy8gdHJhbnNwb3NlIGRhdGEgYmFjayBpZiBwZXJtdXRlZFxuICBsZXQgb3V0ID0gcGVybXV0ZWRPdXQ7XG4gIGlmIChwZXJtdXRhdGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHVuZG9QZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRVbmRvQXhlc1Blcm11dGF0aW9uKHBlcm11dGF0aW9uKTtcbiAgICBvdXQgPSB0cmFuc3Bvc2UoXG4gICAgICB7aW5wdXRzOiB7eDogcGVybXV0ZWRPdXR9LCBhdHRyczoge3Blcm06IHVuZG9QZXJtdXRhdGlvbn0sIGJhY2tlbmR9KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHBlcm11dGVkWC5kYXRhSWQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEocGVybXV0ZWRPdXQuZGF0YUlkKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgY3Vtc3VtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEN1bXN1bSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogY3Vtc3VtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DenseBincount } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmDenseBincount;\nfunction setup(backend) {\n wasmDenseBincount = backend.wasm.cwrap('DenseBincount', null /*void*/, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'boolean',\n 'number',\n 'number',\n 'boolean',\n 'number', // outId\n ]);\n}\nfunction denseBincount(args) {\n const { backend, inputs, attrs } = args;\n const { x, weights } = inputs;\n const { size, binaryOutput } = attrs;\n const hasWeights = weights.shape.reduce((p, v) => p * v, 1) !== 0;\n const outShape = x.shape.length === 1 ? [size] : [x.shape[0], size];\n const out = backend.makeOutput(outShape, weights.dtype);\n function tensorId(x) {\n return backend.dataIdMap.get(x.dataId).id;\n }\n wasmDenseBincount(tensorId(x), new Uint8Array(new Int32Array(x.shape).buffer), x.shape.length, size, hasWeights, tensorId(weights), CppDType[weights.dtype], binaryOutput, tensorId(out));\n return out;\n}\nexport const denseBincountConfig = {\n kernelName: DenseBincount,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: denseBincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVuc2VCaW5jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0RlbnNlQmluY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLGFBQWEsRUFBZ0YsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksaUJBRzZDLENBQUM7QUFFbEQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDckUsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRLEVBQUksUUFBUTtLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFJdEI7SUFDQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsU0FBUyxRQUFRLENBQUMsQ0FBYTtRQUM3QixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUNELGlCQUFpQixDQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQzNELENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNuRCxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUUxRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLGFBQXNDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0RlbnNlQmluY291bnQsIERlbnNlQmluY291bnRBdHRycywgRGVuc2VCaW5jb3VudElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21EZW5zZUJpbmNvdW50OiAoXG4gICAgeElkOiBudW1iZXIsIHhTaGFwZTogVWludDhBcnJheSwgeFNoYXBlTGVuOiBudW1iZXIsIHNpemU6IG51bWJlcixcbiAgICBoYXNXZWlnaHRzOiBib29sZWFuLCB3ZWlnaHRzSWQ6IG51bWJlciwgd2VpZ2h0c0RUeXBlOiBDcHBEVHlwZSxcbiAgICBiaW5hcnlPdXRwdXQ6IGJvb2xlYW4sIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21EZW5zZUJpbmNvdW50ID0gYmFja2VuZC53YXNtLmN3cmFwKCdEZW5zZUJpbmNvdW50JywgbnVsbCAvKnZvaWQqLywgW1xuICAgICdudW1iZXInLCAgIC8vIHhJZFxuICAgICdhcnJheScsICAgIC8vIHhTaGFwZVxuICAgICdudW1iZXInLCAgIC8vIHhTaGFwZUxlblxuICAgICdudW1iZXInLCAgIC8vIHNpemVcbiAgICAnYm9vbGVhbicsICAvLyBoYXNXZWlnaHRzXG4gICAgJ251bWJlcicsICAgLy8gd2VpZ2h0c0lkXG4gICAgJ251bWJlcicsICAgLy8gd2VpZ2h0c0RUeXBlXG4gICAgJ2Jvb2xlYW4nLCAgLy8gYmluYXJ5T3V0cHV0XG4gICAgJ251bWJlcicsICAgLy8gb3V0SWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGRlbnNlQmluY291bnQoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgaW5wdXRzOiBEZW5zZUJpbmNvdW50SW5wdXRzLFxuICBhdHRyczogRGVuc2VCaW5jb3VudEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCB3ZWlnaHRzfSA9IGlucHV0cztcbiAgY29uc3Qge3NpemUsIGJpbmFyeU91dHB1dH0gPSBhdHRycztcblxuICBjb25zdCBoYXNXZWlnaHRzID0gd2VpZ2h0cy5zaGFwZS5yZWR1Y2UoKHAsIHYpID0+IHAgKiB2LCAxKSAhPT0gMDtcbiAgY29uc3Qgb3V0U2hhcGUgPSB4LnNoYXBlLmxlbmd0aCA9PT0gMSA/IFtzaXplXSA6IFt4LnNoYXBlWzBdLCBzaXplXTtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCB3ZWlnaHRzLmR0eXBlKTtcblxuICBmdW5jdGlvbiB0ZW5zb3JJZCh4OiBUZW5zb3JJbmZvKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIH1cbiAgd2FzbURlbnNlQmluY291bnQoXG4gICAgICB0ZW5zb3JJZCh4KSwgbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoeC5zaGFwZSkuYnVmZmVyKSxcbiAgICAgIHguc2hhcGUubGVuZ3RoLCBzaXplLCBoYXNXZWlnaHRzLCB0ZW5zb3JJZCh3ZWlnaHRzKSxcbiAgICAgIENwcERUeXBlW3dlaWdodHMuZHR5cGVdLCBiaW5hcnlPdXRwdXQsIHRlbnNvcklkKG91dCkpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBkZW5zZUJpbmNvdW50Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERlbnNlQmluY291bnQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGRlbnNlQmluY291bnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DepthToSpace, util } from '@tensorflow/tfjs-core';\nlet wasmDepthToSpace;\nfunction setup(backend) {\n wasmDepthToSpace = backend.wasm.cwrap(DepthToSpace, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'array',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nexport function depthToSpace(args) {\n const { backend, inputs, attrs } = args;\n const { x } = inputs;\n const { blockSize, dataFormat } = attrs;\n const batchSize = x.shape[0];\n const inputHeight = (dataFormat === 'NHWC') ? x.shape[1] : x.shape[2];\n const inputWidth = (dataFormat === 'NHWC') ? x.shape[2] : x.shape[3];\n const inputDepth = (dataFormat === 'NHWC') ? x.shape[3] : x.shape[1];\n const outputHeight = inputHeight * blockSize;\n const outputWidth = inputWidth * blockSize;\n const outputDepth = inputDepth / (blockSize * blockSize);\n const outputShape = (dataFormat === 'NHWC') ?\n [batchSize, outputHeight, outputWidth, outputDepth] :\n [batchSize, outputDepth, outputHeight, outputWidth];\n const out = backend.makeOutput(outputShape, 'float32');\n const xData = backend.dataIdMap.get(x.dataId);\n const xId = xData.id;\n const xStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(x.shape)).buffer);\n const outputShapeBytes = new Uint8Array(new Int32Array(outputShape).buffer);\n const outStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(outputShape)).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const channelsLast = dataFormat === 'NHWC' ? 1 : 0;\n wasmDepthToSpace(xId, blockSize, channelsLast, xStridesBytes, x.shape.length - 1, outputShapeBytes, outStridesBytes, outputShape.length, outId);\n return out;\n}\nexport const depthToSpaceConfig = {\n kernelName: DepthToSpace,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: depthToSpace\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGhUb1NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRGVwdGhUb1NwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQStFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXRJLElBQUksZ0JBR3VDLENBQUM7QUFFNUMsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixPQUFPO1FBQ1AsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRLEVBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckUsTUFBTSxZQUFZLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUM3QyxNQUFNLFdBQVcsR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUV6RCxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXhELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sYUFBYSxHQUNmLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxNQUFNLGVBQWUsR0FDakIsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsTUFBTSxZQUFZLEdBQUcsVUFBVSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsZ0JBQWdCLENBQ1osR0FBRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDL0QsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbEUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RlcHRoVG9TcGFjZSwgRGVwdGhUb1NwYWNlQXR0cnMsIERlcHRoVG9TcGFjZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbURlcHRoVG9TcGFjZTogKFxuICAgIHhJZDogbnVtYmVyLCBibG9ja1NpemU6IG51bWJlciwgY2hhbm5lbHNMYXN0OiBudW1iZXIsIHhTdHJpZGVzOiBVaW50OEFycmF5LFxuICAgIHhTdHJpZGVzTGVuZ3RoOiBudW1iZXIsIG91dHB1dFNoYXBlOiBVaW50OEFycmF5LCBvdXRwdXRTdHJpZGVzOiBVaW50OEFycmF5LFxuICAgIG91dFNpemU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbURlcHRoVG9TcGFjZSA9IGJhY2tlbmQud2FzbS5jd3JhcChEZXB0aFRvU3BhY2UsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gYmxvY2tTaXplXG4gICAgJ251bWJlcicsICAvLyBjaGFubmVsc0xhc3RcbiAgICAnYXJyYXknLCAgIC8vIHhTdHJpZGVzXG4gICAgJ251bWJlcicsICAvLyB4U3RyaWRlc0xlbmd0aFxuICAgICdhcnJheScsICAgLy8gb3V0cHV0U2hhcGVcbiAgICAnYXJyYXknLCAgIC8vIG91dHB1dFN0cmlkZXNcbiAgICAnbnVtYmVyJywgIC8vIG91dFNpemVcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGhUb1NwYWNlKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogRGVwdGhUb1NwYWNlSW5wdXRzLFxuICBhdHRyczogRGVwdGhUb1NwYWNlQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmxvY2tTaXplLCBkYXRhRm9ybWF0fSA9IGF0dHJzO1xuXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHguc2hhcGVbMF07XG4gIGNvbnN0IGlucHV0SGVpZ2h0ID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgPyB4LnNoYXBlWzFdIDogeC5zaGFwZVsyXTtcbiAgY29uc3QgaW5wdXRXaWR0aCA9IChkYXRhRm9ybWF0ID09PSAnTkhXQycpID8geC5zaGFwZVsyXSA6IHguc2hhcGVbM107XG4gIGNvbnN0IGlucHV0RGVwdGggPSAoZGF0YUZvcm1hdCA9PT0gJ05IV0MnKSA/IHguc2hhcGVbM10gOiB4LnNoYXBlWzFdO1xuXG4gIGNvbnN0IG91dHB1dEhlaWdodCA9IGlucHV0SGVpZ2h0ICogYmxvY2tTaXplO1xuICBjb25zdCBvdXRwdXRXaWR0aCA9IGlucHV0V2lkdGggKiBibG9ja1NpemU7XG4gIGNvbnN0IG91dHB1dERlcHRoID0gaW5wdXREZXB0aCAvIChibG9ja1NpemUgKiBibG9ja1NpemUpO1xuXG4gIGNvbnN0IG91dHB1dFNoYXBlID0gKGRhdGFGb3JtYXQgPT09ICdOSFdDJykgP1xuICAgICAgW2JhdGNoU2l6ZSwgb3V0cHV0SGVpZ2h0LCBvdXRwdXRXaWR0aCwgb3V0cHV0RGVwdGhdIDpcbiAgICAgIFtiYXRjaFNpemUsIG91dHB1dERlcHRoLCBvdXRwdXRIZWlnaHQsIG91dHB1dFdpZHRoXTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0cHV0U2hhcGUsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpO1xuICBjb25zdCB4SWQgPSB4RGF0YS5pZDtcbiAgY29uc3QgeFN0cmlkZXNCeXRlcyA9XG4gICAgICBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSh1dGlsLmNvbXB1dGVTdHJpZGVzKHguc2hhcGUpKS5idWZmZXIpO1xuXG4gIGNvbnN0IG91dHB1dFNoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShvdXRwdXRTaGFwZSkuYnVmZmVyKTtcbiAgY29uc3Qgb3V0U3RyaWRlc0J5dGVzID1cbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0cHV0U2hhcGUpKS5idWZmZXIpO1xuXG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICBjb25zdCBjaGFubmVsc0xhc3QgPSBkYXRhRm9ybWF0ID09PSAnTkhXQycgPyAxIDogMDtcbiAgd2FzbURlcHRoVG9TcGFjZShcbiAgICAgIHhJZCwgYmxvY2tTaXplLCBjaGFubmVsc0xhc3QsIHhTdHJpZGVzQnl0ZXMsIHguc2hhcGUubGVuZ3RoIC0gMSxcbiAgICAgIG91dHB1dFNoYXBlQnl0ZXMsIG91dFN0cmlkZXNCeXRlcywgb3V0cHV0U2hhcGUubGVuZ3RoLCBvdXRJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRoVG9TcGFjZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEZXB0aFRvU3BhY2UsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGRlcHRoVG9TcGFjZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNative } from '@tensorflow/tfjs-core';\nlet wasmDepthwiseConv2d;\nfunction setup(backend) {\n wasmDepthwiseConv2d =\n backend.wasm.cwrap(DepthwiseConv2dNative, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction depthwiseConv2d(args) {\n const { inputs, attrs, backend } = args;\n const { x, filter } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const filterId = backend.dataIdMap.get(filter.dataId).id;\n const { strides, dilations, pad, dimRoundingMode } = attrs;\n const $dilations = dilations == null ? [1, 1] : dilations;\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad, dimRoundingMode, true /* depthwise */);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const inputChannels = convInfo.inChannels;\n const outputChannels = convInfo.outChannels;\n const isSamePad = convInfo.padInfo.type === 'SAME' ? 1 : 0;\n if (convInfo.dataFormat !== 'channelsLast') {\n throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'` +\n `${convInfo.dataFormat}'. Please use 'channelsLast'.`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmDepthwiseConv2d(xId, x.shape[0], x.shape[1], x.shape[2], filterId, filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId);\n return out;\n}\nexport const depthwiseConv2dNativeConfig = {\n kernelName: DepthwiseConv2dNative,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: depthwiseConv2d\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRGVwdGh3aXNlQ29udjJkTmF0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUscUJBQXFCLEVBQThGLE1BQU0sdUJBQXVCLENBQUM7QUFJdkssSUFBSSxtQkFNc0IsQ0FBQztBQUUzQixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxtQkFBbUI7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pELFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsRUFBRyxRQUFRO1NBQ3BCLENBQUMsQ0FBQztBQUNULENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUl4QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUV0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFekQsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV6RCxNQUFNLFVBQVUsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRTFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDMUMsQ0FBYyxDQUFDLEtBQUssRUFBRyxNQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQ3pELFVBQXdDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTFCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN0QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDN0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNELElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxjQUFjLEVBQUU7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FDWCxrRUFBa0U7WUFDbEUsR0FBRyxRQUFRLENBQUMsVUFBVSwrQkFBK0IsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsbUJBQW1CLENBQ2YsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQy9ELFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUM1RCxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUN2RSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQWlCO0lBQ3ZELFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLGVBQXdDO0NBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEZXB0aHdpc2VDb252MmROYXRpdmUsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUF0dHJzLCBEZXB0aHdpc2VDb252MmROYXRpdmVJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yNER9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtRGVwdGh3aXNlQ29udjJkOiAoXG4gICAgeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBpbnB1dEhlaWdodDogbnVtYmVyLCBpbnB1dFdpZHRoOiBudW1iZXIsXG4gICAgZmlsdGVySWQ6IG51bWJlciwgZmlsdGVySGVpZ2h0OiBudW1iZXIsIGZpbHRlcldpZHRoOiBudW1iZXIsIHBhZFRvcDogbnVtYmVyLFxuICAgIHBhZFJpZ2h0OiBudW1iZXIsIHBhZEJvdHRvbTogbnVtYmVyLCBwYWRMZWZ0OiBudW1iZXIsIGlzU2FtZVBhZDogbnVtYmVyLFxuICAgIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsIGRpbGF0aW9uV2lkdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gICAgc3RyaWRlV2lkdGg6IG51bWJlciwgaW5wdXRDaGFubmVsczogbnVtYmVyLCBvdXRwdXRDaGFubmVsczogbnVtYmVyLFxuICAgIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21EZXB0aHdpc2VDb252MmQgPVxuICAgICAgYmFja2VuZC53YXNtLmN3cmFwKERlcHRod2lzZUNvbnYyZE5hdGl2ZSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgICAgICdudW1iZXInLCAgLy8geElkXG4gICAgICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgICAgICdudW1iZXInLCAgLy8gaW5wdXRIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBpbnB1dFdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySWRcbiAgICAgICAgJ251bWJlcicsICAvLyBmaWx0ZXJIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBmaWx0ZXJXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZFJpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gcGFkQm90dG9tXG4gICAgICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICAgICAgICAnbnVtYmVyJywgIC8vIGlzU2FtZVBhZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uSGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gaW5wdXRDaGFubmVsc1xuICAgICAgICAnbnVtYmVyJywgIC8vIG91dHB1dENoYW5uZWxzXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgICAgIF0pO1xufVxuXG5mdW5jdGlvbiBkZXB0aHdpc2VDb252MmQoYXJnczoge1xuICBpbnB1dHM6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUlucHV0cyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGF0dHJzOiBEZXB0aHdpc2VDb252MmROYXRpdmVBdHRyc1xufSkge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuXG4gIGNvbnN0IHt4LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChmaWx0ZXIuZGF0YUlkKS5pZDtcblxuICBjb25zdCB7c3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZX0gPSBhdHRycztcblxuICBjb25zdCAkZGlsYXRpb25zID0gZGlsYXRpb25zID09IG51bGwgPyBbMSwgMV0gOiBkaWxhdGlvbnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICAoeCBhcyBUZW5zb3I0RCkuc2hhcGUsIChmaWx0ZXIgYXMgVGVuc29yNEQpLnNoYXBlLCBzdHJpZGVzLFxuICAgICAgKCRkaWxhdGlvbnMgYXMgbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSksIHBhZCwgZGltUm91bmRpbmdNb2RlLFxuICAgICAgdHJ1ZSAvKiBkZXB0aHdpc2UgKi8pO1xuXG4gIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IHBhZFJpZ2h0ID0gY29udkluZm8ucGFkSW5mby5yaWdodDtcbiAgY29uc3QgcGFkQm90dG9tID0gY29udkluZm8ucGFkSW5mby5ib3R0b207XG4gIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGlucHV0Q2hhbm5lbHMgPSBjb252SW5mby5pbkNoYW5uZWxzO1xuICBjb25zdCBvdXRwdXRDaGFubmVscyA9IGNvbnZJbmZvLm91dENoYW5uZWxzO1xuICBjb25zdCBpc1NhbWVQYWQgPSBjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdTQU1FJyA/IDEgOiAwO1xuXG4gIGlmIChjb252SW5mby5kYXRhRm9ybWF0ICE9PSAnY2hhbm5lbHNMYXN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHdhc20gYmFja2VuZCBEZXB0aHdpc2VDb252MmROYXRpdmUgZG9lcyBub3Qgc3VwcG9ydCBkYXRhRm9ybWF0OidgICtcbiAgICAgICAgYCR7Y29udkluZm8uZGF0YUZvcm1hdH0nLiBQbGVhc2UgdXNlICdjaGFubmVsc0xhc3QnLmApO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLm91dFNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgd2FzbURlcHRod2lzZUNvbnYyZChcbiAgICAgIHhJZCwgeC5zaGFwZVswXSwgeC5zaGFwZVsxXSwgeC5zaGFwZVsyXSwgZmlsdGVySWQsIGZpbHRlckhlaWdodCxcbiAgICAgIGZpbHRlcldpZHRoLCBwYWRUb3AsIHBhZFJpZ2h0LCBwYWRCb3R0b20sIHBhZExlZnQsIGlzU2FtZVBhZCxcbiAgICAgIGRpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoLCBpbnB1dENoYW5uZWxzLFxuICAgICAgb3V0cHV0Q2hhbm5lbHMsIG91dElkKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGRlcHRod2lzZUNvbnYyZE5hdGl2ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEZXB0aHdpc2VDb252MmROYXRpdmUsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGRlcHRod2lzZUNvbnYyZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Diag, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmDiag;\nfunction setup(backend) {\n wasmDiag = backend.wasm.cwrap('Diag', null, [\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nexport function diag(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n const xSize = util.sizeFromShape(x.shape);\n const out = backend.makeOutput([...x.shape, ...x.shape], x.dtype);\n wasmDiag(backend.dataIdMap.get(x.dataId).id, CppDType[x.dtype], xSize, backend.dataIdMap.get(out.dataId).id);\n return out;\n}\nexport const diagConfig = {\n kernelName: Diag,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: diag\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0RpYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLElBQUksRUFBb0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbkcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLFFBQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFO1FBQzFDLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQWdEO0lBRW5FLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEUsUUFBUSxDQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQzVELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RpYWcsIERpYWdJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtRGlhZzogKHhJZDogbnVtYmVyLCB4RFR5cGU6IENwcERUeXBlLCB4U2l6ZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PlxuICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21EaWFnID0gYmFja2VuZC53YXNtLmN3cmFwKCdEaWFnJywgbnVsbCwgW1xuICAgICdudW1iZXInLCAgLy8geElkXG4gICAgJ251bWJlcicsICAvLyB4RFR5cGUsXG4gICAgJ251bWJlcicsICAvLyB4U2l6ZSxcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlhZyhhcmdzOiB7aW5wdXRzOiBEaWFnSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKTtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFsuLi54LnNoYXBlLCAuLi54LnNoYXBlXSwgeC5kdHlwZSk7XG5cbiAgd2FzbURpYWcoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkLCBDcHBEVHlwZVt4LmR0eXBlXSwgeFNpemUsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgZGlhZ0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEaWFnLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBkaWFnIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2D } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmDilation2D;\nfunction setup(backend) {\n wasmDilation2D = backend.wasm.cwrap(Dilation2D, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function dilation2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n if (x.dtype !== filter.dtype) {\n throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${x.dtype} and ${filter.dtype}`);\n }\n const dilationInfo = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, \n /*dataFormat=*/ 'NHWC', dilations);\n const out = backend.makeOutput(dilationInfo.outShape, x.dtype);\n wasmDilation2D(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(out.dataId).id, CppDType[x.dtype], dilationInfo.batchSize, \n /*depth=*/ dilationInfo.inChannels, dilationInfo.inHeight, dilationInfo.inWidth, dilationInfo.outHeight, dilationInfo.outWidth, dilationInfo.strideHeight, dilationInfo.strideWidth, dilationInfo.dilationHeight, dilationInfo.dilationWidth, dilationInfo.filterHeight, dilationInfo.filterWidth, dilationInfo.padInfo.top, dilationInfo.padInfo.left);\n return out;\n}\nexport const dilation2DConfig = {\n kernelName: Dilation2D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: dilation2D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yRC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0RpbGF0aW9uMkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQTBFLE1BQU0sdUJBQXVCLENBQUM7QUFHeEksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLGNBSzZELENBQUM7QUFFbEUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUU7UUFDcEQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsVUFBVTtLQUN0QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUkxQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDWCwrREFDSSxDQUFDLENBQUMsS0FBSyxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUNuRCxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQWlDLEVBQUUsT0FBTyxFQUFFLEdBQUc7SUFDdEQsZUFBZSxDQUFBLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV0QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9ELGNBQWMsQ0FDVixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNwQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNqQixZQUFZLENBQUMsU0FBUztJQUN0QixVQUFVLENBQUEsWUFBWSxDQUFDLFVBQVUsRUFDakMsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLE9BQU8sRUFDcEIsWUFBWSxDQUFDLFNBQVMsRUFDdEIsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLGNBQWMsRUFDM0IsWUFBWSxDQUFDLGFBQWEsRUFDMUIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1QixDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxVQUFtQztDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGlsYXRpb24yRCwgRGlsYXRpb24yREF0dHJzLCBEaWxhdGlvbjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21EaWxhdGlvbjJEOiAoXG4gICAgeElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIG91dElkOiBudW1iZXIsIGR0eXBlOiBudW1iZXIsIGJhdGNoOiBudW1iZXIsXG4gICAgZGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBvdXRIZWlnaHQ6IG51bWJlcixcbiAgICBvdXRXaWR0aDogbnVtYmVyLCBzdHJpZGVIZWlnaHQ6IG51bWJlciwgc3RyaWRlV2lkdGg6IG51bWJlcixcbiAgICBkaWxhdGlvbkhlaWdodDogbnVtYmVyLCBkaWxhdGlvbldpZHRoOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLFxuICAgIGZpbHRlcldpZHRoOiBudW1iZXIsIHBhZFRvcDogbnVtYmVyLCBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21EaWxhdGlvbjJEID0gYmFja2VuZC53YXNtLmN3cmFwKERpbGF0aW9uMkQsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVySWRcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hcbiAgICAnbnVtYmVyJywgIC8vIGRlcHRoXG4gICAgJ251bWJlcicsICAvLyBpbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gaW5XaWR0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVXaWR0aFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlckhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpbGF0aW9uMkQoYXJnczoge1xuICBpbnB1dHM6IERpbGF0aW9uMkRJbnB1dHMsXG4gIGF0dHJzOiBEaWxhdGlvbjJEQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZmlsdGVyfSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGlsYXRpb25zfSA9IGF0dHJzO1xuXG4gIGlmICh4LmR0eXBlICE9PSBmaWx0ZXIuZHR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEaWxhdGlvbjJEIGVycm9yOiB4IG11c3QgaGF2ZSB0aGUgc2FtZSBkdHlwZSBhcyBmaWx0ZXIuIEdvdCAke1xuICAgICAgICAgICAgeC5kdHlwZX0gYW5kICR7ZmlsdGVyLmR0eXBlfWApO1xuICB9XG5cbiAgY29uc3QgZGlsYXRpb25JbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVEaWxhdGlvbjJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzdHJpZGVzLCBwYWQsXG4gICAgICAvKmRhdGFGb3JtYXQ9Ki8nTkhXQycsIGRpbGF0aW9ucyk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGRpbGF0aW9uSW5mby5vdXRTaGFwZSwgeC5kdHlwZSk7XG5cbiAgd2FzbURpbGF0aW9uMkQoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGZpbHRlci5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkLFxuICAgICAgQ3BwRFR5cGVbeC5kdHlwZV0sXG4gICAgICBkaWxhdGlvbkluZm8uYmF0Y2hTaXplLFxuICAgICAgLypkZXB0aD0qL2RpbGF0aW9uSW5mby5pbkNoYW5uZWxzLFxuICAgICAgZGlsYXRpb25JbmZvLmluSGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLmluV2lkdGgsXG4gICAgICBkaWxhdGlvbkluZm8ub3V0SGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLm91dFdpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbldpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLmZpbHRlckhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5maWx0ZXJXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLnRvcCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBkaWxhdGlvbjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERpbGF0aW9uMkQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGRpbGF0aW9uMkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2DBackpropFilter } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmDilation2DBackpropFilter;\nfunction setup(backend) {\n wasmDilation2DBackpropFilter =\n backend.wasm.cwrap(Dilation2DBackpropFilter, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function dilation2DBackpropFilter(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, dy } = inputs;\n const { strides, pad, dilations } = attrs;\n if (x.dtype !== filter.dtype || x.dtype !== dy.dtype) {\n throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${x.dtype}, ${filter.dtype}, and ${dy.dtype}`);\n }\n const dilationInfo = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, \n /*dataFormat=*/ 'NHWC', dilations);\n const gradients = backend.makeOutput(filter.shape, filter.dtype);\n wasmDilation2DBackpropFilter(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(gradients.dataId).id, CppDType[x.dtype], dilationInfo.batchSize, \n /*depth=*/ dilationInfo.inChannels, dilationInfo.inHeight, dilationInfo.inWidth, dilationInfo.outHeight, dilationInfo.outWidth, dilationInfo.strideHeight, dilationInfo.strideWidth, dilationInfo.dilationHeight, dilationInfo.dilationWidth, dilationInfo.filterHeight, dilationInfo.filterWidth, dilationInfo.padInfo.top, dilationInfo.padInfo.left);\n return gradients;\n}\nexport const dilation2DBackpropFilterConfig = {\n kernelName: Dilation2DBackpropFilter,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: dilation2DBackpropFilter\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yREJhY2twcm9wRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRGlsYXRpb24yREJhY2twcm9wRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQW1CLHdCQUF3QixFQUEyRCxNQUFNLHVCQUF1QixDQUFDO0FBSXhKLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFakMsSUFBSSw0QkFNd0IsQ0FBQztBQUU3QixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyw0QkFBNEI7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1lBQ2pELFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsRUFBRyxVQUFVO1NBQ3RCLENBQUMsQ0FBQztBQUNULENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsSUFJeEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV4QyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUU7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FDWCxvRkFDSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDdEQ7SUFFRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQ25ELENBQUMsQ0FBQyxLQUF5QyxFQUMzQyxNQUFNLENBQUMsS0FBaUMsRUFBRSxPQUFPLEVBQUUsR0FBRztJQUN0RCxlQUFlLENBQUEsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsNEJBQTRCLENBQ3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ2xDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQzFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ2pCLFlBQVksQ0FBQyxTQUFTO0lBQ3RCLFVBQVUsQ0FBQSxZQUFZLENBQUMsVUFBVSxFQUNqQyxZQUFZLENBQUMsUUFBUSxFQUNyQixZQUFZLENBQUMsT0FBTyxFQUNwQixZQUFZLENBQUMsU0FBUyxFQUN0QixZQUFZLENBQUMsUUFBUSxFQUNyQixZQUFZLENBQUMsWUFBWSxFQUN6QixZQUFZLENBQUMsV0FBVyxFQUN4QixZQUFZLENBQUMsY0FBYyxFQUMzQixZQUFZLENBQUMsYUFBYSxFQUMxQixZQUFZLENBQUMsWUFBWSxFQUN6QixZQUFZLENBQUMsV0FBVyxFQUN4QixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQzVCLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQWlCO0lBQzFELFVBQVUsRUFBRSx3QkFBd0I7SUFDcEMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLHdCQUFpRDtDQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGlsYXRpb24yREF0dHJzLCBEaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXIsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yM0QsIFRlbnNvcjRELCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21EaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXI6IChcbiAgICB4SWQ6IG51bWJlciwgZmlsdGVySWQ6IG51bWJlciwgZHlJZDogbnVtYmVyLCBncmFkSWQ6IG51bWJlciwgZHR5cGU6IG51bWJlcixcbiAgICBiYXRjaDogbnVtYmVyLCBkZXB0aDogbnVtYmVyLCBpbkhlaWdodDogbnVtYmVyLCBpbldpZHRoOiBudW1iZXIsXG4gICAgb3V0SGVpZ2h0OiBudW1iZXIsIG91dFdpZHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLFxuICAgIHN0cmlkZVdpZHRoOiBudW1iZXIsIGRpbGF0aW9uSGVpZ2h0OiBudW1iZXIsIGRpbGF0aW9uV2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsXG4gICAgcGFkTGVmdDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtRGlsYXRpb24yREJhY2twcm9wRmlsdGVyID1cbiAgICAgIGJhY2tlbmQud2FzbS5jd3JhcChEaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXIsIG51bGwsIFtcbiAgICAgICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBmaWx0ZXJJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBncmFkSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGJhdGNoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGVwdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBpbkhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIGluV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gICAgICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpbGF0aW9uMkRCYWNrcHJvcEZpbHRlcihhcmdzOiB7XG4gIGlucHV0czoge3g6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjNELCBkeTogVGVuc29yNER9LFxuICBhdHRyczogRGlsYXRpb24yREF0dHJzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlciwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9ID0gYXR0cnM7XG5cbiAgaWYgKHguZHR5cGUgIT09IGZpbHRlci5kdHlwZSB8fCB4LmR0eXBlICE9PSBkeS5kdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERpbGF0aW9uMkRCYWNrcHJvcEZpbHRlciBlcnJvcjogeCBtdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgZmlsdGVyIGFuZCBkeS4gR290ICR7XG4gICAgICAgICAgICB4LmR0eXBlfSwgJHtmaWx0ZXIuZHR5cGV9LCBhbmQgJHtkeS5kdHlwZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGRpbGF0aW9uSW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlRGlsYXRpb24yREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcywgcGFkLFxuICAgICAgLypkYXRhRm9ybWF0PSovJ05IV0MnLCBkaWxhdGlvbnMpO1xuXG4gIGNvbnN0IGdyYWRpZW50cyA9IGJhY2tlbmQubWFrZU91dHB1dChmaWx0ZXIuc2hhcGUsIGZpbHRlci5kdHlwZSk7XG5cbiAgd2FzbURpbGF0aW9uMkRCYWNrcHJvcEZpbHRlcihcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZmlsdGVyLmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHkuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChncmFkaWVudHMuZGF0YUlkKS5pZCxcbiAgICAgIENwcERUeXBlW3guZHR5cGVdLFxuICAgICAgZGlsYXRpb25JbmZvLmJhdGNoU2l6ZSxcbiAgICAgIC8qZGVwdGg9Ki9kaWxhdGlvbkluZm8uaW5DaGFubmVscyxcbiAgICAgIGRpbGF0aW9uSW5mby5pbkhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5pbldpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLm91dEhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5vdXRXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5zdHJpZGVIZWlnaHQsXG4gICAgICBkaWxhdGlvbkluZm8uc3RyaWRlV2lkdGgsXG4gICAgICBkaWxhdGlvbkluZm8uZGlsYXRpb25IZWlnaHQsXG4gICAgICBkaWxhdGlvbkluZm8uZGlsYXRpb25XaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5maWx0ZXJIZWlnaHQsXG4gICAgICBkaWxhdGlvbkluZm8uZmlsdGVyV2lkdGgsXG4gICAgICBkaWxhdGlvbkluZm8ucGFkSW5mby50b3AsXG4gICAgICBkaWxhdGlvbkluZm8ucGFkSW5mby5sZWZ0LFxuICApO1xuICByZXR1cm4gZ3JhZGllbnRzO1xufVxuXG5leHBvcnQgY29uc3QgZGlsYXRpb24yREJhY2twcm9wRmlsdGVyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERpbGF0aW9uMkRCYWNrcHJvcEZpbHRlcixcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogZGlsYXRpb24yREJhY2twcm9wRmlsdGVyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2DBackpropInput } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmDilation2DBackpropInput;\nfunction setup(backend) {\n wasmDilation2DBackpropInput =\n backend.wasm.cwrap(Dilation2DBackpropInput, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function dilation2DBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, dy } = inputs;\n const { strides, pad, dilations } = attrs;\n if (x.dtype !== filter.dtype || x.dtype !== dy.dtype) {\n throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${x.dtype}, ${filter.dtype}, and ${dy.dtype}`);\n }\n const dilationInfo = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, \n /*dataFormat=*/ 'NHWC', dilations);\n const gradients = backend.makeOutput(x.shape, x.dtype);\n wasmDilation2DBackpropInput(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(gradients.dataId).id, CppDType[x.dtype], dilationInfo.batchSize, \n /*depth=*/ dilationInfo.inChannels, dilationInfo.inHeight, dilationInfo.inWidth, dilationInfo.outHeight, dilationInfo.outWidth, dilationInfo.strideHeight, dilationInfo.strideWidth, dilationInfo.dilationHeight, dilationInfo.dilationWidth, dilationInfo.filterHeight, dilationInfo.filterWidth, dilationInfo.padInfo.top, dilationInfo.padInfo.left);\n return gradients;\n}\nexport const dilation2DBackpropInputConfig = {\n kernelName: Dilation2DBackpropInput,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: dilation2DBackpropInput\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yREJhY2twcm9wSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9EaWxhdGlvbjJEQmFja3Byb3BJbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFtQix1QkFBdUIsRUFBMkQsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksMkJBTXdCLENBQUM7QUFFN0IsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsMkJBQTJCO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLElBQUksRUFBRTtZQUNoRCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLEVBQUcsVUFBVTtTQUN0QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBSXZDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUZBQ0ksQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUNuRCxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQWlDLEVBQUUsT0FBTyxFQUFFLEdBQUc7SUFDdEQsZUFBZSxDQUFBLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV0QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELDJCQUEyQixDQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNqQixZQUFZLENBQUMsU0FBUztJQUN0QixVQUFVLENBQUEsWUFBWSxDQUFDLFVBQVUsRUFDakMsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLE9BQU8sRUFDcEIsWUFBWSxDQUFDLFNBQVMsRUFDdEIsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLGNBQWMsRUFDM0IsWUFBWSxDQUFDLGFBQWEsRUFDMUIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1QixDQUFDO0lBQ0YsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFpQjtJQUN6RCxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSx1QkFBZ0Q7Q0FDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERpbGF0aW9uMkRBdHRycywgRGlsYXRpb24yREJhY2twcm9wSW5wdXQsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yM0QsIFRlbnNvcjRELCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21EaWxhdGlvbjJEQmFja3Byb3BJbnB1dDogKFxuICAgIHhJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGdyYWRJZDogbnVtYmVyLCBkdHlwZTogbnVtYmVyLFxuICAgIGJhdGNoOiBudW1iZXIsIGRlcHRoOiBudW1iZXIsIGluSGVpZ2h0OiBudW1iZXIsIGluV2lkdGg6IG51bWJlcixcbiAgICBvdXRIZWlnaHQ6IG51bWJlciwgb3V0V2lkdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gICAgc3RyaWRlV2lkdGg6IG51bWJlciwgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLFxuICAgIGZpbHRlckhlaWdodDogbnVtYmVyLCBmaWx0ZXJXaWR0aDogbnVtYmVyLCBwYWRUb3A6IG51bWJlcixcbiAgICBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21EaWxhdGlvbjJEQmFja3Byb3BJbnB1dCA9XG4gICAgICBiYWNrZW5kLndhc20uY3dyYXAoRGlsYXRpb24yREJhY2twcm9wSW5wdXQsIG51bGwsIFtcbiAgICAgICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBmaWx0ZXJJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBncmFkSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGJhdGNoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGVwdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBpbkhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIGluV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gICAgICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpbGF0aW9uMkRCYWNrcHJvcElucHV0KGFyZ3M6IHtcbiAgaW5wdXRzOiB7eDogVGVuc29yNEQsIGZpbHRlcjogVGVuc29yM0QsIGR5OiBUZW5zb3I0RH0sXG4gIGF0dHJzOiBEaWxhdGlvbjJEQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZmlsdGVyLCBkeX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRpbGF0aW9uc30gPSBhdHRycztcblxuICBpZiAoeC5kdHlwZSAhPT0gZmlsdGVyLmR0eXBlIHx8IHguZHR5cGUgIT09IGR5LmR0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGlsYXRpb24yREJhY2twcm9wSW5wdXQgZXJyb3I6IHggbXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzIGZpbHRlciBhbmQgZHkuIEdvdCAke1xuICAgICAgICAgICAgeC5kdHlwZX0sICR7ZmlsdGVyLmR0eXBlfSwgYW5kICR7ZHkuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBkaWxhdGlvbkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZURpbGF0aW9uMkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsIHBhZCxcbiAgICAgIC8qZGF0YUZvcm1hdD0qLydOSFdDJywgZGlsYXRpb25zKTtcblxuICBjb25zdCBncmFkaWVudHMgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSk7XG5cbiAgd2FzbURpbGF0aW9uMkRCYWNrcHJvcElucHV0KFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChmaWx0ZXIuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChkeS5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGdyYWRpZW50cy5kYXRhSWQpLmlkLFxuICAgICAgQ3BwRFR5cGVbeC5kdHlwZV0sXG4gICAgICBkaWxhdGlvbkluZm8uYmF0Y2hTaXplLFxuICAgICAgLypkZXB0aD0qL2RpbGF0aW9uSW5mby5pbkNoYW5uZWxzLFxuICAgICAgZGlsYXRpb25JbmZvLmluSGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLmluV2lkdGgsXG4gICAgICBkaWxhdGlvbkluZm8ub3V0SGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLm91dFdpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbldpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLmZpbHRlckhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5maWx0ZXJXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLnRvcCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBncmFkaWVudHM7XG59XG5cbmV4cG9ydCBjb25zdCBkaWxhdGlvbjJEQmFja3Byb3BJbnB1dENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEaWxhdGlvbjJEQmFja3Byb3BJbnB1dCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogZGlsYXRpb24yREJhY2twcm9wSW5wdXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Elu } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const eluConfig = createUnaryKernelConfig(Elu);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtFbHUsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgZWx1Q29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhFbHUpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { EluGrad } from '@tensorflow/tfjs-core';\nlet wasmEluGrad;\nfunction setup(backend) {\n wasmEluGrad = backend.wasm.cwrap(EluGrad, null, [\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nexport function eluGrad(args) {\n const { inputs, backend } = args;\n const { dy, y } = inputs;\n const out = backend.makeOutput(y.shape, 'float32');\n const tensorId = (x) => {\n return backend.dataIdMap.get(x.dataId).id;\n };\n wasmEluGrad(tensorId(y), tensorId(dy), tensorId(out));\n return out;\n}\nexport const eluGradConfig = {\n kernelName: EluGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: eluGrad,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1R3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0VsdUdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBc0QsTUFBTSx1QkFBdUIsQ0FBQztBQUluRyxJQUFJLFdBQStELENBQUM7QUFFcEUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDOUMsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFtRDtJQUV6RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRTtRQUNqQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFHLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFbHVHcmFkLCBFbHVHcmFkSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtRWx1R3JhZDogKHlJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21FbHVHcmFkID0gYmFja2VuZC53YXNtLmN3cmFwKEVsdUdyYWQsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHlJZFxuICAgICdudW1iZXInLCAgLy8gZHlJZCxcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWx1R3JhZChhcmdzOiB7aW5wdXRzOiBFbHVHcmFkSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtkeSwgeX0gPSBpbnB1dHM7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHkuc2hhcGUsICdmbG9hdDMyJyk7XG4gIGNvbnN0IHRlbnNvcklkID0gKHg6IFRlbnNvckluZm8pID0+IHtcbiAgICByZXR1cm4gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCE7XG4gIH07XG4gIHdhc21FbHVHcmFkKHRlbnNvcklkKHkpLCB0ZW5zb3JJZChkeSksIHRlbnNvcklkKG91dCkpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgZWx1R3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFbHVHcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBlbHVHcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Equal } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const equalConfig = createBinaryKernelConfig(Equal, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9FcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekQsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQix3QkFBd0IsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0VxdWFsLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuXG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBlcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoRXF1YWwsIHN1cHBvcnRzRnVsbEJyb2FkY2FzdCwgJ2Jvb2wnKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Erf } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const erfConfig = createUnaryKernelConfig(Erf);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRXJmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0VyZiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBlcmZDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKEVyZik7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Exp } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const expConfig = createUnaryKernelConfig(Exp, 'float32');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvRXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7RXhwLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlVW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vdW5hcnlfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGV4cENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoRXhwLCAnZmxvYXQzMicpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ExpandDims, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nexport function expandDims(args) {\n const { inputs, attrs, backend } = args;\n const { input } = inputs;\n const { dim } = attrs;\n const inputRank = input.shape.length;\n const newShape = input.shape.slice();\n let $dim = dim;\n if (dim < 0) {\n // Negative value is counted from the tail of rank.\n util.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`);\n $dim = inputRank + dim + 1;\n }\n newShape.splice($dim, 0, 1);\n return reshape({ inputs: { x: input }, backend, attrs: { shape: newShape } });\n}\nexport const expandDimsConfig = {\n kernelName: ExpandDims,\n backendName: 'wasm',\n kernelFunc: expandDims,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kRGltcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0V4cGFuZERpbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBK0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHcEgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBSTFCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLEdBQUcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVwQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNYLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUNQLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUN2QixHQUFHLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FDcEQsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDNUI7SUFDRCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUIsT0FBTyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsVUFBbUM7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtFeHBhbmREaW1zLCBFeHBhbmREaW1zQXR0cnMsIEV4cGFuZERpbXNJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZERpbXMoYXJnczoge1xuICBpbnB1dHM6IEV4cGFuZERpbXNJbnB1dHMsXG4gIGF0dHJzOiBFeHBhbmREaW1zQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbnB1dH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtkaW19ID0gYXR0cnM7XG5cbiAgY29uc3QgaW5wdXRSYW5rID0gaW5wdXQuc2hhcGUubGVuZ3RoO1xuICBjb25zdCBuZXdTaGFwZSA9IGlucHV0LnNoYXBlLnNsaWNlKCk7XG4gIGxldCAkZGltID0gZGltO1xuICBpZiAoZGltIDwgMCkge1xuICAgIC8vIE5lZ2F0aXZlIHZhbHVlIGlzIGNvdW50ZWQgZnJvbSB0aGUgdGFpbCBvZiByYW5rLlxuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICAtKGlucHV0UmFuayArIDEpIDw9IGRpbSxcbiAgICAgICAgKCkgPT4gYEF4aXMgbXVzdCBiZSBpbiB0aGUgaW50ZXJ2YWwgWyR7LSAoaW5wdXRSYW5rICsgMSl9LCAke1xuICAgICAgICAgICAgaW5wdXRSYW5rfV1gKTtcbiAgICAkZGltID0gaW5wdXRSYW5rICsgZGltICsgMTtcbiAgfVxuICBuZXdTaGFwZS5zcGxpY2UoJGRpbSwgMCwgMSk7XG5cbiAgcmV0dXJuIHJlc2hhcGUoe2lucHV0czoge3g6IGlucHV0fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogbmV3U2hhcGV9fSk7XG59XG5cbmV4cG9ydCBjb25zdCBleHBhbmREaW1zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEV4cGFuZERpbXMsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IGV4cGFuZERpbXMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Expm1 } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const expm1Config = createUnaryKernelConfig(Expm1, 'float32');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwbTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9FeHBtMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQix1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0V4cG0xLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlVW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vdW5hcnlfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGV4cG0xQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKEV4cG0xLCAnZmxvYXQzMicpO1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Fill } from '@tensorflow/tfjs-core';\nexport function fill(args) {\n const { attrs: { shape, value, dtype }, backend } = args;\n const out = backend.makeOutput(shape, dtype);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.fill(value);\n return out;\n}\nexport const fillConfig = {\n kernelName: Fill,\n backendName: 'wasm',\n kernelFunc: fill,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0ZpbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFDLElBQUksRUFBWSxNQUFNLHVCQUF1QixDQUFDO0FBSXRELE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBOEM7SUFDakUsTUFBTSxFQUFDLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3JELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtGaWxsLCBGaWxsQXR0cnN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxsKGFyZ3M6IHthdHRyczogRmlsbEF0dHJzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pIHtcbiAgY29uc3Qge2F0dHJzOiB7c2hhcGUsIHZhbHVlLCBkdHlwZX0sIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHNoYXBlLCBkdHlwZSk7XG4gIGNvbnN0IG91dFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChvdXQpO1xuICBvdXRWYWxzLmZpbGwodmFsdWUgYXMgbnVtYmVyKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbGxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRmlsbCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogZmlsbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FlipLeftRight } from '@tensorflow/tfjs-core';\nlet wasmFlipLeftRight;\nfunction setup(backend) {\n wasmFlipLeftRight = backend.wasm.cwrap(FlipLeftRight, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nexport function flipLeftRight(args) {\n const { inputs, backend } = args;\n const { image } = inputs;\n const out = backend.makeOutput(image.shape, image.dtype);\n const imageId = backend.dataIdMap.get(image.dataId).id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n wasmFlipLeftRight(imageId, batch, imageHeight, imageWidth, numChannels, outId);\n return out;\n}\nexport const flipLeftRightConfig = {\n kernelName: FlipLeftRight,\n backendName: 'wasm',\n kernelFunc: flipLeftRight,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxpcExlZnRSaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0ZsaXBMZWZ0UmlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBNEQsTUFBTSx1QkFBdUIsQ0FBQztBQUkvRyxJQUFJLGlCQUUyQyxDQUFDO0FBRWhELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ3JFLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQ3pCLElBQXlEO0lBQzNELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFbEUsaUJBQWlCLENBQ2IsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLGFBQXNDO0lBQ2xELFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RmxpcExlZnRSaWdodCwgRmxpcExlZnRSaWdodElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbUZsaXBMZWZ0UmlnaHQ6IChcbiAgICB4SWQ6IG51bWJlciwgYmF0Y2g6IG51bWJlciwgaW1hZ2VIZWlnaHQ6IG51bWJlciwgaW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIG51bUNoYW5uZWxzOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21GbGlwTGVmdFJpZ2h0ID0gYmFja2VuZC53YXNtLmN3cmFwKEZsaXBMZWZ0UmlnaHQsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICdudW1iZXInLCAgLy8geElkXG4gICAgJ251bWJlcicsICAvLyBiYXRjaFxuICAgICdudW1iZXInLCAgLy8gaW1hZ2VIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGltYWdlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIG51bUNoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsaXBMZWZ0UmlnaHQoXG4gICAgYXJnczoge2lucHV0czogRmxpcExlZnRSaWdodElucHV0cywgYmFja2VuZDogQmFja2VuZFdhc219KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlfSA9IGlucHV0cztcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoaW1hZ2Uuc2hhcGUsIGltYWdlLmR0eXBlKTtcbiAgY29uc3QgaW1hZ2VJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbWFnZS5kYXRhSWQpLmlkO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBudW1DaGFubmVsc10gPSBpbWFnZS5zaGFwZTtcblxuICB3YXNtRmxpcExlZnRSaWdodChcbiAgICAgIGltYWdlSWQsIGJhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgbnVtQ2hhbm5lbHMsIG91dElkKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGZsaXBMZWZ0UmlnaHRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRmxpcExlZnRSaWdodCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogZmxpcExlZnRSaWdodCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG4gIHNldHVwRnVuYzogc2V0dXBcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Floor } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const floorConfig = createUnaryKernelConfig(Floor);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9GbG9vci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7Rmxvb3IsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IGZsb29yQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhGbG9vcik7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FloorDiv } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const floorDivConfig = createBinaryKernelConfig(FloorDiv, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvb3JEaXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9GbG9vckRpdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekQsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qix3QkFBd0IsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGbG9vckRpdiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi9iaW5hcnlfa2VybmVsJztcblxuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gZmFsc2U7XG5leHBvcnQgY29uc3QgZmxvb3JEaXZDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKEZsb29yRGl2LCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FusedBatchNorm, util } from '@tensorflow/tfjs-core';\nlet wasmBatchNorm;\nfunction setup(backend) {\n wasmBatchNorm = backend.wasm.cwrap(FusedBatchNorm, null /* void */, ['number', 'number', 'number', 'number', 'number', 'number', 'number']);\n}\nfunction fusedBatchNorm(args) {\n const { backend, inputs, attrs } = args;\n const { varianceEpsilon } = attrs;\n const { x, mean, variance, offset, scale } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const meanId = backend.dataIdMap.get(mean.dataId).id;\n const varianceId = backend.dataIdMap.get(variance.dataId).id;\n const offsetId = offset != null ? backend.dataIdMap.get(offset.dataId).id : 0;\n const scaleId = scale != null ? backend.dataIdMap.get(scale.dataId).id : 0;\n const out = backend.makeOutput(x.shape, x.dtype);\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(x.shape) === 0) {\n return out;\n }\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmBatchNorm(xId, meanId, varianceId, offsetId, scaleId, varianceEpsilon, outId);\n return out;\n}\nexport const fusedBatchNormConfig = {\n kernelName: FusedBatchNorm,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: fusedBatchNorm\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWRCYXRjaE5vcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9GdXNlZEJhdGNoTm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsY0FBYyxFQUFtRixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk1SSxJQUFJLGFBRWdFLENBQUM7QUFFckUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUM5QixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFDL0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUl2QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLE1BQU0sRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0UsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxvQ0FBb0M7SUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsYUFBYSxDQUNULEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGdXNlZEJhdGNoTm9ybSwgRnVzZWRCYXRjaE5vcm1BdHRycywgRnVzZWRCYXRjaE5vcm1JbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxubGV0IHdhc21CYXRjaE5vcm06IChcbiAgICB4SWQ6IG51bWJlciwgbWVhbklkOiBudW1iZXIsIHZhcmlhbmNlSWQ6IG51bWJlciwgb2Zmc2V0SWQ6IG51bWJlcixcbiAgICBzY2FsZUlkOiBudW1iZXIsIHZhcmlhbmNlRXBzaWxvbjogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtQmF0Y2hOb3JtID0gYmFja2VuZC53YXNtLmN3cmFwKFxuICAgICAgRnVzZWRCYXRjaE5vcm0sIG51bGwgLyogdm9pZCAqLyxcbiAgICAgIFsnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJ10pO1xufVxuXG5mdW5jdGlvbiBmdXNlZEJhdGNoTm9ybShhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IEZ1c2VkQmF0Y2hOb3JtSW5wdXRzLFxuICBhdHRyczogRnVzZWRCYXRjaE5vcm1BdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7dmFyaWFuY2VFcHNpbG9ufSA9IGF0dHJzO1xuICBjb25zdCB7eCwgbWVhbiwgdmFyaWFuY2UsIG9mZnNldCwgc2NhbGV9ID0gaW5wdXRzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBjb25zdCBtZWFuSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQobWVhbi5kYXRhSWQpLmlkO1xuICBjb25zdCB2YXJpYW5jZUlkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHZhcmlhbmNlLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IG9mZnNldElkID0gb2Zmc2V0ICE9IG51bGwgPyBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob2Zmc2V0LmRhdGFJZCkuaWQgOiAwO1xuICBjb25zdCBzY2FsZUlkID0gc2NhbGUgIT0gbnVsbCA/IGJhY2tlbmQuZGF0YUlkTWFwLmdldChzY2FsZS5kYXRhSWQpLmlkIDogMDtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSk7XG4gIC8vIFNob3J0LWNpcmN1aXQgemVyby1zaXplZCB0ZW5zb3JzLlxuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpID09PSAwKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gIHdhc21CYXRjaE5vcm0oXG4gICAgICB4SWQsIG1lYW5JZCwgdmFyaWFuY2VJZCwgb2Zmc2V0SWQsIHNjYWxlSWQsIHZhcmlhbmNlRXBzaWxvbiwgb3V0SWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgZnVzZWRCYXRjaE5vcm1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRnVzZWRCYXRjaE5vcm0sXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGZ1c2VkQmF0Y2hOb3JtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, FusedConv2D } from '@tensorflow/tfjs-core';\nimport { FusableActivation } from './types';\nlet wasmFusedConv2d;\nfunction setup(backend) {\n wasmFusedConv2d = backend.wasm.cwrap(FusedConv2D, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction fusedConv2d(args) {\n const { inputs, attrs, backend } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode);\n const fusedActivation = FusableActivation[activation];\n if (fusedActivation == null) {\n throw new Error(`${activation} activation not yet supported for FusedConv2D ` +\n `in the wasm backend.`);\n }\n const xId = backend.dataIdMap.get(x.dataId).id;\n const filterId = backend.dataIdMap.get(filter.dataId).id;\n const outputChannels = convInfo.outChannels;\n let biasId = 0;\n if (bias != null) {\n const biasData = backend.dataIdMap.get(bias.dataId);\n if (biasData.shape.length !== 1) {\n throw new Error(`FusedConv2D only supports rank-1 bias but got ` +\n `rank ${biasData.shape.length}.`);\n }\n if (biasData.shape[0] !== outputChannels) {\n throw new Error(`FusedConv2D bias shape (${biasData.shape}) does not ` +\n `match the number of output channels (${outputChannels})`);\n }\n biasId = biasData.id;\n }\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const inputChannels = convInfo.inChannels;\n const isSamePad = convInfo.padInfo.type === 'SAME' ? 1 : 0;\n const batchSize = convInfo.batchSize;\n const inHeight = convInfo.inHeight;\n const inWidth = convInfo.inWidth;\n if (dataFormat !== 'NHWC') {\n throw new Error(`wasm backend FusedConv2D does not support dataFormat:'` +\n `${dataFormat}'. Please use 'NHWC'.`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n const preluActivationWeightsId = preluActivationWeights == null ?\n 0 :\n backend.dataIdMap.get(preluActivationWeights.dataId).id;\n wasmFusedConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId);\n return out;\n}\nexport const fusedConv2DConfig = {\n kernelName: FusedConv2D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: fusedConv2d\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWRDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9GdXNlZENvbnYyRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBMEUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6SSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFMUMsSUFBSSxlQVFRLENBQUM7QUFFYixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDakUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUlwQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDekQsTUFBTSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsVUFBVSxFQUNWLGNB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M0M7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxNQUFNLHdCQUF3QixHQUFHLHNCQUFzQixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVELGVBQWUsQ0FDWCxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQ3RFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFDdkUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFDdkUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0UsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRnVzZWRDb252MkQsIEZ1c2VkQ29udjJEQXR0cnMsIEZ1c2VkQ29udjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0Z1c2FibGVBY3RpdmF0aW9ufSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21GdXNlZENvbnYyZDpcbiAgICAoeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBpbnB1dEhlaWdodDogbnVtYmVyLCBpbnB1dFdpZHRoOiBudW1iZXIsXG4gICAgIGZpbHRlcklkOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLCBmaWx0ZXJXaWR0aDogbnVtYmVyLFxuICAgICBiaWFzSWQ6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZFJpZ2h0OiBudW1iZXIsIHBhZEJvdHRvbTogbnVtYmVyLFxuICAgICBwYWRMZWZ0OiBudW1iZXIsIGlzU2FtZVBhZDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLFxuICAgICBkaWxhdGlvbldpZHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLFxuICAgICBpbnB1dENoYW5uZWxzOiBudW1iZXIsIG91dHB1dENoYW5uZWxzOiBudW1iZXIsIGFjdGl2YXRpb246IG51bWJlcixcbiAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkOiBudW1iZXIsIGxlYWt5cmVsdUFscGhhOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+XG4gICAgICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21GdXNlZENvbnYyZCA9IGJhY2tlbmQud2FzbS5jd3JhcChGdXNlZENvbnYyRCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gaW5wdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0V2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcklkXG4gICAgJ251bWJlcicsICAvLyBmaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlcldpZHRoXG4gICAgJ251bWJlcicsICAvLyBiaWFzSWRcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkUmlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHBhZEJvdHRvbVxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICAgICdudW1iZXInLCAgLy8gaXNTYW1lUGFkXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVXaWR0aFxuICAgICdudW1iZXInLCAgLy8gaW5wdXRDaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gb3V0cHV0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIGFjdGl2YXRpb25cbiAgICAnbnVtYmVyJywgIC8vIHByZWx1QWN0aXZhdGlvbldlaWdodHNJZFxuICAgICdudW1iZXInLCAgLy8gbGVha3lyZWx1QWxwaGFcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBmdXNlZENvbnYyZChhcmdzOiB7XG4gIGlucHV0czogRnVzZWRDb252MkRJbnB1dHMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBhdHRyczogRnVzZWRDb252MkRBdHRyc1xufSkge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7eCwgZmlsdGVyLCBiaWFzLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzfSA9IGlucHV0cztcbiAgY29uc3Qge1xuICAgIHN0cmlkZXMsXG4gICAgcGFkLFxuICAgIGRpbGF0aW9ucyxcbiAgICBkYXRhRm9ybWF0LFxuICAgIGRpbVJvdW5kaW5nTW9kZSxcbiAgICBhY3RpdmF0aW9uLFxuICAgIGxlYWt5cmVsdUFscGhhXG4gIH0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgICh4IGFzIFRlbnNvcjREKS5zaGFwZSwgKGZpbHRlciBhcyBUZW5zb3I0RCkuc2hhcGUsIHN0cmlkZXMsIGRpbGF0aW9ucyxcbiAgICAgIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBmdXNlZEFjdGl2YXRpb24gPVxuICAgICAgRnVzYWJsZUFjdGl2YXRpb25bYWN0aXZhdGlvbiBhcyB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlvZiB0eXBlb2YgRnVzYWJsZUFjdGl2YXRpb25dO1xuICBpZiAoZnVzZWRBY3RpdmF0aW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2FjdGl2YXRpb259IGFjdGl2YXRpb24gbm90IHlldCBzdXBwb3J0ZWQgZm9yIEZ1c2VkQ29udjJEIGAgK1xuICAgICAgICBgaW4gdGhlIHdhc20gYmFja2VuZC5gKTtcbiAgfVxuXG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGZpbHRlci5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IG91dHB1dENoYW5uZWxzID0gY29udkluZm8ub3V0Q2hhbm5lbHM7XG5cbiAgbGV0IGJpYXNJZCA9IDA7XG4gIGlmIChiaWFzICE9IG51bGwpIHtcbiAgICBjb25zdCBiaWFzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChiaWFzLmRhdGFJZCk7XG4gICAgaWYgKGJpYXNEYXRhLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGdXNlZENvbnYyRCBvbmx5IHN1cHBvcnRzIHJhbmstMSBiaWFzIGJ1dCBnb3QgYCArXG4gICAgICAgICAgYHJhbmsgJHtiaWFzRGF0YS5zaGFwZS5sZW5ndGh9LmApO1xuICAgIH1cbiAgICBpZiAoYmlhc0RhdGEuc2hhcGVbMF0gIT09IG91dHB1dENoYW5uZWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZ1c2VkQ29udjJEIGJpYXMgc2hhcGUgKCR7Ymlhc0RhdGEuc2hhcGV9KSBkb2VzIG5vdCBgICtcbiAgICAgICAgICBgbWF0Y2ggdGhlIG51bWJlciBvZiBvdXRwdXQgY2hhbm5lbHMgKCR7b3V0cHV0Q2hhbm5lbHN9KWApO1xuICAgIH1cbiAgICBiaWFzSWQgPSBiaWFzRGF0YS5pZDtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IHBhZFJpZ2h0ID0gY29udkluZm8ucGFkSW5mby5yaWdodDtcbiAgY29uc3QgcGFkQm90dG9tID0gY29udkluZm8ucGFkSW5mby5ib3R0b207XG4gIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGlucHV0Q2hhbm5lbHMgPSBjb252SW5mby5pbkNoYW5uZWxzO1xuICBjb25zdCBpc1NhbWVQYWQgPSBjb252SW5mby5wYWRJbmZvLnR5cGUgPT09ICdTQU1FJyA/IDEgOiAwO1xuICBjb25zdCBiYXRjaFNpemUgPSBjb252SW5mby5iYXRjaFNpemU7XG4gIGNvbnN0IGluSGVpZ2h0ID0gY29udkluZm8uaW5IZWlnaHQ7XG4gIGNvbnN0IGluV2lkdGggPSBjb252SW5mby5pbldpZHRoO1xuXG4gIGlmIChkYXRhRm9ybWF0ICE9PSAnTkhXQycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB3YXNtIGJhY2tlbmQgRnVzZWRDb252MkQgZG9lcyBub3Qgc3VwcG9ydCBkYXRhRm9ybWF0OidgICtcbiAgICAgICAgYCR7ZGF0YUZvcm1hdH0nLiBQbGVhc2UgdXNlICdOSFdDJy5gKTtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChjb252SW5mby5vdXRTaGFwZSwgJ2Zsb2F0MzInKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IHByZWx1QWN0aXZhdGlvbldlaWdodHNJZCA9IHByZWx1QWN0aXZhdGlvbldlaWdodHMgPT0gbnVsbCA/XG4gICAgICAwIDpcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChwcmVsdUFjdGl2YXRpb25XZWlnaHRzLmRhdGFJZCkuaWQ7XG5cbiAgd2FzbUZ1c2VkQ29udjJkKFxuICAgICAgeElkLCBiYXRjaFNpemUsIGluSGVpZ2h0LCBpbldpZHRoLCBmaWx0ZXJJZCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aCxcbiAgICAgIGJpYXNJZCwgcGFkVG9wLCBwYWRSaWdodCwgcGFkQm90dG9tLCBwYWRMZWZ0LCBpc1NhbWVQYWQsIGRpbGF0aW9uSGVpZ2h0LFxuICAgICAgZGlsYXRpb25XaWR0aCwgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgaW5wdXRDaGFubmVscywgb3V0cHV0Q2hhbm5lbHMsXG4gICAgICBmdXNlZEFjdGl2YXRpb24sIHByZWx1QWN0aXZhdGlvbldlaWdodHNJZCwgbGVha3lyZWx1QWxwaGEgfHwgMCwgb3V0SWQpO1xuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBmdXNlZENvbnYyRENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGdXNlZENvbnYyRCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogZnVzZWRDb252MmQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, FusedDepthwiseConv2D } from '@tensorflow/tfjs-core';\nimport { FusableActivation } from './types';\nlet wasmFusedDepthwiseConv2d;\nfunction setup(backend) {\n wasmFusedDepthwiseConv2d =\n backend.wasm.cwrap(FusedDepthwiseConv2D, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction fusedDepthwiseConv2d(args) {\n const { inputs, attrs, backend } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dilations, dataFormat, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n const fusedActivation = FusableActivation[activation];\n if (fusedActivation == null) {\n throw new Error(`${activation} activation not yet supported for FusedDepthwiseConv2D ` +\n `in the wasm backend.`);\n }\n const xId = backend.dataIdMap.get(x.dataId).id;\n const filterId = backend.dataIdMap.get(filter.dataId).id;\n const outputChannels = convInfo.outChannels;\n let biasId = 0;\n if (bias != null) {\n const biasData = backend.dataIdMap.get(bias.dataId);\n if (biasData.shape.length !== 1) {\n throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got ` +\n `rank ${biasData.shape.length}.`);\n }\n if (biasData.shape[0] !== outputChannels) {\n throw new Error(`FusedDepthwiseConv2D bias shape (${biasData.shape}) does not ` +\n `match the number of output channels (${outputChannels})`);\n }\n biasId = biasData.id;\n }\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const inputChannels = convInfo.inChannels;\n const isSamePad = convInfo.padInfo.type === 'SAME' ? 1 : 0;\n const batchSize = convInfo.batchSize;\n const inHeight = convInfo.inHeight;\n const inWidth = convInfo.inWidth;\n if (dataFormat !== 'NHWC') {\n throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'` +\n `${dataFormat}'. Please use 'NHWC'.`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n const preluActivationWeightsId = preluActivationWeights == null ?\n 0 :\n backend.dataIdMap.get(preluActivationWeights.dataId).id;\n wasmFusedDepthwiseConv2d(xId, batchSize, inHeight, inWidth, filterId, filterHeight, filterWidth, biasId, padTop, padRight, padBottom, padLeft, isSamePad, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, fusedActivation, preluActivationWeightsId, leakyreluAlpha || 0, outId);\n return out;\n}\nexport const fusedDepthwiseConv2DConfig = {\n kernelName: FusedDepthwiseConv2D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: fusedDepthwiseConv2d\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWREZXB0aHdpc2VDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9GdXNlZERlcHRod2lzZUNvbnYyRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUE0RixNQUFNLHVCQUF1QixDQUFDO0FBSXBLLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUUxQyxJQUFJLHdCQVFRLENBQUM7QUFFYixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyx3QkFBd0I7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4RCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUSxFQUFHLFFBQVE7U0FDcEIsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsSUFJN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3pELE1BQU0sRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILFNBQVMsRUFDVCxVQUFV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Q0FDWCxpRUFBaUU7WUFDakUsR0FBRyxVQUFVLHVCQUF1QixDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxNQUFNLHdCQUF3QixHQUFHLHNCQUFzQixJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVELHdCQUF3QixDQUNwQixHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQ3RFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFDdkUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFDdkUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0UsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQWlCO0lBQ3RELFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLG9CQUE2QztDQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRnVzZWREZXB0aHdpc2VDb252MkQsIEZ1c2VkRGVwdGh3aXNlQ29udjJEQXR0cnMsIEZ1c2VkRGVwdGh3aXNlQ29udjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvcjREfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0Z1c2FibGVBY3RpdmF0aW9ufSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21GdXNlZERlcHRod2lzZUNvbnYyZDpcbiAgICAoeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBpbnB1dEhlaWdodDogbnVtYmVyLCBpbnB1dFdpZHRoOiBudW1iZXIsXG4gICAgIGZpbHRlcklkOiBudW1iZXIsIGZpbHRlckhlaWdodDogbnVtYmVyLCBmaWx0ZXJXaWR0aDogbnVtYmVyLFxuICAgICBiaWFzSWQ6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZFJpZ2h0OiBudW1iZXIsIHBhZEJvdHRvbTogbnVtYmVyLFxuICAgICBwYWRMZWZ0OiBudW1iZXIsIGlzU2FtZVBhZDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLFxuICAgICBkaWxhdGlvbldpZHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLFxuICAgICBpbnB1dENoYW5uZWxzOiBudW1iZXIsIG91dHB1dENoYW5uZWxzOiBudW1iZXIsIGFjdGl2YXRpb246IG51bWJlcixcbiAgICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkOiBudW1iZXIsIGxlYWt5cmVsdUFscGhhOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+XG4gICAgICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21GdXNlZERlcHRod2lzZUNvbnYyZCA9XG4gICAgICBiYWNrZW5kLndhc20uY3dyYXAoRnVzZWREZXB0aHdpc2VDb252MkQsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGlucHV0SGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gaW5wdXRXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGZpbHRlcklkXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBiaWFzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRSaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZEJvdHRvbVxuICAgICAgICAnbnVtYmVyJywgIC8vIHBhZExlZnRcbiAgICAgICAgJ251bWJlcicsICAvLyBpc1NhbWVQYWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBzdHJpZGVIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBzdHJpZGVXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIGlucHV0Q2hhbm5lbHNcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRwdXRDaGFubmVsc1xuICAgICAgICAnbnVtYmVyJywgIC8vIGFjdGl2YXRpb25cbiAgICAgICAgJ251bWJlcicsICAvLyBwcmVsdUFjdGl2YXRpb25XZWlnaHRzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBsZWFreXJlbHVBbHBoYVxuICAgICAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgICBdKTtcbn1cblxuZnVuY3Rpb24gZnVzZWREZXB0aHdpc2VDb252MmQoYXJnczoge1xuICBpbnB1dHM6IEZ1c2VkRGVwdGh3aXNlQ29udjJESW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgYXR0cnM6IEZ1c2VkRGVwdGh3aXNlQ29udjJEQXR0cnNcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYXR0cnMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlciwgYmlhcywgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtcbiAgICBzdHJpZGVzLFxuICAgIHBhZCxcbiAgICBkaWxhdGlvbnMsXG4gICAgZGF0YUZvcm1hdCxcbiAgICBkaW1Sb3VuZGluZ01vZGUsXG4gICAgYWN0aXZhdGlvbixcbiAgICBsZWFreXJlbHVBbHBoYVxuICB9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICAoeCBhcyBUZW5zb3I0RCkuc2hhcGUsIChmaWx0ZXIgYXMgVGVuc29yNEQpLnNoYXBlLCBzdHJpZGVzLCBkaWxhdGlvbnMsXG4gICAgICBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgdHJ1ZSAvKiBkZXB0aHdpc2UgKi8pO1xuXG4gIGNvbnN0IGZ1c2VkQWN0aXZhdGlvbiA9XG4gICAgICBGdXNhYmxlQWN0aXZhdGlvblthY3RpdmF0aW9uIGFzIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleW9mIHR5cGVvZiBGdXNhYmxlQWN0aXZhdGlvbl07XG4gIGlmIChmdXNlZEFjdGl2YXRpb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7YWN0aXZhdGlvbn0gYWN0aXZhdGlvbiBub3QgeWV0IHN1cHBvcnRlZCBmb3IgRnVzZWREZXB0aHdpc2VDb252MkQgYCArXG4gICAgICAgIGBpbiB0aGUgd2FzbSBiYWNrZW5kLmApO1xuICB9XG5cbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3QgZmlsdGVySWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZmlsdGVyLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3Qgb3V0cHV0Q2hhbm5lbHMgPSBjb252SW5mby5vdXRDaGFubmVscztcblxuICBsZXQgYmlhc0lkID0gMDtcbiAgaWYgKGJpYXMgIT0gbnVsbCkge1xuICAgIGNvbnN0IGJpYXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGJpYXMuZGF0YUlkKTtcbiAgICBpZiAoYmlhc0RhdGEuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZ1c2VkRGVwdGh3aXNlQ29udjJEIG9ubHkgc3VwcG9ydHMgcmFuay0xIGJpYXMgYnV0IGdvdCBgICtcbiAgICAgICAgICBgcmFuayAke2JpYXNEYXRhLnNoYXBlLmxlbmd0aH0uYCk7XG4gICAgfVxuICAgIGlmIChiaWFzRGF0YS5zaGFwZVswXSAhPT0gb3V0cHV0Q2hhbm5lbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRnVzZWREZXB0aHdpc2VDb252MkQgYmlhcyBzaGFwZSAoJHtiaWFzRGF0YS5zaGFwZX0pIGRvZXMgbm90IGAgK1xuICAgICAgICAgIGBtYXRjaCB0aGUgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyAoJHtvdXRwdXRDaGFubmVsc30pYCk7XG4gICAgfVxuICAgIGJpYXNJZCA9IGJpYXNEYXRhLmlkO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRUb3AgPSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgY29uc3QgcGFkUmlnaHQgPSBjb252SW5mby5wYWRJbmZvLnJpZ2h0O1xuICBjb25zdCBwYWRCb3R0b20gPSBjb252SW5mby5wYWRJbmZvLmJvdHRvbTtcbiAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGNvbnZJbmZvLmluQ2hhbm5lbHM7XG4gIGNvbnN0IGlzU2FtZVBhZCA9IGNvbnZJbmZvLnBhZEluZm8udHlwZSA9PT0gJ1NBTUUnID8gMSA6IDA7XG4gIGNvbnN0IGJhdGNoU2l6ZSA9IGNvbnZJbmZvLmJhdGNoU2l6ZTtcbiAgY29uc3QgaW5IZWlnaHQgPSBjb252SW5mby5pbkhlaWdodDtcbiAgY29uc3QgaW5XaWR0aCA9IGNvbnZJbmZvLmluV2lkdGg7XG5cbiAgaWYgKGRhdGFGb3JtYXQgIT09ICdOSFdDJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHdhc20gYmFja2VuZCBGdXNlZERlcHRod2lzZUNvbnYyRCBkb2VzIG5vdCBzdXBwb3J0IGRhdGFGb3JtYXQ6J2AgK1xuICAgICAgICBgJHtkYXRhRm9ybWF0fScuIFBsZWFzZSB1c2UgJ05IV0MnLmApO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLm91dFNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgY29uc3QgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkID0gcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cyA9PSBudWxsID9cbiAgICAgIDAgOlxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHByZWx1QWN0aXZhdGlvbldlaWdodHMuZGF0YUlkKS5pZDtcblxuICB3YXNtRnVzZWREZXB0aHdpc2VDb252MmQoXG4gICAgICB4SWQsIGJhdGNoU2l6ZSwgaW5IZWlnaHQsIGluV2lkdGgsIGZpbHRlcklkLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLFxuICAgICAgYmlhc0lkLCBwYWRUb3AsIHBhZFJpZ2h0LCBwYWRCb3R0b20sIHBhZExlZnQsIGlzU2FtZVBhZCwgZGlsYXRpb25IZWlnaHQsXG4gICAgICBkaWxhdGlvbldpZHRoLCBzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoLCBpbnB1dENoYW5uZWxzLCBvdXRwdXRDaGFubmVscyxcbiAgICAgIGZ1c2VkQWN0aXZhdGlvbiwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c0lkLCBsZWFreXJlbHVBbHBoYSB8fCAwLCBvdXRJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGZ1c2VkRGVwdGh3aXNlQ29udjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZ1c2VkRGVwdGh3aXNlQ29udjJELFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBmdXNlZERlcHRod2lzZUNvbnYyZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { gather_util, GatherNd } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmGatherNd;\nfunction setup(backend) {\n wasmGatherNd = backend.wasm.cwrap(GatherNd, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number' // outId\n ]);\n}\nfunction gatherNd(args) {\n const { backend, inputs } = args;\n const { params, indices } = inputs;\n const [resultShape, numSlices, sliceSize, strides] = gather_util.prepareAndValidate(params, indices);\n const out = backend.makeOutput(resultShape, params.dtype);\n if (numSlices === 0) {\n return out;\n }\n const indicesShape = indices.shape;\n const sliceRank = indicesShape[indicesShape.length - 1];\n const xData = backend.dataIdMap.get(params.dataId);\n const xId = xData.id;\n const indicesData = backend.dataIdMap.get(indices.dataId);\n const indicesId = indicesData.id;\n const stridesBytes = new Uint8Array(new Int32Array(strides).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmGatherNd(xId, CppDType[params.dtype], indicesId, numSlices, sliceRank, sliceSize, stridesBytes, outId);\n return out;\n}\nexport const gatherNdConfig = {\n kernelName: GatherNd,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: gatherNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyTmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9HYXRoZXJOZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBMkMsTUFBTSx1QkFBdUIsQ0FBQztBQUl0RyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksWUFHSSxDQUFDO0FBRVQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ3pELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRLENBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsSUFBb0Q7SUFFcEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFakMsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUM5QyxXQUFXLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXBELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFeEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDckIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxZQUFZLENBQ1IsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUN2RSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFekIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsUUFBUTtDQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2dhdGhlcl91dGlsLCBHYXRoZXJOZCwgR2F0aGVyTmRJbnB1dHMsIEtlcm5lbENvbmZpZywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtR2F0aGVyTmQ6IChcbiAgICB4SWQ6IG51bWJlciwgZHR5cGU6IENwcERUeXBlLCBpbmRpY2VzSWQ6IG51bWJlciwgbnVtU2xpY2VzOiBudW1iZXIsXG4gICAgc2xpY2VSYW5rOiBudW1iZXIsIHNsaWNlU2l6ZTogbnVtYmVyLCBzdHJpZGVzOiBVaW50OEFycmF5LCBvdXRJZDogbnVtYmVyKSA9PlxuICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21HYXRoZXJOZCA9IGJhY2tlbmQud2FzbS5jd3JhcChHYXRoZXJOZCwgbnVsbCAvKnZvaWQqLywgW1xuICAgICdudW1iZXInLCAgLy8geElkXG4gICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICdudW1iZXInLCAgLy8gaW5kaWNlc0lkXG4gICAgJ251bWJlcicsICAvLyBudW1TbGljZXNcbiAgICAnbnVtYmVyJywgIC8vIHNsaWNlUmFua1xuICAgICdudW1iZXInLCAgLy8gc2xpY2VTaXplXG4gICAgJ2FycmF5JywgICAvLyBzdHJpZGVzXG4gICAgJ251bWJlcicgICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2F0aGVyTmQoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IEdhdGhlck5kSW5wdXRzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHN9ID0gYXJncztcbiAgY29uc3Qge3BhcmFtcywgaW5kaWNlc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgW3Jlc3VsdFNoYXBlLCBudW1TbGljZXMsIHNsaWNlU2l6ZSwgc3RyaWRlc10gPVxuICAgICAgZ2F0aGVyX3V0aWwucHJlcGFyZUFuZFZhbGlkYXRlKHBhcmFtcywgaW5kaWNlcyk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHJlc3VsdFNoYXBlLCBwYXJhbXMuZHR5cGUpO1xuICBpZiAobnVtU2xpY2VzID09PSAwKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGNvbnN0IGluZGljZXNTaGFwZSA9IGluZGljZXMuc2hhcGU7XG4gIGNvbnN0IHNsaWNlUmFuayA9IGluZGljZXNTaGFwZVtpbmRpY2VzU2hhcGUubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQocGFyYW1zLmRhdGFJZCk7XG4gIGNvbnN0IHhJZCA9IHhEYXRhLmlkO1xuICBjb25zdCBpbmRpY2VzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbmRpY2VzLmRhdGFJZCk7XG4gIGNvbnN0IGluZGljZXNJZCA9IGluZGljZXNEYXRhLmlkO1xuXG4gIGNvbnN0IHN0cmlkZXNCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHN0cmlkZXMpLmJ1ZmZlcik7XG5cbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gIHdhc21HYXRoZXJOZChcbiAgICAgIHhJZCwgQ3BwRFR5cGVbcGFyYW1zLmR0eXBlXSwgaW5kaWNlc0lkLCBudW1TbGljZXMsIHNsaWNlUmFuaywgc2xpY2VTaXplLFxuICAgICAgc3RyaWRlc0J5dGVzLCBvdXRJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGdhdGhlck5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEdhdGhlck5kLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBnYXRoZXJOZFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, GatherV2, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { CppDType } from './types';\nlet wasmGather;\nfunction setup(backend) {\n wasmGather = backend.wasm.cwrap('Gather', null /*void*/, [\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number' // outId\n ]);\n}\nfunction gatherV2(args) {\n const { backend, inputs, attrs } = args;\n const { x, indices } = inputs;\n const { axis, batchDims } = attrs;\n // Throw error when any index is out of bound.\n const parsedAxis = util.parseAxisParam(axis, x.shape)[0];\n const indicesVals = backend.readSync(indices.dataId);\n const axisDim = x.shape[parsedAxis];\n for (let i = 0; i < indicesVals.length; ++i) {\n const index = indicesVals[i];\n util.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`);\n }\n const shapeInfo = backend_util.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, batchDims);\n const flattenX = reshape({\n inputs: { x },\n attrs: {\n shape: [\n shapeInfo.batchSize, shapeInfo.outerSize, shapeInfo.dimSize,\n shapeInfo.sliceSize\n ]\n },\n backend\n });\n const indicesSize = util.sizeFromShape(indices.shape);\n const flattenIndex = reshape({\n inputs: { x: indices },\n attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] },\n backend\n });\n const flattenOutputShape = [\n shapeInfo.batchSize, shapeInfo.outerSize, indicesSize / shapeInfo.batchSize,\n shapeInfo.sliceSize\n ];\n const out = backend.makeOutput(flattenOutputShape, x.dtype);\n if (util.sizeFromShape(x.shape) === 0) {\n return out;\n }\n const stridesSize = flattenX.shape.length - 1;\n const xData = backend.dataIdMap.get(flattenX.dataId);\n const xId = xData.id;\n const indicesData = backend.dataIdMap.get(flattenIndex.dataId);\n const indicesId = indicesData.id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n const xStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(flattenX.shape)).buffer);\n const outStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(flattenOutputShape)).buffer);\n wasmGather(xId, CppDType[x.dtype], xStridesBytes, stridesSize, indicesId, shapeInfo.batchSize, outStridesBytes, outId);\n backend.disposeData(flattenX.dataId);\n backend.disposeData(flattenIndex.dataId);\n // reshape\n out.shape = shapeInfo.outputShape;\n return out;\n}\nexport const gatherV2Config = {\n kernelName: GatherV2,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: gatherV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9HYXRoZXJWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBMkYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUosT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksVUFHc0IsQ0FBQztBQUUzQixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDdkQsUUFBUTtRQUNSLFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVEsQ0FBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FDYixJQUEwRTtJQUU1RSxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFaEMsOENBQThDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FB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LENBQUMsQ0FBQztJQUVwRSxVQUFVLENBQ04sR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQzdELFNBQVMsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWpELE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpDLFVBQVU7SUFDVixHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFDbEMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEdhdGhlclYyLCBHYXRoZXJWMkF0dHJzLCBHYXRoZXJWMklucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3IsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbUdhdGhlcjogKFxuICAgIHhJZDogbnVtYmVyLCBkdHlwZTogQ3BwRFR5cGUsIHhTdHJpZGVzOiBVaW50OEFycmF5LCBzdHJpZGVzU2l6ZTogbnVtYmVyLFxuICAgIGluZGljZXNJZDogbnVtYmVyLCBiYXRjaFNpemU6IG51bWJlciwgb3V0U3RyaWRlczogVWludDhBcnJheSxcbiAgICBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtR2F0aGVyID0gYmFja2VuZC53YXNtLmN3cmFwKCdHYXRoZXInLCBudWxsIC8qdm9pZCovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgJ2FycmF5JywgICAvLyB4U3RyaWRlc1xuICAgICdudW1iZXInLCAgLy8gc3RyaWRlc1NpemVcbiAgICAnbnVtYmVyJywgIC8vIGluZGljZXNJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgJ2FycmF5JywgICAvLyBvdXRTdHJpZGVzXG4gICAgJ251bWJlcicgICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2F0aGVyVjIoXG4gICAgYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IEdhdGhlclYySW5wdXRzLCBhdHRyczogR2F0aGVyVjJBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgaW5kaWNlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBiYXRjaERpbXN9ID0gYXR0cnM7XG5cbiAgLy8gVGhyb3cgZXJyb3Igd2hlbiBhbnkgaW5kZXggaXMgb3V0IG9mIGJvdW5kLlxuICBjb25zdCBwYXJzZWRBeGlzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKVswXTtcbiAgY29uc3QgaW5kaWNlc1ZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKGluZGljZXMuZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBheGlzRGltID0geC5zaGFwZVtwYXJzZWRBeGlzXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzVmFscy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGluZGV4ID0gaW5kaWNlc1ZhbHNbaV07XG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGluZGV4IDw9IGF4aXNEaW0gLSAxICYmIGluZGV4ID49IDAsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBgR2F0aGVyVjI6IHRoZSBpbmRleCB2YWx1ZSAke2luZGV4fSBpcyBub3QgaW4gWzAsICR7YXhpc0RpbSAtIDF9XWApO1xuICB9XG5cbiAgY29uc3Qgc2hhcGVJbmZvID0gYmFja2VuZF91dGlsLnNlZ21lbnRfdXRpbC5jb2xsZWN0R2F0aGVyT3BTaGFwZUluZm8oXG4gICAgICB4IGFzIFRlbnNvciwgaW5kaWNlcyBhcyBUZW5zb3IsIHBhcnNlZEF4aXMsIGJhdGNoRGltcyk7XG5cbiAgY29uc3QgZmxhdHRlblggPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4fSxcbiAgICBhdHRyczoge1xuICAgICAgc2hhcGU6IFtcbiAgICAgICAgc2hhcGVJbmZvLmJhdGNoU2l6ZSwgc2hhcGVJbmZvLm91dGVyU2l6ZSwgc2hhcGVJbmZvLmRpbVNpemUsXG4gICAgICAgIHNoYXBlSW5mby5zbGljZVNpemVcbiAgICAgIF1cbiAgICB9LFxuICAgIGJhY2tlbmRcbiAgfSk7XG4gIGNvbnN0IGluZGljZXNTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGluZGljZXMuc2hhcGUpO1xuICBjb25zdCBmbGF0dGVuSW5kZXggPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4OiBpbmRpY2VzfSxcbiAgICBhdHRyczoge3NoYXBlOiBbc2hhcGVJbmZvLmJhdGNoU2l6ZSwgaW5kaWNlc1NpemUgLyBzaGFwZUluZm8uYmF0Y2hTaXplXX0sXG4gICAgYmFja2VuZFxuICB9KTtcbiAgY29uc3QgZmxhdHRlbk91dHB1dFNoYXBlID0gW1xuICAgIHNoYXBlSW5mby5iYXRjaFNpemUsIHNoYXBlSW5mby5vdXRlclNpemUsIGluZGljZXNTaXplIC8gc2hhcGVJbmZvLmJhdGNoU2l6ZSxcbiAgICBzaGFwZUluZm8uc2xpY2VTaXplXG4gIF07XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGZsYXR0ZW5PdXRwdXRTaGFwZSwgeC5kdHlwZSk7XG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGNvbnN0IHN0cmlkZXNTaXplID0gZmxhdHRlblguc2hhcGUubGVuZ3RoIC0gMTtcblxuICBjb25zdCB4RGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChmbGF0dGVuWC5kYXRhSWQpO1xuICBjb25zdCB4SWQgPSB4RGF0YS5pZDtcblxuICBjb25zdCBpbmRpY2VzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChmbGF0dGVuSW5kZXguZGF0YUlkKTtcbiAgY29uc3QgaW5kaWNlc0lkID0gaW5kaWNlc0RhdGEuaWQ7XG5cbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgeFN0cmlkZXNCeXRlcyA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgbmV3IEludDMyQXJyYXkodXRpbC5jb21wdXRlU3RyaWRlcyhmbGF0dGVuWC5zaGFwZSkpLmJ1ZmZlcik7XG4gIGNvbnN0IG91dFN0cmlkZXNCeXRlcyA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgbmV3IEludDMyQXJyYXkodXRpbC5jb21wdXRlU3RyaWRlcyhmbGF0dGVuT3V0cHV0U2hhcGUpKS5idWZmZXIpO1xuXG4gIHdhc21HYXRoZXIoXG4gICAgICB4SWQsIENwcERUeXBlW3guZHR5cGVdLCB4U3RyaWRlc0J5dGVzLCBzdHJpZGVzU2l6ZSwgaW5kaWNlc0lkLFxuICAgICAgc2hhcGVJbmZvLmJhdGNoU2l6ZSwgb3V0U3RyaWRlc0J5dGVzLCBvdXRJZCk7XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YShmbGF0dGVuWC5kYXRhSWQpO1xuICBiYWNrZW5kLmRpc3Bvc2VEYXRhKGZsYXR0ZW5JbmRleC5kYXRhSWQpO1xuXG4gIC8vIHJlc2hhcGVcbiAgb3V0LnNoYXBlID0gc2hhcGVJbmZvLm91dHB1dFNoYXBlO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgZ2F0aGVyVjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogR2F0aGVyVjIsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGdhdGhlclYyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Greater } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const greaterConfig = createBinaryKernelConfig(Greater, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0dyZWF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFDLE9BQU8sRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsd0JBQXdCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtHcmVhdGVyLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuXG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBncmVhdGVyQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhHcmVhdGVyLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { GreaterEqual } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const greaterEqualConfig = createBinaryKernelConfig(GreaterEqual, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JlYXRlckVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvR3JlYXRlckVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FDM0Isd0JBQXdCLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtHcmVhdGVyRXF1YWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5cbmNvbnN0IHN1cHBvcnRzRnVsbEJyb2FkY2FzdCA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGdyZWF0ZXJFcXVhbENvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoR3JlYXRlckVxdWFsLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsFinite } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const isFiniteConfig = createUnaryKernelConfig(IsFinite, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNGaW5pdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Jc0Zpbml0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qix1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNGaW5pdGUsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgaXNGaW5pdGVDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoSXNGaW5pdGUsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsInf } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const isInfConfig = createUnaryKernelConfig(IsInf, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNJbmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Jc0luZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNJbmYsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3QgaXNJbmZDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKElzSW5mLCAnYm9vbCcpO1xuIl19","/**\n * @license\n * Copyright 2022 The TensorFlow Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsNan } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const isNaNConfig = createUnaryKernelConfig(IsNan, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNOYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Jc05hbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBUaGUgVGVuc29yRmxvdyBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0lzTmFuLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlVW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vdW5hcnlfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGlzTmFOQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhJc05hbiwgJ2Jvb2wnKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LeakyRelu, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmFunc;\nfunction setupFunc(backend) {\n wasmFunc = backend.wasm.cwrap(LeakyRelu, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nexport function leakyRelu(args) {\n const { inputs: { x }, attrs: { alpha }, backend } = args;\n const xId = backend.dataIdMap.get(x.dataId).id;\n // According to TF API, LeakyRelu returns float32 when input is either float32\n // or int32.\n const out = backend.makeOutput(x.shape, 'float32');\n if (util.sizeFromShape(x.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmFunc(xId, CppDType[x.dtype], alpha, outId);\n }\n return out;\n}\nexport const leakyReluConfig = {\n kernelName: LeakyRelu,\n backendName: 'wasm',\n setupFunc,\n kernelFunc: leakyRelu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVha3lSZWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTGVha3lSZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsU0FBUyxFQUErQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk3SCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksUUFDMEUsQ0FBQztBQUUvRSxTQUFTLFNBQVMsQ0FBQyxPQUFvQjtJQUNyQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDeEQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQ3JCLElBQzBFO0lBRTVFLE1BQU0sRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFFcEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyw4RUFBOEU7SUFDOUUsWUFBWTtJQUNaLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVuRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEQ7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVM7SUFDVCxVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExlYWt5UmVsdSwgTGVha3lSZWx1QXR0cnMsIExlYWt5UmVsdUlucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtRnVuYzogKFxuICAgIHhJZDogbnVtYmVyLCBkdHlwZTogbnVtYmVyLCBsZWFreXJlbHVBbHBoYTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cEZ1bmMoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbUZ1bmMgPSBiYWNrZW5kLndhc20uY3dyYXAoTGVha3lSZWx1LCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHhfaWRcbiAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgJ251bWJlcicsICAvLyBsZWFreXJlbHVfYWxwaGFcbiAgICAnbnVtYmVyJywgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlYWt5UmVsdShcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBMZWFreVJlbHVJbnB1dHMsIGF0dHJzOiBMZWFreVJlbHVBdHRycywgYmFja2VuZDogQmFja2VuZFdhc219KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0czoge3h9LCBhdHRyczoge2FscGhhfSwgYmFja2VuZH0gPSBhcmdzO1xuXG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIC8vIEFjY29yZGluZyB0byBURiBBUEksIExlYWt5UmVsdSByZXR1cm5zIGZsb2F0MzIgd2hlbiBpbnB1dCBpcyBlaXRoZXIgZmxvYXQzMlxuICAvLyBvciBpbnQzMi5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHguc2hhcGUsICdmbG9hdDMyJyk7XG5cbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKSAhPT0gMCkge1xuICAgIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICAgIHdhc21GdW5jKHhJZCwgQ3BwRFR5cGVbeC5kdHlwZV0sIGFscGhhLCBvdXRJZCk7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbGVha3lSZWx1Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExlYWt5UmVsdSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jLFxuICBrZXJuZWxGdW5jOiBsZWFreVJlbHUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Less } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const lessConfig = createBinaryKernelConfig(Less, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0xlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FDbkIsd0JBQXdCLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIExlc3N9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gZmFsc2U7XG5leHBvcnQgY29uc3QgbGVzc0NvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoTGVzcywgc3VwcG9ydHNGdWxsQnJvYWRjYXN0LCAnYm9vbCcpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LessEqual } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const lessEqualConfig = createBinaryKernelConfig(LessEqual, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVzc0VxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTGVzc0VxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQ3hCLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIExlc3NFcXVhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBsZXNzRXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKExlc3NFcXVhbCwgc3VwcG9ydHNGdWxsQnJvYWRjYXN0LCAnYm9vbCcpO1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LinSpace } from '@tensorflow/tfjs-core';\nlet wasmLinSpace;\nfunction setup(backend) {\n wasmLinSpace = backend.wasm.cwrap(LinSpace, null, [\n 'number',\n 'number',\n 'number',\n 'number', // num\n ]);\n}\nexport function linSpace(args) {\n const { attrs, backend } = args;\n const { start, stop, num } = attrs;\n // TFJS Cpu backend supports num as a float and returns undetermined tensor in\n // that case. However, according to TensorFlow spec, num should be a integer.\n const numInt = Math.floor(num);\n const out = backend.makeOutput([numInt], 'float32');\n wasmLinSpace(backend.dataIdMap.get(out.dataId).id, start, stop, numInt);\n return out;\n}\nexport const linSpaceConfig = {\n kernelName: LinSpace,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: linSpace,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluU3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9MaW5TcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFFBQVEsRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUlwRyxJQUFJLFlBQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ2hELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxNQUFNO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQWtEO0lBRXpFLE1BQU0sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVqQyw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExpblNwYWNlLCBMaW5TcGFjZUF0dHJzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbUxpblNwYWNlOiAob3V0SWQ6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgc3RvcDogbnVtYmVyLCBudW06IG51bWJlcikgPT5cbiAgICB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtTGluU3BhY2UgPSBiYWNrZW5kLndhc20uY3dyYXAoTGluU3BhY2UsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgJ251bWJlcicsICAvLyBzdGFydFxuICAgICdudW1iZXInLCAgLy8gc3RvcFxuICAgICdudW1iZXInLCAgLy8gbnVtXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGluU3BhY2UoYXJnczoge2F0dHJzOiBMaW5TcGFjZUF0dHJzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YXR0cnMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3N0YXJ0LCBzdG9wLCBudW19ID0gYXR0cnM7XG5cbiAgLy8gVEZKUyBDcHUgYmFja2VuZCBzdXBwb3J0cyBudW0gYXMgYSBmbG9hdCBhbmQgcmV0dXJucyB1bmRldGVybWluZWQgdGVuc29yIGluXG4gIC8vIHRoYXQgY2FzZS4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIFRlbnNvckZsb3cgc3BlYywgbnVtIHNob3VsZCBiZSBhIGludGVnZXIuXG4gIGNvbnN0IG51bUludCA9IE1hdGguZmxvb3IobnVtKTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoW251bUludF0sICdmbG9hdDMyJyk7XG4gIHdhc21MaW5TcGFjZShiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQsIHN0YXJ0LCBzdG9wLCBudW1JbnQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbGluU3BhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTGluU3BhY2UsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGxpblNwYWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const logConfig = createUnaryKernelConfig(Log);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIExvZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IGxvZ0NvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoTG9nKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log1p } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const log1pConfig = createUnaryKernelConfig(Log1p);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nMXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Mb2cxcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIExvZzFwfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBsb2cxcENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoTG9nMXApO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalAnd } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const logicalAndConfig = createBinaryKernelConfig(LogicalAnd, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbEFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0xvZ2ljYWxBbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qix3QkFBd0IsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9naWNhbEFuZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhMb2dpY2FsQW5kLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalNot } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const logicalNotConfig = createUnaryKernelConfig(LogicalNot);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE5vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0xvZ2ljYWxOb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUMzQix1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIExvZ2ljYWxOb3R9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlVW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vdW5hcnlfa2VybmVsJztcblxuZXhwb3J0IGNvbnN0IGxvZ2ljYWxOb3RDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gIGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKExvZ2ljYWxOb3QpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalOr } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const logicalOrConfig = createBinaryKernelConfig(LogicalOr, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTG9naWNhbE9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQ3hCLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMb2dpY2FsT3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gZmFsc2U7XG5leHBvcnQgY29uc3QgbG9naWNhbE9yQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhMb2dpY2FsT3IsIHN1cHBvcnRzRnVsbEJyb2FkY2FzdCwgJ2Jvb2wnKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalXor } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const logicalXorConfig = createBinaryKernelConfig(LogicalXor, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbFhvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0xvZ2ljYWxYb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qix3QkFBd0IsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9naWNhbFhvcn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBsb2dpY2FsWG9yQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhMb2dpY2FsWG9yLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LRN } from '@tensorflow/tfjs-core';\nlet wasmLRN;\nfunction setup(backend) {\n wasmLRN = backend.wasm.cwrap(LRN, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // beta\n ]);\n}\nexport function lrn(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n if (x.dtype !== 'float32') {\n throw new Error('LRN error: x must have dtype float32');\n }\n const out = backend.makeOutput(x.shape, x.dtype);\n wasmLRN(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(out.dataId).id, \n /*channels=*/ x.shape[3], depthRadius, bias, alpha, beta);\n return out;\n}\nexport const lrnConfig = {\n kernelName: LRN,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: lrn\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTFJOLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsR0FBRyxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBSXJHLElBQUksT0FFa0QsQ0FBQztBQUV2RCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtRQUN0QyxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsT0FBTztLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUluQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0MsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7S0FDekQ7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpELE9BQU8sQ0FDSCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtJQUNwQyxhQUFhLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDdkIsV0FBVyxFQUNYLElBQUksRUFDSixLQUFLLEVBQ0wsSUFBSSxDQUNQLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMUk4sIExSTkF0dHJzLCBMUk5JbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtTFJOOiAoXG4gICAgeElkOiBudW1iZXIsIG91dElkOiBudW1iZXIsIGNoYW5uZWxzOiBudW1iZXIsIGRlcHRoUmFkaXVzOiBudW1iZXIsXG4gICAgYmlhczogbnVtYmVyLCBhbHBoYTogbnVtYmVyLCBiZXRhOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21MUk4gPSBiYWNrZW5kLndhc20uY3dyYXAoTFJOLCBudWxsLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgJ251bWJlcicsICAvLyBjaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gZGVwdGhSYWRpdXNcbiAgICAnbnVtYmVyJywgIC8vIGJpYXNcbiAgICAnbnVtYmVyJywgIC8vIGFscGhhXG4gICAgJ251bWJlcicsICAvLyBiZXRhXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbHJuKGFyZ3M6IHtcbiAgaW5wdXRzOiBMUk5JbnB1dHMsXG4gIGF0dHJzOiBMUk5BdHRycyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2RlcHRoUmFkaXVzLCBiaWFzLCBhbHBoYSwgYmV0YX0gPSBhdHRycztcblxuICBpZiAoeC5kdHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMUk4gZXJyb3I6IHggbXVzdCBoYXZlIGR0eXBlIGZsb2F0MzInKTtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCB4LmR0eXBlKTtcblxuICB3YXNtTFJOKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZCxcbiAgICAgIC8qY2hhbm5lbHM9Ki94LnNoYXBlWzNdLFxuICAgICAgZGVwdGhSYWRpdXMsXG4gICAgICBiaWFzLFxuICAgICAgYWxwaGEsXG4gICAgICBiZXRhLFxuICApO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbHJuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExSTixcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbHJuIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LRNGrad } from '@tensorflow/tfjs-core';\nlet wasmLRNGrad;\nfunction setup(backend) {\n wasmLRNGrad = backend.wasm.cwrap(LRNGrad, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // beta\n ]);\n}\nexport function lrnGrad(args) {\n const { inputs, backend, attrs } = args;\n const { x, y, dy } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n if (x.dtype !== 'float32' || y.dtype !== 'float32' ||\n dy.dtype !== 'float32') {\n throw new Error('LRNGrad error: x, y, and dy must have dtype float32');\n }\n const dx = backend.makeOutput(x.shape, x.dtype);\n wasmLRNGrad(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(y.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, \n /*channels=*/ dy.shape[3], depthRadius, bias, alpha, beta);\n return dx;\n}\nexport const lrnGradConfig = {\n kernelName: LRNGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: lrnGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL0xSTkdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixPQUFPLEVBQTBDLE1BQU0sdUJBQXVCLENBQUM7QUFJakgsSUFBSSxXQUV1RSxDQUFDO0FBRTVFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQzlDLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLE9BQU87S0FDbkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFJdkI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzFCLE1BQU0sRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0MsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVM7UUFDOUMsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxXQUFXLENBQ1AsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7SUFDbkMsYUFBYSxDQUFBLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3hCLFdBQVcsRUFDWCxJQUFJLEVBQ0osS0FBSyxFQUNMLElBQUksQ0FDUCxDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExSTkdyYWQsIExSTkdyYWRBdHRycywgTFJOR3JhZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxubGV0IHdhc21MUk5HcmFkOiAoXG4gICAgeElkOiBudW1iZXIsIHlJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGR4SWQ6IG51bWJlciwgY2hhbm5lbHM6IG51bWJlcixcbiAgICBkZXB0aFJhZGl1czogbnVtYmVyLCBiaWFzOiBudW1iZXIsIGFscGhhOiBudW1iZXIsIGJldGE6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbUxSTkdyYWQgPSBiYWNrZW5kLndhc20uY3dyYXAoTFJOR3JhZCwgbnVsbCwgW1xuICAgICdudW1iZXInLCAgLy8geElkXG4gICAgJ251bWJlcicsICAvLyB5SWRcbiAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAnbnVtYmVyJywgIC8vIGR4SWRcbiAgICAnbnVtYmVyJywgIC8vIGNoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBkZXB0aFJhZGl1c1xuICAgICdudW1iZXInLCAgLy8gYmlhc1xuICAgICdudW1iZXInLCAgLy8gYWxwaGFcbiAgICAnbnVtYmVyJywgIC8vIGJldGFcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBscm5HcmFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBMUk5HcmFkSW5wdXRzLFxuICBhdHRyczogTFJOR3JhZEF0dHJzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIHksIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge2RlcHRoUmFkaXVzLCBiaWFzLCBhbHBoYSwgYmV0YX0gPSBhdHRycztcblxuICBpZiAoeC5kdHlwZSAhPT0gJ2Zsb2F0MzInIHx8IHkuZHR5cGUgIT09ICdmbG9hdDMyJyB8fFxuICAgICAgZHkuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIHRocm93IG5ldyBFcnJvcignTFJOR3JhZCBlcnJvcjogeCwgeSwgYW5kIGR5IG11c3QgaGF2ZSBkdHlwZSBmbG9hdDMyJyk7XG4gIH1cblxuICBjb25zdCBkeCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCB4LmR0eXBlKTtcblxuICB3YXNtTFJOR3JhZChcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeS5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIC8qY2hhbm5lbHM9Ki9keS5zaGFwZVszXSxcbiAgICAgIGRlcHRoUmFkaXVzLFxuICAgICAgYmlhcyxcbiAgICAgIGFscGhhLFxuICAgICAgYmV0YSxcbiAgKTtcbiAgcmV0dXJuIGR4O1xufVxuXG5leHBvcnQgY29uc3QgbHJuR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMUk5HcmFkLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBscm5HcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Max, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nimport { CppDType } from './types';\nlet wasmMax;\nfunction setup(backend) {\n wasmMax = backend.wasm.cwrap(Max, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nfunction max(args) {\n const { backend, inputs, attrs } = args;\n const { reductionIndices: axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n input = transposed;\n inputId = transposedId;\n }\n const inputRank = input.shape.length;\n backend_util.assertAxesAreInnerMostDims('max', axes, inputRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, x.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmMax(inputId, CppDType[x.dtype], reduceSize, outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const maxConfig = {\n kernelName: Max,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: max\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLEdBQUcsRUFBbUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLE9BQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMvQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBZ0U7SUFFM0UsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2pELE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDbkIsT0FBTyxHQUFHLFlBQVksQ0FBQztLQUN4QjtJQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN4RDtJQUVELElBQUksa0JBQWtCLEVBQUU7UUFDdEIsb0NBQW9DO1FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsSUFBSSxRQUFRLEVBQUU7UUFDWixVQUFVO1FBQ1YsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUUsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7S0FDdEI7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heCwgTWF4QXR0cnMsIE1heElucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtwZXJtdXRlQXhlc0FuZFRyYW5zcG9zZX0gZnJvbSAnLi9rZXJuZWxfdXRpbHMnO1xuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtTWF4OiAoeElkOiBudW1iZXIsIGR0eXBlOiBudW1iZXIsIHJlZHVjZVNpemU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT5cbiAgICB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtTWF4ID0gYmFja2VuZC53YXNtLmN3cmFwKE1heCwgbnVsbCAvKnZvaWQqLywgW1xuICAgICdudW1iZXInLCAgLy8geF9pZFxuICAgICdudW1iZXInLCAgLy8gZHR5cGVcbiAgICAnbnVtYmVyJywgIC8vIHJlZHVjZV9zaXplXG4gICAgJ251bWJlcicsICAvLyBvdXRfaWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIG1heChhcmdzOiB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogTWF4SW5wdXRzLCBhdHRyczogTWF4QXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3JlZHVjdGlvbkluZGljZXM6IGF4aXMsIGtlZXBEaW1zfSA9IGF0dHJzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIGxldCBpbnB1dElkID0geElkO1xuICBsZXQgaW5wdXQgPSB4O1xuXG4gIGNvbnN0IHt0cmFuc3Bvc2VkLCBheGVzLCBvcmlnaW5hbEF4ZXMsIGlucHV0V2FzVHJhbnNwb3NlZH0gPVxuICAgICAgcGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2UoeCwgYXhpcywgYmFja2VuZCk7XG5cbiAgaWYgKGlucHV0V2FzVHJhbnNwb3NlZCkge1xuICAgIGNvbnN0IHRyYW5zcG9zZWRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh0cmFuc3Bvc2VkLmRhdGFJZCkuaWQ7XG4gICAgaW5wdXQgPSB0cmFuc3Bvc2VkO1xuICAgIGlucHV0SWQgPSB0cmFuc3Bvc2VkSWQ7XG4gIH1cblxuICBjb25zdCBpbnB1dFJhbmsgPSBpbnB1dC5zaGFwZS5sZW5ndGg7XG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnbWF4JywgYXhlcywgaW5wdXRSYW5rKTtcbiAgY29uc3QgW291dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMoaW5wdXQuc2hhcGUsIGF4ZXMpO1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsIHguZHR5cGUpO1xuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKGlucHV0LnNoYXBlKSAhPT0gMCkge1xuICAgIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICAgIHdhc21NYXgoaW5wdXRJZCwgQ3BwRFR5cGVbeC5kdHlwZV0sIHJlZHVjZVNpemUsIG91dElkKTtcbiAgfVxuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICAvLyBkaXNwb3NlIG9mIHRoZSB0cmFuc3Bvc2VkIHRlbnNvci5cbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRyYW5zcG9zZWQuZGF0YUlkKTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIC8vIHJlc2hhcGVcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXQuc2hhcGUsIG9yaWdpbmFsQXhlcyk7XG4gICAgb3V0LnNoYXBlID0gbmV3U2hhcGU7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbWF4Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1heCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbWF4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Maximum } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const maximumConfig = createBinaryKernelConfig(Maximum, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4aW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL01heGltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsd0JBQXdCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTWF4aW11bX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBtYXhpbXVtQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhNYXhpbXVtLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool, util } from '@tensorflow/tfjs-core';\nlet wasmMaxPool;\nfunction setup(backend) {\n wasmMaxPool = backend.wasm.cwrap(MaxPool, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction maxPool(args) {\n const { inputs, attrs, backend } = args;\n const x = inputs.x;\n const xId = backend.dataIdMap.get(x.dataId).id;\n // TF API supports int32 input. CPU and WebGL backend also support int32\n // input. WASM backend doesn't support it because it uses xnnpack which only\n // supports float32.\n //\n // Add the following assert only for the WASM backend instead of at core op\n // level.\n //\n // TODO: add support for int32 input.\n util.assert(x.dtype === 'float32', () => `Error in MaxPool: only float32 input is supported. Got ${x.dtype}.`);\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const padTop = convInfo.padInfo.top;\n const padRight = convInfo.padInfo.right;\n const padBottom = convInfo.padInfo.bottom;\n const padLeft = convInfo.padInfo.left;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const inputChannels = convInfo.inChannels;\n const outputChannels = convInfo.outChannels;\n if (convInfo.dataFormat !== 'channelsLast') {\n throw new Error(`wasm backend does not support dataFormat:'` +\n `${convInfo.dataFormat}'. Please use 'channelsLast'.`);\n }\n const out = backend.makeOutput(convInfo.outShape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmMaxPool(xId, x.shape[0], x.shape[1], x.shape[2], filterHeight, filterWidth, padTop, padRight, padBottom, padLeft, dilationHeight, dilationWidth, strideHeight, strideWidth, inputChannels, outputChannels, outId);\n return out;\n}\nexport const maxPoolConfig = {\n kernelName: MaxPool,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: maxPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL01heFBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsT0FBTyxFQUF5QyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxJQUFJLFdBS3FFLENBQUM7QUFFMUUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ3pELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQ1osSUFBd0U7SUFDMUUsTUFBTSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBRXRDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFhLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUUvQyx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0YsMkVBQTJFO0lBQzNFLFNBQVM7SUFDVCxFQUFFO0lBQ0YscUNBQXFDO0lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQ3JCLEdBQUcsRUFBRSxDQUNELDBEQUEwRCxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUU5RSxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN0QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDN0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUU1QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssY0FBYyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ1gsNENBQTRDO1lBQzVDLEdBQUcsUUFBUSxDQUFDLFVBQVUsK0JBQStCLENBQUMsQ0FBQztLQUM1RDtJQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRW5ELFdBQVcsQ0FDUCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDbEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQ25FLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sLCBNYXhQb29sQXR0cnMsIE1heFBvb2xJbnB1dHMsIFRlbnNvcjRELCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbU1heFBvb2w6IChcbiAgICB4SWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsIGlucHV0SGVpZ2h0OiBudW1iZXIsIGlucHV0V2lkdGg6IG51bWJlcixcbiAgICBmaWx0ZXJIZWlnaHQ6IG51bWJlciwgZmlsdGVyV2lkdGg6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZFJpZ2h0OiBudW1iZXIsXG4gICAgcGFkQm90dG9tOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlciwgZGlsYXRpb25IZWlnaHQ6IG51bWJlcixcbiAgICBkaWxhdGlvbldpZHRoOiBudW1iZXIsIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLFxuICAgIGlucHV0Q2hhbm5lbHM6IG51bWJlciwgb3V0cHV0Q2hhbm5lbHM6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbU1heFBvb2wgPSBiYWNrZW5kLndhc20uY3dyYXAoTWF4UG9vbCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gaW5wdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0V2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGZpbHRlckhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkUmlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHBhZEJvdHRvbVxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0Q2hhbm5lbHNcbiAgICAnbnVtYmVyJywgIC8vIG91dHB1dENoYW5uZWxzXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gbWF4UG9vbChcbiAgICBhcmdzOiB7aW5wdXRzOiBNYXhQb29sSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IE1heFBvb2xBdHRyc30pIHtcbiAgY29uc3Qge2lucHV0cywgYXR0cnMsIGJhY2tlbmR9ID0gYXJncztcblxuICBjb25zdCB4ID0gaW5wdXRzLnggYXMgVGVuc29yNEQ7XG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG5cbiAgLy8gVEYgQVBJIHN1cHBvcnRzIGludDMyIGlucHV0LiBDUFUgYW5kIFdlYkdMIGJhY2tlbmQgYWxzbyBzdXBwb3J0IGludDMyXG4gIC8vIGlucHV0LiBXQVNNIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IGl0IGJlY2F1c2UgaXQgdXNlcyB4bm5wYWNrIHdoaWNoIG9ubHlcbiAgLy8gc3VwcG9ydHMgZmxvYXQzMi5cbiAgLy9cbiAgLy8gQWRkIHRoZSBmb2xsb3dpbmcgYXNzZXJ0IG9ubHkgZm9yIHRoZSBXQVNNIGJhY2tlbmQgaW5zdGVhZCBvZiBhdCBjb3JlIG9wXG4gIC8vIGxldmVsLlxuICAvL1xuICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgaW50MzIgaW5wdXQuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeC5kdHlwZSA9PT0gJ2Zsb2F0MzInLFxuICAgICAgKCkgPT5cbiAgICAgICAgICBgRXJyb3IgaW4gTWF4UG9vbDogb25seSBmbG9hdDMyIGlucHV0IGlzIHN1cHBvcnRlZC4gR290ICR7eC5kdHlwZX0uYCk7XG5cbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHguc2hhcGUsIGZpbHRlclNpemUsIHN0cmlkZXMsIDEgLyogZGlsYXRpb25zICovLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSk7XG5cbiAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRUb3AgPSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgY29uc3QgcGFkUmlnaHQgPSBjb252SW5mby5wYWRJbmZvLnJpZ2h0O1xuICBjb25zdCBwYWRCb3R0b20gPSBjb252SW5mby5wYWRJbmZvLmJvdHRvbTtcbiAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgY29uc3QgaW5wdXRDaGFubmVscyA9IGNvbnZJbmZvLmluQ2hhbm5lbHM7XG4gIGNvbnN0IG91dHB1dENoYW5uZWxzID0gY29udkluZm8ub3V0Q2hhbm5lbHM7XG5cbiAgaWYgKGNvbnZJbmZvLmRhdGFGb3JtYXQgIT09ICdjaGFubmVsc0xhc3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgd2FzbSBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgZGF0YUZvcm1hdDonYCArXG4gICAgICAgIGAke2NvbnZJbmZvLmRhdGFGb3JtYXR9Jy4gUGxlYXNlIHVzZSAnY2hhbm5lbHNMYXN0Jy5gKTtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChjb252SW5mby5vdXRTaGFwZSwgJ2Zsb2F0MzInKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgd2FzbU1heFBvb2woXG4gICAgICB4SWQsIHguc2hhcGVbMF0sIHguc2hhcGVbMV0sIHguc2hhcGVbMl0sIGZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsXG4gICAgICBwYWRUb3AsIHBhZFJpZ2h0LCBwYWRCb3R0b20sIHBhZExlZnQsIGRpbGF0aW9uSGVpZ2h0LCBkaWxhdGlvbldpZHRoLFxuICAgICAgc3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgaW5wdXRDaGFubmVscywgb3V0cHV0Q2hhbm5lbHMsIG91dElkKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2xDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbWF4UG9vbCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool3D } from '@tensorflow/tfjs-core';\nlet wasmMaxPool3D;\nfunction setup(backend) {\n wasmMaxPool3D = backend.wasm.cwrap('MaxPool3D', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function maxPool3D(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dimRoundingMode, dataFormat } = attrs;\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, \n /*dilations=*/ 1, pad, dimRoundingMode, dataFormat);\n const out = backend.makeOutput(convInfo.outShape, x.dtype);\n wasmMaxPool3D(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(out.dataId).id, convInfo.batchSize, \n // Since Pool3D ops (AvgPool3D and MaxPool3D) support 3D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterDepth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return out;\n}\nexport const maxPool3DConfig = {\n kernelName: MaxPool3D,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: maxPool3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTWF4UG9vbDNELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLFNBQVMsRUFBOEMsTUFBTSx1QkFBdUIsQ0FBQztBQUlySSxJQUFJLGFBTzBELENBQUM7QUFFL0QsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7UUFDcEQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFVBQVU7S0FDdEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0RSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFBRSxPQUFPO0lBQ3hFLGNBQWMsQ0FBQSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNELGFBQWEsQ0FDVCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNwQyxRQUFRLENBQUMsU0FBUztJQUNsQix3RUFBd0U7SUFDeEUsZ0RBQWdEO0lBQ2hELGdCQUFnQixDQUFBLFFBQVEsQ0FBQyxVQUFVLEVBQ25DLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxTQUFTLEVBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQ2pCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxhQUFhLEVBQ3RCLFFBQVEsQ0FBQyxvQkFBb0IsRUFDN0IsUUFBUSxDQUFDLHFCQUFxQixFQUM5QixRQUFRLENBQUMsb0JBQW9CLEVBQzdCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hCLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sM0QsIE1heFBvb2wzREF0dHJzLCBNYXhQb29sM0RJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtTWF4UG9vbDNEOiAoXG4gICAgeElkOiBudW1iZXIsIG91dElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLCBjaGFubmVsU2l6ZTogbnVtYmVyLFxuICAgIGluRGVwdGg6IG51bWJlciwgaW5IZWlnaHQ6IG51bWJlciwgaW5XaWR0aDogbnVtYmVyLCBvdXREZXB0aDogbnVtYmVyLFxuICAgIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLCBzdHJpZGVEZXB0aDogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCBkaWxhdGlvbkRlcHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJEZXB0aDogbnVtYmVyLFxuICAgIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLFxuICAgIHBhZEZyb250OiBudW1iZXIsIHBhZFRvcDogbnVtYmVyLCBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21NYXhQb29sM0QgPSBiYWNrZW5kLndhc20uY3dyYXAoJ01heFBvb2wzRCcsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJEZXB0aFxuICAgICdudW1iZXInLCAgLy8gZWZmZWN0aXZlRmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgLy8gcGFkRnJvbnRcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heFBvb2wzRChhcmdzOiB7XG4gIGlucHV0czogTWF4UG9vbDNESW5wdXRzLFxuICBhdHRyczogTWF4UG9vbDNEQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZGF0YUZvcm1hdH0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDNESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIC8qZGlsYXRpb25zPSovMSwgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXQpO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuXG4gIHdhc21NYXhQb29sM0QoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkLFxuICAgICAgY29udkluZm8uYmF0Y2hTaXplLFxuICAgICAgLy8gU2luY2UgUG9vbDNEIG9wcyAoQXZnUG9vbDNEIGFuZCBNYXhQb29sM0QpIHN1cHBvcnQgM0QgZmlsdGVyIG9ubHksIGluXG4gICAgICAvLyBjaGFubmVscyBzaG91bGQgYWx3YXlzIGVxdWFsIHRvIG91dCBjaGFubmVscy5cbiAgICAgIC8qY2hhbm5lbFNpemU9Ki9jb252SW5mby5pbkNoYW5uZWxzLFxuICAgICAgY29udkluZm8uaW5EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dERlcHRoLFxuICAgICAgY29udkluZm8ub3V0SGVpZ2h0LFxuICAgICAgY29udkluZm8ub3V0V2lkdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVEZXB0aCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZVdpZHRoLFxuICAgICAgY29udkluZm8uZGlsYXRpb25EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LFxuICAgICAgY29udkluZm8uZGlsYXRpb25XaWR0aCxcbiAgICAgIGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoLFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmZyb250LFxuICAgICAgY29udkluZm8ucGFkSW5mby50b3AsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sM0RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbDNELFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBtYXhQb29sM0QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool3DGrad } from '@tensorflow/tfjs-core';\nlet wasmMaxPool3DGrad;\nfunction setup(backend) {\n wasmMaxPool3DGrad = backend.wasm.cwrap('MaxPool3DGrad', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function maxPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool3DInfo(input.shape, filterSize, strides, /*dilations=*/ 1, pad, dimRoundingMode);\n const dx = backend.makeOutput(input.shape, input.dtype);\n wasmMaxPool3DGrad(backend.dataIdMap.get(input.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, convInfo.batchSize, \n // Since Pool3D ops (MaxPool3D and MaxPool3D) support 3D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inDepth, convInfo.inHeight, convInfo.inWidth, convInfo.outDepth, convInfo.outHeight, convInfo.outWidth, convInfo.strideDepth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationDepth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterDepth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.front, convInfo.padInfo.top, convInfo.padInfo.left);\n return dx;\n}\nexport const maxPool3DGradConfig = {\n kernelName: MaxPool3DGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: maxPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL01heFBvb2wzREdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsYUFBYSxFQUFzRCxNQUFNLHVCQUF1QixDQUFDO0FBSWpKLElBQUksaUJBTzBELENBQUM7QUFFL0QsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRTtRQUM1RCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLFVBQVU7S0FDdEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFJN0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUxRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLEtBQUssQ0FBQyxLQUFpRCxFQUFFLFVBQVUsRUFDbkUsT0FBTyxFQUFFLGNBQWMsQ0FBQSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsaUJBQWlCLENBQ2IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDdEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbkMsUUFBUSxDQUFDLFNBQVM7SUFDbEIsd0VBQXdFO0lBQ3hFLGdEQUFnRDtJQUNoRCxnQkFBZ0IsQ0FBQSxRQUFRLENBQUMsVUFBVSxFQUNuQyxRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsY0FBYyxFQUN2QixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMsb0JBQW9CLEVBQzdCLFFBQVEsQ0FBQyxxQkFBcUIsRUFDOUIsUUFBUSxDQUFDLG9CQUFvQixFQUM3QixRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFDdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QixDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sM0RHcmFkLCBNYXhQb29sM0RHcmFkQXR0cnMsIE1heFBvb2wzREdyYWRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtTWF4UG9vbDNER3JhZDogKFxuICAgIHhJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGR4SWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsXG4gICAgY2hhbm5lbFNpemU6IG51bWJlciwgaW5EZXB0aDogbnVtYmVyLCBpbkhlaWdodDogbnVtYmVyLCBpbldpZHRoOiBudW1iZXIsXG4gICAgb3V0RGVwdGg6IG51bWJlciwgb3V0SGVpZ2h0OiBudW1iZXIsIG91dFdpZHRoOiBudW1iZXIsIHN0cmlkZURlcHRoOiBudW1iZXIsXG4gICAgc3RyaWRlSGVpZ2h0OiBudW1iZXIsIHN0cmlkZVdpZHRoOiBudW1iZXIsIGRpbGF0aW9uRGVwdGg6IG51bWJlcixcbiAgICBkaWxhdGlvbkhlaWdodDogbnVtYmVyLCBkaWxhdGlvbldpZHRoOiBudW1iZXIsIGVmZmVjdGl2ZUZpbHRlckRlcHRoOiBudW1iZXIsXG4gICAgZWZmZWN0aXZlRmlsdGVySGVpZ2h0OiBudW1iZXIsIGVmZmVjdGl2ZUZpbHRlcldpZHRoOiBudW1iZXIsXG4gICAgcGFkRnJvbnQ6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbU1heFBvb2wzREdyYWQgPSBiYWNrZW5kLndhc20uY3dyYXAoJ01heFBvb2wzREdyYWQnLCBudWxsLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAnbnVtYmVyJywgIC8vIGR4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBvdXREZXB0aFxuICAgICdudW1iZXInLCAgLy8gb3V0SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICdudW1iZXInLCAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uRGVwdGhcbiAgICAnbnVtYmVyJywgIC8vIGRpbGF0aW9uSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJEZXB0aFxuICAgICdudW1iZXInLCAgLy8gZWZmZWN0aXZlRmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgLy8gcGFkRnJvbnRcbiAgICAnbnVtYmVyJywgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgLy8gcGFkTGVmdFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heFBvb2wzREdyYWQoYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2wzREdyYWRJbnB1dHMsXG4gIGF0dHJzOiBNYXhQb29sM0RHcmFkQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0fSA9IGlucHV0cztcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sM0RJbmZvKFxuICAgICAgaW5wdXQuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSxcbiAgICAgIHN0cmlkZXMsIC8qZGlsYXRpb25zPSovMSwgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBkeCA9IGJhY2tlbmQubWFrZU91dHB1dChpbnB1dC5zaGFwZSwgaW5wdXQuZHR5cGUpO1xuXG4gIHdhc21NYXhQb29sM0RHcmFkKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGlucHV0LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHkuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChkeC5kYXRhSWQpLmlkLFxuICAgICAgY29udkluZm8uYmF0Y2hTaXplLFxuICAgICAgLy8gU2luY2UgUG9vbDNEIG9wcyAoTWF4UG9vbDNEIGFuZCBNYXhQb29sM0QpIHN1cHBvcnQgM0QgZmlsdGVyIG9ubHksIGluXG4gICAgICAvLyBjaGFubmVscyBzaG91bGQgYWx3YXlzIGVxdWFsIHRvIG91dCBjaGFubmVscy5cbiAgICAgIC8qY2hhbm5lbFNpemU9Ki9jb252SW5mby5pbkNoYW5uZWxzLFxuICAgICAgY29udkluZm8uaW5EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dERlcHRoLFxuICAgICAgY29udkluZm8ub3V0SGVpZ2h0LFxuICAgICAgY29udkluZm8ub3V0V2lkdGgsXG4gICAgICBjb252SW5mby5zdHJpZGVEZXB0aCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZVdpZHRoLFxuICAgICAgY29udkluZm8uZGlsYXRpb25EZXB0aCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0LFxuICAgICAgY29udkluZm8uZGlsYXRpb25XaWR0aCxcbiAgICAgIGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoLFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmZyb250LFxuICAgICAgY29udkluZm8ucGFkSW5mby50b3AsXG4gICAgICBjb252SW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBkeDtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2wzREdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbDNER3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbWF4UG9vbDNER3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPoolGrad } from '@tensorflow/tfjs-core';\nlet wasmMaxPoolGrad;\nfunction setup(backend) {\n wasmMaxPoolGrad = backend.wasm.cwrap('MaxPoolGrad', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function maxPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool2DInfo(input.shape, filterSize, strides, \n /*dilations=*/ 1, pad, dimRoundingMode);\n const dx = backend.makeOutput(input.shape, input.dtype);\n wasmMaxPoolGrad(backend.dataIdMap.get(input.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, convInfo.batchSize, \n // Since Pool ops (MaxPool and MaxPool) support 2D filter only, in\n // channels should always equal to out channels.\n /*channelSize=*/ convInfo.inChannels, convInfo.inHeight, convInfo.inWidth, convInfo.outHeight, convInfo.outWidth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.top, convInfo.padInfo.left);\n return dx;\n}\nexport const maxPoolGradConfig = {\n kernelName: MaxPoolGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: maxPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9NYXhQb29sR3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixXQUFXLEVBQWtELE1BQU0sdUJBQXVCLENBQUM7QUFJM0ksSUFBSSxlQU13QixDQUFDO0FBRTdCLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFO1FBQ3hELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsVUFBVTtLQUN0QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUkzQjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsS0FBSyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU87SUFDcEUsY0FBYyxDQUFBLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDM0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxlQUFlLENBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDdEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDbkMsUUFBUSxDQUFDLFNBQVM7SUFDbEIsa0VBQWtFO0lBQ2xFLGdEQUFnRDtJQUNoRCxnQkFBZ0IsQ0FBQSxRQUFRLENBQUMsVUFBVSxFQUNuQyxRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsY0FBYyxFQUN2QixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMscUJBQXFCLEVBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QixDQUFDO0lBQ0YsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sR3JhZCwgTWF4UG9vbEdyYWRBdHRycywgTWF4UG9vbEdyYWRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtTWF4UG9vbEdyYWQ6IChcbiAgICB4SWQ6IG51bWJlciwgZHlJZDogbnVtYmVyLCBkeElkOiBudW1iZXIsIGJhdGNoU2l6ZTogbnVtYmVyLFxuICAgIGNoYW5uZWxTaXplOiBudW1iZXIsIGluSGVpZ2h0OiBudW1iZXIsIGluV2lkdGg6IG51bWJlciwgb3V0SGVpZ2h0OiBudW1iZXIsXG4gICAgb3V0V2lkdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsIHN0cmlkZVdpZHRoOiBudW1iZXIsXG4gICAgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLFxuICAgIGVmZmVjdGl2ZUZpbHRlckhlaWdodDogbnVtYmVyLCBlZmZlY3RpdmVGaWx0ZXJXaWR0aDogbnVtYmVyLCBwYWRUb3A6IG51bWJlcixcbiAgICBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21NYXhQb29sR3JhZCA9IGJhY2tlbmQud2FzbS5jd3JhcCgnTWF4UG9vbEdyYWQnLCBudWxsLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAnbnVtYmVyJywgIC8vIGR4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoU2l6ZVxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbFNpemVcbiAgICAnbnVtYmVyJywgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbldpZHRoXG4gICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIG91dFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBzdHJpZGVIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgJ251bWJlcicsICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25XaWR0aFxuICAgICdudW1iZXInLCAgLy8gZWZmZWN0aXZlRmlsdGVySGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgLy8gcGFkVG9wXG4gICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbEdyYWQoYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2xHcmFkSW5wdXRzLFxuICBhdHRyczogTWF4UG9vbEdyYWRBdHRycyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkeSwgaW5wdXR9ID0gaW5wdXRzO1xuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBkaW1Sb3VuZGluZ01vZGV9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wyREluZm8oXG4gICAgICBpbnB1dC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgIC8qZGlsYXRpb25zPSovMSwgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCBkeCA9IGJhY2tlbmQubWFrZU91dHB1dChpbnB1dC5zaGFwZSwgaW5wdXQuZHR5cGUpO1xuXG4gIHdhc21NYXhQb29sR3JhZChcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbnB1dC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIC8vIFNpbmNlIFBvb2wgb3BzIChNYXhQb29sIGFuZCBNYXhQb29sKSBzdXBwb3J0IDJEIGZpbHRlciBvbmx5LCBpblxuICAgICAgLy8gY2hhbm5lbHMgc2hvdWxkIGFsd2F5cyBlcXVhbCB0byBvdXQgY2hhbm5lbHMuXG4gICAgICAvKmNoYW5uZWxTaXplPSovY29udkluZm8uaW5DaGFubmVscyxcbiAgICAgIGNvbnZJbmZvLmluSGVpZ2h0LFxuICAgICAgY29udkluZm8uaW5XaWR0aCxcbiAgICAgIGNvbnZJbmZvLm91dEhlaWdodCxcbiAgICAgIGNvbnZJbmZvLm91dFdpZHRoLFxuICAgICAgY29udkluZm8uc3RyaWRlSGVpZ2h0LFxuICAgICAgY29udkluZm8uc3RyaWRlV2lkdGgsXG4gICAgICBjb252SW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmRpbGF0aW9uV2lkdGgsXG4gICAgICBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQsXG4gICAgICBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJXaWR0aCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8udG9wLFxuICAgICAgY29udkluZm8ucGFkSW5mby5sZWZ0LFxuICApO1xuICByZXR1cm4gZHg7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNYXhQb29sR3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbWF4UG9vbEdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPoolWithArgmax, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmMaxPoolWithArgmax;\nfunction setup(backend) {\n wasmMaxPoolWithArgmax = backend.wasm.cwrap('MaxPoolWithArgmax', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'boolean',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // padLeft\n ]);\n}\nexport function maxPoolWithArgmax(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, includeBatchInIndex } = attrs;\n util.assert(x.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${x.shape.length}.`);\n const dilations = [1, 1];\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, [1, 1], pad);\n const pooled = backend.makeOutput(convInfo.outShape, x.dtype);\n const indexes = backend.makeOutput(convInfo.outShape, 'int32');\n wasmMaxPoolWithArgmax(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(pooled.dataId).id, backend.dataIdMap.get(indexes.dataId).id, CppDType[x.dtype], includeBatchInIndex, convInfo.batchSize, convInfo.inChannels, convInfo.inHeight, convInfo.inWidth, convInfo.outHeight, convInfo.outWidth, convInfo.strideHeight, convInfo.strideWidth, convInfo.dilationHeight, convInfo.dilationWidth, convInfo.effectiveFilterHeight, convInfo.effectiveFilterWidth, convInfo.padInfo.top, convInfo.padInfo.left);\n return [pooled, indexes];\n}\nexport const maxPoolWithArgmaxConfig = {\n kernelName: MaxPoolWithArgmax,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: maxPoolWithArgmax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbFdpdGhBcmdtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9NYXhQb29sV2l0aEFyZ21heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixpQkFBaUIsRUFBK0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbkssT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLHFCQU1zRSxDQUFDO0FBRTNFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUNwRSxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUksVUFBVTtLQUN2QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBSWpDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTlELElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUNwQixHQUFHLEVBQUUsQ0FBQyx1REFDRixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0IsTUFBTSxTQUFTLEdBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxNQUFNLENBQ1AsWUFBWSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFDL0QsR0FBRyxFQUFFLENBQUMsMkRBQTJEO1FBQzdELGVBQWUsT0FBTyxtQkFBbUIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUUvRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUF5QyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3hFLEdBQUcsQ0FBQyxDQUFDO0lBRVQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFL0QscUJBQXFCLENBQ2pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ2xDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ2pCLG1CQUFtQixFQUNuQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsVUFBVSxFQUNuQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsT0FBTyxFQUNoQixRQUFRLENBQUMsU0FBUyxFQUNsQixRQUFRLENBQUMsUUFBUSxFQUNqQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixRQUFRLENBQUMsY0FBYyxFQUN2QixRQUFRLENBQUMsYUFBYSxFQUN0QixRQUFRLENBQUMscUJBQXFCLEVBQzlCLFFBQVEsQ0FBQyxvQkFBb0IsRUFDN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QixDQUFDO0lBQ0YsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQWlCO0lBQ25ELFVBQVUsRUFBRSxpQkFBaUI7SUFDN0IsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLGlCQUEwQztDQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sV2l0aEFyZ21heCwgTWF4UG9vbFdpdGhBcmdtYXhBdHRycywgTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbU1heFBvb2xXaXRoQXJnbWF4OiAoXG4gICAgeElkOiBudW1iZXIsIHBvb2xlZElkOiBudW1iZXIsIGluZGV4ZXNJZDogbnVtYmVyLCBkdHlwZTogbnVtYmVyLFxuICAgIGluY2x1ZGVCYXRjaEluZGV4OiBib29sZWFuLCBiYXRjaFNpemU6IG51bWJlciwgY2hhbm5lbFNpemU6IG51bWJlcixcbiAgICBpbkhlaWdodDogbnVtYmVyLCBpbldpZHRoOiBudW1iZXIsIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLFxuICAgIHN0cmlkZUhlaWdodDogbnVtYmVyLCBzdHJpZGVXaWR0aDogbnVtYmVyLCBkaWxhdGlvbkhlaWdodDogbnVtYmVyLFxuICAgIGRpbGF0aW9uV2lkdGg6IG51bWJlciwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0OiBudW1iZXIsXG4gICAgZWZmZWN0aXZlRmlsdGVyV2lkdGg6IG51bWJlciwgcGFkVG9wOiBudW1iZXIsIHBhZExlZnQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbU1heFBvb2xXaXRoQXJnbWF4ID0gYmFja2VuZC53YXNtLmN3cmFwKCdNYXhQb29sV2l0aEFyZ21heCcsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgICAvLyB4SWRcbiAgICAnbnVtYmVyJywgICAvLyBwb29sZWRJZFxuICAgICdudW1iZXInLCAgIC8vIGluZGV4ZXNJZFxuICAgICdudW1iZXInLCAgIC8vIGR0eXBlXG4gICAgJ2Jvb2xlYW4nLCAgLy8gaW5jbHVkZUJhdGNoSW5kZXhcbiAgICAnbnVtYmVyJywgICAvLyBiYXRjaFNpemVcbiAgICAnbnVtYmVyJywgICAvLyBjaGFubmVsU2l6ZVxuICAgICdudW1iZXInLCAgIC8vIGluSGVpZ2h0XG4gICAgJ251bWJlcicsICAgLy8gaW5XaWR0aFxuICAgICdudW1iZXInLCAgIC8vIG91dEhlaWdodFxuICAgICdudW1iZXInLCAgIC8vIG91dFdpZHRoXG4gICAgJ251bWJlcicsICAgLy8gc3RyaWRlSGVpZ2h0XG4gICAgJ251bWJlcicsICAgLy8gc3RyaWRlV2lkdGhcbiAgICAnbnVtYmVyJywgICAvLyBkaWxhdGlvbkhlaWdodFxuICAgICdudW1iZXInLCAgIC8vIGRpbGF0aW9uV2lkdGhcbiAgICAnbnVtYmVyJywgICAvLyBlZmZlY3RpdmVGaWx0ZXJIZWlnaHRcbiAgICAnbnVtYmVyJywgICAvLyBlZmZlY3RpdmVGaWx0ZXJXaWR0aFxuICAgICdudW1iZXInLCAgIC8vIHBhZFRvcFxuICAgICdudW1iZXInLCAgIC8vIHBhZExlZnRcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXhQb29sV2l0aEFyZ21heChhcmdzOiB7XG4gIGlucHV0czogTWF4UG9vbFdpdGhBcmdtYXhJbnB1dHMsXG4gIGF0dHJzOiBNYXhQb29sV2l0aEFyZ21heEF0dHJzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbn0pOiBUZW5zb3JJbmZvW10ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGluY2x1ZGVCYXRjaEluSW5kZXh9ID0gYXR0cnM7XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICB4LnNoYXBlLmxlbmd0aCA9PT0gNCxcbiAgICAgICgpID0+IGBFcnJvciBpbiBtYXhQb29sOiBpbnB1dCBtdXN0IGJlIHJhbmsgNCBidXQgZ290IHJhbmsgJHtcbiAgICAgICAgICB4LnNoYXBlLmxlbmd0aH0uYCk7XG4gIGNvbnN0IGRpbGF0aW9uczogW251bWJlciwgbnVtYmVyXSA9IFsxLCAxXTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBiYWNrZW5kX3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsIGRpbGF0aW9ucyksXG4gICAgICAoKSA9PiAnRXJyb3IgaW4gbWF4UG9vbDogRWl0aGVyIHN0cmlkZXMgb3IgZGlsYXRpb25zIG11c3QgYmUgMS4gJyArXG4gICAgICAgICAgYEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHtkaWxhdGlvbnN9J2ApO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVQb29sMkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcywgWzEsIDFdLFxuICAgICAgcGFkKTtcblxuICBjb25zdCBwb29sZWQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCBpbmRleGVzID0gYmFja2VuZC5tYWtlT3V0cHV0KGNvbnZJbmZvLm91dFNoYXBlLCAnaW50MzInKTtcblxuICB3YXNtTWF4UG9vbFdpdGhBcmdtYXgoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHBvb2xlZC5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGluZGV4ZXMuZGF0YUlkKS5pZCxcbiAgICAgIENwcERUeXBlW3guZHR5cGVdLFxuICAgICAgaW5jbHVkZUJhdGNoSW5JbmRleCxcbiAgICAgIGNvbnZJbmZvLmJhdGNoU2l6ZSxcbiAgICAgIGNvbnZJbmZvLmluQ2hhbm5lbHMsXG4gICAgICBjb252SW5mby5pbkhlaWdodCxcbiAgICAgIGNvbnZJbmZvLmluV2lkdGgsXG4gICAgICBjb252SW5mby5vdXRIZWlnaHQsXG4gICAgICBjb252SW5mby5vdXRXaWR0aCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGNvbnZJbmZvLnN0cmlkZVdpZHRoLFxuICAgICAgY29udkluZm8uZGlsYXRpb25IZWlnaHQsXG4gICAgICBjb252SW5mby5kaWxhdGlvbldpZHRoLFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0LFxuICAgICAgY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGgsXG4gICAgICBjb252SW5mby5wYWRJbmZvLnRvcCxcbiAgICAgIGNvbnZJbmZvLnBhZEluZm8ubGVmdCxcbiAgKTtcbiAgcmV0dXJuIFtwb29sZWQsIGluZGV4ZXNdO1xufVxuXG5leHBvcnQgY29uc3QgbWF4UG9vbFdpdGhBcmdtYXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbFdpdGhBcmdtYXgsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2xXaXRoQXJnbWF4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Mean, util } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nlet wasmMean;\nfunction setup(backend) {\n wasmMean =\n backend.wasm.cwrap(Mean, null /*void*/, ['number, number, number']);\n}\nexport function mean(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n let reductionAxes = axes;\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n if (transposedId !== xId) {\n // transpose was not a no-op. We will need to dispose of this\n // once we are done.\n input = transposed;\n inputId = transposedId;\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, input.shape.length);\n }\n }\n backend_util.assertAxesAreInnerMostDims('mean', reductionAxes, input.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, reductionAxes);\n const reduceSize = util.sizeFromShape(reduceShape);\n let castedInput = input;\n if (input.dtype !== 'float32') {\n castedInput =\n cast({ backend, inputs: { x: input }, attrs: { dtype: 'float32' } });\n inputId = backend.dataIdMap.get(castedInput.dataId).id;\n }\n const out = backend.makeOutput(outShape, 'float32');\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmMean(inputId, reduceSize, outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n if (input.dtype !== 'float32') {\n backend.disposeData(castedInput.dataId);\n }\n return out;\n}\nexport const meanConfig = {\n kernelName: Mean,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: mean\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL01lYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsSUFBSSxFQUFxQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1SCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELElBQUksUUFBa0UsQ0FBQztBQUV2RSxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxRQUFRO1FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELE1BQU0sVUFBVSxJQUFJLENBQ2hCLElBQWtFO0lBRXBFLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVkLE1BQU0sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBQyxHQUN0RCx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTlDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakUsSUFBSSxZQUFZLEtBQUssR0FBRyxFQUFFO1lBQ3hCLDZEQUE2RDtZQUM3RCxvQkFBb0I7WUFDcEIsS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUNuQixPQUFPLEdBQUcsWUFBWSxDQUFDO1lBQ3ZCLGFBQWEsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQ3pDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztLQUNGO0lBRUQsWUFBWSxDQUFDLDBCQUEwQixDQUNuQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM3QixXQUFXO1lBQ1AsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hEO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN0QztJQUVELElBQUksa0JBQWtCLEVBQUU7UUFDdEIsb0NBQW9DO1FBQ3BDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsSUFBSSxRQUFRLEVBQUU7UUFDWixVQUFVO1FBQ1YsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUUsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7S0FDdEI7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTWVhbiwgTWVhbkF0dHJzLCBNZWFuSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuaW1wb3J0IHtjYXN0fSBmcm9tICcuL0Nhc3QnO1xuXG5pbXBvcnQge3Blcm11dGVBeGVzQW5kVHJhbnNwb3NlfSBmcm9tICcuL2tlcm5lbF91dGlscyc7XG5cbmxldCB3YXNtTWVhbjogKHhJZDogbnVtYmVyLCByZWR1Y2VTaXplOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21NZWFuID1cbiAgICAgIGJhY2tlbmQud2FzbS5jd3JhcChNZWFuLCBudWxsIC8qdm9pZCovLCBbJ251bWJlciwgbnVtYmVyLCBudW1iZXInXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZWFuKFxuICAgIGFyZ3M6IHtiYWNrZW5kOiBCYWNrZW5kV2FzbSwgaW5wdXRzOiBNZWFuSW5wdXRzLCBhdHRyczogTWVhbkF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBsZXQgaW5wdXRJZCA9IHhJZDtcbiAgbGV0IGlucHV0ID0geDtcblxuICBjb25zdCB7dHJhbnNwb3NlZCwgYXhlcywgb3JpZ2luYWxBeGVzLCBpbnB1dFdhc1RyYW5zcG9zZWR9ID1cbiAgICAgIHBlcm11dGVBeGVzQW5kVHJhbnNwb3NlKHgsIGF4aXMsIGJhY2tlbmQpO1xuXG4gIGxldCByZWR1Y3Rpb25BeGVzID0gYXhlcztcbiAgaWYgKGlucHV0V2FzVHJhbnNwb3NlZCkge1xuICAgIGNvbnN0IHRyYW5zcG9zZWRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh0cmFuc3Bvc2VkLmRhdGFJZCkuaWQ7XG4gICAgaWYgKHRyYW5zcG9zZWRJZCAhPT0geElkKSB7XG4gICAgICAvLyB0cmFuc3Bvc2Ugd2FzIG5vdCBhIG5vLW9wLiBXZSB3aWxsIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGlzXG4gICAgICAvLyBvbmNlIHdlIGFyZSBkb25lLlxuICAgICAgaW5wdXQgPSB0cmFuc3Bvc2VkO1xuICAgICAgaW5wdXRJZCA9IHRyYW5zcG9zZWRJZDtcbiAgICAgIHJlZHVjdGlvbkF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhcbiAgICAgICAgICByZWR1Y3Rpb25BeGVzLmxlbmd0aCwgaW5wdXQuc2hhcGUubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoXG4gICAgICAnbWVhbicsIHJlZHVjdGlvbkF4ZXMsIGlucHV0LnNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LnNoYXBlLCByZWR1Y3Rpb25BeGVzKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG4gIGxldCBjYXN0ZWRJbnB1dCA9IGlucHV0O1xuICBpZiAoaW5wdXQuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZElucHV0ID1cbiAgICAgICAgY2FzdCh7YmFja2VuZCwgaW5wdXRzOiB7eDogaW5wdXR9LCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG4gICAgaW5wdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChjYXN0ZWRJbnB1dC5kYXRhSWQpLmlkO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCAnZmxvYXQzMicpO1xuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKGlucHV0LnNoYXBlKSAhPT0gMCkge1xuICAgIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICAgIHdhc21NZWFuKGlucHV0SWQsIHJlZHVjZVNpemUsIG91dElkKTtcbiAgfVxuXG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICAvLyBkaXNwb3NlIG9mIHRoZSB0cmFuc3Bvc2VkIHRlbnNvci5cbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHRyYW5zcG9zZWQuZGF0YUlkKTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIC8vIHJlc2hhcGVcbiAgICBjb25zdCBuZXdTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXQuc2hhcGUsIG9yaWdpbmFsQXhlcyk7XG4gICAgb3V0LnNoYXBlID0gbmV3U2hhcGU7XG4gIH1cblxuICBpZiAoaW5wdXQuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEoY2FzdGVkSW5wdXQuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBtZWFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1lYW4sXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IG1lYW4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Min, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nimport { CppDType } from './types';\nlet wasmMin;\nfunction setup(backend) {\n wasmMin = backend.wasm.cwrap(Min, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nfunction min(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n if (transposedId !== xId) {\n // transpose was not a no-op. We will need to dispose of this\n // once we are done.\n input = transposed;\n inputId = transposedId;\n }\n }\n const inputRank = input.shape.length;\n backend_util.assertAxesAreInnerMostDims('min', axes, inputRank);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, input.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmMin(inputId, CppDType[x.dtype], reduceSize, outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const minConfig = {\n kernelName: Min,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: min\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLEdBQUcsRUFBbUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLE9BQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMvQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBZ0U7SUFFM0UsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLElBQUksWUFBWSxLQUFLLEdBQUcsRUFBRTtZQUN4Qiw2REFBNkQ7WUFDN0Qsb0JBQW9CO1lBQ3BCLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDbkIsT0FBTyxHQUFHLFlBQVksQ0FBQztTQUN4QjtLQUNGO0lBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFckMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FDekIsWUFBWSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsSUFBSSxrQkFBa0IsRUFBRTtRQUN0QixvQ0FBb0M7UUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFFRCxJQUFJLFFBQVEsRUFBRTtRQUNaLFVBQVU7UUFDVixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RSxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztLQUN0QjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsR0FBNEI7Q0FDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTWluLCBNaW5BdHRycywgTWluSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3Blcm11dGVBeGVzQW5kVHJhbnNwb3NlfSBmcm9tICcuL2tlcm5lbF91dGlscyc7XG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21NaW46ICh4SWQ6IG51bWJlciwgZHR5cGU6IG51bWJlciwgcmVkdWNlU2l6ZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PlxuICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21NaW4gPSBiYWNrZW5kLndhc20uY3dyYXAoTWluLCBudWxsIC8qdm9pZCovLCBbXG4gICAgJ251bWJlcicsICAvLyB4X2lkXG4gICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICdudW1iZXInLCAgLy8gcmVkdWNlX3NpemVcbiAgICAnbnVtYmVyJywgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gbWluKGFyZ3M6IHtiYWNrZW5kOiBCYWNrZW5kV2FzbSwgaW5wdXRzOiBNaW5JbnB1dHMsIGF0dHJzOiBNaW5BdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YXhpcywga2VlcERpbXN9ID0gYXR0cnM7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgbGV0IGlucHV0SWQgPSB4SWQ7XG4gIGxldCBpbnB1dCA9IHg7XG5cbiAgY29uc3Qge3RyYW5zcG9zZWQsIGF4ZXMsIG9yaWdpbmFsQXhlcywgaW5wdXRXYXNUcmFuc3Bvc2VkfSA9XG4gICAgICBwZXJtdXRlQXhlc0FuZFRyYW5zcG9zZSh4LCBheGlzLCBiYWNrZW5kKTtcblxuICBpZiAoaW5wdXRXYXNUcmFuc3Bvc2VkKSB7XG4gICAgY29uc3QgdHJhbnNwb3NlZElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHRyYW5zcG9zZWQuZGF0YUlkKS5pZDtcbiAgICBpZiAodHJhbnNwb3NlZElkICE9PSB4SWQpIHtcbiAgICAgIC8vIHRyYW5zcG9zZSB3YXMgbm90IGEgbm8tb3AuIFdlIHdpbGwgbmVlZCB0byBkaXNwb3NlIG9mIHRoaXNcbiAgICAgIC8vIG9uY2Ugd2UgYXJlIGRvbmUuXG4gICAgICBpbnB1dCA9IHRyYW5zcG9zZWQ7XG4gICAgICBpbnB1dElkID0gdHJhbnNwb3NlZElkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlucHV0UmFuayA9IGlucHV0LnNoYXBlLmxlbmd0aDtcblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ21pbicsIGF4ZXMsIGlucHV0UmFuayk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LnNoYXBlLCBheGVzKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCBpbnB1dC5kdHlwZSk7XG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoaW5wdXQuc2hhcGUpICE9PSAwKSB7XG4gICAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gICAgd2FzbU1pbihpbnB1dElkLCBDcHBEVHlwZVt4LmR0eXBlXSwgcmVkdWNlU2l6ZSwgb3V0SWQpO1xuICB9XG5cbiAgaWYgKGlucHV0V2FzVHJhbnNwb3NlZCkge1xuICAgIC8vIGRpc3Bvc2Ugb2YgdGhlIHRyYW5zcG9zZWQgdGVuc29yLlxuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEodHJhbnNwb3NlZC5kYXRhSWQpO1xuICB9XG5cbiAgaWYgKGtlZXBEaW1zKSB7XG4gICAgLy8gcmVzaGFwZVxuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG91dC5zaGFwZSwgb3JpZ2luYWxBeGVzKTtcbiAgICBvdXQuc2hhcGUgPSBuZXdTaGFwZTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBtaW5Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWluLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBtaW4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Minimum } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const minimumConfig = createBinaryKernelConfig(Minimum, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluaW11bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL01pbmltdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsd0JBQXdCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTWluaW11bX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBtaW5pbXVtQ29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhNaW5pbXVtLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { MirrorPad } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\n// Must match enum in MirrorPad.cc\nvar MirrorPaddingMode;\n(function (MirrorPaddingMode) {\n MirrorPaddingMode[MirrorPaddingMode[\"reflect\"] = 0] = \"reflect\";\n MirrorPaddingMode[MirrorPaddingMode[\"symmetric\"] = 1] = \"symmetric\";\n})(MirrorPaddingMode || (MirrorPaddingMode = {}));\nlet wasmMirrorPad;\nfunction setup(backend) {\n wasmMirrorPad = backend.wasm.cwrap(MirrorPad, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'array',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nfunction mirrorPad(args) {\n const { inputs: { x }, backend, attrs: { paddings, mode } } = args;\n const outShape = paddings.map((p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(outShape, x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n const prePaddingsFlat = paddings.map(padTuple => padTuple[0]);\n const postPaddingsFlat = paddings.map(padTuple => padTuple[1]);\n const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer);\n const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer);\n wasmMirrorPad(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, MirrorPaddingMode[mode], outId);\n return out;\n}\nexport const mirrorPadConfig = {\n kernelName: MirrorPad,\n backendName: 'wasm',\n kernelFunc: mirrorPad,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlycm9yUGFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTWlycm9yUGFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsU0FBUyxFQUFrQyxNQUFNLHVCQUF1QixDQUFDO0FBSTNHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFakMsa0NBQWtDO0FBQ2xDLElBQUssaUJBR0o7QUFIRCxXQUFLLGlCQUFpQjtJQUNwQiwrREFBVyxDQUFBO0lBQ1gsbUVBQWEsQ0FBQTtBQUNmLENBQUMsRUFISSxpQkFBaUIsS0FBakIsaUJBQWlCLFFBR3JCO0FBRUQsSUFBSSxhQUdzQixDQUFDO0FBRTNCLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUM3RCxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUSxFQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLElBSWxCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFFN0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDekIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLGdCQUFnQixHQUNsQixJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRCxNQUFNLGlCQUFpQixHQUNuQixJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTVELGFBQWEsQ0FDVCxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLEVBQ3JFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLFNBQWtDO0lBQzlDLFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNaXJyb3JQYWQsIE1pcnJvclBhZEF0dHJzLCBNaXJyb3JQYWRJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBNdXN0IG1hdGNoIGVudW0gaW4gTWlycm9yUGFkLmNjXG5lbnVtIE1pcnJvclBhZGRpbmdNb2RlIHtcbiAgcmVmbGVjdCA9IDAsXG4gIHN5bW1ldHJpYyA9IDFcbn1cblxubGV0IHdhc21NaXJyb3JQYWQ6IChcbiAgICB4SWQ6IG51bWJlciwgeFNoYXBlQnl0ZXM6IFVpbnQ4QXJyYXksIHhTaGFwZUxlbmd0aDogbnVtYmVyLCB4RHR5cGU6IG51bWJlcixcbiAgICBwcmVQYWRkaW5nc0J5dGVzOiBVaW50OEFycmF5LCBwb3N0UGFkZGluZ3NCeXRlczogVWludDhBcnJheSwgbW9kZTogbnVtYmVyLFxuICAgIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21NaXJyb3JQYWQgPSBiYWNrZW5kLndhc20uY3dyYXAoTWlycm9yUGFkLCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdhcnJheScsICAgLy8geC5zaGFwZVxuICAgICdudW1iZXInLCAgLy8geC5zaGFwZS5sZW5ndGhcbiAgICAnbnVtYmVyJywgIC8vIHguZHR5cGVcbiAgICAnYXJyYXknLCAgIC8vIHByZS1wYWRkaW5nc1xuICAgICdhcnJheScsICAgLy8gcG9zdC1wYWRkaW5nc1xuICAgICdudW1iZXInLCAgLy8gbW9kZVxuICAgICdudW1iZXInLCAgLy8gb3V0SWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIG1pcnJvclBhZChhcmdzOiB7XG4gIGlucHV0czogTWlycm9yUGFkSW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgYXR0cnM6IE1pcnJvclBhZEF0dHJzXG59KSB7XG4gIGNvbnN0IHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtwYWRkaW5ncywgbW9kZX19ID0gYXJncztcblxuICBjb25zdCBvdXRTaGFwZSA9IHBhZGRpbmdzLm1hcChcbiAgICAgIChwLCBpKSA9PiBwWzBdIC8qIGJlZm9yZVBhZCAqLyArIHguc2hhcGVbaV0gKyBwWzFdIC8qIGFmdGVyUGFkICovKTtcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCB4LmR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IHhTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoeC5zaGFwZSkuYnVmZmVyKTtcblxuICBjb25zdCBwcmVQYWRkaW5nc0ZsYXQgPSBwYWRkaW5ncy5tYXAocGFkVHVwbGUgPT4gcGFkVHVwbGVbMF0pO1xuICBjb25zdCBwb3N0UGFkZGluZ3NGbGF0ID0gcGFkZGluZ3MubWFwKHBhZFR1cGxlID0+IHBhZFR1cGxlWzFdKTtcbiAgY29uc3QgcHJlUGFkZGluZ3NCeXRlcyA9XG4gICAgICBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShwcmVQYWRkaW5nc0ZsYXQpLmJ1ZmZlcik7XG4gIGNvbnN0IHBvc3RQYWRkaW5nc0J5dGVzID1cbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHBvc3RQYWRkaW5nc0ZsYXQpLmJ1ZmZlcik7XG5cbiAgd2FzbU1pcnJvclBhZChcbiAgICAgIHhJZCwgeFNoYXBlQnl0ZXMsIHguc2hhcGUubGVuZ3RoLCBDcHBEVHlwZVt4LmR0eXBlXSwgcHJlUGFkZGluZ3NCeXRlcyxcbiAgICAgIHBvc3RQYWRkaW5nc0J5dGVzLCBNaXJyb3JQYWRkaW5nTW9kZVttb2RlXSwgb3V0SWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgbWlycm9yUGFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1pcnJvclBhZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogbWlycm9yUGFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbiAgc2V0dXBGdW5jOiBzZXR1cFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Softmax, util } from '@tensorflow/tfjs-core';\nlet wasmFunc;\nfunction setup(backend) {\n wasmFunc = backend.wasm.cwrap(Softmax, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number' // batch\n ]);\n}\nexport function softmax(args) {\n const { backend, inputs: { logits }, attrs: { dim } } = args;\n const xId = backend.dataIdMap.get(logits.dataId).id;\n const out = backend.makeOutput(logits.shape, logits.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const channels = logits.shape[dim];\n const batch = util.sizeFromShape(logits.shape) / channels;\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(out.shape) === 0) {\n return out;\n }\n wasmFunc(xId, outId, channels, batch);\n return out;\n}\nexport const softmaxConfig = {\n kernelName: Softmax,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: softmax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdG1heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NvZnRtYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixPQUFPLEVBQTJDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZILElBQUksUUFDSSxDQUFDO0FBRVQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ3RELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUNuQixJQUF3RTtJQUUxRSxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRW5ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBRTFELG9DQUFvQztJQUNwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QyxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTb2Z0bWF4LCBTb2Z0bWF4QXR0cnMsIFNvZnRtYXhJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtRnVuYzogKHhJZDogbnVtYmVyLCBvdXRJZDogbnVtYmVyLCBjaGFubmVsczogbnVtYmVyLCBiYXRjaDogbnVtYmVyKSA9PlxuICAgIHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21GdW5jID0gYmFja2VuZC53YXNtLmN3cmFwKFNvZnRtYXgsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICdudW1iZXInLCAgLy8geElkXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICAgICdudW1iZXInLCAgLy8gY2hhbm5lbHNcbiAgICAnbnVtYmVyJyAgIC8vIGJhdGNoXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29mdG1heChcbiAgICBhcmdzOiB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogU29mdG1heElucHV0cywgYXR0cnM6IFNvZnRtYXhBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzOiB7bG9naXRzfSwgYXR0cnM6IHtkaW19fSA9IGFyZ3M7XG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChsb2dpdHMuZGF0YUlkKS5pZDtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGxvZ2l0cy5zaGFwZSwgbG9naXRzLmR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgY2hhbm5lbHMgPSBsb2dpdHMuc2hhcGVbZGltXTtcbiAgY29uc3QgYmF0Y2ggPSB1dGlsLnNpemVGcm9tU2hhcGUobG9naXRzLnNoYXBlKSAvIGNoYW5uZWxzO1xuXG4gIC8vIFNob3J0LWNpcmN1aXQgemVyby1zaXplZCB0ZW5zb3JzLlxuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKG91dC5zaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgd2FzbUZ1bmMoeElkLCBvdXRJZCwgY2hhbm5lbHMsIGJhdGNoKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHNvZnRtYXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU29mdG1heCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogc29mdG1heCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multinomial } from '@tensorflow/tfjs-core';\nimport { softmax } from './Softmax';\nlet wasmMultinomial;\nfunction setup(backend) {\n wasmMultinomial = backend.wasm.cwrap(Multinomial, null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nexport function multinomial(args) {\n const { inputs, backend, attrs } = args;\n const { logits } = inputs;\n const { numSamples, seed, normalized } = attrs;\n if (logits.dtype !== 'float32') {\n throw new Error(`Tensor logits must have dtype float32, got ${logits.dtype}`);\n }\n const probabilities = normalized ? logits : softmax({\n inputs: { logits },\n backend,\n attrs: { dim: logits.shape.length - 1 },\n });\n const [batchSize, numEvents] = probabilities.shape;\n const out = backend.makeOutput([batchSize, numSamples], 'int32');\n wasmMultinomial(backend.dataIdMap.get(probabilities.dataId).id, batchSize, numEvents, numSamples, seed, backend.dataIdMap.get(out.dataId).id);\n if (!normalized) {\n backend.disposeData(probabilities.dataId);\n }\n return out;\n}\nexport const multinomialConfig = {\n kernelName: Multinomial,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: multinomial\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlub21pYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9NdWx0aW5vbWlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFdBQVcsRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUc3SCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLElBQUksZUFFd0QsQ0FBQztBQUU3RCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRTtRQUN0RCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDWCw4Q0FBOEMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbkU7SUFFRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBQztRQUNoQixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztLQUN0QyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRSxlQUFlLENBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDOUMsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQ3ZDLENBQUM7SUFDRixJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2YsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0M7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNdWx0aW5vbWlhbCwgTXVsdGlub21pYWxBdHRycywgTXVsdGlub21pYWxJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3NvZnRtYXh9IGZyb20gJy4vU29mdG1heCc7XG5cbmxldCB3YXNtTXVsdGlub21pYWw6IChcbiAgICBwcm9iYWJpbGl0aWVzSWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsIG51bUV2ZW50czogbnVtYmVyLFxuICAgIG51bVNhbXBsZXM6IG51bWJlciwgc2VlZDogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtTXVsdGlub21pYWwgPSBiYWNrZW5kLndhc20uY3dyYXAoTXVsdGlub21pYWwsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIHByb2JhYmlsaXRpZXNJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgJ251bWJlcicsICAvLyBudW1FdmVudHNcbiAgICAnbnVtYmVyJywgIC8vIG51bVNhbXBsZXNcbiAgICAnbnVtYmVyJywgIC8vIHNlZWRcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlub21pYWwoYXJnczoge1xuICBpbnB1dHM6IE11bHRpbm9taWFsSW5wdXRzLFxuICBhdHRyczogTXVsdGlub21pYWxBdHRycyxcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtsb2dpdHN9ID0gaW5wdXRzO1xuICBjb25zdCB7bnVtU2FtcGxlcywgc2VlZCwgbm9ybWFsaXplZH0gPSBhdHRycztcblxuICBpZiAobG9naXRzLmR0eXBlICE9PSAnZmxvYXQzMicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUZW5zb3IgbG9naXRzIG11c3QgaGF2ZSBkdHlwZSBmbG9hdDMyLCBnb3QgJHtsb2dpdHMuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBwcm9iYWJpbGl0aWVzID0gbm9ybWFsaXplZCA/IGxvZ2l0cyA6IHNvZnRtYXgoe1xuICAgIGlucHV0czoge2xvZ2l0c30sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge2RpbTogbG9naXRzLnNoYXBlLmxlbmd0aCAtIDF9LFxuICB9KTtcblxuICBjb25zdCBbYmF0Y2hTaXplLCBudW1FdmVudHNdID0gcHJvYmFiaWxpdGllcy5zaGFwZTtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFtiYXRjaFNpemUsIG51bVNhbXBsZXNdLCAnaW50MzInKTtcblxuICB3YXNtTXVsdGlub21pYWwoXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQocHJvYmFiaWxpdGllcy5kYXRhSWQpLmlkLFxuICAgICAgYmF0Y2hTaXplLFxuICAgICAgbnVtRXZlbnRzLFxuICAgICAgbnVtU2FtcGxlcyxcbiAgICAgIHNlZWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQsXG4gICk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEocHJvYmFiaWxpdGllcy5kYXRhSWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBtdWx0aW5vbWlhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNdWx0aW5vbWlhbCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogbXVsdGlub21pYWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Mod } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nexport const modConfig = createBinaryKernelConfig(Mod, /*supportsFullBroadcast=*/ true);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTW9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLHdCQUF3QixDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE1vZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBtb2RDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKE1vZCwgLypzdXBwb3J0c0Z1bGxCcm9hZGNhc3Q9Ki90cnVlKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multiply } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const multiplyConfig = createBinaryKernelConfig(Multiply, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlwbHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9NdWx0aXBseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qix3QkFBd0IsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE11bHRpcGx5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi9iaW5hcnlfa2VybmVsJztcblxuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gdHJ1ZTtcbmV4cG9ydCBjb25zdCBtdWx0aXBseUNvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoTXVsdGlwbHksIHN1cHBvcnRzRnVsbEJyb2FkY2FzdCk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Neg } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const negConfig = createUnaryKernelConfig(Neg);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvTmVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIE5lZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IG5lZ0NvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoTmVnKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Parse the result of the c++ method, which has the shape equivalent to\n * `Result`.\n */\nexport function parseResultStruct(backend, resOffset) {\n const result = new Int32Array(backend.wasm.HEAPU8.buffer, resOffset, 4);\n const pSelectedIndices = result[0];\n const selectedSize = result[1];\n const pSelectedScores = result[2];\n const pValidOutputs = result[3];\n // Since the result was allocated on the heap, we have to delete it.\n backend.wasm._free(resOffset);\n return { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25fdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBV0g7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUM3QixPQUFvQixFQUFFLFNBQWlCO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsb0VBQW9FO0lBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbi8vIEFuYWxvZ291cyB0byBgc3RydWN0IFJlc3VsdGAgaW4gYG5vbl9tYXhfc3VwcHJlc3Npb25faW1wbC5oYC5cbmludGVyZmFjZSBSZXN1bHQge1xuICBwU2VsZWN0ZWRJbmRpY2VzOiBudW1iZXI7XG4gIHNlbGVjdGVkU2l6ZTogbnVtYmVyO1xuICBwU2VsZWN0ZWRTY29yZXM6IG51bWJlcjtcbiAgcFZhbGlkT3V0cHV0czogbnVtYmVyO1xufVxuLyoqXG4gKiBQYXJzZSB0aGUgcmVzdWx0IG9mIHRoZSBjKysgbWV0aG9kLCB3aGljaCBoYXMgdGhlIHNoYXBlIGVxdWl2YWxlbnQgdG9cbiAqIGBSZXN1bHRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXN1bHRTdHJ1Y3QoXG4gICAgYmFja2VuZDogQmFja2VuZFdhc20sIHJlc09mZnNldDogbnVtYmVyKTogUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEludDMyQXJyYXkoYmFja2VuZC53YXNtLkhFQVBVOC5idWZmZXIsIHJlc09mZnNldCwgNCk7XG4gIGNvbnN0IHBTZWxlY3RlZEluZGljZXMgPSByZXN1bHRbMF07XG4gIGNvbnN0IHNlbGVjdGVkU2l6ZSA9IHJlc3VsdFsxXTtcbiAgY29uc3QgcFNlbGVjdGVkU2NvcmVzID0gcmVzdWx0WzJdO1xuICBjb25zdCBwVmFsaWRPdXRwdXRzID0gcmVzdWx0WzNdO1xuICAvLyBTaW5jZSB0aGUgcmVzdWx0IHdhcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAsIHdlIGhhdmUgdG8gZGVsZXRlIGl0LlxuICBiYWNrZW5kLndhc20uX2ZyZWUocmVzT2Zmc2V0KTtcbiAgcmV0dXJuIHtwU2VsZWN0ZWRJbmRpY2VzLCBzZWxlY3RlZFNpemUsIHBTZWxlY3RlZFNjb3JlcywgcFZhbGlkT3V0cHV0c307XG59XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NonMaxSuppressionV3 } from '@tensorflow/tfjs-core';\nimport { parseResultStruct } from './NonMaxSuppression_util';\nlet wasmFunc;\nfunction setup(backend) {\n wasmFunc = backend.wasm.cwrap(NonMaxSuppressionV3, 'number', // Result*\n [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // scoreThreshold\n ]);\n}\nfunction kernelFunc(args) {\n const { backend, inputs, attrs } = args;\n const { iouThreshold, maxOutputSize, scoreThreshold } = attrs;\n const { boxes, scores } = inputs;\n const boxesId = backend.dataIdMap.get(boxes.dataId).id;\n const scoresId = backend.dataIdMap.get(scores.dataId).id;\n const resOffset = wasmFunc(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold);\n const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend, resOffset);\n // Since we are not using scores for V3, we have to delete it from the heap.\n backend.wasm._free(pSelectedScores);\n backend.wasm._free(pValidOutputs);\n const selectedIndicesTensor = backend.makeOutput([selectedSize], 'int32', pSelectedIndices);\n return selectedIndicesTensor;\n}\nexport const nonMaxSuppressionV3Config = {\n kernelName: NonMaxSuppressionV3,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: kernelFunc,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixtQkFBbUIsRUFBa0UsTUFBTSx1QkFBdUIsQ0FBQztBQUlySixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxJQUFJLFFBRXVELENBQUM7QUFFNUQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUN6QixtQkFBbUIsRUFDbkIsUUFBUSxFQUFHLFVBQVU7SUFDckI7UUFDRSxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUSxFQUFHLGlCQUFpQjtLQUM3QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFJbkI7SUFDQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVELE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRS9CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUV6RCxNQUFNLFNBQVMsR0FDWCxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBQyxHQUNsRSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFMUMsNEVBQTRFO0lBQzVFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRWxDLE1BQU0scUJBQXFCLEdBQ3ZCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUVsRSxPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsVUFBbUM7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE5vbk1heFN1cHByZXNzaW9uVjMsIE5vbk1heFN1cHByZXNzaW9uVjNBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WM0lucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtwYXJzZVJlc3VsdFN0cnVjdH0gZnJvbSAnLi9Ob25NYXhTdXBwcmVzc2lvbl91dGlsJztcblxubGV0IHdhc21GdW5jOiAoXG4gICAgYm94ZXNJZDogbnVtYmVyLCBzY29yZXNJZDogbnVtYmVyLCBtYXhPdXRwdXRTaXplOiBudW1iZXIsXG4gICAgaW91VGhyZXNob2xkOiBudW1iZXIsIHNjb3JlVGhyZXNob2xkOiBudW1iZXIpID0+IG51bWJlcjtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbUZ1bmMgPSBiYWNrZW5kLndhc20uY3dyYXAoXG4gICAgICBOb25NYXhTdXBwcmVzc2lvblYzLFxuICAgICAgJ251bWJlcicsICAvLyBSZXN1bHQqXG4gICAgICBbXG4gICAgICAgICdudW1iZXInLCAgLy8gYm94ZXNJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIHNjb3Jlc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gbWF4T3V0cHV0U2l6ZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGlvdVRocmVzaG9sZFxuICAgICAgICAnbnVtYmVyJywgIC8vIHNjb3JlVGhyZXNob2xkXG4gICAgICBdKTtcbn1cblxuZnVuY3Rpb24ga2VybmVsRnVuYyhhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IE5vbk1heFN1cHByZXNzaW9uVjNJbnB1dHMsXG4gIGF0dHJzOiBOb25NYXhTdXBwcmVzc2lvblYzQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2lvdVRocmVzaG9sZCwgbWF4T3V0cHV0U2l6ZSwgc2NvcmVUaHJlc2hvbGR9ID0gYXR0cnM7XG4gIGNvbnN0IHtib3hlcywgc2NvcmVzfSA9IGlucHV0cztcblxuICBjb25zdCBib3hlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGJveGVzLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IHNjb3Jlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHNjb3Jlcy5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IHJlc09mZnNldCA9XG4gICAgICB3YXNtRnVuYyhib3hlc0lkLCBzY29yZXNJZCwgbWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCk7XG5cbiAgY29uc3Qge3BTZWxlY3RlZEluZGljZXMsIHNlbGVjdGVkU2l6ZSwgcFNlbGVjdGVkU2NvcmVzLCBwVmFsaWRPdXRwdXRzfSA9XG4gICAgICBwYXJzZVJlc3VsdFN0cnVjdChiYWNrZW5kLCByZXNPZmZzZXQpO1xuXG4gIC8vIFNpbmNlIHdlIGFyZSBub3QgdXNpbmcgc2NvcmVzIGZvciBWMywgd2UgaGF2ZSB0byBkZWxldGUgaXQgZnJvbSB0aGUgaGVhcC5cbiAgYmFja2VuZC53YXNtLl9mcmVlKHBTZWxlY3RlZFNjb3Jlcyk7XG4gIGJhY2tlbmQud2FzbS5fZnJlZShwVmFsaWRPdXRwdXRzKTtcblxuICBjb25zdCBzZWxlY3RlZEluZGljZXNUZW5zb3IgPVxuICAgICAgYmFja2VuZC5tYWtlT3V0cHV0KFtzZWxlY3RlZFNpemVdLCAnaW50MzInLCBwU2VsZWN0ZWRJbmRpY2VzKTtcblxuICByZXR1cm4gc2VsZWN0ZWRJbmRpY2VzVGVuc29yO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WM0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOb25NYXhTdXBwcmVzc2lvblYzLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBrZXJuZWxGdW5jIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NonMaxSuppressionV4 } from '@tensorflow/tfjs-core';\nimport { parseResultStruct } from './NonMaxSuppression_util';\nlet wasmFunc;\nfunction setup(backend) {\n wasmFunc = backend.wasm.cwrap(NonMaxSuppressionV4, 'number', // Result*\n [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'bool', // padToMaxOutputSize\n ]);\n}\nfunction nonMaxSuppressionV4(args) {\n const { backend, inputs, attrs } = args;\n const { iouThreshold, maxOutputSize, scoreThreshold, padToMaxOutputSize } = attrs;\n const { boxes, scores } = inputs;\n const boxesId = backend.dataIdMap.get(boxes.dataId).id;\n const scoresId = backend.dataIdMap.get(scores.dataId).id;\n const resOffset = wasmFunc(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize);\n const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend, resOffset);\n // Since we are not using scores for V4, we have to delete it from the heap.\n backend.wasm._free(pSelectedScores);\n const selectedIndicesTensor = backend.makeOutput([selectedSize], 'int32', pSelectedIndices);\n const validOutputsTensor = backend.makeOutput([], 'int32', pValidOutputs);\n return [selectedIndicesTensor, validOutputsTensor];\n}\nexport const nonMaxSuppressionV4Config = {\n kernelName: NonMaxSuppressionV4,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: nonMaxSuppressionV4,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixtQkFBbUIsRUFBa0UsTUFBTSx1QkFBdUIsQ0FBQztBQUlySixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxJQUFJLFFBR3NDLENBQUM7QUFFM0MsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUN6QixtQkFBbUIsRUFDbkIsUUFBUSxFQUFHLFVBQVU7SUFDckI7UUFDRSxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE1BQU0sRUFBSyxxQkFBcUI7S0FDakMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsSUFJNUI7SUFDQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFDLEdBQ25FLEtBQUssQ0FBQztJQUNWLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRS9CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUV6RCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQzlELGtCQUFrQixDQUFDLENBQUM7SUFFeEIsTUFBTSxFQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLEdBQ2xFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUUxQyw0RUFBNEU7SUFDNUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFcEMsTUFBTSxxQkFBcUIsR0FDdkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTFFLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBOb25NYXhTdXBwcmVzc2lvblY0LCBOb25NYXhTdXBwcmVzc2lvblY0QXR0cnMsIE5vbk1heFN1cHByZXNzaW9uVjRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGFyc2VSZXN1bHRTdHJ1Y3R9IGZyb20gJy4vTm9uTWF4U3VwcHJlc3Npb25fdXRpbCc7XG5cbmxldCB3YXNtRnVuYzogKFxuICAgIGJveGVzSWQ6IG51bWJlciwgc2NvcmVzSWQ6IG51bWJlciwgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICAgIGlvdVRocmVzaG9sZDogbnVtYmVyLCBzY29yZVRocmVzaG9sZDogbnVtYmVyLFxuICAgIHBhZFRvTWF4T3V0cHV0U2l6ZTogYm9vbGVhbikgPT4gbnVtYmVyO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtRnVuYyA9IGJhY2tlbmQud2FzbS5jd3JhcChcbiAgICAgIE5vbk1heFN1cHByZXNzaW9uVjQsXG4gICAgICAnbnVtYmVyJywgIC8vIFJlc3VsdCpcbiAgICAgIFtcbiAgICAgICAgJ251bWJlcicsICAvLyBib3hlc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gc2NvcmVzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBtYXhPdXRwdXRTaXplXG4gICAgICAgICdudW1iZXInLCAgLy8gaW91VGhyZXNob2xkXG4gICAgICAgICdudW1iZXInLCAgLy8gc2NvcmVUaHJlc2hvbGRcbiAgICAgICAgJ2Jvb2wnLCAgICAvLyBwYWRUb01heE91dHB1dFNpemVcbiAgICAgIF0pO1xufVxuXG5mdW5jdGlvbiBub25NYXhTdXBwcmVzc2lvblY0KGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WNElucHV0cyxcbiAgYXR0cnM6IE5vbk1heFN1cHByZXNzaW9uVjRBdHRyc1xufSk6IFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpb3VUaHJlc2hvbGQsIG1heE91dHB1dFNpemUsIHNjb3JlVGhyZXNob2xkLCBwYWRUb01heE91dHB1dFNpemV9ID1cbiAgICAgIGF0dHJzO1xuICBjb25zdCB7Ym94ZXMsIHNjb3Jlc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgYm94ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hlcy5kYXRhSWQpLmlkO1xuICBjb25zdCBzY29yZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChzY29yZXMuZGF0YUlkKS5pZDtcblxuICBjb25zdCByZXNPZmZzZXQgPSB3YXNtRnVuYyhcbiAgICAgIGJveGVzSWQsIHNjb3Jlc0lkLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLFxuICAgICAgcGFkVG9NYXhPdXRwdXRTaXplKTtcblxuICBjb25zdCB7cFNlbGVjdGVkSW5kaWNlcywgc2VsZWN0ZWRTaXplLCBwU2VsZWN0ZWRTY29yZXMsIHBWYWxpZE91dHB1dHN9ID1cbiAgICAgIHBhcnNlUmVzdWx0U3RydWN0KGJhY2tlbmQsIHJlc09mZnNldCk7XG5cbiAgLy8gU2luY2Ugd2UgYXJlIG5vdCB1c2luZyBzY29yZXMgZm9yIFY0LCB3ZSBoYXZlIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZSBoZWFwLlxuICBiYWNrZW5kLndhc20uX2ZyZWUocFNlbGVjdGVkU2NvcmVzKTtcblxuICBjb25zdCBzZWxlY3RlZEluZGljZXNUZW5zb3IgPVxuICAgICAgYmFja2VuZC5tYWtlT3V0cHV0KFtzZWxlY3RlZFNpemVdLCAnaW50MzInLCBwU2VsZWN0ZWRJbmRpY2VzKTtcblxuICBjb25zdCB2YWxpZE91dHB1dHNUZW5zb3IgPSBiYWNrZW5kLm1ha2VPdXRwdXQoW10sICdpbnQzMicsIHBWYWxpZE91dHB1dHMpO1xuXG4gIHJldHVybiBbc2VsZWN0ZWRJbmRpY2VzVGVuc29yLCB2YWxpZE91dHB1dHNUZW5zb3JdO1xufVxuXG5leHBvcnQgY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WNENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBOb25NYXhTdXBwcmVzc2lvblY0LFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBub25NYXhTdXBwcmVzc2lvblY0IGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NonMaxSuppressionV5 } from '@tensorflow/tfjs-core';\nimport { parseResultStruct } from './NonMaxSuppression_util';\nlet wasmFunc;\nfunction setup(backend) {\n wasmFunc = backend.wasm.cwrap(NonMaxSuppressionV5, 'number', // Result*\n [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // softNmsSigma\n ]);\n}\nfunction kernelFunc(args) {\n const { backend, inputs, attrs } = args;\n const { iouThreshold, maxOutputSize, scoreThreshold, softNmsSigma } = attrs;\n const { boxes, scores } = inputs;\n const boxesId = backend.dataIdMap.get(boxes.dataId).id;\n const scoresId = backend.dataIdMap.get(scores.dataId).id;\n const resOffset = wasmFunc(boxesId, scoresId, maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma);\n const { pSelectedIndices, selectedSize, pSelectedScores, pValidOutputs } = parseResultStruct(backend, resOffset);\n // Since we are not using validOutputs for V5, we have to delete it from the\n // heap.\n backend.wasm._free(pValidOutputs);\n const selectedIndicesTensor = backend.makeOutput([selectedSize], 'int32', pSelectedIndices);\n const selectedScoresTensor = backend.makeOutput([selectedSize], 'float32', pSelectedScores);\n return [selectedIndicesTensor, selectedScoresTensor];\n}\nexport const nonMaxSuppressionV5Config = {\n kernelName: NonMaxSuppressionV5,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: kernelFunc,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixtQkFBbUIsRUFBa0UsTUFBTSx1QkFBdUIsQ0FBQztBQUlySixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxJQUFJLFFBR1UsQ0FBQztBQUVmLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDekIsbUJBQW1CLEVBQ25CLFFBQVEsRUFBRyxVQUFVO0lBQ3JCO1FBQ0UsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsZUFBZTtLQUMzQixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFJbkI7SUFDQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUMxRSxNQUFNLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUUvQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFekQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUN0QixPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUM5RCxZQUFZLENBQUMsQ0FBQztJQUVsQixNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUMsR0FDbEUsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTFDLDRFQUE0RTtJQUM1RSxRQUFRO0lBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEMsTUFBTSxxQkFBcUIsR0FDdkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sb0JBQW9CLEdBQ3RCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFbkUsT0FBTyxDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFpQjtJQUNyRCxVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxVQUFtQztDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTm9uTWF4U3VwcHJlc3Npb25WNSwgTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzLCBOb25NYXhTdXBwcmVzc2lvblY1SW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3BhcnNlUmVzdWx0U3RydWN0fSBmcm9tICcuL05vbk1heFN1cHByZXNzaW9uX3V0aWwnO1xuXG5sZXQgd2FzbUZ1bmM6XG4gICAgKGJveGVzSWQ6IG51bWJlciwgc2NvcmVzSWQ6IG51bWJlciwgbWF4T3V0cHV0U2l6ZTogbnVtYmVyLFxuICAgICBpb3VUaHJlc2hvbGQ6IG51bWJlciwgc2NvcmVUaHJlc2hvbGQ6IG51bWJlciwgc29mdE5tc1NpZ21hOiBudW1iZXIpID0+XG4gICAgICAgIG51bWJlcjtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbUZ1bmMgPSBiYWNrZW5kLndhc20uY3dyYXAoXG4gICAgICBOb25NYXhTdXBwcmVzc2lvblY1LFxuICAgICAgJ251bWJlcicsICAvLyBSZXN1bHQqXG4gICAgICBbXG4gICAgICAgICdudW1iZXInLCAgLy8gYm94ZXNJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIHNjb3Jlc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gbWF4T3V0cHV0U2l6ZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGlvdVRocmVzaG9sZFxuICAgICAgICAnbnVtYmVyJywgIC8vIHNjb3JlVGhyZXNob2xkXG4gICAgICAgICdudW1iZXInLCAgLy8gc29mdE5tc1NpZ21hXG4gICAgICBdKTtcbn1cblxuZnVuY3Rpb24ga2VybmVsRnVuYyhhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IE5vbk1heFN1cHByZXNzaW9uVjVJbnB1dHMsXG4gIGF0dHJzOiBOb25NYXhTdXBwcmVzc2lvblY1QXR0cnNcbn0pOiBUZW5zb3JJbmZvW10ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW91VGhyZXNob2xkLCBtYXhPdXRwdXRTaXplLCBzY29yZVRocmVzaG9sZCwgc29mdE5tc1NpZ21hfSA9IGF0dHJzO1xuICBjb25zdCB7Ym94ZXMsIHNjb3Jlc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgYm94ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChib3hlcy5kYXRhSWQpLmlkO1xuICBjb25zdCBzY29yZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChzY29yZXMuZGF0YUlkKS5pZDtcblxuICBjb25zdCByZXNPZmZzZXQgPSB3YXNtRnVuYyhcbiAgICAgIGJveGVzSWQsIHNjb3Jlc0lkLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLFxuICAgICAgc29mdE5tc1NpZ21hKTtcblxuICBjb25zdCB7cFNlbGVjdGVkSW5kaWNlcywgc2VsZWN0ZWRTaXplLCBwU2VsZWN0ZWRTY29yZXMsIHBWYWxpZE91dHB1dHN9ID1cbiAgICAgIHBhcnNlUmVzdWx0U3RydWN0KGJhY2tlbmQsIHJlc09mZnNldCk7XG5cbiAgLy8gU2luY2Ugd2UgYXJlIG5vdCB1c2luZyB2YWxpZE91dHB1dHMgZm9yIFY1LCB3ZSBoYXZlIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZVxuICAvLyBoZWFwLlxuICBiYWNrZW5kLndhc20uX2ZyZWUocFZhbGlkT3V0cHV0cyk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRJbmRpY2VzVGVuc29yID1cbiAgICAgIGJhY2tlbmQubWFrZU91dHB1dChbc2VsZWN0ZWRTaXplXSwgJ2ludDMyJywgcFNlbGVjdGVkSW5kaWNlcyk7XG4gIGNvbnN0IHNlbGVjdGVkU2NvcmVzVGVuc29yID1cbiAgICAgIGJhY2tlbmQubWFrZU91dHB1dChbc2VsZWN0ZWRTaXplXSwgJ2Zsb2F0MzInLCBwU2VsZWN0ZWRTY29yZXMpO1xuXG4gIHJldHVybiBbc2VsZWN0ZWRJbmRpY2VzVGVuc29yLCBzZWxlY3RlZFNjb3Jlc1RlbnNvcl07XG59XG5cbmV4cG9ydCBjb25zdCBub25NYXhTdXBwcmVzc2lvblY1Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE5vbk1heFN1cHByZXNzaW9uVjUsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IGtlcm5lbEZ1bmMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { NotEqual } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const notEqualConfig = createBinaryKernelConfig(NotEqual, supportsFullBroadcast, 'bool');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90RXF1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Ob3RFcXVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQWUsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qix3QkFBd0IsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTm90RXF1YWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gZmFsc2U7XG5leHBvcnQgY29uc3Qgbm90RXF1YWxDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKE5vdEVxdWFsLCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QsICdib29sJyk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OneHot } from '@tensorflow/tfjs-core';\nlet wasmOneHot;\nfunction setup(backend) {\n wasmOneHot = backend.wasm.cwrap(OneHot, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction oneHot(args) {\n const { inputs, backend, attrs } = args;\n const { indices } = inputs;\n const { dtype, depth, onValue, offValue } = attrs;\n const out = backend.makeOutput([...indices.shape, depth], dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const indicesData = backend.dataIdMap.get(indices.dataId);\n const indicesId = indicesData.id;\n wasmOneHot(indicesId, depth, onValue, offValue, outId);\n return out;\n}\nexport const oneHotConfig = {\n kernelName: OneHot,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: oneHot,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lSG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvT25lSG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsTUFBTSxFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBSWxHLElBQUksVUFFc0IsQ0FBQztBQUUzQixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDdkQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRyxTQUFTO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FDWCxJQUFzRTtJQUN4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN6QixNQUFNLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWhELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVuRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUVqQyxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBPbmVIb3QsIE9uZUhvdEF0dHJzLCBPbmVIb3RJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtT25lSG90OiAoXG4gICAgaW5kaWNlc0lkOiBudW1iZXIsIGRlcHRoOiBudW1iZXIsIG9uVmFsdWU6IG51bWJlciwgb2ZmVmFsdWU6IG51bWJlcixcbiAgICBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtT25lSG90ID0gYmFja2VuZC53YXNtLmN3cmFwKE9uZUhvdCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyBpbmRpY2VzX2lkXG4gICAgJ251bWJlcicsICAvLyBkZXB0aCxcbiAgICAnbnVtYmVyJywgIC8vIG9uVmFsdWVcbiAgICAnbnVtYmVyJywgIC8vIG9mZlZhbHVlXG4gICAgJ251bWJlcicgICAvLyBvdXRfaWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIG9uZUhvdChcbiAgICBhcmdzOiB7aW5wdXRzOiBPbmVIb3RJbnB1dHMsIGF0dHJzOiBPbmVIb3RBdHRycywgYmFja2VuZDogQmFja2VuZFdhc219KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbmRpY2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2R0eXBlLCBkZXB0aCwgb25WYWx1ZSwgb2ZmVmFsdWV9ID0gYXR0cnM7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFsuLi5pbmRpY2VzLnNoYXBlLCBkZXB0aF0sIGR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgaW5kaWNlc0RhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW5kaWNlcy5kYXRhSWQpO1xuICBjb25zdCBpbmRpY2VzSWQgPSBpbmRpY2VzRGF0YS5pZDtcblxuICB3YXNtT25lSG90KGluZGljZXNJZCwgZGVwdGgsIG9uVmFsdWUsIG9mZlZhbHVlLCBvdXRJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IG9uZUhvdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBPbmVIb3QsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IG9uZUhvdCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OnesLike } from '@tensorflow/tfjs-core';\nfunction onesLike(args) {\n const { inputs: { x }, backend } = args;\n const out = backend.makeOutput(x.shape, x.dtype);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.fill(1);\n return out;\n}\nexport const onesLikeConfig = {\n kernelName: OnesLike,\n backendName: 'wasm',\n kernelFunc: onesLike,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lc0xpa2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9PbmVzTGlrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFFBQVEsRUFBaUIsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RixTQUFTLFFBQVEsQ0FBQyxJQUFvRDtJQUNwRSxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE9uZXNMaWtlLCBPbmVzTGlrZUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuZnVuY3Rpb24gb25lc0xpa2UoYXJnczoge2lucHV0czogT25lc0xpa2VJbnB1dHMsIGJhY2tlbmQ6IEJhY2tlbmRXYXNtfSkge1xuICBjb25zdCB7aW5wdXRzOiB7eH0sIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHguc2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCBvdXRWYWxzID0gYmFja2VuZC50eXBlZEFycmF5RnJvbUhlYXAob3V0KTtcbiAgb3V0VmFscy5maWxsKDEpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgb25lc0xpa2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogT25lc0xpa2UsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IG9uZXNMaWtlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pack, util } from '@tensorflow/tfjs-core';\nimport { concat } from './Concat';\nimport { expandDims } from './ExpandDims';\nexport function pack(args) {\n const { inputs, backend, attrs } = args;\n const { axis } = attrs;\n if (inputs.length === 1) {\n return expandDims({ inputs: { input: inputs[0] }, backend, attrs: { dim: axis } });\n }\n const shape = inputs[0].shape;\n const dtype = inputs[0].dtype;\n inputs.forEach(t => {\n util.assertShapesMatch(shape, t.shape, 'All tensors passed to stack must have matching shapes');\n util.assert(dtype === t.dtype, () => 'All tensors passed to stack must have matching dtypes');\n });\n const intermediateTensorInfos = [];\n const expandedTensors = inputs.map(t => {\n const expandedT = expandDims({ inputs: { input: t }, backend, attrs: { dim: axis } });\n intermediateTensorInfos.push(expandedT);\n return expandedT;\n });\n const result = concat({ inputs: expandedTensors, backend, attrs: { axis } });\n intermediateTensorInfos.forEach(t => backend.disposeData(t.dataId));\n return result;\n}\nexport const packConfig = {\n kernelName: Pack,\n backendName: 'wasm',\n kernelFunc: pack\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1BhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixJQUFJLEVBQXFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzlHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLFVBQVUsSUFBSSxDQUNoQixJQUFrRTtJQUVwRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sVUFBVSxDQUNiLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ2hFO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBRTlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFDZCx1REFBdUQsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQ2pCLEdBQUcsRUFBRSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLHVCQUF1QixHQUFpQixFQUFFLENBQUM7SUFDakQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQyxNQUFNLFNBQVMsR0FDWCxVQUFVLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDbEUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXpFLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFcEUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBQYWNrLCBQYWNrQXR0cnMsIFBhY2tJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9Db25jYXQnO1xuaW1wb3J0IHtleHBhbmREaW1zfSBmcm9tICcuL0V4cGFuZERpbXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFjayhcbiAgICBhcmdzOiB7aW5wdXRzOiBQYWNrSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IFBhY2tBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YXhpc30gPSBhdHRycztcblxuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBleHBhbmREaW1zKFxuICAgICAgICB7aW5wdXRzOiB7aW5wdXQ6IGlucHV0c1swXX0sIGJhY2tlbmQsIGF0dHJzOiB7ZGltOiBheGlzfX0pO1xuICB9XG5cbiAgY29uc3Qgc2hhcGUgPSBpbnB1dHNbMF0uc2hhcGU7XG4gIGNvbnN0IGR0eXBlID0gaW5wdXRzWzBdLmR0eXBlO1xuXG4gIGlucHV0cy5mb3JFYWNoKHQgPT4ge1xuICAgIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAgIHNoYXBlLCB0LnNoYXBlLFxuICAgICAgICAnQWxsIHRlbnNvcnMgcGFzc2VkIHRvIHN0YWNrIG11c3QgaGF2ZSBtYXRjaGluZyBzaGFwZXMnKTtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgZHR5cGUgPT09IHQuZHR5cGUsXG4gICAgICAgICgpID0+ICdBbGwgdGVuc29ycyBwYXNzZWQgdG8gc3RhY2sgbXVzdCBoYXZlIG1hdGNoaW5nIGR0eXBlcycpO1xuICB9KTtcblxuICBjb25zdCBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvczogVGVuc29ySW5mb1tdID0gW107XG4gIGNvbnN0IGV4cGFuZGVkVGVuc29ycyA9IGlucHV0cy5tYXAodCA9PiB7XG4gICAgY29uc3QgZXhwYW5kZWRUID1cbiAgICAgICAgZXhwYW5kRGltcyh7aW5wdXRzOiB7aW5wdXQ6IHR9LCBiYWNrZW5kLCBhdHRyczoge2RpbTogYXhpc319KTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKGV4cGFuZGVkVCk7XG4gICAgcmV0dXJuIGV4cGFuZGVkVDtcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gY29uY2F0KHtpbnB1dHM6IGV4cGFuZGVkVGVuc29ycywgYmFja2VuZCwgYXR0cnM6IHtheGlzfX0pO1xuXG4gIGludGVybWVkaWF0ZVRlbnNvckluZm9zLmZvckVhY2godCA9PiBiYWNrZW5kLmRpc3Bvc2VEYXRhKHQuZGF0YUlkKSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHBhY2tDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUGFjayxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogcGFjayBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { PadV2, util } from '@tensorflow/tfjs-core';\nimport { fill } from './Fill';\nimport { CppDType } from './types';\nlet wasmPadV2;\nfunction setup(backend) {\n wasmPadV2 = backend.wasm.cwrap(PadV2, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'array',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nfunction pad(args) {\n const { inputs: { x }, backend, attrs: { paddings, constantValue } } = args;\n const outShape = paddings.map((p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n if (util.sizeFromShape(x.shape) === 0) {\n // Short-circuit the computation, since x doesn't have value, only\n // the shape is used to compute output shape to pad.\n return fill({\n backend,\n attrs: { shape: outShape, value: constantValue, dtype: x.dtype }\n });\n }\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(outShape, x.dtype);\n const outTensorData = backend.dataIdMap.get(out.dataId);\n const outId = outTensorData.id;\n const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n const prePaddingsFlat = paddings.map(padTuple => padTuple[0]);\n const postPaddingsFlat = paddings.map(padTuple => padTuple[1]);\n const prePaddingsBytes = new Uint8Array(new Int32Array(prePaddingsFlat).buffer);\n const postPaddingsBytes = new Uint8Array(new Int32Array(postPaddingsFlat).buffer);\n wasmPadV2(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], prePaddingsBytes, postPaddingsBytes, constantValue, outId);\n return out;\n}\nexport const padV2Config = {\n kernelName: PadV2,\n backendName: 'wasm',\n kernelFunc: pad,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFkVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9QYWRWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEtBQUssRUFBMkIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJckcsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksU0FHNkMsQ0FBQztBQUVsRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDckQsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FDUixJQUFvRTtJQUN0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsRUFBQyxHQUFHLElBQUksQ0FBQztJQUV0RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUN6QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFdkUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckMsa0VBQWtFO1FBQ2xFLG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQztZQUNWLE9BQU87WUFDUCxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUM7U0FDL0QsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUUvQixNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sZ0JBQWdCLEdBQ2xCLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELE1BQU0saUJBQWlCLEdBQ25CLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUQsU0FBUyxDQUNMLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsRUFDckUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLEdBQTRCO0lBQ3hDLFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBQYWRWMiwgUGFkVjJBdHRycywgUGFkVjJJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi9GaWxsJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtUGFkVjI6IChcbiAgICB4SWQ6IG51bWJlciwgeFNoYXBlQnl0ZXM6IFVpbnQ4QXJyYXksIHhTaGFwZUxlbmd0aDogbnVtYmVyLCB4RHR5cGU6IG51bWJlcixcbiAgICBwcmVQYWRkaW5nc0J5dGVzOiBVaW50OEFycmF5LCBwb3N0UGFkZGluZ3NCeXRlczogVWludDhBcnJheSxcbiAgICBjb25zdGFudFZhbHVlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21QYWRWMiA9IGJhY2tlbmQud2FzbS5jd3JhcChQYWRWMiwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnYXJyYXknLCAgIC8vIHguc2hhcGVcbiAgICAnbnVtYmVyJywgIC8vIHguc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyB4LmR0eXBlXG4gICAgJ2FycmF5JywgICAvLyBwcmUtcGFkZGluZ3NcbiAgICAnYXJyYXknLCAgIC8vIHBvc3QtcGFkZGluZ3NcbiAgICAnbnVtYmVyJywgIC8vIGNvbnN0YW50VmFsdWVcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBwYWQoXG4gICAgYXJnczoge2lucHV0czogUGFkVjJJbnB1dHMsIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLCBhdHRyczogUGFkVjJBdHRyc30pIHtcbiAgY29uc3Qge2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3BhZGRpbmdzLCBjb25zdGFudFZhbHVlfX0gPSBhcmdzO1xuXG4gIGNvbnN0IG91dFNoYXBlID0gcGFkZGluZ3MubWFwKFxuICAgICAgKHAsIGkpID0+IHBbMF0gLyogYmVmb3JlUGFkICovICsgeC5zaGFwZVtpXSArIHBbMV0gLyogYWZ0ZXJQYWQgKi8pO1xuXG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSkgPT09IDApIHtcbiAgICAvLyBTaG9ydC1jaXJjdWl0IHRoZSBjb21wdXRhdGlvbiwgc2luY2UgeCBkb2Vzbid0IGhhdmUgdmFsdWUsIG9ubHlcbiAgICAvLyB0aGUgc2hhcGUgaXMgdXNlZCB0byBjb21wdXRlIG91dHB1dCBzaGFwZSB0byBwYWQuXG4gICAgcmV0dXJuIGZpbGwoe1xuICAgICAgYmFja2VuZCxcbiAgICAgIGF0dHJzOiB7c2hhcGU6IG91dFNoYXBlLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSwgZHR5cGU6IHguZHR5cGV9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCBvdXRUZW5zb3JEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpO1xuICBjb25zdCBvdXRJZCA9IG91dFRlbnNvckRhdGEuaWQ7XG5cbiAgY29uc3QgeFNoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSh4LnNoYXBlKS5idWZmZXIpO1xuXG4gIGNvbnN0IHByZVBhZGRpbmdzRmxhdCA9IHBhZGRpbmdzLm1hcChwYWRUdXBsZSA9PiBwYWRUdXBsZVswXSk7XG4gIGNvbnN0IHBvc3RQYWRkaW5nc0ZsYXQgPSBwYWRkaW5ncy5tYXAocGFkVHVwbGUgPT4gcGFkVHVwbGVbMV0pO1xuICBjb25zdCBwcmVQYWRkaW5nc0J5dGVzID1cbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHByZVBhZGRpbmdzRmxhdCkuYnVmZmVyKTtcbiAgY29uc3QgcG9zdFBhZGRpbmdzQnl0ZXMgPVxuICAgICAgbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkocG9zdFBhZGRpbmdzRmxhdCkuYnVmZmVyKTtcblxuICB3YXNtUGFkVjIoXG4gICAgICB4SWQsIHhTaGFwZUJ5dGVzLCB4LnNoYXBlLmxlbmd0aCwgQ3BwRFR5cGVbeC5kdHlwZV0sIHByZVBhZGRpbmdzQnl0ZXMsXG4gICAgICBwb3N0UGFkZGluZ3NCeXRlcywgY29uc3RhbnRWYWx1ZSwgb3V0SWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgcGFkVjJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUGFkVjIsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHBhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG4gIHNldHVwRnVuYzogc2V0dXBcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pow } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = false;\nexport const powConfig = createBinaryKernelConfig(Pow, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvUG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIFBvd30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVCaW5hcnlLZXJuZWxDb25maWd9IGZyb20gJy4vYmluYXJ5X2tlcm5lbCc7XG5jb25zdCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCBwb3dDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKFBvdywgc3VwcG9ydHNGdWxsQnJvYWRjYXN0KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Prelu } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nlet wasmPrelu;\nfunction setup(backend) {\n wasmPrelu = backend.wasm.cwrap(Prelu, null /* void */, [\n 'number',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction prelu(args) {\n const { inputs, backend } = args;\n const { x, alpha } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const weightsId = backend.dataIdMap.get(alpha.dataId).id;\n let inputId = xId;\n const input = x;\n let castedInput = input;\n if (input.dtype !== 'float32') {\n castedInput = cast({ backend, inputs: { x }, attrs: { dtype: 'float32' } });\n inputId = backend.dataIdMap.get(castedInput.dataId).id;\n }\n const out = backend.makeOutput(x.shape, 'float32');\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmPrelu(inputId, weightsId, outId);\n if (input.dtype !== 'float32') {\n backend.disposeData(castedInput.dataId);\n }\n return out;\n}\nexport const preluConfig = {\n kernelName: Prelu,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: prelu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJlbHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9QcmVsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEtBQUssRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBSW5GLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsSUFBSSxTQUFrRSxDQUFDO0FBRXZFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNyRCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRyxTQUFTO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxJQUFpRDtJQUM5RCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFekQsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM3QixXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEQ7SUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsS0FBOEI7Q0FDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFByZWx1LCBQcmVsdUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL0Nhc3QnO1xuXG5sZXQgd2FzbVByZWx1OiAoeElkOiBudW1iZXIsIHdlaWdodHNJZDogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtUHJlbHUgPSBiYWNrZW5kLndhc20uY3dyYXAoUHJlbHUsIG51bGwgLyogdm9pZCAqLywgW1xuICAgICdudW1iZXInLCAgLy8geF9pZFxuICAgICdudW1iZXInLCAgLy8gd2VpZ2h0c19pZFxuICAgICdudW1iZXInICAgLy8gb3V0X2lkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBwcmVsdShhcmdzOiB7aW5wdXRzOiBQcmVsdUlucHV0cywgYmFja2VuZDogQmFja2VuZFdhc219KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3gsIGFscGhhfSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3Qgd2VpZ2h0c0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGFscGhhLmRhdGFJZCkuaWQ7XG5cbiAgbGV0IGlucHV0SWQgPSB4SWQ7XG4gIGNvbnN0IGlucHV0ID0geDtcbiAgbGV0IGNhc3RlZElucHV0ID0gaW5wdXQ7XG4gIGlmIChpbnB1dC5kdHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgY2FzdGVkSW5wdXQgPSBjYXN0KHtiYWNrZW5kLCBpbnB1dHM6IHt4fSwgYXR0cnM6IHtkdHlwZTogJ2Zsb2F0MzInfX0pO1xuICAgIGlucHV0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoY2FzdGVkSW5wdXQuZGF0YUlkKS5pZDtcbiAgfVxuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgd2FzbVByZWx1KGlucHV0SWQsIHdlaWdodHNJZCwgb3V0SWQpO1xuXG4gIGlmIChpbnB1dC5kdHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlRGF0YShjYXN0ZWRJbnB1dC5kYXRhSWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBwcmVsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBQcmVsdSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogcHJlbHUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Prod, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nimport { CppDType } from './types';\nlet wasmProd;\nfunction setup(backend) {\n wasmProd = backend.wasm.cwrap(Prod, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number'\n ]);\n}\nfunction prod(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n let reductionAxes = axes;\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n if (transposedId !== xId) {\n // transpose was not a no-op. We will need to dispose of this\n // once we are done.\n input = transposed;\n inputId = transposedId;\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, input.shape.length);\n }\n }\n backend_util.assertAxesAreInnerMostDims('prod', reductionAxes, input.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, reductionAxes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, input.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmProd(inputId, reduceSize, CppDType[out.dtype], outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const prodConfig = {\n kernelName: Prod,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: prod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1Byb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsSUFBSSxFQUFxQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk1SCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksUUFFcUMsQ0FBQztBQUUxQyxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtLQUNULENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxJQUliO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUksa0JBQWtCLEVBQUU7UUFDdEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLFlBQVksS0FBSyxHQUFHLEVBQUU7WUFDeEIsNkRBQTZEO1lBQzdELG9CQUFvQjtZQUNwQixLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFDdkIsYUFBYSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDekMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO0tBQ0Y7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQ25DLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUN6QixZQUFZLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0Q7SUFFRCxJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLG9DQUFvQztRQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksUUFBUSxFQUFFO1FBQ1osVUFBVTtRQUNWLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUHJvZCwgUHJvZEF0dHJzLCBQcm9kSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3Blcm11dGVBeGVzQW5kVHJhbnNwb3NlfSBmcm9tICcuL2tlcm5lbF91dGlscyc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVByb2Q6IChcbiAgICB4SWQ6IG51bWJlciwgcmVkdWNlU2l6ZTogbnVtYmVyLFxuICAgIGR0eXBlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21Qcm9kID0gYmFja2VuZC53YXNtLmN3cmFwKFByb2QsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJyxcbiAgICAnbnVtYmVyJyxcbiAgICAnbnVtYmVyJyxcbiAgICAnbnVtYmVyJ1xuICBdKTtcbn1cblxuZnVuY3Rpb24gcHJvZChhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IFByb2RJbnB1dHMsXG4gIGF0dHJzOiBQcm9kQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2F4aXMsIGtlZXBEaW1zfSA9IGF0dHJzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHhJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQ7XG4gIGxldCBpbnB1dElkID0geElkO1xuICBsZXQgaW5wdXQgPSB4O1xuXG4gIGNvbnN0IHt0cmFuc3Bvc2VkLCBheGVzLCBvcmlnaW5hbEF4ZXMsIGlucHV0V2FzVHJhbnNwb3NlZH0gPVxuICAgICAgcGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2UoeCwgYXhpcywgYmFja2VuZCk7XG5cbiAgbGV0IHJlZHVjdGlvbkF4ZXMgPSBheGVzO1xuICBpZiAoaW5wdXRXYXNUcmFuc3Bvc2VkKSB7XG4gICAgY29uc3QgdHJhbnNwb3NlZElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHRyYW5zcG9zZWQuZGF0YUlkKS5pZDtcbiAgICBpZiAodHJhbnNwb3NlZElkICE9PSB4SWQpIHtcbiAgICAgIC8vIHRyYW5zcG9zZSB3YXMgbm90IGEgbm8tb3AuIFdlIHdpbGwgbmVlZCB0byBkaXNwb3NlIG9mIHRoaXNcbiAgICAgIC8vIG9uY2Ugd2UgYXJlIGRvbmUuXG4gICAgICBpbnB1dCA9IHRyYW5zcG9zZWQ7XG4gICAgICBpbnB1dElkID0gdHJhbnNwb3NlZElkO1xuICAgICAgcmVkdWN0aW9uQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKFxuICAgICAgICAgIHJlZHVjdGlvbkF4ZXMubGVuZ3RoLCBpbnB1dC5zaGFwZS5sZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcyhcbiAgICAgICdwcm9kJywgcmVkdWN0aW9uQXhlcywgaW5wdXQuc2hhcGUubGVuZ3RoKTtcbiAgY29uc3QgW291dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMoaW5wdXQuc2hhcGUsIHJlZHVjdGlvbkF4ZXMpO1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsIGlucHV0LmR0eXBlKTtcbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShpbnB1dC5zaGFwZSkgIT09IDApIHtcbiAgICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgICB3YXNtUHJvZChpbnB1dElkLCByZWR1Y2VTaXplLCBDcHBEVHlwZVtvdXQuZHR5cGVdLCBvdXRJZCk7XG4gIH1cblxuICBpZiAoaW5wdXRXYXNUcmFuc3Bvc2VkKSB7XG4gICAgLy8gZGlzcG9zZSBvZiB0aGUgdHJhbnNwb3NlZCB0ZW5zb3IuXG4gICAgYmFja2VuZC5kaXNwb3NlRGF0YSh0cmFuc3Bvc2VkLmRhdGFJZCk7XG4gIH1cblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICAvLyByZXNoYXBlXG4gICAgY29uc3QgbmV3U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0LnNoYXBlLCBvcmlnaW5hbEF4ZXMpO1xuICAgIG91dC5zaGFwZSA9IG5ld1NoYXBlO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUHJvZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogcHJvZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Range } from '@tensorflow/tfjs-core';\nimport { rangeImplCPU } from '../kernel_utils/shared';\nexport const range = (args) => {\n const { backend, attrs } = args;\n const { start, stop, step, dtype } = attrs;\n const values = rangeImplCPU(start, stop, step, dtype);\n const out = backend.makeOutput([values.length], dtype);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.set(values);\n return out;\n};\nexport const rangeConfig = {\n kernelName: Range,\n backendName: 'wasm',\n kernelFunc: range\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9SYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLEtBQUssRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUc5RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLENBQUMsSUFBK0MsRUFBYyxFQUFFO0lBQzlELE1BQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFuZ2UsIFJhbmdlQXR0cnMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3JhbmdlSW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmV4cG9ydCBjb25zdCByYW5nZSA9XG4gICAgKGFyZ3M6IHtiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IFJhbmdlQXR0cnN9KTogVGVuc29ySW5mbyA9PiB7XG4gICAgICBjb25zdCB7YmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgICAgIGNvbnN0IHtzdGFydCwgc3RvcCwgc3RlcCwgZHR5cGV9ID0gYXR0cnM7XG4gICAgICBjb25zdCB2YWx1ZXMgPSByYW5nZUltcGxDUFUoc3RhcnQsIHN0b3AsIHN0ZXAsIGR0eXBlKTtcblxuICAgICAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFt2YWx1ZXMubGVuZ3RoXSwgZHR5cGUpO1xuICAgICAgY29uc3Qgb3V0VmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKG91dCk7XG4gICAgICBvdXRWYWxzLnNldCh2YWx1ZXMpO1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9O1xuXG5leHBvcnQgY29uc3QgcmFuZ2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmFuZ2UsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHJhbmdlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RealDiv } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const realDivConfig = createBinaryKernelConfig(RealDiv, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbERpdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1JlYWxEaXYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsd0JBQXdCLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSZWFsRGl2fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi9iaW5hcnlfa2VybmVsJztcblxuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gdHJ1ZTtcbmV4cG9ydCBjb25zdCByZWFsRGl2Q29uZmlnOiBLZXJuZWxDb25maWcgPVxuICAgIGNyZWF0ZUJpbmFyeUtlcm5lbENvbmZpZyhSZWFsRGl2LCBzdXBwb3J0c0Z1bGxCcm9hZGNhc3QpO1xuIl19","/**\n * @license\n * Copyright 2022 The TensorFlow Authors. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reciprocal } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const reciprocalConfig = createUnaryKernelConfig(Reciprocal);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjaXByb2NhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1JlY2lwcm9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUN6Qix1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIFRoZSBUZW5zb3JGbG93IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSZWNpcHJvY2FsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5leHBvcnQgY29uc3QgcmVjaXByb2NhbENvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhSZWNpcHJvY2FsKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const reluConfig = createUnaryKernelConfig(Relu);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1JlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUmVsdX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHJlbHVDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKFJlbHUpO1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu6 } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const relu6Config = createUnaryKernelConfig(Relu6);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9SZWx1Ni50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQWUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSZWx1Nn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHJlbHU2Q29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhSZWx1Nik7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeBilinear, util } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nlet wasmResizeBilinear;\nfunction setup(backend) {\n wasmResizeBilinear = backend.wasm.cwrap(ResizeBilinear, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // outId\n ]);\n}\nfunction resizeBilinear(args) {\n const { backend, inputs, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n const [newHeight, newWidth] = size;\n const [batch, oldHeight, oldWidth, numChannels] = images.shape;\n const outShape = [batch, newHeight, newWidth, numChannels];\n let xData = backend.dataIdMap.get(images.dataId);\n let castedData;\n if (xData.dtype !== 'float32') {\n castedData =\n cast({ backend, inputs: { x: images }, attrs: { dtype: 'float32' } });\n xData = backend.dataIdMap.get(castedData.dataId);\n }\n const xId = xData.id;\n const out = backend.makeOutput(outShape, 'float32');\n if (util.sizeFromShape(images.shape) === 0) {\n return out;\n }\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmResizeBilinear(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId);\n if (castedData != null) {\n backend.disposeData(castedData.dataId);\n }\n return out;\n}\nexport const resizeBilinearConfig = {\n kernelName: ResizeBilinear,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: resizeBilinear\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9SZXNpemVCaWxpbmVhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLGNBQWMsRUFBeUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUksT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixJQUFJLGtCQUdzRSxDQUFDO0FBRTNFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ3JFLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsQ0FBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUl2QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUV0QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRW5DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFM0QsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM3QixVQUFVO1lBQ04sSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbEQ7SUFDRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBRXJCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFDLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRW5ELGtCQUFrQixDQUNkLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFDakUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0QsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWlCO0lBQ2hELFVBQVUsRUFBRSxjQUFjO0lBQzFCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxjQUF1QztDQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaXplQmlsaW5lYXIsIFJlc2l6ZUJpbGluZWFyQXR0cnMsIFJlc2l6ZUJpbGluZWFySW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vQ2FzdCc7XG5cbmxldCB3YXNtUmVzaXplQmlsaW5lYXI6IChcbiAgICB4SWQ6IG51bWJlciwgYmF0Y2g6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsXG4gICAgbnVtQ2hhbm5lbHM6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIsIG5ld1dpZHRoOiBudW1iZXIsXG4gICAgYWxpZ25Db3JuZXJzOiBudW1iZXIsIGhhbGZQaXhlbENlbnRlcnM6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVJlc2l6ZUJpbGluZWFyID0gYmFja2VuZC53YXNtLmN3cmFwKFJlc2l6ZUJpbGluZWFyLCBudWxsIC8qdm9pZCovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoXG4gICAgJ251bWJlcicsICAvLyBvbGRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIG9sZFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBudW1DaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gbmV3SGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBuZXdXaWR0aFxuICAgICdudW1iZXInLCAgLy8gYWxpZ25Db3JuZXJzXG4gICAgJ251bWJlcicsICAvLyBoYWxmUGl4ZWxDZW50ZXJzXG4gICAgJ251bWJlcicgICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gcmVzaXplQmlsaW5lYXIoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgaW5wdXRzOiBSZXNpemVCaWxpbmVhcklucHV0cyxcbiAgYXR0cnM6IFJlc2l6ZUJpbGluZWFyQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcblxuICBjb25zdCB7aW1hZ2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2FsaWduQ29ybmVycywgaGFsZlBpeGVsQ2VudGVycywgc2l6ZX0gPSBhdHRycztcbiAgY29uc3QgW25ld0hlaWdodCwgbmV3V2lkdGhdID0gc2l6ZTtcblxuICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIG51bUNoYW5uZWxzXSA9IGltYWdlcy5zaGFwZTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbYmF0Y2gsIG5ld0hlaWdodCwgbmV3V2lkdGgsIG51bUNoYW5uZWxzXTtcblxuICBsZXQgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW1hZ2VzLmRhdGFJZCk7XG4gIGxldCBjYXN0ZWREYXRhO1xuICBpZiAoeERhdGEuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZERhdGEgPVxuICAgICAgICBjYXN0KHtiYWNrZW5kLCBpbnB1dHM6IHt4OiBpbWFnZXN9LCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG4gICAgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoY2FzdGVkRGF0YS5kYXRhSWQpO1xuICB9XG4gIGNvbnN0IHhJZCA9IHhEYXRhLmlkO1xuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRTaGFwZSwgJ2Zsb2F0MzInKTtcbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShpbWFnZXMuc2hhcGUpID09PSAwKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICB3YXNtUmVzaXplQmlsaW5lYXIoXG4gICAgICB4SWQsIGJhdGNoLCBvbGRIZWlnaHQsIG9sZFdpZHRoLCBudW1DaGFubmVscywgbmV3SGVpZ2h0LCBuZXdXaWR0aCxcbiAgICAgIGFsaWduQ29ybmVycyA/IDEgOiAwLCBoYWxmUGl4ZWxDZW50ZXJzID8gMSA6IDAsIG91dElkKTtcblxuICBpZiAoY2FzdGVkRGF0YSAhPSBudWxsKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlRGF0YShjYXN0ZWREYXRhLmRhdGFJZCk7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplQmlsaW5lYXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVzaXplQmlsaW5lYXIsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZUJpbGluZWFyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeBilinearGrad } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nlet wasmResizeBilinearGrad;\nfunction setup(backend) {\n wasmResizeBilinearGrad = backend.wasm.cwrap(ResizeBilinearGrad, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'array',\n 'array',\n 'boolean', // alignCorners\n ]);\n}\nfunction resizeBilinearGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n const dx = backend.makeOutput(images.shape, 'float32');\n let xData = backend.dataIdMap.get(images.dataId);\n let castedData;\n if (xData.dtype !== 'float32') {\n castedData = cast({\n backend,\n inputs: { x: images },\n attrs: { dtype: 'float32' },\n });\n xData = backend.dataIdMap.get(castedData.dataId);\n }\n wasmResizeBilinearGrad(backend.dataIdMap.get(images.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, new Uint8Array(new Int32Array(images.shape).buffer), new Uint8Array(new Int32Array(dy.shape).buffer), alignCorners);\n if (castedData != null) {\n backend.disposeData(castedData.dataId);\n }\n return dx;\n}\nexport const resizeBilinearGradConfig = {\n kernelName: ResizeBilinearGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: resizeBilinearGrad,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXJHcmFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvUmVzaXplQmlsaW5lYXJHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsa0JBQWtCLEVBQWdFLE1BQU0sdUJBQXVCLENBQUM7QUFJbEosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixJQUFJLHNCQUVtRCxDQUFDO0FBRXhELFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUN2QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUNqQztRQUNFLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxPQUFPO1FBQ1AsU0FBUyxFQUFHLGVBQWU7S0FDNUIsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFHM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUU3QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELElBQUksVUFBVSxDQUFDO0lBQ2YsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUM3QixVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLE9BQU87WUFDUCxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDO1lBQ25CLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUM7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNsRDtJQUVELHNCQUFzQixDQUNsQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQ25ELElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFDL0MsWUFBWSxDQUNmLENBQUM7SUFFRixJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7UUFDdEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBaUI7SUFDcEQsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsa0JBQTJDO0NBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXNpemVCaWxpbmVhckdyYWQsIFJlc2l6ZUJpbGluZWFyR3JhZEF0dHJzLCBSZXNpemVCaWxpbmVhckdyYWRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Y2FzdH0gZnJvbSAnLi9DYXN0JztcblxubGV0IHdhc21SZXNpemVCaWxpbmVhckdyYWQ6IChcbiAgICBpbWFnZXNJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGR4SWQ6IG51bWJlciwgaW1hZ2VzU2hhcGU6IFVpbnQ4QXJyYXksXG4gICAgZHlTaGFwZTogVWludDhBcnJheSwgYWxpZ25Db3JuZXJzOiBib29sZWFuKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtUmVzaXplQmlsaW5lYXJHcmFkID0gYmFja2VuZC53YXNtLmN3cmFwKFxuICAgICAgUmVzaXplQmlsaW5lYXJHcmFkLCBudWxsIC8qdm9pZCovLFxuICAgICAgW1xuICAgICAgICAnbnVtYmVyJywgICAvLyBpbWFnZXNJZFxuICAgICAgICAnbnVtYmVyJywgICAvLyBkeUlkXG4gICAgICAgICdudW1iZXInLCAgIC8vIGR4SWRcbiAgICAgICAgJ2FycmF5JywgICAgLy8gaW1hZ2VzU2hhcGVcbiAgICAgICAgJ2FycmF5JywgICAgLy8gZHlTaGFwZVxuICAgICAgICAnYm9vbGVhbicsICAvLyBhbGlnbkNvcm5lcnNcbiAgICAgIF0pO1xufVxuXG5mdW5jdGlvbiByZXNpemVCaWxpbmVhckdyYWQoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbTsgaW5wdXRzOiBSZXNpemVCaWxpbmVhckdyYWRJbnB1dHM7XG4gIGF0dHJzOiBSZXNpemVCaWxpbmVhckdyYWRBdHRycztcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlcywgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7YWxpZ25Db3JuZXJzfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGR4ID0gYmFja2VuZC5tYWtlT3V0cHV0KGltYWdlcy5zaGFwZSwgJ2Zsb2F0MzInKTtcblxuICBsZXQgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW1hZ2VzLmRhdGFJZCk7XG4gIGxldCBjYXN0ZWREYXRhO1xuICBpZiAoeERhdGEuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZERhdGEgPSBjYXN0KHtcbiAgICAgIGJhY2tlbmQsXG4gICAgICBpbnB1dHM6IHt4OiBpbWFnZXN9LFxuICAgICAgYXR0cnM6IHtkdHlwZTogJ2Zsb2F0MzInfSxcbiAgICB9KTtcbiAgICB4RGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChjYXN0ZWREYXRhLmRhdGFJZCk7XG4gIH1cblxuICB3YXNtUmVzaXplQmlsaW5lYXJHcmFkKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGltYWdlcy5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGltYWdlcy5zaGFwZSkuYnVmZmVyKSxcbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGR5LnNoYXBlKS5idWZmZXIpLFxuICAgICAgYWxpZ25Db3JuZXJzLFxuICApO1xuXG4gIGlmIChjYXN0ZWREYXRhICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiBkeDtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2l6ZUJpbGluZWFyR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNpemVCaWxpbmVhckdyYWQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZUJpbGluZWFyR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeNearestNeighbor, util, } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nlet wasmResizeNearestNeighbor;\nfunction setup(backend) {\n wasmResizeNearestNeighbor = backend.wasm.cwrap(ResizeNearestNeighbor, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction resizeNearestNeighbor(args) {\n const { backend, inputs, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n const [newHeight, newWidth] = size;\n const [batch, oldHeight, oldWidth, numChannels] = images.shape;\n const outShape = [batch, newHeight, newWidth, numChannels];\n const out = backend.makeOutput(outShape, 'float32');\n if (util.sizeFromShape(images.shape) === 0) {\n return out;\n }\n let xData = backend.dataIdMap.get(images.dataId);\n let castedData;\n if (xData.dtype !== 'float32') {\n castedData = cast({\n backend,\n inputs: { x: images },\n attrs: { dtype: 'float32' },\n });\n xData = backend.dataIdMap.get(castedData.dataId);\n }\n const xId = xData.id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmResizeNearestNeighbor(xId, batch, oldHeight, oldWidth, numChannels, newHeight, newWidth, alignCorners ? 1 : 0, halfPixelCenters ? 1 : 0, outId);\n if (castedData != null) {\n backend.disposeData(castedData.dataId);\n }\n return out;\n}\nexport const resizeNearestNeighborConfig = {\n kernelName: ResizeNearestNeighbor,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: resizeNearestNeighbor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvUmVzaXplTmVhcmVzdE5laWdoYm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFHTCxxQkFBcUIsRUFJckIsSUFBSSxHQUNMLE1BQU0sdUJBQXVCLENBQUM7QUFJL0IsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QixJQUFJLHlCQVdLLENBQUM7QUFFVixTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDNUMscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQ2I7UUFDRSxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUUsUUFBUTtLQUNuQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxJQUk5QjtJQUNDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztJQUN4QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRW5DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFM0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDN0IsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNoQixPQUFPO1lBQ1AsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUNyQixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbEQ7SUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3JCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQseUJBQXlCLENBQ3ZCLEdBQUcsRUFDSCxLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3hCLEtBQUssQ0FDTixDQUFDO0lBRUYsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQWlCO0lBQ3ZELFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLHFCQUE4QztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7XG4gIEtlcm5lbENvbmZpZyxcbiAgS2VybmVsRnVuYyxcbiAgUmVzaXplTmVhcmVzdE5laWdoYm9yLFxuICBSZXNpemVOZWFyZXN0TmVpZ2hib3JBdHRycyxcbiAgUmVzaXplTmVhcmVzdE5laWdoYm9ySW5wdXRzLFxuICBUZW5zb3JJbmZvLFxuICB1dGlsLFxufSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQgeyBCYWNrZW5kV2FzbSB9IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7IGNhc3QgfSBmcm9tICcuL0Nhc3QnO1xuXG5sZXQgd2FzbVJlc2l6ZU5lYXJlc3ROZWlnaGJvcjogKFxuICB4SWQ6IG51bWJlcixcbiAgYmF0Y2g6IG51bWJlcixcbiAgb2xkSGVpZ2h0OiBudW1iZXIsXG4gIG9sZFdpZHRoOiBudW1iZXIsXG4gIG51bUNoYW5uZWxzOiBudW1iZXIsXG4gIG5ld0hlaWdodDogbnVtYmVyLFxuICBuZXdXaWR0aDogbnVtYmVyLFxuICBhbGlnbkNvcm5lcnM6IG51bWJlcixcbiAgaGFsZlBpeGVsQ2VudGVyczogbnVtYmVyLFxuICBvdXRJZDogbnVtYmVyXG4pID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21SZXNpemVOZWFyZXN0TmVpZ2hib3IgPSBiYWNrZW5kLndhc20uY3dyYXAoXG4gICAgUmVzaXplTmVhcmVzdE5laWdoYm9yLFxuICAgIG51bGwgLyp2b2lkKi8sXG4gICAgW1xuICAgICAgJ251bWJlcicsIC8vIHhJZFxuICAgICAgJ251bWJlcicsIC8vIGJhdGNoXG4gICAgICAnbnVtYmVyJywgLy8gb2xkSGVpZ2h0XG4gICAgICAnbnVtYmVyJywgLy8gb2xkV2lkdGhcbiAgICAgICdudW1iZXInLCAvLyBudW1DaGFubmVsc1xuICAgICAgJ251bWJlcicsIC8vIG5ld0hlaWdodFxuICAgICAgJ251bWJlcicsIC8vIG5ld1dpZHRoXG4gICAgICAnbnVtYmVyJywgLy8gYWxpZ25Db3JuZXJzXG4gICAgICAnbnVtYmVyJywgLy8gaGFsZlBpeGVsQ2VudGVyc1xuICAgICAgJ251bWJlcicsIC8vIG91dElkXG4gICAgXVxuICApO1xufVxuXG5mdW5jdGlvbiByZXNpemVOZWFyZXN0TmVpZ2hib3IoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbTtcbiAgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHM7XG4gIGF0dHJzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JBdHRycztcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3QgeyBiYWNrZW5kLCBpbnB1dHMsIGF0dHJzIH0gPSBhcmdzO1xuICBjb25zdCB7IGltYWdlcyB9ID0gaW5wdXRzO1xuICBjb25zdCB7IGFsaWduQ29ybmVycywgaGFsZlBpeGVsQ2VudGVycywgc2l6ZSB9ID0gYXR0cnM7XG5cbiAgY29uc3QgW25ld0hlaWdodCwgbmV3V2lkdGhdID0gc2l6ZTtcblxuICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIG51bUNoYW5uZWxzXSA9IGltYWdlcy5zaGFwZTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBbYmF0Y2gsIG5ld0hlaWdodCwgbmV3V2lkdGgsIG51bUNoYW5uZWxzXTtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQob3V0U2hhcGUsICdmbG9hdDMyJyk7XG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoaW1hZ2VzLnNoYXBlKSA9PT0gMCkge1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBsZXQgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW1hZ2VzLmRhdGFJZCk7XG4gIGxldCBjYXN0ZWREYXRhO1xuICBpZiAoeERhdGEuZHR5cGUgIT09ICdmbG9hdDMyJykge1xuICAgIGNhc3RlZERhdGEgPSBjYXN0KHtcbiAgICAgIGJhY2tlbmQsXG4gICAgICBpbnB1dHM6IHsgeDogaW1hZ2VzIH0sXG4gICAgICBhdHRyczogeyBkdHlwZTogJ2Zsb2F0MzInIH0sXG4gICAgfSk7XG4gICAgeERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoY2FzdGVkRGF0YS5kYXRhSWQpO1xuICB9XG5cbiAgY29uc3QgeElkID0geERhdGEuaWQ7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gIHdhc21SZXNpemVOZWFyZXN0TmVpZ2hib3IoXG4gICAgeElkLFxuICAgIGJhdGNoLFxuICAgIG9sZEhlaWdodCxcbiAgICBvbGRXaWR0aCxcbiAgICBudW1DaGFubmVscyxcbiAgICBuZXdIZWlnaHQsXG4gICAgbmV3V2lkdGgsXG4gICAgYWxpZ25Db3JuZXJzID8gMSA6IDAsXG4gICAgaGFsZlBpeGVsQ2VudGVycyA/IDEgOiAwLFxuICAgIG91dElkXG4gICk7XG5cbiAgaWYgKGNhc3RlZERhdGEgIT0gbnVsbCkge1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEoY2FzdGVkRGF0YS5kYXRhSWQpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2l6ZU5lYXJlc3ROZWlnaGJvckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNpemVOZWFyZXN0TmVpZ2hib3IsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZU5lYXJlc3ROZWlnaGJvciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeNearestNeighborGrad } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nlet wasmResizeNearestNeighborGrad;\nfunction setup(backend) {\n wasmResizeNearestNeighborGrad = backend.wasm.cwrap(ResizeNearestNeighborGrad, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'array',\n 'array',\n 'boolean', // alignCorners\n ]);\n}\nfunction resizeNearestNeighborGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n const dx = backend.makeOutput(images.shape, 'float32');\n let xData = backend.dataIdMap.get(images.dataId);\n let castedData;\n if (xData.dtype !== 'float32') {\n castedData = cast({\n backend,\n inputs: { x: images },\n attrs: { dtype: 'float32' },\n });\n xData = backend.dataIdMap.get(castedData.dataId);\n }\n wasmResizeNearestNeighborGrad(backend.dataIdMap.get(images.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(dx.dataId).id, new Uint8Array(new Int32Array(images.shape).buffer), new Uint8Array(new Int32Array(dy.shape).buffer), alignCorners);\n if (castedData != null) {\n backend.disposeData(castedData.dataId);\n }\n return dx;\n}\nexport const resizeNearestNeighborGradConfig = {\n kernelName: ResizeNearestNeighborGrad,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: resizeNearestNeighborGrad,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1Jlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQix5QkFBeUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLElBQUksNkJBRW1ELENBQUM7QUFFeEQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsNkJBQTZCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQzlDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ3hDO1FBQ0UsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87UUFDUCxTQUFTLEVBQUcsZUFBZTtLQUM1QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxJQUdsQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV2RCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDaEIsT0FBTztZQUNQLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUM7WUFDbkIsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQztTQUMxQixDQUFDLENBQUM7UUFDSCxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsNkJBQTZCLENBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQ25DLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFDbkQsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUMvQyxZQUFZLENBQ2YsQ0FBQztJQUVGLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtRQUN0QixPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUVELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFpQjtJQUMzRCxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSx5QkFBa0Q7Q0FDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRBdHRycywgUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtjYXN0fSBmcm9tICcuL0Nhc3QnO1xuXG5sZXQgd2FzbVJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQ6IChcbiAgICBpbWFnZXNJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGR4SWQ6IG51bWJlciwgaW1hZ2VzU2hhcGU6IFVpbnQ4QXJyYXksXG4gICAgZHlTaGFwZTogVWludDhBcnJheSwgYWxpZ25Db3JuZXJzOiBib29sZWFuKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCA9IGJhY2tlbmQud2FzbS5jd3JhcChcbiAgICAgIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQsIG51bGwgLyp2b2lkKi8sXG4gICAgICBbXG4gICAgICAgICdudW1iZXInLCAgIC8vIGltYWdlc0lkXG4gICAgICAgICdudW1iZXInLCAgIC8vIGR5SWRcbiAgICAgICAgJ251bWJlcicsICAgLy8gZHhJZFxuICAgICAgICAnYXJyYXknLCAgICAvLyBpbWFnZXNTaGFwZVxuICAgICAgICAnYXJyYXknLCAgICAvLyBkeVNoYXBlXG4gICAgICAgICdib29sZWFuJywgIC8vIGFsaWduQ29ybmVyc1xuICAgICAgXSk7XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbTsgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkSW5wdXRzO1xuICBhdHRyczogUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZEF0dHJzO1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2VzLCBkeX0gPSBpbnB1dHM7XG4gIGNvbnN0IHthbGlnbkNvcm5lcnN9ID0gYXR0cnM7XG5cbiAgY29uc3QgZHggPSBiYWNrZW5kLm1ha2VPdXRwdXQoaW1hZ2VzLnNoYXBlLCAnZmxvYXQzMicpO1xuXG4gIGxldCB4RGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbWFnZXMuZGF0YUlkKTtcbiAgbGV0IGNhc3RlZERhdGE7XG4gIGlmICh4RGF0YS5kdHlwZSAhPT0gJ2Zsb2F0MzInKSB7XG4gICAgY2FzdGVkRGF0YSA9IGNhc3Qoe1xuICAgICAgYmFja2VuZCxcbiAgICAgIGlucHV0czoge3g6IGltYWdlc30sXG4gICAgICBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9LFxuICAgIH0pO1xuICAgIHhEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIHdhc21SZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkKFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGltYWdlcy5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGR5LmRhdGFJZCkuaWQsXG4gICAgICBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZHguZGF0YUlkKS5pZCxcbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGltYWdlcy5zaGFwZSkuYnVmZmVyKSxcbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGR5LnNoYXBlKS5idWZmZXIpLFxuICAgICAgYWxpZ25Db3JuZXJzLFxuICApO1xuXG4gIGlmIChjYXN0ZWREYXRhICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKGNhc3RlZERhdGEuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiBkeDtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogcmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reverse, util } from '@tensorflow/tfjs-core';\nimport { identity } from './Identity';\nimport { reshape } from './Reshape';\nlet wasmReverse;\nfunction setup(backend) {\n wasmReverse = backend.wasm.cwrap(Reverse, null, [\n 'number',\n 'array',\n 'number',\n 'array',\n 'number',\n 'number' // out_id\n ]);\n}\nexport function reverse(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dims } = attrs;\n const axes = util.parseAxisParam(dims, x.shape);\n if (x.shape.length === 0) {\n return identity({ inputs: { x }, backend });\n }\n const out = backend.makeOutput(x.shape, x.dtype);\n const xId = backend.dataIdMap.get(x.dataId).id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n const axesBytes = new Uint8Array(new Int32Array(axes).buffer);\n const outShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n wasmReverse(xId, axesBytes, axes.length, outShapeBytes, x.shape.length, outId);\n const reshaped = reshape({ inputs: { x: out }, attrs: { shape: x.shape }, backend });\n backend.disposeData(out.dataId);\n return reshaped;\n}\nexport const reverseConfig = {\n kernelName: Reverse,\n backendName: 'wasm',\n kernelFunc: reverse,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1JldmVyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixPQUFPLEVBQTJDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZILE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxJQUFJLFdBRThDLENBQUM7QUFFbkQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDOUMsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRLENBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsSUFBd0U7SUFFMUUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJFLFdBQVcsQ0FDUCxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLE1BQU0sUUFBUSxHQUNWLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFFbEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLE9BQWdDO0lBQzVDLFNBQVMsRUFBRSxLQUFLO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXZlcnNlLCBSZXZlcnNlQXR0cnMsIFJldmVyc2VJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5sZXQgd2FzbVJldmVyc2U6IChcbiAgICB4SWQ6IG51bWJlciwgYXhlczogVWludDhBcnJheSwgYXhlc0xlbmd0aDogbnVtYmVyLCBvdXRTaGFwZTogVWludDhBcnJheSxcbiAgICBvdXRTaGFwZUxlbmd0aDogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtUmV2ZXJzZSA9IGJhY2tlbmQud2FzbS5jd3JhcChSZXZlcnNlLCBudWxsLCBbXG4gICAgJ251bWJlcicsICAvLyB4X2lkXG4gICAgJ2FycmF5JywgICAvLyBheGVzXG4gICAgJ251bWJlcicsICAvLyBheGVzX2xlbmd0aFxuICAgICdhcnJheScsICAgLy8gb3V0X3NoYXBlXG4gICAgJ251bWJlcicsICAvLyBvdXRfc2hhcGVfbGVuZ3RoXG4gICAgJ251bWJlcicgICAvLyBvdXRfaWRcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFJldmVyc2VJbnB1dHMsIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLCBhdHRyczogUmV2ZXJzZUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2RpbXN9ID0gYXR0cnM7XG5cbiAgY29uc3QgYXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oZGltcywgeC5zaGFwZSk7XG5cbiAgaWYgKHguc2hhcGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHguc2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBheGVzQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShheGVzKS5idWZmZXIpO1xuICBjb25zdCBvdXRTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoeC5zaGFwZSkuYnVmZmVyKTtcblxuICB3YXNtUmV2ZXJzZShcbiAgICAgIHhJZCwgYXhlc0J5dGVzLCBheGVzLmxlbmd0aCwgb3V0U2hhcGVCeXRlcywgeC5zaGFwZS5sZW5ndGgsIG91dElkKTtcblxuICBjb25zdCByZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBvdXR9LCBhdHRyczoge3NoYXBlOiB4LnNoYXBlfSwgYmFja2VuZH0pO1xuXG4gIGJhY2tlbmQuZGlzcG9zZURhdGEob3V0LmRhdGFJZCk7XG4gIHJldHVybiByZXNoYXBlZDtcbn1cblxuZXhwb3J0IGNvbnN0IHJldmVyc2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmV2ZXJzZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogcmV2ZXJzZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG4gIHNldHVwRnVuYzogc2V0dXBcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RotateWithOffset } from '@tensorflow/tfjs-core';\nimport { backend_util } from '@tensorflow/tfjs-core';\nlet wasmRotate;\nfunction setup(backend) {\n wasmRotate = backend.wasm.cwrap(RotateWithOffset, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nexport function rotateWithOffset(args) {\n const { inputs, backend, attrs } = args;\n const { image } = inputs;\n const { radians, fillValue, center } = attrs;\n const out = backend.makeOutput(image.shape, image.dtype);\n const imageId = backend.dataIdMap.get(image.dataId).id;\n const outId = backend.dataIdMap.get(out.dataId).id;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const [centerX, centerY] = backend_util.getImageCenter(center, imageHeight, imageWidth);\n const fillIsBlack = fillValue === 0;\n const fullOpacityValue = 255;\n const fillValues = typeof fillValue === 'number' ?\n [fillValue, fillValue, fillValue, fillIsBlack ? 0 : fullOpacityValue] :\n [...fillValue, fullOpacityValue];\n const fillBytes = new Uint8Array(new Int32Array(fillValues).buffer);\n wasmRotate(imageId, batch, imageHeight, imageWidth, numChannels, radians, centerX, centerY, fillBytes, fillValues.length, outId);\n return out;\n}\nexport const rotateWithOffsetConfig = {\n kernelName: RotateWithOffset,\n backendName: 'wasm',\n kernelFunc: rotateWithOffset,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm90YXRlV2l0aE9mZnNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1JvdGF0ZVdpdGhPZmZzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixnQkFBZ0IsRUFBNEQsTUFBTSx1QkFBdUIsQ0FBQztBQUM1SSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbkQsSUFBSSxVQUdpRSxDQUFDO0FBRXRFLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2pFLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRLEVBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBSWhDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTNDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRW5ELE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRWxFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQ3BCLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVqRSxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0lBRTdCLE1BQU0sVUFBVSxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLEdBQUcsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEUsVUFBVSxDQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFpQjtJQUNsRCxVQUFVLEVBQUUsZ0JBQWdCO0lBQzVCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxnQkFBeUM7SUFDckQsU0FBUyxFQUFFLEtBQUs7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJvdGF0ZVdpdGhPZmZzZXQsIFJvdGF0ZVdpdGhPZmZzZXRBdHRycywgUm90YXRlV2l0aE9mZnNldElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5sZXQgd2FzbVJvdGF0ZTogKFxuICAgIHhJZDogbnVtYmVyLCBiYXRjaDogbnVtYmVyLCBpbWFnZUhlaWdodDogbnVtYmVyLCBpbWFnZVdpZHRoOiBudW1iZXIsXG4gICAgbnVtQ2hhbm5lbHM6IG51bWJlciwgcmFkaWFuczogbnVtYmVyLCBjZW50ZXJYOiBudW1iZXIsIGNlbnRlclk6IG51bWJlcixcbiAgICBmaWxsQnl0ZXM6IFVpbnQ4QXJyYXksIGZpbGxMZW5ndGg6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbVJvdGF0ZSA9IGJhY2tlbmQud2FzbS5jd3JhcChSb3RhdGVXaXRoT2Zmc2V0LCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hcbiAgICAnbnVtYmVyJywgIC8vIGltYWdlSGVpZ2h0XG4gICAgJ251bWJlcicsICAvLyBpbWFnZVdpZHRoXG4gICAgJ251bWJlcicsICAvLyBudW1DaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gcmFkaWFuc1xuICAgICdudW1iZXInLCAgLy8gY2VudGVyWFxuICAgICdudW1iZXInLCAgLy8gY2VudGVyWVxuICAgICdhcnJheScsICAgLy8gZmlsbEJ5dGVzXG4gICAgJ251bWJlcicsICAvLyBmaWxsTGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVdpdGhPZmZzZXQoYXJnczoge1xuICBpbnB1dHM6IFJvdGF0ZVdpdGhPZmZzZXRJbnB1dHMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBhdHRyczogUm90YXRlV2l0aE9mZnNldEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtyYWRpYW5zLCBmaWxsVmFsdWUsIGNlbnRlcn0gPSBhdHRycztcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoaW1hZ2Uuc2hhcGUsIGltYWdlLmR0eXBlKTtcbiAgY29uc3QgaW1hZ2VJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbWFnZS5kYXRhSWQpLmlkO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBudW1DaGFubmVsc10gPSBpbWFnZS5zaGFwZTtcblxuICBjb25zdCBbY2VudGVyWCwgY2VudGVyWV0gPVxuICAgICAgYmFja2VuZF91dGlsLmdldEltYWdlQ2VudGVyKGNlbnRlciwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgpO1xuXG4gIGNvbnN0IGZpbGxJc0JsYWNrID0gZmlsbFZhbHVlID09PSAwO1xuICBjb25zdCBmdWxsT3BhY2l0eVZhbHVlID0gMjU1O1xuXG4gIGNvbnN0IGZpbGxWYWx1ZXMgPSB0eXBlb2YgZmlsbFZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICBbZmlsbFZhbHVlLCBmaWxsVmFsdWUsIGZpbGxWYWx1ZSwgZmlsbElzQmxhY2sgPyAwIDogZnVsbE9wYWNpdHlWYWx1ZV0gOlxuICAgICAgWy4uLmZpbGxWYWx1ZSwgZnVsbE9wYWNpdHlWYWx1ZV07XG4gIGNvbnN0IGZpbGxCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGZpbGxWYWx1ZXMpLmJ1ZmZlcik7XG5cbiAgd2FzbVJvdGF0ZShcbiAgICAgIGltYWdlSWQsIGJhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgbnVtQ2hhbm5lbHMsIHJhZGlhbnMsIGNlbnRlclgsXG4gICAgICBjZW50ZXJZLCBmaWxsQnl0ZXMsIGZpbGxWYWx1ZXMubGVuZ3RoLCBvdXRJZCk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCByb3RhdGVXaXRoT2Zmc2V0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJvdGF0ZVdpdGhPZmZzZXQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHJvdGF0ZVdpdGhPZmZzZXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxuICBzZXR1cEZ1bmM6IHNldHVwXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Round } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const roundConfig = createUnaryKernelConfig(Round);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Sb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQWUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSb3VuZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3Qgcm91bmRDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKFJvdW5kKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Rsqrt } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const rsqrtConfig = createUnaryKernelConfig(Rsqrt);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnNxcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Sc3FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQWUsS0FBSyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQix1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSc3FydH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHJzcXJ0Q29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhSc3FydCk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { scatter_util, ScatterNd, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmScatterNd;\nfunction setup(backend) {\n wasmScatterNd = backend.wasm.cwrap(ScatterNd, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number' // outId\n ]);\n}\nfunction scatterNd(args) {\n const { backend, inputs, attrs } = args;\n const { indices, updates } = inputs;\n const { shape } = attrs;\n const out = backend.makeOutput(shape, updates.dtype);\n if (util.sizeFromShape(shape) === 0) {\n return out;\n }\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = scatter_util.calculateShapes(updates, indices, shape);\n const indicesData = backend.dataIdMap.get(indices.dataId);\n const indicesId = indicesData.id;\n const updatesData = backend.dataIdMap.get(updates.dataId);\n const updatesId = updatesData.id;\n const stridesBytes = new Uint8Array(new Int32Array(strides).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmScatterNd(indicesId, updatesId, CppDType[updates.dtype], sliceRank, numUpdates, sliceSize, stridesBytes, outputSize, outId);\n return out;\n}\nexport const scatterNdConfig = {\n kernelName: ScatterNd,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: scatterNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlck5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU2NhdHRlck5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsWUFBWSxFQUFFLFNBQVMsRUFBK0MsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJM0ksT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLGFBRzBDLENBQUM7QUFFL0MsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQzNELFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUSxDQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUNkLElBQzBFO0lBRTVFLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxNQUFNLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUN6RCxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxhQUFhLENBQ1QsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQ3BFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWhELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLFNBQWtDO0NBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBzY2F0dGVyX3V0aWwsIFNjYXR0ZXJOZCwgU2NhdHRlck5kQXR0cnMsIFNjYXR0ZXJOZElucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtU2NhdHRlck5kOiAoXG4gICAgaW5kaWNlc0lkOiBudW1iZXIsIHVwZGF0ZXNJZDogbnVtYmVyLCBkdHlwZTogQ3BwRFR5cGUsIHNsaWNlUmFuazogbnVtYmVyLFxuICAgIG51bVVwZGF0ZXM6IG51bWJlciwgc2xpY2VTaXplOiBudW1iZXIsIHN0cmlkZXM6IFVpbnQ4QXJyYXksXG4gICAgb3V0cHV0U2l6ZTogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtU2NhdHRlck5kID0gYmFja2VuZC53YXNtLmN3cmFwKFNjYXR0ZXJOZCwgbnVsbCAvKnZvaWQqLywgW1xuICAgICdudW1iZXInLCAgLy8gaW5kaWNlc0lkXG4gICAgJ251bWJlcicsICAvLyB1cGRhdGVzSWRcbiAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgJ251bWJlcicsICAvLyBzbGljZVJhbmtcbiAgICAnbnVtYmVyJywgIC8vIG51bVVwZGF0ZXNcbiAgICAnbnVtYmVyJywgIC8vIHNsaWNlU2l6ZVxuICAgICdhcnJheScsICAgLy8gc3RyaWRlc1xuICAgICdudW1iZXInLCAgLy8gb3V0cHV0U2l6ZVxuICAgICdudW1iZXInICAgLy8gb3V0SWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIHNjYXR0ZXJOZChcbiAgICBhcmdzOlxuICAgICAgICB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogU2NhdHRlck5kSW5wdXRzLCBhdHRyczogU2NhdHRlck5kQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2luZGljZXMsIHVwZGF0ZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7c2hhcGV9ID0gYXR0cnM7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHNoYXBlLCB1cGRhdGVzLmR0eXBlKTtcbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29uc3Qge3NsaWNlUmFuaywgbnVtVXBkYXRlcywgc2xpY2VTaXplLCBzdHJpZGVzLCBvdXRwdXRTaXplfSA9XG4gICAgICBzY2F0dGVyX3V0aWwuY2FsY3VsYXRlU2hhcGVzKHVwZGF0ZXMsIGluZGljZXMsIHNoYXBlKTtcblxuICBjb25zdCBpbmRpY2VzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbmRpY2VzLmRhdGFJZCk7XG4gIGNvbnN0IGluZGljZXNJZCA9IGluZGljZXNEYXRhLmlkO1xuXG4gIGNvbnN0IHVwZGF0ZXNEYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHVwZGF0ZXMuZGF0YUlkKTtcbiAgY29uc3QgdXBkYXRlc0lkID0gdXBkYXRlc0RhdGEuaWQ7XG5cbiAgY29uc3Qgc3RyaWRlc0J5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoc3RyaWRlcykuYnVmZmVyKTtcblxuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcbiAgd2FzbVNjYXR0ZXJOZChcbiAgICAgIGluZGljZXNJZCwgdXBkYXRlc0lkLCBDcHBEVHlwZVt1cGRhdGVzLmR0eXBlXSwgc2xpY2VSYW5rLCBudW1VcGRhdGVzLFxuICAgICAgc2xpY2VTaXplLCBzdHJpZGVzQnl0ZXMsIG91dHB1dFNpemUsIG91dElkKTtcblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgc2NhdHRlck5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNjYXR0ZXJOZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogc2NhdHRlck5kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SearchSorted } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmSearchSorted;\nfunction setup(backend) {\n wasmSearchSorted = backend.wasm.cwrap(SearchSorted, null /* void */, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'bool',\n 'number', // outId\n ]);\n}\nfunction searchSorted(args) {\n const { inputs, backend, attrs } = args;\n const { sortedSequence, values } = inputs;\n const { side } = attrs;\n if (sortedSequence.dtype !== values.dtype) {\n throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${sortedSequence.dtype} and ${values.dtype}`);\n }\n const out = backend.makeOutput(values.shape, 'int32');\n function tensorId(x) {\n return backend.dataIdMap.get(x.dataId).id;\n }\n wasmSearchSorted(tensorId(sortedSequence), tensorId(values), \n /*batchSize=*/ sortedSequence.shape[0], \n /*sequenceSize=*/ sortedSequence.shape[1], \n /*valuesSize=*/ values.shape[1], \n /*dtype=*/ CppDType[sortedSequence.dtype], \n /*isSideLeft=*/ side === 'left', tensorId(out));\n return out;\n}\nexport const searchSortedConfig = {\n kernelName: SearchSorted,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: searchSorted\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoU29ydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU2VhcmNoU29ydGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsWUFBWSxFQUFvRCxNQUFNLHVCQUF1QixDQUFDO0FBR2hJLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFakMsSUFBSSxnQkFHMkMsQ0FBQztBQUVoRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNuRSxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixNQUFNO1FBQ04sUUFBUSxFQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBSXJCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FDWCwrRUFDSSxjQUFjLENBQUMsS0FBSyxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3JEO0lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRELFNBQVMsUUFBUSxDQUFDLENBQWE7UUFDN0IsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRyxDQUFDO0lBQzdDLENBQUM7SUFDRCxnQkFBZ0IsQ0FDWixRQUFRLENBQUMsY0FBYyxDQUFDLEVBQ3hCLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDaEIsY0FBYyxDQUFBLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLGlCQUFpQixDQUFBLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsQ0FBQSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5QixVQUFVLENBQUEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDeEMsZUFBZSxDQUFBLElBQUksS0FBSyxNQUFNLEVBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDaEIsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNlYXJjaFNvcnRlZCwgU2VhcmNoU29ydGVkQXR0cnMsIFNlYXJjaFNvcnRlZElucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVNlYXJjaFNvcnRlZDogKFxuICAgIHNvcnRlZFNlcXVlbmNlSWQ6IG51bWJlciwgdmFsdWVzSWQ6IG51bWJlciwgYmF0Y2hTaXplOiBudW1iZXIsXG4gICAgc2VxdWVuY2VTaXplOiBudW1iZXIsIHZhbHVlc1NpemU6IG51bWJlciwgZHR5cGU6IG51bWJlcixcbiAgICBpc1NpZGVMZWZ0OiBib29sZWFuLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtU2VhcmNoU29ydGVkID0gYmFja2VuZC53YXNtLmN3cmFwKFNlYXJjaFNvcnRlZCwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyBzb3J0ZWRTZXF1ZW5jZUlkXG4gICAgJ251bWJlcicsICAvLyB2YWx1ZXNJZFxuICAgICdudW1iZXInLCAgLy8gYmF0Y2hTaXplXG4gICAgJ251bWJlcicsICAvLyBzZXF1ZW5jZVNpemVcbiAgICAnbnVtYmVyJywgIC8vIHZhbHVlc1NpemVcbiAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgJ2Jvb2wnLCAgICAvLyBpc1NpZGVMZWZ0XG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gc2VhcmNoU29ydGVkKGFyZ3M6IHtcbiAgaW5wdXRzOiBTZWFyY2hTb3J0ZWRJbnB1dHMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBhdHRyczogU2VhcmNoU29ydGVkQXR0cnMsXG59KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzfSA9IGlucHV0cztcbiAgY29uc3Qge3NpZGV9ID0gYXR0cnM7XG5cbiAgaWYgKHNvcnRlZFNlcXVlbmNlLmR0eXBlICE9PSB2YWx1ZXMuZHR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZWFyY2hTb3J0ZWQgZXJyb3I6IHNvcnRlZF9zZXF1ZW5jZSBtdXN0IGhhdmUgdGhlIHNhbWUgZHR5cGUgYXMgdmFsdWVzLiBHb3QgJHtcbiAgICAgICAgICAgIHNvcnRlZFNlcXVlbmNlLmR0eXBlfSBhbmQgJHt2YWx1ZXMuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQodmFsdWVzLnNoYXBlLCAnaW50MzInKTtcblxuICBmdW5jdGlvbiB0ZW5zb3JJZCh4OiBUZW5zb3JJbmZvKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQuZGF0YUlkTWFwLmdldCh4LmRhdGFJZCkuaWQhO1xuICB9XG4gIHdhc21TZWFyY2hTb3J0ZWQoXG4gICAgICB0ZW5zb3JJZChzb3J0ZWRTZXF1ZW5jZSksXG4gICAgICB0ZW5zb3JJZCh2YWx1ZXMpLFxuICAgICAgLypiYXRjaFNpemU9Ki9zb3J0ZWRTZXF1ZW5jZS5zaGFwZVswXSxcbiAgICAgIC8qc2VxdWVuY2VTaXplPSovc29ydGVkU2VxdWVuY2Uuc2hhcGVbMV0sXG4gICAgICAvKnZhbHVlc1NpemU9Ki92YWx1ZXMuc2hhcGVbMV0sXG4gICAgICAvKmR0eXBlPSovQ3BwRFR5cGVbc29ydGVkU2VxdWVuY2UuZHR5cGVdLFxuICAgICAgLyppc1NpZGVMZWZ0PSovc2lkZSA9PT0gJ2xlZnQnLFxuICAgICAgdGVuc29ySWQob3V0KSxcbiAgKTtcblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoU29ydGVkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNlYXJjaFNvcnRlZCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogc2VhcmNoU29ydGVkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Select, util } from '@tensorflow/tfjs-core';\nlet wasmSelect;\nfunction setup(backend) {\n wasmSelect = backend.wasm.cwrap('SelectV2', null, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // outId\n ]);\n}\nfunction select(args) {\n const { inputs, backend } = args;\n const { condition, t, e } = inputs;\n const conditionId = backend.dataIdMap.get(condition.dataId).id;\n const tId = backend.dataIdMap.get(t.dataId).id;\n const eId = backend.dataIdMap.get(e.dataId).id;\n const out = backend.makeOutput(t.shape, t.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const cRank = condition.shape.length;\n const tRank = t.shape.length;\n const offset = cRank === 0 || cRank > 1 || tRank === 1 ?\n 1 :\n util.sizeFromShape(t.shape.slice(1));\n wasmSelect(conditionId, tId, eId, offset, outId);\n return out;\n}\nexport const selectConfig = {\n kernelName: Select,\n backendName: 'wasm',\n kernelFunc: select,\n setupFunc: setup\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU2VsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsTUFBTSxFQUFnQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkzRixJQUFJLFVBRXNCLENBQUM7QUFFM0IsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUU7UUFDaEQsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFrRDtJQUNoRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRW5ELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxNQUErQjtJQUMzQyxTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU2VsZWN0LCBTZWxlY3RJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtU2VsZWN0OiAoXG4gICAgY29uZGl0aW9uSWQ6IG51bWJlciwgdElkOiBudW1iZXIsIGVJZDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcixcbiAgICBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSkge1xuICB3YXNtU2VsZWN0ID0gYmFja2VuZC53YXNtLmN3cmFwKCdTZWxlY3RWMicsIG51bGwsIFtcbiAgICAnbnVtYmVyJywgIC8vIGNvbmRpdGlvbklkXG4gICAgJ251bWJlcicsICAvLyB0SWRcbiAgICAnbnVtYmVyJywgIC8vIGVJZFxuICAgICdudW1iZXInLCAgLy8gb2Zmc2V0XG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0KGFyZ3M6IHtpbnB1dHM6IFNlbGVjdElucHV0cywgYmFja2VuZDogQmFja2VuZFdhc219KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2NvbmRpdGlvbiwgdCwgZX0gPSBpbnB1dHM7XG5cbiAgY29uc3QgY29uZGl0aW9uSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoY29uZGl0aW9uLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IHRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh0LmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGVJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChlLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh0LnNoYXBlLCB0LmR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgY1JhbmsgPSBjb25kaXRpb24uc2hhcGUubGVuZ3RoO1xuICBjb25zdCB0UmFuayA9IHQuc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IG9mZnNldCA9IGNSYW5rID09PSAwIHx8IGNSYW5rID4gMSB8fCB0UmFuayA9PT0gMSA/XG4gICAgICAxIDpcbiAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZSh0LnNoYXBlLnNsaWNlKDEpKTtcblxuICB3YXNtU2VsZWN0KGNvbmRpdGlvbklkLCB0SWQsIGVJZCwgb2Zmc2V0LCBvdXRJZCk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2VsZWN0LFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiBzZWxlY3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxuICBzZXR1cEZ1bmM6IHNldHVwXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Selu } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const seluConfig = createUnaryKernelConfig(Selu);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTZWx1fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBzZWx1Q29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhTZWx1KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sigmoid, util } from '@tensorflow/tfjs-core';\nlet wasmFunc;\nfunction setup(backend) {\n wasmFunc = backend.wasm.cwrap(Sigmoid, null /* void */, ['number', 'number']);\n}\nfunction sigmoid(args) {\n const { backend, inputs: { x } } = args;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(x.shape, x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n // Short-circuit zero-sized tensors.\n if (util.sizeFromShape(out.shape) === 0) {\n return out;\n }\n wasmFunc(xId, outId);\n return out;\n}\nexport const sigmoidConfig = {\n kernelName: 'Sigmoid',\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sigmoid\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbW9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NpZ21vaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixPQUFPLEVBQTZCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXpHLElBQUksUUFBOEMsQ0FBQztBQUVuRCxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBbUQ7SUFFbEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBQyxHQUFHLElBQUksQ0FBQztJQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVuRCxvQ0FBb0M7SUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdkMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNpZ21vaWQsIFNpZ21vaWRJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtRnVuYzogKHhJZDogbnVtYmVyLCBvdXRJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtRnVuYyA9IGJhY2tlbmQud2FzbS5jd3JhcChTaWdtb2lkLCBudWxsIC8qIHZvaWQgKi8sIFsnbnVtYmVyJywgJ251bWJlciddKTtcbn1cblxuZnVuY3Rpb24gc2lnbW9pZChhcmdzOiB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogU2lnbW9pZElucHV0c30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzOiB7eH19ID0gYXJncztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHguc2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICAvLyBTaG9ydC1jaXJjdWl0IHplcm8tc2l6ZWQgdGVuc29ycy5cbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXQuc2hhcGUpID09PSAwKSB7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHdhc21GdW5jKHhJZCwgb3V0SWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgc2lnbW9pZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiAnU2lnbW9pZCcsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHNpZ21vaWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sign } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const signConfig = createUnaryKernelConfig(Sign);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTaWdufSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBzaWduQ29uZmlnOiBLZXJuZWxDb25maWcgPSBjcmVhdGVVbmFyeUtlcm5lbENvbmZpZyhTaWduKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sin } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const sinConfig = createUnaryKernelConfig(Sin);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpbn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHNpbkNvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoU2luKTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sinh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const sinhConfig = createUnaryKernelConfig(Sinh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NpbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU2luaH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuXG5leHBvcnQgY29uc3Qgc2luaENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoU2luaCk7XG4iXX0=","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Softplus } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const softplusConfig = createUnaryKernelConfig(Softplus);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHBsdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9Tb2Z0cGx1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQix1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNvZnRwbHVzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5cbmV4cG9ydCBjb25zdCBzb2Z0cGx1c0NvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoU29mdHBsdXMpO1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SpaceToBatchND, util } from '@tensorflow/tfjs-core';\nimport { padV2Config } from './PadV2';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nfunction spaceToBatchND(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, paddings } = attrs;\n const prod = util.sizeFromShape(blockShape);\n const completePaddings = [[0, 0]];\n completePaddings.push(...paddings);\n for (let i = 1 + blockShape.length; i < x.shape.length; ++i) {\n completePaddings.push([0, 0]);\n }\n const paddedX = padV2Config.kernelFunc({\n inputs: { x },\n backend,\n attrs: { paddings: completePaddings, constantValue: 0 }\n });\n const reshapedPaddedShape = backend_util.getReshaped(paddedX.shape, blockShape, prod, false);\n const permutedReshapedPaddedPermutation = backend_util.getPermuted(reshapedPaddedShape.length, blockShape.length, false);\n const flattenShape = backend_util.getReshapedPermuted(paddedX.shape, blockShape, prod, false);\n const reshapeInputs = { x: paddedX };\n const reshapeAttrs = { shape: reshapedPaddedShape };\n const paddedXReshaped = reshape({ inputs: reshapeInputs, backend, attrs: reshapeAttrs });\n const transposeInputs = { x: paddedXReshaped };\n const transposeAttrs = { perm: permutedReshapedPaddedPermutation };\n const paddedXT = transpose({ inputs: transposeInputs, backend, attrs: transposeAttrs });\n const resultReshapeInputs = { x: paddedXT };\n const resultReshapeAttrs = { shape: flattenShape };\n const result = reshape({ inputs: resultReshapeInputs, backend, attrs: resultReshapeAttrs });\n backend.disposeData(paddedX.dataId);\n backend.disposeData(paddedXReshaped.dataId);\n backend.disposeData(paddedXT.dataId);\n return result;\n}\nexport const spaceToBatchNDConfig = {\n kernelName: SpaceToBatchND,\n backendName: 'wasm',\n kernelFunc: spaceToBatchND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhY2VUb0JhdGNoTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9TcGFjZVRvQmF0Y2hORC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUF5RCxjQUFjLEVBQTBGLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXhOLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLFNBQVMsY0FBYyxDQUFDLElBSXZCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU1QyxNQUFNLGdCQUFnQixHQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUksUUFBb0MsQ0FBQyxDQUFDO0lBRWhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBRUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUM7UUFDWCxPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUM7S0FDdEQsQ0FBZSxDQUFDO0lBRWpCLE1BQU0sbUJBQW1CLEdBQ3JCLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXJFLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FDOUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUQsTUFBTSxZQUFZLEdBQ2QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU3RSxNQUFNLGFBQWEsR0FBa0IsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDbEQsTUFBTSxZQUFZLEdBQWlCLEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFDLENBQUM7SUFDaEUsTUFBTSxlQUFlLEdBQ2pCLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sZUFBZSxHQUFvQixFQUFDLENBQUMsRUFBRSxlQUFlLEVBQUMsQ0FBQztJQUM5RCxNQUFNLGNBQWMsR0FDQyxFQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUNWLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sbUJBQW1CLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3pELE1BQU0sa0JBQWtCLEdBQWlCLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FDbEIsRUFBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxDQUFDLENBQUM7SUFFdkUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaGFwZUF0dHJzLCBSZXNoYXBlSW5wdXRzLCBTcGFjZVRvQmF0Y2hORCwgU3BhY2VUb0JhdGNoTkRBdHRycywgU3BhY2VUb0JhdGNoTkRJbnB1dHMsIFRlbnNvckluZm8sIFRyYW5zcG9zZUF0dHJzLCBUcmFuc3Bvc2VJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGFkVjJDb25maWd9IGZyb20gJy4vUGFkVjInO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZnVuY3Rpb24gc3BhY2VUb0JhdGNoTkQoYXJnczoge1xuICBpbnB1dHM6IFNwYWNlVG9CYXRjaE5ESW5wdXRzLFxuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgYXR0cnM6IFNwYWNlVG9CYXRjaE5EQXR0cnNcbn0pIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmxvY2tTaGFwZSwgcGFkZGluZ3N9ID0gYXR0cnM7XG5cbiAgY29uc3QgcHJvZCA9IHV0aWwuc2l6ZUZyb21TaGFwZShibG9ja1NoYXBlKTtcblxuICBjb25zdCBjb21wbGV0ZVBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IFtbMCwgMF1dO1xuICBjb21wbGV0ZVBhZGRpbmdzLnB1c2goLi4uKHBhZGRpbmdzIGFzIEFycmF5PFtudW1iZXIsIG51bWJlcl0+KSk7XG5cbiAgZm9yIChsZXQgaSA9IDEgKyBibG9ja1NoYXBlLmxlbmd0aDsgaSA8IHguc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBjb21wbGV0ZVBhZGRpbmdzLnB1c2goWzAsIDBdKTtcbiAgfVxuXG4gIGNvbnN0IHBhZGRlZFggPSBwYWRWMkNvbmZpZy5rZXJuZWxGdW5jKHtcbiAgICBpbnB1dHM6IHt4fSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7cGFkZGluZ3M6IGNvbXBsZXRlUGFkZGluZ3MsIGNvbnN0YW50VmFsdWU6IDB9XG4gIH0pIGFzIFRlbnNvckluZm87XG5cbiAgY29uc3QgcmVzaGFwZWRQYWRkZWRTaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWQocGFkZGVkWC5zaGFwZSwgYmxvY2tTaGFwZSwgcHJvZCwgZmFsc2UpO1xuXG4gIGNvbnN0IHBlcm11dGVkUmVzaGFwZWRQYWRkZWRQZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRQZXJtdXRlZChcbiAgICAgIHJlc2hhcGVkUGFkZGVkU2hhcGUubGVuZ3RoLCBibG9ja1NoYXBlLmxlbmd0aCwgZmFsc2UpO1xuXG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWRQZXJtdXRlZChwYWRkZWRYLnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kLCBmYWxzZSk7XG5cbiAgY29uc3QgcmVzaGFwZUlucHV0czogUmVzaGFwZUlucHV0cyA9IHt4OiBwYWRkZWRYfTtcbiAgY29uc3QgcmVzaGFwZUF0dHJzOiBSZXNoYXBlQXR0cnMgPSB7c2hhcGU6IHJlc2hhcGVkUGFkZGVkU2hhcGV9O1xuICBjb25zdCBwYWRkZWRYUmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiByZXNoYXBlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogcmVzaGFwZUF0dHJzfSk7XG5cbiAgY29uc3QgdHJhbnNwb3NlSW5wdXRzOiBUcmFuc3Bvc2VJbnB1dHMgPSB7eDogcGFkZGVkWFJlc2hhcGVkfTtcbiAgY29uc3QgdHJhbnNwb3NlQXR0cnM6XG4gICAgICBUcmFuc3Bvc2VBdHRycyA9IHtwZXJtOiBwZXJtdXRlZFJlc2hhcGVkUGFkZGVkUGVybXV0YXRpb259O1xuICBjb25zdCBwYWRkZWRYVCA9XG4gICAgICB0cmFuc3Bvc2Uoe2lucHV0czogdHJhbnNwb3NlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogdHJhbnNwb3NlQXR0cnN9KTtcblxuICBjb25zdCByZXN1bHRSZXNoYXBlSW5wdXRzOiBSZXNoYXBlSW5wdXRzID0ge3g6IHBhZGRlZFhUfTtcbiAgY29uc3QgcmVzdWx0UmVzaGFwZUF0dHJzOiBSZXNoYXBlQXR0cnMgPSB7c2hhcGU6IGZsYXR0ZW5TaGFwZX07XG4gIGNvbnN0IHJlc3VsdCA9IHJlc2hhcGUoXG4gICAgICB7aW5wdXRzOiByZXN1bHRSZXNoYXBlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogcmVzdWx0UmVzaGFwZUF0dHJzfSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YShwYWRkZWRYLmRhdGFJZCk7XG4gIGJhY2tlbmQuZGlzcG9zZURhdGEocGFkZGVkWFJlc2hhcGVkLmRhdGFJZCk7XG4gIGJhY2tlbmQuZGlzcG9zZURhdGEocGFkZGVkWFQuZGF0YUlkKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3Qgc3BhY2VUb0JhdGNoTkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhY2VUb0JhdGNoTkQsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHNwYWNlVG9CYXRjaE5EIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SparseFillEmptyRows } from '@tensorflow/tfjs-core';\nimport { slice } from './Slice';\nimport { CppDType } from './types';\nlet wasmSparseFillEmptyRows;\nexport function setup(backend) {\n wasmSparseFillEmptyRows =\n backend.wasm.cwrap('SparseFillEmptyRows', 'number', [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // exceptionValuesId\n ]);\n}\nexport function sparseFillEmptyRows(args) {\n const { backend, inputs } = args;\n const { indices, values, denseShape, defaultValue } = inputs;\n const indicesCount = indices.shape[0];\n const rank = indices.shape[1];\n const denseRows = backend.readSync(denseShape.dataId)[0];\n // Set output size to maximum possible and resize later (actual result\n // might be smaller).\n const maxOutputIndicesShape = [indicesCount + denseRows, rank];\n const indicesId = backend.dataIdMap.get(indices.dataId).id;\n const valuesId = backend.dataIdMap.get(values.dataId).id;\n const defaultValueId = backend.dataIdMap.get(defaultValue.dataId).id;\n const outputIndices = backend.makeOutput(maxOutputIndicesShape, indices.dtype);\n const outputIndicesId = backend.dataIdMap.get(outputIndices.dataId).id;\n const outputValues = backend.makeOutput(maxOutputIndicesShape.slice(0, 1), values.dtype);\n const outputValuesId = backend.dataIdMap.get(outputValues.dataId).id;\n const emptyRowIndicator = backend.makeOutput([denseRows], 'bool');\n const emptyRowIndicatorId = backend.dataIdMap.get(emptyRowIndicator.dataId).id;\n const reverseIndexMap = backend.makeOutput([indicesCount], indices.dtype);\n const reverseIndexMapId = backend.dataIdMap.get(reverseIndexMap.dataId).id;\n const exceptionValues = backend.makeOutput([4], 'int32');\n const exceptionValuesId = backend.dataIdMap.get(exceptionValues.dataId).id;\n const outputRows = wasmSparseFillEmptyRows(indicesId, valuesId, CppDType[values.dtype], indicesCount, denseRows, rank, defaultValueId, outputIndicesId, outputValuesId, emptyRowIndicatorId, reverseIndexMapId, exceptionValuesId);\n const exceptionValuesArray = backend.readSync(exceptionValues.dataId);\n let exceptionMessage;\n switch (exceptionValuesArray[0]) {\n case 1: {\n exceptionMessage =\n backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch(exceptionValuesArray[1]);\n break;\n }\n case 2: {\n exceptionMessage =\n backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]);\n break;\n }\n case 3:\n exceptionMessage =\n backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]);\n break;\n default:\n exceptionMessage = '';\n }\n backend.disposeData(exceptionValues.dataId);\n if (exceptionMessage) {\n backend.disposeData(outputIndices.dataId);\n backend.disposeData(outputValues.dataId);\n backend.disposeData(emptyRowIndicator.dataId);\n backend.disposeData(reverseIndexMap.dataId);\n throw new Error(exceptionMessage);\n }\n let resizedIndices = outputIndices;\n let resizedValues = outputValues;\n // Overestimated output size.\n if (outputRows !== maxOutputIndicesShape[0]) {\n resizedIndices = slice({\n inputs: { x: outputIndices },\n attrs: { begin: 0, size: [outputRows, rank] },\n backend\n });\n resizedValues = slice({\n inputs: { x: outputValues },\n attrs: { begin: 0, size: outputRows },\n backend\n });\n backend.disposeData(outputIndices.dataId);\n backend.disposeData(outputValues.dataId);\n }\n return [resizedIndices, resizedValues, emptyRowIndicator, reverseIndexMap];\n}\nexport const sparseFillEmptyRowsConfig = {\n kernelName: SparseFillEmptyRows,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sparseFillEmptyRows\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlRmlsbEVtcHR5Um93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NwYXJzZUZpbGxFbXB0eVJvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsbUJBQW1CLEVBQXdDLE1BQU0sdUJBQXVCLENBQUM7QUFHekksT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksdUJBS29DLENBQUM7QUFFekMsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFvQjtJQUN4Qyx1QkFBdUI7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsUUFBUSxFQUFFO1lBQ2xELFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUSxFQUFHLG9CQUFvQjtTQUNoQyxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBR25DO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUUzRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdB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QUNwQixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsWUFBWSxFQUFDO1lBQ3pCLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQztZQUNuQyxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUM7SUFFRCxPQUFPLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VGaWxsRW1wdHlSb3dzLCBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9TbGljZSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVNwYXJzZUZpbGxFbXB0eVJvd3M6IChcbiAgICBpbmRpY2VzSWQ6IG51bWJlciwgdmFsdWVzSWQ6IG51bWJlciwgdmFsdWVzRFR5cGU6IG51bWJlcixcbiAgICBpbmRpY2VzQ291bnQ6IG51bWJlciwgZGVuc2VSb3dzOiBudW1iZXIsIHJhbms6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWVJZDogbnVtYmVyLCBvdXRwdXRJbmRpY2VzSWQ6IG51bWJlciwgb3V0cHV0VmFsdWVzSWQ6IG51bWJlcixcbiAgICBlbXB0eVJvd0luZGljYXRvcklkOiBudW1iZXIsIHJldmVyc2VJbmRleE1hcElkOiBudW1iZXIsXG4gICAgZXhjZXB0aW9uVmFsdWVzSWQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVNwYXJzZUZpbGxFbXB0eVJvd3MgPVxuICAgICAgYmFja2VuZC53YXNtLmN3cmFwKCdTcGFyc2VGaWxsRW1wdHlSb3dzJywgJ251bWJlcicsIFtcbiAgICAgICAgJ251bWJlcicsICAvLyBpbmRpY2VzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyB2YWx1ZXNJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIHZhbHVlc0RUeXBlXG4gICAgICAgICdudW1iZXInLCAgLy8gaW5kaWNlc0NvdW50XG4gICAgICAgICdudW1iZXInLCAgLy8gZGVuc2VSb3dzXG4gICAgICAgICdudW1iZXInLCAgLy8gcmFua1xuICAgICAgICAnbnVtYmVyJywgIC8vIGRlZmF1bHRWYWx1ZUlkXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0cHV0SW5kaWNlc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0cHV0VmFsdWVzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBlbXB0eVJvd0luZGljYXRvcklkXG4gICAgICAgICdudW1iZXInLCAgLy8gcmV2ZXJzZUluZGV4TWFwSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBleGNlcHRpb25WYWx1ZXNJZFxuICAgICAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VGaWxsRW1wdHlSb3dzKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogU3BhcnNlRmlsbEVtcHR5Um93c0lucHV0cyxcbn0pOiBbVGVuc29ySW5mbywgVGVuc29ySW5mbywgVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbmRpY2VzLCB2YWx1ZXMsIGRlbnNlU2hhcGUsIGRlZmF1bHRWYWx1ZX0gPSBpbnB1dHM7XG5cbiAgY29uc3QgaW5kaWNlc0NvdW50ID0gaW5kaWNlcy5zaGFwZVswXTtcbiAgY29uc3QgcmFuayA9IGluZGljZXMuc2hhcGVbMV07XG4gIGNvbnN0IGRlbnNlUm93cyA9IGJhY2tlbmQucmVhZFN5bmMoZGVuc2VTaGFwZS5kYXRhSWQpWzBdIGFzIG51bWJlcjtcblxuICAvLyBTZXQgb3V0cHV0IHNpemUgdG8gbWF4aW11bSBwb3NzaWJsZSBhbmQgcmVzaXplIGxhdGVyIChhY3R1YWwgcmVzdWx0XG4gIC8vIG1pZ2h0IGJlIHNtYWxsZXIpLlxuICBjb25zdCBtYXhPdXRwdXRJbmRpY2VzU2hhcGUgPSBbaW5kaWNlc0NvdW50ICsgZGVuc2VSb3dzLCByYW5rXTtcblxuICBjb25zdCBpbmRpY2VzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW5kaWNlcy5kYXRhSWQpLmlkO1xuICBjb25zdCB2YWx1ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh2YWx1ZXMuZGF0YUlkKS5pZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZGVmYXVsdFZhbHVlLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3Qgb3V0cHV0SW5kaWNlcyA9XG4gICAgICBiYWNrZW5kLm1ha2VPdXRwdXQobWF4T3V0cHV0SW5kaWNlc1NoYXBlLCBpbmRpY2VzLmR0eXBlKTtcbiAgY29uc3Qgb3V0cHV0SW5kaWNlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dHB1dEluZGljZXMuZGF0YUlkKS5pZDtcblxuICBjb25zdCBvdXRwdXRWYWx1ZXMgPVxuICAgICAgYmFja2VuZC5tYWtlT3V0cHV0KG1heE91dHB1dEluZGljZXNTaGFwZS5zbGljZSgwLCAxKSwgdmFsdWVzLmR0eXBlKTtcbiAgY29uc3Qgb3V0cHV0VmFsdWVzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0cHV0VmFsdWVzLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgZW1wdHlSb3dJbmRpY2F0b3IgPSBiYWNrZW5kLm1ha2VPdXRwdXQoW2RlbnNlUm93c10sICdib29sJyk7XG4gIGNvbnN0IGVtcHR5Um93SW5kaWNhdG9ySWQgPVxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGVtcHR5Um93SW5kaWNhdG9yLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgcmV2ZXJzZUluZGV4TWFwID0gYmFja2VuZC5tYWtlT3V0cHV0KFtpbmRpY2VzQ291bnRdLCBpbmRpY2VzLmR0eXBlKTtcbiAgY29uc3QgcmV2ZXJzZUluZGV4TWFwSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQocmV2ZXJzZUluZGV4TWFwLmRhdGFJZCkuaWQ7XG5cbiAgY29uc3QgZXhjZXB0aW9uVmFsdWVzID0gYmFja2VuZC5tYWtlT3V0cHV0KFs0XSwgJ2ludDMyJyk7XG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGV4Y2VwdGlvblZhbHVlcy5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IG91dHB1dFJvd3MgPSB3YXNtU3BhcnNlRmlsbEVtcHR5Um93cyhcbiAgICAgIGluZGljZXNJZCwgdmFsdWVzSWQsIENwcERUeXBlW3ZhbHVlcy5kdHlwZV0sIGluZGljZXNDb3VudCwgZGVuc2VSb3dzLFxuICAgICAgcmFuaywgZGVmYXVsdFZhbHVlSWQsIG91dHB1dEluZGljZXNJZCwgb3V0cHV0VmFsdWVzSWQsXG4gICAgICBlbXB0eVJvd0luZGljYXRvcklkLCByZXZlcnNlSW5kZXhNYXBJZCwgZXhjZXB0aW9uVmFsdWVzSWQpO1xuXG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlc0FycmF5ID1cbiAgICAgIGJhY2tlbmQucmVhZFN5bmMoZXhjZXB0aW9uVmFsdWVzLmRhdGFJZCkgYXMgSW50MzJBcnJheTtcblxuICBsZXQgZXhjZXB0aW9uTWVzc2FnZTogc3RyaW5nO1xuICBzd2l0Y2ggKGV4Y2VwdGlvblZhbHVlc0FycmF5WzBdKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlRmlsbEVtcHR5Um93c0luZGljZXNEZW5zZVNoYXBlTWlzbWF0Y2goXG4gICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlc0FycmF5WzFdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIGV4Y2VwdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VGaWxsRW1wdHlSb3dzTmVnYXRpdmVJbmRleEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWVzQXJyYXlbMV0sIGV4Y2VwdGlvblZhbHVlc0FycmF5WzJdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDM6XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlRmlsbEVtcHR5Um93c091dE9mUmFuZ2VJbmRleEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWVzQXJyYXlbMV0sIGV4Y2VwdGlvblZhbHVlc0FycmF5WzJdLFxuICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZXNBcnJheVszXSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZXhjZXB0aW9uTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YShleGNlcHRpb25WYWx1ZXMuZGF0YUlkKTtcbiAgaWYgKGV4Y2VwdGlvbk1lc3NhZ2UpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dEluZGljZXMuZGF0YUlkKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dFZhbHVlcy5kYXRhSWQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEoZW1wdHlSb3dJbmRpY2F0b3IuZGF0YUlkKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKHJldmVyc2VJbmRleE1hcC5kYXRhSWQpO1xuICAgIHRocm93IG5ldyBFcnJvcihleGNlcHRpb25NZXNzYWdlKTtcbiAgfVxuXG4gIGxldCByZXNpemVkSW5kaWNlcyA9IG91dHB1dEluZGljZXM7XG4gIGxldCByZXNpemVkVmFsdWVzID0gb3V0cHV0VmFsdWVzO1xuICAvLyBPdmVyZXN0aW1hdGVkIG91dHB1dCBzaXplLlxuICBpZiAob3V0cHV0Um93cyAhPT0gbWF4T3V0cHV0SW5kaWNlc1NoYXBlWzBdKSB7XG4gICAgcmVzaXplZEluZGljZXMgPSBzbGljZSh7XG4gICAgICBpbnB1dHM6IHt4OiBvdXRwdXRJbmRpY2VzfSxcbiAgICAgIGF0dHJzOiB7YmVnaW46IDAsIHNpemU6IFtvdXRwdXRSb3dzLCByYW5rXX0sXG4gICAgICBiYWNrZW5kXG4gICAgfSk7XG4gICAgcmVzaXplZFZhbHVlcyA9IHNsaWNlKHtcbiAgICAgIGlucHV0czoge3g6IG91dHB1dFZhbHVlc30sXG4gICAgICBhdHRyczoge2JlZ2luOiAwLCBzaXplOiBvdXRwdXRSb3dzfSxcbiAgICAgIGJhY2tlbmRcbiAgICB9KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dEluZGljZXMuZGF0YUlkKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dFZhbHVlcy5kYXRhSWQpO1xuICB9XG5cbiAgcmV0dXJuIFtyZXNpemVkSW5kaWNlcywgcmVzaXplZFZhbHVlcywgZW1wdHlSb3dJbmRpY2F0b3IsIHJldmVyc2VJbmRleE1hcF07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VGaWxsRW1wdHlSb3dzQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNwYXJzZUZpbGxFbXB0eVJvd3MsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHNwYXJzZUZpbGxFbXB0eVJvd3MgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SparseReshape, util } from '@tensorflow/tfjs-core';\nlet wasmSparseReshape;\nfunction setup(backend) {\n wasmSparseReshape = backend.wasm.cwrap(SparseReshape, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // exceptionValuesId\n ]);\n}\nfunction sparseReshape(args) {\n const { backend, inputs } = args;\n const { inputIndices, inputShape, newShape } = inputs;\n if (inputIndices.shape.length !== 2) {\n throw new Error(`Input indices should be a matrix but received shape\n ${inputIndices.shape}`);\n }\n if (inputShape.shape.length !== 1) {\n throw new Error(`Input shape should be a vector but received shape\n ${inputShape.shape}`);\n }\n if (newShape.shape.length !== 1) {\n throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`);\n }\n const inputIndicesId = backend.dataIdMap.get(inputIndices.dataId).id;\n const inputShapeId = backend.dataIdMap.get(inputShape.dataId).id;\n const newShapeId = backend.dataIdMap.get(newShape.dataId).id;\n const nnz = inputIndices.shape[0];\n const outputRank = util.sizeFromShape(newShape.shape);\n const newIndices = backend.makeOutput([nnz, outputRank], inputIndices.dtype);\n const newIndicesId = backend.dataIdMap.get(newIndices.dataId).id;\n const outputShape = backend.makeOutput([outputRank], newShape.dtype);\n const outputShapeId = backend.dataIdMap.get(outputShape.dataId).id;\n const exceptionValues = backend.makeOutput([3], 'int32');\n const exceptionValuesId = backend.dataIdMap.get(exceptionValues.dataId).id;\n wasmSparseReshape(inputIndicesId, inputShapeId, newShapeId, nnz, newIndicesId, outputShapeId, exceptionValuesId);\n const exceptionValuesArray = backend.readSync(exceptionValues.dataId);\n let exceptionMessage;\n switch (exceptionValuesArray[0]) {\n case 0: {\n exceptionMessage =\n backend_util.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]);\n break;\n }\n case 1: {\n exceptionMessage =\n backend_util.getSparseReshapeNegativeOutputDimErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]);\n break;\n }\n case 2:\n exceptionMessage =\n backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();\n break;\n case 3: {\n const inputShapeValues = Array.from(backend.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend.readSync(outputShape.dataId));\n exceptionMessage =\n backend_util.getSparseReshapeInputOutputMultipleErrorMessage(inputShapeValues, outputShapeValues);\n break;\n }\n case 4: {\n const inputShapeValues = Array.from(backend.readSync(inputShape.dataId)), outputShapeValues = Array.from(backend.readSync(outputShape.dataId));\n exceptionMessage =\n backend_util.getSparseReshapeInputOutputMismatchErrorMessage(inputShapeValues, outputShapeValues);\n break;\n }\n default:\n exceptionMessage = '';\n }\n backend.disposeData(exceptionValues.dataId);\n if (exceptionMessage) {\n backend.disposeData(newIndices.dataId);\n backend.disposeData(outputShape.dataId);\n throw new Error(exceptionMessage);\n }\n return [newIndices, outputShape];\n}\nexport const sparseReshapeConfig = {\n kernelName: SparseReshape,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sparseReshape\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NwYXJzZVJlc2hhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsYUFBYSxFQUFtQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUluSSxJQUFJLGlCQUdrQyxDQUFDO0FBRXZDLFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ25FLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVEsRUFBRyxvQkFBb0I7S0FDaEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBR3RCO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXBELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUM7VUFDVixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM3QjtJQUNELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUM7VUFDVixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUMzQjtJQUNELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxF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RUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzdDLE1BQU07U0FDUDtRQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDTixNQUFNLGdCQUFnQixHQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBZSxDQUFDLEVBQzNELGlCQUFpQixHQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFlLENBQUMsQ0FBQztZQUN6RSxnQkFBZ0I7Z0JBQ1osWUFBWSxDQUFDLCtDQUErQyxDQUN4RCxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzdDLE1BQU07U0FDUDtRQUNEO1lBQ0UsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0tBQ3pCO0lBRUQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxnQkFBZ0IsRUFBRTtRQUNwQixPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDbkM7SUFFRCxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLGFBQXNDO0NBQ25ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNwYXJzZVJlc2hhcGUsIFNwYXJzZVJlc2hhcGVJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmxldCB3YXNtU3BhcnNlUmVzaGFwZTogKFxuICAgIGlucHV0SW5kaWNlc0lkOiBudW1iZXIsIGlucHV0U2hhcGVJZDogbnVtYmVyLCBuZXdTaGFwZUlkOiBudW1iZXIsXG4gICAgbm56OiBudW1iZXIsIG5ld0luZGljZXNJZDogbnVtYmVyLCBvdXRwdXRTaGFwZUlkOiBudW1iZXIsXG4gICAgZXhjZXB0aW9uVmFsdWVzSWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVNwYXJzZVJlc2hhcGUgPSBiYWNrZW5kLndhc20uY3dyYXAoU3BhcnNlUmVzaGFwZSwgbnVsbCAvKnZvaWQqLywgW1xuICAgICdudW1iZXInLCAgLy8gaW5wdXRJbmRpY2VzSWRcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0U2hhcGVJZFxuICAgICdudW1iZXInLCAgLy8gbmV3U2hhcGVJZFxuICAgICdudW1iZXInLCAgLy8gbm56XG4gICAgJ251bWJlcicsICAvLyBuZXdJbmRpY2VzSWRcbiAgICAnbnVtYmVyJywgIC8vIG91dHB1dFNoYXBlSWRcbiAgICAnbnVtYmVyJywgIC8vIGV4Y2VwdGlvblZhbHVlc0lkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBzcGFyc2VSZXNoYXBlKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogU3BhcnNlUmVzaGFwZUlucHV0cyxcbn0pOiBbVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbnB1dEluZGljZXMsIGlucHV0U2hhcGUsIG5ld1NoYXBlfSA9IGlucHV0cztcblxuICBpZiAoaW5wdXRJbmRpY2VzLnNoYXBlLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgaW5kaWNlcyBzaG91bGQgYmUgYSBtYXRyaXggYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICR7aW5wdXRJbmRpY2VzLnNoYXBlfWApO1xuICB9XG4gIGlmIChpbnB1dFNoYXBlLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgc2hhcGUgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZVxuICAgICAgICAke2lucHV0U2hhcGUuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKG5ld1NoYXBlLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRhcmdldCBzaGFwZSBzaG91bGQgYmUgYSB2ZWN0b3IgYnV0IHJlY2VpdmVkIHNoYXBlICR7bmV3U2hhcGUuc2hhcGV9YCk7XG4gIH1cblxuICBjb25zdCBpbnB1dEluZGljZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChpbnB1dEluZGljZXMuZGF0YUlkKS5pZDtcbiAgY29uc3QgaW5wdXRTaGFwZUlkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGlucHV0U2hhcGUuZGF0YUlkKS5pZDtcbiAgY29uc3QgbmV3U2hhcGVJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChuZXdTaGFwZS5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IG5ueiA9IGlucHV0SW5kaWNlcy5zaGFwZVswXTtcbiAgY29uc3Qgb3V0cHV0UmFuayA9IHV0aWwuc2l6ZUZyb21TaGFwZShuZXdTaGFwZS5zaGFwZSk7XG5cbiAgY29uc3QgbmV3SW5kaWNlcyA9IGJhY2tlbmQubWFrZU91dHB1dChbbm56LCBvdXRwdXRSYW5rXSwgaW5wdXRJbmRpY2VzLmR0eXBlKTtcbiAgY29uc3QgbmV3SW5kaWNlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG5ld0luZGljZXMuZGF0YUlkKS5pZDtcblxuICBjb25zdCBvdXRwdXRTaGFwZSA9IGJhY2tlbmQubWFrZU91dHB1dChbb3V0cHV0UmFua10sIG5ld1NoYXBlLmR0eXBlKTtcbiAgY29uc3Qgb3V0cHV0U2hhcGVJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXRwdXRTaGFwZS5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlcyA9IGJhY2tlbmQubWFrZU91dHB1dChbM10sICdpbnQzMicpO1xuICBjb25zdCBleGNlcHRpb25WYWx1ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChleGNlcHRpb25WYWx1ZXMuZGF0YUlkKS5pZDtcblxuICB3YXNtU3BhcnNlUmVzaGFwZShcbiAgICAgIGlucHV0SW5kaWNlc0lkLCBpbnB1dFNoYXBlSWQsIG5ld1NoYXBlSWQsIG5ueiwgbmV3SW5kaWNlc0lkLFxuICAgICAgb3V0cHV0U2hhcGVJZCwgZXhjZXB0aW9uVmFsdWVzSWQpO1xuXG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlc0FycmF5ID1cbiAgICAgIGJhY2tlbmQucmVhZFN5bmMoZXhjZXB0aW9uVmFsdWVzLmRhdGFJZCkgYXMgSW50MzJBcnJheTtcblxuICBsZXQgZXhjZXB0aW9uTWVzc2FnZTogc3RyaW5nO1xuICBzd2l0Y2ggKGV4Y2VwdGlvblZhbHVlc0FycmF5WzBdKSB7XG4gICAgY2FzZSAwOiB7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZU11bHRpcGxlTmVnYXRpdmVPbmVPdXRwdXREaW1FcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIGV4Y2VwdGlvblZhbHVlc0FycmF5WzFdLCBleGNlcHRpb25WYWx1ZXNBcnJheVsyXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAxOiB7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZU5lZ2F0aXZlT3V0cHV0RGltRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZXNBcnJheVsxXSwgZXhjZXB0aW9uVmFsdWVzQXJyYXlbMl0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjpcbiAgICAgIGV4Y2VwdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRTcGFyc2VSZXNoYXBlRW1wdHlUZW5zb3JaZXJvT3V0cHV0RGltRXJyb3JNZXNzYWdlKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGVWYWx1ZXMgPVxuICAgICAgICAgIEFycmF5LmZyb20oYmFja2VuZC5yZWFkU3luYyhpbnB1dFNoYXBlLmRhdGFJZCkgYXMgSW50MzJBcnJheSksXG4gICAgICAgICAgICBvdXRwdXRTaGFwZVZhbHVlcyA9XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLnJlYWRTeW5jKG91dHB1dFNoYXBlLmRhdGFJZCkgYXMgSW50MzJBcnJheSk7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TXVsdGlwbGVFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIGlucHV0U2hhcGVWYWx1ZXMsIG91dHB1dFNoYXBlVmFsdWVzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDQ6IHtcbiAgICAgIGNvbnN0IGlucHV0U2hhcGVWYWx1ZXMgPVxuICAgICAgICAgIEFycmF5LmZyb20oYmFja2VuZC5yZWFkU3luYyhpbnB1dFNoYXBlLmRhdGFJZCkgYXMgSW50MzJBcnJheSksXG4gICAgICAgICAgICBvdXRwdXRTaGFwZVZhbHVlcyA9XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLnJlYWRTeW5jKG91dHB1dFNoYXBlLmRhdGFJZCkgYXMgSW50MzJBcnJheSk7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0U3BhcnNlUmVzaGFwZUlucHV0T3V0cHV0TWlzbWF0Y2hFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIGlucHV0U2hhcGVWYWx1ZXMsIG91dHB1dFNoYXBlVmFsdWVzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgZXhjZXB0aW9uTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YShleGNlcHRpb25WYWx1ZXMuZGF0YUlkKTtcbiAgaWYgKGV4Y2VwdGlvbk1lc3NhZ2UpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG5ld0luZGljZXMuZGF0YUlkKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dFNoYXBlLmRhdGFJZCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGV4Y2VwdGlvbk1lc3NhZ2UpO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdJbmRpY2VzLCBvdXRwdXRTaGFwZV07XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VSZXNoYXBlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNwYXJzZVJlc2hhcGUsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHNwYXJzZVJlc2hhcGUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmSparseSegmentReduction;\nexport function setup(backend) {\n wasmSparseSegmentReduction =\n backend.wasm.cwrap('SparseSegmentReduction', null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number', // defaultValue\n ]);\n}\nexport function sparseSegmentReduction(args, isMean) {\n const { backend, inputs } = args;\n const { data, indices, segmentIds } = inputs;\n const numIndices = indices.shape[0];\n const segmentIdsBack = backend.readSync(segmentIds.dataId, numIndices - 1, numIndices)[0];\n const lastSegmentIdPlusOne = numIndices > 0 ? segmentIdsBack + 1 : 0;\n const outputRows = lastSegmentIdPlusOne;\n if (outputRows < 0) {\n throw (new Error(backend_util\n .getSparseSegmentReductionNegativeSegmentIdsErrorMessage()));\n }\n const outputShape = data.shape.slice();\n outputShape[0] = outputRows;\n const dataId = backend.dataIdMap.get(data.dataId).id;\n const indicesId = backend.dataIdMap.get(indices.dataId).id;\n const segmentIdsId = backend.dataIdMap.get(segmentIds.dataId).id;\n const output = backend.makeOutput(outputShape, data.dtype);\n const outputId = backend.dataIdMap.get(output.dataId).id;\n const exceptionValues = backend.makeOutput([4], 'int32');\n const exceptionValuesId = backend.dataIdMap.get(exceptionValues.dataId).id;\n wasmSparseSegmentReduction(dataId, CppDType[data.dtype], data.shape[0], indicesId, segmentIdsId, outputId, exceptionValuesId, isMean, 0);\n const exceptionValuesArray = backend.readSync(exceptionValues.dataId);\n let exceptionMessage;\n switch (exceptionValuesArray[0]) {\n case 0: {\n exceptionMessage =\n backend_util\n .getSparseSegmentReductionNegativeSegmentIdsErrorMessage();\n break;\n }\n case 1: {\n exceptionMessage =\n backend_util\n .getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();\n break;\n }\n case 2:\n exceptionMessage =\n backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2]);\n break;\n case 3:\n exceptionMessage =\n backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(exceptionValuesArray[1], exceptionValuesArray[2], exceptionValuesArray[3]);\n break;\n default:\n exceptionMessage = '';\n }\n backend.disposeData(exceptionValues.dataId);\n if (exceptionMessage) {\n backend.disposeData(output.dataId);\n throw new Error(exceptionMessage);\n }\n return output;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFJlZHVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NwYXJzZVNlZ21lbnRSZWR1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBOEQsTUFBTSx1QkFBdUIsQ0FBQztBQUloSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksMEJBRzhDLENBQUM7QUFFbkQsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUFvQjtJQUN4QywwQkFBMEI7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMxRCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsRUFBRyxlQUFlO1NBQzNCLENBQUMsQ0FBQztBQUNULENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ2xDLElBR0MsRUFDRCxNQUFlO0lBQ2pCLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUUzQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxHQUNmLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLG9CQUFvQixHQUFHLFVBQVUsR0FB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TUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIFNwYXJzZVNlZ21lbnRNZWFuSW5wdXRzLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21TcGFyc2VTZWdtZW50UmVkdWN0aW9uOiAoXG4gICAgZGF0YUlkOiBudW1iZXIsIGR0eXBlOiBudW1iZXIsIG51bVJvdzogbnVtYmVyLCBpbmRpY2VzSWQ6IG51bWJlcixcbiAgICBzZWdtZW50SWRzSWQ6IG51bWJlciwgb3V0cHV0SWQ6IG51bWJlciwgZXhjZXB0aW9uVmFsdWVzSWQ6IG51bWJlcixcbiAgICBpc01lYW46IGJvb2xlYW4sIGRlZmF1bHRWYWx1ZTogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24gPVxuICAgICAgYmFja2VuZC53YXNtLmN3cmFwKCdTcGFyc2VTZWdtZW50UmVkdWN0aW9uJywgbnVsbCAvKnZvaWQqLywgW1xuICAgICAgICAnbnVtYmVyJywgIC8vIGRhdGFJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGR0eXBlXG4gICAgICAgICdudW1iZXInLCAgLy8gbnVtUm93XG4gICAgICAgICdudW1iZXInLCAgLy8gaW5kaWNlc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gc2VnbWVudElkc0lkXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0cHV0SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBleGNlcHRpb25WYWx1ZXNJZCxcbiAgICAgICAgJ251bWJlcicsICAvLyBpc01lYW5cbiAgICAgICAgJ251bWJlcicsICAvLyBkZWZhdWx0VmFsdWVcbiAgICAgIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlU2VnbWVudFJlZHVjdGlvbihcbiAgICBhcmdzOiB7XG4gICAgICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgICAgIGlucHV0czogU3BhcnNlU2VnbWVudFN1bUlucHV0c3xTcGFyc2VTZWdtZW50TWVhbklucHV0cyxcbiAgICB9LFxuICAgIGlzTWVhbjogYm9vbGVhbik6IFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkYXRhLCBpbmRpY2VzLCBzZWdtZW50SWRzfSA9IGlucHV0cztcblxuICBjb25zdCBudW1JbmRpY2VzID0gaW5kaWNlcy5zaGFwZVswXTtcbiAgY29uc3Qgc2VnbWVudElkc0JhY2sgPVxuICAgICAgKGJhY2tlbmQucmVhZFN5bmMoc2VnbWVudElkcy5kYXRhSWQsIG51bUluZGljZXMgLSAxLCBudW1JbmRpY2VzKSBhc1xuICAgICAgIEludDMyQXJyYXkpWzBdO1xuICBjb25zdCBsYXN0U2VnbWVudElkUGx1c09uZSA9IG51bUluZGljZXMgPiAwID8gc2VnbWVudElkc0JhY2sgKyAxIDogMDtcbiAgY29uc3Qgb3V0cHV0Um93cyA9IGxhc3RTZWdtZW50SWRQbHVzT25lO1xuXG4gIGlmIChvdXRwdXRSb3dzIDwgMCkge1xuICAgIHRocm93IChuZXcgRXJyb3IoXG4gICAgICAgIGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25OZWdhdGl2ZVNlZ21lbnRJZHNFcnJvck1lc3NhZ2UoKSkpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0U2hhcGUgPSBkYXRhLnNoYXBlLnNsaWNlKCk7XG4gIG91dHB1dFNoYXBlWzBdID0gb3V0cHV0Um93cztcblxuICBjb25zdCBkYXRhSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoZGF0YS5kYXRhSWQpLmlkO1xuICBjb25zdCBpbmRpY2VzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW5kaWNlcy5kYXRhSWQpLmlkO1xuICBjb25zdCBzZWdtZW50SWRzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoc2VnbWVudElkcy5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IG91dHB1dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRwdXRTaGFwZSwgZGF0YS5kdHlwZSk7XG4gIGNvbnN0IG91dHB1dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dHB1dC5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlcyA9IGJhY2tlbmQubWFrZU91dHB1dChbNF0sICdpbnQzMicpO1xuICBjb25zdCBleGNlcHRpb25WYWx1ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChleGNlcHRpb25WYWx1ZXMuZGF0YUlkKS5pZDtcblxuICB3YXNtU3BhcnNlU2VnbWVudFJlZHVjdGlvbihcbiAgICAgIGRhdGFJZCwgQ3BwRFR5cGVbZGF0YS5kdHlwZV0sIGRhdGEuc2hhcGVbMF0sIGluZGljZXNJZCwgc2VnbWVudElkc0lkLFxuICAgICAgb3V0cHV0SWQsIGV4Y2VwdGlvblZhbHVlc0lkLCBpc01lYW4sIDApO1xuXG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlc0FycmF5ID1cbiAgICAgIGJhY2tlbmQucmVhZFN5bmMoZXhjZXB0aW9uVmFsdWVzLmRhdGFJZCkgYXMgSW50MzJBcnJheTtcblxuICBsZXQgZXhjZXB0aW9uTWVzc2FnZTogc3RyaW5nO1xuICBzd2l0Y2ggKGV4Y2VwdGlvblZhbHVlc0FycmF5WzBdKSB7XG4gICAgY2FzZSAwOiB7XG4gICAgICBleGNlcHRpb25NZXNzYWdlID1cbiAgICAgICAgICBiYWNrZW5kX3V0aWxcbiAgICAgICAgICAgICAgLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25OZWdhdGl2ZVNlZ21lbnRJZHNFcnJvck1lc3NhZ2UoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDE6IHtcbiAgICAgIGV4Y2VwdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgIGJhY2tlbmRfdXRpbFxuICAgICAgICAgICAgICAuZ2V0U3BhcnNlU2VnbWVudFJlZHVjdGlvbk5vbkluY3JlYXNpbmdTZWdtZW50SWRzRXJyb3JNZXNzYWdlKCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOlxuICAgICAgZXhjZXB0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25TZWdtZW50SWRPdXRPZlJhbmdlRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZXNBcnJheVsxXSwgZXhjZXB0aW9uVmFsdWVzQXJyYXlbMl0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAzOlxuICAgICAgZXhjZXB0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgYmFja2VuZF91dGlsLmdldFNwYXJzZVNlZ21lbnRSZWR1Y3Rpb25JbmRpY2VzT3V0T2ZSYW5nZUVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWVzQXJyYXlbMV0sIGV4Y2VwdGlvblZhbHVlc0FycmF5WzJdLFxuICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZXNBcnJheVszXSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZXhjZXB0aW9uTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgYmFja2VuZC5kaXNwb3NlRGF0YShleGNlcHRpb25WYWx1ZXMuZGF0YUlkKTtcbiAgaWYgKGV4Y2VwdGlvbk1lc3NhZ2UpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VEYXRhKG91dHB1dC5kYXRhSWQpO1xuICAgIHRocm93IG5ldyBFcnJvcihleGNlcHRpb25NZXNzYWdlKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentMean } from '@tensorflow/tfjs-core';\nimport { setup, sparseSegmentReduction } from './SparseSegmentReduction';\nfunction sparseSegmentMean(args) {\n return sparseSegmentReduction(args, true);\n}\nexport const sparseSegmentMeanConfig = {\n kernelName: SparseSegmentMean,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sparseSegmentMean\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudE1lYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9TcGFyc2VTZWdtZW50TWVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLGlCQUFpQixFQUFzQyxNQUFNLHVCQUF1QixDQUFDO0FBSXZILE9BQU8sRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RSxTQUFTLGlCQUFpQixDQUFDLElBRzFCO0lBQ0MsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFpQjtJQUNuRCxVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxpQkFBMEM7Q0FDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNwYXJzZVNlZ21lbnRNZWFuLCBTcGFyc2VTZWdtZW50TWVhbklucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtzZXR1cCwgc3BhcnNlU2VnbWVudFJlZHVjdGlvbn0gZnJvbSAnLi9TcGFyc2VTZWdtZW50UmVkdWN0aW9uJztcblxuZnVuY3Rpb24gc3BhcnNlU2VnbWVudE1lYW4oYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgaW5wdXRzOiBTcGFyc2VTZWdtZW50TWVhbklucHV0cyxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgcmV0dXJuIHNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24oYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzcGFyc2VTZWdtZW50TWVhbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VTZWdtZW50TWVhbixcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogc3BhcnNlU2VnbWVudE1lYW4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentSum } from '@tensorflow/tfjs-core';\nimport { setup, sparseSegmentReduction } from './SparseSegmentReduction';\nfunction sparseSegmentSum(args) {\n return sparseSegmentReduction(args, false);\n}\nexport const sparseSegmentSumConfig = {\n kernelName: SparseSegmentSum,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sparseSegmentSum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFN1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NwYXJzZVNlZ21lbnRTdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixnQkFBZ0IsRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUlySCxPQUFPLEVBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdkUsU0FBUyxnQkFBZ0IsQ0FBQyxJQUd6QjtJQUNDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBaUI7SUFDbEQsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsZ0JBQXlDO0NBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VTZWdtZW50U3VtLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3NldHVwLCBzcGFyc2VTZWdtZW50UmVkdWN0aW9ufSBmcm9tICcuL1NwYXJzZVNlZ21lbnRSZWR1Y3Rpb24nO1xuXG5mdW5jdGlvbiBzcGFyc2VTZWdtZW50U3VtKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogU3BhcnNlU2VnbWVudFN1bUlucHV0cyxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgcmV0dXJuIHNwYXJzZVNlZ21lbnRSZWR1Y3Rpb24oYXJncywgZmFsc2UpO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudFN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VTZWdtZW50U3VtLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBzcGFyc2VTZWdtZW50U3VtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SparseToDense, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmSparseToDense;\nfunction setup(backend) {\n wasmSparseToDense = backend.wasm.cwrap(SparseToDense, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nfunction sparseToDense(args) {\n const { backend, inputs, attrs } = args;\n const { sparseIndices, sparseValues, defaultValue } = inputs;\n const { outputShape } = attrs;\n const out = backend.makeOutput(outputShape, defaultValue.dtype);\n if (util.sizeFromShape(outputShape) === 0) {\n return out;\n }\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(sparseValues, sparseIndices, outputShape);\n const sparseIndicesId = backend.dataIdMap.get(sparseIndices.dataId).id;\n const sparseValuesId = backend.dataIdMap.get(sparseValues.dataId).id;\n const defaultValueId = backend.dataIdMap.get(defaultValue.dataId).id;\n const stridesBytes = new Uint8Array(new Int32Array(strides).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmSparseToDense(sparseIndicesId, sparseValuesId, sparseValues.shape.length, defaultValueId, CppDType[defaultValue.dtype], sliceRank, numUpdates, sliceSize, stridesBytes, outputSize, outId);\n return out;\n}\nexport const sparseToDenseConfig = {\n kernelName: SparseToDense,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sparseToDense\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlVG9EZW5zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NwYXJzZVRvRGVuc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsYUFBYSxFQUF1RCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksaUJBSTBDLENBQUM7QUFFL0MsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDbkUsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVEsRUFBRyxRQUFRO0tBQ3BCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUl0QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0QsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUU1QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QyxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsTUFBTSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FDekQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRTNFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXJFLE1BQU0sWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsaUJBQWlCLENBQ2IsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDMUQsY0FBYyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFDbkUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFaEQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VUb0RlbnNlLCBTcGFyc2VUb0RlbnNlQXR0cnMsIFNwYXJzZVRvRGVuc2VJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVNwYXJzZVRvRGVuc2U6IChcbiAgICBzcGFyc2VJbmRpY2VzSWQ6IG51bWJlciwgc3BhcnNlVmFsdWVzSWQ6IG51bWJlciwgc3BhcnNlVmFsdWVzUmFuazogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZUlkOiBudW1iZXIsIGR0eXBlOiBDcHBEVHlwZSwgc2xpY2VSYW5rOiBudW1iZXIsXG4gICAgbnVtVXBkYXRlczogbnVtYmVyLCBzbGljZVNpemU6IG51bWJlciwgc3RyaWRlczogVWludDhBcnJheSxcbiAgICBvdXRwdXRTaXplOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21TcGFyc2VUb0RlbnNlID0gYmFja2VuZC53YXNtLmN3cmFwKFNwYXJzZVRvRGVuc2UsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHNwYXJzZUluZGljZXNJZFxuICAgICdudW1iZXInLCAgLy8gc3BhcnNlVmFsdWVzSWRcbiAgICAnbnVtYmVyJywgIC8vIHNwYXJzZVZhbHVlc1JhbmtcbiAgICAnbnVtYmVyJywgIC8vIGRlZmF1bHRWYWx1ZUlkXG4gICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICdudW1iZXInLCAgLy8gc2xpY2VSYW5rXG4gICAgJ251bWJlcicsICAvLyBudW1VcGRhdGVzXG4gICAgJ251bWJlcicsICAvLyBzbGljZVNpemVcbiAgICAnYXJyYXknLCAgIC8vIHN0cmlkZXNcbiAgICAnbnVtYmVyJywgIC8vIG91dHB1dFNpemVcbiAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBzcGFyc2VUb0RlbnNlKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogU3BhcnNlVG9EZW5zZUlucHV0cyxcbiAgYXR0cnM6IFNwYXJzZVRvRGVuc2VBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7c3BhcnNlSW5kaWNlcywgc3BhcnNlVmFsdWVzLCBkZWZhdWx0VmFsdWV9ID0gaW5wdXRzO1xuICBjb25zdCB7b3V0cHV0U2hhcGV9ID0gYXR0cnM7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dHB1dFNoYXBlLCBkZWZhdWx0VmFsdWUuZHR5cGUpO1xuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKG91dHB1dFNoYXBlKSA9PT0gMCkge1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBjb25zdCB7c2xpY2VSYW5rLCBudW1VcGRhdGVzLCBzbGljZVNpemUsIHN0cmlkZXMsIG91dHB1dFNpemV9ID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jYWxjdWxhdGVTaGFwZXMoc3BhcnNlVmFsdWVzLCBzcGFyc2VJbmRpY2VzLCBvdXRwdXRTaGFwZSk7XG5cbiAgY29uc3Qgc3BhcnNlSW5kaWNlc0lkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHNwYXJzZUluZGljZXMuZGF0YUlkKS5pZDtcbiAgY29uc3Qgc3BhcnNlVmFsdWVzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoc3BhcnNlVmFsdWVzLmRhdGFJZCkuaWQ7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZUlkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGRlZmF1bHRWYWx1ZS5kYXRhSWQpLmlkO1xuXG4gIGNvbnN0IHN0cmlkZXNCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHN0cmlkZXMpLmJ1ZmZlcik7XG5cbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgd2FzbVNwYXJzZVRvRGVuc2UoXG4gICAgICBzcGFyc2VJbmRpY2VzSWQsIHNwYXJzZVZhbHVlc0lkLCBzcGFyc2VWYWx1ZXMuc2hhcGUubGVuZ3RoLFxuICAgICAgZGVmYXVsdFZhbHVlSWQsIENwcERUeXBlW2RlZmF1bHRWYWx1ZS5kdHlwZV0sIHNsaWNlUmFuaywgbnVtVXBkYXRlcyxcbiAgICAgIHNsaWNlU2l6ZSwgc3RyaWRlc0J5dGVzLCBvdXRwdXRTaXplLCBvdXRJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZVRvRGVuc2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlVG9EZW5zZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogc3BhcnNlVG9EZW5zZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SplitV, util } from '@tensorflow/tfjs-core';\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { slice } from './Slice';\nexport function splitV(args) {\n const { inputs, attrs, backend } = args;\n const { x } = inputs;\n const { numOrSizeSplits, axis } = attrs;\n const $axis = util.parseAxisParam(axis, x.shape)[0];\n const splitSizes = backend_util.prepareSplitSize(x, numOrSizeSplits, $axis);\n const begin = new Array(x.shape.length).fill(0);\n const size = x.shape.slice();\n return splitSizes.map(s => {\n const xSliceSize = [...size];\n xSliceSize[$axis] = s;\n const xSlice = slice({ inputs: { x }, attrs: { begin, size: xSliceSize }, backend });\n begin[$axis] += s;\n return xSlice;\n });\n}\nexport const splitVConfig = {\n kernelName: SplitV,\n backendName: 'wasm',\n kernelFunc: splitV\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaXRWLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3BsaXRWLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsTUFBTSxFQUE2QixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbkQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUFzRTtJQUN4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsZUFBZSxFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQ1IsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNwbGl0ViwgU3BsaXRWQXR0cnMsIFNwbGl0VklucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7YmFja2VuZF91dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL1NsaWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0VihcbiAgICBhcmdzOiB7aW5wdXRzOiBTcGxpdFZJbnB1dHMsIGF0dHJzOiBTcGxpdFZBdHRycywgYmFja2VuZDogQmFja2VuZFdhc219KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge251bU9yU2l6ZVNwbGl0cywgYXhpc30gPSBhdHRycztcblxuICBjb25zdCAkYXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSlbMF07XG5cbiAgY29uc3Qgc3BsaXRTaXplcyA9IGJhY2tlbmRfdXRpbC5wcmVwYXJlU3BsaXRTaXplKHgsIG51bU9yU2l6ZVNwbGl0cywgJGF4aXMpO1xuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheSh4LnNoYXBlLmxlbmd0aCkuZmlsbCgwKTtcbiAgY29uc3Qgc2l6ZSA9IHguc2hhcGUuc2xpY2UoKTtcbiAgcmV0dXJuIHNwbGl0U2l6ZXMubWFwKHMgPT4ge1xuICAgIGNvbnN0IHhTbGljZVNpemUgPSBbLi4uc2l6ZV07XG4gICAgeFNsaWNlU2l6ZVskYXhpc10gPSBzO1xuICAgIGNvbnN0IHhTbGljZSA9XG4gICAgICAgIHNsaWNlKHtpbnB1dHM6IHt4fSwgYXR0cnM6IHtiZWdpbiwgc2l6ZTogeFNsaWNlU2l6ZX0sIGJhY2tlbmR9KTtcbiAgICBiZWdpblskYXhpc10gKz0gcztcbiAgICByZXR1cm4geFNsaWNlO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwbGl0VkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGxpdFYsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHNwbGl0ViBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sqrt } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const sqrtConfig = createUnaryKernelConfig(Sqrt);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1NxcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcXJ0fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge2NyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL3VuYXJ5X2tlcm5lbCc7XG5leHBvcnQgY29uc3Qgc3FydENvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoU3FydCk7XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Square } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const squareConfig = createUnaryKernelConfig(Square);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3F1YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxNQUFNLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNxdWFyZX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHNxdWFyZUNvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoU3F1YXJlKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SquaredDifference } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const squaredDifferenceConfig = createBinaryKernelConfig(SquaredDifference, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlZERpZmZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9TcXVhcmVkRGlmZmVyZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQWUsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDaEMsd0JBQXdCLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcXVhcmVkRGlmZmVyZW5jZX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gdHJ1ZTtcbmV4cG9ydCBjb25zdCBzcXVhcmVkRGlmZmVyZW5jZUNvbmZpZzogS2VybmVsQ29uZmlnID1cbiAgICBjcmVhdGVCaW5hcnlLZXJuZWxDb25maWcoU3F1YXJlZERpZmZlcmVuY2UsIHN1cHBvcnRzRnVsbEJyb2FkY2FzdCk7XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Step } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmStep;\nfunction setup(backend) {\n wasmStep = backend.wasm.cwrap(Step, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nfunction step(args) {\n const { backend, inputs, attrs } = args;\n const { alpha } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const out = backend.makeOutput(x.shape, x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmStep(xId, alpha, CppDType[x.dtype], outId);\n return out;\n}\nexport const stepConfig = {\n kernelName: Step,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: step\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1N0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixJQUFJLEVBQW9DLE1BQU0sdUJBQXVCLENBQUM7QUFJeEcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLFFBQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNqRCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQ1QsSUFBa0U7SUFFcEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEIsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRS9DLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdGVwLCBTdGVwQXR0cnMsIFN0ZXBJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVN0ZXA6ICh4SWQ6IG51bWJlciwgYWxwaGE6IG51bWJlciwgZHR5cGU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT5cbiAgICB2b2lkO1xuXG5mdW5jdGlvbiBzZXR1cChiYWNrZW5kOiBCYWNrZW5kV2FzbSk6IHZvaWQge1xuICB3YXNtU3RlcCA9IGJhY2tlbmQud2FzbS5jd3JhcChTdGVwLCBudWxsIC8qdm9pZCovLCBbXG4gICAgJ251bWJlcicsICAvLyB4X2lkXG4gICAgJ251bWJlcicsICAvLyBhbHBoYVxuICAgICdudW1iZXInLCAgLy8gZHR5cGVcbiAgICAnbnVtYmVyJywgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gc3RlcChcbiAgICBhcmdzOiB7YmFja2VuZDogQmFja2VuZFdhc20sIGlucHV0czogU3RlcElucHV0cywgYXR0cnM6IFN0ZXBBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YWxwaGF9ID0gYXR0cnM7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSk7XG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICB3YXNtU3RlcCh4SWQsIGFscGhhLCBDcHBEVHlwZVt4LmR0eXBlXSwgb3V0SWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgc3RlcENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdGVwLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBzdGVwIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { slice_util, StridedSlice, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nlet wasmStridedSlice;\nfunction setup(backend) {\n wasmStridedSlice = backend.wasm.cwrap(StridedSlice, null /*void*/, [\n 'number',\n 'array',\n 'number',\n 'array',\n 'array',\n 'array',\n 'array',\n 'array',\n 'number',\n 'number', // outId\n ]);\n}\nexport function stridedSlice(args) {\n const { backend, inputs, attrs } = args;\n const { x } = inputs;\n const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs;\n const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask);\n let result;\n if (isIdentity) {\n // Optimization #1, slice is a no-op plus reshape\n result = reshape({ inputs: { x }, backend, attrs: { shape: finalShape } });\n }\n else if (sliceDim0 || isSimpleSlice) {\n // Optimization #2, slice is memory contiguous (only occurs in dim 0)\n util.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`);\n const size = slice_util.computeOutShape($begin, $end, $strides);\n // To tolerate begin[0] > end[0] (a 0-output slice), we min(begin, end).\n const sliced = slice({ inputs: { x }, backend, attrs: { begin: $begin, size } });\n result =\n reshape({ inputs: { x: sliced }, backend, attrs: { shape: finalShape } });\n backend.disposeData(sliced.dataId);\n }\n else {\n const out = backend.makeOutput(finalShapeSparse, 'float32');\n const xId = backend.dataIdMap.get(x.dataId).id;\n const xStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(x.shape)).buffer);\n const beginBytes = new Uint8Array(new Int32Array($begin).buffer);\n const endBytes = new Uint8Array(new Int32Array($end).buffer);\n const stridesBytes = new Uint8Array(new Int32Array($strides).buffer);\n const outputShapeBytes = new Uint8Array(new Int32Array(finalShapeSparse).buffer);\n const outStridesBytes = new Uint8Array(new Int32Array(util.computeStrides(finalShapeSparse)).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmStridedSlice(xId, xStridesBytes, x.shape.length, beginBytes, endBytes, stridesBytes, outputShapeBytes, outStridesBytes, finalShapeSparse.length, outId);\n result = reshape({ inputs: { x: out }, backend, attrs: { shape: finalShape } });\n backend.disposeData(out.dataId);\n }\n return result;\n}\nexport const stridedSliceConfig = {\n kernelName: StridedSlice,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: stridedSlice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaWRlZFNsaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3RyaWRlZFNsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsVUFBVSxFQUFFLFlBQVksRUFBcUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbEosT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlCLElBQUksZ0JBSThDLENBQUM7QUFFbkQsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakUsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsT0FBTztRQUNQLE9BQU87UUFDUCxPQUFPO1FBQ1AsT0FBTztRQUNQLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUSxFQUFHLFFBQVE7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFJNUI7SUFDQyxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUVuQixNQUFNLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osV0FBVyxFQUNYLGNBQWMsRUFDZixHQUFHLEtBQUssQ0FBQztJQUVWLE1BQU0sRUFDSixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsYUFBYSxFQUNi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Q0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUN0RSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXZFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFFMUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWlCO0lBQzlDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxZQUFxQztDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgc2xpY2VfdXRpbCwgU3RyaWRlZFNsaWNlLCBTdHJpZGVkU2xpY2VBdHRycywgU3RyaWRlZFNsaWNlSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9TbGljZSc7XG5cbmxldCB3YXNtU3RyaWRlZFNsaWNlOiAoXG4gICAgeElkOiBudW1iZXIsIHhTdHJpZGVzQnl0ZXM6IFVpbnQ4QXJyYXksIHhSYW5rOiBudW1iZXIsXG4gICAgYmVnaW5CeXRlczogVWludDhBcnJheSwgZW5kQnl0ZXM6IFVpbnQ4QXJyYXksIHN0cmlkZXNCeXRlczogVWludDhBcnJheSxcbiAgICBvdXRTaGFwZUJ5dGVzOiBVaW50OEFycmF5LCBvdXRTdHJpZGVzQnl0ZXM6IFVpbnQ4QXJyYXksXG4gICAgb3V0U2hhcGVMZW5ndGg6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVN0cmlkZWRTbGljZSA9IGJhY2tlbmQud2FzbS5jd3JhcChTdHJpZGVkU2xpY2UsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIHhJZFxuICAgICdhcnJheScsICAgLy8geFN0cmlkZXNcbiAgICAnbnVtYmVyJywgIC8vIHhSYW5rXG4gICAgJ2FycmF5JywgICAvLyBiZWdpbkJ5dGVzXG4gICAgJ2FycmF5JywgICAvLyBlbmRCeXRlc1xuICAgICdhcnJheScsICAgLy8gc3RyaWRlc0J5dGVzXG4gICAgJ2FycmF5JywgICAvLyBvdXRTaGFwZUJ5dGVzXG4gICAgJ2FycmF5JywgICAvLyBvdXRTdHJpZGVzQnl0ZXNcbiAgICAnbnVtYmVyJywgIC8vIG91dFNoYXBlTGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyBvdXRJZFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlkZWRTbGljZShhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IFN0cmlkZWRTbGljZUlucHV0cyxcbiAgYXR0cnM6IFN0cmlkZWRTbGljZUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcblxuICBjb25zdCB7XG4gICAgYmVnaW4sXG4gICAgZW5kLFxuICAgIHN0cmlkZXMsXG4gICAgYmVnaW5NYXNrLFxuICAgIGVuZE1hc2ssXG4gICAgZWxsaXBzaXNNYXNrLFxuICAgIG5ld0F4aXNNYXNrLFxuICAgIHNocmlua0F4aXNNYXNrXG4gIH0gPSBhdHRycztcblxuICBjb25zdCB7XG4gICAgZmluYWxTaGFwZVNwYXJzZSxcbiAgICBmaW5hbFNoYXBlLFxuICAgIGlzSWRlbnRpdHksXG4gICAgc2xpY2VEaW0wLFxuICAgIGlzU2ltcGxlU2xpY2UsXG4gICAgYmVnaW46ICRiZWdpbixcbiAgICBlbmQ6ICRlbmQsXG4gICAgc3RyaWRlczogJHN0cmlkZXNcbiAgfSA9XG4gICAgICBzbGljZV91dGlsLnNsaWNlSW5mbyhcbiAgICAgICAgICB4LnNoYXBlLCBiZWdpbiwgZW5kLCBzdHJpZGVzLCBiZWdpbk1hc2ssIGVuZE1hc2ssIGVsbGlwc2lzTWFzayxcbiAgICAgICAgICBuZXdBeGlzTWFzaywgc2hyaW5rQXhpc01hc2spO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgaWYgKGlzSWRlbnRpdHkpIHtcbiAgICAvLyBPcHRpbWl6YXRpb24gIzEsIHNsaWNlIGlzIGEgbm8tb3AgcGx1cyByZXNoYXBlXG4gICAgcmVzdWx0ID0gcmVzaGFwZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGZpbmFsU2hhcGV9fSk7XG4gIH0gZWxzZSBpZiAoc2xpY2VEaW0wIHx8IGlzU2ltcGxlU2xpY2UpIHtcbiAgICAvLyBPcHRpbWl6YXRpb24gIzIsIHNsaWNlIGlzIG1lbW9yeSBjb250aWd1b3VzIChvbmx5IG9jY3VycyBpbiBkaW0gMClcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgeC5zaGFwZS5sZW5ndGggPj0gMSxcbiAgICAgICAgKCkgPT4gYElucHV0IG11c3QgaGF2ZSByYW5rIGF0IGxlYXN0IDEsIGdvdDogJHt4LnNoYXBlLmxlbmd0aH1gKTtcblxuICAgIGNvbnN0IHNpemUgPSBzbGljZV91dGlsLmNvbXB1dGVPdXRTaGFwZSgkYmVnaW4sICRlbmQsICRzdHJpZGVzKTtcbiAgICAvLyBUbyB0b2xlcmF0ZSBiZWdpblswXSA+IGVuZFswXSAoYSAwLW91dHB1dCBzbGljZSksIHdlIG1pbihiZWdpbiwgZW5kKS5cbiAgICBjb25zdCBzbGljZWQgPSBzbGljZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7YmVnaW46ICRiZWdpbiwgc2l6ZX19KTtcbiAgICByZXN1bHQgPVxuICAgICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiBzbGljZWR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBmaW5hbFNoYXBlfX0pO1xuICAgIGJhY2tlbmQuZGlzcG9zZURhdGEoc2xpY2VkLmRhdGFJZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGZpbmFsU2hhcGVTcGFyc2UsICdmbG9hdDMyJyk7XG5cbiAgICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICAgIGNvbnN0IHhTdHJpZGVzQnl0ZXMgPVxuICAgICAgICBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSh1dGlsLmNvbXB1dGVTdHJpZGVzKHguc2hhcGUpKS5idWZmZXIpO1xuICAgIGNvbnN0IGJlZ2luQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSgkYmVnaW4pLmJ1ZmZlcik7XG4gICAgY29uc3QgZW5kQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSgkZW5kKS5idWZmZXIpO1xuICAgIGNvbnN0IHN0cmlkZXNCeXRlcyA9IG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KCRzdHJpZGVzKS5idWZmZXIpO1xuXG4gICAgY29uc3Qgb3V0cHV0U2hhcGVCeXRlcyA9XG4gICAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KGZpbmFsU2hhcGVTcGFyc2UpLmJ1ZmZlcik7XG4gICAgY29uc3Qgb3V0U3RyaWRlc0J5dGVzID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIG5ldyBJbnQzMkFycmF5KHV0aWwuY29tcHV0ZVN0cmlkZXMoZmluYWxTaGFwZVNwYXJzZSkpLmJ1ZmZlcik7XG4gICAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG5cbiAgICB3YXNtU3RyaWRlZFNsaWNlKFxuICAgICAgICB4SWQsIHhTdHJpZGVzQnl0ZXMsIHguc2hhcGUubGVuZ3RoLCBiZWdpbkJ5dGVzLCBlbmRCeXRlcywgc3RyaWRlc0J5dGVzLFxuICAgICAgICBvdXRwdXRTaGFwZUJ5dGVzLCBvdXRTdHJpZGVzQnl0ZXMsIGZpbmFsU2hhcGVTcGFyc2UubGVuZ3RoLCBvdXRJZCk7XG5cbiAgICByZXN1bHQgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiBvdXR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBmaW5hbFNoYXBlfX0pO1xuXG4gICAgYmFja2VuZC5kaXNwb3NlRGF0YShvdXQuZGF0YUlkKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBzdHJpZGVkU2xpY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RyaWRlZFNsaWNlLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBzZXR1cEZ1bmM6IHNldHVwLFxuICBrZXJuZWxGdW5jOiBzdHJpZGVkU2xpY2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringNGrams } from '@tensorflow/tfjs-core';\nimport { stringNGramsImplCPU } from '../kernel_utils/shared';\nfunction stringNGrams(args) {\n const { backend, inputs, attrs } = args;\n const { data, dataSplits } = inputs;\n const { separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences, } = attrs;\n const $data = backend.readSync(data.dataId);\n const $dataSplits = backend.readSync(dataSplits.dataId);\n const [nGrams, nGramsSplits] = stringNGramsImplCPU($data, $dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences);\n const nGramsOut = backend.makeOutput([nGrams.length], 'string');\n const nGramsOutData = backend.dataIdMap.get(nGramsOut.dataId);\n nGramsOutData.stringBytes = nGrams;\n const nGramsSplitsOut = backend.makeOutput(dataSplits.shape, 'int32');\n const nGramsSplitsOutVals = backend.typedArrayFromHeap(nGramsSplitsOut);\n nGramsSplitsOutVals.set(nGramsSplits);\n return [nGramsOut, nGramsSplitsOut];\n}\nexport const stringNGramsConfig = {\n kernelName: StringNGrams,\n backendName: 'wasm',\n kernelFunc: stringNGrams\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nTkdyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3RyaW5nTkdyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsWUFBWSxFQUFvRCxNQUFNLHVCQUF1QixDQUFDO0FBR2hJLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTNELFNBQVMsWUFBWSxDQUFDLElBSXJCO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sRUFDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLE9BQU8sRUFDUCxRQUFRLEVBQ1IsUUFBUSxFQUNSLHNCQUFzQixHQUN2QixHQUFHLEtBQUssQ0FBQztJQUVWLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQWUsQ0FBQztJQUV0RSxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLG1CQUFtQixDQUM5QyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQ3ZFLHNCQUFzQixDQUFDLENBQUM7SUFFNUIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsYUFBYSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFFbkMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV0QyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLFlBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdHJpbmdOR3JhbXMsIFN0cmluZ05HcmFtc0F0dHJzLCBTdHJpbmdOR3JhbXNJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3N0cmluZ05HcmFtc0ltcGxDUFV9IGZyb20gJy4uL2tlcm5lbF91dGlscy9zaGFyZWQnO1xuXG5mdW5jdGlvbiBzdHJpbmdOR3JhbXMoYXJnczoge1xuICBiYWNrZW5kOiBCYWNrZW5kV2FzbSxcbiAgaW5wdXRzOiBTdHJpbmdOR3JhbXNJbnB1dHMsXG4gIGF0dHJzOiBTdHJpbmdOR3JhbXNBdHRyc1xufSk6IFtUZW5zb3JJbmZvLCBUZW5zb3JJbmZvXSB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtkYXRhLCBkYXRhU3BsaXRzfSA9IGlucHV0cztcbiAgY29uc3Qge1xuICAgIHNlcGFyYXRvcixcbiAgICBuR3JhbVdpZHRocyxcbiAgICBsZWZ0UGFkLFxuICAgIHJpZ2h0UGFkLFxuICAgIHBhZFdpZHRoLFxuICAgIHByZXNlcnZlU2hvcnRTZXF1ZW5jZXMsXG4gIH0gPSBhdHRycztcblxuICBjb25zdCAkZGF0YSA9IGJhY2tlbmQucmVhZFN5bmMoZGF0YS5kYXRhSWQpIGFzIFVpbnQ4QXJyYXlbXTtcbiAgY29uc3QgJGRhdGFTcGxpdHMgPSBiYWNrZW5kLnJlYWRTeW5jKGRhdGFTcGxpdHMuZGF0YUlkKSBhcyBJbnQzMkFycmF5O1xuXG4gIGNvbnN0IFtuR3JhbXMsIG5HcmFtc1NwbGl0c10gPSBzdHJpbmdOR3JhbXNJbXBsQ1BVKFxuICAgICAgJGRhdGEsICRkYXRhU3BsaXRzLCBzZXBhcmF0b3IsIG5HcmFtV2lkdGhzLCBsZWZ0UGFkLCByaWdodFBhZCwgcGFkV2lkdGgsXG4gICAgICBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzKTtcblxuICBjb25zdCBuR3JhbXNPdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQoW25HcmFtcy5sZW5ndGhdLCAnc3RyaW5nJyk7XG4gIGNvbnN0IG5HcmFtc091dERhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQobkdyYW1zT3V0LmRhdGFJZCk7XG4gIG5HcmFtc091dERhdGEuc3RyaW5nQnl0ZXMgPSBuR3JhbXM7XG5cbiAgY29uc3QgbkdyYW1zU3BsaXRzT3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KGRhdGFTcGxpdHMuc2hhcGUsICdpbnQzMicpO1xuICBjb25zdCBuR3JhbXNTcGxpdHNPdXRWYWxzID0gYmFja2VuZC50eXBlZEFycmF5RnJvbUhlYXAobkdyYW1zU3BsaXRzT3V0KTtcbiAgbkdyYW1zU3BsaXRzT3V0VmFscy5zZXQobkdyYW1zU3BsaXRzKTtcblxuICByZXR1cm4gW25HcmFtc091dCwgbkdyYW1zU3BsaXRzT3V0XTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ05HcmFtc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdHJpbmdOR3JhbXMsXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIGtlcm5lbEZ1bmM6IHN0cmluZ05HcmFtcyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringSplit } from '@tensorflow/tfjs-core';\nimport { stringSplitImplCPU } from '../kernel_utils/shared';\nfunction stringSplit(args) {\n const { backend, inputs, attrs } = args;\n const { input, delimiter } = inputs;\n const { skipEmpty } = attrs;\n const inputVals = backend.readSync(input.dataId);\n const delimiterVals = backend.readSync(delimiter.dataId);\n const [indices, values, shape] = stringSplitImplCPU(inputVals, delimiterVals[0], skipEmpty);\n const outputSize = values.length;\n const indicesOut = backend.makeOutput([outputSize, 2], 'int32');\n const indicesOutVals = backend.typedArrayFromHeap(indicesOut);\n indicesOutVals.set(indices);\n const valuesOut = backend.makeOutput([outputSize], 'string');\n const valuesOutData = backend.dataIdMap.get(valuesOut.dataId);\n valuesOutData.stringBytes = values;\n const shapeOut = backend.makeOutput([2], 'int32');\n const shapeOutVals = backend.typedArrayFromHeap(shapeOut);\n shapeOutVals.set(shape);\n return [indicesOut, valuesOut, shapeOut];\n}\nexport const stringSplitConfig = {\n kernelName: StringSplit,\n backendName: 'wasm',\n kernelFunc: stringSplit\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nU3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9TdHJpbmdTcGxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLFdBQVcsRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUc3SCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxTQUFTLFdBQVcsQ0FBQyxJQUlwQjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBaUIsQ0FBQztJQUNqRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQWlCLENBQUM7SUFFekUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQzFCLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUVqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsYUFBYSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdHJpbmdTcGxpdCwgU3RyaW5nU3BsaXRBdHRycywgU3RyaW5nU3BsaXRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3N0cmluZ1NwbGl0SW1wbENQVX0gZnJvbSAnLi4va2VybmVsX3V0aWxzL3NoYXJlZCc7XG5cbmZ1bmN0aW9uIHN0cmluZ1NwbGl0KGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogU3RyaW5nU3BsaXRJbnB1dHMsXG4gIGF0dHJzOiBTdHJpbmdTcGxpdEF0dHJzXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2lucHV0LCBkZWxpbWl0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c2tpcEVtcHR5fSA9IGF0dHJzO1xuXG4gIGNvbnN0IGlucHV0VmFscyA9IGJhY2tlbmQucmVhZFN5bmMoaW5wdXQuZGF0YUlkKSBhcyBVaW50OEFycmF5W107XG4gIGNvbnN0IGRlbGltaXRlclZhbHMgPSBiYWNrZW5kLnJlYWRTeW5jKGRlbGltaXRlci5kYXRhSWQpIGFzIFVpbnQ4QXJyYXlbXTtcblxuICBjb25zdCBbaW5kaWNlcywgdmFsdWVzLCBzaGFwZV0gPVxuICAgICAgc3RyaW5nU3BsaXRJbXBsQ1BVKGlucHV0VmFscywgZGVsaW1pdGVyVmFsc1swXSwgc2tpcEVtcHR5KTtcbiAgY29uc3Qgb3V0cHV0U2l6ZSA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgY29uc3QgaW5kaWNlc091dCA9IGJhY2tlbmQubWFrZU91dHB1dChbb3V0cHV0U2l6ZSwgMl0sICdpbnQzMicpO1xuICBjb25zdCBpbmRpY2VzT3V0VmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKGluZGljZXNPdXQpO1xuICBpbmRpY2VzT3V0VmFscy5zZXQoaW5kaWNlcyk7XG5cbiAgY29uc3QgdmFsdWVzT3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFtvdXRwdXRTaXplXSwgJ3N0cmluZycpO1xuICBjb25zdCB2YWx1ZXNPdXREYXRhID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHZhbHVlc091dC5kYXRhSWQpO1xuICB2YWx1ZXNPdXREYXRhLnN0cmluZ0J5dGVzID0gdmFsdWVzO1xuXG4gIGNvbnN0IHNoYXBlT3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KFsyXSwgJ2ludDMyJyk7XG4gIGNvbnN0IHNoYXBlT3V0VmFscyA9IGJhY2tlbmQudHlwZWRBcnJheUZyb21IZWFwKHNoYXBlT3V0KTtcbiAgc2hhcGVPdXRWYWxzLnNldChzaGFwZSk7XG5cbiAgcmV0dXJuIFtpbmRpY2VzT3V0LCB2YWx1ZXNPdXQsIHNoYXBlT3V0XTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1NwbGl0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN0cmluZ1NwbGl0LFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiBzdHJpbmdTcGxpdCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringToHashBucketFast } from '@tensorflow/tfjs-core';\nimport { stringToHashBucketFastImplCPU } from '../kernel_utils/shared';\nfunction stringToHashBucketFast(args) {\n const { backend, inputs, attrs } = args;\n const { input } = inputs;\n const { numBuckets } = attrs;\n const inputVals = backend.readSync(input.dataId);\n const values = stringToHashBucketFastImplCPU(inputVals, numBuckets);\n const out = backend.makeOutput(input.shape, 'int32');\n const outVals = backend.typedArrayFromHeap(out);\n outVals.set(values);\n return out;\n}\nexport const stringToHashBucketFastConfig = {\n kernelName: StringToHashBucketFast,\n backendName: 'wasm',\n kernelFunc: stringToHashBucketFast\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVG9IYXNoQnVja2V0RmFzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1N0cmluZ1RvSGFzaEJ1Y2tldEZhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixzQkFBc0IsRUFBd0UsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRSxTQUFTLHNCQUFzQixDQUFDLElBSS9CO0lBQ0MsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUzQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQWlCLENBQUM7SUFFakUsTUFBTSxNQUFNLEdBQUcsNkJBQTZCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBaUI7SUFDeEQsVUFBVSxFQUFFLHNCQUFzQjtJQUNsQyxXQUFXLEVBQUUsTUFBTTtJQUNuQixVQUFVLEVBQUUsc0JBQStDO0NBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0QXR0cnMsIFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge3N0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZnVuY3Rpb24gc3RyaW5nVG9IYXNoQnVja2V0RmFzdChhcmdzOiB7XG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxuICBpbnB1dHM6IFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHMsXG4gIGF0dHJzOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0QXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2JhY2tlbmQsIGlucHV0cywgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2lucHV0fSA9IGlucHV0cztcbiAgY29uc3Qge251bUJ1Y2tldHN9ID0gYXR0cnM7XG5cbiAgY29uc3QgaW5wdXRWYWxzID0gYmFja2VuZC5yZWFkU3luYyhpbnB1dC5kYXRhSWQpIGFzIFVpbnQ4QXJyYXlbXTtcblxuICBjb25zdCB2YWx1ZXMgPSBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW1wbENQVShpbnB1dFZhbHMsIG51bUJ1Y2tldHMpO1xuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChpbnB1dC5zaGFwZSwgJ2ludDMyJyk7XG4gIGNvbnN0IG91dFZhbHMgPSBiYWNrZW5kLnR5cGVkQXJyYXlGcm9tSGVhcChvdXQpO1xuICBvdXRWYWxzLnNldCh2YWx1ZXMpO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9IYXNoQnVja2V0RmFzdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0LFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sub } from '@tensorflow/tfjs-core';\nimport { createBinaryKernelConfig } from './binary_kernel';\nconst supportsFullBroadcast = true;\nexport const subConfig = createBinaryKernelConfig(Sub, supportsFullBroadcast);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3ViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQ2xCLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN1Yn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7Y3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnfSBmcm9tICcuL2JpbmFyeV9rZXJuZWwnO1xuY29uc3Qgc3VwcG9ydHNGdWxsQnJvYWRjYXN0ID0gdHJ1ZTtcbmV4cG9ydCBjb25zdCBzdWJDb25maWc6IEtlcm5lbENvbmZpZyA9XG4gICAgY3JlYXRlQmluYXJ5S2VybmVsQ29uZmlnKFN1Yiwgc3VwcG9ydHNGdWxsQnJvYWRjYXN0KTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Sum, util } from '@tensorflow/tfjs-core';\nimport { permuteAxesAndTranspose } from './kernel_utils';\nimport { CppDType } from './types';\nlet wasmSum;\nfunction setup(backend) {\n wasmSum = backend.wasm.cwrap(Sum, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number', // out_id\n ]);\n}\nfunction sum(args) {\n const { backend, inputs, attrs } = args;\n const { axis, keepDims } = attrs;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n let inputId = xId;\n let input = x;\n const { transposed, axes, originalAxes, inputWasTransposed } = permuteAxesAndTranspose(x, axis, backend);\n let reductionAxes = axes;\n if (inputWasTransposed) {\n const transposedId = backend.dataIdMap.get(transposed.dataId).id;\n if (transposedId !== xId) {\n // transpose was not a no-op. We will need to dispose of this\n // once we are done.\n input = transposed;\n inputId = transposedId;\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, input.shape.length);\n }\n }\n backend_util.assertAxesAreInnerMostDims('sum', reductionAxes, input.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(input.shape, reductionAxes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const out = backend.makeOutput(outShape, input.dtype);\n if (util.sizeFromShape(input.shape) !== 0) {\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmSum(inputId, reduceSize, CppDType[out.dtype], outId);\n }\n if (inputWasTransposed) {\n // dispose of the transposed tensor.\n backend.disposeData(transposed.dataId);\n }\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(out.shape, originalAxes);\n out.shape = newShape;\n }\n return out;\n}\nexport const sumConfig = {\n kernelName: Sum,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: sum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvU3VtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQTRCLEdBQUcsRUFBbUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJekgsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLE9BQ0ksQ0FBQztBQUVULFNBQVMsS0FBSyxDQUFDLE9BQW9CO0lBQ2pDLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUMvQyxRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLEVBQUcsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxHQUFHLENBQUMsSUFBZ0U7SUFFM0UsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDbEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFDLEdBQ3RELHVCQUF1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLElBQUksa0JBQWtCLEVBQUU7UUFDdEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLFlBQVksS0FBSyxHQUFHLEVBQUU7WUFDeEIsNkRBQTZEO1lBQzdELG9CQUFvQjtZQUNwQixLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFDdkIsYUFBYSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDekMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO0tBQ0Y7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQ25DLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUN6QixZQUFZLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxJQUFJLGtCQUFrQixFQUFFO1FBQ3RCLG9DQUFvQztRQUNwQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksUUFBUSxFQUFFO1FBQ1osVUFBVTtRQUNWLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdW0sIFN1bUF0dHJzLCBTdW1JbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7cGVybXV0ZUF4ZXNBbmRUcmFuc3Bvc2V9IGZyb20gJy4va2VybmVsX3V0aWxzJztcbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5sZXQgd2FzbVN1bTogKHhJZDogbnVtYmVyLCByZWR1Y2VTaXplOiBudW1iZXIsIGR0eXBlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+XG4gICAgdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVN1bSA9IGJhY2tlbmQud2FzbS5jd3JhcChTdW0sIG51bGwgLyp2b2lkKi8sIFtcbiAgICAnbnVtYmVyJywgIC8vIGlucHV0X2lkXG4gICAgJ251bWJlcicsICAvLyByZWR1Y2Vfc2l6ZVxuICAgICdudW1iZXInLCAgLy8gZHR5cGVcbiAgICAnbnVtYmVyJywgIC8vIG91dF9pZFxuICBdKTtcbn1cblxuZnVuY3Rpb24gc3VtKGFyZ3M6IHtiYWNrZW5kOiBCYWNrZW5kV2FzbSwgaW5wdXRzOiBTdW1JbnB1dHMsIGF0dHJzOiBTdW1BdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YXhpcywga2VlcERpbXN9ID0gYXR0cnM7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgbGV0IGlucHV0SWQgPSB4SWQ7XG4gIGxldCBpbnB1dCA9IHg7XG5cbiAgY29uc3Qge3RyYW5zcG9zZWQsIGF4ZXMsIG9yaWdpbmFsQXhlcywgaW5wdXRXYXNUcmFuc3Bvc2VkfSA9XG4gICAgICBwZXJtdXRlQXhlc0FuZFRyYW5zcG9zZSh4LCBheGlzLCBiYWNrZW5kKTtcblxuICBsZXQgcmVkdWN0aW9uQXhlcyA9IGF4ZXM7XG4gIGlmIChpbnB1dFdhc1RyYW5zcG9zZWQpIHtcbiAgICBjb25zdCB0cmFuc3Bvc2VkSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQodHJhbnNwb3NlZC5kYXRhSWQpLmlkO1xuICAgIGlmICh0cmFuc3Bvc2VkSWQgIT09IHhJZCkge1xuICAgICAgLy8gdHJhbnNwb3NlIHdhcyBub3QgYSBuby1vcC4gV2Ugd2lsbCBuZWVkIHRvIGRpc3Bvc2Ugb2YgdGhpc1xuICAgICAgLy8gb25jZSB3ZSBhcmUgZG9uZS5cbiAgICAgIGlucHV0ID0gdHJhbnNwb3NlZDtcbiAgICAgIGlucHV0SWQgPSB0cmFuc3Bvc2VkSWQ7XG4gICAgICByZWR1Y3Rpb25BeGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoXG4gICAgICAgICAgcmVkdWN0aW9uQXhlcy5sZW5ndGgsIGlucHV0LnNoYXBlLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKFxuICAgICAgJ3N1bScsIHJlZHVjdGlvbkF4ZXMsIGlucHV0LnNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKGlucHV0LnNoYXBlLCByZWR1Y3Rpb25BeGVzKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dFNoYXBlLCBpbnB1dC5kdHlwZSk7XG4gIGlmICh1dGlsLnNpemVGcm9tU2hhcGUoaW5wdXQuc2hhcGUpICE9PSAwKSB7XG4gICAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gICAgd2FzbVN1bShpbnB1dElkLCByZWR1Y2VTaXplLCBDcHBEVHlwZVtvdXQuZHR5cGVdLCBvdXRJZCk7XG4gIH1cblxuICBpZiAoaW5wdXRXYXNUcmFuc3Bvc2VkKSB7XG4gICAgLy8gZGlzcG9zZSBvZiB0aGUgdHJhbnNwb3NlZCB0ZW5zb3IuXG4gICAgYmFja2VuZC5kaXNwb3NlRGF0YSh0cmFuc3Bvc2VkLmRhdGFJZCk7XG4gIH1cblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICAvLyByZXNoYXBlXG4gICAgY29uc3QgbmV3U2hhcGUgPSBiYWNrZW5kX3V0aWwuZXhwYW5kU2hhcGVUb0tlZXBEaW0ob3V0LnNoYXBlLCBvcmlnaW5hbEF4ZXMpO1xuICAgIG91dC5zaGFwZSA9IG5ld1NoYXBlO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdW0sXG4gIGJhY2tlbmROYW1lOiAnd2FzbScsXG4gIHNldHVwRnVuYzogc2V0dXAsXG4gIGtlcm5lbEZ1bmM6IHN1bSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tan } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const tanConfig = createUnaryKernelConfig(Tan);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvVGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBZSxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtLZXJuZWxDb25maWcsIFRhbn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHRhbkNvbmZpZzogS2VybmVsQ29uZmlnID0gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoVGFuKTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tanh } from '@tensorflow/tfjs-core';\nimport { createUnaryKernelConfig } from './unary_kernel';\nexport const tanhConfig = createUnaryKernelConfig(Tanh);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1RhbmgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsT0FBTyxFQUFlLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgVGFuaH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVVbmFyeUtlcm5lbENvbmZpZ30gZnJvbSAnLi91bmFyeV9rZXJuZWwnO1xuZXhwb3J0IGNvbnN0IHRhbmhDb25maWc6IEtlcm5lbENvbmZpZyA9IGNyZWF0ZVVuYXJ5S2VybmVsQ29uZmlnKFRhbmgpO1xuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { scatter_util, TensorScatterUpdate, util } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmTensorScatterUpdate;\nfunction setup(backend) {\n wasmTensorScatterUpdate =\n backend.wasm.cwrap(TensorScatterUpdate, null /*void*/, [\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number', // tensorId\n ]);\n}\nfunction tensorScatterUpdate(args) {\n const { backend, inputs, attrs } = args;\n const { tensor, indices, updates } = inputs;\n const {} = attrs;\n const out = backend.makeOutput(tensor.shape, tensor.dtype);\n if (util.sizeFromShape(tensor.shape) === 0) {\n return out;\n }\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = scatter_util.calculateShapes(updates, indices, tensor.shape);\n const indicesData = backend.dataIdMap.get(indices.dataId);\n const indicesId = indicesData.id;\n const updatesData = backend.dataIdMap.get(updates.dataId);\n const updatesId = updatesData.id;\n const tensorData = backend.dataIdMap.get(tensor.dataId);\n const tensorId = tensorData.id;\n const stridesBytes = new Uint8Array(new Int32Array(strides).buffer);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmTensorScatterUpdate(indicesId, updatesId, CppDType[updates.dtype], sliceRank, numUpdates, sliceSize, stridesBytes, outputSize, outId, tensorId);\n return out;\n}\nexport const tensorScatterUpdateConfig = {\n kernelName: TensorScatterUpdate,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: tensorScatterUpdate\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVuc29yU2NhdHRlclVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1RlbnNvclNjYXR0ZXJVcGRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixZQUFZLEVBQWMsbUJBQW1CLEVBQXVELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXpLLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFakMsSUFBSSx1QkFHNEQsQ0FBQztBQUVqRSxTQUFTLEtBQUssQ0FBQyxPQUFvQjtJQUNqQyx1QkFBdUI7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyRCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLEVBQUcsV0FBVztTQUN2QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWpCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLEdBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFFakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFFL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCx1QkFBdUIsQ0FDbkIsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQ3BFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUUxRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBzY2F0dGVyX3V0aWwsIFRlbnNvckluZm8sIFRlbnNvclNjYXR0ZXJVcGRhdGUsIFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRycywgVGVuc29yU2NhdHRlclVwZGF0ZUlucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxuaW1wb3J0IHtDcHBEVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmxldCB3YXNtVGVuc29yU2NhdHRlclVwZGF0ZTogKFxuICAgIGluZGljZXNJZDogbnVtYmVyLCB1cGRhdGVzSWQ6IG51bWJlciwgZHR5cGU6IENwcERUeXBlLCBzbGljZVJhbms6IG51bWJlcixcbiAgICBudW1VcGRhdGVzOiBudW1iZXIsIHNsaWNlU2l6ZTogbnVtYmVyLCBzdHJpZGVzOiBVaW50OEFycmF5LFxuICAgIG91dHB1dFNpemU6IG51bWJlciwgb3V0SWQ6IG51bWJlciwgdGVuc29ySWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgd2FzbVRlbnNvclNjYXR0ZXJVcGRhdGUgPVxuICAgICAgYmFja2VuZC53YXNtLmN3cmFwKFRlbnNvclNjYXR0ZXJVcGRhdGUsIG51bGwgLyp2b2lkKi8sIFtcbiAgICAgICAgJ251bWJlcicsICAvLyBpbmRpY2VzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyB1cGRhdGVzSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgICAnbnVtYmVyJywgIC8vIHNsaWNlUmFua1xuICAgICAgICAnbnVtYmVyJywgIC8vIG51bVVwZGF0ZXNcbiAgICAgICAgJ251bWJlcicsICAvLyBzbGljZVNpemVcbiAgICAgICAgJ2FycmF5JywgICAvLyBzdHJpZGVzXG4gICAgICAgICdudW1iZXInLCAgLy8gb3V0cHV0U2l6ZVxuICAgICAgICAnbnVtYmVyJywgIC8vIG91dElkXG4gICAgICAgICdudW1iZXInLCAgLy8gdGVuc29ySWRcbiAgICAgIF0pO1xufVxuXG5mdW5jdGlvbiB0ZW5zb3JTY2F0dGVyVXBkYXRlKGFyZ3M6IHtcbiAgYmFja2VuZDogQmFja2VuZFdhc20sXG4gIGlucHV0czogVGVuc29yU2NhdHRlclVwZGF0ZUlucHV0cyxcbiAgYXR0cnM6IFRlbnNvclNjYXR0ZXJVcGRhdGVBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgaW5wdXRzLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7dGVuc29yLCBpbmRpY2VzLCB1cGRhdGVzfSA9IGlucHV0cztcbiAgY29uc3Qge30gPSBhdHRycztcblxuICBjb25zdCBvdXQgPSBiYWNrZW5kLm1ha2VPdXRwdXQodGVuc29yLnNoYXBlLCB0ZW5zb3IuZHR5cGUpO1xuICBpZiAodXRpbC5zaXplRnJvbVNoYXBlKHRlbnNvci5zaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29uc3Qge3NsaWNlUmFuaywgbnVtVXBkYXRlcywgc2xpY2VTaXplLCBzdHJpZGVzLCBvdXRwdXRTaXplfSA9XG4gICAgICBzY2F0dGVyX3V0aWwuY2FsY3VsYXRlU2hhcGVzKHVwZGF0ZXMsIGluZGljZXMsIHRlbnNvci5zaGFwZSk7XG5cbiAgY29uc3QgaW5kaWNlc0RhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW5kaWNlcy5kYXRhSWQpO1xuICBjb25zdCBpbmRpY2VzSWQgPSBpbmRpY2VzRGF0YS5pZDtcblxuICBjb25zdCB1cGRhdGVzRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh1cGRhdGVzLmRhdGFJZCk7XG4gIGNvbnN0IHVwZGF0ZXNJZCA9IHVwZGF0ZXNEYXRhLmlkO1xuXG4gIGNvbnN0IHRlbnNvckRhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQodGVuc29yLmRhdGFJZCk7XG4gIGNvbnN0IHRlbnNvcklkID0gdGVuc29yRGF0YS5pZDtcblxuICBjb25zdCBzdHJpZGVzQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheShzdHJpZGVzKS5idWZmZXIpO1xuXG4gIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuICB3YXNtVGVuc29yU2NhdHRlclVwZGF0ZShcbiAgICAgIGluZGljZXNJZCwgdXBkYXRlc0lkLCBDcHBEVHlwZVt1cGRhdGVzLmR0eXBlXSwgc2xpY2VSYW5rLCBudW1VcGRhdGVzLFxuICAgICAgc2xpY2VTaXplLCBzdHJpZGVzQnl0ZXMsIG91dHB1dFNpemUsIG91dElkLCB0ZW5zb3JJZCk7XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHRlbnNvclNjYXR0ZXJVcGRhdGVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVGVuc29yU2NhdHRlclVwZGF0ZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogdGVuc29yU2NhdHRlclVwZGF0ZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tile } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmTile;\nfunction setup(backend) {\n wasmTile = backend.wasm.cwrap(Tile, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'array',\n 'number',\n 'number' // out_id\n ]);\n}\nfunction tile(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const { reps } = attrs;\n const newShape = new Array(x.shape.length);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = x.shape[i] * reps[i];\n }\n const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n const newShapeBytes = new Uint8Array(new Int32Array(newShape).buffer);\n const out = backend.makeOutput(newShape, x.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n wasmTile(xId, xShapeBytes, x.shape.length, newShapeBytes, newShape.length, CppDType[out.dtype], outId);\n return out;\n}\nexport const tileConfig = {\n kernelName: Tile,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: tile\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1RpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixJQUFJLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFJNUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLFFBRTJELENBQUM7QUFFaEUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ25ELFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsUUFBUSxDQUFHLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUNULElBQWtFO0lBQ3BFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLFFBQVEsR0FBYSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUNELE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV0RSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRCxRQUFRLENBQ0osR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFDaEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGlsZSwgVGlsZUF0dHJzLCBUaWxlSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21UaWxlOiAoXG4gICAgeElkOiBudW1iZXIsIHhTaGFwZTogVWludDhBcnJheSwgeFNoYXBlU2l6ZTogbnVtYmVyLCBuZXdTaGFwZTogVWludDhBcnJheSxcbiAgICBuZXdTaGFwZVNpemU6IG51bWJlciwgZHR5cGU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbVRpbGUgPSBiYWNrZW5kLndhc20uY3dyYXAoVGlsZSwgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4X2lkXG4gICAgJ2FycmF5JywgICAvLyB4X3NoYXBlXG4gICAgJ251bWJlcicsICAvLyB4X3NoYXBlLmxlbmd0aFxuICAgICdhcnJheScsICAgLy8gbmV3X3NoYXBlXG4gICAgJ251bWJlcicsICAvLyBuZXdfc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicgICAvLyBvdXRfaWRcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIHRpbGUoXG4gICAgYXJnczoge2lucHV0czogVGlsZUlucHV0cywgYmFja2VuZDogQmFja2VuZFdhc20sIGF0dHJzOiBUaWxlQXR0cnN9KSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3QgeElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZDtcbiAgY29uc3Qge3JlcHN9ID0gYXR0cnM7XG5cbiAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KHguc2hhcGUubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdTaGFwZS5sZW5ndGg7IGkrKykge1xuICAgIG5ld1NoYXBlW2ldID0geC5zaGFwZVtpXSAqIHJlcHNbaV07XG4gIH1cbiAgY29uc3QgeFNoYXBlQnl0ZXMgPSBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSh4LnNoYXBlKS5idWZmZXIpO1xuICBjb25zdCBuZXdTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkobmV3U2hhcGUpLmJ1ZmZlcik7XG5cbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KG5ld1NoYXBlLCB4LmR0eXBlKTtcbiAgY29uc3Qgb3V0SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0LmRhdGFJZCkuaWQ7XG4gIHdhc21UaWxlKFxuICAgICAgeElkLCB4U2hhcGVCeXRlcywgeC5zaGFwZS5sZW5ndGgsIG5ld1NoYXBlQnl0ZXMsIG5ld1NoYXBlLmxlbmd0aCxcbiAgICAgIENwcERUeXBlW291dC5kdHlwZV0sIG91dElkKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IHRpbGVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVGlsZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogdGlsZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TopK } from '@tensorflow/tfjs-core';\nimport { CppDType } from './types';\nlet wasmTopK;\nfunction setup(backend) {\n wasmTopK = backend.wasm.cwrap(TopK, null /* void */, [\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'bool',\n 'number',\n 'number', // outIndicesId\n ]);\n}\nexport const topk = ({ inputs, backend, attrs }) => {\n const { x } = inputs;\n const { k, sorted } = attrs;\n const xId = backend.dataIdMap.get(x.dataId).id;\n const xShapeBytes = new Uint8Array(new Int32Array(x.shape).buffer);\n const outputShape = x.shape.slice();\n outputShape[outputShape.length - 1] = k;\n const outValues = backend.makeOutput(outputShape, x.dtype);\n const outValuesId = backend.dataIdMap.get(outValues.dataId).id;\n const outIndices = backend.makeOutput(outputShape, 'int32');\n const outIndicesId = backend.dataIdMap.get(outIndices.dataId).id;\n wasmTopK(xId, xShapeBytes, x.shape.length, CppDType[x.dtype], k, sorted, outValuesId, outIndicesId);\n return [outValues, outIndices];\n};\nexport const topKConfig = {\n kernelName: TopK,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: topk,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wSy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9rZXJuZWxzL1RvcEsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxJQUFJLEVBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFHeEcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxJQUFJLFFBRzZCLENBQUM7QUFFbEMsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ25ELFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtRQUNOLFFBQVE7UUFDUixRQUFRLEVBQUcsZUFBZTtLQUMzQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUVtQixDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFMUIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUVqRSxRQUFRLENBQ0osR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQzlELFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUvQixPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVWLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUb3BLLCBUb3BLQXR0cnMsIFRvcEtJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21Ub3BLOiAoXG4gICAgeElkOiBudW1iZXIsIHhTaGFwZUJ5dGVzOiBVaW50OEFycmF5LCB4U2hhcGVMZW5ndGg6IG51bWJlcixcbiAgICB4RHR5cGU6IENwcERUeXBlLCBrOiBudW1iZXIsIHNvcnRlZDogYm9vbGVhbiwgb3V0VmFsdWVzSWQ6IG51bWJlcixcbiAgICBvdXRJbmRpY2VzSWQ6IG51bWJlcikgPT4gdm9pZDtcblxuZnVuY3Rpb24gc2V0dXAoYmFja2VuZDogQmFja2VuZFdhc20pIHtcbiAgd2FzbVRvcEsgPSBiYWNrZW5kLndhc20uY3dyYXAoVG9wSywgbnVsbCAvKiB2b2lkICovLCBbXG4gICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAnYXJyYXknLCAgIC8vIHguc2hhcGVcbiAgICAnbnVtYmVyJywgIC8vIHguc2hhcGUubGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyB4LmR0eXBlXG4gICAgJ251bWJlcicsICAvLyBrXG4gICAgJ2Jvb2wnLCAgICAvLyBzb3J0ZWRcbiAgICAnbnVtYmVyJywgIC8vIG91dFZhbHVlc0lkXG4gICAgJ251bWJlcicsICAvLyBvdXRJbmRpY2VzSWRcbiAgXSk7XG59XG5cbmV4cG9ydCBjb25zdCB0b3BrOlxuICAgIChhcmdzOiB7aW5wdXRzOiBUb3BLSW5wdXRzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbSwgYXR0cnM6IFRvcEtBdHRyc30pID0+XG4gICAgICAgIFRlbnNvckluZm9bXSB8IFRlbnNvckluZm8gPSAoe2lucHV0cywgYmFja2VuZCwgYXR0cnN9KSA9PiB7XG4gICAgICAgICAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICAgICAgICAgIGNvbnN0IHtrLCBzb3J0ZWR9ID0gYXR0cnM7XG5cbiAgICAgICAgICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICAgICAgICAgIGNvbnN0IHhTaGFwZUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobmV3IEludDMyQXJyYXkoeC5zaGFwZSkuYnVmZmVyKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRTaGFwZSA9IHguc2hhcGUuc2xpY2UoKTtcbiAgICAgICAgICBvdXRwdXRTaGFwZVtvdXRwdXRTaGFwZS5sZW5ndGggLSAxXSA9IGs7XG4gICAgICAgICAgY29uc3Qgb3V0VmFsdWVzID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dHB1dFNoYXBlLCB4LmR0eXBlKTtcbiAgICAgICAgICBjb25zdCBvdXRWYWx1ZXNJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXRWYWx1ZXMuZGF0YUlkKS5pZDtcbiAgICAgICAgICBjb25zdCBvdXRJbmRpY2VzID0gYmFja2VuZC5tYWtlT3V0cHV0KG91dHB1dFNoYXBlLCAnaW50MzInKTtcbiAgICAgICAgICBjb25zdCBvdXRJbmRpY2VzSWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQob3V0SW5kaWNlcy5kYXRhSWQpLmlkO1xuXG4gICAgICAgICAgd2FzbVRvcEsoXG4gICAgICAgICAgICAgIHhJZCwgeFNoYXBlQnl0ZXMsIHguc2hhcGUubGVuZ3RoLCBDcHBEVHlwZVt4LmR0eXBlXSwgaywgc29ydGVkLFxuICAgICAgICAgICAgICBvdXRWYWx1ZXNJZCwgb3V0SW5kaWNlc0lkKTtcblxuICAgICAgICAgIHJldHVybiBbb3V0VmFsdWVzLCBvdXRJbmRpY2VzXTtcbiAgICAgICAgfTtcblxuZXhwb3J0IGNvbnN0IHRvcEtDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVG9wSyxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogdG9wayBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transform, util } from '@tensorflow/tfjs-core';\nlet wasmTransform;\nfunction setup(backend) {\n wasmTransform = backend.wasm.cwrap(Transform, null /*void*/, [\n 'number',\n 'number',\n 'bool',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number',\n 'array',\n 'number',\n 'array',\n 'number',\n 'number',\n 'number',\n 'number',\n 'number' // outId\n ]);\n}\nfunction transform(args) {\n const { backend, inputs, attrs } = args;\n const { image, transforms } = inputs;\n const { interpolation, fillMode, fillValue, outputShape } = attrs;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth];\n const outShape = [batch, outHeight, outWidth,\n numChannels];\n const inputStrides = new Uint8Array(new Int32Array(util.computeStrides(image.shape)).buffer);\n const outputStrides = new Uint8Array(new Int32Array(util.computeStrides(outShape)).buffer);\n const out = backend.makeOutput(outShape, image.dtype);\n const outId = backend.dataIdMap.get(out.dataId).id;\n const imageData = backend.dataIdMap.get(image.dataId);\n const imageId = imageData.id;\n const transformsData = backend.dataIdMap.get(transforms.dataId);\n const transformsId = transformsData.id;\n const interpolationModeId = interpolation === 'nearest' ? 1 : 2;\n let fillModeId;\n switch (fillMode) {\n case 'constant':\n fillModeId = 1;\n break;\n case 'reflect':\n fillModeId = 2;\n break;\n case 'wrap':\n fillModeId = 3;\n break;\n case 'nearest':\n fillModeId = 4;\n break;\n default:\n fillModeId = 1;\n break;\n }\n wasmTransform(imageId, transformsId, (transforms.shape[0] > 1), batch, outHeight, outWidth, numChannels, imageWidth, imageHeight, inputStrides, image.shape.length - 1, outputStrides, outShape.length - 1, interpolationModeId, fillModeId, fillValue, outId);\n return out;\n}\nexport const transformConfig = {\n kernelName: Transform,\n backendName: 'wasm',\n setupFunc: setup,\n kernelFunc: transform\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvVHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBdUMsU0FBUyxFQUFtQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUk3SCxJQUFJLGFBTTZELENBQUM7QUFFbEUsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQzNELFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtRQUNOLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRLENBQUcsUUFBUTtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQ2QsSUFDMEU7SUFFNUUsTUFBTSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25DLE1BQU0sRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFaEUsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDbEUsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FDdkIsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FDVixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtRQUMxQixXQUFXLENBQXFDLENBQUM7SUFDdEQsTUFBTSxZQUFZLEdBQ2QsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1RSxNQUFNLGFBQWEsR0FDZixJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFekUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7SUFFN0IsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUM7SUFFdkMsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLFVBQVUsQ0FBQztJQUNmLFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssVUFBVTtZQUNiLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDZixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNmLE1BQU07UUFDUixLQUFLLE1BQU07WUFDVCxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTTtRQUNSLEtBQUssU0FBUztZQUNaLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDZixNQUFNO1FBQ1I7WUFDRSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTTtLQUNUO0lBRUQsYUFBYSxDQUNULE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQ2xFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQzVELEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzFELG1CQUFtQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdkQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsTUFBTTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFRyYW5zZm9ybSwgVHJhbnNmb3JtQXR0cnMsIFRyYW5zZm9ybUlucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtCYWNrZW5kV2FzbX0gZnJvbSAnLi4vYmFja2VuZF93YXNtJztcblxubGV0IHdhc21UcmFuc2Zvcm06IChcbiAgICBpbWFnZUlkOiBudW1iZXIsIHRyYW5zZm9ybXNJZDogbnVtYmVyLCBpc0JhdGNoVHJhbnNmb3JtOiBib29sZWFuLFxuICAgIGJhdGNoOiBudW1iZXIsIG91dEhlaWdodDogbnVtYmVyLCBvdXRXaWR0aDogbnVtYmVyLCBudW1DaGFubmVsczogbnVtYmVyLFxuICAgIGltYWdlV2lkdGg6IG51bWJlciwgaW1hZ2VIZWlnaHQ6IG51bWJlciwgaW5wdXRTdHJpZGVzOiBVaW50OEFycmF5LFxuICAgIGlucHV0U3RyaWRlc0xlbmd0aDogbnVtYmVyLCBvdXRwdXRTdHJpZGVzOiBVaW50OEFycmF5LFxuICAgIG91dHB1dFN0cmlkZXNMZW5ndGg6IG51bWJlciwgaW50ZXJwb2xhdGlvbk1vZGVJZDogbnVtYmVyLFxuICAgIGZpbGxNb2RlSWQ6IG51bWJlciwgZmlsbFZhbHVlOiBudW1iZXIsIG91dElkOiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKTogdm9pZCB7XG4gIHdhc21UcmFuc2Zvcm0gPSBiYWNrZW5kLndhc20uY3dyYXAoVHJhbnNmb3JtLCBudWxsIC8qdm9pZCovLCBbXG4gICAgJ251bWJlcicsICAvLyBpbWFnZUlkXG4gICAgJ251bWJlcicsICAvLyB0cmFuc2Zvcm1zSWRcbiAgICAnYm9vbCcsICAgIC8vIGlzQmF0Y2hUcmFuc2Zvcm1cbiAgICAnbnVtYmVyJywgIC8vIGJhdGNoXG4gICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAnbnVtYmVyJywgIC8vIG91dFdpZHRoXG4gICAgJ251bWJlcicsICAvLyBudW1DaGFubmVsc1xuICAgICdudW1iZXInLCAgLy8gaW1hZ2VXaWR0aFxuICAgICdudW1iZXInLCAgLy8gaW1hZ2VIZWlnaHRcbiAgICAnYXJyYXknLCAgIC8vIGlucHV0U3RyaWRlc1xuICAgICdudW1iZXInLCAgLy8gaW5wdXRTdHJpZGVzTGVuZ3RoXG4gICAgJ2FycmF5JywgICAvLyBvdXRwdXRTdHJpZGVzXG4gICAgJ251bWJlcicsICAvLyBvdXRwdXRTdHJpZGVzTGVuZ3RoXG4gICAgJ251bWJlcicsICAvLyBpbnRlcnBvbGF0aW9uTW9kZUlkXG4gICAgJ251bWJlcicsICAvLyBmaWxsTW9kZUlkXG4gICAgJ251bWJlcicsICAvLyBmaWxsVmFsdWVcbiAgICAnbnVtYmVyJyAgIC8vIG91dElkXG4gIF0pO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0oXG4gICAgYXJnczpcbiAgICAgICAge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IFRyYW5zZm9ybUlucHV0cywgYXR0cnM6IFRyYW5zZm9ybUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBpbnB1dHMsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZSwgdHJhbnNmb3Jtc30gPSBpbnB1dHM7XG4gIGNvbnN0IHtpbnRlcnBvbGF0aW9uLCBmaWxsTW9kZSwgZmlsbFZhbHVlLCBvdXRwdXRTaGFwZX0gPSBhdHRycztcblxuICBjb25zdCBbYmF0Y2gsIGltYWdlSGVpZ2h0LCBpbWFnZVdpZHRoLCBudW1DaGFubmVsc10gPSBpbWFnZS5zaGFwZTtcbiAgY29uc3QgW291dEhlaWdodCwgb3V0V2lkdGhdID1cbiAgICAgIG91dHB1dFNoYXBlICE9IG51bGwgPyBvdXRwdXRTaGFwZSA6IFtpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aF07XG4gIGNvbnN0IG91dFNoYXBlID1cbiAgICAgIFtiYXRjaCwgb3V0SGVpZ2h0LCBvdXRXaWR0aCxcbiAgICAgICBudW1DaGFubmVsc10gYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIGNvbnN0IGlucHV0U3RyaWRlcyA9XG4gICAgICBuZXcgVWludDhBcnJheShuZXcgSW50MzJBcnJheSh1dGlsLmNvbXB1dGVTdHJpZGVzKGltYWdlLnNoYXBlKSkuYnVmZmVyKTtcblxuICBjb25zdCBvdXRwdXRTdHJpZGVzID1cbiAgICAgIG5ldyBVaW50OEFycmF5KG5ldyBJbnQzMkFycmF5KHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0U2hhcGUpKS5idWZmZXIpO1xuXG4gIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dChvdXRTaGFwZSwgaW1hZ2UuZHR5cGUpO1xuICBjb25zdCBvdXRJZCA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldChvdXQuZGF0YUlkKS5pZDtcblxuICBjb25zdCBpbWFnZURhdGEgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoaW1hZ2UuZGF0YUlkKTtcbiAgY29uc3QgaW1hZ2VJZCA9IGltYWdlRGF0YS5pZDtcblxuICBjb25zdCB0cmFuc2Zvcm1zRGF0YSA9IGJhY2tlbmQuZGF0YUlkTWFwLmdldCh0cmFuc2Zvcm1zLmRhdGFJZCk7XG4gIGNvbnN0IHRyYW5zZm9ybXNJZCA9IHRyYW5zZm9ybXNEYXRhLmlkO1xuXG4gIGNvbnN0IGludGVycG9sYXRpb25Nb2RlSWQgPSBpbnRlcnBvbGF0aW9uID09PSAnbmVhcmVzdCcgPyAxIDogMjtcbiAgbGV0IGZpbGxNb2RlSWQ7XG4gIHN3aXRjaCAoZmlsbE1vZGUpIHtcbiAgICBjYXNlICdjb25zdGFudCc6XG4gICAgICBmaWxsTW9kZUlkID0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JlZmxlY3QnOlxuICAgICAgZmlsbE1vZGVJZCA9IDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd3cmFwJzpcbiAgICAgIGZpbGxNb2RlSWQgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbmVhcmVzdCc6XG4gICAgICBmaWxsTW9kZUlkID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmaWxsTW9kZUlkID0gMTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgd2FzbVRyYW5zZm9ybShcbiAgICAgIGltYWdlSWQsIHRyYW5zZm9ybXNJZCwgKHRyYW5zZm9ybXMuc2hhcGVbMF0gPiAxKSwgYmF0Y2gsIG91dEhlaWdodCxcbiAgICAgIG91dFdpZHRoLCBudW1DaGFubmVscywgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQsIGlucHV0U3RyaWRlcyxcbiAgICAgIGltYWdlLnNoYXBlLmxlbmd0aCAtIDEsIG91dHB1dFN0cmlkZXMsIG91dFNoYXBlLmxlbmd0aCAtIDEsXG4gICAgICBpbnRlcnBvbGF0aW9uTW9kZUlkLCBmaWxsTW9kZUlkLCBmaWxsVmFsdWUsIG91dElkKTtcblxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRyYW5zZm9ybSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogdHJhbnNmb3JtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unique } from '@tensorflow/tfjs-core';\nimport { uniqueImplCPU } from '../kernel_utils/shared';\nfunction unique(args) {\n const { inputs, attrs, backend } = args;\n const { axis } = attrs;\n const { x } = inputs;\n const { outputValues, outputShape, indices } = uniqueImplCPU(backend.readSync(x.dataId), axis, x.shape, x.dtype);\n return [\n backend.makeOutput(outputShape, x.dtype, /*memoryOffset=*/ undefined, outputValues),\n backend.makeOutput([indices.length], 'int32', /*memoryOffset=*/ undefined, indices),\n ];\n}\nexport const uniqueConfig = {\n kernelName: Unique,\n backendName: 'wasm',\n kernelFunc: unique,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvVW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBdUMsTUFBTSxFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBRzlHLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxTQUFTLE1BQU0sQ0FDWCxJQUFzRTtJQUV4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUNyQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBQyxHQUN0QyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRFLE9BQU87UUFDTCxPQUFPLENBQUMsVUFBVSxDQUNkLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFBLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDbkUsT0FBTyxDQUFDLFVBQVUsQ0FDZCxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUEsU0FBUyxFQUFFLE9BQU8sQ0FBQztLQUNwRSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLE1BQU07SUFDbkIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMyBHb29nbGUgTExDLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVW5pcXVlLCBVbmlxdWVBdHRycywgVW5pcXVlSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuaW1wb3J0IHt1bmlxdWVJbXBsQ1BVfSBmcm9tICcuLi9rZXJuZWxfdXRpbHMvc2hhcmVkJztcblxuZnVuY3Rpb24gdW5pcXVlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFVuaXF1ZUlucHV0cywgYXR0cnM6IFVuaXF1ZUF0dHJzLCBiYWNrZW5kOiBCYWNrZW5kV2FzbX0pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGF0dHJzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtheGlzfSA9IGF0dHJzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG5cbiAgY29uc3Qge291dHB1dFZhbHVlcywgb3V0cHV0U2hhcGUsIGluZGljZXN9ID1cbiAgICAgIHVuaXF1ZUltcGxDUFUoYmFja2VuZC5yZWFkU3luYyh4LmRhdGFJZCksIGF4aXMsIHguc2hhcGUsIHguZHR5cGUpO1xuXG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlT3V0cHV0KFxuICAgICAgICBvdXRwdXRTaGFwZSwgeC5kdHlwZSwgLyptZW1vcnlPZmZzZXQ9Ki91bmRlZmluZWQsIG91dHB1dFZhbHVlcyksXG4gICAgYmFja2VuZC5tYWtlT3V0cHV0KFxuICAgICAgICBbaW5kaWNlcy5sZW5ndGhdLCAnaW50MzInLCAvKm1lbW9yeU9mZnNldD0qL3VuZGVmaW5lZCwgaW5kaWNlcyksXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCB1bmlxdWVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVW5pcXVlLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiB1bmlxdWUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unpack } from '@tensorflow/tfjs-core';\nimport { slice } from './Slice';\nfunction unpack(args) {\n const { inputs, backend, attrs } = args;\n const { value } = inputs;\n let { axis } = attrs;\n if (axis < 0) {\n axis += value.shape.length;\n }\n const numOutputs = value.shape[axis];\n const rank = value.shape.length;\n const outShape = new Array(rank - 1);\n let outIndex = 0;\n for (let i = 0; i < rank; i++) {\n if (i !== axis) {\n outShape[outIndex++] = value.shape[i];\n }\n }\n const outs = new Array(numOutputs);\n const begin = new Array(rank).fill(0);\n const size = value.shape.slice();\n size[axis] = 1;\n for (let i = 0; i < outs.length; i++) {\n begin[axis] = i;\n outs[i] = slice({ inputs: { x: value }, attrs: { begin, size }, backend });\n }\n return outs.map(({ dataId, dtype }) => ({ dataId, dtype, shape: outShape }));\n}\nexport const unpackConfig = {\n kernelName: Unpack,\n backendName: 'wasm',\n kernelFunc: unpack,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5wYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvVW5wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBdUMsTUFBTSxFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBSTlHLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFOUIsU0FBUyxNQUFNLENBQ1gsSUFBc0U7SUFFeEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsSUFBSSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVuQixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDWixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFhLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0tBQ0Y7SUFDRCxNQUFNLElBQUksR0FBaUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUN0RTtJQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVW5wYWNrLCBVbnBhY2tBdHRycywgVW5wYWNrSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL1NsaWNlJztcblxuZnVuY3Rpb24gdW5wYWNrKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFVucGFja0lucHV0cywgYmFja2VuZDogQmFja2VuZFdhc20sIGF0dHJzOiBVbnBhY2tBdHRyc30pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt2YWx1ZX0gPSBpbnB1dHM7XG4gIGxldCB7YXhpc30gPSBhdHRycztcblxuICBpZiAoYXhpcyA8IDApIHtcbiAgICBheGlzICs9IHZhbHVlLnNoYXBlLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IG51bU91dHB1dHMgPSB2YWx1ZS5zaGFwZVtheGlzXTtcbiAgY29uc3QgcmFuayA9IHZhbHVlLnNoYXBlLmxlbmd0aDtcbiAgY29uc3Qgb3V0U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KHJhbmsgLSAxKTtcbiAgbGV0IG91dEluZGV4ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5rOyBpKyspIHtcbiAgICBpZiAoaSAhPT0gYXhpcykge1xuICAgICAgb3V0U2hhcGVbb3V0SW5kZXgrK10gPSB2YWx1ZS5zaGFwZVtpXTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgb3V0czogVGVuc29ySW5mb1tdID0gbmV3IEFycmF5KG51bU91dHB1dHMpO1xuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheShyYW5rKS5maWxsKDApO1xuICBjb25zdCBzaXplID0gdmFsdWUuc2hhcGUuc2xpY2UoKTtcbiAgc2l6ZVtheGlzXSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cy5sZW5ndGg7IGkrKykge1xuICAgIGJlZ2luW2F4aXNdID0gaTtcbiAgICBvdXRzW2ldID0gc2xpY2Uoe2lucHV0czoge3g6IHZhbHVlfSwgYXR0cnM6IHtiZWdpbiwgc2l6ZX0sIGJhY2tlbmR9KTtcbiAgfVxuICByZXR1cm4gb3V0cy5tYXAoKHtkYXRhSWQsIGR0eXBlfSkgPT4gKHtkYXRhSWQsIGR0eXBlLCBzaGFwZTogb3V0U2hhcGV9KSk7XG59XG5cbmV4cG9ydCBjb25zdCB1bnBhY2tDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVW5wYWNrLFxuICBiYWNrZW5kTmFtZTogJ3dhc20nLFxuICBrZXJuZWxGdW5jOiB1bnBhY2sgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ZerosLike } from '@tensorflow/tfjs-core';\nfunction zerosLike(args) {\n const { inputs: { x }, backend } = args;\n const out = backend.makeOutput(x.shape, x.dtype);\n const outVals = backend.typedArrayFromHeap(out);\n outVals.fill(0);\n return out;\n}\nexport const zerosLikeConfig = {\n kernelName: ZerosLike,\n backendName: 'wasm',\n kernelFunc: zerosLike,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmVyb3NMaWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvWmVyb3NMaWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsU0FBUyxFQUFrQixNQUFNLHVCQUF1QixDQUFDO0FBSTNGLFNBQVMsU0FBUyxDQUFDLElBQXFEO0lBQ3RFLE1BQU0sRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDcEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgWmVyb3NMaWtlLCBaZXJvc0xpa2VJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmZ1bmN0aW9uIHplcm9zTGlrZShhcmdzOiB7aW5wdXRzOiBaZXJvc0xpa2VJbnB1dHMsIGJhY2tlbmQ6IEJhY2tlbmRXYXNtfSkge1xuICBjb25zdCB7aW5wdXRzOiB7eH0sIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qgb3V0ID0gYmFja2VuZC5tYWtlT3V0cHV0KHguc2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCBvdXRWYWxzID0gYmFja2VuZC50eXBlZEFycmF5RnJvbUhlYXAob3V0KTtcbiAgb3V0VmFscy5maWxsKDApO1xuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgemVyb3NMaWtlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFplcm9zTGlrZSxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAga2VybmVsRnVuYzogemVyb3NMaWtlIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// We explicitly import the modular kernels so they get registered in the\n// global registry when we compile the library. A modular build would replace\n// the contents of this file and import only the kernels that are needed.\nimport { registerKernel } from '@tensorflow/tfjs-core';\nimport { _fusedMatMulConfig } from './kernels/_FusedMatMul';\nimport { absConfig } from './kernels/Abs';\nimport { acosConfig } from './kernels/Acos';\nimport { acoshConfig } from './kernels/Acosh';\nimport { addConfig } from './kernels/Add';\nimport { addNConfig } from './kernels/AddN';\nimport { allConfig } from './kernels/All';\nimport { anyConfig } from './kernels/Any';\nimport { argMaxConfig } from './kernels/ArgMax';\nimport { argMinConfig } from './kernels/ArgMin';\nimport { asinConfig } from './kernels/Asin';\nimport { asinhConfig } from './kernels/Asinh';\nimport { atanConfig } from './kernels/Atan';\nimport { atan2Config } from './kernels/Atan2';\nimport { atanhConfig } from './kernels/Atanh';\nimport { avgPoolConfig } from './kernels/AvgPool';\nimport { avgPool3DConfig } from './kernels/AvgPool3D';\nimport { avgPool3DGradConfig } from './kernels/AvgPool3DGrad';\nimport { avgPoolGradConfig } from './kernels/AvgPoolGrad';\nimport { batchMatMulConfig } from './kernels/BatchMatMul';\nimport { batchToSpaceNDConfig } from './kernels/BatchToSpaceND';\nimport { bincountConfig } from './kernels/Bincount';\nimport { bitwiseAndConfig } from './kernels/BitwiseAnd';\nimport { broadcastArgsConfig } from './kernels/BroadcastArgs';\nimport { castConfig } from './kernels/Cast';\nimport { ceilConfig } from './kernels/Ceil';\nimport { clipByValueConfig } from './kernels/ClipByValue';\nimport { concatConfig } from './kernels/Concat';\nimport { conv2DConfig } from './kernels/Conv2D';\nimport { conv2DBackpropInputConfig } from './kernels/Conv2DBackpropInput';\nimport { conv3DConfig } from './kernels/Conv3D';\nimport { conv3DBackpropFilterV2Config } from './kernels/Conv3DBackpropFilterV2';\nimport { conv3DBackpropInputV2Config } from './kernels/Conv3DBackpropInputV2';\nimport { cosConfig } from './kernels/Cos';\nimport { coshConfig } from './kernels/Cosh';\nimport { cropAndResizeConfig } from './kernels/CropAndResize';\nimport { cumprodConfig } from './kernels/Cumprod';\nimport { cumsumConfig } from './kernels/Cumsum';\nimport { denseBincountConfig } from './kernels/DenseBincount';\nimport { depthToSpaceConfig } from './kernels/DepthToSpace';\nimport { depthwiseConv2dNativeConfig } from './kernels/DepthwiseConv2dNative';\nimport { diagConfig } from './kernels/Diag';\nimport { dilation2DConfig } from './kernels/Dilation2D';\nimport { dilation2DBackpropFilterConfig } from './kernels/Dilation2DBackpropFilter';\nimport { dilation2DBackpropInputConfig } from './kernels/Dilation2DBackpropInput';\nimport { eluConfig } from './kernels/Elu';\nimport { eluGradConfig } from './kernels/EluGrad';\nimport { equalConfig } from './kernels/Equal';\nimport { erfConfig } from './kernels/Erf';\nimport { expConfig } from './kernels/Exp';\nimport { expandDimsConfig } from './kernels/ExpandDims';\nimport { expm1Config } from './kernels/Expm1';\nimport { fillConfig } from './kernels/Fill';\nimport { flipLeftRightConfig } from './kernels/FlipLeftRight';\nimport { floorConfig } from './kernels/Floor';\nimport { floorDivConfig } from './kernels/FloorDiv';\nimport { fusedBatchNormConfig } from './kernels/FusedBatchNorm';\nimport { fusedConv2DConfig } from './kernels/FusedConv2D';\nimport { fusedDepthwiseConv2DConfig } from './kernels/FusedDepthwiseConv2D';\nimport { gatherNdConfig } from './kernels/GatherNd';\nimport { gatherV2Config } from './kernels/GatherV2';\nimport { greaterConfig } from './kernels/Greater';\nimport { greaterEqualConfig } from './kernels/GreaterEqual';\nimport { identityConfig } from './kernels/Identity';\nimport { isFiniteConfig } from './kernels/IsFinite';\nimport { isInfConfig } from './kernels/IsInf';\nimport { isNaNConfig } from './kernels/IsNan';\nimport { leakyReluConfig } from './kernels/LeakyRelu';\nimport { lessConfig } from './kernels/Less';\nimport { lessEqualConfig } from './kernels/LessEqual';\nimport { linSpaceConfig } from './kernels/LinSpace';\nimport { logConfig } from './kernels/Log';\nimport { log1pConfig } from './kernels/Log1p';\nimport { logicalAndConfig } from './kernels/LogicalAnd';\nimport { logicalNotConfig } from './kernels/LogicalNot';\nimport { logicalOrConfig } from './kernels/LogicalOr';\nimport { logicalXorConfig } from './kernels/LogicalXor';\nimport { lrnConfig } from './kernels/LRN';\nimport { lrnGradConfig } from './kernels/LRNGrad';\nimport { maxConfig } from './kernels/Max';\nimport { maximumConfig } from './kernels/Maximum';\nimport { maxPoolConfig } from './kernels/MaxPool';\nimport { maxPool3DConfig } from './kernels/MaxPool3D';\nimport { maxPool3DGradConfig } from './kernels/MaxPool3DGrad';\nimport { maxPoolGradConfig } from './kernels/MaxPoolGrad';\nimport { maxPoolWithArgmaxConfig } from './kernels/MaxPoolWithArgmax';\nimport { meanConfig } from './kernels/Mean';\nimport { minConfig } from './kernels/Min';\nimport { minimumConfig } from './kernels/Minimum';\nimport { mirrorPadConfig } from './kernels/MirrorPad';\nimport { multinomialConfig } from './kernels/Multinomial';\nimport { modConfig } from './kernels/Mod';\nimport { multiplyConfig } from './kernels/Multiply';\nimport { negConfig } from './kernels/Neg';\nimport { nonMaxSuppressionV3Config } from './kernels/NonMaxSuppressionV3';\nimport { nonMaxSuppressionV4Config } from './kernels/NonMaxSuppressionV4';\nimport { nonMaxSuppressionV5Config } from './kernels/NonMaxSuppressionV5';\nimport { notEqualConfig } from './kernels/NotEqual';\nimport { oneHotConfig } from './kernels/OneHot';\nimport { onesLikeConfig } from './kernels/OnesLike';\nimport { packConfig } from './kernels/Pack';\nimport { padV2Config } from './kernels/PadV2';\nimport { powConfig } from './kernels/Pow';\nimport { preluConfig } from './kernels/Prelu';\nimport { prodConfig } from './kernels/Prod';\nimport { rangeConfig } from './kernels/Range';\nimport { realDivConfig } from './kernels/RealDiv';\nimport { reciprocalConfig } from './kernels/Reciprocal';\nimport { reluConfig } from './kernels/Relu';\nimport { relu6Config } from './kernels/Relu6';\nimport { reshapeConfig } from './kernels/Reshape';\nimport { resizeBilinearConfig } from './kernels/ResizeBilinear';\nimport { resizeBilinearGradConfig } from './kernels/ResizeBilinearGrad';\nimport { resizeNearestNeighborConfig } from './kernels/ResizeNearestNeighbor';\nimport { resizeNearestNeighborGradConfig } from './kernels/ResizeNearestNeighborGrad';\nimport { reverseConfig } from './kernels/Reverse';\nimport { rotateWithOffsetConfig } from './kernels/RotateWithOffset';\nimport { roundConfig } from './kernels/Round';\nimport { rsqrtConfig } from './kernels/Rsqrt';\nimport { scatterNdConfig } from './kernels/ScatterNd';\nimport { searchSortedConfig } from './kernels/SearchSorted';\nimport { selectConfig } from './kernels/Select';\nimport { seluConfig } from './kernels/Selu';\nimport { sigmoidConfig } from './kernels/Sigmoid';\nimport { signConfig } from './kernels/Sign';\nimport { sinConfig } from './kernels/Sin';\nimport { sinhConfig } from './kernels/Sinh';\nimport { sliceConfig } from './kernels/Slice';\nimport { softmaxConfig } from './kernels/Softmax';\nimport { softplusConfig } from './kernels/Softplus';\nimport { spaceToBatchNDConfig } from './kernels/SpaceToBatchND';\nimport { sparseFillEmptyRowsConfig } from './kernels/SparseFillEmptyRows';\nimport { sparseReshapeConfig } from './kernels/SparseReshape';\nimport { sparseSegmentMeanConfig } from './kernels/SparseSegmentMean';\nimport { sparseSegmentSumConfig } from './kernels/SparseSegmentSum';\nimport { sparseToDenseConfig } from './kernels/SparseToDense';\nimport { splitVConfig } from './kernels/SplitV';\nimport { sqrtConfig } from './kernels/Sqrt';\nimport { squareConfig } from './kernels/Square';\nimport { squaredDifferenceConfig } from './kernels/SquaredDifference';\nimport { stepConfig } from './kernels/Step';\nimport { stridedSliceConfig } from './kernels/StridedSlice';\nimport { stringNGramsConfig } from './kernels/StringNGrams';\nimport { stringSplitConfig } from './kernels/StringSplit';\nimport { stringToHashBucketFastConfig } from './kernels/StringToHashBucketFast';\nimport { subConfig } from './kernels/Sub';\nimport { sumConfig } from './kernels/Sum';\nimport { tanConfig } from './kernels/Tan';\nimport { tanhConfig } from './kernels/Tanh';\nimport { tensorScatterUpdateConfig } from './kernels/TensorScatterUpdate';\nimport { tileConfig } from './kernels/Tile';\nimport { topKConfig } from './kernels/TopK';\nimport { transformConfig } from './kernels/Transform';\nimport { transposeConfig } from './kernels/Transpose';\nimport { uniqueConfig } from './kernels/Unique';\nimport { unpackConfig } from './kernels/Unpack';\nimport { zerosLikeConfig } from './kernels/ZerosLike';\n// List all kernel configs here\nconst kernelConfigs = [\n _fusedMatMulConfig,\n absConfig,\n acosConfig,\n acoshConfig,\n addConfig,\n addNConfig,\n allConfig,\n anyConfig,\n argMaxConfig,\n argMinConfig,\n asinConfig,\n asinhConfig,\n atanConfig,\n atan2Config,\n atanhConfig,\n avgPoolConfig,\n avgPoolGradConfig,\n avgPool3DConfig,\n avgPool3DGradConfig,\n batchMatMulConfig,\n batchToSpaceNDConfig,\n bincountConfig,\n bitwiseAndConfig,\n broadcastArgsConfig,\n castConfig,\n ceilConfig,\n clipByValueConfig,\n concatConfig,\n conv2DConfig,\n conv2DBackpropInputConfig,\n conv3DConfig,\n conv3DBackpropFilterV2Config,\n conv3DBackpropInputV2Config,\n cosConfig,\n coshConfig,\n cropAndResizeConfig,\n cumprodConfig,\n cumsumConfig,\n denseBincountConfig,\n depthToSpaceConfig,\n depthwiseConv2dNativeConfig,\n diagConfig,\n dilation2DConfig,\n dilation2DBackpropFilterConfig,\n dilation2DBackpropInputConfig,\n eluConfig,\n eluGradConfig,\n equalConfig,\n erfConfig,\n expConfig,\n expandDimsConfig,\n expm1Config,\n fillConfig,\n flipLeftRightConfig,\n floorConfig,\n floorDivConfig,\n fusedBatchNormConfig,\n fusedConv2DConfig,\n fusedDepthwiseConv2DConfig,\n gatherNdConfig,\n gatherV2Config,\n greaterConfig,\n greaterEqualConfig,\n identityConfig,\n isFiniteConfig,\n isInfConfig,\n isNaNConfig,\n leakyReluConfig,\n lessConfig,\n lessEqualConfig,\n linSpaceConfig,\n log1pConfig,\n logConfig,\n logicalAndConfig,\n logicalNotConfig,\n logicalOrConfig,\n logicalXorConfig,\n lrnConfig,\n lrnGradConfig,\n maxConfig,\n maximumConfig,\n maxPoolConfig,\n maxPool3DConfig,\n maxPool3DGradConfig,\n maxPoolGradConfig,\n maxPoolWithArgmaxConfig,\n meanConfig,\n minConfig,\n minimumConfig,\n mirrorPadConfig,\n multinomialConfig,\n modConfig,\n multiplyConfig,\n negConfig,\n nonMaxSuppressionV3Config,\n nonMaxSuppressionV4Config,\n nonMaxSuppressionV5Config,\n notEqualConfig,\n oneHotConfig,\n onesLikeConfig,\n packConfig,\n padV2Config,\n powConfig,\n preluConfig,\n prodConfig,\n rangeConfig,\n realDivConfig,\n reciprocalConfig,\n reluConfig,\n relu6Config,\n reshapeConfig,\n resizeBilinearConfig,\n resizeBilinearGradConfig,\n resizeNearestNeighborConfig,\n resizeNearestNeighborGradConfig,\n reverseConfig,\n rotateWithOffsetConfig,\n roundConfig,\n rsqrtConfig,\n scatterNdConfig,\n searchSortedConfig,\n selectConfig,\n seluConfig,\n sigmoidConfig,\n signConfig,\n sinConfig,\n sinhConfig,\n sliceConfig,\n softmaxConfig,\n softplusConfig,\n spaceToBatchNDConfig,\n sparseFillEmptyRowsConfig,\n sparseReshapeConfig,\n sparseSegmentMeanConfig,\n sparseSegmentSumConfig,\n sparseToDenseConfig,\n splitVConfig,\n sqrtConfig,\n squareConfig,\n squaredDifferenceConfig,\n stepConfig,\n stridedSliceConfig,\n stringNGramsConfig,\n stringSplitConfig,\n stringToHashBucketFastConfig,\n subConfig,\n sumConfig,\n tanConfig,\n tanhConfig,\n tensorScatterUpdateConfig,\n tileConfig,\n topKConfig,\n transformConfig,\n transposeConfig,\n uniqueConfig,\n unpackConfig,\n zerosLikeConfig\n];\nfor (const kernelConfig of kernelConfigs) {\n registerKernel(kernelConfig);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfYWxsX2tlcm5lbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMvcmVnaXN0ZXJfYWxsX2tlcm5lbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsT0FBTyxFQUFlLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRW5FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixD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QWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuLy8gV2UgZXhwbGljaXRseSBpbXBvcnQgdGhlIG1vZHVsYXIga2VybmVscyBzbyB0aGV5IGdldCByZWdpc3RlcmVkIGluIHRoZVxuLy8gZ2xvYmFsIHJlZ2lzdHJ5IHdoZW4gd2UgY29tcGlsZSB0aGUgbGlicmFyeS4gQSBtb2R1bGFyIGJ1aWxkIHdvdWxkIHJlcGxhY2Vcbi8vIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIGltcG9ydCBvbmx5IHRoZSBrZXJuZWxzIHRoYXQgYXJlIG5lZWRlZC5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCByZWdpc3Rlcktlcm5lbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtfZnVzZWRNYXRNdWxDb25maWd9IGZyb20gJy4va2VybmVscy9fRnVzZWRNYXRNdWwnO1xuaW1wb3J0IHthYnNDb25maWd9IGZyb20gJy4va2VybmVscy9BYnMnO1xuaW1wb3J0IHthY29zQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWNvcyc7XG5pbXBvcnQge2Fjb3NoQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWNvc2gnO1xuaW1wb3J0IHthZGRDb25maWd9IGZyb20gJy4va2VybmVscy9BZGQnO1xuaW1wb3J0IHthZGROQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWRkTic7XG5pbXBvcnQge2FsbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FsbCc7XG5pbXBvcnQge2FueUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FueSc7XG5pbXBvcnQge2FyZ01heENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FyZ01heCc7XG5pbXBvcnQge2FyZ01pbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FyZ01pbic7XG5pbXBvcnQge2FzaW5Db25maWd9IGZyb20gJy4va2VybmVscy9Bc2luJztcbmltcG9ydCB7YXNpbmhDb25maWd9IGZyb20gJy4va2VybmVscy9Bc2luaCc7XG5pbXBvcnQge2F0YW5Db25maWd9IGZyb20gJy4va2VybmVscy9BdGFuJztcbmltcG9ydCB7YXRhbjJDb25maWd9IGZyb20gJy4va2VybmVscy9BdGFuMic7XG5pbXBvcnQge2F0YW5oQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXRhbmgnO1xuaW1wb3J0IHthdmdQb29sQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXZnUG9vbCc7XG5pbXBvcnQge2F2Z1Bvb2wzRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F2Z1Bvb2wzRCc7XG5pbXBvcnQge2F2Z1Bvb2wzREdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9BdmdQb29sM0RHcmFkJztcbmltcG9ydCB7YXZnUG9vbEdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9BdmdQb29sR3JhZCc7XG5pbXBvcnQge2JhdGNoTWF0TXVsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQmF0Y2hNYXRNdWwnO1xuaW1wb3J0IHtiYXRjaFRvU3BhY2VORENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0JhdGNoVG9TcGFjZU5EJztcbmltcG9ydCB7YmluY291bnRDb25maWd9IGZyb20gJy4va2VybmVscy9CaW5jb3VudCc7XG5pbXBvcnQge2JpdHdpc2VBbmRDb25maWd9IGZyb20gJy4va2VybmVscy9CaXR3aXNlQW5kJztcbmltcG9ydCB7YnJvYWRjYXN0QXJnc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Jyb2FkY2FzdEFyZ3MnO1xuaW1wb3J0IHtjYXN0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ2FzdCc7XG5pbXBvcnQge2NlaWxDb25maWd9IGZyb20gJy4va2VybmVscy9DZWlsJztcbmltcG9ydCB7Y2xpcEJ5VmFsdWVDb25maWd9IGZyb20gJy4va2VybmVscy9DbGlwQnlWYWx1ZSc7XG5pbXBvcnQge2NvbmNhdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbmNhdCc7XG5pbXBvcnQge2NvbnYyRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYyRCc7XG5pbXBvcnQge2NvbnYyREJhY2twcm9wSW5wdXRDb25maWd9IGZyb20gJy4va2VybmVscy9Db252MkRCYWNrcHJvcElucHV0JztcbmltcG9ydCB7Y29udjNEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29udjNEJztcbmltcG9ydCB7Y29udjNEQmFja3Byb3BGaWx0ZXJWMkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYzREJhY2twcm9wRmlsdGVyVjInO1xuaW1wb3J0IHtjb252M0RCYWNrcHJvcElucHV0VjJDb25maWd9IGZyb20gJy4va2VybmVscy9Db252M0RCYWNrcHJvcElucHV0VjInO1xuaW1wb3J0IHtjb3NDb25maWd9IGZyb20gJy4va2VybmVscy9Db3MnO1xuaW1wb3J0IHtjb3NoQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29zaCc7XG5pbXBvcnQge2Nyb3BBbmRSZXNpemVDb25maWd9IGZyb20gJy4va2VybmVscy9Dcm9wQW5kUmVzaXplJztcbmltcG9ydCB7Y3VtcHJvZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0N1bXByb2QnO1xuaW1wb3J0IHtjdW1zdW1Db25maWd9IGZyb20gJy4va2VybmVscy9DdW1zdW0nO1xuaW1wb3J0IHtkZW5zZUJpbmNvdW50Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGVuc2VCaW5jb3VudCc7XG5pbXBvcnQge2RlcHRoVG9TcGFjZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRoVG9TcGFjZSc7XG5pbXBvcnQge2RlcHRod2lzZUNvbnYyZE5hdGl2ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZSc7XG5pbXBvcnQge2RpYWdDb25maWd9IGZyb20gJy4va2VybmVscy9EaWFnJztcbmltcG9ydCB7ZGlsYXRpb24yRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RpbGF0aW9uMkQnO1xuaW1wb3J0IHtkaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXJDb25maWd9IGZyb20gJy4va2VybmVscy9EaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXInO1xuaW1wb3J0IHtkaWxhdGlvbjJEQmFja3Byb3BJbnB1dENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RpbGF0aW9uMkRCYWNrcHJvcElucHV0JztcbmltcG9ydCB7ZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRWx1JztcbmltcG9ydCB7ZWx1R3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0VsdUdyYWQnO1xuaW1wb3J0IHtlcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0VxdWFsJztcbmltcG9ydCB7ZXJmQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXJmJztcbmltcG9ydCB7ZXhwQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXhwJztcbmltcG9ydCB7ZXhwYW5kRGltc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0V4cGFuZERpbXMnO1xuaW1wb3J0IHtleHBtMUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0V4cG0xJztcbmltcG9ydCB7ZmlsbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0ZpbGwnO1xuaW1wb3J0IHtmbGlwTGVmdFJpZ2h0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmxpcExlZnRSaWdodCc7XG5pbXBvcnQge2Zsb29yQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmxvb3InO1xuaW1wb3J0IHtmbG9vckRpdkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Zsb29yRGl2JztcbmltcG9ydCB7ZnVzZWRCYXRjaE5vcm1Db25maWd9IGZyb20gJy4va2VybmVscy9GdXNlZEJhdGNoTm9ybSc7XG5pbXBvcnQge2Z1c2VkQ29udjJEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRnVzZWRDb252MkQnO1xuaW1wb3J0IHtmdXNlZERlcHRod2lzZUNvbnYyRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Z1c2VkRGVwdGh3aXNlQ29udjJEJztcbmltcG9ydCB7Z2F0aGVyTmRDb25maWd9IGZyb20gJy4va2VybmVscy9HYXRoZXJOZCc7XG5pbXBvcnQge2dhdGhlclYyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvR2F0aGVyVjInO1xuaW1wb3J0IHtncmVhdGVyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvR3JlYXRlcic7XG5pbXBvcnQge2dyZWF0ZXJFcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0dyZWF0ZXJFcXVhbCc7XG5pbXBvcnQge2lkZW50aXR5Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSWRlbnRpdHknO1xuaW1wb3J0IHtpc0Zpbml0ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0lzRmluaXRlJztcbmltcG9ydCB7aXNJbmZDb25maWd9IGZyb20gJy4va2VybmVscy9Jc0luZic7XG5pbXBvcnQge2lzTmFOQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSXNOYW4nO1xuaW1wb3J0IHtsZWFreVJlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9MZWFreVJlbHUnO1xuaW1wb3J0IHtsZXNzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTGVzcyc7XG5pbXBvcnQge2xlc3NFcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xlc3NFcXVhbCc7XG5pbXBvcnQge2xpblNwYWNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTGluU3BhY2UnO1xuaW1wb3J0IHtsb2dDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2cnO1xuaW1wb3J0IHtsb2cxcENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZzFwJztcbmltcG9ydCB7bG9naWNhbEFuZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZ2ljYWxBbmQnO1xuaW1wb3J0IHtsb2dpY2FsTm90Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTG9naWNhbE5vdCc7XG5pbXBvcnQge2xvZ2ljYWxPckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZ2ljYWxPcic7XG5pbXBvcnQge2xvZ2ljYWxYb3JDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2dpY2FsWG9yJztcbmltcG9ydCB7bHJuQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTFJOJztcbmltcG9ydCB7bHJuR3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xSTkdyYWQnO1xuaW1wb3J0IHttYXhDb25maWd9IGZyb20gJy4va2VybmVscy9NYXgnO1xuaW1wb3J0IHttYXhpbXVtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4aW11bSc7XG5pbXBvcnQge21heFBvb2xDb25maWd9IGZyb20gJy4va2VybmVscy9NYXhQb29sJztcbmltcG9ydCB7bWF4UG9vbDNEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4UG9vbDNEJztcbmltcG9ydCB7bWF4UG9vbDNER3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heFBvb2wzREdyYWQnO1xuaW1wb3J0IHttYXhQb29sR3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heFBvb2xHcmFkJztcbmltcG9ydCB7bWF4UG9vbFdpdGhBcmdtYXhDb25maWd9IGZyb20gJy4va2VybmVscy9NYXhQb29sV2l0aEFyZ21heCc7XG5pbXBvcnQge21lYW5Db25maWd9IGZyb20gJy4va2VybmVscy9NZWFuJztcbmltcG9ydCB7bWluQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWluJztcbmltcG9ydCB7bWluaW11bUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01pbmltdW0nO1xuaW1wb3J0IHttaXJyb3JQYWRDb25maWd9IGZyb20gJy4va2VybmVscy9NaXJyb3JQYWQnO1xuaW1wb3J0IHttdWx0aW5vbWlhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL011bHRpbm9taWFsJztcbmltcG9ydCB7bW9kQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTW9kJztcbmltcG9ydCB7bXVsdGlwbHlDb25maWd9IGZyb20gJy4va2VybmVscy9NdWx0aXBseSc7XG5pbXBvcnQge25lZ0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL05lZyc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uVjNDb25maWd9IGZyb20gJy4va2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblYzJztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb25WNENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjQnO1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblY1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WNSc7XG5pbXBvcnQge25vdEVxdWFsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTm90RXF1YWwnO1xuaW1wb3J0IHtvbmVIb3RDb25maWd9IGZyb20gJy4va2VybmVscy9PbmVIb3QnO1xuaW1wb3J0IHtvbmVzTGlrZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL09uZXNMaWtlJztcbmltcG9ydCB7cGFja0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1BhY2snO1xuaW1wb3J0IHtwYWRWMkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1BhZFYyJztcbmltcG9ydCB7cG93Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUG93JztcbmltcG9ydCB7cHJlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9QcmVsdSc7XG5pbXBvcnQge3Byb2RDb25maWd9IGZyb20gJy4va2VybmVscy9Qcm9kJztcbmltcG9ydCB7cmFuZ2VDb25maWd9IGZyb20gJy4va2VybmVscy9SYW5nZSc7XG5pbXBvcnQge3JlYWxEaXZDb25maWd9IGZyb20gJy4va2VybmVscy9SZWFsRGl2JztcbmltcG9ydCB7cmVjaXByb2NhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JlY2lwcm9jYWwnO1xuaW1wb3J0IHtyZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVsdSc7XG5pbXBvcnQge3JlbHU2Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVsdTYnO1xuaW1wb3J0IHtyZXNoYXBlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaGFwZSc7XG5pbXBvcnQge3Jlc2l6ZUJpbGluZWFyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaXplQmlsaW5lYXInO1xuaW1wb3J0IHtyZXNpemVCaWxpbmVhckdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVCaWxpbmVhckdyYWQnO1xuaW1wb3J0IHtyZXNpemVOZWFyZXN0TmVpZ2hib3JDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVOZWFyZXN0TmVpZ2hib3InO1xuaW1wb3J0IHtyZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCc7XG5pbXBvcnQge3JldmVyc2VDb25maWd9IGZyb20gJy4va2VybmVscy9SZXZlcnNlJztcbmltcG9ydCB7cm90YXRlV2l0aE9mZnNldENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JvdGF0ZVdpdGhPZmZzZXQnO1xuaW1wb3J0IHtyb3VuZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JvdW5kJztcbmltcG9ydCB7cnNxcnRDb25maWd9IGZyb20gJy4va2VybmVscy9Sc3FydCc7XG5pbXBvcnQge3NjYXR0ZXJOZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NjYXR0ZXJOZCc7XG5pbXBvcnQge3NlYXJjaFNvcnRlZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NlYXJjaFNvcnRlZCc7XG5pbXBvcnQge3NlbGVjdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NlbGVjdCc7XG5pbXBvcnQge3NlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9TZWx1JztcbmltcG9ydCB7c2lnbW9pZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NpZ21vaWQnO1xuaW1wb3J0IHtzaWduQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2lnbic7XG5pbXBvcnQge3NpbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Npbic7XG5pbXBvcnQge3NpbmhDb25maWd9IGZyb20gJy4va2VybmVscy9TaW5oJztcbmltcG9ydCB7c2xpY2VDb25maWd9IGZyb20gJy4va2VybmVscy9TbGljZSc7XG5pbXBvcnQge3NvZnRtYXhDb25maWd9IGZyb20gJy4va2VybmVscy9Tb2Z0bWF4JztcbmltcG9ydCB7c29mdHBsdXNDb25maWd9IGZyb20gJy4va2VybmVscy9Tb2Z0cGx1cyc7XG5pbXBvcnQge3NwYWNlVG9CYXRjaE5EQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3BhY2VUb0JhdGNoTkQnO1xuaW1wb3J0IHtzcGFyc2VGaWxsRW1wdHlSb3dzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3BhcnNlRmlsbEVtcHR5Um93cyc7XG5pbXBvcnQge3NwYXJzZVJlc2hhcGVDb25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VSZXNoYXBlJztcbmltcG9ydCB7c3BhcnNlU2VnbWVudE1lYW5Db25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VTZWdtZW50TWVhbic7XG5pbXBvcnQge3NwYXJzZVNlZ21lbnRTdW1Db25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VTZWdtZW50U3VtJztcbmltcG9ydCB7c3BhcnNlVG9EZW5zZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwYXJzZVRvRGVuc2UnO1xuaW1wb3J0IHtzcGxpdFZDb25maWd9IGZyb20gJy4va2VybmVscy9TcGxpdFYnO1xuaW1wb3J0IHtzcXJ0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3FydCc7XG5pbXBvcnQge3NxdWFyZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NxdWFyZSc7XG5pbXBvcnQge3NxdWFyZWREaWZmZXJlbmNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3F1YXJlZERpZmZlcmVuY2UnO1xuaW1wb3J0IHtzdGVwQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RlcCc7XG5pbXBvcnQge3N0cmlkZWRTbGljZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N0cmlkZWRTbGljZSc7XG5pbXBvcnQge3N0cmluZ05HcmFtc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N0cmluZ05HcmFtcyc7XG5pbXBvcnQge3N0cmluZ1NwbGl0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaW5nU3BsaXQnO1xuaW1wb3J0IHtzdHJpbmdUb0hhc2hCdWNrZXRGYXN0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaW5nVG9IYXNoQnVja2V0RmFzdCc7XG5pbXBvcnQge3N1YkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N1Yic7XG5pbXBvcnQge3N1bUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N1bSc7XG5pbXBvcnQge3RhbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Rhbic7XG5pbXBvcnQge3RhbmhDb25maWd9IGZyb20gJy4va2VybmVscy9UYW5oJztcbmltcG9ydCB7dGVuc29yU2NhdHRlclVwZGF0ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1RlbnNvclNjYXR0ZXJVcGRhdGUnO1xuaW1wb3J0IHt0aWxlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVGlsZSc7XG5pbXBvcnQge3RvcEtDb25maWd9IGZyb20gJy4va2VybmVscy9Ub3BLJztcbmltcG9ydCB7dHJhbnNmb3JtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVHJhbnNmb3JtJztcbmltcG9ydCB7dHJhbnNwb3NlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVHJhbnNwb3NlJztcbmltcG9ydCB7dW5pcXVlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVW5pcXVlJztcbmltcG9ydCB7dW5wYWNrQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVW5wYWNrJztcbmltcG9ydCB7emVyb3NMaWtlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvWmVyb3NMaWtlJztcblxuLy8gTGlzdCBhbGwga2VybmVsIGNvbmZpZ3MgaGVyZVxuY29uc3Qga2VybmVsQ29uZmlnczogS2VybmVsQ29uZmlnW10gPSBbXG4gIF9mdXNlZE1hdE11bENvbmZpZyxcbiAgYWJzQ29uZmlnLFxuICBhY29zQ29uZmlnLFxuICBhY29zaENvbmZpZyxcbiAgYWRkQ29uZmlnLFxuICBhZGROQ29uZmlnLFxuICBhbGxDb25maWcsXG4gIGFueUNvbmZpZyxcbiAgYXJnTWF4Q29uZmlnLFxuICBhcmdNaW5Db25maWcsXG4gIGFzaW5Db25maWcsXG4gIGFzaW5oQ29uZmlnLFxuICBhdGFuQ29uZmlnLFxuICBhdGFuMkNvbmZpZyxcbiAgYXRhbmhDb25maWcsXG4gIGF2Z1Bvb2xDb25maWcsXG4gIGF2Z1Bvb2xHcmFkQ29uZmlnLFxuICBhdmdQb29sM0RDb25maWcsXG4gIGF2Z1Bvb2wzREdyYWRDb25maWcsXG4gIGJhdGNoTWF0TXVsQ29uZmlnLFxuICBiYXRjaFRvU3BhY2VORENvbmZpZyxcbiAgYmluY291bnRDb25maWcsXG4gIGJpdHdpc2VBbmRDb25maWcsXG4gIGJyb2FkY2FzdEFyZ3NDb25maWcsXG4gIGNhc3RDb25maWcsXG4gIGNlaWxDb25maWcsXG4gIGNsaXBCeVZhbHVlQ29uZmlnLFxuICBjb25jYXRDb25maWcsXG4gIGNvbnYyRENvbmZpZyxcbiAgY29udjJEQmFja3Byb3BJbnB1dENvbmZpZyxcbiAgY29udjNEQ29uZmlnLFxuICBjb252M0RCYWNrcHJvcEZpbHRlclYyQ29uZmlnLFxuICBjb252M0RCYWNrcHJvcElucHV0VjJDb25maWcsXG4gIGNvc0NvbmZpZyxcbiAgY29zaENvbmZpZyxcbiAgY3JvcEFuZFJlc2l6ZUNvbmZpZyxcbiAgY3VtcHJvZENvbmZpZyxcbiAgY3Vtc3VtQ29uZmlnLFxuICBkZW5zZUJpbmNvdW50Q29uZmlnLFxuICBkZXB0aFRvU3BhY2VDb25maWcsXG4gIGRlcHRod2lzZUNvbnYyZE5hdGl2ZUNvbmZpZyxcbiAgZGlhZ0NvbmZpZyxcbiAgZGlsYXRpb24yRENvbmZpZyxcbiAgZGlsYXRpb24yREJhY2twcm9wRmlsdGVyQ29uZmlnLFxuICBkaWxhdGlvbjJEQmFja3Byb3BJbnB1dENvbmZpZyxcbiAgZWx1Q29uZmlnLFxuICBlbHVHcmFkQ29uZmlnLFxuICBlcXVhbENvbmZpZyxcbiAgZXJmQ29uZmlnLFxuICBleHBDb25maWcsXG4gIGV4cGFuZERpbXNDb25maWcsXG4gIGV4cG0xQ29uZmlnLFxuICBmaWxsQ29uZmlnLFxuICBmbGlwTGVmdFJpZ2h0Q29uZmlnLFxuICBmbG9vckNvbmZpZyxcbiAgZmxvb3JEaXZDb25maWcsXG4gIGZ1c2VkQmF0Y2hOb3JtQ29uZmlnLFxuICBmdXNlZENvbnYyRENvbmZpZyxcbiAgZnVzZWREZXB0aHdpc2VDb252MkRDb25maWcsXG4gIGdhdGhlck5kQ29uZmlnLFxuICBnYXRoZXJWMkNvbmZpZyxcbiAgZ3JlYXRlckNvbmZpZyxcbiAgZ3JlYXRlckVxdWFsQ29uZmlnLFxuICBpZGVudGl0eUNvbmZpZyxcbiAgaXNGaW5pdGVDb25maWcsXG4gIGlzSW5mQ29uZmlnLFxuICBpc05hTkNvbmZpZyxcbiAgbGVha3lSZWx1Q29uZmlnLFxuICBsZXNzQ29uZmlnLFxuICBsZXNzRXF1YWxDb25maWcsXG4gIGxpblNwYWNlQ29uZmlnLFxuICBsb2cxcENvbmZpZyxcbiAgbG9nQ29uZmlnLFxuICBsb2dpY2FsQW5kQ29uZmlnLFxuICBsb2dpY2FsTm90Q29uZmlnLFxuICBsb2dpY2FsT3JDb25maWcsXG4gIGxvZ2ljYWxYb3JDb25maWcsXG4gIGxybkNvbmZpZyxcbiAgbHJuR3JhZENvbmZpZyxcbiAgbWF4Q29uZmlnLFxuICBtYXhpbXVtQ29uZmlnLFxuICBtYXhQb29sQ29uZmlnLFxuICBtYXhQb29sM0RDb25maWcsXG4gIG1heFBvb2wzREdyYWRDb25maWcsXG4gIG1heFBvb2xHcmFkQ29uZmlnLFxuICBtYXhQb29sV2l0aEFyZ21heENvbmZpZyxcbiAgbWVhbkNvbmZpZyxcbiAgbWluQ29uZmlnLFxuICBtaW5pbXVtQ29uZmlnLFxuICBtaXJyb3JQYWRDb25maWcsXG4gIG11bHRpbm9taWFsQ29uZmlnLFxuICBtb2RDb25maWcsXG4gIG11bHRpcGx5Q29uZmlnLFxuICBuZWdDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjNDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjRDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjVDb25maWcsXG4gIG5vdEVxdWFsQ29uZmlnLFxuICBvbmVIb3RDb25maWcsXG4gIG9uZXNMaWtlQ29uZmlnLFxuICBwYWNrQ29uZmlnLFxuICBwYWRWMkNvbmZpZyxcbiAgcG93Q29uZmlnLFxuICBwcmVsdUNvbmZpZyxcbiAgcHJvZENvbmZpZyxcbiAgcmFuZ2VDb25maWcsXG4gIHJlYWxEaXZDb25maWcsXG4gIHJlY2lwcm9jYWxDb25maWcsXG4gIHJlbHVDb25maWcsXG4gIHJlbHU2Q29uZmlnLFxuICByZXNoYXBlQ29uZmlnLFxuICByZXNpemVCaWxpbmVhckNvbmZpZyxcbiAgcmVzaXplQmlsaW5lYXJHcmFkQ29uZmlnLFxuICByZXNpemVOZWFyZXN0TmVpZ2hib3JDb25maWcsXG4gIHJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRDb25maWcsXG4gIHJldmVyc2VDb25maWcsXG4gIHJvdGF0ZVdpdGhPZmZzZXRDb25maWcsXG4gIHJvdW5kQ29uZmlnLFxuICByc3FydENvbmZpZyxcbiAgc2NhdHRlck5kQ29uZmlnLFxuICBzZWFyY2hTb3J0ZWRDb25maWcsXG4gIHNlbGVjdENvbmZpZyxcbiAgc2VsdUNvbmZpZyxcbiAgc2lnbW9pZENvbmZpZyxcbiAgc2lnbkNvbmZpZyxcbiAgc2luQ29uZmlnLFxuICBzaW5oQ29uZmlnLFxuICBzbGljZUNvbmZpZyxcbiAgc29mdG1heENvbmZpZyxcbiAgc29mdHBsdXNDb25maWcsXG4gIHNwYWNlVG9CYXRjaE5EQ29uZmlnLFxuICBzcGFyc2VGaWxsRW1wdHlSb3dzQ29uZmlnLFxuICBzcGFyc2VSZXNoYXBlQ29uZmlnLFxuICBzcGFyc2VTZWdtZW50TWVhbkNvbmZpZyxcbiAgc3BhcnNlU2VnbWVudFN1bUNvbmZpZyxcbiAgc3BhcnNlVG9EZW5zZUNvbmZpZyxcbiAgc3BsaXRWQ29uZmlnLFxuICBzcXJ0Q29uZmlnLFxuICBzcXVhcmVDb25maWcsXG4gIHNxdWFyZWREaWZmZXJlbmNlQ29uZmlnLFxuICBzdGVwQ29uZmlnLFxuICBzdHJpZGVkU2xpY2VDb25maWcsXG4gIHN0cmluZ05HcmFtc0NvbmZpZyxcbiAgc3RyaW5nU3BsaXRDb25maWcsXG4gIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RDb25maWcsXG4gIHN1YkNvbmZpZyxcbiAgc3VtQ29uZmlnLFxuICB0YW5Db25maWcsXG4gIHRhbmhDb25maWcsXG4gIHRlbnNvclNjYXR0ZXJVcGRhdGVDb25maWcsXG4gIHRpbGVDb25maWcsXG4gIHRvcEtDb25maWcsXG4gIHRyYW5zZm9ybUNvbmZpZyxcbiAgdHJhbnNwb3NlQ29uZmlnLFxuICB1bmlxdWVDb25maWcsXG4gIHVucGFja0NvbmZpZyxcbiAgemVyb3NMaWtlQ29uZmlnXG5dO1xuXG5mb3IgKGNvbnN0IGtlcm5lbENvbmZpZyBvZiBrZXJuZWxDb25maWdzKSB7XG4gIHJlZ2lzdGVyS2VybmVsKGtlcm5lbENvbmZpZyk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '@tensorflow/tfjs-core';\nconst ENV = env();\n/**\n * True if SIMD is supported.\n */\n// From: https://github.com/GoogleChromeLabs/wasm-feature-detect\nENV.registerFlag('WASM_HAS_SIMD_SUPPORT', async () => {\n try {\n // This typed array passed in to WebAssembly.validate is WebAssembly binary\n // code. In this case it is a small program that contains SIMD\n // instructions.\n return WebAssembly.validate(new Uint8Array([\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3,\n 2, 1, 0, 10, 9, 1, 7, 0, 65, 0, 253, 15, 26, 11\n ]));\n }\n catch (e) {\n return false;\n }\n});\n/**\n * True if threads are supported.\n */\n// From: https://github.com/GoogleChromeLabs/wasm-feature-detect\nENV.registerFlag('WASM_HAS_MULTITHREAD_SUPPORT', async () => {\n // TODO(annxingyuan): Enable node support once this is resolved:\n // https://github.com/tensorflow/tfjs/issues/3830\n if (ENV.get('IS_NODE')) {\n return false;\n }\n try {\n // Test for transferability of SABs (needed for Firefox)\n // https://groups.google.com/forum/#!msg/mozilla.dev.platform/IHkBZlHETpA/dwsMNchWEQAJ\n new MessageChannel().port1.postMessage(new SharedArrayBuffer(1));\n // This typed array is a WebAssembly program containing threaded\n // instructions.\n return WebAssembly.validate(new Uint8Array([\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 2, 1, 0, 5,\n 4, 1, 3, 1, 1, 10, 11, 1, 9, 0, 65, 0, 254, 16, 2, 0, 26, 11\n ]));\n }\n catch (e) {\n return false;\n }\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3Nfd2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9mbGFnc193YXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUVsQjs7R0FFRztBQUNILGdFQUFnRTtBQUNoRSxHQUFHLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ25ELElBQUk7UUFDRiwyRUFBMkU7UUFDM0UsOERBQThEO1FBQzlELGdCQUFnQjtRQUNoQixPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUM7WUFDekMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUcsQ0FBQyxFQUFFLENBQUMsRUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELENBQUMsRUFBRSxDQUFDLEVBQUcsQ0FBQyxFQUFJLEVBQUUsRUFBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1NBQ3BELENBQUMsQ0FBQyxDQUFDO0tBQ0w7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsZ0VBQWdFO0FBQ2hFLEdBQUcsQ0FBQyxZQUFZLENBQUMsOEJBQThCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDMUQsZ0VBQWdFO0lBQ2hFLGlEQUFpRDtJQUNqRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUk7UUFDRix3REFBd0Q7UUFDeEQsc0ZBQXNGO1FBQ3RGLElBQUksY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsZ0VBQWdFO1FBQ2hFLGdCQUFnQjtRQUNoQixPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUM7WUFDekMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUcsQ0FBQyxFQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRyxFQUFFLEVBQUUsQ0FBQyxFQUFJLENBQUMsRUFBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxDQUFDLEVBQUUsQ0FBQyxFQUFHLENBQUMsRUFBSSxDQUFDLEVBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDbkUsQ0FBQyxDQUFDLENBQUM7S0FDTDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2Vudn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3QgRU5WID0gZW52KCk7XG5cbi8qKlxuICogVHJ1ZSBpZiBTSU1EIGlzIHN1cHBvcnRlZC5cbiAqL1xuLy8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvd2FzbS1mZWF0dXJlLWRldGVjdFxuRU5WLnJlZ2lzdGVyRmxhZygnV0FTTV9IQVNfU0lNRF9TVVBQT1JUJywgYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFRoaXMgdHlwZWQgYXJyYXkgcGFzc2VkIGluIHRvIFdlYkFzc2VtYmx5LnZhbGlkYXRlIGlzIFdlYkFzc2VtYmx5IGJpbmFyeVxuICAgIC8vIGNvZGUuIEluIHRoaXMgY2FzZSBpdCBpcyBhIHNtYWxsIHByb2dyYW0gdGhhdCBjb250YWlucyBTSU1EXG4gICAgLy8gaW5zdHJ1Y3Rpb25zLlxuICAgIHJldHVybiBXZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbXG4gICAgICAwLCA5NywgMTE1LCAxMDksIDEsIDAsIDAsIDAsIDEsICA0LCAxLCAgIDk2LCAwLCAgMCwgMyxcbiAgICAgIDIsIDEsICAwLCAgIDEwLCAgOSwgMSwgNywgMCwgNjUsIDAsIDI1MywgMTUsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG5cbi8qKlxuICogVHJ1ZSBpZiB0aHJlYWRzIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbi8vIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3dhc20tZmVhdHVyZS1kZXRlY3RcbkVOVi5yZWdpc3RlckZsYWcoJ1dBU01fSEFTX01VTFRJVEhSRUFEX1NVUFBPUlQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFRPRE8oYW5ueGluZ3l1YW4pOiBFbmFibGUgbm9kZSBzdXBwb3J0IG9uY2UgdGhpcyBpcyByZXNvbHZlZDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9pc3N1ZXMvMzgzMFxuICBpZiAoRU5WLmdldCgnSVNfTk9ERScpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUZXN0IGZvciB0cmFuc2ZlcmFiaWxpdHkgb2YgU0FCcyAobmVlZGVkIGZvciBGaXJlZm94KVxuICAgIC8vIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyFtc2cvbW96aWxsYS5kZXYucGxhdGZvcm0vSUhrQlpsSEVUcEEvZHdzTU5jaFdFUUFKXG4gICAgbmV3IE1lc3NhZ2VDaGFubmVsKCkucG9ydDEucG9zdE1lc3NhZ2UobmV3IFNoYXJlZEFycmF5QnVmZmVyKDEpKTtcbiAgICAvLyBUaGlzIHR5cGVkIGFycmF5IGlzIGEgV2ViQXNzZW1ibHkgcHJvZ3JhbSBjb250YWluaW5nIHRocmVhZGVkXG4gICAgLy8gaW5zdHJ1Y3Rpb25zLlxuICAgIHJldHVybiBXZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbXG4gICAgICAwLCA5NywgMTE1LCAxMDksIDEsIDAsICAwLCAgMCwgMSwgNCwgMSwgIDk2LCAwLCAgIDAsICAzLCAyLCAxLCAgMCwgNSxcbiAgICAgIDQsIDEsICAzLCAgIDEsICAgMSwgMTAsIDExLCAxLCA5LCAwLCA2NSwgMCwgIDI1NCwgMTYsIDIsIDAsIDI2LCAxMVxuICAgIF0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG4iXX0=","\nvar WasmBackendModuleThreadedSimd = (() => {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModuleThreadedSimd) {\n WasmBackendModuleThreadedSimd = WasmBackendModuleThreadedSimd || {};\n\nfunction GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof WasmBackendModuleThreadedSimd!=\"undefined\"?WasmBackendModuleThreadedSimd:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var beforeListeners;if(typeof process!==\"undefined\"&&process.listeners){beforeListeners={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")}}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";var ENVIRONMENT_IS_PTHREAD=Module[\"ENVIRONMENT_IS_PTHREAD\"]||false;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err(\"exiting due to exception: \"+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var nodePath=require(\"path\");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:\"utf8\")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process[\"exitCode\"]=status;throw toThrow}logExceptionOnExit(toThrow);process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"};let nodeWorkerThreads;try{nodeWorkerThreads=require(\"worker_threads\")}catch(e){console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(typeof _scriptDir !== \"undefined\" && _scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}if(!ENVIRONMENT_IS_NODE){read_=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance==\"undefined\"){global.performance=require(\"perf_hooks\").performance}}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.warn.bind(console);if(ENVIRONMENT_IS_NODE){defaultPrint=str=>fs.writeSync(1,str+\"\\n\");defaultPrintErr=str=>fs.writeSync(2,str+\"\\n\")}var out=Module[\"print\"]||defaultPrint;var err=Module[\"printErr\"]||defaultPrintErr;Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var POINTER_SIZE=4;var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime=Module[\"noExitRuntime\"]||true;if(typeof WebAssembly!=\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){ptr>>>=0;return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module[\"buffer\"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module[\"wasmMemory\"];buffer=Module[\"buffer\"]}else{if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_MEMORY/65536,\"maximum\":4294967296/65536,\"shared\":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err(\"requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag\");if(ENVIRONMENT_IS_NODE){err(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\")}throw Error(\"bad memory\")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith(\"file://\")}var wasmBinaryFile;wasmBinaryFile=\"tfjs-backend-wasm-threaded-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;registerTLSInit(Module[\"asm\"][\"_emscripten_tls_init\"]);wasmTable=Module[\"asm\"][\"__indirect_function_table\"];addOnInit(Module[\"asm\"][\"__wasm_call_ctors\"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency(\"wasm-instantiate\")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency(\"wasm-instantiate\")}function receiveInstantiationResult(result){receiveInstance(result[\"instance\"],result[\"module\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch==\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}function killThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];worker.terminate();__emscripten_thread_free_data(pthread_ptr);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0}function cancelThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];worker.postMessage({\"cmd\":\"cancel\"})}function cleanupThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];assert(worker);PThread.returnWorkerToPool(worker)}function spawnThread(threadParams){var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={\"cmd\":\"run\",\"start_routine\":threadParams.startRoutine,\"arg\":threadParams.arg,\"pthread_ptr\":threadParams.pthread_ptr};worker.runPthread=()=>{if(ENVIRONMENT_IS_NODE){worker.ref()}worker.postMessage(msg,threadParams.transferList);delete worker.runPthread};if(worker.loaded){worker.runPthread()}return 0}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();if(Module[\"onExit\"])Module[\"onExit\"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw\"unwind\"}else{}}_proc_exit(status)}var _exit=exitJS;function handleException(e){if(e instanceof ExitStatus||e==\"unwind\"){return EXITSTATUS}quit_(1,e)}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){if(ENVIRONMENT_IS_PTHREAD){PThread.initWorker()}else{PThread.initMainThread()}},initMainThread:function(){var pthreadPoolSize=8;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}},initWorker:function(){noExitRuntime=false},setExitStatus:function(status){EXITSTATUS=status},terminateAllThreads:function(){for(var worker of Object.values(PThread.pthreads)){PThread.returnWorkerToPool(worker)}for(var worker of PThread.unusedWorkers){worker.terminate()}PThread.unusedWorkers=[]},returnWorkerToPool:function(worker){var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;if(ENVIRONMENT_IS_NODE){worker.unref()}__emscripten_thread_free_data(pthread_ptr)},receiveObjectTransfer:function(data){},threadInitTLS:function(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=e=>{var d=e[\"data\"];var cmd=d[\"cmd\"];if(worker.pthread_ptr)PThread.currentProxiedOperationCallerThread=worker.pthread_ptr;if(d[\"targetThread\"]&&d[\"targetThread\"]!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d[\"transferList\"])}else{err('Internal error! Worker sent a message \"'+cmd+'\" to target pthread '+d[\"targetThread\"]+\", but that thread no longer exists!\")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd===\"processProxyingQueue\"){executeNotifiedProxyingQueue(d[\"queue\"])}else if(cmd===\"spawnThread\"){spawnThread(d)}else if(cmd===\"cleanupThread\"){cleanupThread(d[\"thread\"])}else if(cmd===\"killThread\"){killThread(d[\"thread\"])}else if(cmd===\"cancelThread\"){cancelThread(d[\"thread\"])}else if(cmd===\"loaded\"){worker.loaded=true;if(ENVIRONMENT_IS_NODE){worker.unref()}if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread()}}else if(cmd===\"print\"){out(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"printErr\"){err(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(cmd===\"alert\"){alert(\"Thread \"+d[\"threadId\"]+\": \"+d[\"text\"])}else if(d.target===\"setimmediate\"){worker.postMessage(d)}else if(cmd===\"callHandler\"){Module[d[\"handler\"]](...d[\"args\"])}else if(cmd){err(\"worker sent an unknown command \"+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=e=>{var message=\"worker sent an error!\";err(message+\" \"+e.filename+\":\"+e.lineno+\": \"+e.message);throw e};if(ENVIRONMENT_IS_NODE){worker.on(\"message\",function(data){worker.onmessage({data:data})});worker.on(\"error\",function(e){worker.onerror(e)});worker.on(\"detachedExit\",function(){})}var handlers=[];var knownHandlers=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var handler of knownHandlers){if(Module.hasOwnProperty(handler)){handlers.push(handler)}}worker.postMessage({\"cmd\":\"load\",\"handlers\":handlers,\"urlOrBlob\":Module[\"mainScriptUrlOrBlob\"]||_scriptDir,\"wasmMemory\":wasmMemory,\"wasmModule\":wasmModule})},allocateUnusedWorker:function(){var worker;var pthreadMainJs=locateFile(\"tfjs-backend-wasm-threaded-simd.worker.js\");worker=new Worker(pthreadMainJs);PThread.unusedWorkers.push(worker)},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};Module[\"PThread\"]=PThread;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function establishStackSpace(){var pthread_ptr=_pthread_self();var stackTop=GROWABLE_HEAP_I32()[pthread_ptr+52>>>2];var stackSize=GROWABLE_HEAP_I32()[pthread_ptr+56>>>2];var stackMax=stackTop-stackSize;_emscripten_stack_set_limits(stackTop,stackMax);stackRestore(stackTop)}Module[\"establishStackSpace\"]=establishStackSpace;function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,0,returnCode);try{_exit(returnCode)}catch(e){handleException(e)}}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function invokeEntryPoint(ptr,arg){var result=getWasmTableEntry(ptr)(arg);if(keepRuntimeAlive()){PThread.setExitStatus(result)}else{__emscripten_thread_exit(result)}}Module[\"invokeEntryPoint\"]=invokeEntryPoint;function registerTLSInit(tlsInitFunc){PThread.tlsInitFunctions.push(tlsInitFunc)}function ___emscripten_init_main_thread_js(tb){__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB);PThread.threadInitTLS()}function ___emscripten_thread_cleanup(thread){if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({\"cmd\":\"cleanupThread\",\"thread\":thread})}function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}function ___pthread_create_js(pthread_ptr,attr,startRoutine,arg){if(typeof SharedArrayBuffer==\"undefined\"){err(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\");return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine:startRoutine,pthread_ptr:pthread_ptr,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd=\"spawnThread\";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function __emscripten_default_pthread_stack_size(){return 65536}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function executeNotifiedProxyingQueue(queue){Atomics.store(GROWABLE_HEAP_I32(),queue>>2,1);if(_pthread_self()){__emscripten_proxy_execute_task_queue(queue)}Atomics.compareExchange(GROWABLE_HEAP_I32(),queue>>2,1,0)}Module[\"executeNotifiedProxyingQueue\"]=executeNotifiedProxyingQueue;function __emscripten_notify_task_queue(targetThreadId,currThreadId,mainThreadId,queue){if(targetThreadId==currThreadId){setTimeout(()=>executeNotifiedProxyingQueue(queue))}else if(ENVIRONMENT_IS_PTHREAD){postMessage({\"targetThread\":targetThreadId,\"cmd\":\"processProxyingQueue\",\"queue\":queue})}else{var worker=PThread.pthreads[targetThreadId];if(!worker){return}worker.postMessage({\"cmd\":\"processProxyingQueue\",\"queue\":queue})}return 1}function __emscripten_set_offscreencanvas_size(target,width,height){return-1}function _abort(){abort(\"\")}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text=\"warning: \"+text;err(text)}}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_NODE)return;if(ENVIRONMENT_IS_WORKER)return;warnOnce(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function _emscripten_date_now(){return Date.now()}function getHeapMax(){return 4294901760}function _emscripten_get_heap_max(){return getHeapMax()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process[\"hrtime\"]();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=()=>performance.timeOrigin+performance.now();function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest>>>0,src>>>0,src+num>>>0)}function _emscripten_num_logical_cores(){if(ENVIRONMENT_IS_NODE)return require(\"os\").cpus().length;return navigator[\"hardwareConcurrency\"]}function withStackSave(f){var stack=stackSave();var ret=f();stackRestore(stack);return ret}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var outerArgs=arguments;return withStackSave(()=>{var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>>0]=arg}return _emscripten_run_in_main_runtime_thread_js(index,serializedNumCallArgs,args,sync)})}var _emscripten_receive_on_main_thread_js_callArgs=[];function _emscripten_receive_on_main_thread_js(index,numCallArgs,args){_emscripten_receive_on_main_thread_js_callArgs.length=numCallArgs;var b=args>>3;for(var i=0;i>>0]}var isEmAsmConst=index<0;var func=!isEmAsmConst?proxiedFunctionTable[index]:ASM_CONSTS[-index-1];return func.apply(null,_emscripten_receive_on_main_thread_js_callArgs)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_unwind_to_js_event_loop(){throw\"unwind\"}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd);return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,offset_low,offset_high,whence,newOffset);return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>>2];var len=GROWABLE_HEAP_U32()[iov+4>>>2];iov+=8;for(var j=0;j>>0])}num+=len}GROWABLE_HEAP_U32()[pnum>>>2]=num;return 0}function getCFunc(ident){var func=Module[\"_\"+ident];return func}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer>>>0)}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;itype===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}PThread.init();var proxiedFunctionTable=[null,_proc_exit,exitOnMainThread,pthreadCreateProxied,_fd_close,_fd_seek,_fd_write];var asmLibraryArg={\"__emscripten_init_main_thread_js\":___emscripten_init_main_thread_js,\"__emscripten_thread_cleanup\":___emscripten_thread_cleanup,\"__pthread_create_js\":___pthread_create_js,\"_emscripten_default_pthread_stack_size\":__emscripten_default_pthread_stack_size,\"_emscripten_get_now_is_monotonic\":__emscripten_get_now_is_monotonic,\"_emscripten_notify_task_queue\":__emscripten_notify_task_queue,\"_emscripten_set_offscreencanvas_size\":__emscripten_set_offscreencanvas_size,\"abort\":_abort,\"emscripten_check_blocking_allowed\":_emscripten_check_blocking_allowed,\"emscripten_date_now\":_emscripten_date_now,\"emscripten_get_heap_max\":_emscripten_get_heap_max,\"emscripten_get_now\":_emscripten_get_now,\"emscripten_memcpy_big\":_emscripten_memcpy_big,\"emscripten_num_logical_cores\":_emscripten_num_logical_cores,\"emscripten_receive_on_main_thread_js\":_emscripten_receive_on_main_thread_js,\"emscripten_resize_heap\":_emscripten_resize_heap,\"emscripten_unwind_to_js_event_loop\":_emscripten_unwind_to_js_event_loop,\"exit\":_exit,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write,\"memory\":wasmMemory||Module[\"wasmMemory\"]};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"__wasm_call_ctors\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _init_with_threads_count=Module[\"_init_with_threads_count\"]=function(){return(_init_with_threads_count=Module[\"_init_with_threads_count\"]=Module[\"asm\"][\"init_with_threads_count\"]).apply(null,arguments)};var _get_threads_count=Module[\"_get_threads_count\"]=function(){return(_get_threads_count=Module[\"_get_threads_count\"]=Module[\"asm\"][\"get_threads_count\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Acos=Module[\"_Acos\"]=function(){return(_Acos=Module[\"_Acos\"]=Module[\"asm\"][\"Acos\"]).apply(null,arguments)};var _Acosh=Module[\"_Acosh\"]=function(){return(_Acosh=Module[\"_Acosh\"]=Module[\"asm\"][\"Acosh\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _All=Module[\"_All\"]=function(){return(_All=Module[\"_All\"]=Module[\"asm\"][\"All\"]).apply(null,arguments)};var _Any=Module[\"_Any\"]=function(){return(_Any=Module[\"_Any\"]=Module[\"asm\"][\"Any\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _ArgMin=Module[\"_ArgMin\"]=function(){return(_ArgMin=Module[\"_ArgMin\"]=Module[\"asm\"][\"ArgMin\"]).apply(null,arguments)};var _Asin=Module[\"_Asin\"]=function(){return(_Asin=Module[\"_Asin\"]=Module[\"asm\"][\"Asin\"]).apply(null,arguments)};var _Asinh=Module[\"_Asinh\"]=function(){return(_Asinh=Module[\"_Asinh\"]=Module[\"asm\"][\"Asinh\"]).apply(null,arguments)};var _Atan=Module[\"_Atan\"]=function(){return(_Atan=Module[\"_Atan\"]=Module[\"asm\"][\"Atan\"]).apply(null,arguments)};var _Atan2=Module[\"_Atan2\"]=function(){return(_Atan2=Module[\"_Atan2\"]=Module[\"asm\"][\"Atan2\"]).apply(null,arguments)};var _Atanh=Module[\"_Atanh\"]=function(){return(_Atanh=Module[\"_Atanh\"]=Module[\"asm\"][\"Atanh\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _AvgPool3D=Module[\"_AvgPool3D\"]=function(){return(_AvgPool3D=Module[\"_AvgPool3D\"]=Module[\"asm\"][\"AvgPool3D\"]).apply(null,arguments)};var _AvgPool3DGrad=Module[\"_AvgPool3DGrad\"]=function(){return(_AvgPool3DGrad=Module[\"_AvgPool3DGrad\"]=Module[\"asm\"][\"AvgPool3DGrad\"]).apply(null,arguments)};var _AvgPoolGrad=Module[\"_AvgPoolGrad\"]=function(){return(_AvgPoolGrad=Module[\"_AvgPoolGrad\"]=Module[\"asm\"][\"AvgPoolGrad\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _Bincount=Module[\"_Bincount\"]=function(){return(_Bincount=Module[\"_Bincount\"]=Module[\"asm\"][\"Bincount\"]).apply(null,arguments)};var _BitwiseAnd=Module[\"_BitwiseAnd\"]=function(){return(_BitwiseAnd=Module[\"_BitwiseAnd\"]=Module[\"asm\"][\"BitwiseAnd\"]).apply(null,arguments)};var _Ceil=Module[\"_Ceil\"]=function(){return(_Ceil=Module[\"_Ceil\"]=Module[\"asm\"][\"Ceil\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Conv3D=Module[\"_Conv3D\"]=function(){return(_Conv3D=Module[\"_Conv3D\"]=Module[\"asm\"][\"Conv3D\"]).apply(null,arguments)};var _Conv3DBackpropFilterV2=Module[\"_Conv3DBackpropFilterV2\"]=function(){return(_Conv3DBackpropFilterV2=Module[\"_Conv3DBackpropFilterV2\"]=Module[\"asm\"][\"Conv3DBackpropFilterV2\"]).apply(null,arguments)};var _Conv3DBackpropInputV2=Module[\"_Conv3DBackpropInputV2\"]=function(){return(_Conv3DBackpropInputV2=Module[\"_Conv3DBackpropInputV2\"]=Module[\"asm\"][\"Conv3DBackpropInputV2\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _Cosh=Module[\"_Cosh\"]=function(){return(_Cosh=Module[\"_Cosh\"]=Module[\"asm\"][\"Cosh\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumprod=Module[\"_Cumprod\"]=function(){return(_Cumprod=Module[\"_Cumprod\"]=Module[\"asm\"][\"Cumprod\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DenseBincount=Module[\"_DenseBincount\"]=function(){return(_DenseBincount=Module[\"_DenseBincount\"]=Module[\"asm\"][\"DenseBincount\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Diag=Module[\"_Diag\"]=function(){return(_Diag=Module[\"_Diag\"]=Module[\"asm\"][\"Diag\"]).apply(null,arguments)};var _Dilation2D=Module[\"_Dilation2D\"]=function(){return(_Dilation2D=Module[\"_Dilation2D\"]=Module[\"asm\"][\"Dilation2D\"]).apply(null,arguments)};var _Dilation2DBackpropFilter=Module[\"_Dilation2DBackpropFilter\"]=function(){return(_Dilation2DBackpropFilter=Module[\"_Dilation2DBackpropFilter\"]=Module[\"asm\"][\"Dilation2DBackpropFilter\"]).apply(null,arguments)};var _Dilation2DBackpropInput=Module[\"_Dilation2DBackpropInput\"]=function(){return(_Dilation2DBackpropInput=Module[\"_Dilation2DBackpropInput\"]=Module[\"asm\"][\"Dilation2DBackpropInput\"]).apply(null,arguments)};var _Elu=Module[\"_Elu\"]=function(){return(_Elu=Module[\"_Elu\"]=Module[\"asm\"][\"Elu\"]).apply(null,arguments)};var _EluGrad=Module[\"_EluGrad\"]=function(){return(_EluGrad=Module[\"_EluGrad\"]=Module[\"asm\"][\"EluGrad\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Erf=Module[\"_Erf\"]=function(){return(_Erf=Module[\"_Erf\"]=Module[\"asm\"][\"Erf\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _Expm1=Module[\"_Expm1\"]=function(){return(_Expm1=Module[\"_Expm1\"]=Module[\"asm\"][\"Expm1\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _IsFinite=Module[\"_IsFinite\"]=function(){return(_IsFinite=Module[\"_IsFinite\"]=Module[\"asm\"][\"IsFinite\"]).apply(null,arguments)};var _IsInf=Module[\"_IsInf\"]=function(){return(_IsInf=Module[\"_IsInf\"]=Module[\"asm\"][\"IsInf\"]).apply(null,arguments)};var _IsNan=Module[\"_IsNan\"]=function(){return(_IsNan=Module[\"_IsNan\"]=Module[\"asm\"][\"IsNan\"]).apply(null,arguments)};var _LRN=Module[\"_LRN\"]=function(){return(_LRN=Module[\"_LRN\"]=Module[\"asm\"][\"LRN\"]).apply(null,arguments)};var _LRNGrad=Module[\"_LRNGrad\"]=function(){return(_LRNGrad=Module[\"_LRNGrad\"]=Module[\"asm\"][\"LRNGrad\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _LinSpace=Module[\"_LinSpace\"]=function(){return(_LinSpace=Module[\"_LinSpace\"]=Module[\"asm\"][\"LinSpace\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _Log1p=Module[\"_Log1p\"]=function(){return(_Log1p=Module[\"_Log1p\"]=Module[\"asm\"][\"Log1p\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _LogicalNot=Module[\"_LogicalNot\"]=function(){return(_LogicalNot=Module[\"_LogicalNot\"]=Module[\"asm\"][\"LogicalNot\"]).apply(null,arguments)};var _LogicalOr=Module[\"_LogicalOr\"]=function(){return(_LogicalOr=Module[\"_LogicalOr\"]=Module[\"asm\"][\"LogicalOr\"]).apply(null,arguments)};var _LogicalXor=Module[\"_LogicalXor\"]=function(){return(_LogicalXor=Module[\"_LogicalXor\"]=Module[\"asm\"][\"LogicalXor\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _MaxPool3D=Module[\"_MaxPool3D\"]=function(){return(_MaxPool3D=Module[\"_MaxPool3D\"]=Module[\"asm\"][\"MaxPool3D\"]).apply(null,arguments)};var _MaxPool3DGrad=Module[\"_MaxPool3DGrad\"]=function(){return(_MaxPool3DGrad=Module[\"_MaxPool3DGrad\"]=Module[\"asm\"][\"MaxPool3DGrad\"]).apply(null,arguments)};var _MaxPoolGrad=Module[\"_MaxPoolGrad\"]=function(){return(_MaxPoolGrad=Module[\"_MaxPoolGrad\"]=Module[\"asm\"][\"MaxPoolGrad\"]).apply(null,arguments)};var _MaxPoolWithArgmax=Module[\"_MaxPoolWithArgmax\"]=function(){return(_MaxPoolWithArgmax=Module[\"_MaxPoolWithArgmax\"]=Module[\"asm\"][\"MaxPoolWithArgmax\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _MirrorPad=Module[\"_MirrorPad\"]=function(){return(_MirrorPad=Module[\"_MirrorPad\"]=Module[\"asm\"][\"MirrorPad\"]).apply(null,arguments)};var _Mod=Module[\"_Mod\"]=function(){return(_Mod=Module[\"_Mod\"]=Module[\"asm\"][\"Mod\"]).apply(null,arguments)};var _Multinomial=Module[\"_Multinomial\"]=function(){return(_Multinomial=Module[\"_Multinomial\"]=Module[\"asm\"][\"Multinomial\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Reciprocal=Module[\"_Reciprocal\"]=function(){return(_Reciprocal=Module[\"_Reciprocal\"]=Module[\"asm\"][\"Reciprocal\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _ResizeBilinearGrad=Module[\"_ResizeBilinearGrad\"]=function(){return(_ResizeBilinearGrad=Module[\"_ResizeBilinearGrad\"]=Module[\"asm\"][\"ResizeBilinearGrad\"]).apply(null,arguments)};var _ResizeNearestNeighbor=Module[\"_ResizeNearestNeighbor\"]=function(){return(_ResizeNearestNeighbor=Module[\"_ResizeNearestNeighbor\"]=Module[\"asm\"][\"ResizeNearestNeighbor\"]).apply(null,arguments)};var _ResizeNearestNeighborGrad=Module[\"_ResizeNearestNeighborGrad\"]=function(){return(_ResizeNearestNeighborGrad=Module[\"_ResizeNearestNeighborGrad\"]=Module[\"asm\"][\"ResizeNearestNeighborGrad\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Round=Module[\"_Round\"]=function(){return(_Round=Module[\"_Round\"]=Module[\"asm\"][\"Round\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SearchSorted=Module[\"_SearchSorted\"]=function(){return(_SearchSorted=Module[\"_SearchSorted\"]=Module[\"asm\"][\"SearchSorted\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Selu=Module[\"_Selu\"]=function(){return(_Selu=Module[\"_Selu\"]=Module[\"asm\"][\"Selu\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sign=Module[\"_Sign\"]=function(){return(_Sign=Module[\"_Sign\"]=Module[\"asm\"][\"Sign\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Sinh=Module[\"_Sinh\"]=function(){return(_Sinh=Module[\"_Sinh\"]=Module[\"asm\"][\"Sinh\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Softplus=Module[\"_Softplus\"]=function(){return(_Softplus=Module[\"_Softplus\"]=Module[\"asm\"][\"Softplus\"]).apply(null,arguments)};var _SparseFillEmptyRows=Module[\"_SparseFillEmptyRows\"]=function(){return(_SparseFillEmptyRows=Module[\"_SparseFillEmptyRows\"]=Module[\"asm\"][\"SparseFillEmptyRows\"]).apply(null,arguments)};var _SparseReshape=Module[\"_SparseReshape\"]=function(){return(_SparseReshape=Module[\"_SparseReshape\"]=Module[\"asm\"][\"SparseReshape\"]).apply(null,arguments)};var _SparseSegmentReduction=Module[\"_SparseSegmentReduction\"]=function(){return(_SparseSegmentReduction=Module[\"_SparseSegmentReduction\"]=Module[\"asm\"][\"SparseSegmentReduction\"]).apply(null,arguments)};var _SparseToDense=Module[\"_SparseToDense\"]=function(){return(_SparseToDense=Module[\"_SparseToDense\"]=Module[\"asm\"][\"SparseToDense\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _Step=Module[\"_Step\"]=function(){return(_Step=Module[\"_Step\"]=Module[\"asm\"][\"Step\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tan=Module[\"_Tan\"]=function(){return(_Tan=Module[\"_Tan\"]=Module[\"asm\"][\"Tan\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _TensorScatterUpdate=Module[\"_TensorScatterUpdate\"]=function(){return(_TensorScatterUpdate=Module[\"_TensorScatterUpdate\"]=Module[\"asm\"][\"TensorScatterUpdate\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transform=Module[\"_Transform\"]=function(){return(_Transform=Module[\"_Transform\"]=Module[\"asm\"][\"Transform\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var __emscripten_tls_init=Module[\"__emscripten_tls_init\"]=function(){return(__emscripten_tls_init=Module[\"__emscripten_tls_init\"]=Module[\"asm\"][\"_emscripten_tls_init\"]).apply(null,arguments)};var _pthread_self=Module[\"_pthread_self\"]=function(){return(_pthread_self=Module[\"_pthread_self\"]=Module[\"asm\"][\"pthread_self\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"__errno_location\"]).apply(null,arguments)};var __emscripten_thread_init=Module[\"__emscripten_thread_init\"]=function(){return(__emscripten_thread_init=Module[\"__emscripten_thread_init\"]=Module[\"asm\"][\"_emscripten_thread_init\"]).apply(null,arguments)};var __emscripten_thread_crashed=Module[\"__emscripten_thread_crashed\"]=function(){return(__emscripten_thread_crashed=Module[\"__emscripten_thread_crashed\"]=Module[\"asm\"][\"_emscripten_thread_crashed\"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=function(){return(_emscripten_main_thread_process_queued_calls=Module[\"_emscripten_main_thread_process_queued_calls\"]=Module[\"asm\"][\"emscripten_main_thread_process_queued_calls\"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=function(){return(_emscripten_main_browser_thread_id=Module[\"_emscripten_main_browser_thread_id\"]=Module[\"asm\"][\"emscripten_main_browser_thread_id\"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module[\"_emscripten_run_in_main_runtime_thread_js\"]=Module[\"asm\"][\"emscripten_run_in_main_runtime_thread_js\"]).apply(null,arguments)};var _emscripten_dispatch_to_thread_=Module[\"_emscripten_dispatch_to_thread_\"]=function(){return(_emscripten_dispatch_to_thread_=Module[\"_emscripten_dispatch_to_thread_\"]=Module[\"asm\"][\"emscripten_dispatch_to_thread_\"]).apply(null,arguments)};var __emscripten_proxy_execute_task_queue=Module[\"__emscripten_proxy_execute_task_queue\"]=function(){return(__emscripten_proxy_execute_task_queue=Module[\"__emscripten_proxy_execute_task_queue\"]=Module[\"asm\"][\"_emscripten_proxy_execute_task_queue\"]).apply(null,arguments)};var __emscripten_thread_free_data=Module[\"__emscripten_thread_free_data\"]=function(){return(__emscripten_thread_free_data=Module[\"__emscripten_thread_free_data\"]=Module[\"asm\"][\"_emscripten_thread_free_data\"]).apply(null,arguments)};var __emscripten_thread_exit=Module[\"__emscripten_thread_exit\"]=function(){return(__emscripten_thread_exit=Module[\"__emscripten_thread_exit\"]=Module[\"asm\"][\"_emscripten_thread_exit\"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module[\"_emscripten_stack_set_limits\"]=function(){return(_emscripten_stack_set_limits=Module[\"_emscripten_stack_set_limits\"]=Module[\"asm\"][\"emscripten_stack_set_limits\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var dynCall_iijjiiii=Module[\"dynCall_iijjiiii\"]=function(){return(dynCall_iijjiiii=Module[\"dynCall_iijjiiii\"]=Module[\"asm\"][\"dynCall_iijjiiii\"]).apply(null,arguments)};var dynCall_jiji=Module[\"dynCall_jiji\"]=function(){return(dynCall_jiji=Module[\"dynCall_jiji\"]=Module[\"asm\"][\"dynCall_jiji\"]).apply(null,arguments)};Module[\"keepRuntimeAlive\"]=keepRuntimeAlive;Module[\"wasmMemory\"]=wasmMemory;Module[\"cwrap\"]=cwrap;Module[\"ExitStatus\"]=ExitStatus;Module[\"PThread\"]=PThread;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();startWorker(Module);return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();var listenersAdded;if(beforeListeners){listenersAdded={uncaughtException:process.listeners(\"uncaughtException\").filter(function(listener){return!beforeListeners.uncaughtException.indexOf(listener)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(listener){return!beforeListeners.unhandledRejection.indexOf(listener)>-1})}}var actualModule;if(typeof WasmBackendModule!==\"undefined\"){actualModule=WasmBackendModule}else if(typeof WasmBackendModuleThreadedSimd!==\"undefined\"){actualModule=WasmBackendModuleThreadedSimd}else{throw new Error(\"Could not find wasm module in post.js\")}if(listenersAdded){var tmpDispose=actualModule[\"_dispose\"];actualModule[\"_dispose\"]=function(){tmpDispose();listenersAdded.uncaughtException.forEach(function(listener){process.removeListener(\"uncaughtException\",listener)});listenersAdded.unhandledRejection.forEach(function(listener){process.removeListener(\"unhandledRejection\",listener)})}}\n\n\n return WasmBackendModuleThreadedSimd.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModuleThreadedSimd;\nelse if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModuleThreadedSimd; });\nelse if (typeof exports === 'object')\n exports[\"WasmBackendModuleThreadedSimd\"] = WasmBackendModuleThreadedSimd;\n","module.exports.wasmWorkerContents = `\"use strict\";var Module={};var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require(\"worker_threads\");var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",data=>onmessage({data:data}));var fs=require(\"fs\");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,\"utf8\")+\"//# sourceURL=\"+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+\"\\n\");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:Module[\"_pthread_self\"]()})}var err=threadPrintErr;self.alert=threadAlert;Module[\"instantiateWasm\"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);receiveInstance(instance);Module[\"wasmModule\"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({\"cmd\":\"loaded\"})};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:\"callHandler\",handler:handler,args:[...arguments]})}}Module[\"wasmMemory\"]=e.data.wasmMemory;Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;Module[\"ENVIRONMENT_IS_PTHREAD\"]=true;if(typeof e.data.urlOrBlob==\"string\"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd===\"run\"){Module[\"__emscripten_thread_init\"](e.data.pthread_ptr,0,0,1);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module[\"executeNotifiedProxyingQueue\"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module[\"invokeEntryPoint\"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!=\"unwind\"){if(ex instanceof Module[\"ExitStatus\"]){if(Module[\"keepRuntimeAlive\"]()){}else{Module[\"__emscripten_thread_exit\"](ex.status)}}else{throw ex}}}}else if(e.data.cmd===\"cancel\"){if(Module[\"_pthread_self\"]()){Module[\"__emscripten_thread_exit\"](-1)}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processProxyingQueue\"){if(initializedJS){Module[\"executeNotifiedProxyingQueue\"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){if(Module[\"__emscripten_thread_crashed\"]){Module[\"__emscripten_thread_crashed\"]()}throw ex}};`;","\nvar WasmBackendModule = (() => {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n return (\nfunction(WasmBackendModule) {\n WasmBackendModule = WasmBackendModule || {};\n\nvar Module=typeof WasmBackendModule!=\"undefined\"?WasmBackendModule:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var beforeListeners;if(typeof process!==\"undefined\"&&process.listeners){beforeListeners={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")}}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err(\"exiting due to exception: \"+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var nodePath=require(\"path\");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:\"utf8\")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process[\"exitCode\"]=status;throw toThrow}logExceptionOnExit(toThrow);process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var POINTER_SIZE=4;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime=Module[\"noExitRuntime\"]||true;if(typeof WebAssembly!=\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what=\"Aborted(\"+what+\")\";err(what);ABORT=true;EXITSTATUS=1;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith(\"file://\")}var wasmBinaryFile;wasmBinaryFile=\"tfjs-backend-wasm.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"env\":asmLibraryArg,\"wasi_snapshot_preview1\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=Module[\"asm\"][\"memory\"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module[\"asm\"][\"__indirect_function_table\"];addOnInit(Module[\"asm\"][\"__wasm_call_ctors\"]);removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){receiveInstance(result[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch==\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function _abort(){abort(\"\")}function getHeapMax(){return 4294901760}function _emscripten_get_heap_max(){return getHeapMax()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>>2];var len=HEAPU32[iov+4>>>2];iov+=8;for(var j=0;j>>0])}num+=len}HEAPU32[pnum>>>2]=num;return 0}function getCFunc(ident){var func=Module[\"_\"+ident];return func}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer>>>0)}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;itype===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var asmLibraryArg={\"abort\":_abort,\"emscripten_get_heap_max\":_emscripten_get_heap_max,\"emscripten_memcpy_big\":_emscripten_memcpy_big,\"emscripten_resize_heap\":_emscripten_resize_heap,\"fd_close\":_fd_close,\"fd_seek\":_fd_seek,\"fd_write\":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"__wasm_call_ctors\"]).apply(null,arguments)};var _init=Module[\"_init\"]=function(){return(_init=Module[\"_init\"]=Module[\"asm\"][\"init\"]).apply(null,arguments)};var _init_with_threads_count=Module[\"_init_with_threads_count\"]=function(){return(_init_with_threads_count=Module[\"_init_with_threads_count\"]=Module[\"asm\"][\"init_with_threads_count\"]).apply(null,arguments)};var _get_threads_count=Module[\"_get_threads_count\"]=function(){return(_get_threads_count=Module[\"_get_threads_count\"]=Module[\"asm\"][\"get_threads_count\"]).apply(null,arguments)};var _register_tensor=Module[\"_register_tensor\"]=function(){return(_register_tensor=Module[\"_register_tensor\"]=Module[\"asm\"][\"register_tensor\"]).apply(null,arguments)};var _dispose_data=Module[\"_dispose_data\"]=function(){return(_dispose_data=Module[\"_dispose_data\"]=Module[\"asm\"][\"dispose_data\"]).apply(null,arguments)};var _dispose=Module[\"_dispose\"]=function(){return(_dispose=Module[\"_dispose\"]=Module[\"asm\"][\"dispose\"]).apply(null,arguments)};var _Abs=Module[\"_Abs\"]=function(){return(_Abs=Module[\"_Abs\"]=Module[\"asm\"][\"Abs\"]).apply(null,arguments)};var _Acos=Module[\"_Acos\"]=function(){return(_Acos=Module[\"_Acos\"]=Module[\"asm\"][\"Acos\"]).apply(null,arguments)};var _Acosh=Module[\"_Acosh\"]=function(){return(_Acosh=Module[\"_Acosh\"]=Module[\"asm\"][\"Acosh\"]).apply(null,arguments)};var _Add=Module[\"_Add\"]=function(){return(_Add=Module[\"_Add\"]=Module[\"asm\"][\"Add\"]).apply(null,arguments)};var _AddN=Module[\"_AddN\"]=function(){return(_AddN=Module[\"_AddN\"]=Module[\"asm\"][\"AddN\"]).apply(null,arguments)};var _All=Module[\"_All\"]=function(){return(_All=Module[\"_All\"]=Module[\"asm\"][\"All\"]).apply(null,arguments)};var _Any=Module[\"_Any\"]=function(){return(_Any=Module[\"_Any\"]=Module[\"asm\"][\"Any\"]).apply(null,arguments)};var _ArgMax=Module[\"_ArgMax\"]=function(){return(_ArgMax=Module[\"_ArgMax\"]=Module[\"asm\"][\"ArgMax\"]).apply(null,arguments)};var _ArgMin=Module[\"_ArgMin\"]=function(){return(_ArgMin=Module[\"_ArgMin\"]=Module[\"asm\"][\"ArgMin\"]).apply(null,arguments)};var _Asin=Module[\"_Asin\"]=function(){return(_Asin=Module[\"_Asin\"]=Module[\"asm\"][\"Asin\"]).apply(null,arguments)};var _Asinh=Module[\"_Asinh\"]=function(){return(_Asinh=Module[\"_Asinh\"]=Module[\"asm\"][\"Asinh\"]).apply(null,arguments)};var _Atan=Module[\"_Atan\"]=function(){return(_Atan=Module[\"_Atan\"]=Module[\"asm\"][\"Atan\"]).apply(null,arguments)};var _Atan2=Module[\"_Atan2\"]=function(){return(_Atan2=Module[\"_Atan2\"]=Module[\"asm\"][\"Atan2\"]).apply(null,arguments)};var _Atanh=Module[\"_Atanh\"]=function(){return(_Atanh=Module[\"_Atanh\"]=Module[\"asm\"][\"Atanh\"]).apply(null,arguments)};var _AvgPool=Module[\"_AvgPool\"]=function(){return(_AvgPool=Module[\"_AvgPool\"]=Module[\"asm\"][\"AvgPool\"]).apply(null,arguments)};var _AvgPool3D=Module[\"_AvgPool3D\"]=function(){return(_AvgPool3D=Module[\"_AvgPool3D\"]=Module[\"asm\"][\"AvgPool3D\"]).apply(null,arguments)};var _AvgPool3DGrad=Module[\"_AvgPool3DGrad\"]=function(){return(_AvgPool3DGrad=Module[\"_AvgPool3DGrad\"]=Module[\"asm\"][\"AvgPool3DGrad\"]).apply(null,arguments)};var _AvgPoolGrad=Module[\"_AvgPoolGrad\"]=function(){return(_AvgPoolGrad=Module[\"_AvgPoolGrad\"]=Module[\"asm\"][\"AvgPoolGrad\"]).apply(null,arguments)};var _BatchMatMul=Module[\"_BatchMatMul\"]=function(){return(_BatchMatMul=Module[\"_BatchMatMul\"]=Module[\"asm\"][\"BatchMatMul\"]).apply(null,arguments)};var _Bincount=Module[\"_Bincount\"]=function(){return(_Bincount=Module[\"_Bincount\"]=Module[\"asm\"][\"Bincount\"]).apply(null,arguments)};var _BitwiseAnd=Module[\"_BitwiseAnd\"]=function(){return(_BitwiseAnd=Module[\"_BitwiseAnd\"]=Module[\"asm\"][\"BitwiseAnd\"]).apply(null,arguments)};var _Ceil=Module[\"_Ceil\"]=function(){return(_Ceil=Module[\"_Ceil\"]=Module[\"asm\"][\"Ceil\"]).apply(null,arguments)};var _ClipByValue=Module[\"_ClipByValue\"]=function(){return(_ClipByValue=Module[\"_ClipByValue\"]=Module[\"asm\"][\"ClipByValue\"]).apply(null,arguments)};var _Conv2D=Module[\"_Conv2D\"]=function(){return(_Conv2D=Module[\"_Conv2D\"]=Module[\"asm\"][\"Conv2D\"]).apply(null,arguments)};var _Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=function(){return(_Conv2DBackpropInput=Module[\"_Conv2DBackpropInput\"]=Module[\"asm\"][\"Conv2DBackpropInput\"]).apply(null,arguments)};var _Conv3D=Module[\"_Conv3D\"]=function(){return(_Conv3D=Module[\"_Conv3D\"]=Module[\"asm\"][\"Conv3D\"]).apply(null,arguments)};var _Conv3DBackpropFilterV2=Module[\"_Conv3DBackpropFilterV2\"]=function(){return(_Conv3DBackpropFilterV2=Module[\"_Conv3DBackpropFilterV2\"]=Module[\"asm\"][\"Conv3DBackpropFilterV2\"]).apply(null,arguments)};var _Conv3DBackpropInputV2=Module[\"_Conv3DBackpropInputV2\"]=function(){return(_Conv3DBackpropInputV2=Module[\"_Conv3DBackpropInputV2\"]=Module[\"asm\"][\"Conv3DBackpropInputV2\"]).apply(null,arguments)};var _Cos=Module[\"_Cos\"]=function(){return(_Cos=Module[\"_Cos\"]=Module[\"asm\"][\"Cos\"]).apply(null,arguments)};var _Cosh=Module[\"_Cosh\"]=function(){return(_Cosh=Module[\"_Cosh\"]=Module[\"asm\"][\"Cosh\"]).apply(null,arguments)};var _CropAndResize=Module[\"_CropAndResize\"]=function(){return(_CropAndResize=Module[\"_CropAndResize\"]=Module[\"asm\"][\"CropAndResize\"]).apply(null,arguments)};var _Cumprod=Module[\"_Cumprod\"]=function(){return(_Cumprod=Module[\"_Cumprod\"]=Module[\"asm\"][\"Cumprod\"]).apply(null,arguments)};var _Cumsum=Module[\"_Cumsum\"]=function(){return(_Cumsum=Module[\"_Cumsum\"]=Module[\"asm\"][\"Cumsum\"]).apply(null,arguments)};var _DenseBincount=Module[\"_DenseBincount\"]=function(){return(_DenseBincount=Module[\"_DenseBincount\"]=Module[\"asm\"][\"DenseBincount\"]).apply(null,arguments)};var _DepthToSpace=Module[\"_DepthToSpace\"]=function(){return(_DepthToSpace=Module[\"_DepthToSpace\"]=Module[\"asm\"][\"DepthToSpace\"]).apply(null,arguments)};var _DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=function(){return(_DepthwiseConv2dNative=Module[\"_DepthwiseConv2dNative\"]=Module[\"asm\"][\"DepthwiseConv2dNative\"]).apply(null,arguments)};var _Diag=Module[\"_Diag\"]=function(){return(_Diag=Module[\"_Diag\"]=Module[\"asm\"][\"Diag\"]).apply(null,arguments)};var _Dilation2D=Module[\"_Dilation2D\"]=function(){return(_Dilation2D=Module[\"_Dilation2D\"]=Module[\"asm\"][\"Dilation2D\"]).apply(null,arguments)};var _Dilation2DBackpropFilter=Module[\"_Dilation2DBackpropFilter\"]=function(){return(_Dilation2DBackpropFilter=Module[\"_Dilation2DBackpropFilter\"]=Module[\"asm\"][\"Dilation2DBackpropFilter\"]).apply(null,arguments)};var _Dilation2DBackpropInput=Module[\"_Dilation2DBackpropInput\"]=function(){return(_Dilation2DBackpropInput=Module[\"_Dilation2DBackpropInput\"]=Module[\"asm\"][\"Dilation2DBackpropInput\"]).apply(null,arguments)};var _Elu=Module[\"_Elu\"]=function(){return(_Elu=Module[\"_Elu\"]=Module[\"asm\"][\"Elu\"]).apply(null,arguments)};var _EluGrad=Module[\"_EluGrad\"]=function(){return(_EluGrad=Module[\"_EluGrad\"]=Module[\"asm\"][\"EluGrad\"]).apply(null,arguments)};var _Equal=Module[\"_Equal\"]=function(){return(_Equal=Module[\"_Equal\"]=Module[\"asm\"][\"Equal\"]).apply(null,arguments)};var _Erf=Module[\"_Erf\"]=function(){return(_Erf=Module[\"_Erf\"]=Module[\"asm\"][\"Erf\"]).apply(null,arguments)};var _Exp=Module[\"_Exp\"]=function(){return(_Exp=Module[\"_Exp\"]=Module[\"asm\"][\"Exp\"]).apply(null,arguments)};var _Expm1=Module[\"_Expm1\"]=function(){return(_Expm1=Module[\"_Expm1\"]=Module[\"asm\"][\"Expm1\"]).apply(null,arguments)};var _FlipLeftRight=Module[\"_FlipLeftRight\"]=function(){return(_FlipLeftRight=Module[\"_FlipLeftRight\"]=Module[\"asm\"][\"FlipLeftRight\"]).apply(null,arguments)};var _Floor=Module[\"_Floor\"]=function(){return(_Floor=Module[\"_Floor\"]=Module[\"asm\"][\"Floor\"]).apply(null,arguments)};var _FloorDiv=Module[\"_FloorDiv\"]=function(){return(_FloorDiv=Module[\"_FloorDiv\"]=Module[\"asm\"][\"FloorDiv\"]).apply(null,arguments)};var _FusedBatchNorm=Module[\"_FusedBatchNorm\"]=function(){return(_FusedBatchNorm=Module[\"_FusedBatchNorm\"]=Module[\"asm\"][\"FusedBatchNorm\"]).apply(null,arguments)};var _FusedConv2D=Module[\"_FusedConv2D\"]=function(){return(_FusedConv2D=Module[\"_FusedConv2D\"]=Module[\"asm\"][\"FusedConv2D\"]).apply(null,arguments)};var _FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=function(){return(_FusedDepthwiseConv2D=Module[\"_FusedDepthwiseConv2D\"]=Module[\"asm\"][\"FusedDepthwiseConv2D\"]).apply(null,arguments)};var _Gather=Module[\"_Gather\"]=function(){return(_Gather=Module[\"_Gather\"]=Module[\"asm\"][\"Gather\"]).apply(null,arguments)};var _GatherNd=Module[\"_GatherNd\"]=function(){return(_GatherNd=Module[\"_GatherNd\"]=Module[\"asm\"][\"GatherNd\"]).apply(null,arguments)};var _Greater=Module[\"_Greater\"]=function(){return(_Greater=Module[\"_Greater\"]=Module[\"asm\"][\"Greater\"]).apply(null,arguments)};var _GreaterEqual=Module[\"_GreaterEqual\"]=function(){return(_GreaterEqual=Module[\"_GreaterEqual\"]=Module[\"asm\"][\"GreaterEqual\"]).apply(null,arguments)};var _IsFinite=Module[\"_IsFinite\"]=function(){return(_IsFinite=Module[\"_IsFinite\"]=Module[\"asm\"][\"IsFinite\"]).apply(null,arguments)};var _IsInf=Module[\"_IsInf\"]=function(){return(_IsInf=Module[\"_IsInf\"]=Module[\"asm\"][\"IsInf\"]).apply(null,arguments)};var _IsNan=Module[\"_IsNan\"]=function(){return(_IsNan=Module[\"_IsNan\"]=Module[\"asm\"][\"IsNan\"]).apply(null,arguments)};var _LRN=Module[\"_LRN\"]=function(){return(_LRN=Module[\"_LRN\"]=Module[\"asm\"][\"LRN\"]).apply(null,arguments)};var _LRNGrad=Module[\"_LRNGrad\"]=function(){return(_LRNGrad=Module[\"_LRNGrad\"]=Module[\"asm\"][\"LRNGrad\"]).apply(null,arguments)};var _LeakyRelu=Module[\"_LeakyRelu\"]=function(){return(_LeakyRelu=Module[\"_LeakyRelu\"]=Module[\"asm\"][\"LeakyRelu\"]).apply(null,arguments)};var _Less=Module[\"_Less\"]=function(){return(_Less=Module[\"_Less\"]=Module[\"asm\"][\"Less\"]).apply(null,arguments)};var _LessEqual=Module[\"_LessEqual\"]=function(){return(_LessEqual=Module[\"_LessEqual\"]=Module[\"asm\"][\"LessEqual\"]).apply(null,arguments)};var _LinSpace=Module[\"_LinSpace\"]=function(){return(_LinSpace=Module[\"_LinSpace\"]=Module[\"asm\"][\"LinSpace\"]).apply(null,arguments)};var _Log=Module[\"_Log\"]=function(){return(_Log=Module[\"_Log\"]=Module[\"asm\"][\"Log\"]).apply(null,arguments)};var _Log1p=Module[\"_Log1p\"]=function(){return(_Log1p=Module[\"_Log1p\"]=Module[\"asm\"][\"Log1p\"]).apply(null,arguments)};var _LogicalAnd=Module[\"_LogicalAnd\"]=function(){return(_LogicalAnd=Module[\"_LogicalAnd\"]=Module[\"asm\"][\"LogicalAnd\"]).apply(null,arguments)};var _LogicalNot=Module[\"_LogicalNot\"]=function(){return(_LogicalNot=Module[\"_LogicalNot\"]=Module[\"asm\"][\"LogicalNot\"]).apply(null,arguments)};var _LogicalOr=Module[\"_LogicalOr\"]=function(){return(_LogicalOr=Module[\"_LogicalOr\"]=Module[\"asm\"][\"LogicalOr\"]).apply(null,arguments)};var _LogicalXor=Module[\"_LogicalXor\"]=function(){return(_LogicalXor=Module[\"_LogicalXor\"]=Module[\"asm\"][\"LogicalXor\"]).apply(null,arguments)};var _Max=Module[\"_Max\"]=function(){return(_Max=Module[\"_Max\"]=Module[\"asm\"][\"Max\"]).apply(null,arguments)};var _MaxPool=Module[\"_MaxPool\"]=function(){return(_MaxPool=Module[\"_MaxPool\"]=Module[\"asm\"][\"MaxPool\"]).apply(null,arguments)};var _MaxPool3D=Module[\"_MaxPool3D\"]=function(){return(_MaxPool3D=Module[\"_MaxPool3D\"]=Module[\"asm\"][\"MaxPool3D\"]).apply(null,arguments)};var _MaxPool3DGrad=Module[\"_MaxPool3DGrad\"]=function(){return(_MaxPool3DGrad=Module[\"_MaxPool3DGrad\"]=Module[\"asm\"][\"MaxPool3DGrad\"]).apply(null,arguments)};var _MaxPoolGrad=Module[\"_MaxPoolGrad\"]=function(){return(_MaxPoolGrad=Module[\"_MaxPoolGrad\"]=Module[\"asm\"][\"MaxPoolGrad\"]).apply(null,arguments)};var _MaxPoolWithArgmax=Module[\"_MaxPoolWithArgmax\"]=function(){return(_MaxPoolWithArgmax=Module[\"_MaxPoolWithArgmax\"]=Module[\"asm\"][\"MaxPoolWithArgmax\"]).apply(null,arguments)};var _Maximum=Module[\"_Maximum\"]=function(){return(_Maximum=Module[\"_Maximum\"]=Module[\"asm\"][\"Maximum\"]).apply(null,arguments)};var _Mean=Module[\"_Mean\"]=function(){return(_Mean=Module[\"_Mean\"]=Module[\"asm\"][\"Mean\"]).apply(null,arguments)};var _Min=Module[\"_Min\"]=function(){return(_Min=Module[\"_Min\"]=Module[\"asm\"][\"Min\"]).apply(null,arguments)};var _Minimum=Module[\"_Minimum\"]=function(){return(_Minimum=Module[\"_Minimum\"]=Module[\"asm\"][\"Minimum\"]).apply(null,arguments)};var _MirrorPad=Module[\"_MirrorPad\"]=function(){return(_MirrorPad=Module[\"_MirrorPad\"]=Module[\"asm\"][\"MirrorPad\"]).apply(null,arguments)};var _Mod=Module[\"_Mod\"]=function(){return(_Mod=Module[\"_Mod\"]=Module[\"asm\"][\"Mod\"]).apply(null,arguments)};var _Multinomial=Module[\"_Multinomial\"]=function(){return(_Multinomial=Module[\"_Multinomial\"]=Module[\"asm\"][\"Multinomial\"]).apply(null,arguments)};var _Multiply=Module[\"_Multiply\"]=function(){return(_Multiply=Module[\"_Multiply\"]=Module[\"asm\"][\"Multiply\"]).apply(null,arguments)};var _Neg=Module[\"_Neg\"]=function(){return(_Neg=Module[\"_Neg\"]=Module[\"asm\"][\"Neg\"]).apply(null,arguments)};var _NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=function(){return(_NonMaxSuppressionV3=Module[\"_NonMaxSuppressionV3\"]=Module[\"asm\"][\"NonMaxSuppressionV3\"]).apply(null,arguments)};var _NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=function(){return(_NonMaxSuppressionV4=Module[\"_NonMaxSuppressionV4\"]=Module[\"asm\"][\"NonMaxSuppressionV4\"]).apply(null,arguments)};var _NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=function(){return(_NonMaxSuppressionV5=Module[\"_NonMaxSuppressionV5\"]=Module[\"asm\"][\"NonMaxSuppressionV5\"]).apply(null,arguments)};var _NotEqual=Module[\"_NotEqual\"]=function(){return(_NotEqual=Module[\"_NotEqual\"]=Module[\"asm\"][\"NotEqual\"]).apply(null,arguments)};var _OneHot=Module[\"_OneHot\"]=function(){return(_OneHot=Module[\"_OneHot\"]=Module[\"asm\"][\"OneHot\"]).apply(null,arguments)};var _PadV2=Module[\"_PadV2\"]=function(){return(_PadV2=Module[\"_PadV2\"]=Module[\"asm\"][\"PadV2\"]).apply(null,arguments)};var _Pow=Module[\"_Pow\"]=function(){return(_Pow=Module[\"_Pow\"]=Module[\"asm\"][\"Pow\"]).apply(null,arguments)};var _Prelu=Module[\"_Prelu\"]=function(){return(_Prelu=Module[\"_Prelu\"]=Module[\"asm\"][\"Prelu\"]).apply(null,arguments)};var _Prod=Module[\"_Prod\"]=function(){return(_Prod=Module[\"_Prod\"]=Module[\"asm\"][\"Prod\"]).apply(null,arguments)};var _RealDiv=Module[\"_RealDiv\"]=function(){return(_RealDiv=Module[\"_RealDiv\"]=Module[\"asm\"][\"RealDiv\"]).apply(null,arguments)};var _Reciprocal=Module[\"_Reciprocal\"]=function(){return(_Reciprocal=Module[\"_Reciprocal\"]=Module[\"asm\"][\"Reciprocal\"]).apply(null,arguments)};var _Relu=Module[\"_Relu\"]=function(){return(_Relu=Module[\"_Relu\"]=Module[\"asm\"][\"Relu\"]).apply(null,arguments)};var _Relu6=Module[\"_Relu6\"]=function(){return(_Relu6=Module[\"_Relu6\"]=Module[\"asm\"][\"Relu6\"]).apply(null,arguments)};var _ResizeBilinear=Module[\"_ResizeBilinear\"]=function(){return(_ResizeBilinear=Module[\"_ResizeBilinear\"]=Module[\"asm\"][\"ResizeBilinear\"]).apply(null,arguments)};var _ResizeBilinearGrad=Module[\"_ResizeBilinearGrad\"]=function(){return(_ResizeBilinearGrad=Module[\"_ResizeBilinearGrad\"]=Module[\"asm\"][\"ResizeBilinearGrad\"]).apply(null,arguments)};var _ResizeNearestNeighbor=Module[\"_ResizeNearestNeighbor\"]=function(){return(_ResizeNearestNeighbor=Module[\"_ResizeNearestNeighbor\"]=Module[\"asm\"][\"ResizeNearestNeighbor\"]).apply(null,arguments)};var _ResizeNearestNeighborGrad=Module[\"_ResizeNearestNeighborGrad\"]=function(){return(_ResizeNearestNeighborGrad=Module[\"_ResizeNearestNeighborGrad\"]=Module[\"asm\"][\"ResizeNearestNeighborGrad\"]).apply(null,arguments)};var _Reverse=Module[\"_Reverse\"]=function(){return(_Reverse=Module[\"_Reverse\"]=Module[\"asm\"][\"Reverse\"]).apply(null,arguments)};var _RotateWithOffset=Module[\"_RotateWithOffset\"]=function(){return(_RotateWithOffset=Module[\"_RotateWithOffset\"]=Module[\"asm\"][\"RotateWithOffset\"]).apply(null,arguments)};var _Round=Module[\"_Round\"]=function(){return(_Round=Module[\"_Round\"]=Module[\"asm\"][\"Round\"]).apply(null,arguments)};var _Rsqrt=Module[\"_Rsqrt\"]=function(){return(_Rsqrt=Module[\"_Rsqrt\"]=Module[\"asm\"][\"Rsqrt\"]).apply(null,arguments)};var _ScatterNd=Module[\"_ScatterNd\"]=function(){return(_ScatterNd=Module[\"_ScatterNd\"]=Module[\"asm\"][\"ScatterNd\"]).apply(null,arguments)};var _SearchSorted=Module[\"_SearchSorted\"]=function(){return(_SearchSorted=Module[\"_SearchSorted\"]=Module[\"asm\"][\"SearchSorted\"]).apply(null,arguments)};var _SelectV2=Module[\"_SelectV2\"]=function(){return(_SelectV2=Module[\"_SelectV2\"]=Module[\"asm\"][\"SelectV2\"]).apply(null,arguments)};var _Selu=Module[\"_Selu\"]=function(){return(_Selu=Module[\"_Selu\"]=Module[\"asm\"][\"Selu\"]).apply(null,arguments)};var _Sigmoid=Module[\"_Sigmoid\"]=function(){return(_Sigmoid=Module[\"_Sigmoid\"]=Module[\"asm\"][\"Sigmoid\"]).apply(null,arguments)};var _Sign=Module[\"_Sign\"]=function(){return(_Sign=Module[\"_Sign\"]=Module[\"asm\"][\"Sign\"]).apply(null,arguments)};var _Sin=Module[\"_Sin\"]=function(){return(_Sin=Module[\"_Sin\"]=Module[\"asm\"][\"Sin\"]).apply(null,arguments)};var _Sinh=Module[\"_Sinh\"]=function(){return(_Sinh=Module[\"_Sinh\"]=Module[\"asm\"][\"Sinh\"]).apply(null,arguments)};var _Softmax=Module[\"_Softmax\"]=function(){return(_Softmax=Module[\"_Softmax\"]=Module[\"asm\"][\"Softmax\"]).apply(null,arguments)};var _Softplus=Module[\"_Softplus\"]=function(){return(_Softplus=Module[\"_Softplus\"]=Module[\"asm\"][\"Softplus\"]).apply(null,arguments)};var _SparseFillEmptyRows=Module[\"_SparseFillEmptyRows\"]=function(){return(_SparseFillEmptyRows=Module[\"_SparseFillEmptyRows\"]=Module[\"asm\"][\"SparseFillEmptyRows\"]).apply(null,arguments)};var _SparseReshape=Module[\"_SparseReshape\"]=function(){return(_SparseReshape=Module[\"_SparseReshape\"]=Module[\"asm\"][\"SparseReshape\"]).apply(null,arguments)};var _SparseSegmentReduction=Module[\"_SparseSegmentReduction\"]=function(){return(_SparseSegmentReduction=Module[\"_SparseSegmentReduction\"]=Module[\"asm\"][\"SparseSegmentReduction\"]).apply(null,arguments)};var _SparseToDense=Module[\"_SparseToDense\"]=function(){return(_SparseToDense=Module[\"_SparseToDense\"]=Module[\"asm\"][\"SparseToDense\"]).apply(null,arguments)};var _Sqrt=Module[\"_Sqrt\"]=function(){return(_Sqrt=Module[\"_Sqrt\"]=Module[\"asm\"][\"Sqrt\"]).apply(null,arguments)};var _Square=Module[\"_Square\"]=function(){return(_Square=Module[\"_Square\"]=Module[\"asm\"][\"Square\"]).apply(null,arguments)};var _SquaredDifference=Module[\"_SquaredDifference\"]=function(){return(_SquaredDifference=Module[\"_SquaredDifference\"]=Module[\"asm\"][\"SquaredDifference\"]).apply(null,arguments)};var _Step=Module[\"_Step\"]=function(){return(_Step=Module[\"_Step\"]=Module[\"asm\"][\"Step\"]).apply(null,arguments)};var _StridedSlice=Module[\"_StridedSlice\"]=function(){return(_StridedSlice=Module[\"_StridedSlice\"]=Module[\"asm\"][\"StridedSlice\"]).apply(null,arguments)};var _Sub=Module[\"_Sub\"]=function(){return(_Sub=Module[\"_Sub\"]=Module[\"asm\"][\"Sub\"]).apply(null,arguments)};var _Sum=Module[\"_Sum\"]=function(){return(_Sum=Module[\"_Sum\"]=Module[\"asm\"][\"Sum\"]).apply(null,arguments)};var _Tan=Module[\"_Tan\"]=function(){return(_Tan=Module[\"_Tan\"]=Module[\"asm\"][\"Tan\"]).apply(null,arguments)};var _Tanh=Module[\"_Tanh\"]=function(){return(_Tanh=Module[\"_Tanh\"]=Module[\"asm\"][\"Tanh\"]).apply(null,arguments)};var _TensorScatterUpdate=Module[\"_TensorScatterUpdate\"]=function(){return(_TensorScatterUpdate=Module[\"_TensorScatterUpdate\"]=Module[\"asm\"][\"TensorScatterUpdate\"]).apply(null,arguments)};var _Tile=Module[\"_Tile\"]=function(){return(_Tile=Module[\"_Tile\"]=Module[\"asm\"][\"Tile\"]).apply(null,arguments)};var _TopK=Module[\"_TopK\"]=function(){return(_TopK=Module[\"_TopK\"]=Module[\"asm\"][\"TopK\"]).apply(null,arguments)};var _Transform=Module[\"_Transform\"]=function(){return(_Transform=Module[\"_Transform\"]=Module[\"asm\"][\"Transform\"]).apply(null,arguments)};var _Transpose=Module[\"_Transpose\"]=function(){return(_Transpose=Module[\"_Transpose\"]=Module[\"asm\"][\"Transpose\"]).apply(null,arguments)};var __FusedMatMul=Module[\"__FusedMatMul\"]=function(){return(__FusedMatMul=Module[\"__FusedMatMul\"]=Module[\"asm\"][\"_FusedMatMul\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"malloc\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"free\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"__errno_location\"]).apply(null,arguments)};var stackSave=Module[\"stackSave\"]=function(){return(stackSave=Module[\"stackSave\"]=Module[\"asm\"][\"stackSave\"]).apply(null,arguments)};var stackRestore=Module[\"stackRestore\"]=function(){return(stackRestore=Module[\"stackRestore\"]=Module[\"asm\"][\"stackRestore\"]).apply(null,arguments)};var stackAlloc=Module[\"stackAlloc\"]=function(){return(stackAlloc=Module[\"stackAlloc\"]=Module[\"asm\"][\"stackAlloc\"]).apply(null,arguments)};var dynCall_iijjiiii=Module[\"dynCall_iijjiiii\"]=function(){return(dynCall_iijjiiii=Module[\"dynCall_iijjiiii\"]=Module[\"asm\"][\"dynCall_iijjiiii\"]).apply(null,arguments)};var dynCall_jiji=Module[\"dynCall_jiji\"]=function(){return(dynCall_jiji=Module[\"dynCall_jiji\"]=Module[\"asm\"][\"dynCall_jiji\"]).apply(null,arguments)};Module[\"cwrap\"]=cwrap;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();var listenersAdded;if(beforeListeners){listenersAdded={uncaughtException:process.listeners(\"uncaughtException\").filter(function(listener){return!beforeListeners.uncaughtException.indexOf(listener)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(listener){return!beforeListeners.unhandledRejection.indexOf(listener)>-1})}}var actualModule;if(typeof WasmBackendModule!==\"undefined\"){actualModule=WasmBackendModule}else if(typeof WasmBackendModuleThreadedSimd!==\"undefined\"){actualModule=WasmBackendModuleThreadedSimd}else{throw new Error(\"Could not find wasm module in post.js\")}if(listenersAdded){var tmpDispose=actualModule[\"_dispose\"];actualModule[\"_dispose\"]=function(){tmpDispose();listenersAdded.uncaughtException.forEach(function(listener){process.removeListener(\"uncaughtException\",listener)});listenersAdded.unhandledRejection.forEach(function(listener){process.removeListener(\"unhandledRejection\",listener)})}}\n\n\n return WasmBackendModule.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = WasmBackendModule;\nelse if (typeof define === 'function' && define['amd'])\n define([], function() { return WasmBackendModule; });\nelse if (typeof exports === 'object')\n exports[\"WasmBackendModule\"] = WasmBackendModule;\n","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport './flags_wasm';\nimport { DataStorage, deprecationWarn, engine, env, KernelBackend, util } from '@tensorflow/tfjs-core';\nimport * as wasmFactoryThreadedSimd_import from '../wasm-out/tfjs-backend-wasm-threaded-simd.js';\n// @ts-ignore\nimport { wasmWorkerContents } from '../wasm-out/tfjs-backend-wasm-threaded-simd.worker.js';\nimport * as wasmFactory_import from '../wasm-out/tfjs-backend-wasm.js';\n// This workaround is required for importing in Node.js without using\n// the node bundle (for testing). This would not be necessary if we\n// flipped esModuleInterop to true, but we likely can't do that since\n// google3 does not use it.\nconst wasmFactoryThreadedSimd = (wasmFactoryThreadedSimd_import.default ||\n wasmFactoryThreadedSimd_import);\nconst wasmFactory = (wasmFactory_import.default || wasmFactory_import);\nexport class BackendWasm extends KernelBackend {\n constructor(wasm) {\n super();\n this.wasm = wasm;\n // 0 is reserved for null data ids.\n this.dataIdNextNumber = 1;\n this.wasm.tfjs.initWithThreadsCount(threadsCount);\n actualThreadsCount = this.wasm.tfjs.getThreadsCount();\n this.dataIdMap = new DataStorage(this, engine());\n }\n write(values, shape, dtype) {\n const dataId = { id: this.dataIdNextNumber++ };\n this.move(dataId, values, shape, dtype, 1);\n return dataId;\n }\n numDataIds() {\n return this.dataIdMap.numDataIds();\n }\n async time(f) {\n const start = util.now();\n f();\n const kernelMs = util.now() - start;\n return { kernelMs };\n }\n move(dataId, values, shape, dtype, refCount) {\n const id = this.dataIdNextNumber++;\n if (dtype === 'string') {\n const stringBytes = values;\n this.dataIdMap.set(dataId, { id, stringBytes, shape, dtype, memoryOffset: null, refCount });\n return;\n }\n const size = util.sizeFromShape(shape);\n const numBytes = size * util.bytesPerElement(dtype);\n // `>>> 0` is needed for above 2GB allocations because wasm._malloc returns\n // a signed int32 instead of an unsigned int32.\n // https://v8.dev/blog/4gb-wasm-memory\n const memoryOffset = this.wasm._malloc(numBytes) >>> 0;\n this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount });\n this.wasm.tfjs.registerTensor(id, size, memoryOffset);\n if (values != null) {\n this.wasm.HEAPU8.set(new Uint8Array(values.buffer, values.byteOffset, numBytes), memoryOffset);\n }\n }\n async read(dataId) {\n return this.readSync(dataId);\n }\n readSync(dataId, start, end) {\n const { memoryOffset, dtype, shape, stringBytes } = this.dataIdMap.get(dataId);\n if (dtype === 'string') {\n // Slice all elements.\n if ((start == null || start === 0) &&\n (end == null || end >= stringBytes.length)) {\n return stringBytes;\n }\n return stringBytes.slice(start, end);\n }\n start = start || 0;\n end = end || util.sizeFromShape(shape);\n const bytesPerElement = util.bytesPerElement(dtype);\n const bytes = this.wasm.HEAPU8.slice(memoryOffset + start * bytesPerElement, memoryOffset + end * bytesPerElement);\n return typedArrayFromBuffer(bytes.buffer, dtype);\n }\n /**\n * Dispose the memory if the dataId has 0 refCount. Return true if the memory\n * is released, false otherwise.\n * @param dataId\n * @oaram force Optional, remove the data regardless of refCount\n */\n disposeData(dataId, force = false) {\n if (this.dataIdMap.has(dataId)) {\n const data = this.dataIdMap.get(dataId);\n data.refCount--;\n if (!force && data.refCount > 0) {\n return false;\n }\n this.wasm._free(data.memoryOffset);\n this.wasm.tfjs.disposeData(data.id);\n this.dataIdMap.delete(dataId);\n }\n return true;\n }\n /** Return refCount of a `TensorData`. */\n refCount(dataId) {\n if (this.dataIdMap.has(dataId)) {\n const tensorData = this.dataIdMap.get(dataId);\n return tensorData.refCount;\n }\n return 0;\n }\n incRef(dataId) {\n const data = this.dataIdMap.get(dataId);\n if (data != null) {\n data.refCount++;\n }\n }\n floatPrecision() {\n return 32;\n }\n // Returns the memory offset of a tensor. Useful for debugging and unit\n // testing.\n getMemoryOffset(dataId) {\n return this.dataIdMap.get(dataId).memoryOffset;\n }\n dispose() {\n this.wasm.tfjs.dispose();\n if ('PThread' in this.wasm) {\n this.wasm.PThread.terminateAllThreads();\n }\n this.wasm = null;\n }\n memory() {\n return { unreliable: false };\n }\n /**\n * Make a tensor info for the output of an op. If `memoryOffset` is not\n * present, this method allocates memory on the WASM heap. If `memoryOffset`\n * is present, the memory was allocated elsewhere (in c++) and we just record\n * the pointer where that memory lives.\n */\n makeOutput(shape, dtype, memoryOffset, values) {\n let dataId;\n if (memoryOffset == null) {\n dataId = this.write(values !== null && values !== void 0 ? values : null, shape, dtype);\n }\n else {\n const id = this.dataIdNextNumber++;\n dataId = { id };\n this.dataIdMap.set(dataId, { id, memoryOffset, shape, dtype, refCount: 1 });\n const size = util.sizeFromShape(shape);\n this.wasm.tfjs.registerTensor(id, size, memoryOffset);\n }\n return { dataId, shape, dtype };\n }\n typedArrayFromHeap({ shape, dtype, dataId }) {\n const buffer = this.wasm.HEAPU8.buffer;\n const { memoryOffset } = this.dataIdMap.get(dataId);\n const size = util.sizeFromShape(shape);\n switch (dtype) {\n case 'float32':\n return new Float32Array(buffer, memoryOffset, size);\n case 'int32':\n return new Int32Array(buffer, memoryOffset, size);\n case 'bool':\n return new Uint8Array(buffer, memoryOffset, size);\n default:\n throw new Error(`Unknown dtype ${dtype}`);\n }\n }\n}\nfunction createInstantiateWasmFunc(path) {\n // this will be replace by rollup plugin patchWechatWebAssembly in\n // minprogram's output.\n // tslint:disable-next-line:no-any\n return (imports, callback) => {\n util.fetch(path, { credentials: 'same-origin' }).then((response) => {\n if (!response['ok']) {\n imports.env.a(`failed to load wasm binary file at '${path}'`);\n }\n response.arrayBuffer().then(binary => {\n WebAssembly.instantiate(binary, imports).then(output => {\n callback(output.instance, output.module);\n });\n });\n });\n return {};\n };\n}\n/**\n * Returns the path of the WASM binary.\n * @param simdSupported whether SIMD is supported\n * @param threadsSupported whether multithreading is supported\n * @param wasmModuleFolder the directory containing the WASM binaries.\n */\nfunction getPathToWasmBinary(simdSupported, threadsSupported, wasmModuleFolder) {\n if (wasmPath != null) {\n // If wasmPath is defined, the user has supplied a full path to\n // the vanilla .wasm binary.\n return wasmPath;\n }\n let path = 'tfjs-backend-wasm.wasm';\n if (simdSupported && threadsSupported) {\n path = 'tfjs-backend-wasm-threaded-simd.wasm';\n }\n else if (simdSupported) {\n path = 'tfjs-backend-wasm-simd.wasm';\n }\n if (wasmFileMap != null) {\n if (wasmFileMap[path] != null) {\n return wasmFileMap[path];\n }\n }\n return wasmModuleFolder + path;\n}\n/**\n * Initializes the wasm module and creates the js <--> wasm bridge.\n *\n * NOTE: We wrap the wasm module in a object with property 'wasm' instead of\n * returning Promise to avoid freezing Chrome (last tested\n * in Chrome 76).\n */\nexport async function init() {\n const [simdSupported, threadsSupported] = await Promise.all([\n env().getAsync('WASM_HAS_SIMD_SUPPORT'),\n env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT')\n ]);\n return new Promise((resolve, reject) => {\n const factoryConfig = {};\n /**\n * This function overrides the Emscripten module locateFile utility.\n * @param path The relative path to the file that needs to be loaded.\n * @param prefix The path to the main JavaScript file's directory.\n */\n factoryConfig.locateFile = (path, prefix) => {\n if (path.endsWith('.worker.js')) {\n // Escape '\\n' because Blob will turn it into a newline.\n // There should be a setting for this, but 'endings: \"native\"' does\n // not seem to work.\n const response = wasmWorkerContents.replace(/\\n/g, '\\\\n');\n const blob = new Blob([response], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n }\n if (path.endsWith('.wasm')) {\n return getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : prefix);\n }\n return prefix + path;\n };\n // Use the instantiateWasm override when system fetch is not available.\n // Reference:\n // https://github.com/emscripten-core/emscripten/blob/2bca083cbbd5a4133db61fbd74d04f7feecfa907/tests/manual_wasm_instantiate.html#L170\n if (customFetch) {\n factoryConfig.instantiateWasm =\n createInstantiateWasmFunc(getPathToWasmBinary(simdSupported, threadsSupported, wasmPathPrefix != null ? wasmPathPrefix : ''));\n }\n let initialized = false;\n factoryConfig.onAbort = () => {\n if (initialized) {\n // Emscripten already called console.warn so no need to double log.\n return;\n }\n if (initAborted) {\n // Emscripten calls `onAbort` twice, resulting in double error\n // messages.\n return;\n }\n initAborted = true;\n const rejectMsg = 'Make sure the server can serve the `.wasm` file relative to the ' +\n 'bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers';\n reject({ message: rejectMsg });\n };\n let wasm;\n // If `wasmPath` has been defined we must initialize the vanilla module.\n if (threadsSupported && simdSupported && wasmPath == null) {\n factoryConfig.mainScriptUrlOrBlob = new Blob([`var WasmBackendModuleThreadedSimd = ` +\n wasmFactoryThreadedSimd.toString()], { type: 'text/javascript' });\n wasm = wasmFactoryThreadedSimd(factoryConfig);\n }\n else {\n // The wasmFactory works for both vanilla and SIMD binaries.\n wasm = wasmFactory(factoryConfig);\n }\n // The `wasm` promise will resolve to the WASM module created by\n // the factory, but it might have had errors during creation. Most\n // errors are caught by the onAbort callback defined above.\n // However, some errors, such as those occurring from a\n // failed fetch, result in this promise being rejected. These are\n // caught and re-rejected below.\n wasm.then((module) => {\n initialized = true;\n initAborted = false;\n const voidReturnType = null;\n // Using the tfjs namespace to avoid conflict with emscripten's API.\n module.tfjs = {\n init: module.cwrap('init', null, []),\n initWithThreadsCount: module.cwrap('init_with_threads_count', null, ['number']),\n getThreadsCount: module.cwrap('get_threads_count', 'number', []),\n registerTensor: module.cwrap('register_tensor', null, [\n 'number',\n 'number',\n 'number', // memoryOffset\n ]),\n disposeData: module.cwrap('dispose_data', voidReturnType, ['number']),\n dispose: module.cwrap('dispose', voidReturnType, []),\n };\n resolve({ wasm: module });\n })\n .catch(reject);\n });\n}\nfunction typedArrayFromBuffer(buffer, dtype) {\n switch (dtype) {\n case 'float32':\n return new Float32Array(buffer);\n case 'int32':\n return new Int32Array(buffer);\n case 'bool':\n return new Uint8Array(buffer);\n default:\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\nconst wasmBinaryNames = [\n 'tfjs-backend-wasm.wasm', 'tfjs-backend-wasm-simd.wasm',\n 'tfjs-backend-wasm-threaded-simd.wasm'\n];\nlet wasmPath = null;\nlet wasmPathPrefix = null;\nlet wasmFileMap = {};\nlet initAborted = false;\nlet customFetch = false;\n/**\n * @deprecated Use `setWasmPaths` instead.\n * Sets the path to the `.wasm` file which will be fetched when the wasm\n * backend is initialized. See\n * https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers\n * for more details.\n * @param path wasm file path or url\n * @param usePlatformFetch optional boolean to use platform fetch to download\n * the wasm file, default to false.\n *\n * @doc {heading: 'Environment', namespace: 'wasm'}\n */\nexport function setWasmPath(path, usePlatformFetch = false) {\n deprecationWarn('setWasmPath has been deprecated in favor of setWasmPaths and' +\n ' will be removed in a future release.');\n if (initAborted) {\n throw new Error('The WASM backend was already initialized. Make sure you call ' +\n '`setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`');\n }\n wasmPath = path;\n customFetch = usePlatformFetch;\n}\n/**\n * Configures the locations of the WASM binaries.\n *\n * ```js\n * setWasmPaths({\n * 'tfjs-backend-wasm.wasm': 'renamed.wasm',\n * 'tfjs-backend-wasm-simd.wasm': 'renamed-simd.wasm',\n * 'tfjs-backend-wasm-threaded-simd.wasm': 'renamed-threaded-simd.wasm'\n * });\n * tf.setBackend('wasm');\n * ```\n *\n * @param prefixOrFileMap This can be either a string or object:\n * - (string) The path to the directory where the WASM binaries are located.\n * Note that this prefix will be used to load each binary (vanilla,\n * SIMD-enabled, threading-enabled, etc.).\n * - (object) Mapping from names of WASM binaries to custom\n * full paths specifying the locations of those binaries. This is useful if\n * your WASM binaries are not all located in the same directory, or if your\n * WASM binaries have been renamed.\n * @param usePlatformFetch optional boolean to use platform fetch to download\n * the wasm file, default to false.\n *\n * @doc {heading: 'Environment', namespace: 'wasm'}\n */\nexport function setWasmPaths(prefixOrFileMap, usePlatformFetch = false) {\n if (initAborted) {\n throw new Error('The WASM backend was already initialized. Make sure you call ' +\n '`setWasmPaths()` before you call `tf.setBackend()` or ' +\n '`tf.ready()`');\n }\n if (typeof prefixOrFileMap === 'string') {\n wasmPathPrefix = prefixOrFileMap;\n }\n else {\n wasmFileMap = prefixOrFileMap;\n const missingPaths = wasmBinaryNames.filter(name => wasmFileMap[name] == null);\n if (missingPaths.length > 0) {\n throw new Error(`There were no entries found for the following binaries: ` +\n `${missingPaths.join(',')}. Please either call setWasmPaths with a ` +\n `map providing a path for each binary, or with a string indicating ` +\n `the directory where all the binaries can be found.`);\n }\n }\n customFetch = usePlatformFetch;\n}\n/** Used in unit tests. */\nexport function resetWasmPath() {\n wasmPath = null;\n wasmPathPrefix = null;\n wasmFileMap = {};\n customFetch = false;\n initAborted = false;\n}\nlet threadsCount = -1;\nlet actualThreadsCount = -1;\n/**\n * Sets the number of threads that will be used by XNNPACK to create\n * threadpool (default to the number of logical CPU cores).\n *\n * This must be called before calling `tf.setBackend('wasm')`.\n */\nexport function setThreadsCount(numThreads) {\n threadsCount = numThreads;\n}\n/**\n * Gets the actual threads count that is used by XNNPACK.\n *\n * It is set after the backend is intialized.\n */\nexport function getThreadsCount() {\n if (actualThreadsCount === -1) {\n throw new Error(`WASM backend not initialized.`);\n }\n return actualThreadsCount;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF93YXNtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2JhY2tlbmRfd2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQWtDLFdBQVcsRUFBWSxlQUFlLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQWMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUosT0FBTyxLQUFLLDhCQUE4QixNQUFNLGdEQUFnRCxDQUFDO0FBQ2pHLGFBQWE7QUFDYixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUN6RixPQUFPLEtBQUssa0JBQWtCLE1BQU0sa0NBQWtDLENBQUM7QUFFdkUscUVBQXFFO0FBQ3JFLG1FQUFtRTtBQUNuRSxxRUFBcUU7QUFDckUsMkJBQTJCO0FBQzNCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPO0lBQ3RDLDhCQUE4QixDQUNkLENBQUM7QUFDbEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksa0JBQWtCLENBQ2hDLENBQUM7QUFjdEMsTUFBTSxPQUFPLFdBQVksU0FBUSxhQUFhO0lBSzVDLFlBQW1CLElBQXFEO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBRFMsU0FBSSxHQUFKLElBQUksQ0FBaUQ7UUFKeEUsbUNBQW1DO1FBQzNCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUszQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksV0FB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O0FBQ2pDLENBQUM7QUFFRCwwQkFBMEI7QUFDMUIsTUFBTSxVQUFVLGFBQWE7SUFDM0IsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLENBQUM7QUFFRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTVCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxVQUFrQjtJQUNoRCxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGVBQWU7SUFDN0IsSUFBSSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FDbEQ7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQgJy4vZmxhZ3Nfd2FzbSc7XG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBCYWNrZW5kVGltaW5nSW5mbywgRGF0YVN0b3JhZ2UsIERhdGFUeXBlLCBkZXByZWNhdGlvbldhcm4sIGVuZ2luZSwgZW52LCBLZXJuZWxCYWNrZW5kLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtTW9kdWxlLCBXYXNtRmFjdG9yeUNvbmZpZ30gZnJvbSAnLi4vd2FzbS1vdXQvdGZqcy1iYWNrZW5kLXdhc20nO1xuaW1wb3J0IHtCYWNrZW5kV2FzbVRocmVhZGVkU2ltZE1vZHVsZX0gZnJvbSAnLi4vd2FzbS1vdXQvdGZqcy1iYWNrZW5kLXdhc20tdGhyZWFkZWQtc2ltZCc7XG5pbXBvcnQgKiBhcyB3YXNtRmFjdG9yeVRocmVhZGVkU2ltZF9pbXBvcnQgZnJvbSAnLi4vd2FzbS1vdXQvdGZqcy1iYWNrZW5kLXdhc20tdGhyZWFkZWQtc2ltZC5qcyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQge3dhc21Xb3JrZXJDb250ZW50c30gZnJvbSAnLi4vd2FzbS1vdXQvdGZqcy1iYWNrZW5kLXdhc20tdGhyZWFkZWQtc2ltZC53b3JrZXIuanMnO1xuaW1wb3J0ICogYXMgd2FzbUZhY3RvcnlfaW1wb3J0IGZyb20gJy4uL3dhc20tb3V0L3RmanMtYmFja2VuZC13YXNtLmpzJztcblxuLy8gVGhpcyB3b3JrYXJvdW5kIGlzIHJlcXVpcmVkIGZvciBpbXBvcnRpbmcgaW4gTm9kZS5qcyB3aXRob3V0IHVzaW5nXG4vLyB0aGUgbm9kZSBidW5kbGUgKGZvciB0ZXN0aW5nKS4gVGhpcyB3b3VsZCBub3QgYmUgbmVjZXNzYXJ5IGlmIHdlXG4vLyBmbGlwcGVkIGVzTW9kdWxlSW50ZXJvcCB0byB0cnVlLCBidXQgd2UgbGlrZWx5IGNhbid0IGRvIHRoYXQgc2luY2Vcbi8vIGdvb2dsZTMgZG9lcyBub3QgdXNlIGl0LlxuY29uc3Qgd2FzbUZhY3RvcnlUaHJlYWRlZFNpbWQgPSAod2FzbUZhY3RvcnlUaHJlYWRlZFNpbWRfaW1wb3J0LmRlZmF1bHQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc21GYWN0b3J5VGhyZWFkZWRTaW1kX2ltcG9ydCkgYXNcbiAgICB0eXBlb2Ygd2FzbUZhY3RvcnlUaHJlYWRlZFNpbWRfaW1wb3J0LmRlZmF1bHQ7XG5jb25zdCB3YXNtRmFjdG9yeSA9ICh3YXNtRmFjdG9yeV9pbXBvcnQuZGVmYXVsdCB8fCB3YXNtRmFjdG9yeV9pbXBvcnQpIGFzXG4gICAgdHlwZW9mIHdhc21GYWN0b3J5X2ltcG9ydC5kZWZhdWx0O1xuXG5pbnRlcmZhY2UgVGVuc29yRGF0YSB7XG4gIGlkOiBudW1iZXI7XG4gIG1lbW9yeU9mZnNldDogbnVtYmVyO1xuICBzaGFwZTogbnVtYmVyW107XG4gIGR0eXBlOiBEYXRhVHlwZTtcbiAgcmVmQ291bnQ6IG51bWJlcjtcbiAgLyoqIE9ubHkgdXNlZCBmb3Igc3RyaW5nIHRlbnNvcnMsIHN0b3JpbmcgZW5jb2RlZCBieXRlcy4gKi9cbiAgc3RyaW5nQnl0ZXM/OiBVaW50OEFycmF5W107XG59XG5cbmV4cG9ydCB0eXBlIERhdGFJZCA9IG9iamVjdDsgIC8vIG9iamVjdCBpbnN0ZWFkIG9mIHt9IHRvIGZvcmNlIG5vbi1wcmltaXRpdmUuXG5cbmV4cG9ydCBjbGFzcyBCYWNrZW5kV2FzbSBleHRlbmRzIEtlcm5lbEJhY2tlbmQge1xuICAvLyAwIGlzIHJlc2VydmVkIGZvciBudWxsIGRhdGEgaWRzLlxuICBwcml2YXRlIGRhdGFJZE5leHROdW1iZXIgPSAxO1xuICBkYXRhSWRNYXA6IERhdGFTdG9yYWdlPFRlbnNvckRhdGE+O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB3YXNtOiBCYWNrZW5kV2FzbU1vZHVsZXxCYWNrZW5kV2FzbVRocmVhZGVkU2ltZE1vZHVsZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy53YXNtLnRmanMuaW5pdFdpdGhUaHJlYWRzQ291bnQodGhyZWFkc0NvdW50KTtcbiAgICBhY3R1YWxUaHJlYWRzQ291bnQgPSB0aGlzLndhc20udGZqcy5nZXRUaHJlYWRzQ291bnQoKTtcbiAgICB0aGlzLmRhdGFJZE1hcCA9IG5ldyBEYXRhU3RvcmFnZSh0aGlzLCBlbmdpbmUoKSk7XG4gIH1cblxuICBvdmVycmlkZSB3cml0ZShcbiAgICAgIHZhbHVlczogYmFja2VuZF91dGlsLkJhY2tlbmRWYWx1ZXN8bnVsbCwgc2hhcGU6IG51bWJlcltdLFxuICAgICAgZHR5cGU6IERhdGFUeXBlKTogRGF0YUlkIHtcbiAgICBjb25zdCBkYXRhSWQgPSB7aWQ6IHRoaXMuZGF0YUlkTmV4dE51bWJlcisrfTtcbiAgICB0aGlzLm1vdmUoZGF0YUlkLCB2YWx1ZXMsIHNoYXBlLCBkdHlwZSwgMSk7XG4gICAgcmV0dXJuIGRhdGFJZDtcbiAgfVxuXG4gIG92ZXJyaWRlIG51bURhdGFJZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhSWRNYXAubnVtRGF0YUlkcygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgdGltZShmOiAoKSA9PiB2b2lkKTogUHJvbWlzZTxCYWNrZW5kVGltaW5nSW5mbz4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXRpbC5ub3coKTtcbiAgICBmKCk7XG4gICAgY29uc3Qga2VybmVsTXMgPSB1dGlsLm5vdygpIC0gc3RhcnQ7XG4gICAgcmV0dXJuIHtrZXJuZWxNc307XG4gIH1cblxuICBvdmVycmlkZSBtb3ZlKFxuICAgICAgZGF0YUlkOiBEYXRhSWQsIHZhbHVlczogYmFja2VuZF91dGlsLkJhY2tlbmRWYWx1ZXN8bnVsbCwgc2hhcGU6IG51bWJlcltdLFxuICAgICAgZHR5cGU6IERhdGFUeXBlLCByZWZDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmRhdGFJZE5leHROdW1iZXIrKztcbiAgICBpZiAoZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBzdHJpbmdCeXRlcyA9IHZhbHVlcyBhcyBVaW50OEFycmF5W107XG4gICAgICB0aGlzLmRhdGFJZE1hcC5zZXQoXG4gICAgICAgICAgZGF0YUlkLFxuICAgICAgICAgIHtpZCwgc3RyaW5nQnl0ZXMsIHNoYXBlLCBkdHlwZSwgbWVtb3J5T2Zmc2V0OiBudWxsLCByZWZDb3VudH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICAgIGNvbnN0IG51bUJ5dGVzID0gc2l6ZSAqIHV0aWwuYnl0ZXNQZXJFbGVtZW50KGR0eXBlKTtcblxuICAgIC8vIGA+Pj4gMGAgaXMgbmVlZGVkIGZvciBhYm92ZSAyR0IgYWxsb2NhdGlvbnMgYmVjYXVzZSB3YXNtLl9tYWxsb2MgcmV0dXJuc1xuICAgIC8vIGEgc2lnbmVkIGludDMyIGluc3RlYWQgb2YgYW4gdW5zaWduZWQgaW50MzIuXG4gICAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy80Z2Itd2FzbS1tZW1vcnlcbiAgICBjb25zdCBtZW1vcnlPZmZzZXQgPSB0aGlzLndhc20uX21hbGxvYyhudW1CeXRlcykgPj4+IDA7XG5cbiAgICB0aGlzLmRhdGFJZE1hcC5zZXQoZGF0YUlkLCB7aWQsIG1lbW9yeU9mZnNldCwgc2hhcGUsIGR0eXBlLCByZWZDb3VudH0pO1xuXG4gICAgdGhpcy53YXNtLnRmanMucmVnaXN0ZXJUZW5zb3IoaWQsIHNpemUsIG1lbW9yeU9mZnNldCk7XG5cbiAgICBpZiAodmFsdWVzICE9IG51bGwpIHtcbiAgICAgIHRoaXMud2FzbS5IRUFQVTguc2V0KFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgICAodmFsdWVzIGFzIGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5KS5idWZmZXIsXG4gICAgICAgICAgICAgICh2YWx1ZXMgYXMgYmFja2VuZF91dGlsLlR5cGVkQXJyYXkpLmJ5dGVPZmZzZXQsIG51bUJ5dGVzKSxcbiAgICAgICAgICBtZW1vcnlPZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWQoZGF0YUlkOiBEYXRhSWQpOiBQcm9taXNlPGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFN5bmMoZGF0YUlkKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlYWRTeW5jKGRhdGFJZDogRGF0YUlkLCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTpcbiAgICAgIGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzIHtcbiAgICBjb25zdCB7bWVtb3J5T2Zmc2V0LCBkdHlwZSwgc2hhcGUsIHN0cmluZ0J5dGVzfSA9XG4gICAgICAgIHRoaXMuZGF0YUlkTWFwLmdldChkYXRhSWQpO1xuICAgIGlmIChkdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFNsaWNlIGFsbCBlbGVtZW50cy5cbiAgICAgIGlmICgoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PT0gMCkgJiZcbiAgICAgICAgICAoZW5kID09IG51bGwgfHwgZW5kID49IHN0cmluZ0J5dGVzLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ0J5dGVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZ0J5dGVzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgZW5kID0gZW5kIHx8IHV0aWwuc2l6ZUZyb21TaGFwZShzaGFwZSk7XG4gICAgY29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gdXRpbC5ieXRlc1BlckVsZW1lbnQoZHR5cGUpO1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy53YXNtLkhFQVBVOC5zbGljZShcbiAgICAgICAgbWVtb3J5T2Zmc2V0ICsgc3RhcnQgKiBieXRlc1BlckVsZW1lbnQsXG4gICAgICAgIG1lbW9yeU9mZnNldCArIGVuZCAqIGJ5dGVzUGVyRWxlbWVudCk7XG4gICAgcmV0dXJuIHR5cGVkQXJyYXlGcm9tQnVmZmVyKGJ5dGVzLmJ1ZmZlciwgZHR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIG1lbW9yeSBpZiB0aGUgZGF0YUlkIGhhcyAwIHJlZkNvdW50LiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWVtb3J5XG4gICAqIGlzIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwYXJhbSBkYXRhSWRcbiAgICogQG9hcmFtIGZvcmNlIE9wdGlvbmFsLCByZW1vdmUgdGhlIGRhdGEgcmVnYXJkbGVzcyBvZiByZWZDb3VudFxuICAgKi9cbiAgb3ZlcnJpZGUgZGlzcG9zZURhdGEoZGF0YUlkOiBEYXRhSWQsIGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kYXRhSWRNYXAuaGFzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFJZE1hcC5nZXQoZGF0YUlkKTtcbiAgICAgIGRhdGEucmVmQ291bnQtLTtcbiAgICAgIGlmICghZm9yY2UgJiYgZGF0YS5yZWZDb3VudCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndhc20uX2ZyZWUoZGF0YS5tZW1vcnlPZmZzZXQpO1xuICAgICAgdGhpcy53YXNtLnRmanMuZGlzcG9zZURhdGEoZGF0YS5pZCk7XG4gICAgICB0aGlzLmRhdGFJZE1hcC5kZWxldGUoZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogUmV0dXJuIHJlZkNvdW50IG9mIGEgYFRlbnNvckRhdGFgLiAqL1xuICBvdmVycmlkZSByZWZDb3VudChkYXRhSWQ6IERhdGFJZCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZGF0YUlkTWFwLmhhcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCB0ZW5zb3JEYXRhID0gdGhpcy5kYXRhSWRNYXAuZ2V0KGRhdGFJZCk7XG4gICAgICByZXR1cm4gdGVuc29yRGF0YS5yZWZDb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBvdmVycmlkZSBpbmNSZWYoZGF0YUlkOiBEYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhSWRNYXAuZ2V0KGRhdGFJZCk7XG4gICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgZGF0YS5yZWZDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGZsb2F0UHJlY2lzaW9uKCk6IDMyIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtZW1vcnkgb2Zmc2V0IG9mIGEgdGVuc29yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgdW5pdFxuICAvLyB0ZXN0aW5nLlxuICBnZXRNZW1vcnlPZmZzZXQoZGF0YUlkOiBEYXRhSWQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFJZE1hcC5nZXQoZGF0YUlkKS5tZW1vcnlPZmZzZXQ7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCkge1xuICAgIHRoaXMud2FzbS50ZmpzLmRpc3Bvc2UoKTtcbiAgICBpZiAoJ1BUaHJlYWQnIGluIHRoaXMud2FzbSkge1xuICAgICAgdGhpcy53YXNtLlBUaHJlYWQudGVybWluYXRlQWxsVGhyZWFkcygpO1xuICAgIH1cbiAgICB0aGlzLndhc20gPSBudWxsO1xuICB9XG5cbiAgb3ZlcnJpZGUgbWVtb3J5KCkge1xuICAgIHJldHVybiB7dW5yZWxpYWJsZTogZmFsc2V9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSB0ZW5zb3IgaW5mbyBmb3IgdGhlIG91dHB1dCBvZiBhbiBvcC4gSWYgYG1lbW9yeU9mZnNldGAgaXMgbm90XG4gICAqIHByZXNlbnQsIHRoaXMgbWV0aG9kIGFsbG9jYXRlcyBtZW1vcnkgb24gdGhlIFdBU00gaGVhcC4gSWYgYG1lbW9yeU9mZnNldGBcbiAgICogaXMgcHJlc2VudCwgdGhlIG1lbW9yeSB3YXMgYWxsb2NhdGVkIGVsc2V3aGVyZSAoaW4gYysrKSBhbmQgd2UganVzdCByZWNvcmRcbiAgICogdGhlIHBvaW50ZXIgd2hlcmUgdGhhdCBtZW1vcnkgbGl2ZXMuXG4gICAqL1xuICBtYWtlT3V0cHV0KFxuICAgICAgc2hhcGU6IG51bWJlcltdLCBkdHlwZTogRGF0YVR5cGUsIG1lbW9yeU9mZnNldD86IG51bWJlcixcbiAgICAgIHZhbHVlcz86IGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzKTogVGVuc29ySW5mbyB7XG4gICAgbGV0IGRhdGFJZDoge307XG4gICAgaWYgKG1lbW9yeU9mZnNldCA9PSBudWxsKSB7XG4gICAgICBkYXRhSWQgPSB0aGlzLndyaXRlKHZhbHVlcyA/PyBudWxsLCBzaGFwZSwgZHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZGF0YUlkTmV4dE51bWJlcisrO1xuICAgICAgZGF0YUlkID0ge2lkfTtcbiAgICAgIHRoaXMuZGF0YUlkTWFwLnNldChkYXRhSWQsIHtpZCwgbWVtb3J5T2Zmc2V0LCBzaGFwZSwgZHR5cGUsIHJlZkNvdW50OiAxfSk7XG4gICAgICBjb25zdCBzaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKTtcbiAgICAgIHRoaXMud2FzbS50ZmpzLnJlZ2lzdGVyVGVuc29yKGlkLCBzaXplLCBtZW1vcnlPZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4ge2RhdGFJZCwgc2hhcGUsIGR0eXBlfTtcbiAgfVxuXG4gIHR5cGVkQXJyYXlGcm9tSGVhcCh7c2hhcGUsIGR0eXBlLCBkYXRhSWR9OiBUZW5zb3JJbmZvKTpcbiAgICAgIGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5IHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLndhc20uSEVBUFU4LmJ1ZmZlcjtcbiAgICBjb25zdCB7bWVtb3J5T2Zmc2V0fSA9IHRoaXMuZGF0YUlkTWFwLmdldChkYXRhSWQpO1xuICAgIGNvbnN0IHNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoc2hhcGUpO1xuICAgIHN3aXRjaCAoZHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Zsb2F0MzInOlxuICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG1lbW9yeU9mZnNldCwgc2l6ZSk7XG4gICAgICBjYXNlICdpbnQzMic6XG4gICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheShidWZmZXIsIG1lbW9yeU9mZnNldCwgc2l6ZSk7XG4gICAgICBjYXNlICdib29sJzpcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgbWVtb3J5T2Zmc2V0LCBzaXplKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkdHlwZSAke2R0eXBlfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW50aWF0ZVdhc21GdW5jKHBhdGg6IHN0cmluZykge1xuICAvLyB0aGlzIHdpbGwgYmUgcmVwbGFjZSBieSByb2xsdXAgcGx1Z2luIHBhdGNoV2VjaGF0V2ViQXNzZW1ibHkgaW5cbiAgLy8gbWlucHJvZ3JhbSdzIG91dHB1dC5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICByZXR1cm4gKGltcG9ydHM6IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuICAgIHV0aWwuZmV0Y2gocGF0aCwge2NyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmICghcmVzcG9uc2VbJ29rJ10pIHtcbiAgICAgICAgaW1wb3J0cy5lbnYuYShgZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnJHtwYXRofSdgKTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLmFycmF5QnVmZmVyKCkudGhlbihiaW5hcnkgPT4ge1xuICAgICAgICBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW5hcnksIGltcG9ydHMpLnRoZW4ob3V0cHV0ID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhvdXRwdXQuaW5zdGFuY2UsIG91dHB1dC5tb2R1bGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7fTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBXQVNNIGJpbmFyeS5cbiAqIEBwYXJhbSBzaW1kU3VwcG9ydGVkIHdoZXRoZXIgU0lNRCBpcyBzdXBwb3J0ZWRcbiAqIEBwYXJhbSB0aHJlYWRzU3VwcG9ydGVkIHdoZXRoZXIgbXVsdGl0aHJlYWRpbmcgaXMgc3VwcG9ydGVkXG4gKiBAcGFyYW0gd2FzbU1vZHVsZUZvbGRlciB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIFdBU00gYmluYXJpZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhUb1dhc21CaW5hcnkoXG4gICAgc2ltZFN1cHBvcnRlZDogYm9vbGVhbiwgdGhyZWFkc1N1cHBvcnRlZDogYm9vbGVhbixcbiAgICB3YXNtTW9kdWxlRm9sZGVyOiBzdHJpbmcpIHtcbiAgaWYgKHdhc21QYXRoICE9IG51bGwpIHtcbiAgICAvLyBJZiB3YXNtUGF0aCBpcyBkZWZpbmVkLCB0aGUgdXNlciBoYXMgc3VwcGxpZWQgYSBmdWxsIHBhdGggdG9cbiAgICAvLyB0aGUgdmFuaWxsYSAud2FzbSBiaW5hcnkuXG4gICAgcmV0dXJuIHdhc21QYXRoO1xuICB9XG5cbiAgbGV0IHBhdGg6IFdhc21CaW5hcnlOYW1lID0gJ3RmanMtYmFja2VuZC13YXNtLndhc20nO1xuICBpZiAoc2ltZFN1cHBvcnRlZCAmJiB0aHJlYWRzU3VwcG9ydGVkKSB7XG4gICAgcGF0aCA9ICd0ZmpzLWJhY2tlbmQtd2FzbS10aHJlYWRlZC1zaW1kLndhc20nO1xuICB9IGVsc2UgaWYgKHNpbWRTdXBwb3J0ZWQpIHtcbiAgICBwYXRoID0gJ3RmanMtYmFja2VuZC13YXNtLXNpbWQud2FzbSc7XG4gIH1cblxuICBpZiAod2FzbUZpbGVNYXAgIT0gbnVsbCkge1xuICAgIGlmICh3YXNtRmlsZU1hcFtwYXRoXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gd2FzbUZpbGVNYXBbcGF0aF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdhc21Nb2R1bGVGb2xkZXIgKyBwYXRoO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSB3YXNtIG1vZHVsZSBhbmQgY3JlYXRlcyB0aGUganMgPC0tPiB3YXNtIGJyaWRnZS5cbiAqXG4gKiBOT1RFOiBXZSB3cmFwIHRoZSB3YXNtIG1vZHVsZSBpbiBhIG9iamVjdCB3aXRoIHByb3BlcnR5ICd3YXNtJyBpbnN0ZWFkIG9mXG4gKiByZXR1cm5pbmcgUHJvbWlzZTxCYWNrZW5kV2FzbU1vZHVsZT4gdG8gYXZvaWQgZnJlZXppbmcgQ2hyb21lIChsYXN0IHRlc3RlZFxuICogaW4gQ2hyb21lIDc2KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXQoKTogUHJvbWlzZTx7d2FzbTogQmFja2VuZFdhc21Nb2R1bGV9PiB7XG4gIGNvbnN0IFtzaW1kU3VwcG9ydGVkLCB0aHJlYWRzU3VwcG9ydGVkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBlbnYoKS5nZXRBc3luYygnV0FTTV9IQVNfU0lNRF9TVVBQT1JUJyksXG4gICAgZW52KCkuZ2V0QXN5bmMoJ1dBU01fSEFTX01VTFRJVEhSRUFEX1NVUFBPUlQnKVxuICBdKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZhY3RvcnlDb25maWc6IFdhc21GYWN0b3J5Q29uZmlnID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgRW1zY3JpcHRlbiBtb2R1bGUgbG9jYXRlRmlsZSB1dGlsaXR5LlxuICAgICAqIEBwYXJhbSBwYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgbmVlZHMgdG8gYmUgbG9hZGVkLlxuICAgICAqIEBwYXJhbSBwcmVmaXggVGhlIHBhdGggdG8gdGhlIG1haW4gSmF2YVNjcmlwdCBmaWxlJ3MgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGZhY3RvcnlDb25maWcubG9jYXRlRmlsZSA9IChwYXRoLCBwcmVmaXgpID0+IHtcbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKCcud29ya2VyLmpzJykpIHtcbiAgICAgICAgLy8gRXNjYXBlICdcXG4nIGJlY2F1c2UgQmxvYiB3aWxsIHR1cm4gaXQgaW50byBhIG5ld2xpbmUuXG4gICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhIHNldHRpbmcgZm9yIHRoaXMsIGJ1dCAnZW5kaW5nczogXCJuYXRpdmVcIicgZG9lc1xuICAgICAgICAvLyBub3Qgc2VlbSB0byB3b3JrLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9ICh3YXNtV29ya2VyQ29udGVudHMgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJyk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnfSk7XG4gICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF0aC5lbmRzV2l0aCgnLndhc20nKSkge1xuICAgICAgICByZXR1cm4gZ2V0UGF0aFRvV2FzbUJpbmFyeShcbiAgICAgICAgICAgIHNpbWRTdXBwb3J0ZWQgYXMgYm9vbGVhbiwgdGhyZWFkc1N1cHBvcnRlZCBhcyBib29sZWFuLFxuICAgICAgICAgICAgd2FzbVBhdGhQcmVmaXggIT0gbnVsbCA/IHdhc21QYXRoUHJlZml4IDogcHJlZml4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmVmaXggKyBwYXRoO1xuICAgIH07XG5cbiAgICAvLyBVc2UgdGhlIGluc3RhbnRpYXRlV2FzbSBvdmVycmlkZSB3aGVuIHN5c3RlbSBmZXRjaCBpcyBub3QgYXZhaWxhYmxlLlxuICAgIC8vIFJlZmVyZW5jZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vYmxvYi8yYmNhMDgzY2JiZDVhNDEzM2RiNjFmYmQ3NGQwNGY3ZmVlY2ZhOTA3L3Rlc3RzL21hbnVhbF93YXNtX2luc3RhbnRpYXRlLmh0bWwjTDE3MFxuICAgIGlmIChjdXN0b21GZXRjaCkge1xuICAgICAgZmFjdG9yeUNvbmZpZy5pbnN0YW50aWF0ZVdhc20gPVxuICAgICAgICAgIGNyZWF0ZUluc3RhbnRpYXRlV2FzbUZ1bmMoZ2V0UGF0aFRvV2FzbUJpbmFyeShcbiAgICAgICAgICAgICAgc2ltZFN1cHBvcnRlZCBhcyBib29sZWFuLCB0aHJlYWRzU3VwcG9ydGVkIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgIHdhc21QYXRoUHJlZml4ICE9IG51bGwgPyB3YXNtUGF0aFByZWZpeCA6ICcnKSk7XG4gICAgfVxuXG4gICAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgZmFjdG9yeUNvbmZpZy5vbkFib3J0ID0gKCkgPT4ge1xuICAgICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICAgIC8vIEVtc2NyaXB0ZW4gYWxyZWFkeSBjYWxsZWQgY29uc29sZS53YXJuIHNvIG5vIG5lZWQgdG8gZG91YmxlIGxvZy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGluaXRBYm9ydGVkKSB7XG4gICAgICAgIC8vIEVtc2NyaXB0ZW4gY2FsbHMgYG9uQWJvcnRgIHR3aWNlLCByZXN1bHRpbmcgaW4gZG91YmxlIGVycm9yXG4gICAgICAgIC8vIG1lc3NhZ2VzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbml0QWJvcnRlZCA9IHRydWU7XG4gICAgICBjb25zdCByZWplY3RNc2cgPVxuICAgICAgICAgICdNYWtlIHN1cmUgdGhlIHNlcnZlciBjYW4gc2VydmUgdGhlIGAud2FzbWAgZmlsZSByZWxhdGl2ZSB0byB0aGUgJyArXG4gICAgICAgICAgJ2J1bmRsZWQganMgZmlsZS4gRm9yIG1vcmUgZGV0YWlscyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGZqcy9ibG9iL21hc3Rlci90ZmpzLWJhY2tlbmQtd2FzbS9SRUFETUUubWQjdXNpbmctYnVuZGxlcnMnO1xuICAgICAgcmVqZWN0KHttZXNzYWdlOiByZWplY3RNc2d9KTtcbiAgICB9O1xuXG4gICAgbGV0IHdhc206IFByb21pc2U8QmFja2VuZFdhc21Nb2R1bGU+O1xuICAgIC8vIElmIGB3YXNtUGF0aGAgaGFzIGJlZW4gZGVmaW5lZCB3ZSBtdXN0IGluaXRpYWxpemUgdGhlIHZhbmlsbGEgbW9kdWxlLlxuICAgIGlmICh0aHJlYWRzU3VwcG9ydGVkICYmIHNpbWRTdXBwb3J0ZWQgJiYgd2FzbVBhdGggPT0gbnVsbCkge1xuICAgICAgZmFjdG9yeUNvbmZpZy5tYWluU2NyaXB0VXJsT3JCbG9iID0gbmV3IEJsb2IoXG4gICAgICAgICAgW2B2YXIgV2FzbUJhY2tlbmRNb2R1bGVUaHJlYWRlZFNpbWQgPSBgICtcbiAgICAgICAgICAgd2FzbUZhY3RvcnlUaHJlYWRlZFNpbWQudG9TdHJpbmcoKV0sXG4gICAgICAgICAge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XG4gICAgICB3YXNtID0gd2FzbUZhY3RvcnlUaHJlYWRlZFNpbWQoZmFjdG9yeUNvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSB3YXNtRmFjdG9yeSB3b3JrcyBmb3IgYm90aCB2YW5pbGxhIGFuZCBTSU1EIGJpbmFyaWVzLlxuICAgICAgd2FzbSA9IHdhc21GYWN0b3J5KGZhY3RvcnlDb25maWcpO1xuICAgIH1cblxuICAgIC8vIFRoZSBgd2FzbWAgcHJvbWlzZSB3aWxsIHJlc29sdmUgdG8gdGhlIFdBU00gbW9kdWxlIGNyZWF0ZWQgYnlcbiAgICAvLyB0aGUgZmFjdG9yeSwgYnV0IGl0IG1pZ2h0IGhhdmUgaGFkIGVycm9ycyBkdXJpbmcgY3JlYXRpb24uIE1vc3RcbiAgICAvLyBlcnJvcnMgYXJlIGNhdWdodCBieSB0aGUgb25BYm9ydCBjYWxsYmFjayBkZWZpbmVkIGFib3ZlLlxuICAgIC8vIEhvd2V2ZXIsIHNvbWUgZXJyb3JzLCBzdWNoIGFzIHRob3NlIG9jY3VycmluZyBmcm9tIGFcbiAgICAvLyBmYWlsZWQgZmV0Y2gsIHJlc3VsdCBpbiB0aGlzIHByb21pc2UgYmVpbmcgcmVqZWN0ZWQuIFRoZXNlIGFyZVxuICAgIC8vIGNhdWdodCBhbmQgcmUtcmVqZWN0ZWQgYmVsb3cuXG4gICAgd2FzbS50aGVuKChtb2R1bGUpID0+IHtcbiAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgaW5pdEFib3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IHZvaWRSZXR1cm5UeXBlOiBzdHJpbmcgPSBudWxsO1xuICAgICAgICAgIC8vIFVzaW5nIHRoZSB0ZmpzIG5hbWVzcGFjZSB0byBhdm9pZCBjb25mbGljdCB3aXRoIGVtc2NyaXB0ZW4ncyBBUEkuXG4gICAgICAgICAgbW9kdWxlLnRmanMgPSB7XG4gICAgICAgICAgICBpbml0OiBtb2R1bGUuY3dyYXAoJ2luaXQnLCBudWxsLCBbXSksXG4gICAgICAgICAgICBpbml0V2l0aFRocmVhZHNDb3VudDpcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3dyYXAoJ2luaXRfd2l0aF90aHJlYWRzX2NvdW50JywgbnVsbCwgWydudW1iZXInXSksXG4gICAgICAgICAgICBnZXRUaHJlYWRzQ291bnQ6IG1vZHVsZS5jd3JhcCgnZ2V0X3RocmVhZHNfY291bnQnLCAnbnVtYmVyJywgW10pLFxuICAgICAgICAgICAgcmVnaXN0ZXJUZW5zb3I6IG1vZHVsZS5jd3JhcChcbiAgICAgICAgICAgICAgICAncmVnaXN0ZXJfdGVuc29yJywgbnVsbCxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAnbnVtYmVyJywgIC8vIGlkXG4gICAgICAgICAgICAgICAgICAnbnVtYmVyJywgIC8vIHNpemVcbiAgICAgICAgICAgICAgICAgICdudW1iZXInLCAgLy8gbWVtb3J5T2Zmc2V0XG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBkaXNwb3NlRGF0YTpcbiAgICAgICAgICAgICAgICBtb2R1bGUuY3dyYXAoJ2Rpc3Bvc2VfZGF0YScsIHZvaWRSZXR1cm5UeXBlLCBbJ251bWJlciddKSxcbiAgICAgICAgICAgIGRpc3Bvc2U6IG1vZHVsZS5jd3JhcCgnZGlzcG9zZScsIHZvaWRSZXR1cm5UeXBlLCBbXSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJlc29sdmUoe3dhc206IG1vZHVsZX0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlGcm9tQnVmZmVyKFxuICAgIGJ1ZmZlcjogQXJyYXlCdWZmZXIsIGR0eXBlOiBEYXRhVHlwZSk6IGJhY2tlbmRfdXRpbC5UeXBlZEFycmF5IHtcbiAgc3dpdGNoIChkdHlwZSkge1xuICAgIGNhc2UgJ2Zsb2F0MzInOlxuICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyKTtcbiAgICBjYXNlICdpbnQzMic6XG4gICAgICByZXR1cm4gbmV3IEludDMyQXJyYXkoYnVmZmVyKTtcbiAgICBjYXNlICdib29sJzpcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZHR5cGUgJHtkdHlwZX1gKTtcbiAgfVxufVxuXG5jb25zdCB3YXNtQmluYXJ5TmFtZXMgPSBbXG4gICd0ZmpzLWJhY2tlbmQtd2FzbS53YXNtJywgJ3RmanMtYmFja2VuZC13YXNtLXNpbWQud2FzbScsXG4gICd0ZmpzLWJhY2tlbmQtd2FzbS10aHJlYWRlZC1zaW1kLndhc20nXG5dIGFzIGNvbnN0IDtcbnR5cGUgV2FzbUJpbmFyeU5hbWUgPSB0eXBlb2Ygd2FzbUJpbmFyeU5hbWVzW251bWJlcl07XG5cbmxldCB3YXNtUGF0aDogc3RyaW5nID0gbnVsbDtcbmxldCB3YXNtUGF0aFByZWZpeDogc3RyaW5nID0gbnVsbDtcbmxldCB3YXNtRmlsZU1hcDoge1trZXkgaW4gV2FzbUJpbmFyeU5hbWVdPzogc3RyaW5nfSA9IHt9O1xubGV0IGluaXRBYm9ydGVkID0gZmFsc2U7XG5sZXQgY3VzdG9tRmV0Y2ggPSBmYWxzZTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHNldFdhc21QYXRoc2AgaW5zdGVhZC5cbiAqIFNldHMgdGhlIHBhdGggdG8gdGhlIGAud2FzbWAgZmlsZSB3aGljaCB3aWxsIGJlIGZldGNoZWQgd2hlbiB0aGUgd2FzbVxuICogYmFja2VuZCBpcyBpbml0aWFsaXplZC4gU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzL2Jsb2IvbWFzdGVyL3RmanMtYmFja2VuZC13YXNtL1JFQURNRS5tZCN1c2luZy1idW5kbGVyc1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSBwYXRoIHdhc20gZmlsZSBwYXRoIG9yIHVybFxuICogQHBhcmFtIHVzZVBsYXRmb3JtRmV0Y2ggb3B0aW9uYWwgYm9vbGVhbiB0byB1c2UgcGxhdGZvcm0gZmV0Y2ggdG8gZG93bmxvYWRcbiAqICAgICB0aGUgd2FzbSBmaWxlLCBkZWZhdWx0IHRvIGZhbHNlLlxuICpcbiAqIEBkb2Mge2hlYWRpbmc6ICdFbnZpcm9ubWVudCcsIG5hbWVzcGFjZTogJ3dhc20nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0V2FzbVBhdGgocGF0aDogc3RyaW5nLCB1c2VQbGF0Zm9ybUZldGNoID0gZmFsc2UpOiB2b2lkIHtcbiAgZGVwcmVjYXRpb25XYXJuKFxuICAgICAgJ3NldFdhc21QYXRoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc2V0V2FzbVBhdGhzIGFuZCcgK1xuICAgICAgJyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4nKTtcbiAgaWYgKGluaXRBYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIFdBU00gYmFja2VuZCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gTWFrZSBzdXJlIHlvdSBjYWxsICcgK1xuICAgICAgICAnYHNldFdhc21QYXRoKClgIGJlZm9yZSB5b3UgY2FsbCBgdGYuc2V0QmFja2VuZCgpYCBvciBgdGYucmVhZHkoKWAnKTtcbiAgfVxuICB3YXNtUGF0aCA9IHBhdGg7XG4gIGN1c3RvbUZldGNoID0gdXNlUGxhdGZvcm1GZXRjaDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBsb2NhdGlvbnMgb2YgdGhlIFdBU00gYmluYXJpZXMuXG4gKlxuICogYGBganNcbiAqIHNldFdhc21QYXRocyh7XG4gKiAgJ3RmanMtYmFja2VuZC13YXNtLndhc20nOiAncmVuYW1lZC53YXNtJyxcbiAqICAndGZqcy1iYWNrZW5kLXdhc20tc2ltZC53YXNtJzogJ3JlbmFtZWQtc2ltZC53YXNtJyxcbiAqICAndGZqcy1iYWNrZW5kLXdhc20tdGhyZWFkZWQtc2ltZC53YXNtJzogJ3JlbmFtZWQtdGhyZWFkZWQtc2ltZC53YXNtJ1xuICogfSk7XG4gKiB0Zi5zZXRCYWNrZW5kKCd3YXNtJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcHJlZml4T3JGaWxlTWFwIFRoaXMgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBvYmplY3Q6XG4gKiAgLSAoc3RyaW5nKSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBXQVNNIGJpbmFyaWVzIGFyZSBsb2NhdGVkLlxuICogICAgIE5vdGUgdGhhdCB0aGlzIHByZWZpeCB3aWxsIGJlIHVzZWQgdG8gbG9hZCBlYWNoIGJpbmFyeSAodmFuaWxsYSxcbiAqICAgICBTSU1ELWVuYWJsZWQsIHRocmVhZGluZy1lbmFibGVkLCBldGMuKS5cbiAqICAtIChvYmplY3QpIE1hcHBpbmcgZnJvbSBuYW1lcyBvZiBXQVNNIGJpbmFyaWVzIHRvIGN1c3RvbVxuICogICAgIGZ1bGwgcGF0aHMgc3BlY2lmeWluZyB0aGUgbG9jYXRpb25zIG9mIHRob3NlIGJpbmFyaWVzLiBUaGlzIGlzIHVzZWZ1bCBpZlxuICogICAgIHlvdXIgV0FTTSBiaW5hcmllcyBhcmUgbm90IGFsbCBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgb3IgaWYgeW91clxuICogICAgIFdBU00gYmluYXJpZXMgaGF2ZSBiZWVuIHJlbmFtZWQuXG4gKiBAcGFyYW0gdXNlUGxhdGZvcm1GZXRjaCBvcHRpb25hbCBib29sZWFuIHRvIHVzZSBwbGF0Zm9ybSBmZXRjaCB0byBkb3dubG9hZFxuICogICAgIHRoZSB3YXNtIGZpbGUsIGRlZmF1bHQgdG8gZmFsc2UuXG4gKlxuICogQGRvYyB7aGVhZGluZzogJ0Vudmlyb25tZW50JywgbmFtZXNwYWNlOiAnd2FzbSd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRXYXNtUGF0aHMoXG4gICAgcHJlZml4T3JGaWxlTWFwOiBzdHJpbmd8e1trZXkgaW4gV2FzbUJpbmFyeU5hbWVdPzogc3RyaW5nfSxcbiAgICB1c2VQbGF0Zm9ybUZldGNoID0gZmFsc2UpOiB2b2lkIHtcbiAgaWYgKGluaXRBYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIFdBU00gYmFja2VuZCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gTWFrZSBzdXJlIHlvdSBjYWxsICcgK1xuICAgICAgICAnYHNldFdhc21QYXRocygpYCBiZWZvcmUgeW91IGNhbGwgYHRmLnNldEJhY2tlbmQoKWAgb3IgJyArXG4gICAgICAgICdgdGYucmVhZHkoKWAnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlZml4T3JGaWxlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHdhc21QYXRoUHJlZml4ID0gcHJlZml4T3JGaWxlTWFwO1xuICB9IGVsc2Uge1xuICAgIHdhc21GaWxlTWFwID0gcHJlZml4T3JGaWxlTWFwO1xuICAgIGNvbnN0IG1pc3NpbmdQYXRocyA9XG4gICAgICAgIHdhc21CaW5hcnlOYW1lcy5maWx0ZXIobmFtZSA9PiB3YXNtRmlsZU1hcFtuYW1lXSA9PSBudWxsKTtcbiAgICBpZiAobWlzc2luZ1BhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlcmUgd2VyZSBubyBlbnRyaWVzIGZvdW5kIGZvciB0aGUgZm9sbG93aW5nIGJpbmFyaWVzOiBgICtcbiAgICAgICAgICBgJHttaXNzaW5nUGF0aHMuam9pbignLCcpfS4gUGxlYXNlIGVpdGhlciBjYWxsIHNldFdhc21QYXRocyB3aXRoIGEgYCArXG4gICAgICAgICAgYG1hcCBwcm92aWRpbmcgYSBwYXRoIGZvciBlYWNoIGJpbmFyeSwgb3Igd2l0aCBhIHN0cmluZyBpbmRpY2F0aW5nIGAgK1xuICAgICAgICAgIGB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCB0aGUgYmluYXJpZXMgY2FuIGJlIGZvdW5kLmApO1xuICAgIH1cbiAgfVxuXG4gIGN1c3RvbUZldGNoID0gdXNlUGxhdGZvcm1GZXRjaDtcbn1cblxuLyoqIFVzZWQgaW4gdW5pdCB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldFdhc21QYXRoKCk6IHZvaWQge1xuICB3YXNtUGF0aCA9IG51bGw7XG4gIHdhc21QYXRoUHJlZml4ID0gbnVsbDtcbiAgd2FzbUZpbGVNYXAgPSB7fTtcbiAgY3VzdG9tRmV0Y2ggPSBmYWxzZTtcbiAgaW5pdEFib3J0ZWQgPSBmYWxzZTtcbn1cblxubGV0IHRocmVhZHNDb3VudCA9IC0xO1xubGV0IGFjdHVhbFRocmVhZHNDb3VudCA9IC0xO1xuXG4vKipcbiAqIFNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IFhOTlBBQ0sgdG8gY3JlYXRlXG4gKiB0aHJlYWRwb29sIChkZWZhdWx0IHRvIHRoZSBudW1iZXIgb2YgbG9naWNhbCBDUFUgY29yZXMpLlxuICpcbiAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYHRmLnNldEJhY2tlbmQoJ3dhc20nKWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaHJlYWRzQ291bnQobnVtVGhyZWFkczogbnVtYmVyKSB7XG4gIHRocmVhZHNDb3VudCA9IG51bVRocmVhZHM7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYWN0dWFsIHRocmVhZHMgY291bnQgdGhhdCBpcyB1c2VkIGJ5IFhOTlBBQ0suXG4gKlxuICogSXQgaXMgc2V0IGFmdGVyIHRoZSBiYWNrZW5kIGlzIGludGlhbGl6ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJlYWRzQ291bnQoKTogbnVtYmVyIHtcbiAgaWYgKGFjdHVhbFRocmVhZHNDb3VudCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdBU00gYmFja2VuZCBub3QgaW5pdGlhbGl6ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGFjdHVhbFRocmVhZHNDb3VudDtcbn1cbiJdfQ==","/** @license See the LICENSE file. */\n// This code is auto-generated, do not modify this file!\nconst version = '4.11.0';\nexport { version };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUVyQyx3REFBd0Q7QUFDeEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBTZWUgdGhlIExJQ0VOU0UgZmlsZS4gKi9cblxuLy8gVGhpcyBjb2RlIGlzIGF1dG8tZ2VuZXJhdGVkLCBkbyBub3QgbW9kaWZ5IHRoaXMgZmlsZSFcbmNvbnN0IHZlcnNpb24gPSAnNC4xMS4wJztcbmV4cG9ydCB7dmVyc2lvbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport './flags_wasm';\nimport { registerBackend } from '@tensorflow/tfjs-core';\nimport { BackendWasm, init } from './backend_wasm';\nexport { BackendWasm, getThreadsCount, setThreadsCount, setWasmPath, setWasmPaths } from './backend_wasm';\nexport { version as version_wasm } from './version';\nconst WASM_PRIORITY = 2;\nregisterBackend('wasm', async () => {\n const { wasm } = await init();\n return new BackendWasm(wasm);\n}, WASM_PRIORITY);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC13YXNtL3NyYy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEcsT0FBTyxFQUFDLE9BQU8sSUFBSSxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDakMsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDNUIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCAnLi9mbGFnc193YXNtJztcblxuaW1wb3J0IHtyZWdpc3RlckJhY2tlbmR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc20sIGluaXR9IGZyb20gJy4vYmFja2VuZF93YXNtJztcblxuZXhwb3J0IHtCYWNrZW5kV2FzbSwgZ2V0VGhyZWFkc0NvdW50LCBzZXRUaHJlYWRzQ291bnQsIHNldFdhc21QYXRoLCBzZXRXYXNtUGF0aHN9IGZyb20gJy4vYmFja2VuZF93YXNtJztcbmV4cG9ydCB7dmVyc2lvbiBhcyB2ZXJzaW9uX3dhc219IGZyb20gJy4vdmVyc2lvbic7XG5cbmNvbnN0IFdBU01fUFJJT1JJVFkgPSAyO1xucmVnaXN0ZXJCYWNrZW5kKCd3YXNtJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7d2FzbX0gPSBhd2FpdCBpbml0KCk7XG4gIHJldHVybiBuZXcgQmFja2VuZFdhc20od2FzbSk7XG59LCBXQVNNX1BSSU9SSVRZKTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, buffer, DataStorage, engine, env, kernel_impls, KernelBackend, util } from '@tensorflow/tfjs-core';\nconst whereImpl = kernel_impls.whereImpl;\nimport { assertNotComplex } from './cpu_util';\nclass MathBackendCPU extends KernelBackend {\n nextDataId() {\n return MathBackendCPU.nextDataId++;\n }\n constructor() {\n super();\n this.blockSize = 48;\n this.firstUse = true;\n this.data = new DataStorage(this, engine());\n }\n write(values, shape, dtype) {\n if (this.firstUse) {\n this.firstUse = false;\n if (env().get('IS_NODE')) {\n backend_util.warn('\\n============================\\n' +\n 'Hi, looks like you are running TensorFlow.js in ' +\n 'Node.js. To speed things up dramatically, install our node ' +\n 'backend, visit https://github.com/tensorflow/tfjs-node for more details. ' +\n '\\n============================');\n }\n }\n const dataId = { id: this.nextDataId() };\n this.data.set(dataId, { values, dtype, refCount: 1 });\n return dataId;\n }\n /**\n * Create a data bucket in cpu backend.\n * @param shape Shape of the `TensorInfo`.\n * @param dtype DType of the `TensorInfo`.\n * @param values The value of the `TensorInfo` stored as a flattened array.\n */\n makeTensorInfo(shape, dtype, values) {\n let outId;\n if (dtype === 'string' && values != null && values.length > 0 &&\n util.isString(values[0])) {\n const encodedValues = values.map(d => util.encodeString(d));\n outId = this.write(encodedValues, shape, dtype);\n }\n else {\n outId = this.write(values, shape, dtype);\n }\n return { dataId: outId, shape, dtype };\n }\n /** Return refCount of a `TensorData`. */\n refCount(dataId) {\n if (this.data.has(dataId)) {\n const tensorData = this.data.get(dataId);\n return tensorData.refCount;\n }\n return 0;\n }\n /** Increase refCount of a `TensorData`. */\n incRef(dataId) {\n const tensorData = this.data.get(dataId);\n tensorData.refCount++;\n }\n /** Decrease refCount of a `TensorData`. */\n decRef(dataId) {\n if (this.data.has(dataId)) {\n const tensorData = this.data.get(dataId);\n tensorData.refCount--;\n }\n }\n move(dataId, values, shape, dtype, refCount) {\n this.data.set(dataId, { values, dtype, refCount });\n }\n numDataIds() {\n return this.data.numDataIds();\n }\n async read(dataId) {\n return this.readSync(dataId);\n }\n readSync(dataId) {\n const { dtype, complexTensorInfos } = this.data.get(dataId);\n if (dtype === 'complex64') {\n const realValues = this.readSync(complexTensorInfos.real.dataId);\n const imagValues = this.readSync(complexTensorInfos.imag.dataId);\n return backend_util.mergeRealAndImagArrays(realValues, imagValues);\n }\n return util.convertBackendValuesAndArrayBuffer(this.data.get(dataId).values, dtype);\n }\n bufferSync(t) {\n const data = this.readSync(t.dataId);\n if (t.dtype === 'string') {\n try {\n // Decode the bytes into string.\n const strings = data.map(d => util.decodeString(d));\n return buffer(t.shape, t.dtype, strings);\n }\n catch (_a) {\n throw new Error('Failed to decode encoded string bytes into utf-8');\n }\n }\n return buffer(t.shape, t.dtype, data);\n }\n makeOutput(values, shape, dtype) {\n return engine().makeTensorFromTensorInfo(this.makeTensorInfo(shape, dtype, values), this);\n }\n /**\n * Dispose the memory if the dataId has 0 refCount. Return true if the memory\n * is released or memory is not managed in this backend, false if memory is\n * not cleared.\n * @param dataId\n * @oaram force Optional, remove the data regardless of refCount\n */\n disposeData(dataId, force = false) {\n if (this.data.has(dataId)) {\n this.data.get(dataId).refCount--;\n if (!force && this.data.get(dataId).refCount > 0) {\n return false;\n }\n const { complexTensorInfos } = this.data.get(dataId);\n if (complexTensorInfos != null) {\n this.disposeData(complexTensorInfos.real.dataId, true);\n this.disposeData(complexTensorInfos.imag.dataId, true);\n }\n this.data.delete(dataId);\n }\n return true;\n }\n disposeIntermediateTensorInfo(tensorInfo) {\n this.disposeData(tensorInfo.dataId);\n }\n async time(f) {\n const start = util.now();\n f();\n const kernelMs = util.now() - start;\n return { kernelMs };\n }\n memory() {\n return {\n // Unreliable due to automatic gc. The numbers above are cumulative.\n unreliable: true,\n reasons: ['The reported memory is an upper bound. Due to automatic garbage ' +\n 'collection, the true allocated memory may be less.']\n };\n }\n where(condition) {\n assertNotComplex([condition], 'where');\n const condVals = this.readSync(condition.dataId);\n return whereImpl(condition.shape, condVals);\n }\n dispose() { }\n floatPrecision() {\n return 32;\n }\n /** Returns the smallest representable number. */\n epsilon() {\n return super.epsilon();\n }\n}\nMathBackendCPU.nextDataId = 0;\nexport { MathBackendCPU };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF9jcHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9iYWNrZW5kX2NwdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFxQixNQUFNLEVBQUUsV0FBVyxFQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBMEUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFN04sTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFnQjVDLE1BQWEsY0FBZSxTQUFRLGFBQWE7SUFNdkMsVUFBVTtRQUNoQixPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQVZILGNBQVMsR0FBRyxFQUFFLENBQUM7UUFHZCxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBUXRCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVRLEtBQUssQ0FDVixNQUFrQyxFQUFFLEtBQWUsRUFDbkQsS0FBZTtRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQ2Isa0NBQWtDO29CQUNsQyxrREFBa0Q7b0JBQ2xELDZEQUE2RDtvQkFDN0QsMkVBQTJFO29CQUMzRSxnQ0FBZ0MsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7UUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFD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QUFLLENBQUM7UUFDcEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxDQUFDO0lBQ3BCLENBQUM7SUFFUSxNQUFNO1FBQ2IsT0FBTztZQUNMLG9FQUFvRTtZQUNwRSxVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQ0gsQ0FBQyxrRUFBa0U7b0JBQ2xFLG9EQUFvRCxDQUFDO1NBQzNELENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQWlCO1FBQ3JCLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFlLENBQUM7UUFDL0QsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVEsT0FBTyxLQUFJLENBQUM7SUFFWixjQUFjO1FBQ3JCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGtEQUFrRDtJQUN6QyxPQUFPO1FBQ2QsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQzs7QUE5TGMseUJBQVUsR0FBRyxDQUFDLEFBQUosQ0FBSztTQUxuQixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQmFja2VuZFRpbWluZ0luZm8sIGJ1ZmZlciwgRGF0YVN0b3JhZ2UsIERhdGFUeXBlLCBlbmdpbmUsIGVudiwga2VybmVsX2ltcGxzLCBLZXJuZWxCYWNrZW5kLCBSYW5rLCBTaGFwZU1hcCwgVGVuc29yLCBUZW5zb3IyRCwgVGVuc29yQnVmZmVyLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5jb25zdCB3aGVyZUltcGwgPSBrZXJuZWxfaW1wbHMud2hlcmVJbXBsO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuL2NwdV91dGlsJztcblxuaW50ZXJmYWNlIERhdGFJZCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbnNvckRhdGE8RCBleHRlbmRzIERhdGFUeXBlPiB7XG4gIHZhbHVlcz86IGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzO1xuICBkdHlwZTogRDtcbiAgLy8gRm9yIGNvbXBsZXggbnVtYmVycywgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBhcmUgc3RvcmVkIGFzIHRoZWlyIG93blxuICAvLyBpbmRpdmlkdWFsIHRlbnNvcnMsIHdpdGggYSBwYXJlbnQgam9pbmluZyB0aGUgdHdvIHdpdGggdGhlXG4gIC8vIGNvbXBsZXhUZW5zb3JJbmZvcyBmaWVsZC5cbiAgY29tcGxleFRlbnNvckluZm9zPzoge3JlYWw6IFRlbnNvckluZm8sIGltYWc6IFRlbnNvckluZm99O1xuICAvLyByZWZDb3VudCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0ZW5zb3JzIHJlZmVyZW5jZSBpdC4gVXNlZCBmb3IgbWVtb3J5XG4gIC8vIG1hbmFnZW1lbnQuXG4gIHJlZkNvdW50OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRoQmFja2VuZENQVSBleHRlbmRzIEtlcm5lbEJhY2tlbmQge1xuICBwdWJsaWMgYmxvY2tTaXplID0gNDg7XG5cbiAgZGF0YTogRGF0YVN0b3JhZ2U8VGVuc29yRGF0YTxEYXRhVHlwZT4+O1xuICBwcml2YXRlIGZpcnN0VXNlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dERhdGFJZCA9IDA7XG4gIHByaXZhdGUgbmV4dERhdGFJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoQmFja2VuZENQVS5uZXh0RGF0YUlkKys7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGF0YSA9IG5ldyBEYXRhU3RvcmFnZSh0aGlzLCBlbmdpbmUoKSk7XG4gIH1cblxuICBvdmVycmlkZSB3cml0ZShcbiAgICAgIHZhbHVlczogYmFja2VuZF91dGlsLkJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSxcbiAgICAgIGR0eXBlOiBEYXRhVHlwZSk6IERhdGFJZCB7XG4gICAgaWYgKHRoaXMuZmlyc3RVc2UpIHtcbiAgICAgIHRoaXMuZmlyc3RVc2UgPSBmYWxzZTtcbiAgICAgIGlmIChlbnYoKS5nZXQoJ0lTX05PREUnKSkge1xuICAgICAgICBiYWNrZW5kX3V0aWwud2FybihcbiAgICAgICAgICAgICdcXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuJyArXG4gICAgICAgICAgICAnSGksIGxvb2tzIGxpa2UgeW91IGFyZSBydW5uaW5nIFRlbnNvckZsb3cuanMgaW4gJyArXG4gICAgICAgICAgICAnTm9kZS5qcy4gVG8gc3BlZWQgdGhpbmdzIHVwIGRyYW1hdGljYWxseSwgaW5zdGFsbCBvdXIgbm9kZSAnICtcbiAgICAgICAgICAgICdiYWNrZW5kLCB2aXNpdCBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZmpzLW5vZGUgZm9yIG1vcmUgZGV0YWlscy4gJyArXG4gICAgICAgICAgICAnXFxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkYXRhSWQgPSB7aWQ6IHRoaXMubmV4dERhdGFJZCgpfTtcblxuICAgIHRoaXMuZGF0YS5zZXQoZGF0YUlkLCB7dmFsdWVzLCBkdHlwZSwgcmVmQ291bnQ6IDF9KTtcblxuICAgIHJldHVybiBkYXRhSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGF0YSBidWNrZXQgaW4gY3B1IGJhY2tlbmQuXG4gICAqIEBwYXJhbSBzaGFwZSBTaGFwZSBvZiB0aGUgYFRlbnNvckluZm9gLlxuICAgKiBAcGFyYW0gZHR5cGUgRFR5cGUgb2YgdGhlIGBUZW5zb3JJbmZvYC5cbiAgICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWUgb2YgdGhlIGBUZW5zb3JJbmZvYCBzdG9yZWQgYXMgYSBmbGF0dGVuZWQgYXJyYXkuXG4gICAqL1xuICBtYWtlVGVuc29ySW5mbyhcbiAgICAgIHNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgICAgdmFsdWVzPzogYmFja2VuZF91dGlsLkJhY2tlbmRWYWx1ZXN8c3RyaW5nW10pOiBUZW5zb3JJbmZvIHtcbiAgICBsZXQgb3V0SWQ7XG4gICAgaWYgKGR0eXBlID09PSAnc3RyaW5nJyAmJiB2YWx1ZXMgIT0gbnVsbCAmJiB2YWx1ZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICB1dGlsLmlzU3RyaW5nKHZhbHVlc1swXSkpIHtcbiAgICAgIGNvbnN0IGVuY29kZWRWYWx1ZXMgPVxuICAgICAgICAgICh2YWx1ZXMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkubWFwKGQgPT4gdXRpbC5lbmNvZGVTdHJpbmcoZCkpO1xuXG4gICAgICBvdXRJZCA9IHRoaXMud3JpdGUoZW5jb2RlZFZhbHVlcywgc2hhcGUsIGR0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0SWQgPSB0aGlzLndyaXRlKHZhbHVlcyBhcyBUeXBlZEFycmF5LCBzaGFwZSwgZHR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YUlkOiBvdXRJZCwgc2hhcGUsIGR0eXBlfTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gcmVmQ291bnQgb2YgYSBgVGVuc29yRGF0YWAuICovXG4gIG92ZXJyaWRlIHJlZkNvdW50KGRhdGFJZDogRGF0YUlkKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5kYXRhLmhhcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCB0ZW5zb3JEYXRhID0gdGhpcy5kYXRhLmdldChkYXRhSWQpO1xuICAgICAgcmV0dXJuIHRlbnNvckRhdGEucmVmQ291bnQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIEluY3JlYXNlIHJlZkNvdW50IG9mIGEgYFRlbnNvckRhdGFgLiAqL1xuICBvdmVycmlkZSBpbmNSZWYoZGF0YUlkOiBEYXRhSWQpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW5zb3JEYXRhID0gdGhpcy5kYXRhLmdldChkYXRhSWQpO1xuICAgIHRlbnNvckRhdGEucmVmQ291bnQrKztcbiAgfVxuXG4gIC8qKiBEZWNyZWFzZSByZWZDb3VudCBvZiBhIGBUZW5zb3JEYXRhYC4gKi9cbiAgZGVjUmVmKGRhdGFJZDogRGF0YUlkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5oYXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgdGVuc29yRGF0YSA9IHRoaXMuZGF0YS5nZXQoZGF0YUlkKTtcbiAgICAgIHRlbnNvckRhdGEucmVmQ291bnQtLTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBtb3ZlKFxuICAgICAgZGF0YUlkOiBEYXRhSWQsIHZhbHVlczogYmFja2VuZF91dGlsLkJhY2tlbmRWYWx1ZXMsIHNoYXBlOiBudW1iZXJbXSxcbiAgICAgIGR0eXBlOiBEYXRhVHlwZSwgcmVmQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5zZXQoZGF0YUlkLCB7dmFsdWVzLCBkdHlwZSwgcmVmQ291bnR9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG51bURhdGFJZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm51bURhdGFJZHMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWQoZGF0YUlkOiBEYXRhSWQpOiBQcm9taXNlPGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFN5bmMoZGF0YUlkKTtcbiAgfVxuICBvdmVycmlkZSByZWFkU3luYyhkYXRhSWQ6IERhdGFJZCk6IGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzIHtcbiAgICBjb25zdCB7ZHR5cGUsIGNvbXBsZXhUZW5zb3JJbmZvc30gPSB0aGlzLmRhdGEuZ2V0KGRhdGFJZCk7XG5cbiAgICBpZiAoZHR5cGUgPT09ICdjb21wbGV4NjQnKSB7XG4gICAgICBjb25zdCByZWFsVmFsdWVzID1cbiAgICAgICAgICB0aGlzLnJlYWRTeW5jKGNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsLmRhdGFJZCkgYXMgRmxvYXQzMkFycmF5O1xuICAgICAgY29uc3QgaW1hZ1ZhbHVlcyA9XG4gICAgICAgICAgdGhpcy5yZWFkU3luYyhjb21wbGV4VGVuc29ySW5mb3MuaW1hZy5kYXRhSWQpIGFzIEZsb2F0MzJBcnJheTtcbiAgICAgIHJldHVybiBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhyZWFsVmFsdWVzLCBpbWFnVmFsdWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHV0aWwuY29udmVydEJhY2tlbmRWYWx1ZXNBbmRBcnJheUJ1ZmZlcihcbiAgICAgICAgdGhpcy5kYXRhLmdldChkYXRhSWQpLnZhbHVlcywgZHR5cGUpO1xuICB9XG5cbiAgYnVmZmVyU3luYzxSIGV4dGVuZHMgUmFuaywgRCBleHRlbmRzIERhdGFUeXBlPih0OiBUZW5zb3JJbmZvKTpcbiAgICAgIFRlbnNvckJ1ZmZlcjxSLCBEPiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVhZFN5bmModC5kYXRhSWQpO1xuICAgIGlmICh0LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRGVjb2RlIHRoZSBieXRlcyBpbnRvIHN0cmluZy5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IChkYXRhIGFzIFVpbnQ4QXJyYXlbXSkubWFwKGQgPT4gdXRpbC5kZWNvZGVTdHJpbmcoZCkpO1xuICAgICAgICByZXR1cm4gYnVmZmVyKHQuc2hhcGUgYXMgU2hhcGVNYXBbUl0sIHQuZHR5cGUsIHN0cmluZ3MpIGFzXG4gICAgICAgICAgICBUZW5zb3JCdWZmZXI8UiwgRD47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVjb2RlIGVuY29kZWQgc3RyaW5nIGJ5dGVzIGludG8gdXRmLTgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1ZmZlcih0LnNoYXBlIGFzIFNoYXBlTWFwW1JdLCB0LmR0eXBlLCBkYXRhIGFzIFR5cGVkQXJyYXkpIGFzXG4gICAgICAgIFRlbnNvckJ1ZmZlcjxSLCBEPjtcbiAgfVxuXG4gIG1ha2VPdXRwdXQ8VCBleHRlbmRzIFRlbnNvcj4oXG4gICAgICB2YWx1ZXM6IGJhY2tlbmRfdXRpbC5CYWNrZW5kVmFsdWVzLCBzaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSk6IFQge1xuICAgIHJldHVybiBlbmdpbmUoKS5tYWtlVGVuc29yRnJvbVRlbnNvckluZm8oXG4gICAgICAgICAgICAgICB0aGlzLm1ha2VUZW5zb3JJbmZvKHNoYXBlLCBkdHlwZSwgdmFsdWVzKSwgdGhpcykgYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIHRoZSBtZW1vcnkgaWYgdGhlIGRhdGFJZCBoYXMgMCByZWZDb3VudC4gUmV0dXJuIHRydWUgaWYgdGhlIG1lbW9yeVxuICAgKiBpcyByZWxlYXNlZCBvciBtZW1vcnkgaXMgbm90IG1hbmFnZWQgaW4gdGhpcyBiYWNrZW5kLCBmYWxzZSBpZiBtZW1vcnkgaXNcbiAgICogbm90IGNsZWFyZWQuXG4gICAqIEBwYXJhbSBkYXRhSWRcbiAgICogQG9hcmFtIGZvcmNlIE9wdGlvbmFsLCByZW1vdmUgdGhlIGRhdGEgcmVnYXJkbGVzcyBvZiByZWZDb3VudFxuICAgKi9cbiAgb3ZlcnJpZGUgZGlzcG9zZURhdGEoZGF0YUlkOiBEYXRhSWQsIGZvcmNlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kYXRhLmhhcyhkYXRhSWQpKSB7XG4gICAgICB0aGlzLmRhdGEuZ2V0KGRhdGFJZCkucmVmQ291bnQtLTtcbiAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5kYXRhLmdldChkYXRhSWQpLnJlZkNvdW50ID4gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtjb21wbGV4VGVuc29ySW5mb3N9ID0gdGhpcy5kYXRhLmdldChkYXRhSWQpO1xuXG4gICAgICBpZiAoY29tcGxleFRlbnNvckluZm9zICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlRGF0YShjb21wbGV4VGVuc29ySW5mb3MucmVhbC5kYXRhSWQsIHRydWUpO1xuICAgICAgICB0aGlzLmRpc3Bvc2VEYXRhKGNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnLmRhdGFJZCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YS5kZWxldGUoZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0ZW5zb3JJbmZvOiBUZW5zb3JJbmZvKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwb3NlRGF0YSh0ZW5zb3JJbmZvLmRhdGFJZCk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyB0aW1lKGY6ICgpID0+IHZvaWQpOiBQcm9taXNlPEJhY2tlbmRUaW1pbmdJbmZvPiB7XG4gICAgY29uc3Qgc3RhcnQgPSB1dGlsLm5vdygpO1xuICAgIGYoKTtcbiAgICBjb25zdCBrZXJuZWxNcyA9IHV0aWwubm93KCkgLSBzdGFydDtcbiAgICByZXR1cm4ge2tlcm5lbE1zfTtcbiAgfVxuXG4gIG92ZXJyaWRlIG1lbW9yeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVW5yZWxpYWJsZSBkdWUgdG8gYXV0b21hdGljIGdjLiBUaGUgbnVtYmVycyBhYm92ZSBhcmUgY3VtdWxhdGl2ZS5cbiAgICAgIHVucmVsaWFibGU6IHRydWUsXG4gICAgICByZWFzb25zOlxuICAgICAgICAgIFsnVGhlIHJlcG9ydGVkIG1lbW9yeSBpcyBhbiB1cHBlciBib3VuZC4gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlICcgK1xuICAgICAgICAgICAnY29sbGVjdGlvbiwgdGhlIHRydWUgYWxsb2NhdGVkIG1lbW9yeSBtYXkgYmUgbGVzcy4nXVxuICAgIH07XG4gIH1cblxuICB3aGVyZShjb25kaXRpb246IFRlbnNvcik6IFRlbnNvcjJEIHtcbiAgICBhc3NlcnROb3RDb21wbGV4KFtjb25kaXRpb25dLCAnd2hlcmUnKTtcblxuICAgIGNvbnN0IGNvbmRWYWxzID0gdGhpcy5yZWFkU3luYyhjb25kaXRpb24uZGF0YUlkKSBhcyBUeXBlZEFycmF5O1xuICAgIHJldHVybiB3aGVyZUltcGwoY29uZGl0aW9uLnNoYXBlLCBjb25kVmFscyk7XG4gIH1cblxuICBvdmVycmlkZSBkaXNwb3NlKCkge31cblxuICBvdmVycmlkZSBmbG9hdFByZWNpc2lvbigpOiAxNnwzMiB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyLiAgKi9cbiAgb3ZlcnJpZGUgZXBzaWxvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBzdXBlci5lcHNpbG9uKCk7XG4gIH1cbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/*\n * base.ts contains all the exports from tfjs-backend-cpu\n * without auto-kernel registration\n */\nimport { registerBackend } from '@tensorflow/tfjs-core';\nimport { MathBackendCPU } from './backend_cpu';\nimport * as shared from './shared';\nexport { MathBackendCPU } from './backend_cpu';\nexport { version as version_cpu } from './version';\nexport { shared };\n// Side effects for default initialization of MathBackendCPU\nregisterBackend('cpu', () => new MathBackendCPU(), 1 /* priority */);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7OztHQUdHO0FBQ0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFFbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUMsT0FBTyxJQUFJLFdBQVcsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLENBQUM7QUFFaEIsNERBQTREO0FBQzVELGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbi8qXG4gKiBiYXNlLnRzIGNvbnRhaW5zIGFsbCB0aGUgZXhwb3J0cyBmcm9tIHRmanMtYmFja2VuZC1jcHVcbiAqIHdpdGhvdXQgYXV0by1rZXJuZWwgcmVnaXN0cmF0aW9uXG4gKi9cbmltcG9ydCB7cmVnaXN0ZXJCYWNrZW5kfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQgKiBhcyBzaGFyZWQgZnJvbSAnLi9zaGFyZWQnO1xuXG5leHBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuL2JhY2tlbmRfY3B1JztcbmV4cG9ydCB7dmVyc2lvbiBhcyB2ZXJzaW9uX2NwdX0gZnJvbSAnLi92ZXJzaW9uJztcbmV4cG9ydCB7c2hhcmVkfTtcblxuLy8gU2lkZSBlZmZlY3RzIGZvciBkZWZhdWx0IGluaXRpYWxpemF0aW9uIG9mIE1hdGhCYWNrZW5kQ1BVXG5yZWdpc3RlckJhY2tlbmQoJ2NwdScsICgpID0+IG5ldyBNYXRoQmFja2VuZENQVSgpLCAxIC8qIHByaW9yaXR5ICovKTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Elu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const elu = unaryKernelFunc(Elu, (xi) => xi >= 0 ? xi : (Math.exp(xi) - 1));\nexport const eluConfig = {\n kernelName: Elu,\n backendName: 'cpu',\n kernelFunc: elu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9FbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQ1osZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RWx1LCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBlbHUgPVxuICAgIHVuYXJ5S2VybmVsRnVuYyhFbHUsICh4aSkgPT4geGkgPj0gMCA/IHhpIDogKE1hdGguZXhwKHhpKSAtIDEpKTtcblxuZXhwb3J0IGNvbnN0IGVsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFbHUsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZWx1LFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LeakyRelu, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function leakyRelu(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { alpha } = attrs;\n assertNotComplex([x], 'leakyRelu');\n const xSize = util.sizeFromShape(x.shape);\n const xVals = backend.data.get(x.dataId).values;\n const outVals = util.getTypedArrayFromDType('float32', xSize);\n for (let i = 0; i < xVals.length; i++) {\n outVals[i] = xVals[i] < 0 ? alpha * xVals[i] : xVals[i];\n }\n return backend.makeTensorInfo(x.shape, 'float32', outVals);\n}\nexport const leakyReluConfig = {\n kernelName: LeakyRelu,\n backendName: 'cpu',\n kernelFunc: leakyRelu\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGVha3lSZWx1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9MZWFreVJlbHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixTQUFTLEVBQTJELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pJLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRW5DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RDtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFpQjtJQUMzQyxVQUFVLEVBQUUsU0FBUztJQUNyQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIExlYWt5UmVsdSwgTGVha3lSZWx1QXR0cnMsIExlYWt5UmVsdUlucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWFreVJlbHUoYXJnczoge1xuICBpbnB1dHM6IExlYWt5UmVsdUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBMZWFreVJlbHVBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHthbHBoYX0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KFt4XSwgJ2xlYWt5UmVsdScpO1xuXG4gIGNvbnN0IHhTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpO1xuICBjb25zdCB4VmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBvdXRWYWxzID0gdXRpbC5nZXRUeXBlZEFycmF5RnJvbURUeXBlKCdmbG9hdDMyJywgeFNpemUpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRWYWxzW2ldID0geFZhbHNbaV0gPCAwID8gYWxwaGEgKiB4VmFsc1tpXSA6IHhWYWxzW2ldO1xuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeC5zaGFwZSwgJ2Zsb2F0MzInLCBvdXRWYWxzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGxlYWt5UmVsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMZWFreVJlbHUsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbGVha3lSZWx1IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Prelu } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nconst preluImpl = createSimpleBinaryKernelImpl((xValue, aValue) => xValue < 0 ? aValue * xValue : xValue);\nexport function prelu(args) {\n const { inputs, backend } = args;\n const { x, alpha } = inputs;\n assertNotComplex([x, alpha], 'prelu');\n const aVals = backend.data.get(x.dataId).values;\n const bVals = backend.data.get(alpha.dataId).values;\n const [resultData, resultShape] = preluImpl(x.shape, alpha.shape, aVals, bVals, 'float32');\n return backend.makeTensorInfo(resultShape, 'float32', resultData);\n}\nexport const preluConfig = {\n kernelName: Prelu,\n backendName: 'cpu',\n kernelFunc: prelu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJlbHUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1ByZWx1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQXNDLE1BQU0sdUJBQXVCLENBQUM7QUFHL0YsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWxFLE1BQU0sU0FBUyxHQUFHLDRCQUE0QixDQUMxQyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRS9FLE1BQU0sVUFBVSxLQUFLLENBQUMsSUFBb0Q7SUFFeEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFMUIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFbEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTdELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUHJlbHUsIFByZWx1SW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuXG5jb25zdCBwcmVsdUltcGwgPSBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKFxuICAgICh4VmFsdWU6IG51bWJlciwgYVZhbHVlOiBudW1iZXIpID0+IHhWYWx1ZSA8IDAgPyBhVmFsdWUgKiB4VmFsdWUgOiB4VmFsdWUpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlbHUoYXJnczoge2lucHV0czogUHJlbHVJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3gsIGFscGhhfSA9IGlucHV0cztcblxuICBhc3NlcnROb3RDb21wbGV4KFt4LCBhbHBoYV0sICdwcmVsdScpO1xuXG4gIGNvbnN0IGFWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGJWYWxzID0gYmFja2VuZC5kYXRhLmdldChhbHBoYS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IFtyZXN1bHREYXRhLCByZXN1bHRTaGFwZV0gPVxuICAgICAgcHJlbHVJbXBsKHguc2hhcGUsIGFscGhhLnNoYXBlLCBhVmFscywgYlZhbHMsICdmbG9hdDMyJyk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsICdmbG9hdDMyJywgcmVzdWx0RGF0YSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcmVsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBQcmVsdSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBwcmVsdSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const relu = unaryKernelFunc(Relu, (xi) => Math.max(0, xi));\nexport const reluConfig = {\n kernelName: Relu,\n backendName: 'cpu',\n kernelFunc: relu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBSZWx1fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgcmVsdSA9IHVuYXJ5S2VybmVsRnVuYyhSZWx1LCAoeGkpID0+IE1hdGgubWF4KDAsIHhpKSk7XG5cbmV4cG9ydCBjb25zdCByZWx1Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlbHUsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVsdSxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Relu6 } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const relu6 = unaryKernelFunc(Relu6, (xi) => Math.min(Math.max(0, xi), 6));\nexport const relu6Config = {\n kernelName: Relu6,\n backendName: 'cpu',\n kernelFunc: relu6,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsdTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JlbHU2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUmVsdTZ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCByZWx1NiA9XG4gICAgdW5hcnlLZXJuZWxGdW5jKFJlbHU2LCAoeGkpID0+IE1hdGgubWluKE1hdGgubWF4KDAsIHhpKSwgNikpO1xuXG5leHBvcnQgY29uc3QgcmVsdTZDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVsdTYsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVsdTYsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { elu } from '../kernels/Elu';\nimport { identity } from '../kernels/Identity';\nimport { leakyRelu } from '../kernels/LeakyRelu';\nimport { prelu } from '../kernels/Prelu';\nimport { relu } from '../kernels/Relu';\nimport { relu6 } from '../kernels/Relu6';\nimport { sigmoid } from '../kernels/Sigmoid';\nexport function applyActivation(backend, x, activation, preluActivationWeights, leakyreluAlpha) {\n if (activation === 'linear') {\n return identity({ inputs: { x }, backend });\n }\n else if (activation === 'relu') {\n return relu({ inputs: { x }, backend });\n }\n else if (activation === 'elu') {\n return elu({ inputs: { x }, backend });\n }\n else if (activation === 'relu6') {\n return relu6({ inputs: { x }, backend });\n }\n else if (activation === 'prelu') {\n return prelu({ inputs: { x, alpha: preluActivationWeights }, backend });\n }\n else if (activation === 'leakyrelu') {\n return leakyRelu({ inputs: { x }, backend, attrs: { alpha: leakyreluAlpha } });\n }\n else if (activation === 'sigmoid') {\n return sigmoid({ inputs: { x }, backend });\n }\n throw new Error(`Activation ${activation} has not been implemented for the CPU backend.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzZWRfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy91dGlscy9mdXNlZF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFLSCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFM0MsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsT0FBdUIsRUFBRSxDQUFhLEVBQUUsVUFBbUMsRUFDM0Usc0JBQW1DLEVBQUUsY0FBdUI7SUFDOUQsSUFBSSxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzNCLE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztLQUN6QztTQUFNLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFlLENBQUM7S0FDbkQ7U0FBTSxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7UUFDL0IsT0FBTyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO0tBQ2xEO1NBQU0sSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztLQUNwRDtTQUFNLElBQUksVUFBVSxLQUFLLE9BQU8sRUFBRTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3JFO1NBQU0sSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFO1FBQ3JDLE9BQU8sU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUMsRUFBQyxDQUFDLENBQUM7S0FDMUU7U0FBTSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7UUFDbkMsT0FBTyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO0tBQ3REO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDWCxjQUFjLFVBQVUsZ0RBQWdELENBQUMsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge19GdXNlZE1hdE11bCwgX0Z1c2VkTWF0TXVsQXR0cnMsIF9GdXNlZE1hdE11bElucHV0cywgYmFja2VuZF91dGlsLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2VsdX0gZnJvbSAnLi4va2VybmVscy9FbHUnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi4va2VybmVscy9JZGVudGl0eSc7XG5pbXBvcnQge2xlYWt5UmVsdX0gZnJvbSAnLi4va2VybmVscy9MZWFreVJlbHUnO1xuaW1wb3J0IHtwcmVsdX0gZnJvbSAnLi4va2VybmVscy9QcmVsdSc7XG5pbXBvcnQge3JlbHV9IGZyb20gJy4uL2tlcm5lbHMvUmVsdSc7XG5pbXBvcnQge3JlbHU2fSBmcm9tICcuLi9rZXJuZWxzL1JlbHU2JztcbmltcG9ydCB7c2lnbW9pZH0gZnJvbSAnLi4va2VybmVscy9TaWdtb2lkJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QWN0aXZhdGlvbihcbiAgICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgeDogVGVuc29ySW5mbywgYWN0aXZhdGlvbjogYmFja2VuZF91dGlsLkFjdGl2YXRpb24sXG4gICAgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cz86IFRlbnNvckluZm8sIGxlYWt5cmVsdUFscGhhPzogbnVtYmVyKTogVGVuc29ySW5mbyB7XG4gIGlmIChhY3RpdmF0aW9uID09PSAnbGluZWFyJykge1xuICAgIHJldHVybiBpZGVudGl0eSh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncmVsdScpIHtcbiAgICByZXR1cm4gcmVsdSh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdlbHUnKSB7XG4gICAgcmV0dXJuIGVsdSh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICB9IGVsc2UgaWYgKGFjdGl2YXRpb24gPT09ICdyZWx1NicpIHtcbiAgICByZXR1cm4gcmVsdTYoe2lucHV0czoge3h9LCBiYWNrZW5kfSkgYXMgVGVuc29ySW5mbztcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAncHJlbHUnKSB7XG4gICAgcmV0dXJuIHByZWx1KHtpbnB1dHM6IHt4LCBhbHBoYTogcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30sIGJhY2tlbmR9KTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnbGVha3lyZWx1Jykge1xuICAgIHJldHVybiBsZWFreVJlbHUoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2FscGhhOiBsZWFreXJlbHVBbHBoYX19KTtcbiAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnc2lnbW9pZCcpIHtcbiAgICByZXR1cm4gc2lnbW9pZCh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBBY3RpdmF0aW9uICR7YWN0aXZhdGlvbn0gaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGZvciB0aGUgQ1BVIGJhY2tlbmQuYCk7XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reshape, util } from '@tensorflow/tfjs-core';\nexport function reshape(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { shape } = attrs;\n const xSize = util.sizeFromShape(x.shape);\n const $shape = util.inferFromImplicitShape(shape, xSize);\n const $xSize = util.sizeFromShape($shape);\n util.assert(xSize === $xSize, () => `The new shape (${$shape}) has ${$xSize} elements and the old ` +\n `shape (${x.shape}) has ${xSize} elements. The new shape and old ` +\n `shape must have the same number of elements.`);\n backend.incRef(x.dataId);\n const xData = backend.data.get(x.dataId);\n if (xData.complexTensorInfos != null) {\n const real = xData.complexTensorInfos.real;\n const imag = xData.complexTensorInfos.imag;\n real.shape = $shape;\n imag.shape = $shape;\n }\n return { dataId: x.dataId, shape: $shape, dtype: x.dtype };\n}\nexport const reshapeConfig = {\n kernelName: Reshape,\n backendName: 'cpu',\n kernelFunc: reshape\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVzaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLE9BQU8sRUFBMkMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkgsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsSUFDeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUMsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLEtBQUssTUFBTSxFQUNoQixHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsTUFBTSxTQUFTLE1BQU0sd0JBQXdCO1FBQ2pFLFVBQVUsQ0FBQyxDQUFDLEtBQUssU0FBUyxLQUFLLG1DQUFtQztRQUNsRSw4Q0FBOEMsQ0FBQyxDQUFDO0lBRXhELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXpCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6QyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1FBRTNDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFpQjtJQUN6QyxVQUFVLEVBQUUsT0FBTztJQUNuQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsT0FBZ0M7Q0FDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlc2hhcGUsIFJlc2hhcGVBdHRycywgUmVzaGFwZUlucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaGFwZShcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBSZXNoYXBlSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFJlc2hhcGVBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzaGFwZX0gPSBhdHRycztcblxuICBjb25zdCB4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKTtcbiAgY29uc3QgJHNoYXBlID0gdXRpbC5pbmZlckZyb21JbXBsaWNpdFNoYXBlKHNoYXBlLCB4U2l6ZSk7XG4gIGNvbnN0ICR4U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZSgkc2hhcGUpO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgeFNpemUgPT09ICR4U2l6ZSxcbiAgICAgICgpID0+IGBUaGUgbmV3IHNoYXBlICgkeyRzaGFwZX0pIGhhcyAkeyR4U2l6ZX0gZWxlbWVudHMgYW5kIHRoZSBvbGQgYCArXG4gICAgICAgICAgYHNoYXBlICgke3guc2hhcGV9KSBoYXMgJHt4U2l6ZX0gZWxlbWVudHMuIFRoZSBuZXcgc2hhcGUgYW5kIG9sZCBgICtcbiAgICAgICAgICBgc2hhcGUgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cy5gKTtcblxuICBiYWNrZW5kLmluY1JlZih4LmRhdGFJZCk7XG5cbiAgY29uc3QgeERhdGEgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKTtcblxuICBpZiAoeERhdGEuY29tcGxleFRlbnNvckluZm9zICE9IG51bGwpIHtcbiAgICBjb25zdCByZWFsID0geERhdGEuY29tcGxleFRlbnNvckluZm9zLnJlYWw7XG4gICAgY29uc3QgaW1hZyA9IHhEYXRhLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnO1xuXG4gICAgcmVhbC5zaGFwZSA9ICRzaGFwZTtcbiAgICBpbWFnLnNoYXBlID0gJHNoYXBlO1xuICB9XG5cbiAgcmV0dXJuIHtkYXRhSWQ6IHguZGF0YUlkLCBzaGFwZTogJHNoYXBlLCBkdHlwZTogeC5kdHlwZX07XG59XG5cbmV4cG9ydCBjb25zdCByZXNoYXBlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlc2hhcGUsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVzaGFwZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { BatchMatMul, broadcast_util, buffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nexport function batchMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b } = inputs;\n const { transposeA, transposeB } = attrs;\n assertNotComplex([a, b], 'matMul');\n const aRank = a.shape.length;\n const bRank = b.shape.length;\n const innerShapeA = transposeA ? a.shape[aRank - 2] : a.shape[aRank - 1];\n const innerShapeB = transposeB ? b.shape[bRank - 1] : b.shape[bRank - 2];\n const outerShapeA = transposeA ? a.shape[aRank - 1] : a.shape[aRank - 2];\n const outerShapeB = transposeB ? b.shape[bRank - 2] : b.shape[bRank - 1];\n const outerDimsA = a.shape.slice(0, -2);\n const outerDimsB = b.shape.slice(0, -2);\n const batchDimA = util.sizeFromShape(outerDimsA);\n const batchDimB = util.sizeFromShape(outerDimsB);\n const outShapeOuterDims = broadcast_util.assertAndGetBroadcastShape(a.shape.slice(0, -2), b.shape.slice(0, -2));\n const outShape = outShapeOuterDims.concat([outerShapeA, outerShapeB]);\n util.assert(innerShapeA === innerShapeB, () => `Error in matMul: inner shapes (${innerShapeA}) and (` +\n `${innerShapeB}) of Tensors with shapes ${a.shape} and ` +\n `${b.shape} and transposeA=${transposeA}` +\n ` and transposeB=${transposeB} must match.`);\n const a3dShape = transposeA ? [batchDimA, innerShapeA, outerShapeA] :\n [batchDimA, outerShapeA, innerShapeA];\n const b3dShape = transposeB ? [batchDimB, outerShapeB, innerShapeB] :\n [batchDimB, innerShapeB, outerShapeB];\n // The rest of the implementation is designed to operate on rank-3 tensors\n const a3d = reshape({ inputs: { x: a }, backend, attrs: { shape: a3dShape } });\n const b3d = reshape({ inputs: { x: b }, backend, attrs: { shape: b3dShape } });\n const sharedDim = transposeA ? a3d.shape[1] : a3d.shape[2];\n const leftDim = transposeA ? a3d.shape[2] : a3d.shape[1];\n const rightDim = transposeB ? b3d.shape[1] : b3d.shape[2];\n const batchDim = Math.max(batchDimA, batchDimB);\n const a3dValues = backend.data.get(a3d.dataId).values;\n const b3dValues = backend.data.get(b3d.dataId).values;\n const a3dStrides = util.computeStrides(a3d.shape);\n const b3dStrides = util.computeStrides(b3d.shape);\n const [aBatch, aOuterStep, aInnerStep] = transposeA ?\n [a3dStrides[0], 1, a3dStrides[1]] :\n [a3dStrides[0], a3dStrides[1], 1];\n const [bInnerStep, bOuterStep, bBatch] = transposeB ?\n [1, b3dStrides[1], b3dStrides[0]] :\n [b3dStrides[1], 1, b3dStrides[0]];\n const size = leftDim * rightDim;\n const result = buffer([batchDim, leftDim, rightDim], a3d.dtype);\n const resVals = result.values;\n const blockSize = backend.blockSize;\n for (let bi = 0; bi < batchDim; bi++) {\n const batchIndexA = bi % batchDimA;\n const batchIndexB = bi % batchDimB;\n for (let i0 = 0; i0 < leftDim; i0 += blockSize) {\n // for when blockSize doesn't evenly divide the input\n const iBlock = Math.min(i0 + blockSize, leftDim);\n for (let j0 = 0; j0 < rightDim; j0 += blockSize) {\n const jBlock = Math.min(j0 + blockSize, rightDim);\n for (let k0 = 0; k0 < sharedDim; k0 += blockSize) {\n const kBlock = Math.min(k0 + blockSize, sharedDim);\n for (let i = i0; i < iBlock; i++) {\n for (let j = j0; j < jBlock; j++) {\n let sum = 0.0;\n for (let k = k0; k < kBlock; k++) {\n const aVal = \n // tslint:disable-next-line: max-line-length\n a3dValues[batchIndexA * aBatch + i * aOuterStep + k * aInnerStep];\n const bVal = \n // tslint:disable-next-line: max-line-length\n b3dValues[k * bInnerStep + j * bOuterStep + batchIndexB * bBatch];\n sum += aVal * bVal;\n }\n resVals[bi * size + (i * rightDim + j)] += sum;\n }\n }\n }\n }\n }\n }\n backend.disposeIntermediateTensorInfo(a3d);\n backend.disposeIntermediateTensorInfo(b3d);\n // set correct shape on output.\n return backend.makeTensorInfo(outShape, result.dtype, result.values);\n}\nexport const batchMatMulConfig = {\n kernelName: BatchMatMul,\n backendName: 'cpu',\n kernelFunc: batchMatMul,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hNYXRNdWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0JhdGNoTWF0TXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxXQUFXLEVBQXVDLGNBQWMsRUFBRSxNQUFNLEVBQXdDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzNKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdEIsTUFBTSxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdkMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFN0IsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUss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Q0FBQyxNQUFNLGlCQUFpQixHQUFpQjtJQUM3QyxVQUFVLEVBQUUsV0FBVztJQUN2QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsV0FBb0M7Q0FDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QmF0Y2hNYXRNdWwsIEJhdGNoTWF0TXVsQXR0cnMsIEJhdGNoTWF0TXVsSW5wdXRzLCBicm9hZGNhc3RfdXRpbCwgYnVmZmVyLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXRjaE1hdE11bChhcmdzOiB7XG4gIGlucHV0czogQmF0Y2hNYXRNdWxJbnB1dHMsXG4gIGF0dHJzOiBCYXRjaE1hdE11bEF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVVxufSkge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YSwgYn0gPSBpbnB1dHM7XG4gIGNvbnN0IHt0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2EsIGJdLCAnbWF0TXVsJyk7XG5cbiAgY29uc3QgYVJhbmsgPSBhLnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgYlJhbmsgPSBiLnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCBpbm5lclNoYXBlQSA9IHRyYW5zcG9zZUEgPyBhLnNoYXBlW2FSYW5rIC0gMl0gOiBhLnNoYXBlW2FSYW5rIC0gMV07XG4gIGNvbnN0IGlubmVyU2hhcGVCID0gdHJhbnNwb3NlQiA/IGIuc2hhcGVbYlJhbmsgLSAxXSA6IGIuc2hhcGVbYlJhbmsgLSAyXTtcblxuICBjb25zdCBvdXRlclNoYXBlQSA9IHRyYW5zcG9zZUEgPyBhLnNoYXBlW2FSYW5rIC0gMV0gOiBhLnNoYXBlW2FSYW5rIC0gMl07XG4gIGNvbnN0IG91dGVyU2hhcGVCID0gdHJhbnNwb3NlQiA/IGIuc2hhcGVbYlJhbmsgLSAyXSA6IGIuc2hhcGVbYlJhbmsgLSAxXTtcblxuICBjb25zdCBvdXRlckRpbXNBID0gYS5zaGFwZS5zbGljZSgwLCAtMik7XG4gIGNvbnN0IG91dGVyRGltc0IgPSBiLnNoYXBlLnNsaWNlKDAsIC0yKTtcblxuICBjb25zdCBiYXRjaERpbUEgPSB1dGlsLnNpemVGcm9tU2hhcGUob3V0ZXJEaW1zQSk7XG4gIGNvbnN0IGJhdGNoRGltQiA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRlckRpbXNCKTtcblxuICBjb25zdCBvdXRTaGFwZU91dGVyRGltcyA9IGJyb2FkY2FzdF91dGlsLmFzc2VydEFuZEdldEJyb2FkY2FzdFNoYXBlKFxuICAgICAgYS5zaGFwZS5zbGljZSgwLCAtMiksIGIuc2hhcGUuc2xpY2UoMCwgLTIpKTtcbiAgY29uc3Qgb3V0U2hhcGUgPSBvdXRTaGFwZU91dGVyRGltcy5jb25jYXQoW291dGVyU2hhcGVBLCBvdXRlclNoYXBlQl0pO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgaW5uZXJTaGFwZUEgPT09IGlubmVyU2hhcGVCLFxuICAgICAgKCkgPT4gYEVycm9yIGluIG1hdE11bDogaW5uZXIgc2hhcGVzICgke2lubmVyU2hhcGVBfSkgYW5kIChgICtcbiAgICAgICAgICBgJHtpbm5lclNoYXBlQn0pIG9mIFRlbnNvcnMgd2l0aCBzaGFwZXMgJHthLnNoYXBlfSBhbmQgYCArXG4gICAgICAgICAgYCR7Yi5zaGFwZX0gYW5kIHRyYW5zcG9zZUE9JHt0cmFuc3Bvc2VBfWAgK1xuICAgICAgICAgIGAgYW5kIHRyYW5zcG9zZUI9JHt0cmFuc3Bvc2VCfSBtdXN0IG1hdGNoLmApO1xuXG4gIGNvbnN0IGEzZFNoYXBlID0gdHJhbnNwb3NlQSA/IFtiYXRjaERpbUEsIGlubmVyU2hhcGVBLCBvdXRlclNoYXBlQV0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmF0Y2hEaW1BLCBvdXRlclNoYXBlQSwgaW5uZXJTaGFwZUFdO1xuICBjb25zdCBiM2RTaGFwZSA9IHRyYW5zcG9zZUIgPyBbYmF0Y2hEaW1CLCBvdXRlclNoYXBlQiwgaW5uZXJTaGFwZUJdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JhdGNoRGltQiwgaW5uZXJTaGFwZUIsIG91dGVyU2hhcGVCXTtcblxuICAvLyBUaGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGVzaWduZWQgdG8gb3BlcmF0ZSBvbiByYW5rLTMgdGVuc29yc1xuICBjb25zdCBhM2QgPSByZXNoYXBlKHtpbnB1dHM6IHt4OiBhfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogYTNkU2hhcGV9fSk7XG4gIGNvbnN0IGIzZCA9IHJlc2hhcGUoe2lucHV0czoge3g6IGJ9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBiM2RTaGFwZX19KTtcblxuICBjb25zdCBzaGFyZWREaW0gPSB0cmFuc3Bvc2VBID8gYTNkLnNoYXBlWzFdIDogYTNkLnNoYXBlWzJdO1xuICBjb25zdCBsZWZ0RGltID0gdHJhbnNwb3NlQSA/IGEzZC5zaGFwZVsyXSA6IGEzZC5zaGFwZVsxXTtcbiAgY29uc3QgcmlnaHREaW0gPSB0cmFuc3Bvc2VCID8gYjNkLnNoYXBlWzFdIDogYjNkLnNoYXBlWzJdO1xuICBjb25zdCBiYXRjaERpbSA9IE1hdGgubWF4KGJhdGNoRGltQSwgYmF0Y2hEaW1CKTtcblxuICBjb25zdCBhM2RWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGEzZC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBiM2RWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGIzZC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IGEzZFN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGEzZC5zaGFwZSk7XG4gIGNvbnN0IGIzZFN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGIzZC5zaGFwZSk7XG5cbiAgY29uc3QgW2FCYXRjaCwgYU91dGVyU3RlcCwgYUlubmVyU3RlcF0gPSB0cmFuc3Bvc2VBID9cbiAgICAgIFthM2RTdHJpZGVzWzBdLCAxLCBhM2RTdHJpZGVzWzFdXSA6XG4gICAgICBbYTNkU3RyaWRlc1swXSwgYTNkU3RyaWRlc1sxXSwgMV07XG4gIGNvbnN0IFtiSW5uZXJTdGVwLCBiT3V0ZXJTdGVwLCBiQmF0Y2hdID0gdHJhbnNwb3NlQiA/XG4gICAgICBbMSwgYjNkU3RyaWRlc1sxXSwgYjNkU3RyaWRlc1swXV0gOlxuICAgICAgW2IzZFN0cmlkZXNbMV0sIDEsIGIzZFN0cmlkZXNbMF1dO1xuXG4gIGNvbnN0IHNpemUgPSBsZWZ0RGltICogcmlnaHREaW07XG4gIGNvbnN0IHJlc3VsdCA9IGJ1ZmZlcihbYmF0Y2hEaW0sIGxlZnREaW0sIHJpZ2h0RGltXSwgYTNkLmR0eXBlKTtcblxuICBjb25zdCByZXNWYWxzID0gcmVzdWx0LnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBibG9ja1NpemUgPSBiYWNrZW5kLmJsb2NrU2l6ZTtcblxuICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgYmF0Y2hEaW07IGJpKyspIHtcbiAgICBjb25zdCBiYXRjaEluZGV4QSA9IGJpICUgYmF0Y2hEaW1BO1xuICAgIGNvbnN0IGJhdGNoSW5kZXhCID0gYmkgJSBiYXRjaERpbUI7XG4gICAgZm9yIChsZXQgaTAgPSAwOyBpMCA8IGxlZnREaW07IGkwICs9IGJsb2NrU2l6ZSkge1xuICAgICAgLy8gZm9yIHdoZW4gYmxvY2tTaXplIGRvZXNuJ3QgZXZlbmx5IGRpdmlkZSB0aGUgaW5wdXRcbiAgICAgIGNvbnN0IGlCbG9jayA9IE1hdGgubWluKGkwICsgYmxvY2tTaXplLCBsZWZ0RGltKTtcbiAgICAgIGZvciAobGV0IGowID0gMDsgajAgPCByaWdodERpbTsgajAgKz0gYmxvY2tTaXplKSB7XG4gICAgICAgIGNvbnN0IGpCbG9jayA9IE1hdGgubWluKGowICsgYmxvY2tTaXplLCByaWdodERpbSk7XG4gICAgICAgIGZvciAobGV0IGswID0gMDsgazAgPCBzaGFyZWREaW07IGswICs9IGJsb2NrU2l6ZSkge1xuICAgICAgICAgIGNvbnN0IGtCbG9jayA9IE1hdGgubWluKGswICsgYmxvY2tTaXplLCBzaGFyZWREaW0pO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IGkwOyBpIDwgaUJsb2NrOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBqMDsgaiA8IGpCbG9jazsgaisrKSB7XG4gICAgICAgICAgICAgIGxldCBzdW0gPSAwLjA7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgayA9IGswOyBrIDwga0Jsb2NrOyBrKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhVmFsID1cbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgYTNkVmFsdWVzW2JhdGNoSW5kZXhBICogYUJhdGNoICsgaSAqIGFPdXRlclN0ZXAgKyBrICogYUlubmVyU3RlcF07XG4gICAgICAgICAgICAgICAgY29uc3QgYlZhbCA9XG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIGIzZFZhbHVlc1trICogYklubmVyU3RlcCArIGogKiBiT3V0ZXJTdGVwICsgYmF0Y2hJbmRleEIgKiBiQmF0Y2hdO1xuICAgICAgICAgICAgICAgIHN1bSArPSBhVmFsICogYlZhbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNWYWxzW2JpICogc2l6ZSArIChpICogcmlnaHREaW0gKyBqKV0gKz0gc3VtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYTNkKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhiM2QpO1xuXG4gIC8vIHNldCBjb3JyZWN0IHNoYXBlIG9uIG91dHB1dC5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBvdXRTaGFwZSwgcmVzdWx0LmR0eXBlLCByZXN1bHQudmFsdWVzIGFzIFR5cGVkQXJyYXkpO1xufVxuXG5leHBvcnQgY29uc3QgYmF0Y2hNYXRNdWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQmF0Y2hNYXRNdWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYmF0Y2hNYXRNdWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { _FusedMatMul } from '@tensorflow/tfjs-core';\nimport { applyActivation } from '../utils/fused_utils';\nimport { add } from './Add';\nimport { batchMatMul } from './BatchMatMul';\nexport function _fusedMatMul(args) {\n const { inputs, backend, attrs } = args;\n const { a, b, bias, preluActivationWeights } = inputs;\n const { transposeA, transposeB, activation, leakyreluAlpha } = attrs;\n let current;\n let addRes;\n let activationRes;\n const intermediates = [];\n const matMulRes = batchMatMul({ inputs: { a, b }, attrs: { transposeA, transposeB }, backend });\n current = matMulRes;\n if (bias) {\n addRes = add({ inputs: { a: current, b: bias }, backend });\n intermediates.push(current);\n current = addRes;\n }\n if (activation) {\n activationRes = applyActivation(backend, current, activation, preluActivationWeights, leakyreluAlpha);\n intermediates.push(current);\n current = activationRes;\n }\n for (const i of intermediates) {\n backend.disposeIntermediateTensorInfo(i);\n }\n return current;\n}\nexport const _fusedMatMulConfig = {\n kernelName: _FusedMatMul,\n backendName: 'cpu',\n kernelFunc: _fusedMatMul,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX0Z1c2VkTWF0TXVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9fRnVzZWRNYXRNdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFJNUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BELE1BQU0sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbkUsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksYUFBYSxDQUFDO0lBRWxCLE1BQU0sYUFBYSxHQUFpQixFQUFFLENBQUM7SUFFdkMsTUFBTSxTQUFTLEdBQ1gsV0FBVyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFFcEIsSUFBSSxJQUFJLEVBQUU7UUFDUixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztRQUNyRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sR0FBRyxNQUFNLENBQUM7S0FDbEI7SUFDRCxJQUFJLFVBQVUsRUFBRTtRQUNkLGFBQWEsR0FBRyxlQUFlLENBQzNCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsT0FBTyxHQUFHLGFBQWEsQ0FBQztLQUN6QjtJQUVELEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFlBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge19GdXNlZE1hdE11bCwgX0Z1c2VkTWF0TXVsQXR0cnMsIF9GdXNlZE1hdE11bElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2FwcGx5QWN0aXZhdGlvbn0gZnJvbSAnLi4vdXRpbHMvZnVzZWRfdXRpbHMnO1xuXG5pbXBvcnQge2FkZH0gZnJvbSAnLi9BZGQnO1xuaW1wb3J0IHtiYXRjaE1hdE11bH0gZnJvbSAnLi9CYXRjaE1hdE11bCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBfZnVzZWRNYXRNdWwoYXJnczoge1xuICBpbnB1dHM6IF9GdXNlZE1hdE11bElucHV0cyxcbiAgYXR0cnM6IF9GdXNlZE1hdE11bEF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVVxufSkge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YSwgYiwgYmlhcywgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHt0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCLCBhY3RpdmF0aW9uLCBsZWFreXJlbHVBbHBoYX0gPSBhdHRycztcblxuICBsZXQgY3VycmVudDtcbiAgbGV0IGFkZFJlcztcbiAgbGV0IGFjdGl2YXRpb25SZXM7XG5cbiAgY29uc3QgaW50ZXJtZWRpYXRlczogVGVuc29ySW5mb1tdID0gW107XG5cbiAgY29uc3QgbWF0TXVsUmVzID1cbiAgICAgIGJhdGNoTWF0TXVsKHtpbnB1dHM6IHthLCBifSwgYXR0cnM6IHt0cmFuc3Bvc2VBLCB0cmFuc3Bvc2VCfSwgYmFja2VuZH0pO1xuICBjdXJyZW50ID0gbWF0TXVsUmVzO1xuXG4gIGlmIChiaWFzKSB7XG4gICAgYWRkUmVzID0gYWRkKHtpbnB1dHM6IHthOiBjdXJyZW50LCBiOiBiaWFzfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgaW50ZXJtZWRpYXRlcy5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBhZGRSZXM7XG4gIH1cbiAgaWYgKGFjdGl2YXRpb24pIHtcbiAgICBhY3RpdmF0aW9uUmVzID0gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICBiYWNrZW5kLCBjdXJyZW50LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSk7XG4gICAgaW50ZXJtZWRpYXRlcy5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBhY3RpdmF0aW9uUmVzO1xuICB9XG5cbiAgZm9yIChjb25zdCBpIG9mIGludGVybWVkaWF0ZXMpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGkpO1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBfZnVzZWRNYXRNdWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogX0Z1c2VkTWF0TXVsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IF9mdXNlZE1hdE11bCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acos } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const acos = unaryKernelFunc(Acos, (xi) => Math.acos(xi));\nexport const acosConfig = {\n kernelName: Acos,\n backendName: 'cpu',\n kernelFunc: acos,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQWNvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBY29zLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhY29zID0gdW5hcnlLZXJuZWxGdW5jKEFjb3MsICh4aSkgPT4gTWF0aC5hY29zKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhY29zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFjb3MsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYWNvcyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Acosh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const acosh = unaryKernelFunc(Acosh, (xi) => Math.acosh(xi));\nexport const acoshConfig = {\n kernelName: Acosh,\n backendName: 'cpu',\n kernelFunc: acosh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNvc2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Fjb3NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0Fjb3NoLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhY29zaCA9IHVuYXJ5S2VybmVsRnVuYyhBY29zaCwgKHhpKSA9PiBNYXRoLmFjb3NoKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhY29zaENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBY29zaCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhY29zaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AddN, buffer } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function addN(args) {\n const { inputs, backend } = args;\n const tensors = inputs;\n assertNotComplex(inputs, 'addN');\n const vals = tensors.map(t => backend.data.get(t.dataId).values);\n const outBuf = buffer(tensors[0].shape, tensors[0].dtype);\n const outVals = outBuf.values;\n for (let i = 0; i < tensors.length; i++) {\n const currVals = vals[i];\n for (let j = 0; j < outVals.length; j++) {\n outVals[j] += currVals[j];\n }\n }\n return backend.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values);\n}\nexport const addNConfig = {\n kernelName: AddN,\n backendName: 'cpu',\n kernelFunc: addN\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRkTi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQWRkTi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFjLE1BQU0sRUFBMkQsTUFBTSx1QkFBdUIsQ0FBQztBQUd6SCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFtRDtJQUV0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBRyxNQUFrQixDQUFDO0lBRW5DLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqQyxNQUFNLElBQUksR0FDTixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUMsQ0FBQztJQUN0RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBa0IsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0I7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FkZE4sIEFkZE5JbnB1dHMsIGJ1ZmZlciwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3IsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkTihhcmdzOiB7aW5wdXRzOiBBZGROSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHRlbnNvcnMgPSBpbnB1dHMgYXMgVGVuc29yW107XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChpbnB1dHMsICdhZGROJyk7XG5cbiAgY29uc3QgdmFscyA9XG4gICAgICB0ZW5zb3JzLm1hcCh0ID0+IGJhY2tlbmQuZGF0YS5nZXQodC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgY29uc3Qgb3V0QnVmID0gYnVmZmVyKHRlbnNvcnNbMF0uc2hhcGUsIHRlbnNvcnNbMF0uZHR5cGUgYXMgJ2Zsb2F0MzInKTtcbiAgY29uc3Qgb3V0VmFscyA9IG91dEJ1Zi52YWx1ZXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGVuc29ycy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJWYWxzID0gdmFsc1tpXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IG91dFZhbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIG91dFZhbHNbal0gKz0gY3VyclZhbHNbal07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0QnVmLnNoYXBlLCBvdXRCdWYuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgYWRkTkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBZGROLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGFkZE4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { All, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function all(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'all');\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('all', axes, $x.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes($x.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const vals = util.makeZerosTypedArray(util.sizeFromShape(outShape), $x.dtype);\n const aVals = backend.data.get($x.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let all = aVals[offset];\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n all = all && value;\n }\n vals[i] = all;\n }\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo($x);\n }\n const result = backend.makeTensorInfo(outShape, $x.dtype, vals);\n if (keepDims) {\n const expandedShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n const reshapedResult = reshape({ inputs: { x: result }, backend, attrs: { shape: expandedShape } });\n backend.disposeIntermediateTensorInfo(result);\n return reshapedResult;\n }\n return result;\n}\nexport const allConfig = {\n kernelName: All,\n backendName: 'cpu',\n kernelFunc: all\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBdUIsWUFBWSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdySSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBbUU7SUFFckUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7SUFDcEIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkU7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQy9ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDZjtJQUVELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRWhFLElBQUksUUFBUSxFQUFFO1FBQ1osTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QyxPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7QWxsLCBBbGxBdHRycywgQWxsSW5wdXRzLCBiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsKFxuICAgIGFyZ3M6IHtpbnB1dHM6IEFsbElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBBbGxBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICdhbGwnKTtcblxuICBjb25zdCBvcmlnQXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG4gIGxldCBheGVzID0gb3JpZ0F4ZXM7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeC5zaGFwZS5sZW5ndGgpO1xuICBsZXQgJHggPSB4O1xuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICAkeCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0ZWRBeGVzfX0pO1xuICAgIGF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhheGVzLmxlbmd0aCwgeC5zaGFwZS5sZW5ndGgpO1xuICB9XG5cbiAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKCdhbGwnLCBheGVzLCAkeC5zaGFwZS5sZW5ndGgpO1xuICBjb25zdCBbb3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcygkeC5zaGFwZSwgYXhlcyk7XG4gIGNvbnN0IHJlZHVjZVNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVkdWNlU2hhcGUpO1xuICBjb25zdCB2YWxzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSksICR4LmR0eXBlKTtcblxuICBjb25zdCBhVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoJHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaSAqIHJlZHVjZVNpemU7XG4gICAgbGV0IGFsbCA9IGFWYWxzW29mZnNldF07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYVZhbHNbb2Zmc2V0ICsgal07XG4gICAgICBhbGwgPSBhbGwgJiYgdmFsdWU7XG4gICAgfVxuICAgIHZhbHNbaV0gPSBhbGw7XG4gIH1cblxuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKCR4KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsICR4LmR0eXBlLCB2YWxzKTtcblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICBjb25zdCBleHBhbmRlZFNoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG91dFNoYXBlLCBvcmlnQXhlcyk7XG4gICAgY29uc3QgcmVzaGFwZWRSZXN1bHQgPVxuICAgICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBleHBhbmRlZFNoYXBlfX0pO1xuXG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc2hhcGVkUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGFsbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBbGwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYWxsIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Any, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function any(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'any');\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('any', axes, $x.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes($x.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const vals = util.makeZerosTypedArray(util.sizeFromShape(outShape), $x.dtype);\n const aVals = backend.data.get($x.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let anyVal = aVals[offset];\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n anyVal = anyVal || value;\n }\n vals[i] = anyVal;\n }\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo($x);\n }\n const result = backend.makeTensorInfo(outShape, $x.dtype, vals);\n if (keepDims) {\n const expandedShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n const reshapedResult = reshape({ inputs: { x: result }, backend, attrs: { shape: expandedShape } });\n backend.disposeIntermediateTensorInfo(result);\n return reshapedResult;\n }\n return result;\n}\nexport const anyConfig = {\n kernelName: Any,\n backendName: 'cpu',\n kernelFunc: any\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW55LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BbnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBdUIsWUFBWSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdySSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBbUU7SUFFckUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7SUFDcEIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkU7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQy9ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDbEI7SUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDeEIsT0FBTyxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzNDO0lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVoRSxJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQ2hCLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQyxFQUFDLENBQUMsQ0FBQztRQUUzRSxPQUFPLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsT0FBTyxjQUFjLENBQUM7S0FDdkI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FueSwgQW55QXR0cnMsIEFueUlucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFueShcbiAgICBhcmdzOiB7aW5wdXRzOiBBbnlJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogQW55QXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpcywga2VlcERpbXN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYW55Jyk7XG5cbiAgY29uc3Qgb3JpZ0F4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBsZXQgYXhlcyA9IG9yaWdBeGVzO1xuICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHguc2hhcGUubGVuZ3RoKTtcbiAgbGV0ICR4ID0geDtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgJHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIHguc2hhcGUubGVuZ3RoKTtcbiAgfVxuXG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnYW55JywgYXhlcywgJHguc2hhcGUubGVuZ3RoKTtcbiAgY29uc3QgW291dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMoJHguc2hhcGUsIGF4ZXMpO1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgY29uc3QgdmFscyA9IHV0aWwubWFrZVplcm9zVHlwZWRBcnJheSh1dGlsLnNpemVGcm9tU2hhcGUob3V0U2hhcGUpLCAkeC5kdHlwZSk7XG5cbiAgY29uc3QgYVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KCR4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG9mZnNldCA9IGkgKiByZWR1Y2VTaXplO1xuICAgIGxldCBhbnlWYWwgPSBhVmFsc1tvZmZzZXRdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVkdWNlU2l6ZTsgKytqKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFWYWxzW29mZnNldCArIGpdO1xuICAgICAgYW55VmFsID0gYW55VmFsIHx8IHZhbHVlO1xuICAgIH1cbiAgICB2YWxzW2ldID0gYW55VmFsO1xuICB9XG5cbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbygkeCk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dFNoYXBlLCAkeC5kdHlwZSwgdmFscyk7XG5cbiAgaWYgKGtlZXBEaW1zKSB7XG4gICAgY29uc3QgZXhwYW5kZWRTaGFwZSA9IGJhY2tlbmRfdXRpbC5leHBhbmRTaGFwZVRvS2VlcERpbShvdXRTaGFwZSwgb3JpZ0F4ZXMpO1xuICAgIGNvbnN0IHJlc2hhcGVkUmVzdWx0ID1cbiAgICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogcmVzdWx0fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZXhwYW5kZWRTaGFwZX19KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0KTtcblxuICAgIHJldHVybiByZXNoYXBlZFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBhbnlDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQW55LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGFueSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMax, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function argMax(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis } = attrs;\n assertNotComplex(x, 'argMax');\n let axes = util.parseAxisParam(axis, x.shape);\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n const intermediateTensorInfos = [];\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n intermediateTensorInfos.push($x);\n axes = backend_util.getInnerMostAxes(axes.length, $x.shape.length);\n }\n axes = [axes[0]];\n backend_util.assertAxesAreInnerMostDims('argMax', axes, $x.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes($x.shape, axes);\n const outSize = util.sizeFromShape(outShape);\n const vals = util.makeZerosTypedArray(outSize, 'int32');\n const reduceSize = util.sizeFromShape(reduceShape);\n const aVals = backend.data.get($x.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let max = aVals[offset];\n let maxIndex = 0;\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n if (value > max) {\n max = value;\n maxIndex = j;\n }\n }\n vals[i] = maxIndex;\n }\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return backend.makeTensorInfo(outShape, 'int32', vals);\n}\nexport const argMaxConfig = {\n kernelName: ArgMax,\n backendName: 'cpu',\n kernelFunc: argMax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BcmdNYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBNkIsWUFBWSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUF5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0lBQ25DLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDcEUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsWUFBWSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUN6QixZQUFZLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDZixHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNaLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDZDtTQUNGO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztLQUNwQjtJQUVELHVCQUF1QixDQUFDLE9BQU8sQ0FDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBcmdNYXgsIEFyZ01heEF0dHJzLCBBcmdNYXhJbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmdNYXgoXG4gICAgYXJnczoge2lucHV0czogQXJnTWF4SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IEFyZ01heEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYXJnTWF4Jyk7XG5cbiAgbGV0IGF4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHguc2hhcGUubGVuZ3RoKTtcbiAgbGV0ICR4ID0geDtcbiAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MgPSBbXTtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgJHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKCR4KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsICR4LnNoYXBlLmxlbmd0aCk7XG4gIH1cblxuICBheGVzID0gW2F4ZXNbMF1dO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2FyZ01heCcsIGF4ZXMsICR4LnNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKCR4LnNoYXBlLCBheGVzKTtcblxuICBjb25zdCBvdXRTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dFNoYXBlKTtcbiAgY29uc3QgdmFscyA9IHV0aWwubWFrZVplcm9zVHlwZWRBcnJheShvdXRTaXplLCAnaW50MzInKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3QgYVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KCR4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG9mZnNldCA9IGkgKiByZWR1Y2VTaXplO1xuICAgIGxldCBtYXggPSBhVmFsc1tvZmZzZXRdO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYVZhbHNbb2Zmc2V0ICsgal07XG4gICAgICBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgIG1heEluZGV4ID0gajtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsc1tpXSA9IG1heEluZGV4O1xuICB9XG5cbiAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgIHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsICdpbnQzMicsIHZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgYXJnTWF4Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFyZ01heCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhcmdNYXggYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ArgMin, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function argMin(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis } = attrs;\n assertNotComplex(x, 'argMin');\n let axes = util.parseAxisParam(axis, x.shape);\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n const intermediateTensorInfos = [];\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n intermediateTensorInfos.push($x);\n axes = backend_util.getInnerMostAxes(axes.length, $x.shape.length);\n }\n axes = [axes[0]];\n backend_util.assertAxesAreInnerMostDims('argMin', axes, $x.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes($x.shape, axes);\n const outSize = util.sizeFromShape(outShape);\n const vals = util.makeZerosTypedArray(outSize, 'int32');\n const reduceSize = util.sizeFromShape(reduceShape);\n const aVals = backend.data.get($x.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let min = aVals[offset];\n let minIndex = 0;\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n if (value < min) {\n min = value;\n minIndex = j;\n }\n }\n vals[i] = minIndex;\n }\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return backend.makeTensorInfo(outShape, 'int32', vals);\n}\nexport const argMinConfig = {\n kernelName: ArgMin,\n backendName: 'cpu',\n kernelFunc: argMin\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJnTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BcmdNaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBNkIsWUFBWSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUF5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0lBQ25DLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDcEUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsWUFBWSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUN6QixZQUFZLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDZixHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNaLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDZDtTQUNGO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztLQUNwQjtJQUVELHVCQUF1QixDQUFDLE9BQU8sQ0FDM0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBcmdNaW4sIEFyZ01pbkF0dHJzLCBBcmdNaW5JbnB1dHMsIGJhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmdNaW4oXG4gICAgYXJnczoge2lucHV0czogQXJnTWluSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IEFyZ01pbkF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYXJnTWluJyk7XG5cbiAgbGV0IGF4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGF4aXMsIHguc2hhcGUpO1xuICBjb25zdCBwZXJtdXRlZEF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0QXhlc1Blcm11dGF0aW9uKGF4ZXMsIHguc2hhcGUubGVuZ3RoKTtcbiAgbGV0ICR4ID0geDtcbiAgY29uc3QgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MgPSBbXTtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgJHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGVkQXhlc319KTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKCR4KTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsICR4LnNoYXBlLmxlbmd0aCk7XG4gIH1cblxuICBheGVzID0gW2F4ZXNbMF1dO1xuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoJ2FyZ01pbicsIGF4ZXMsICR4LnNoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IFtvdXRTaGFwZSwgcmVkdWNlU2hhcGVdID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0QW5kUmVkdWNlU2hhcGVzKCR4LnNoYXBlLCBheGVzKTtcblxuICBjb25zdCBvdXRTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dFNoYXBlKTtcbiAgY29uc3QgdmFscyA9IHV0aWwubWFrZVplcm9zVHlwZWRBcnJheShvdXRTaXplLCAnaW50MzInKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG5cbiAgY29uc3QgYVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KCR4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG9mZnNldCA9IGkgKiByZWR1Y2VTaXplO1xuICAgIGxldCBtaW4gPSBhVmFsc1tvZmZzZXRdO1xuICAgIGxldCBtaW5JbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYVZhbHNbb2Zmc2V0ICsgal07XG4gICAgICBpZiAodmFsdWUgPCBtaW4pIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIG1pbkluZGV4ID0gajtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsc1tpXSA9IG1pbkluZGV4O1xuICB9XG5cbiAgaW50ZXJtZWRpYXRlVGVuc29ySW5mb3MuZm9yRWFjaChcbiAgICAgIHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsICdpbnQzMicsIHZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgYXJnTWluQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFyZ01pbixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhcmdNaW4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asin } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const asin = unaryKernelFunc(Asin, (xi) => Math.asin(xi));\nexport const asinConfig = {\n kernelName: Asin,\n backendName: 'cpu',\n kernelFunc: asin,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQXNpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBc2luLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhc2luID0gdW5hcnlLZXJuZWxGdW5jKEFzaW4sICh4aSkgPT4gTWF0aC5hc2luKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhc2luQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEFzaW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYXNpbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Asinh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const asinh = unaryKernelFunc(Asinh, (xi) => Math.asinh(xi));\nexport const asinhConfig = {\n kernelName: Asinh,\n backendName: 'cpu',\n kernelFunc: asinh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNpbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0FzaW5oLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0FzaW5oLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhc2luaCA9IHVuYXJ5S2VybmVsRnVuYyhBc2luaCwgKHhpKSA9PiBNYXRoLmFzaW5oKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhc2luaENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBc2luaCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhc2luaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const atan = unaryKernelFunc(Atan, (xi) => Math.atan(xi));\nexport const atanConfig = {\n kernelName: Atan,\n backendName: 'cpu',\n kernelFunc: atan,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQXRhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBdGFuLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhdGFuID0gdW5hcnlLZXJuZWxGdW5jKEF0YW4sICh4aSkgPT4gTWF0aC5hdGFuKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhdGFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEF0YW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYXRhbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atan2 } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const atan2Impl = createSimpleBinaryKernelImpl((aValue, bValue) => Math.atan2(aValue, bValue));\nexport const atan2 = binaryKernelFunc(Atan2, atan2Impl);\nexport const atan2Config = {\n kernelName: Atan2,\n backendName: 'cpu',\n kernelFunc: atan2,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0F0YW4yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQ2pELENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFnQixFQUFFLE1BQWdCLENBQUMsQ0FBQyxDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFpQjtJQUN2QyxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsS0FBSztDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtBdGFuMiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhdGFuMkltcGwgPSBjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsKFxuICAgIChhVmFsdWUsIGJWYWx1ZSkgPT4gTWF0aC5hdGFuMihhVmFsdWUgYXMgbnVtYmVyLCBiVmFsdWUgYXMgbnVtYmVyKSk7XG5cbmV4cG9ydCBjb25zdCBhdGFuMiA9IGJpbmFyeUtlcm5lbEZ1bmMoQXRhbjIsIGF0YW4ySW1wbCk7XG5cbmV4cG9ydCBjb25zdCBhdGFuMkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdGFuMixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhdGFuMixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Atanh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const atanh = unaryKernelFunc(Atanh, (xi) => Math.atanh(xi));\nexport const atanhConfig = {\n kernelName: Atanh,\n backendName: 'cpu',\n kernelFunc: atanh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRhbmguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0F0YW5oLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F0YW5oLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBhdGFuaCA9IHVuYXJ5S2VybmVsRnVuYyhBdGFuaCwgKHhpKSA9PiBNYXRoLmF0YW5oKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBhdGFuaENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdGFuaCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhdGFuaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer } from '@tensorflow/tfjs-core';\nexport function pool(xValues, xShape, dtype, strides, convInfo, poolType) {\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const initialValue = (poolType === 'max' ? Number.NEGATIVE_INFINITY :\n Number.POSITIVE_INFINITY);\n const output = buffer(convInfo.outShape, dtype);\n const outputVals = output.values;\n const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] * convInfo.outShape[3];\n const outputRowStrides = convInfo.outShape[2] * convInfo.outShape[3];\n const outputColStrides = convInfo.outShape[3];\n for (let b = 0; b < convInfo.batchSize; ++b) {\n const outputBatchOffset = b * outputBatchStrides;\n const inputBatchOffset = b * strides[0];\n for (let d = 0; d < convInfo.inChannels; ++d) {\n for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n const xRCorner = yR * strideHeight - padTop;\n const xRMin = Math.max(0, xRCorner);\n const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner);\n const outputRowOffset = outputBatchOffset + yR * outputRowStrides;\n for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n const xCCorner = yC * strideWidth - padLeft;\n const xCMin = Math.max(0, xCCorner);\n const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner);\n let minMaxValue = initialValue;\n let avgValue = 0;\n let count = 0;\n for (let xR = xRMin; xR < xRMax; xR += dilationHeight) {\n const xROffset = inputBatchOffset + xR * strides[1];\n for (let xC = xCMin; xC < xCMax; xC += dilationWidth) {\n const xCOffset = xROffset + xC * strides[2];\n const pixel = xValues[xCOffset + d];\n if ((poolType === 'max' && pixel > minMaxValue)) {\n minMaxValue = pixel;\n }\n else if (poolType === 'avg') {\n avgValue += pixel;\n count++;\n }\n }\n if (isNaN(minMaxValue)) {\n break;\n }\n }\n const outputOffset = outputRowOffset + yC * outputColStrides + d;\n outputVals[outputOffset] =\n poolType === 'avg' ? avgValue / count : minMaxValue;\n }\n }\n }\n }\n return output;\n}\nexport function maxPoolPositions(xValues, xShape, dtype, convInfo, flattenPositions = false, includeBatchInIndex = false) {\n const maxPositions = buffer(convInfo.outShape, 'int32');\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const xBuf = buffer(xShape, dtype, xValues);\n for (let b = 0; b < convInfo.batchSize; ++b) {\n for (let d = 0; d < convInfo.inChannels; ++d) {\n for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n const xRCorner = yR * strideHeight - padTop;\n let xRMin = xRCorner;\n while (xRMin < 0) {\n xRMin += dilationHeight;\n }\n // const xRMin = Math.max(0, xRCorner);\n const xRMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRCorner);\n for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n const xCCorner = yC * strideWidth - padLeft;\n let xCMin = xCCorner;\n while (xCMin < 0) {\n xCMin += dilationWidth;\n }\n const xCMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xCCorner);\n let maxValue = Number.NEGATIVE_INFINITY;\n let maxPosition = -1;\n for (let xR = xRMin; xR < xRMax; xR += dilationHeight) {\n const wR = xR - xRCorner;\n for (let xC = xCMin; xC < xCMax; xC += dilationWidth) {\n const wC = xC - xCCorner;\n // For some reason, disable-next-line is not working\n // TODO(mattsoulanille): Remove this when switching to TS5.\n /* tslint:disable: no-unnecessary-type-assertion */\n const pixel = xBuf.get(b, xR, xC, d);\n if (pixel > maxValue) {\n maxValue = pixel;\n if (flattenPositions) {\n maxPosition = includeBatchInIndex ?\n ((b * convInfo.inHeight + xR) * convInfo.inWidth + xC) *\n convInfo.inChannels +\n d :\n (xR * convInfo.inWidth + xC) * convInfo.inChannels + d;\n }\n else {\n maxPosition = wR * effectiveFilterWidth + wC;\n }\n }\n }\n }\n maxPositions.set(maxPosition, b, yR, yC, d);\n }\n }\n }\n }\n return maxPositions;\n}\nexport function pool3d(xValues, xShape, dtype, strides, convInfo, poolType) {\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = convInfo.padInfo.front;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n const initialValue = (poolType === 'max' ? Number.NEGATIVE_INFINITY :\n Number.POSITIVE_INFINITY);\n const output = buffer(convInfo.outShape, dtype);\n const outputVals = output.values;\n const outputBatchStrides = convInfo.outShape[1] * convInfo.outShape[2] *\n convInfo.outShape[3] * convInfo.outShape[4];\n const outputDepthStrides = convInfo.outShape[2] * convInfo.outShape[3] * convInfo.outShape[4];\n const outputRowStrides = convInfo.outShape[3] * convInfo.outShape[4];\n const outputColStrides = convInfo.outShape[4];\n for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n const outputBatchOffset = batch * outputBatchStrides;\n const inputBatchOffset = batch * strides[0];\n for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) {\n const xDepthCorner = yDepth * strideDepth - padFront;\n let xDepthMin = xDepthCorner;\n while (xDepthMin < 0) {\n xDepthMin += dilationDepth;\n }\n const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner);\n const outputDepthOffset = outputBatchOffset + yDepth * outputDepthStrides;\n for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) {\n const xRowCorner = yRow * strideHeight - padTop;\n let xRowMin = xRowCorner;\n while (xRowMin < 0) {\n xRowMin += dilationHeight;\n }\n const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner);\n const outputRowOffset = outputDepthOffset + yRow * outputRowStrides;\n for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) {\n const xColCorner = yCol * strideWidth - padLeft;\n let xColMin = xColCorner;\n while (xColMin < 0) {\n xColMin += dilationWidth;\n }\n const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner);\n // Shader code begins\n const outputColOffset = outputRowOffset + yCol * outputColStrides;\n let minMaxValue = initialValue;\n let avgValue = 0;\n let count = 0;\n for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) {\n const xDepthOffset = inputBatchOffset + xDepth * strides[1];\n for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) {\n const xRowOffset = xDepthOffset + xRow * strides[2];\n for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) {\n const xColOffset = xRowOffset + xCol * strides[3];\n const pixel = xValues[xColOffset + channel];\n if ((poolType === 'max' && pixel > minMaxValue)) {\n minMaxValue = pixel;\n }\n else if (poolType === 'avg') {\n avgValue += pixel;\n count++;\n }\n if (isNaN(minMaxValue)) {\n break;\n }\n }\n if (isNaN(minMaxValue)) {\n break;\n }\n }\n if (isNaN(minMaxValue)) {\n break;\n }\n }\n const outputOffset = outputColOffset + channel;\n outputVals[outputOffset] = poolType === 'avg' ?\n avgValue / Math.max(count, 1) :\n minMaxValue;\n }\n }\n }\n }\n }\n return output;\n}\nexport function maxPool3dPositions(xBuf, convInfo) {\n const maxPositions = buffer(convInfo.outShape, 'int32');\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = convInfo.padInfo.front;\n const padTop = convInfo.padInfo.top;\n const padLeft = convInfo.padInfo.left;\n for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n for (let yDepth = 0; yDepth < convInfo.outDepth; ++yDepth) {\n const xDepthCorner = yDepth * strideDepth - padFront;\n let xDepthMin = xDepthCorner;\n while (xDepthMin < 0) {\n xDepthMin += dilationDepth;\n }\n const xDepthMax = Math.min(convInfo.inDepth, effectiveFilterDepth + xDepthCorner);\n for (let yRow = 0; yRow < convInfo.outHeight; ++yRow) {\n const xRowCorner = yRow * strideHeight - padTop;\n let xRowMin = xRowCorner;\n while (xRowMin < 0) {\n xRowMin += dilationHeight;\n }\n const xRowMax = Math.min(convInfo.inHeight, effectiveFilterHeight + xRowCorner);\n for (let yCol = 0; yCol < convInfo.outWidth; ++yCol) {\n const xColCorner = yCol * strideWidth - padLeft;\n let xColMin = xColCorner;\n while (xColMin < 0) {\n xColMin += dilationWidth;\n }\n const xColMax = Math.min(convInfo.inWidth, effectiveFilterWidth + xColCorner);\n // Shader code begins\n let maxValue = Number.NEGATIVE_INFINITY;\n let maxPosition = -1;\n for (let xDepth = xDepthMin; xDepth < xDepthMax; xDepth += dilationDepth) {\n const wDepth = xDepth - xDepthCorner;\n for (let xRow = xRowMin; xRow < xRowMax; xRow += dilationHeight) {\n const wRow = xRow - xRowCorner;\n for (let xCol = xColMin; xCol < xColMax; xCol += dilationWidth) {\n const wCol = xCol - xColCorner;\n const pixel = xBuf.get(batch, xDepth, xRow, xCol, channel);\n if (pixel >= maxValue) {\n maxValue = pixel;\n maxPosition =\n wDepth * effectiveFilterHeight * effectiveFilterWidth +\n wRow * effectiveFilterHeight + wCol;\n }\n }\n }\n }\n maxPositions.set(maxPosition, batch, yDepth, yRow, yCol, channel);\n }\n }\n }\n }\n }\n return maxPositions;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbF91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL3V0aWxzL3Bvb2xfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLE1BQU0sRUFBMkMsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRyxNQUFNLFVBQVUsSUFBSSxDQUNoQixPQUFtQixFQUFFLE1BQWdCLEVBQUUsS0FBZSxFQUFFLE9BQWlCLEVBQ3pFLFFBQWlDLEVBQ2pDLFFBQXFCO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFFdEMsTUFBTSxZQUFZLEdBQ2QsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRWpDLE1BQU0sa0JBQWtC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b0JBQW9CO2dEQUNyRCxJQUFJLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDO3FDQUN6QztpQ0FDRjs2QkFDRjt5QkFDRjt3QkFFRCxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ25FO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIGJ1ZmZlciwgRGF0YVR5cGUsIFJhbmssIFRlbnNvckJ1ZmZlciwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBvb2woXG4gICAgeFZhbHVlczogVHlwZWRBcnJheSwgeFNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLCBzdHJpZGVzOiBudW1iZXJbXSxcbiAgICBjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8sXG4gICAgcG9vbFR5cGU6ICdtYXgnfCdhdmcnKTogVGVuc29yQnVmZmVyPFJhbmssIERhdGFUeXBlPiB7XG4gIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgY29uc3QgZGlsYXRpb25IZWlnaHQgPSBjb252SW5mby5kaWxhdGlvbkhlaWdodDtcbiAgY29uc3QgZGlsYXRpb25XaWR0aCA9IGNvbnZJbmZvLmRpbGF0aW9uV2lkdGg7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckhlaWdodDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVyV2lkdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJXaWR0aDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgY29uc3QgaW5pdGlhbFZhbHVlID1cbiAgICAgIChwb29sVHlwZSA9PT0gJ21heCcgPyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gYnVmZmVyKGNvbnZJbmZvLm91dFNoYXBlLCBkdHlwZSk7XG4gIGNvbnN0IG91dHB1dFZhbHMgPSBvdXRwdXQudmFsdWVzO1xuXG4gIGNvbnN0IG91dHB1dEJhdGNoU3RyaWRlcyA9XG4gICAgICBjb252SW5mby5vdXRTaGFwZVsxXSAqIGNvbnZJbmZvLm91dFNoYXBlWzJdICogY29udkluZm8ub3V0U2hhcGVbM107XG4gIGNvbnN0IG91dHB1dFJvd1N0cmlkZXMgPSBjb252SW5mby5vdXRTaGFwZVsyXSAqIGNvbnZJbmZvLm91dFNoYXBlWzNdO1xuICBjb25zdCBvdXRwdXRDb2xTdHJpZGVzID0gY29udkluZm8ub3V0U2hhcGVbM107XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBjb252SW5mby5iYXRjaFNpemU7ICsrYikge1xuICAgIGNvbnN0IG91dHB1dEJhdGNoT2Zmc2V0ID0gYiAqIG91dHB1dEJhdGNoU3RyaWRlcztcbiAgICBjb25zdCBpbnB1dEJhdGNoT2Zmc2V0ID0gYiAqIHN0cmlkZXNbMF07XG4gICAgZm9yIChsZXQgZCA9IDA7IGQgPCBjb252SW5mby5pbkNoYW5uZWxzOyArK2QpIHtcbiAgICAgIGZvciAobGV0IHlSID0gMDsgeVIgPCBjb252SW5mby5vdXRIZWlnaHQ7ICsreVIpIHtcbiAgICAgICAgY29uc3QgeFJDb3JuZXIgPSB5UiAqIHN0cmlkZUhlaWdodCAtIHBhZFRvcDtcbiAgICAgICAgY29uc3QgeFJNaW4gPSBNYXRoLm1heCgwLCB4UkNvcm5lcik7XG4gICAgICAgIGNvbnN0IHhSTWF4ID1cbiAgICAgICAgICAgIE1hdGgubWluKGNvbnZJbmZvLmluSGVpZ2h0LCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgKyB4UkNvcm5lcik7XG4gICAgICAgIGNvbnN0IG91dHB1dFJvd09mZnNldCA9IG91dHB1dEJhdGNoT2Zmc2V0ICsgeVIgKiBvdXRwdXRSb3dTdHJpZGVzO1xuICAgICAgICBmb3IgKGxldCB5QyA9IDA7IHlDIDwgY29udkluZm8ub3V0V2lkdGg7ICsreUMpIHtcbiAgICAgICAgICBjb25zdCB4Q0Nvcm5lciA9IHlDICogc3RyaWRlV2lkdGggLSBwYWRMZWZ0O1xuICAgICAgICAgIGNvbnN0IHhDTWluID0gTWF0aC5tYXgoMCwgeENDb3JuZXIpO1xuICAgICAgICAgIGNvbnN0IHhDTWF4ID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oY29udkluZm8uaW5XaWR0aCwgZWZmZWN0aXZlRmlsdGVyV2lkdGggKyB4Q0Nvcm5lcik7XG4gICAgICAgICAgbGV0IG1pbk1heFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICAgIGxldCBhdmdWYWx1ZSA9IDA7XG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICBmb3IgKGxldCB4UiA9IHhSTWluOyB4UiA8IHhSTWF4OyB4UiArPSBkaWxhdGlvbkhlaWdodCkge1xuICAgICAgICAgICAgY29uc3QgeFJPZmZzZXQgPSBpbnB1dEJhdGNoT2Zmc2V0ICsgeFIgKiBzdHJpZGVzWzFdO1xuICAgICAgICAgICAgZm9yIChsZXQgeEMgPSB4Q01pbjsgeEMgPCB4Q01heDsgeEMgKz0gZGlsYXRpb25XaWR0aCkge1xuICAgICAgICAgICAgICBjb25zdCB4Q09mZnNldCA9IHhST2Zmc2V0ICsgeEMgKiBzdHJpZGVzWzJdO1xuICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9IHhWYWx1ZXNbeENPZmZzZXQgKyBkXTtcbiAgICAgICAgICAgICAgaWYgKChwb29sVHlwZSA9PT0gJ21heCcgJiYgcGl4ZWwgPiBtaW5NYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW5NYXhWYWx1ZSA9IHBpeGVsO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvb2xUeXBlID09PSAnYXZnJykge1xuICAgICAgICAgICAgICAgIGF2Z1ZhbHVlICs9IHBpeGVsO1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05hTihtaW5NYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG91dHB1dE9mZnNldCA9IG91dHB1dFJvd09mZnNldCArIHlDICogb3V0cHV0Q29sU3RyaWRlcyArIGQ7XG4gICAgICAgICAgb3V0cHV0VmFsc1tvdXRwdXRPZmZzZXRdID1cbiAgICAgICAgICAgICAgcG9vbFR5cGUgPT09ICdhdmcnID8gYXZnVmFsdWUgLyBjb3VudCA6IG1pbk1heFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXhQb29sUG9zaXRpb25zKFxuICAgIHhWYWx1ZXM6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSxcbiAgICBjb252SW5mbzogYmFja2VuZF91dGlsLkNvbnYyREluZm8sIGZsYXR0ZW5Qb3NpdGlvbnMgPSBmYWxzZSxcbiAgICBpbmNsdWRlQmF0Y2hJbkluZGV4ID0gZmFsc2UpOiBUZW5zb3JCdWZmZXI8UmFuaywgJ2ludDMyJz4ge1xuICBjb25zdCBtYXhQb3NpdGlvbnMgPSBidWZmZXIoY29udkluZm8ub3V0U2hhcGUsICdpbnQzMicpO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG4gIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCBwYWRMZWZ0ID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuXG4gIGNvbnN0IHhCdWYgPSBidWZmZXIoeFNoYXBlLCBkdHlwZSwgeFZhbHVlcyk7XG4gIGZvciAobGV0IGIgPSAwOyBiIDwgY29udkluZm8uYmF0Y2hTaXplOyArK2IpIHtcbiAgICBmb3IgKGxldCBkID0gMDsgZCA8IGNvbnZJbmZvLmluQ2hhbm5lbHM7ICsrZCkge1xuICAgICAgZm9yIChsZXQgeVIgPSAwOyB5UiA8IGNvbnZJbmZvLm91dEhlaWdodDsgKyt5Uikge1xuICAgICAgICBjb25zdCB4UkNvcm5lciA9IHlSICogc3RyaWRlSGVpZ2h0IC0gcGFkVG9wO1xuICAgICAgICBsZXQgeFJNaW4gPSB4UkNvcm5lcjtcbiAgICAgICAgd2hpbGUgKHhSTWluIDwgMCkge1xuICAgICAgICAgIHhSTWluICs9IGRpbGF0aW9uSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IHhSTWluID0gTWF0aC5tYXgoMCwgeFJDb3JuZXIpO1xuICAgICAgICBjb25zdCB4Uk1heCA9XG4gICAgICAgICAgICBNYXRoLm1pbihjb252SW5mby5pbkhlaWdodCwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ICsgeFJDb3JuZXIpO1xuICAgICAgICBmb3IgKGxldCB5QyA9IDA7IHlDIDwgY29udkluZm8ub3V0V2lkdGg7ICsreUMpIHtcbiAgICAgICAgICBjb25zdCB4Q0Nvcm5lciA9IHlDICogc3RyaWRlV2lkdGggLSBwYWRMZWZ0O1xuICAgICAgICAgIGxldCB4Q01pbiA9IHhDQ29ybmVyO1xuICAgICAgICAgIHdoaWxlICh4Q01pbiA8IDApIHtcbiAgICAgICAgICAgIHhDTWluICs9IGRpbGF0aW9uV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHhDTWF4ID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oY29udkluZm8uaW5XaWR0aCwgZWZmZWN0aXZlRmlsdGVyV2lkdGggKyB4Q0Nvcm5lcik7XG4gICAgICAgICAgbGV0IG1heFZhbHVlID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICAgIGxldCBtYXhQb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgICAgZm9yIChsZXQgeFIgPSB4Uk1pbjsgeFIgPCB4Uk1heDsgeFIgKz0gZGlsYXRpb25IZWlnaHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdSID0geFIgLSB4UkNvcm5lcjtcbiAgICAgICAgICAgIGZvciAobGV0IHhDID0geENNaW47IHhDIDwgeENNYXg7IHhDICs9IGRpbGF0aW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd0MgPSB4QyAtIHhDQ29ybmVyO1xuICAgICAgICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIGRpc2FibGUtbmV4dC1saW5lIGlzIG5vdCB3b3JraW5nXG4gICAgICAgICAgICAgIC8vIFRPRE8obWF0dHNvdWxhbmlsbGUpOiBSZW1vdmUgdGhpcyB3aGVuIHN3aXRjaGluZyB0byBUUzUuXG4gICAgICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlOiBuby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvbiAqL1xuICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9IHhCdWYuZ2V0KGIsIHhSLCB4QywgZCkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAocGl4ZWwgPiBtYXhWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gcGl4ZWwgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGlmIChmbGF0dGVuUG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICBtYXhQb3NpdGlvbiA9IGluY2x1ZGVCYXRjaEluSW5kZXggP1xuICAgICAgICAgICAgICAgICAgICAgICgoYiAqIGNvbnZJbmZvLmluSGVpZ2h0ICsgeFIpICogY29udkluZm8uaW5XaWR0aCArIHhDKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252SW5mby5pbkNoYW5uZWxzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZCA6XG4gICAgICAgICAgICAgICAgICAgICAgKHhSICogY29udkluZm8uaW5XaWR0aCArIHhDKSAqIGNvbnZJbmZvLmluQ2hhbm5lbHMgKyBkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtYXhQb3NpdGlvbiA9IHdSICogZWZmZWN0aXZlRmlsdGVyV2lkdGggKyB3QztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbWF4UG9zaXRpb25zLnNldChtYXhQb3NpdGlvbiwgYiwgeVIsIHlDLCBkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbWF4UG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9vbDNkKFxuICAgIHhWYWx1ZXM6IFR5cGVkQXJyYXksIHhTaGFwZTogbnVtYmVyW10sIGR0eXBlOiBEYXRhVHlwZSwgc3RyaWRlczogbnVtYmVyW10sXG4gICAgY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252M0RJbmZvLFxuICAgIHBvb2xUeXBlOiAnbWF4J3wnYXZnJyk6IFRlbnNvckJ1ZmZlcjxSYW5rLCBEYXRhVHlwZT4ge1xuICBjb25zdCBzdHJpZGVEZXB0aCA9IGNvbnZJbmZvLnN0cmlkZURlcHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGRpbGF0aW9uRGVwdGggPSBjb252SW5mby5kaWxhdGlvbkRlcHRoO1xuICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVyRGVwdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJEZXB0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRGcm9udCA9IGNvbnZJbmZvLnBhZEluZm8uZnJvbnQ7XG4gIGNvbnN0IHBhZFRvcCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCBwYWRMZWZ0ID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9XG4gICAgICAocG9vbFR5cGUgPT09ICdtYXgnID8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuXG4gIGNvbnN0IG91dHB1dCA9IGJ1ZmZlcihjb252SW5mby5vdXRTaGFwZSwgZHR5cGUpO1xuICBjb25zdCBvdXRwdXRWYWxzID0gb3V0cHV0LnZhbHVlcztcblxuICBjb25zdCBvdXRwdXRCYXRjaFN0cmlkZXMgPSBjb252SW5mby5vdXRTaGFwZVsxXSAqIGNvbnZJbmZvLm91dFNoYXBlWzJdICpcbiAgICAgIGNvbnZJbmZvLm91dFNoYXBlWzNdICogY29udkluZm8ub3V0U2hhcGVbNF07XG4gIGNvbnN0IG91dHB1dERlcHRoU3RyaWRlcyA9XG4gICAgICBjb252SW5mby5vdXRTaGFwZVsyXSAqIGNvbnZJbmZvLm91dFNoYXBlWzNdICogY29udkluZm8ub3V0U2hhcGVbNF07XG4gIGNvbnN0IG91dHB1dFJvd1N0cmlkZXMgPSBjb252SW5mby5vdXRTaGFwZVszXSAqIGNvbnZJbmZvLm91dFNoYXBlWzRdO1xuICBjb25zdCBvdXRwdXRDb2xTdHJpZGVzID0gY29udkluZm8ub3V0U2hhcGVbNF07XG5cbiAgZm9yIChsZXQgYmF0Y2ggPSAwOyBiYXRjaCA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiYXRjaCkge1xuICAgIGNvbnN0IG91dHB1dEJhdGNoT2Zmc2V0ID0gYmF0Y2ggKiBvdXRwdXRCYXRjaFN0cmlkZXM7XG4gICAgY29uc3QgaW5wdXRCYXRjaE9mZnNldCA9IGJhdGNoICogc3RyaWRlc1swXTtcbiAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGNvbnZJbmZvLmluQ2hhbm5lbHM7ICsrY2hhbm5lbCkge1xuICAgICAgZm9yIChsZXQgeURlcHRoID0gMDsgeURlcHRoIDwgY29udkluZm8ub3V0RGVwdGg7ICsreURlcHRoKSB7XG4gICAgICAgIGNvbnN0IHhEZXB0aENvcm5lciA9IHlEZXB0aCAqIHN0cmlkZURlcHRoIC0gcGFkRnJvbnQ7XG4gICAgICAgIGxldCB4RGVwdGhNaW4gPSB4RGVwdGhDb3JuZXI7XG4gICAgICAgIHdoaWxlICh4RGVwdGhNaW4gPCAwKSB7XG4gICAgICAgICAgeERlcHRoTWluICs9IGRpbGF0aW9uRGVwdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeERlcHRoTWF4ID1cbiAgICAgICAgICAgIE1hdGgubWluKGNvbnZJbmZvLmluRGVwdGgsIGVmZmVjdGl2ZUZpbHRlckRlcHRoICsgeERlcHRoQ29ybmVyKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0RGVwdGhPZmZzZXQgPVxuICAgICAgICAgICAgb3V0cHV0QmF0Y2hPZmZzZXQgKyB5RGVwdGggKiBvdXRwdXREZXB0aFN0cmlkZXM7XG4gICAgICAgIGZvciAobGV0IHlSb3cgPSAwOyB5Um93IDwgY29udkluZm8ub3V0SGVpZ2h0OyArK3lSb3cpIHtcbiAgICAgICAgICBjb25zdCB4Um93Q29ybmVyID0geVJvdyAqIHN0cmlkZUhlaWdodCAtIHBhZFRvcDtcbiAgICAgICAgICBsZXQgeFJvd01pbiA9IHhSb3dDb3JuZXI7XG4gICAgICAgICAgd2hpbGUgKHhSb3dNaW4gPCAwKSB7XG4gICAgICAgICAgICB4Um93TWluICs9IGRpbGF0aW9uSGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB4Um93TWF4ID1cbiAgICAgICAgICAgICAgTWF0aC5taW4oY29udkluZm8uaW5IZWlnaHQsIGVmZmVjdGl2ZUZpbHRlckhlaWdodCArIHhSb3dDb3JuZXIpO1xuICAgICAgICAgIGNvbnN0IG91dHB1dFJvd09mZnNldCA9IG91dHB1dERlcHRoT2Zmc2V0ICsgeVJvdyAqIG91dHB1dFJvd1N0cmlkZXM7XG4gICAgICAgICAgZm9yIChsZXQgeUNvbCA9IDA7IHlDb2wgPCBjb252SW5mby5vdXRXaWR0aDsgKyt5Q29sKSB7XG4gICAgICAgICAgICBjb25zdCB4Q29sQ29ybmVyID0geUNvbCAqIHN0cmlkZVdpZHRoIC0gcGFkTGVmdDtcbiAgICAgICAgICAgIGxldCB4Q29sTWluID0geENvbENvcm5lcjtcbiAgICAgICAgICAgIHdoaWxlICh4Q29sTWluIDwgMCkge1xuICAgICAgICAgICAgICB4Q29sTWluICs9IGRpbGF0aW9uV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4Q29sTWF4ID1cbiAgICAgICAgICAgICAgICBNYXRoLm1pbihjb252SW5mby5pbldpZHRoLCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCArIHhDb2xDb3JuZXIpO1xuICAgICAgICAgICAgLy8gU2hhZGVyIGNvZGUgYmVnaW5zXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRDb2xPZmZzZXQgPSBvdXRwdXRSb3dPZmZzZXQgKyB5Q29sICogb3V0cHV0Q29sU3RyaWRlcztcbiAgICAgICAgICAgIGxldCBtaW5NYXhWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgICAgIGxldCBhdmdWYWx1ZSA9IDA7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgeERlcHRoID0geERlcHRoTWluOyB4RGVwdGggPCB4RGVwdGhNYXg7XG4gICAgICAgICAgICAgICAgIHhEZXB0aCArPSBkaWxhdGlvbkRlcHRoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHhEZXB0aE9mZnNldCA9IGlucHV0QmF0Y2hPZmZzZXQgKyB4RGVwdGggKiBzdHJpZGVzWzFdO1xuICAgICAgICAgICAgICBmb3IgKGxldCB4Um93ID0geFJvd01pbjsgeFJvdyA8IHhSb3dNYXg7IHhSb3cgKz0gZGlsYXRpb25IZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4Um93T2Zmc2V0ID0geERlcHRoT2Zmc2V0ICsgeFJvdyAqIHN0cmlkZXNbMl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeENvbCA9IHhDb2xNaW47IHhDb2wgPCB4Q29sTWF4O1xuICAgICAgICAgICAgICAgICAgICAgeENvbCArPSBkaWxhdGlvbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB4Q29sT2Zmc2V0ID0geFJvd09mZnNldCArIHhDb2wgKiBzdHJpZGVzWzNdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgPSB4VmFsdWVzW3hDb2xPZmZzZXQgKyBjaGFubmVsXTtcbiAgICAgICAgICAgICAgICAgIGlmICgocG9vbFR5cGUgPT09ICdtYXgnICYmIHBpeGVsID4gbWluTWF4VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbk1heFZhbHVlID0gcGl4ZWw7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvb2xUeXBlID09PSAnYXZnJykge1xuICAgICAgICAgICAgICAgICAgICBhdmdWYWx1ZSArPSBwaXhlbDtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW5NYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW5NYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNOYU4obWluTWF4VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG91dHB1dE9mZnNldCA9IG91dHB1dENvbE9mZnNldCArIGNoYW5uZWw7XG4gICAgICAgICAgICBvdXRwdXRWYWxzW291dHB1dE9mZnNldF0gPSBwb29sVHlwZSA9PT0gJ2F2ZycgP1xuICAgICAgICAgICAgICAgIGF2Z1ZhbHVlIC8gTWF0aC5tYXgoY291bnQsIDEpIDpcbiAgICAgICAgICAgICAgICBtaW5NYXhWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbDNkUG9zaXRpb25zKFxuICAgIHhCdWY6IFRlbnNvckJ1ZmZlcjxSYW5rLCBEYXRhVHlwZT4sXG4gICAgY29udkluZm86IGJhY2tlbmRfdXRpbC5Db252M0RJbmZvKTogVGVuc29yQnVmZmVyPFJhbmssIERhdGFUeXBlPiB7XG4gIGNvbnN0IG1heFBvc2l0aW9ucyA9IGJ1ZmZlcihjb252SW5mby5vdXRTaGFwZSwgJ2ludDMyJyk7XG4gIGNvbnN0IHN0cmlkZURlcHRoID0gY29udkluZm8uc3RyaWRlRGVwdGg7XG4gIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgY29uc3QgZGlsYXRpb25EZXB0aCA9IGNvbnZJbmZvLmRpbGF0aW9uRGVwdGg7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJEZXB0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG4gIGNvbnN0IHBhZEZyb250ID0gY29udkluZm8ucGFkSW5mby5mcm9udDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IHBhZExlZnQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgZm9yIChsZXQgYmF0Y2ggPSAwOyBiYXRjaCA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiYXRjaCkge1xuICAgIGZvciAobGV0IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgY29udkluZm8uaW5DaGFubmVsczsgKytjaGFubmVsKSB7XG4gICAgICBmb3IgKGxldCB5RGVwdGggPSAwOyB5RGVwdGggPCBjb252SW5mby5vdXREZXB0aDsgKyt5RGVwdGgpIHtcbiAgICAgICAgY29uc3QgeERlcHRoQ29ybmVyID0geURlcHRoICogc3RyaWRlRGVwdGggLSBwYWRGcm9udDtcbiAgICAgICAgbGV0IHhEZXB0aE1pbiA9IHhEZXB0aENvcm5lcjtcbiAgICAgICAgd2hpbGUgKHhEZXB0aE1pbiA8IDApIHtcbiAgICAgICAgICB4RGVwdGhNaW4gKz0gZGlsYXRpb25EZXB0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4RGVwdGhNYXggPVxuICAgICAgICAgICAgTWF0aC5taW4oY29udkluZm8uaW5EZXB0aCwgZWZmZWN0aXZlRmlsdGVyRGVwdGggKyB4RGVwdGhDb3JuZXIpO1xuICAgICAgICBmb3IgKGxldCB5Um93ID0gMDsgeVJvdyA8IGNvbnZJbmZvLm91dEhlaWdodDsgKyt5Um93KSB7XG4gICAgICAgICAgY29uc3QgeFJvd0Nvcm5lciA9IHlSb3cgKiBzdHJpZGVIZWlnaHQgLSBwYWRUb3A7XG4gICAgICAgICAgbGV0IHhSb3dNaW4gPSB4Um93Q29ybmVyO1xuICAgICAgICAgIHdoaWxlICh4Um93TWluIDwgMCkge1xuICAgICAgICAgICAgeFJvd01pbiArPSBkaWxhdGlvbkhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeFJvd01heCA9XG4gICAgICAgICAgICAgIE1hdGgubWluKGNvbnZJbmZvLmluSGVpZ2h0LCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgKyB4Um93Q29ybmVyKTtcbiAgICAgICAgICBmb3IgKGxldCB5Q29sID0gMDsgeUNvbCA8IGNvbnZJbmZvLm91dFdpZHRoOyArK3lDb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHhDb2xDb3JuZXIgPSB5Q29sICogc3RyaWRlV2lkdGggLSBwYWRMZWZ0O1xuICAgICAgICAgICAgbGV0IHhDb2xNaW4gPSB4Q29sQ29ybmVyO1xuICAgICAgICAgICAgd2hpbGUgKHhDb2xNaW4gPCAwKSB7XG4gICAgICAgICAgICAgIHhDb2xNaW4gKz0gZGlsYXRpb25XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHhDb2xNYXggPVxuICAgICAgICAgICAgICAgIE1hdGgubWluKGNvbnZJbmZvLmluV2lkdGgsIGVmZmVjdGl2ZUZpbHRlcldpZHRoICsgeENvbENvcm5lcik7XG5cbiAgICAgICAgICAgIC8vIFNoYWRlciBjb2RlIGJlZ2luc1xuICAgICAgICAgICAgbGV0IG1heFZhbHVlID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICAgICAgICAgICAgbGV0IG1heFBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHhEZXB0aCA9IHhEZXB0aE1pbjsgeERlcHRoIDwgeERlcHRoTWF4O1xuICAgICAgICAgICAgICAgICB4RGVwdGggKz0gZGlsYXRpb25EZXB0aCkge1xuICAgICAgICAgICAgICBjb25zdCB3RGVwdGggPSB4RGVwdGggLSB4RGVwdGhDb3JuZXI7XG4gICAgICAgICAgICAgIGZvciAobGV0IHhSb3cgPSB4Um93TWluOyB4Um93IDwgeFJvd01heDsgeFJvdyArPSBkaWxhdGlvbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdSb3cgPSB4Um93IC0geFJvd0Nvcm5lcjtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB4Q29sID0geENvbE1pbjsgeENvbCA8IHhDb2xNYXg7XG4gICAgICAgICAgICAgICAgICAgICB4Q29sICs9IGRpbGF0aW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHdDb2wgPSB4Q29sIC0geENvbENvcm5lcjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBpeGVsID0geEJ1Zi5nZXQoYmF0Y2gsIHhEZXB0aCwgeFJvdywgeENvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgaWYgKHBpeGVsID49IG1heFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlID0gcGl4ZWwgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBtYXhQb3NpdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB3RGVwdGggKiBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgKiBlZmZlY3RpdmVGaWx0ZXJXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICB3Um93ICogZWZmZWN0aXZlRmlsdGVySGVpZ2h0ICsgd0NvbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF4UG9zaXRpb25zLnNldChtYXhQb3NpdGlvbiwgYmF0Y2gsIHlEZXB0aCwgeVJvdywgeUNvbCwgY2hhbm5lbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1heFBvc2l0aW9ucztcbn1cbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { pool } from '../utils/pool_utils';\nimport { identity } from './Identity';\nexport function avgPool(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n assertNotComplex(x, 'avgPool');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = 1;\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in avgPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n let res;\n if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n res = identity({ inputs: { x }, backend });\n }\n else {\n const xValues = backend.data.get(x.dataId).values;\n const strides = util.computeStrides(x.shape);\n const buffer = pool(xValues, x.shape, x.dtype, strides, convInfo, 'avg');\n res = backend.makeTensorInfo(convInfo.outShape, x.dtype, buffer.values);\n }\n return res;\n}\nexport const avgPoolConfig = {\n kernelName: AvgPool,\n backendName: 'cpu',\n kernelFunc: avgPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQXZnUG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsT0FBTyxFQUErQixZQUFZLEVBQW9ELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2pKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLFVBQVUsT0FBTyxDQUNuQixJQUN5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUMxRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxZQUFZLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUMvRCxHQUFHLEVBQUUsQ0FBQywyREFBMkQ7UUFDN0QsZUFBZSxPQUFPLG1CQUFtQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNyQyxJQUFJLEdBQWUsQ0FBQztJQUVwQixJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3pELEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUN4QixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQW9CLENBQUMsQ0FBQztLQUM5RDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge0F2Z1Bvb2wsIEF2Z1Bvb2xBdHRycywgQXZnUG9vbElucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtwb29sfSBmcm9tICcuLi91dGlscy9wb29sX3V0aWxzJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbChcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBBdmdQb29sSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IEF2Z1Bvb2xBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ2F2Z1Bvb2wnKTtcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuICBjb25zdCBkaWxhdGlvbnMgPSAxO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmFja2VuZF91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGF2Z1Bvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgbGV0IHJlczogVGVuc29ySW5mbztcblxuICBpZiAoY29udkluZm8uZmlsdGVyV2lkdGggPT09IDEgJiYgY29udkluZm8uZmlsdGVySGVpZ2h0ID09PSAxICYmXG4gICAgICB1dGlsLmFycmF5c0VxdWFsKGNvbnZJbmZvLmluU2hhcGUsIGNvbnZJbmZvLm91dFNoYXBlKSkge1xuICAgIHJlcyA9IGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHhWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBzdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcbiAgICBjb25zdCBidWZmZXIgPSBwb29sKHhWYWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIHN0cmlkZXMsIGNvbnZJbmZvLCAnYXZnJyk7XG4gICAgcmVzID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUsIGJ1ZmZlci52YWx1ZXMgYXMgVHlwZWRBcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IGF2Z1Bvb2xDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXZnUG9vbCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBhdmdQb29sIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3D, backend_util, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { pool3d } from '../utils/pool_utils';\nexport function avgPool3D(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dimRoundingMode, dataFormat } = attrs;\n assertNotComplex(x, 'avgPool3d');\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode, dataFormat);\n const xValues = backend.data.get(x.dataId).values;\n const outBuf = pool3d(xValues, x.shape, x.dtype, util.computeStrides(x.shape), convInfo, 'avg');\n return backend.makeTensorInfo(outBuf.shape, 'float32', outBuf.values);\n}\nexport const avgPool3DConfig = {\n kernelName: AvgPool3D,\n backendName: 'cpu',\n kernelFunc: avgPool3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9BdmdQb29sM0QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBbUMsWUFBWSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd2SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0RSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUN4RSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU5RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F2Z1Bvb2wzRCwgQXZnUG9vbDNEQXR0cnMsIEF2Z1Bvb2wzRElucHV0cywgYmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtwb29sM2R9IGZyb20gJy4uL3V0aWxzL3Bvb2xfdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbDNEKGFyZ3M6IHtcbiAgaW5wdXRzOiBBdmdQb29sM0RJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogQXZnUG9vbDNEQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXR9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnYXZnUG9vbDNkJyk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICAxIC8qIGRpbGF0aW9ucyAqLywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXQpO1xuXG4gIGNvbnN0IHhWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgb3V0QnVmID0gcG9vbDNkKFxuICAgICAgeFZhbHVlcywgeC5zaGFwZSwgeC5kdHlwZSwgdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKSwgY29udkluZm8sICdhdmcnKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRCdWYuc2hhcGUsICdmbG9hdDMyJywgb3V0QnVmLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBhdmdQb29sM0RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXZnUG9vbDNELFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGF2Z1Bvb2wzRCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPool3DGrad, backend_util, buffer } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function avgPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n assertNotComplex([dy, input], 'avgPool3DGrad');\n const convInfo = backend_util.computePool3DInfo(input.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const filterDepth = convInfo.filterDepth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const dx = buffer(input.shape, 'float32');\n const avgMultiplier = 1 / (filterDepth * filterHeight * filterWidth);\n const dyBuf = backend.bufferSync(dy);\n for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) {\n for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) {\n for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) {\n // Shader code begins.\n const dyDepthCorner = dxDepth - padFront;\n const dyRowCorner = dxRow - padTop;\n const dyColCorner = dxCol - padLeft;\n let dotProd = 0;\n for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) {\n const dyDepth = (dyDepthCorner + wDepth) / strideDepth;\n if (dyDepth < 0 || dyDepth >= convInfo.outDepth ||\n Math.floor(dyDepth) !== dyDepth) {\n continue;\n }\n for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) {\n const dyRow = (dyRowCorner + wRow) / strideHeight;\n if (dyRow < 0 || dyRow >= convInfo.outHeight ||\n Math.floor(dyRow) !== dyRow) {\n continue;\n }\n for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) {\n const dyCol = (dyColCorner + wCol) / strideWidth;\n if (dyCol < 0 || dyCol >= convInfo.outWidth ||\n Math.floor(dyCol) !== dyCol) {\n continue;\n }\n const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n dotProd += pixel;\n }\n }\n }\n dx.set(dotProd * avgMultiplier, batch, dxDepth, dxRow, dxCol, channel);\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const avgPool3DGradConfig = {\n kernelName: AvgPool3DGrad,\n backendName: 'cpu',\n kernelFunc: avgPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQXZnUG9vbDNER3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsYUFBYSxFQUEyQyxZQUFZLEVBQUUsTUFBTSxFQUE2QyxNQUFNLHVCQUF1QixDQUFDO0FBRy9KLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsYUFBYSxDQUFDLElBSTdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFMUQsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFL0MsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxLQUFLLENBQUMsS0FBaUQsRUFBRSxVQUFVLEVBQ25FLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV0RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7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S0FBSyxFQUFFO29DQUMvQixTQUFTO2lDQUNWO2dDQUNELEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxvQkFBb0IsRUFDekMsSUFBSSxJQUFJLGFBQWEsRUFBRTtvQ0FDMUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO29DQUNqRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRO3dDQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTt3Q0FDL0IsU0FBUztxQ0FDVjtvQ0FFRCxNQUFNLEtBQUssR0FDUCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztvQ0FDckQsT0FBTyxJQUFJLEtBQUssQ0FBQztpQ0FDbEI7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsRUFBRSxDQUFDLEdBQUcsQ0FDRixPQUFPLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztxQkFDckU7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0F2Z1Bvb2wzREdyYWQsIEF2Z1Bvb2wzREdyYWRBdHRycywgQXZnUG9vbDNER3JhZElucHV0cywgYmFja2VuZF91dGlsLCBidWZmZXIsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFuaywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdmdQb29sM0RHcmFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBBdmdQb29sM0RHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IEF2Z1Bvb2wzREdyYWRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0fSA9IGlucHV0cztcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2R5LCBpbnB1dF0sICdhdmdQb29sM0RHcmFkJyk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wzREluZm8oXG4gICAgICBpbnB1dC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLFxuICAgICAgc3RyaWRlcywgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBzdHJpZGVEZXB0aCA9IGNvbnZJbmZvLnN0cmlkZURlcHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGZpbHRlckRlcHRoID0gY29udkluZm8uZmlsdGVyRGVwdGg7XG4gIGNvbnN0IGZpbHRlckhlaWdodCA9IGNvbnZJbmZvLmZpbHRlckhlaWdodDtcbiAgY29uc3QgZmlsdGVyV2lkdGggPSBjb252SW5mby5maWx0ZXJXaWR0aDtcbiAgY29uc3QgZGlsYXRpb25EZXB0aCA9IGNvbnZJbmZvLmRpbGF0aW9uRGVwdGg7XG4gIGNvbnN0IGRpbGF0aW9uSGVpZ2h0ID0gY29udkluZm8uZGlsYXRpb25IZWlnaHQ7XG4gIGNvbnN0IGRpbGF0aW9uV2lkdGggPSBjb252SW5mby5kaWxhdGlvbldpZHRoO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJEZXB0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlckRlcHRoO1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7XG4gIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcldpZHRoID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVyV2lkdGg7XG4gIGNvbnN0IHBhZEZyb250ID0gZWZmZWN0aXZlRmlsdGVyRGVwdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5mcm9udDtcbiAgY29uc3QgcGFkTGVmdCA9IGVmZmVjdGl2ZUZpbHRlcldpZHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgY29uc3QgcGFkVG9wID0gZWZmZWN0aXZlRmlsdGVySGVpZ2h0IC0gMSAtIGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCBkeCA9IGJ1ZmZlcihpbnB1dC5zaGFwZSwgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBhdmdNdWx0aXBsaWVyID0gMSAvIChmaWx0ZXJEZXB0aCAqIGZpbHRlckhlaWdodCAqIGZpbHRlcldpZHRoKTtcblxuICBjb25zdCBkeUJ1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnZmxvYXQzMic+KGR5KTtcblxuICBmb3IgKGxldCBiYXRjaCA9IDA7IGJhdGNoIDwgY29udkluZm8uYmF0Y2hTaXplOyArK2JhdGNoKSB7XG4gICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBjb252SW5mby5pbkNoYW5uZWxzOyArK2NoYW5uZWwpIHtcbiAgICAgIGZvciAobGV0IGR4RGVwdGggPSAwOyBkeERlcHRoIDwgY29udkluZm8uaW5EZXB0aDsgKytkeERlcHRoKSB7XG4gICAgICAgIGZvciAobGV0IGR4Um93ID0gMDsgZHhSb3cgPCBjb252SW5mby5pbkhlaWdodDsgKytkeFJvdykge1xuICAgICAgICAgIGZvciAobGV0IGR4Q29sID0gMDsgZHhDb2wgPCBjb252SW5mby5pbldpZHRoOyArK2R4Q29sKSB7XG4gICAgICAgICAgICAvLyBTaGFkZXIgY29kZSBiZWdpbnMuXG4gICAgICAgICAgICBjb25zdCBkeURlcHRoQ29ybmVyID0gZHhEZXB0aCAtIHBhZEZyb250O1xuICAgICAgICAgICAgY29uc3QgZHlSb3dDb3JuZXIgPSBkeFJvdyAtIHBhZFRvcDtcbiAgICAgICAgICAgIGNvbnN0IGR5Q29sQ29ybmVyID0gZHhDb2wgLSBwYWRMZWZ0O1xuICAgICAgICAgICAgbGV0IGRvdFByb2QgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgd0RlcHRoID0gMDsgd0RlcHRoIDwgZWZmZWN0aXZlRmlsdGVyRGVwdGg7XG4gICAgICAgICAgICAgICAgIHdEZXB0aCArPSBkaWxhdGlvbkRlcHRoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGR5RGVwdGggPSAoZHlEZXB0aENvcm5lciArIHdEZXB0aCkgLyBzdHJpZGVEZXB0aDtcbiAgICAgICAgICAgICAgaWYgKGR5RGVwdGggPCAwIHx8IGR5RGVwdGggPj0gY29udkluZm8ub3V0RGVwdGggfHxcbiAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZHlEZXB0aCkgIT09IGR5RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCB3Um93ID0gMDsgd1JvdyA8IGVmZmVjdGl2ZUZpbHRlckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICB3Um93ICs9IGRpbGF0aW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHlSb3cgPSAoZHlSb3dDb3JuZXIgKyB3Um93KSAvIHN0cmlkZUhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAoZHlSb3cgPCAwIHx8IGR5Um93ID49IGNvbnZJbmZvLm91dEhlaWdodCB8fFxuICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGR5Um93KSAhPT0gZHlSb3cpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCB3Q29sID0gMDsgd0NvbCA8IGVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgd0NvbCArPSBkaWxhdGlvbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkeUNvbCA9IChkeUNvbENvcm5lciArIHdDb2wpIC8gc3RyaWRlV2lkdGg7XG4gICAgICAgICAgICAgICAgICBpZiAoZHlDb2wgPCAwIHx8IGR5Q29sID49IGNvbnZJbmZvLm91dFdpZHRoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihkeUNvbCkgIT09IGR5Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9XG4gICAgICAgICAgICAgICAgICAgICAgZHlCdWYuZ2V0KGJhdGNoLCBkeURlcHRoLCBkeVJvdywgZHlDb2wsIGNoYW5uZWwpO1xuICAgICAgICAgICAgICAgICAgZG90UHJvZCArPSBwaXhlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGR4LnNldChcbiAgICAgICAgICAgICAgICBkb3RQcm9kICogYXZnTXVsdGlwbGllciwgYmF0Y2gsIGR4RGVwdGgsIGR4Um93LCBkeENvbCwgY2hhbm5lbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZHguc2hhcGUsIGR4LmR0eXBlLCBkeC52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbDNER3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBBdmdQb29sM0RHcmFkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGF2Z1Bvb2wzREdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { AvgPoolGrad, backend_util, buffer } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function avgPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const x = input;\n assertNotComplex([dy, input], 'avgPoolGrad');\n const { filterSize, strides, pad } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad);\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const dx = buffer(x.shape, 'float32');\n const avgMultiplier = 1 / (filterHeight * filterWidth);\n const dyData = backend.data.get(dy.dataId).values;\n const dyBuf = buffer(dy.shape, 'float32', dyData);\n for (let b = 0; b < convInfo.batchSize; ++b) {\n for (let d = 0; d < convInfo.inChannels; ++d) {\n for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) {\n for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) {\n // Shader code begins.\n const dyRCorner = dxR - padTop;\n const dyCCorner = dxC - padLeft;\n let dotProd = 0;\n for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) {\n const dyR = (dyRCorner + wR) / strideHeight;\n if (dyR < 0 || dyR >= convInfo.outHeight ||\n Math.floor(dyR) !== dyR) {\n continue;\n }\n for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) {\n const dyC = (dyCCorner + wC) / strideWidth;\n if (dyC < 0 || dyC >= convInfo.outWidth ||\n Math.floor(dyC) !== dyC) {\n continue;\n }\n const pixel = dyBuf.get(b, dyR, dyC, d);\n dotProd += pixel;\n }\n }\n dx.set(dotProd * avgMultiplier, b, dxR, dxC, d);\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const avgPoolGradConfig = {\n kernelName: AvgPoolGrad,\n backendName: 'cpu',\n kernelFunc: avgPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZnUG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0F2Z1Bvb2xHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxXQUFXLEVBQXVDLFlBQVksRUFBRSxNQUFNLEVBQTZDLE1BQU0sdUJBQXVCLENBQUM7QUFHekosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLENBQUMsQ0FBQyxLQUF5QyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQ2hFLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FB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O0tBQ0Y7SUFDRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuaW1wb3J0IHtBdmdQb29sR3JhZCwgQXZnUG9vbEdyYWRBdHRycywgQXZnUG9vbEdyYWRJbnB1dHMsIGJhY2tlbmRfdXRpbCwgYnVmZmVyLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhbmssIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXZnUG9vbEdyYWQoYXJnczoge1xuICBpbnB1dHM6IEF2Z1Bvb2xHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IEF2Z1Bvb2xHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBpbnB1dH0gPSBpbnB1dHM7XG4gIGNvbnN0IHggPSBpbnB1dDtcbiAgYXNzZXJ0Tm90Q29tcGxleChbZHksIGlucHV0XSwgJ2F2Z1Bvb2xHcmFkJyk7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWR9ID0gYXR0cnM7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLCBzdHJpZGVzLFxuICAgICAgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCk7XG4gIGNvbnN0IHN0cmlkZUhlaWdodCA9IGNvbnZJbmZvLnN0cmlkZUhlaWdodDtcbiAgY29uc3Qgc3RyaWRlV2lkdGggPSBjb252SW5mby5zdHJpZGVXaWR0aDtcbiAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRMZWZ0ID0gZWZmZWN0aXZlRmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICBjb25zdCBwYWRUb3AgPSBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGR4ID1cbiAgICAgIGJ1ZmZlcjxSYW5rLlI0Pih4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGF2Z011bHRpcGxpZXIgPSAxIC8gKGZpbHRlckhlaWdodCAqIGZpbHRlcldpZHRoKTtcblxuICBjb25zdCBkeURhdGEgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIEZsb2F0MzJBcnJheTtcbiAgY29uc3QgZHlCdWYgPSBidWZmZXI8UmFuay5SND4oXG4gICAgICBkeS5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgJ2Zsb2F0MzInLCBkeURhdGEpO1xuXG4gIGZvciAobGV0IGIgPSAwOyBiIDwgY29udkluZm8uYmF0Y2hTaXplOyArK2IpIHtcbiAgICBmb3IgKGxldCBkID0gMDsgZCA8IGNvbnZJbmZvLmluQ2hhbm5lbHM7ICsrZCkge1xuICAgICAgZm9yIChsZXQgZHhSID0gMDsgZHhSIDwgY29udkluZm8uaW5IZWlnaHQ7ICsrZHhSKSB7XG4gICAgICAgIGZvciAobGV0IGR4QyA9IDA7IGR4QyA8IGNvbnZJbmZvLmluV2lkdGg7ICsrZHhDKSB7XG4gICAgICAgICAgLy8gU2hhZGVyIGNvZGUgYmVnaW5zLlxuICAgICAgICAgIGNvbnN0IGR5UkNvcm5lciA9IGR4UiAtIHBhZFRvcDtcbiAgICAgICAgICBjb25zdCBkeUNDb3JuZXIgPSBkeEMgLSBwYWRMZWZ0O1xuICAgICAgICAgIGxldCBkb3RQcm9kID0gMDtcbiAgICAgICAgICBmb3IgKGxldCB3UiA9IDA7IHdSIDwgZWZmZWN0aXZlRmlsdGVySGVpZ2h0OyB3UiArPSBkaWxhdGlvbkhlaWdodCkge1xuICAgICAgICAgICAgY29uc3QgZHlSID0gKGR5UkNvcm5lciArIHdSKSAvIHN0cmlkZUhlaWdodDtcbiAgICAgICAgICAgIGlmIChkeVIgPCAwIHx8IGR5UiA+PSBjb252SW5mby5vdXRIZWlnaHQgfHxcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGR5UikgIT09IGR5Uikge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHdDID0gMDsgd0MgPCBlZmZlY3RpdmVGaWx0ZXJXaWR0aDsgd0MgKz0gZGlsYXRpb25XaWR0aCkge1xuICAgICAgICAgICAgICBjb25zdCBkeUMgPSAoZHlDQ29ybmVyICsgd0MpIC8gc3RyaWRlV2lkdGg7XG4gICAgICAgICAgICAgIGlmIChkeUMgPCAwIHx8IGR5QyA+PSBjb252SW5mby5vdXRXaWR0aCB8fFxuICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihkeUMpICE9PSBkeUMpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHBpeGVsID0gZHlCdWYuZ2V0KGIsIGR5UiwgZHlDLCBkKTtcbiAgICAgICAgICAgICAgZG90UHJvZCArPSBwaXhlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHguc2V0KGRvdFByb2QgKiBhdmdNdWx0aXBsaWVyLCBiLCBkeFIsIGR4QywgZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZHguc2hhcGUsIGR4LmR0eXBlLCBkeC52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgYXZnUG9vbEdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQXZnUG9vbEdyYWQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYXZnUG9vbEdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FusedBatchNorm, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function batchNorm(args) {\n const { inputs, backend, attrs } = args;\n const { x, scale, offset, mean, variance } = inputs;\n util.assert(mean.shape.length === variance.shape.length, () => 'Batch normalization gradient requires mean and variance to have ' +\n 'equal ranks.');\n util.assert(offset == null || mean.shape.length === offset.shape.length, () => 'Batch normalization gradient requires mean and offset to have ' +\n 'equal ranks.');\n util.assert(scale == null || mean.shape.length === scale.shape.length, () => 'Batch normalization gradient requires mean and scale to have ' +\n 'equal ranks.');\n assertNotComplex([x, mean, variance, scale, offset], 'batchNorm');\n let { varianceEpsilon } = attrs;\n if (varianceEpsilon == null) {\n varianceEpsilon = 0.001;\n }\n const xVals = backend.data.get(x.dataId).values;\n const mVals = backend.data.get(mean.dataId).values;\n const varVals = backend.data.get(variance.dataId).values;\n const sVals = scale ? backend.data.get(scale.dataId).values :\n new Float32Array([1]);\n const offVals = offset ?\n backend.data.get(offset.dataId).values :\n new Float32Array([0]);\n const outVals = new Float32Array(xVals.length);\n const offValsLength = offVals.length;\n const sValsLength = sVals.length;\n const varValsLength = varVals.length;\n const mValsLength = mVals.length;\n let offi = 0;\n let mi = 0;\n let si = 0;\n let vi = 0;\n for (let i = 0; i < xVals.length; ++i) {\n outVals[i] = offVals[offi++] +\n (xVals[i] - mVals[mi++]) * sVals[si++] /\n Math.sqrt(varVals[vi++] + varianceEpsilon);\n if (offi >= offValsLength) {\n offi = 0;\n }\n if (mi >= mValsLength) {\n mi = 0;\n }\n if (si >= sValsLength) {\n si = 0;\n }\n if (vi >= varValsLength) {\n vi = 0;\n }\n }\n return backend.makeTensorInfo(x.shape, x.dtype, outVals);\n}\nexport const batchNormConfig = {\n kernelName: FusedBatchNorm,\n backendName: 'cpu',\n kernelFunc: batchNorm,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hOb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9CYXRjaE5vcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLGNBQWMsRUFBK0YsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbEQsSUFBSSxDQUFDLE1BQU0sQ0FDUCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDM0MsR0FBRyxFQUFFLENBQUMsa0VBQWtFO1FBQ3BFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1AsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDM0QsR0FBRyxFQUFFLENBQUMsZ0VBQWdFO1FBQ2xFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDekQsR0FBRyxFQUFFLENBQUMsK0RBQStEO1FBQ2pFLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxF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QUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsU0FBa0M7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtGdXNlZEJhdGNoTm9ybSwgRnVzZWRCYXRjaE5vcm1BdHRycywgRnVzZWRCYXRjaE5vcm1JbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXRjaE5vcm0oYXJnczoge1xuICBpbnB1dHM6IEZ1c2VkQmF0Y2hOb3JtSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IEZ1c2VkQmF0Y2hOb3JtQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIHNjYWxlLCBvZmZzZXQsIG1lYW4sIHZhcmlhbmNlfSA9IGlucHV0cztcblxuICB1dGlsLmFzc2VydChcbiAgICAgIG1lYW4uc2hhcGUubGVuZ3RoID09PSB2YXJpYW5jZS5zaGFwZS5sZW5ndGgsXG4gICAgICAoKSA9PiAnQmF0Y2ggbm9ybWFsaXphdGlvbiBncmFkaWVudCByZXF1aXJlcyBtZWFuIGFuZCB2YXJpYW5jZSB0byBoYXZlICcgK1xuICAgICAgICAgICdlcXVhbCByYW5rcy4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBvZmZzZXQgPT0gbnVsbCB8fCBtZWFuLnNoYXBlLmxlbmd0aCA9PT0gb2Zmc2V0LnNoYXBlLmxlbmd0aCxcbiAgICAgICgpID0+ICdCYXRjaCBub3JtYWxpemF0aW9uIGdyYWRpZW50IHJlcXVpcmVzIG1lYW4gYW5kIG9mZnNldCB0byBoYXZlICcgK1xuICAgICAgICAgICdlcXVhbCByYW5rcy4nKTtcbiAgdXRpbC5hc3NlcnQoXG4gICAgICBzY2FsZSA9PSBudWxsIHx8IG1lYW4uc2hhcGUubGVuZ3RoID09PSBzY2FsZS5zaGFwZS5sZW5ndGgsXG4gICAgICAoKSA9PiAnQmF0Y2ggbm9ybWFsaXphdGlvbiBncmFkaWVudCByZXF1aXJlcyBtZWFuIGFuZCBzY2FsZSB0byBoYXZlICcgK1xuICAgICAgICAgICdlcXVhbCByYW5rcy4nKTtcblxuICBhc3NlcnROb3RDb21wbGV4KFt4LCBtZWFuLCB2YXJpYW5jZSwgc2NhbGUsIG9mZnNldF0sICdiYXRjaE5vcm0nKTtcblxuICBsZXQge3ZhcmlhbmNlRXBzaWxvbn0gPSBhdHRycztcbiAgaWYgKHZhcmlhbmNlRXBzaWxvbiA9PSBudWxsKSB7XG4gICAgdmFyaWFuY2VFcHNpbG9uID0gMC4wMDE7XG4gIH1cblxuICBjb25zdCB4VmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBtVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQobWVhbi5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB2YXJWYWxzID0gYmFja2VuZC5kYXRhLmdldCh2YXJpYW5jZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBzVmFscyA9IHNjYWxlID8gYmFja2VuZC5kYXRhLmdldChzY2FsZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5IDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoWzFdKTtcbiAgY29uc3Qgb2ZmVmFscyA9IG9mZnNldCA/XG4gICAgICBiYWNrZW5kLmRhdGEuZ2V0KG9mZnNldC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5IDpcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoWzBdKTtcbiAgY29uc3Qgb3V0VmFscyA9IG5ldyBGbG9hdDMyQXJyYXkoeFZhbHMubGVuZ3RoKTtcblxuICBjb25zdCBvZmZWYWxzTGVuZ3RoID0gb2ZmVmFscy5sZW5ndGg7XG4gIGNvbnN0IHNWYWxzTGVuZ3RoID0gc1ZhbHMubGVuZ3RoO1xuICBjb25zdCB2YXJWYWxzTGVuZ3RoID0gdmFyVmFscy5sZW5ndGg7XG4gIGNvbnN0IG1WYWxzTGVuZ3RoID0gbVZhbHMubGVuZ3RoO1xuXG4gIGxldCBvZmZpID0gMDtcbiAgbGV0IG1pID0gMDtcbiAgbGV0IHNpID0gMDtcbiAgbGV0IHZpID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4VmFscy5sZW5ndGg7ICsraSkge1xuICAgIG91dFZhbHNbaV0gPSBvZmZWYWxzW29mZmkrK10gK1xuICAgICAgICAoeFZhbHNbaV0gLSBtVmFsc1ttaSsrXSkgKiBzVmFsc1tzaSsrXSAvXG4gICAgICAgICAgICBNYXRoLnNxcnQodmFyVmFsc1t2aSsrXSArIHZhcmlhbmNlRXBzaWxvbik7XG4gICAgaWYgKG9mZmkgPj0gb2ZmVmFsc0xlbmd0aCkge1xuICAgICAgb2ZmaSA9IDA7XG4gICAgfVxuICAgIGlmIChtaSA+PSBtVmFsc0xlbmd0aCkge1xuICAgICAgbWkgPSAwO1xuICAgIH1cbiAgICBpZiAoc2kgPj0gc1ZhbHNMZW5ndGgpIHtcbiAgICAgIHNpID0gMDtcbiAgICB9XG4gICAgaWYgKHZpID49IHZhclZhbHNMZW5ndGgpIHtcbiAgICAgIHZpID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeC5zaGFwZSwgeC5kdHlwZSwgb3V0VmFscyk7XG59XG5cbmV4cG9ydCBjb25zdCBiYXRjaE5vcm1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRnVzZWRCYXRjaE5vcm0sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYmF0Y2hOb3JtIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BatchToSpaceND } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nimport { transpose } from './Transpose';\nexport function batchToSpaceND(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, crops } = attrs;\n assertNotComplex([x], 'batchToSpaceND');\n const prod = blockShape.reduce((a, b) => a * b);\n const reshaped = backend_util.getReshaped(x.shape, blockShape, prod);\n const permuted = backend_util.getPermuted(reshaped.length, blockShape.length);\n const reshapedPermuted = backend_util.getReshapedPermuted(x.shape, blockShape, prod);\n const sliceBeginCoords = backend_util.getSliceBeginCoords(crops, blockShape.length);\n const sliceSize = backend_util.getSliceSize(reshapedPermuted, crops, blockShape.length);\n const xReshaped = reshape({ inputs: { x }, backend, attrs: { shape: reshaped } });\n const xTransposed = transpose({ inputs: { x: xReshaped }, backend, attrs: { perm: permuted } });\n const xTransposedReshaped = reshape({ inputs: { x: xTransposed }, backend, attrs: { shape: reshapedPermuted } });\n const result = slice({\n inputs: { x: xTransposedReshaped },\n backend,\n attrs: { begin: sliceBeginCoords, size: sliceSize }\n });\n backend.disposeIntermediateTensorInfo(xReshaped);\n backend.disposeIntermediateTensorInfo(xTransposed);\n backend.disposeIntermediateTensorInfo(xTransposedReshaped);\n return result;\n}\nexport const batchToSpaceNDConfig = {\n kernelName: BatchToSpaceND,\n backendName: 'cpu',\n kernelFunc: batchToSpaceND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmF0Y2hUb1NwYWNlTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0JhdGNoVG9TcGFjZU5ELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFrRixNQUFNLHVCQUF1QixDQUFDO0FBR3BKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsY0FBYyxDQUFDLElBSTlCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFaEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlFLE1BQU0sZ0JBQWdCLEdBQ2xCLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxNQUFNLGdCQUFnQixHQUNsQixZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FDWCxZQUFZLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxXQUFXLEdBQ2IsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUMvQixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUM7UUFDaEMsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDO0tBQ2xELENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFM0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEJhdGNoVG9TcGFjZU5ELCBCYXRjaFRvU3BhY2VOREF0dHJzLCBCYXRjaFRvU3BhY2VORElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vU2xpY2UnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGJhdGNoVG9TcGFjZU5EKGFyZ3M6IHtcbiAgaW5wdXRzOiBCYXRjaFRvU3BhY2VORElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBCYXRjaFRvU3BhY2VOREF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2Jsb2NrU2hhcGUsIGNyb3BzfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW3hdLCAnYmF0Y2hUb1NwYWNlTkQnKTtcblxuICBjb25zdCBwcm9kID0gYmxvY2tTaGFwZS5yZWR1Y2UoKGEsIGIpID0+IGEgKiBiKTtcblxuICBjb25zdCByZXNoYXBlZCA9IGJhY2tlbmRfdXRpbC5nZXRSZXNoYXBlZCh4LnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kKTtcbiAgY29uc3QgcGVybXV0ZWQgPSBiYWNrZW5kX3V0aWwuZ2V0UGVybXV0ZWQocmVzaGFwZWQubGVuZ3RoLCBibG9ja1NoYXBlLmxlbmd0aCk7XG4gIGNvbnN0IHJlc2hhcGVkUGVybXV0ZWQgPVxuICAgICAgYmFja2VuZF91dGlsLmdldFJlc2hhcGVkUGVybXV0ZWQoeC5zaGFwZSwgYmxvY2tTaGFwZSwgcHJvZCk7XG4gIGNvbnN0IHNsaWNlQmVnaW5Db29yZHMgPVxuICAgICAgYmFja2VuZF91dGlsLmdldFNsaWNlQmVnaW5Db29yZHMoY3JvcHMsIGJsb2NrU2hhcGUubGVuZ3RoKTtcbiAgY29uc3Qgc2xpY2VTaXplID1cbiAgICAgIGJhY2tlbmRfdXRpbC5nZXRTbGljZVNpemUocmVzaGFwZWRQZXJtdXRlZCwgY3JvcHMsIGJsb2NrU2hhcGUubGVuZ3RoKTtcblxuICBjb25zdCB4UmVzaGFwZWQgPSByZXNoYXBlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogcmVzaGFwZWR9fSk7XG4gIGNvbnN0IHhUcmFuc3Bvc2VkID1cbiAgICAgIHRyYW5zcG9zZSh7aW5wdXRzOiB7eDogeFJlc2hhcGVkfSwgYmFja2VuZCwgYXR0cnM6IHtwZXJtOiBwZXJtdXRlZH19KTtcbiAgY29uc3QgeFRyYW5zcG9zZWRSZXNoYXBlZCA9IHJlc2hhcGUoXG4gICAgICB7aW5wdXRzOiB7eDogeFRyYW5zcG9zZWR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiByZXNoYXBlZFBlcm11dGVkfX0pO1xuICBjb25zdCByZXN1bHQgPSBzbGljZSh7XG4gICAgaW5wdXRzOiB7eDogeFRyYW5zcG9zZWRSZXNoYXBlZH0sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge2JlZ2luOiBzbGljZUJlZ2luQ29vcmRzLCBzaXplOiBzbGljZVNpemV9XG4gIH0pO1xuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oeFJlc2hhcGVkKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh4VHJhbnNwb3NlZCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oeFRyYW5zcG9zZWRSZXNoYXBlZCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGJhdGNoVG9TcGFjZU5EQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEJhdGNoVG9TcGFjZU5ELFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGJhdGNoVG9TcGFjZU5EIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Bincount } from '@tensorflow/tfjs-core';\nimport { bincountImpl } from './Bincount_impl';\nexport function bincount(args) {\n const { inputs, backend, attrs } = args;\n const { x, weights } = inputs;\n const { size } = attrs;\n const xVals = backend.data.get(x.dataId).values;\n const weightsVals = backend.data.get(weights.dataId).values;\n const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size);\n return backend.makeTensorInfo([size], weights.dtype, outVals);\n}\nexport const bincountConfig = {\n kernelName: Bincount,\n backendName: 'cpu',\n kernelFunc: bincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0JpbmNvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQWtGLE1BQU0sdUJBQXVCLENBQUM7QUFHaEksT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sVUFBVSxRQUFRLENBQUMsSUFJeEI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUM5RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUUxRSxNQUFNLE9BQU8sR0FDVCxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFekUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQjtJQUMxQyxVQUFVLEVBQUUsUUFBUTtJQUNwQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsUUFBaUM7Q0FDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtCaW5jb3VudCwgQmluY291bnRBdHRycywgQmluY291bnRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHtiaW5jb3VudEltcGx9IGZyb20gJy4vQmluY291bnRfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5jb3VudChhcmdzOiB7XG4gIGlucHV0czogQmluY291bnRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogQmluY291bnRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgd2VpZ2h0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtzaXplfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHdlaWdodHNWYWxzID0gYmFja2VuZC5kYXRhLmdldCh3ZWlnaHRzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3Qgb3V0VmFscyA9XG4gICAgICBiaW5jb3VudEltcGwoeFZhbHMsIHdlaWdodHNWYWxzLCB3ZWlnaHRzLmR0eXBlLCB3ZWlnaHRzLnNoYXBlLCBzaXplKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbc2l6ZV0sIHdlaWdodHMuZHR5cGUsIG91dFZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgYmluY291bnRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQmluY291bnQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogYmluY291bnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, BroadcastArgs } from '@tensorflow/tfjs-core';\nexport function broadcastArgs(args) {\n const { inputs, backend } = args;\n const { s0, s1 } = inputs;\n const s0Vals = backend.data.get(s0.dataId).values;\n const s1Vals = backend.data.get(s1.dataId).values;\n const broadcastShape = backend_util.assertAndGetBroadcastShape(Array.from(s0Vals), Array.from(s1Vals));\n return backend.makeTensorInfo([broadcastShape.length], 'int32', Int32Array.from(broadcastShape));\n}\nexport const broadcastArgsConfig = {\n kernelName: BroadcastArgs,\n backendName: 'cpu',\n kernelFunc: broadcastArgs\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJvYWRjYXN0QXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQnJvYWRjYXN0QXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBNEQsTUFBTSx1QkFBdUIsQ0FBQztBQUk3SCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBRzdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFeEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFaEUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLDBCQUEwQixDQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUU1QyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQ3pCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFpQjtJQUMvQyxVQUFVLEVBQUUsYUFBYTtJQUN6QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsYUFBYTtDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQnJvYWRjYXN0QXJncywgQnJvYWRjYXN0QXJnc0lucHV0cywgS2VybmVsQ29uZmlnLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3RBcmdzKGFyZ3M6IHtcbiAgaW5wdXRzOiBCcm9hZGNhc3RBcmdzSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7czAsIHMxfSA9IGlucHV0cztcblxuICBjb25zdCBzMFZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHMwLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHMxVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoczEuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCBicm9hZGNhc3RTaGFwZSA9IGJhY2tlbmRfdXRpbC5hc3NlcnRBbmRHZXRCcm9hZGNhc3RTaGFwZShcbiAgICAgIEFycmF5LmZyb20oczBWYWxzKSwgQXJyYXkuZnJvbShzMVZhbHMpKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIFticm9hZGNhc3RTaGFwZS5sZW5ndGhdLCAnaW50MzInLCBJbnQzMkFycmF5LmZyb20oYnJvYWRjYXN0U2hhcGUpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyb2FkY2FzdEFyZ3NDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQnJvYWRjYXN0QXJncyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBicm9hZGNhc3RBcmdzXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ClipByValue } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const clipByValue = unaryKernelFunc(ClipByValue, (xi, attrs) => {\n const clipAttrs = attrs;\n if (xi > clipAttrs.clipValueMax) {\n return clipAttrs.clipValueMax;\n }\n return xi < clipAttrs.clipValueMin ? clipAttrs.clipValueMin : xi;\n});\nexport const clipByValueConfig = {\n kernelName: ClipByValue,\n backendName: 'cpu',\n kernelFunc: clipByValue,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcEJ5VmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0NsaXBCeVZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxXQUFXLEVBQWlDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3BFLE1BQU0sU0FBUyxHQUFHLEtBQW9DLENBQUM7SUFDdkQsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRTtRQUMvQixPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUM7S0FDL0I7SUFDRCxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkUsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFdBQVc7Q0FDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q2xpcEJ5VmFsdWUsIENsaXBCeVZhbHVlQXR0cnMsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNsaXBCeVZhbHVlID0gdW5hcnlLZXJuZWxGdW5jKENsaXBCeVZhbHVlLCAoeGksIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGNsaXBBdHRycyA9IGF0dHJzIGFzIHVua25vd24gYXMgQ2xpcEJ5VmFsdWVBdHRycztcbiAgaWYgKHhpID4gY2xpcEF0dHJzLmNsaXBWYWx1ZU1heCkge1xuICAgIHJldHVybiBjbGlwQXR0cnMuY2xpcFZhbHVlTWF4O1xuICB9XG4gIHJldHVybiB4aSA8IGNsaXBBdHRycy5jbGlwVmFsdWVNaW4gPyBjbGlwQXR0cnMuY2xpcFZhbHVlTWluIDogeGk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGNsaXBCeVZhbHVlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENsaXBCeVZhbHVlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNsaXBCeVZhbHVlLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ComplexAbs, util } from '@tensorflow/tfjs-core';\nexport const complexAbs = (args) => {\n const { x } = args.inputs;\n const cpuBackend = args.backend;\n const resultValues = new Float32Array(util.sizeFromShape(x.shape));\n const complexVals = cpuBackend.data.get(x.dataId);\n const real = complexVals.complexTensorInfos.real;\n const imag = complexVals.complexTensorInfos.imag;\n const realVals = cpuBackend.data.get(real.dataId).values;\n const imagVals = cpuBackend.data.get(imag.dataId).values;\n for (let i = 0; i < realVals.length; i++) {\n const real = realVals[i];\n const imag = imagVals[i];\n resultValues[i] = Math.hypot(real, imag);\n }\n return cpuBackend.makeOutput(resultValues, x.shape, 'float32');\n};\nexport const complexAbsConfig = {\n kernelName: ComplexAbs,\n backendName: 'cpu',\n kernelFunc: complexAbs,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGxleEFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29tcGxleEFicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUE4QyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUluRyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQ25CLENBQUMsSUFBeUQsRUFBRSxFQUFFO0lBQzVELE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUNqRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ2pELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFzQixDQUFDO0lBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFzQixDQUFDO0lBQ3pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFDO0lBRUQsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUVOLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsVUFBbUM7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7Q29tcGxleEFicywgQ29tcGxleEFic0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBjb25zdCBjb21wbGV4QWJzID1cbiAgICAoYXJnczoge2lucHV0czogQ29tcGxleEFic0lucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KSA9PiB7XG4gICAgICBjb25zdCB7eH0gPSBhcmdzLmlucHV0cztcbiAgICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBhcmdzLmJhY2tlbmQ7XG4gICAgICBjb25zdCByZXN1bHRWYWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZSh4LnNoYXBlKSk7XG4gICAgICBjb25zdCBjb21wbGV4VmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpO1xuICAgICAgY29uc3QgcmVhbCA9IGNvbXBsZXhWYWxzLmNvbXBsZXhUZW5zb3JJbmZvcy5yZWFsO1xuICAgICAgY29uc3QgaW1hZyA9IGNvbXBsZXhWYWxzLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnO1xuICAgICAgY29uc3QgcmVhbFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KHJlYWwuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuICAgICAgY29uc3QgaW1hZ1ZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGltYWcuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWFsVmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZWFsID0gcmVhbFZhbHNbaV07XG4gICAgICAgIGNvbnN0IGltYWcgPSBpbWFnVmFsc1tpXTtcbiAgICAgICAgcmVzdWx0VmFsdWVzW2ldID0gTWF0aC5oeXBvdChyZWFsLCBpbWFnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNwdUJhY2tlbmQubWFrZU91dHB1dChyZXN1bHRWYWx1ZXMsIHguc2hhcGUsICdmbG9hdDMyJyk7XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXhBYnNDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29tcGxleEFicyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb21wbGV4QWJzIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Imag } from '@tensorflow/tfjs-core';\nexport function imag(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const imag = backend.data.get(input.dataId).complexTensorInfos.imag;\n const imagVal = backend.data.get(imag.dataId).values;\n // When complex tensor is disposed, its underlying parts will be disposed too.\n // Make new tensor out of the imag value of the complex. This makes sure the\n // value is still accessible even if complex tensor is disposed.\n return backend.makeTensorInfo(imag.shape, imag.dtype, imagVal);\n}\nexport const imagConfig = {\n kernelName: Imag,\n backendName: 'cpu',\n kernelFunc: imag\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1hZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvSW1hZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFtRCxNQUFNLHVCQUF1QixDQUFDO0FBSTdGLE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBbUQ7SUFFdEUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFckQsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSxnRUFBZ0U7SUFDaEUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtJbWFnLCBJbWFnSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIGltYWcoYXJnczoge2lucHV0czogSW1hZ0lucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IGltYWcgPSBiYWNrZW5kLmRhdGEuZ2V0KGlucHV0LmRhdGFJZCkuY29tcGxleFRlbnNvckluZm9zLmltYWc7XG4gIGNvbnN0IGltYWdWYWwgPSBiYWNrZW5kLmRhdGEuZ2V0KGltYWcuZGF0YUlkKS52YWx1ZXM7XG5cbiAgLy8gV2hlbiBjb21wbGV4IHRlbnNvciBpcyBkaXNwb3NlZCwgaXRzIHVuZGVybHlpbmcgcGFydHMgd2lsbCBiZSBkaXNwb3NlZCB0b28uXG4gIC8vIE1ha2UgbmV3IHRlbnNvciBvdXQgb2YgdGhlIGltYWcgdmFsdWUgb2YgdGhlIGNvbXBsZXguIFRoaXMgbWFrZXMgc3VyZSB0aGVcbiAgLy8gdmFsdWUgaXMgc3RpbGwgYWNjZXNzaWJsZSBldmVuIGlmIGNvbXBsZXggdGVuc29yIGlzIGRpc3Bvc2VkLlxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhpbWFnLnNoYXBlLCBpbWFnLmR0eXBlLCBpbWFnVmFsKTtcbn1cblxuZXhwb3J0IGNvbnN0IGltYWdDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSW1hZyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBpbWFnIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Concat, util } from '@tensorflow/tfjs-core';\nimport { complex } from './Complex';\nimport { concatImpl } from './Concat_impl';\nimport { identity } from './Identity';\nimport { imag } from './Imag';\nimport { real } from './Real';\nimport { reshape } from './Reshape';\nexport function concat(args) {\n const { inputs, backend, attrs } = args;\n const { axis } = attrs;\n const $axis = util.parseAxisParam(axis, inputs[0].shape)[0];\n const shapes = inputs.map(t => t.shape);\n backend_util.assertParamsConsistent(shapes, $axis);\n let outShape = backend_util.computeOutShape(inputs.map(t => t.shape), $axis);\n if (util.sizeFromShape(outShape) === 0) {\n return backend.makeTensorInfo(outShape, inputs[0].dtype, []);\n }\n // Keep only non-empty tensors (ignore tensors with 0 in their shape).\n const $inputs = inputs.filter(t => util.sizeFromShape(t.shape) > 0);\n if ($inputs.length === 1) {\n return identity({ inputs: { x: $inputs[0] }, backend });\n }\n if ($inputs[0].dtype === 'complex64') {\n const reals = $inputs.map((t) => real({ inputs: { input: t }, backend }));\n const imags = $inputs.map((t) => imag({ inputs: { input: t }, backend }));\n const realConcated = concat({ inputs: reals, backend, attrs: { axis: $axis } });\n const imagConcated = concat({ inputs: imags, backend, attrs: { axis: $axis } });\n const result = complex({ inputs: { real: realConcated, imag: imagConcated }, backend });\n reals.forEach(r => backend.disposeIntermediateTensorInfo(r));\n imags.forEach(i => backend.disposeIntermediateTensorInfo(i));\n backend.disposeIntermediateTensorInfo(realConcated);\n backend.disposeIntermediateTensorInfo(imagConcated);\n return result;\n }\n // Any concat of n-dimensional tensors across any axis can be reduced to\n // a concatenation of two-dimensional tensors across the axis 1 by first\n // partitioning the axes of the original tensors into those less than the\n // axis to be concatenated and the rest. Then reshape the tensors\n // into a two-dimensional tensor by collapsing these two sets of axes and\n // concatenate the resulting matrices across the axis 1, finally reshaping\n // the result to have the proper shape.\n const inputs2D = $inputs.map(t => {\n const innerSize = util.sizeFromShape(t.shape.slice($axis));\n const shape = [-1, innerSize];\n return reshape({ inputs: { x: t }, backend, attrs: { shape } });\n });\n const inputsValShapes = inputs2D.map(t => {\n return { vals: backend.data.get(t.dataId).values, shape: t.shape };\n });\n // Concats 2d tensors along axis=1.\n outShape =\n backend_util.computeOutShape(inputs2D.map(t => t.shape), 1 /* axis */);\n const simplyConcat = inputs2D[0].shape[0] === 1;\n const outVals = concatImpl(inputsValShapes, outShape, inputs[0].dtype, simplyConcat);\n const finalOutShape = backend_util.computeOutShape($inputs.map(t => t.shape), $axis);\n const outInfo = backend.makeTensorInfo(finalOutShape, inputs[0].dtype, outVals);\n inputs2D.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return outInfo;\n}\nexport const concatConfig = {\n kernelName: Concat,\n backendName: 'cpu',\n kernelFunc: concat\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Db25jYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQW1FLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSWxJLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXlFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFbkQsSUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTdFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzlEO0lBRUQsc0VBQXNFO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDckQ7SUFFRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQztRQUV0RSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsRUFBQyxNQUFNLEVB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QUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29uY2F0LCBDb25jYXRBdHRycywgQ29uY2F0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuL0NvbXBsZXgnO1xuaW1wb3J0IHtjb25jYXRJbXBsfSBmcm9tICcuL0NvbmNhdF9pbXBsJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuL0ltYWcnO1xuaW1wb3J0IHtyZWFsfSBmcm9tICcuL1JlYWwnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KFxuICAgIGFyZ3M6IHtpbnB1dHM6IENvbmNhdElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBDb25jYXRBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YXhpc30gPSBhdHRycztcblxuICBjb25zdCAkYXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgaW5wdXRzWzBdLnNoYXBlKVswXTtcblxuICBjb25zdCBzaGFwZXMgPSBpbnB1dHMubWFwKHQgPT4gdC5zaGFwZSk7XG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRQYXJhbXNDb25zaXN0ZW50KHNoYXBlcywgJGF4aXMpO1xuXG4gIGxldCBvdXRTaGFwZSA9IGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUoaW5wdXRzLm1hcCh0ID0+IHQuc2hhcGUpLCAkYXhpcyk7XG5cbiAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSkgPT09IDApIHtcbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRTaGFwZSwgaW5wdXRzWzBdLmR0eXBlLCBbXSk7XG4gIH1cblxuICAvLyBLZWVwIG9ubHkgbm9uLWVtcHR5IHRlbnNvcnMgKGlnbm9yZSB0ZW5zb3JzIHdpdGggMCBpbiB0aGVpciBzaGFwZSkuXG4gIGNvbnN0ICRpbnB1dHMgPSBpbnB1dHMuZmlsdGVyKHQgPT4gdXRpbC5zaXplRnJvbVNoYXBlKHQuc2hhcGUpID4gMCk7XG4gIGlmICgkaW5wdXRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBpZGVudGl0eSh7aW5wdXRzOiB7eDogJGlucHV0c1swXX0sIGJhY2tlbmR9KTtcbiAgfVxuXG4gIGlmICgkaW5wdXRzWzBdLmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWxzID0gJGlucHV0cy5tYXAoKHQpID0+IHJlYWwoe2lucHV0czoge2lucHV0OiB0fSwgYmFja2VuZH0pKTtcbiAgICBjb25zdCBpbWFncyA9ICRpbnB1dHMubWFwKCh0KSA9PiBpbWFnKHtpbnB1dHM6IHtpbnB1dDogdH0sIGJhY2tlbmR9KSk7XG5cbiAgICBjb25zdCByZWFsQ29uY2F0ZWQgPSBjb25jYXQoe2lucHV0czogcmVhbHMsIGJhY2tlbmQsIGF0dHJzOiB7YXhpczogJGF4aXN9fSk7XG4gICAgY29uc3QgaW1hZ0NvbmNhdGVkID0gY29uY2F0KHtpbnB1dHM6IGltYWdzLCBiYWNrZW5kLCBhdHRyczoge2F4aXM6ICRheGlzfX0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgY29tcGxleCh7aW5wdXRzOiB7cmVhbDogcmVhbENvbmNhdGVkLCBpbWFnOiBpbWFnQ29uY2F0ZWR9LCBiYWNrZW5kfSk7XG5cbiAgICByZWFscy5mb3JFYWNoKHIgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyKSk7XG4gICAgaW1hZ3MuZm9yRWFjaChpID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaSkpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbENvbmNhdGVkKTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGltYWdDb25jYXRlZCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQW55IGNvbmNhdCBvZiBuLWRpbWVuc2lvbmFsIHRlbnNvcnMgYWNyb3NzIGFueSBheGlzIGNhbiBiZSByZWR1Y2VkIHRvXG4gIC8vIGEgY29uY2F0ZW5hdGlvbiBvZiB0d28tZGltZW5zaW9uYWwgdGVuc29ycyBhY3Jvc3MgdGhlIGF4aXMgMSBieSBmaXJzdFxuICAvLyBwYXJ0aXRpb25pbmcgdGhlIGF4ZXMgb2YgdGhlIG9yaWdpbmFsIHRlbnNvcnMgaW50byB0aG9zZSBsZXNzIHRoYW4gdGhlXG4gIC8vIGF4aXMgdG8gYmUgY29uY2F0ZW5hdGVkIGFuZCB0aGUgcmVzdC4gVGhlbiByZXNoYXBlIHRoZSB0ZW5zb3JzXG4gIC8vIGludG8gYSB0d28tZGltZW5zaW9uYWwgdGVuc29yIGJ5IGNvbGxhcHNpbmcgdGhlc2UgdHdvIHNldHMgb2YgYXhlcyBhbmRcbiAgLy8gY29uY2F0ZW5hdGUgdGhlIHJlc3VsdGluZyBtYXRyaWNlcyBhY3Jvc3MgdGhlIGF4aXMgMSwgZmluYWxseSByZXNoYXBpbmdcbiAgLy8gdGhlIHJlc3VsdCB0byBoYXZlIHRoZSBwcm9wZXIgc2hhcGUuXG4gIGNvbnN0IGlucHV0czJEID0gJGlucHV0cy5tYXAodCA9PiB7XG4gICAgY29uc3QgaW5uZXJTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHQuc2hhcGUuc2xpY2UoJGF4aXMpKTtcbiAgICBjb25zdCBzaGFwZSA9IFstMSwgaW5uZXJTaXplXTtcbiAgICByZXR1cm4gcmVzaGFwZSh7aW5wdXRzOiB7eDogdH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGV9fSk7XG4gIH0pO1xuXG4gIGNvbnN0IGlucHV0c1ZhbFNoYXBlcyA9IGlucHV0czJELm1hcCh0ID0+IHtcbiAgICByZXR1cm4ge3ZhbHM6IGJhY2tlbmQuZGF0YS5nZXQodC5kYXRhSWQpLnZhbHVlcywgc2hhcGU6IHQuc2hhcGV9O1xuICB9KTtcblxuICAvLyBDb25jYXRzIDJkIHRlbnNvcnMgYWxvbmcgYXhpcz0xLlxuICBvdXRTaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dFNoYXBlKGlucHV0czJELm1hcCh0ID0+IHQuc2hhcGUpLCAxIC8qIGF4aXMgKi8pO1xuICBjb25zdCBzaW1wbHlDb25jYXQgPSBpbnB1dHMyRFswXS5zaGFwZVswXSA9PT0gMTtcbiAgY29uc3Qgb3V0VmFscyA9XG4gICAgICBjb25jYXRJbXBsKGlucHV0c1ZhbFNoYXBlcywgb3V0U2hhcGUsIGlucHV0c1swXS5kdHlwZSwgc2ltcGx5Q29uY2F0KTtcblxuICBjb25zdCBmaW5hbE91dFNoYXBlID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlT3V0U2hhcGUoJGlucHV0cy5tYXAodCA9PiB0LnNoYXBlKSwgJGF4aXMpO1xuXG4gIGNvbnN0IG91dEluZm8gPVxuICAgICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhmaW5hbE91dFNoYXBlLCBpbnB1dHNbMF0uZHR5cGUsIG91dFZhbHMpO1xuXG4gIGlucHV0czJELmZvckVhY2godCA9PiBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHQpKTtcblxuICByZXR1cm4gb3V0SW5mbztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmNhdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDb25jYXQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogY29uY2F0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2D, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dataFormat, dilations, dimRoundingMode } = attrs;\n assertNotComplex([x, filter], 'conv2d');\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, dilations, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const padLeft = convInfo.padInfo.left;\n const padTop = convInfo.padInfo.top;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const y = new TensorBuffer(convInfo.outShape, x.dtype);\n const xStrides = util.computeStrides(x.shape);\n const filterStrides = util.computeStrides(filter.shape);\n const xBatchStride = xStrides[0];\n const xRowStride = isChannelsLast ? xStrides[1] : xStrides[2];\n const xColStride = isChannelsLast ? xStrides[2] : 1;\n const xChannelStride = isChannelsLast ? 1 : xStrides[1];\n const yBatchStride = y.strides[0];\n const yRowStride = isChannelsLast ? y.strides[1] : y.strides[2];\n const yColStride = isChannelsLast ? y.strides[2] : 1;\n const yChannelStride = isChannelsLast ? 1 : y.strides[1];\n const xVals = backend.data.get(x.dataId).values;\n const wVals = backend.data.get(filter.dataId).values;\n const yVals = y.values;\n for (let b = 0; b < convInfo.batchSize; ++b) {\n const xOffset1 = b * xBatchStride;\n const yOffset1 = b * yBatchStride;\n for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n const yOffset2 = yOffset1 + yR * yRowStride;\n const xRCorner = yR * convInfo.strideHeight - padTop;\n for (let wR = 0; wR < filterHeight; ++wR) {\n const xR = xRCorner + wR * dilationHeight;\n if (xR < 0 || xR >= convInfo.inHeight) {\n continue;\n }\n const wOffset1 = wR * filterStrides[0];\n const xOffset2 = xOffset1 + xR * xRowStride;\n for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n const yOffset3 = yOffset2 + yC * yColStride;\n const xCCorner = yC * convInfo.strideWidth - padLeft;\n for (let wC = 0; wC < filterWidth; ++wC) {\n const xC = xCCorner + wC * dilationWidth;\n if (xC < 0 || xC >= convInfo.inWidth) {\n continue;\n }\n const wOffset2 = wOffset1 + wC * filterStrides[1];\n const xOffset3 = xOffset2 + xC * xColStride;\n let wOffset3 = wOffset2;\n for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n const xVal = xVals[xOffset3 + d1 * xChannelStride];\n for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n yVals[yOffset3 + d2 * yChannelStride] +=\n xVal * wVals[wOffset3 + d2];\n }\n wOffset3 += convInfo.outChannels;\n }\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(y.shape, y.dtype, yVals);\n}\nexport const conv2DConfig = {\n kernelName: Conv2D,\n backendName: 'cpu',\n kernelFunc: conv2D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Db252MkQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQXVELFlBQVksRUFBMEIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHNUosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXlFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV4QyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQXlDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQ3pFLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXpELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDcEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUM7SUFFOUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBa0IsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUM5RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUNsQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM5QyxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDckQsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxjQUFjLENBQUM7Z0JBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDckMsU0FBUztpQkFDVjtnQkFDRCxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQztnQkFDNUMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQzdDLE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDO29CQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3JELEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDO3dCQUN6QyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7NEJBQ3BDLFNBQVM7eUJBQ1Y7d0JBQ0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xELE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDO3dCQUM1QyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUM7d0JBQ3hCLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFOzRCQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQzs0QkFDbkQsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0NBQ2hELEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQztvQ0FDakMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7NkJBQ2pDOzRCQUNELFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDO3lCQUNsQztxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBDb252MkQsIENvbnYyREF0dHJzLCBDb252MkRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yQnVmZmVyLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnYyRChcbiAgICBhcmdzOiB7aW5wdXRzOiBDb252MkRJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogQ29udjJEQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlcn0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW3gsIGZpbHRlcl0sICdjb252MmQnKTtcblxuICBjb25zdCAkZGF0YUZvcm1hdCA9IGJhY2tlbmRfdXRpbC5jb252ZXJ0Q29udjJERGF0YUZvcm1hdChkYXRhRm9ybWF0KTtcbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYyREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzdHJpZGVzLCBkaWxhdGlvbnMsIHBhZCxcbiAgICAgIGRpbVJvdW5kaW5nTW9kZSwgZmFsc2UgLyogZGVwdGh3aXNlICovLCAkZGF0YUZvcm1hdCk7XG5cbiAgY29uc3QgZmlsdGVySGVpZ2h0ID0gY29udkluZm8uZmlsdGVySGVpZ2h0O1xuICBjb25zdCBmaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmZpbHRlcldpZHRoO1xuICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgY29uc3QgcGFkTGVmdCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgY29uc3QgcGFkVG9wID0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGlzQ2hhbm5lbHNMYXN0ID0gY29udkluZm8uZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCc7XG5cbiAgY29uc3QgeSA9IG5ldyBUZW5zb3JCdWZmZXIoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUgYXMgJ2Zsb2F0MzInKTtcblxuICBjb25zdCB4U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoeC5zaGFwZSk7XG4gIGNvbnN0IGZpbHRlclN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGZpbHRlci5zaGFwZSk7XG5cbiAgY29uc3QgeEJhdGNoU3RyaWRlID0geFN0cmlkZXNbMF07XG4gIGNvbnN0IHhSb3dTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IHhTdHJpZGVzWzFdIDogeFN0cmlkZXNbMl07XG4gIGNvbnN0IHhDb2xTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IHhTdHJpZGVzWzJdIDogMTtcbiAgY29uc3QgeENoYW5uZWxTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IDEgOiB4U3RyaWRlc1sxXTtcbiAgY29uc3QgeUJhdGNoU3RyaWRlID0geS5zdHJpZGVzWzBdO1xuICBjb25zdCB5Um93U3RyaWRlID0gaXNDaGFubmVsc0xhc3QgPyB5LnN0cmlkZXNbMV0gOiB5LnN0cmlkZXNbMl07XG4gIGNvbnN0IHlDb2xTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IHkuc3RyaWRlc1syXSA6IDE7XG4gIGNvbnN0IHlDaGFubmVsU3RyaWRlID0gaXNDaGFubmVsc0xhc3QgPyAxIDogeS5zdHJpZGVzWzFdO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHdWYWxzID0gYmFja2VuZC5kYXRhLmdldChmaWx0ZXIuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgeVZhbHMgPSB5LnZhbHVlcztcblxuICBmb3IgKGxldCBiID0gMDsgYiA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiKSB7XG4gICAgY29uc3QgeE9mZnNldDEgPSBiICogeEJhdGNoU3RyaWRlO1xuICAgIGNvbnN0IHlPZmZzZXQxID0gYiAqIHlCYXRjaFN0cmlkZTtcbiAgICBmb3IgKGxldCB5UiA9IDA7IHlSIDwgY29udkluZm8ub3V0SGVpZ2h0OyArK3lSKSB7XG4gICAgICBjb25zdCB5T2Zmc2V0MiA9IHlPZmZzZXQxICsgeVIgKiB5Um93U3RyaWRlO1xuICAgICAgY29uc3QgeFJDb3JuZXIgPSB5UiAqIGNvbnZJbmZvLnN0cmlkZUhlaWdodCAtIHBhZFRvcDtcbiAgICAgIGZvciAobGV0IHdSID0gMDsgd1IgPCBmaWx0ZXJIZWlnaHQ7ICsrd1IpIHtcbiAgICAgICAgY29uc3QgeFIgPSB4UkNvcm5lciArIHdSICogZGlsYXRpb25IZWlnaHQ7XG4gICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gY29udkluZm8uaW5IZWlnaHQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3T2Zmc2V0MSA9IHdSICogZmlsdGVyU3RyaWRlc1swXTtcbiAgICAgICAgY29uc3QgeE9mZnNldDIgPSB4T2Zmc2V0MSArIHhSICogeFJvd1N0cmlkZTtcbiAgICAgICAgZm9yIChsZXQgeUMgPSAwOyB5QyA8IGNvbnZJbmZvLm91dFdpZHRoOyArK3lDKSB7XG4gICAgICAgICAgY29uc3QgeU9mZnNldDMgPSB5T2Zmc2V0MiArIHlDICogeUNvbFN0cmlkZTtcbiAgICAgICAgICBjb25zdCB4Q0Nvcm5lciA9IHlDICogY29udkluZm8uc3RyaWRlV2lkdGggLSBwYWRMZWZ0O1xuICAgICAgICAgIGZvciAobGV0IHdDID0gMDsgd0MgPCBmaWx0ZXJXaWR0aDsgKyt3Qykge1xuICAgICAgICAgICAgY29uc3QgeEMgPSB4Q0Nvcm5lciArIHdDICogZGlsYXRpb25XaWR0aDtcbiAgICAgICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gY29udkluZm8uaW5XaWR0aCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdPZmZzZXQyID0gd09mZnNldDEgKyB3QyAqIGZpbHRlclN0cmlkZXNbMV07XG4gICAgICAgICAgICBjb25zdCB4T2Zmc2V0MyA9IHhPZmZzZXQyICsgeEMgKiB4Q29sU3RyaWRlO1xuICAgICAgICAgICAgbGV0IHdPZmZzZXQzID0gd09mZnNldDI7XG4gICAgICAgICAgICBmb3IgKGxldCBkMSA9IDA7IGQxIDwgY29udkluZm8uaW5DaGFubmVsczsgKytkMSkge1xuICAgICAgICAgICAgICBjb25zdCB4VmFsID0geFZhbHNbeE9mZnNldDMgKyBkMSAqIHhDaGFubmVsU3RyaWRlXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgZDIgPSAwOyBkMiA8IGNvbnZJbmZvLm91dENoYW5uZWxzOyArK2QyKSB7XG4gICAgICAgICAgICAgICAgeVZhbHNbeU9mZnNldDMgKyBkMiAqIHlDaGFubmVsU3RyaWRlXSArPVxuICAgICAgICAgICAgICAgICAgICB4VmFsICogd1ZhbHNbd09mZnNldDMgKyBkMl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd09mZnNldDMgKz0gY29udkluZm8ub3V0Q2hhbm5lbHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeS5zaGFwZSwgeS5kdHlwZSwgeVZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYyRCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb252MkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2DBackpropFilter, TensorBuffer } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv2DBackpropFilter(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, pad, dataFormat, dimRoundingMode, filterShape } = attrs;\n assertNotComplex([x, dy], 'conv2dBackpropFilter');\n const $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filterShape, strides, 1 /* dilations */, pad, dimRoundingMode, false /* depthwise */, $dataFormat);\n const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo;\n const isChannelsLast = convInfo.dataFormat === 'channelsLast';\n const dW = new TensorBuffer(convInfo.filterShape, 'float32');\n const leftPad = convInfo.padInfo.left;\n const topPad = convInfo.padInfo.top;\n const xVals = backend.data.get(x.dataId).values;\n const dyVals = backend.data.get(dy.dataId).values;\n const xBuf = new TensorBuffer(x.shape, x.dtype, xVals);\n const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals);\n for (let wR = 0; wR < filterHeight; ++wR) {\n const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight);\n for (let wC = 0; wC < filterWidth; ++wC) {\n const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth);\n for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n let dotProd = 0;\n for (let b = 0; b < convInfo.batchSize; ++b) {\n for (let yR = yRMin; yR < yRMax; ++yR) {\n const xR = wR + yR * strideHeight - topPad;\n for (let yC = yCMin; yC < yCMax; ++yC) {\n const xC = wC + yC * strideWidth - leftPad;\n if (isChannelsLast) {\n dotProd += xBuf.get(b, xR, xC, d1) *\n dyBuf.get(b, yR, yC, d2);\n }\n else {\n dotProd += xBuf.get(b, d1, xR, xC) *\n dyBuf.get(b, d2, yR, yC);\n }\n }\n }\n }\n dW.set(dotProd, wR, wC, d1, d2);\n }\n }\n }\n }\n return backend.makeTensorInfo(dW.shape, dW.dtype, dW.values);\n}\nexport const conv2DBackpropFilterConfig = {\n kernelName: Conv2DBackpropFilter,\n backendName: 'cpu',\n kernelFunc: conv2DBackpropFilter\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEQmFja3Byb3BGaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0NvbnYyREJhY2twcm9wRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQW1GLFlBQVksRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUdoTSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBSXBDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXZFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFFbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDakUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQzlELFdBQVcsQ0FBQyxDQUFDO0lBRWpCLE1BQU0sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsR0FBRyxRQUFRLENBQUM7SUFDeEUsTUFBTSxjQUFj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RyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBWTt3Q0FDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQVksQ0FBQztpQ0FDMUM7cUNBQU07b0NBQ0wsT0FBTyxJQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFZO3dDQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBWSxDQUFDO2lDQUMxQzs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDakM7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQWlCO0lBQ3RELFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLG9CQUE2QztDQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjJEQmFja3Byb3BGaWx0ZXIsIENvbnYyREJhY2twcm9wRmlsdGVyQXR0cnMsIENvbnYyREJhY2twcm9wRmlsdGVySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckJ1ZmZlciwgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252MkRCYWNrcHJvcEZpbHRlcihhcmdzOiB7XG4gIGlucHV0czogQ29udjJEQmFja3Byb3BGaWx0ZXJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogQ29udjJEQmFja3Byb3BGaWx0ZXJBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkYXRhRm9ybWF0LCBkaW1Sb3VuZGluZ01vZGUsIGZpbHRlclNoYXBlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW3gsIGR5XSwgJ2NvbnYyZEJhY2twcm9wRmlsdGVyJyk7XG5cbiAgY29uc3QgJGRhdGFGb3JtYXQgPSBiYWNrZW5kX3V0aWwuY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdCk7XG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2hhcGUsIHN0cmlkZXMsXG4gICAgICAxIC8qIGRpbGF0aW9ucyAqLywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGZhbHNlIC8qIGRlcHRod2lzZSAqLyxcbiAgICAgICRkYXRhRm9ybWF0KTtcblxuICBjb25zdCB7c3RyaWRlSGVpZ2h0LCBzdHJpZGVXaWR0aCwgZmlsdGVySGVpZ2h0LCBmaWx0ZXJXaWR0aH0gPSBjb252SW5mbztcbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSBjb252SW5mby5kYXRhRm9ybWF0ID09PSAnY2hhbm5lbHNMYXN0JztcbiAgY29uc3QgZFcgPSBuZXcgVGVuc29yQnVmZmVyKGNvbnZJbmZvLmZpbHRlclNoYXBlLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGxlZnRQYWQgPSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IHRvcFBhZCA9IGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCB4VmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBkeVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgeEJ1ZiA9IG5ldyBUZW5zb3JCdWZmZXIoeC5zaGFwZSwgeC5kdHlwZSwgeFZhbHMpO1xuICBjb25zdCBkeUJ1ZiA9IG5ldyBUZW5zb3JCdWZmZXIoZHkuc2hhcGUsIGR5LmR0eXBlLCBkeVZhbHMpO1xuXG4gIGZvciAobGV0IHdSID0gMDsgd1IgPCBmaWx0ZXJIZWlnaHQ7ICsrd1IpIHtcbiAgICBjb25zdCB5Uk1pbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgodG9wUGFkIC0gd1IpIC8gc3RyaWRlSGVpZ2h0KSk7XG4gICAgY29uc3QgeVJNYXggPSBNYXRoLm1pbihcbiAgICAgICAgY29udkluZm8ub3V0SGVpZ2h0LCAoY29udkluZm8uaW5IZWlnaHQgKyB0b3BQYWQgLSB3UikgLyBzdHJpZGVIZWlnaHQpO1xuXG4gICAgZm9yIChsZXQgd0MgPSAwOyB3QyA8IGZpbHRlcldpZHRoOyArK3dDKSB7XG4gICAgICBjb25zdCB5Q01pbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgobGVmdFBhZCAtIHdDKSAvIHN0cmlkZVdpZHRoKSk7XG4gICAgICBjb25zdCB5Q01heCA9IE1hdGgubWluKFxuICAgICAgICAgIGNvbnZJbmZvLm91dFdpZHRoLCAoY29udkluZm8uaW5XaWR0aCArIGxlZnRQYWQgLSB3QykgLyBzdHJpZGVXaWR0aCk7XG5cbiAgICAgIGZvciAobGV0IGQxID0gMDsgZDEgPCBjb252SW5mby5pbkNoYW5uZWxzOyArK2QxKSB7XG4gICAgICAgIGZvciAobGV0IGQyID0gMDsgZDIgPCBjb252SW5mby5vdXRDaGFubmVsczsgKytkMikge1xuICAgICAgICAgIGxldCBkb3RQcm9kID0gMDtcbiAgICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiKSB7XG4gICAgICAgICAgICBmb3IgKGxldCB5UiA9IHlSTWluOyB5UiA8IHlSTWF4OyArK3lSKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHhSID0gd1IgKyB5UiAqIHN0cmlkZUhlaWdodCAtIHRvcFBhZDtcbiAgICAgICAgICAgICAgZm9yIChsZXQgeUMgPSB5Q01pbjsgeUMgPCB5Q01heDsgKyt5Qykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhDID0gd0MgKyB5QyAqIHN0cmlkZVdpZHRoIC0gbGVmdFBhZDtcbiAgICAgICAgICAgICAgICBpZiAoaXNDaGFubmVsc0xhc3QpIHtcbiAgICAgICAgICAgICAgICAgIGRvdFByb2QgKz0gKHhCdWYuZ2V0KGIsIHhSLCB4QywgZDEpIGFzIG51bWJlcikgKlxuICAgICAgICAgICAgICAgICAgICAgIChkeUJ1Zi5nZXQoYiwgeVIsIHlDLCBkMikgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZG90UHJvZCArPSAoeEJ1Zi5nZXQoYiwgZDEsIHhSLCB4QykgYXMgbnVtYmVyKSAqXG4gICAgICAgICAgICAgICAgICAgICAgKGR5QnVmLmdldChiLCBkMiwgeVIsIHlDKSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkVy5zZXQoZG90UHJvZCwgd1IsIHdDLCBkMSwgZDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZFcuc2hhcGUsIGRXLmR0eXBlLCBkVy52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjJEQmFja3Byb3BGaWx0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ29udjJEQmFja3Byb3BGaWx0ZXIsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogY29udjJEQmFja3Byb3BGaWx0ZXIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv2DBackpropInput, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv2DBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { inputShape, strides, pad, dataFormat, dimRoundingMode } = attrs;\n assertNotComplex([dy, filter], 'conv2dBackpropInput');\n const filterStrides = util.computeStrides(filter.shape);\n const dyStrides = util.computeStrides(dy.shape);\n let $dataFormat = backend_util.convertConv2DDataFormat(dataFormat);\n const convInfo = backend_util.computeConv2DInfo(inputShape, filter.shape, strides, 1 /* dilations */, pad, dimRoundingMode, false, $dataFormat);\n const dx = new TensorBuffer(convInfo.inShape, 'float32');\n const dxValues = dx.values;\n const dyValues = backend.data.get(dy.dataId).values;\n const fltValues = backend.data.get(filter.dataId).values;\n const [fltS0, fltS1, fltS2] = filterStrides;\n const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo;\n $dataFormat = convInfo.dataFormat;\n const topPad = filterHeight - 1 - convInfo.padInfo.top;\n const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n const isChannelsLast = $dataFormat === 'channelsLast';\n const xBatchStride = dx.strides[0];\n const xRowStride = isChannelsLast ? dx.strides[1] : dx.strides[2];\n const xColStride = isChannelsLast ? dx.strides[2] : 1;\n const xChannelStride = isChannelsLast ? 1 : dx.strides[1];\n const yBatchStride = dyStrides[0];\n const yRowStride = isChannelsLast ? dyStrides[1] : dyStrides[2];\n const yColStride = isChannelsLast ? dyStrides[2] : 1;\n const yChannelStride = isChannelsLast ? 1 : dyStrides[1];\n for (let b = 0; b < batchSize; ++b) {\n for (let d1 = 0; d1 < inChannels; ++d1) {\n for (let xR = 0; xR < inHeight; ++xR) {\n const xRCorner = xR - topPad;\n const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n for (let xC = 0; xC < inWidth; ++xC) {\n const xCCorner = xC - leftPad;\n const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n let dotProd = 0;\n for (let yR = xRMin; yR < yRMax; ++yR) {\n const wR = yR * strideHeight - xRCorner;\n for (let yC = xCMin; yC < yCMax; ++yC) {\n const wC = yC * strideWidth - xCCorner;\n const dyOffset = yBatchStride * b + yRowStride * yR + yColStride * yC;\n const fltOffset = fltS0 * (filterHeight - 1 - wR) +\n fltS1 * (filterWidth - 1 - wC) + fltS2 * d1;\n for (let d2 = 0; d2 < outChannels; ++d2) {\n const pixel = dyValues[dyOffset + yChannelStride * d2];\n const weight = fltValues[fltOffset + d2];\n dotProd += pixel * weight;\n }\n }\n }\n const dxOffset = xBatchStride * b + xRowStride * xR +\n xColStride * xC + xChannelStride * d1;\n dxValues[dxOffset] = dotProd;\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const conv2DBackpropInputConfig = {\n kernelName: Conv2DBackpropInput,\n backendName: 'cpu',\n kernelFunc: conv2DBackpropInput\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjJEQmFja3Byb3BJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29udjJEQmFja3Byb3BJbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFpRixZQUFZLEVBQTBCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR25NLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFJbkM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUV0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQXlDLEVBQUUsT0FBTyxFQUNyRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdB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RUFBRSxDQUFDOzRCQUVoRCxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dDQUN2QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQ0FDdkQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQ0FDekMsT0FBTyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7NkJBQzNCO3lCQUNGO3FCQUNGO29CQUNELE1BQU0sUUFBUSxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLEVBQUU7d0JBQy9DLFVBQVUsR0FBRyxFQUFFLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQztvQkFDMUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjJEQmFja3Byb3BJbnB1dCwgQ29udjJEQmFja3Byb3BJbnB1dEF0dHJzLCBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckJ1ZmZlciwgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252MkRCYWNrcHJvcElucHV0KGFyZ3M6IHtcbiAgaW5wdXRzOiBDb252MkRCYWNrcHJvcElucHV0SW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IENvbnYyREJhY2twcm9wSW5wdXRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGZpbHRlcn0gPSBpbnB1dHM7XG4gIGNvbnN0IHtpbnB1dFNoYXBlLCBzdHJpZGVzLCBwYWQsIGRhdGFGb3JtYXQsIGRpbVJvdW5kaW5nTW9kZX0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KFtkeSwgZmlsdGVyXSwgJ2NvbnYyZEJhY2twcm9wSW5wdXQnKTtcblxuICBjb25zdCBmaWx0ZXJTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhmaWx0ZXIuc2hhcGUpO1xuICBjb25zdCBkeVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGR5LnNoYXBlKTtcblxuICBsZXQgJGRhdGFGb3JtYXQgPSBiYWNrZW5kX3V0aWwuY29udmVydENvbnYyRERhdGFGb3JtYXQoZGF0YUZvcm1hdCk7XG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252MkRJbmZvKFxuICAgICAgaW5wdXRTaGFwZSwgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBzdHJpZGVzLFxuICAgICAgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCwgZGltUm91bmRpbmdNb2RlLCBmYWxzZSwgJGRhdGFGb3JtYXQpO1xuXG4gIGNvbnN0IGR4ID0gbmV3IFRlbnNvckJ1ZmZlcihjb252SW5mby5pblNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBkeFZhbHVlcyA9IGR4LnZhbHVlcztcbiAgY29uc3QgZHlWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGZsdFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoZmlsdGVyLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IFtmbHRTMCwgZmx0UzEsIGZsdFMyXSA9IGZpbHRlclN0cmlkZXM7XG4gIGNvbnN0IHtcbiAgICBiYXRjaFNpemUsXG4gICAgZmlsdGVySGVpZ2h0LFxuICAgIGZpbHRlcldpZHRoLFxuICAgIGluQ2hhbm5lbHMsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBvdXRIZWlnaHQsXG4gICAgb3V0V2lkdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoXG4gIH0gPSBjb252SW5mbztcbiAgJGRhdGFGb3JtYXQgPSBjb252SW5mby5kYXRhRm9ybWF0O1xuICBjb25zdCB0b3BQYWQgPSBmaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGxlZnRQYWQgPSBmaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgY29uc3QgaXNDaGFubmVsc0xhc3QgPSAkZGF0YUZvcm1hdCA9PT0gJ2NoYW5uZWxzTGFzdCc7XG4gIGNvbnN0IHhCYXRjaFN0cmlkZSA9IGR4LnN0cmlkZXNbMF07XG4gIGNvbnN0IHhSb3dTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IGR4LnN0cmlkZXNbMV0gOiBkeC5zdHJpZGVzWzJdO1xuICBjb25zdCB4Q29sU3RyaWRlID0gaXNDaGFubmVsc0xhc3QgPyBkeC5zdHJpZGVzWzJdIDogMTtcbiAgY29uc3QgeENoYW5uZWxTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IDEgOiBkeC5zdHJpZGVzWzFdO1xuICBjb25zdCB5QmF0Y2hTdHJpZGUgPSBkeVN0cmlkZXNbMF07XG4gIGNvbnN0IHlSb3dTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IGR5U3RyaWRlc1sxXSA6IGR5U3RyaWRlc1syXTtcbiAgY29uc3QgeUNvbFN0cmlkZSA9IGlzQ2hhbm5lbHNMYXN0ID8gZHlTdHJpZGVzWzJdIDogMTtcbiAgY29uc3QgeUNoYW5uZWxTdHJpZGUgPSBpc0NoYW5uZWxzTGFzdCA/IDEgOiBkeVN0cmlkZXNbMV07XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaFNpemU7ICsrYikge1xuICAgIGZvciAobGV0IGQxID0gMDsgZDEgPCBpbkNoYW5uZWxzOyArK2QxKSB7XG4gICAgICBmb3IgKGxldCB4UiA9IDA7IHhSIDwgaW5IZWlnaHQ7ICsreFIpIHtcbiAgICAgICAgY29uc3QgeFJDb3JuZXIgPSB4UiAtIHRvcFBhZDtcbiAgICAgICAgY29uc3QgeFJNaW4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoeFJDb3JuZXIgLyBzdHJpZGVIZWlnaHQpKTtcbiAgICAgICAgY29uc3QgeVJNYXggPVxuICAgICAgICAgICAgTWF0aC5taW4ob3V0SGVpZ2h0LCAoZmlsdGVySGVpZ2h0ICsgeFJDb3JuZXIpIC8gc3RyaWRlSGVpZ2h0KTtcblxuICAgICAgICBmb3IgKGxldCB4QyA9IDA7IHhDIDwgaW5XaWR0aDsgKyt4Qykge1xuICAgICAgICAgIGNvbnN0IHhDQ29ybmVyID0geEMgLSBsZWZ0UGFkO1xuICAgICAgICAgIGNvbnN0IHhDTWluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHhDQ29ybmVyIC8gc3RyaWRlV2lkdGgpKTtcbiAgICAgICAgICBjb25zdCB5Q01heCA9XG4gICAgICAgICAgICAgIE1hdGgubWluKG91dFdpZHRoLCAoZmlsdGVyV2lkdGggKyB4Q0Nvcm5lcikgLyBzdHJpZGVXaWR0aCk7XG5cbiAgICAgICAgICBsZXQgZG90UHJvZCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgeVIgPSB4Uk1pbjsgeVIgPCB5Uk1heDsgKyt5Uikge1xuICAgICAgICAgICAgY29uc3Qgd1IgPSB5UiAqIHN0cmlkZUhlaWdodCAtIHhSQ29ybmVyO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB5QyA9IHhDTWluOyB5QyA8IHlDTWF4OyArK3lDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdDID0geUMgKiBzdHJpZGVXaWR0aCAtIHhDQ29ybmVyO1xuICAgICAgICAgICAgICBjb25zdCBkeU9mZnNldCA9XG4gICAgICAgICAgICAgICAgICB5QmF0Y2hTdHJpZGUgKiBiICsgeVJvd1N0cmlkZSAqIHlSICsgeUNvbFN0cmlkZSAqIHlDO1xuICAgICAgICAgICAgICBjb25zdCBmbHRPZmZzZXQgPSBmbHRTMCAqIChmaWx0ZXJIZWlnaHQgLSAxIC0gd1IpICtcbiAgICAgICAgICAgICAgICAgIGZsdFMxICogKGZpbHRlcldpZHRoIC0gMSAtIHdDKSArIGZsdFMyICogZDE7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgZDIgPSAwOyBkMiA8IG91dENoYW5uZWxzOyArK2QyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgPSBkeVZhbHVlc1tkeU9mZnNldCArIHlDaGFubmVsU3RyaWRlICogZDJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlaWdodCA9IGZsdFZhbHVlc1tmbHRPZmZzZXQgKyBkMl07XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBwaXhlbCAqIHdlaWdodDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkeE9mZnNldCA9IHhCYXRjaFN0cmlkZSAqIGIgKyB4Um93U3RyaWRlICogeFIgK1xuICAgICAgICAgICAgICB4Q29sU3RyaWRlICogeEMgKyB4Q2hhbm5lbFN0cmlkZSAqIGQxO1xuICAgICAgICAgIGR4VmFsdWVzW2R4T2Zmc2V0XSA9IGRvdFByb2Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhkeC5zaGFwZSwgZHguZHR5cGUsIGR4LnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjb252MkRCYWNrcHJvcElucHV0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYyREJhY2twcm9wSW5wdXQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogY29udjJEQmFja3Byb3BJbnB1dCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3D, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv3D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n assertNotComplex([x, filter], 'conv3d');\n const convInfo = backend_util.computeConv3DInfo(x.shape, filter.shape, strides, dilations, pad);\n const { filterDepth, filterHeight, filterWidth, dilationDepth, dilationHeight, dilationWidth, padInfo } = convInfo;\n const padFront = padInfo.front;\n const padLeft = padInfo.left;\n const padTop = padInfo.top;\n const y = new TensorBuffer(convInfo.outShape, x.dtype);\n const xVals = backend.data.get(x.dataId).values;\n const wVals = backend.data.get(filter.dataId).values;\n const yVals = y.values;\n const xStrides = util.computeStrides(x.shape);\n const filterStrides = util.computeStrides(filter.shape);\n for (let b = 0; b < convInfo.batchSize; ++b) {\n const xOffset1 = b * xStrides[0];\n const yOffset1 = b * y.strides[0];\n for (let yF = 0; yF < convInfo.outDepth; ++yF) {\n const yOffset2 = yOffset1 + yF * y.strides[1];\n const xFCorner = yF * convInfo.strideDepth - padFront;\n for (let wF = 0; wF < filterDepth; ++wF) {\n const xF = xFCorner + wF * dilationDepth;\n if (xF < 0 || xF >= convInfo.inDepth) {\n continue;\n }\n const wOffset1 = wF * filterStrides[0];\n const xOffset2 = xOffset1 + xF * xStrides[1];\n for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n const yOffset3 = yOffset2 + yR * y.strides[2];\n const xRCorner = yR * convInfo.strideHeight - padTop;\n for (let wR = 0; wR < filterHeight; ++wR) {\n const xR = xRCorner + wR * dilationHeight;\n if (xR < 0 || xR >= convInfo.inHeight) {\n continue;\n }\n const wOffset2 = wOffset1 + wR * filterStrides[1];\n const xOffset3 = xOffset2 + xR * xStrides[2];\n for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n const yOffset4 = yOffset3 + yC * convInfo.outChannels;\n const xCCorner = yC * convInfo.strideWidth - padLeft;\n for (let wC = 0; wC < filterWidth; ++wC) {\n const xC = xCCorner + wC * dilationWidth;\n if (xC < 0 || xC >= convInfo.inWidth) {\n continue;\n }\n const wOffset3 = wOffset2 + wC * filterStrides[2];\n const xOffset4 = xOffset3 + xC * convInfo.inChannels;\n let wOffset4 = wOffset3;\n for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n const xVal = xVals[xOffset4 + d1];\n for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n yVals[yOffset4 + d2] += xVal * wVals[wOffset4 + d2];\n }\n wOffset4 += convInfo.outChannels;\n }\n }\n }\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(y.shape, y.dtype, y.values);\n}\nexport const conv3DConfig = {\n kernelName: Conv3D,\n backendName: 'cpu',\n kernelFunc: conv3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Db252M0QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQXVELFlBQVksRUFBMEIsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHNUosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXlFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFeEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFDbkQsTUFBTSxDQUFDLEtBQWlELEVBQUUsT0FBTyxFQUNqRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEIsTUFBTSxFQUNKLFdBQVcsRUFDWCxZQUFZLEVBQ1osV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxFQUNiLE9BQU8sRUFDUixHQUFHLFFBQVEsQ0FBQztJQUNiLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lB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QUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ29udjNELCBDb252M0RBdHRycywgQ29udjNESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckJ1ZmZlciwgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252M0QoXG4gICAgYXJnczoge2lucHV0czogQ29udjNESW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IENvbnYzREF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgcGFkLCBkaWxhdGlvbnN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChbeCwgZmlsdGVyXSwgJ2NvbnYzZCcpO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252M0RJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCk7XG5cbiAgY29uc3Qge1xuICAgIGZpbHRlckRlcHRoLFxuICAgIGZpbHRlckhlaWdodCxcbiAgICBmaWx0ZXJXaWR0aCxcbiAgICBkaWxhdGlvbkRlcHRoLFxuICAgIGRpbGF0aW9uSGVpZ2h0LFxuICAgIGRpbGF0aW9uV2lkdGgsXG4gICAgcGFkSW5mb1xuICB9ID0gY29udkluZm87XG4gIGNvbnN0IHBhZEZyb250ID0gcGFkSW5mby5mcm9udDtcbiAgY29uc3QgcGFkTGVmdCA9IHBhZEluZm8ubGVmdDtcbiAgY29uc3QgcGFkVG9wID0gcGFkSW5mby50b3A7XG4gIGNvbnN0IHkgPSBuZXcgVGVuc29yQnVmZmVyKGNvbnZJbmZvLm91dFNoYXBlLCB4LmR0eXBlIGFzICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgeFZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgd1ZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGZpbHRlci5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB5VmFscyA9IHkudmFsdWVzO1xuXG4gIGNvbnN0IHhTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcbiAgY29uc3QgZmlsdGVyU3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoZmlsdGVyLnNoYXBlKTtcblxuICBmb3IgKGxldCBiID0gMDsgYiA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiKSB7XG4gICAgY29uc3QgeE9mZnNldDEgPSBiICogeFN0cmlkZXNbMF07XG4gICAgY29uc3QgeU9mZnNldDEgPSBiICogeS5zdHJpZGVzWzBdO1xuICAgIGZvciAobGV0IHlGID0gMDsgeUYgPCBjb252SW5mby5vdXREZXB0aDsgKyt5Rikge1xuICAgICAgY29uc3QgeU9mZnNldDIgPSB5T2Zmc2V0MSArIHlGICogeS5zdHJpZGVzWzFdO1xuICAgICAgY29uc3QgeEZDb3JuZXIgPSB5RiAqIGNvbnZJbmZvLnN0cmlkZURlcHRoIC0gcGFkRnJvbnQ7XG4gICAgICBmb3IgKGxldCB3RiA9IDA7IHdGIDwgZmlsdGVyRGVwdGg7ICsrd0YpIHtcbiAgICAgICAgY29uc3QgeEYgPSB4RkNvcm5lciArIHdGICogZGlsYXRpb25EZXB0aDtcbiAgICAgICAgaWYgKHhGIDwgMCB8fCB4RiA+PSBjb252SW5mby5pbkRlcHRoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd09mZnNldDEgPSB3RiAqIGZpbHRlclN0cmlkZXNbMF07XG4gICAgICAgIGNvbnN0IHhPZmZzZXQyID0geE9mZnNldDEgKyB4RiAqIHhTdHJpZGVzWzFdO1xuXG4gICAgICAgIGZvciAobGV0IHlSID0gMDsgeVIgPCBjb252SW5mby5vdXRIZWlnaHQ7ICsreVIpIHtcbiAgICAgICAgICBjb25zdCB5T2Zmc2V0MyA9IHlPZmZzZXQyICsgeVIgKiB5LnN0cmlkZXNbMl07XG4gICAgICAgICAgY29uc3QgeFJDb3JuZXIgPSB5UiAqIGNvbnZJbmZvLnN0cmlkZUhlaWdodCAtIHBhZFRvcDtcbiAgICAgICAgICBmb3IgKGxldCB3UiA9IDA7IHdSIDwgZmlsdGVySGVpZ2h0OyArK3dSKSB7XG4gICAgICAgICAgICBjb25zdCB4UiA9IHhSQ29ybmVyICsgd1IgKiBkaWxhdGlvbkhlaWdodDtcbiAgICAgICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gY29udkluZm8uaW5IZWlnaHQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3T2Zmc2V0MiA9IHdPZmZzZXQxICsgd1IgKiBmaWx0ZXJTdHJpZGVzWzFdO1xuICAgICAgICAgICAgY29uc3QgeE9mZnNldDMgPSB4T2Zmc2V0MiArIHhSICogeFN0cmlkZXNbMl07XG4gICAgICAgICAgICBmb3IgKGxldCB5QyA9IDA7IHlDIDwgY29udkluZm8ub3V0V2lkdGg7ICsreUMpIHtcbiAgICAgICAgICAgICAgY29uc3QgeU9mZnNldDQgPSB5T2Zmc2V0MyArIHlDICogY29udkluZm8ub3V0Q2hhbm5lbHM7XG4gICAgICAgICAgICAgIGNvbnN0IHhDQ29ybmVyID0geUMgKiBjb252SW5mby5zdHJpZGVXaWR0aCAtIHBhZExlZnQ7XG4gICAgICAgICAgICAgIGZvciAobGV0IHdDID0gMDsgd0MgPCBmaWx0ZXJXaWR0aDsgKyt3Qykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhDID0geENDb3JuZXIgKyB3QyAqIGRpbGF0aW9uV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKHhDIDwgMCB8fCB4QyA+PSBjb252SW5mby5pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd09mZnNldDMgPSB3T2Zmc2V0MiArIHdDICogZmlsdGVyU3RyaWRlc1syXTtcbiAgICAgICAgICAgICAgICBjb25zdCB4T2Zmc2V0NCA9IHhPZmZzZXQzICsgeEMgKiBjb252SW5mby5pbkNoYW5uZWxzO1xuICAgICAgICAgICAgICAgIGxldCB3T2Zmc2V0NCA9IHdPZmZzZXQzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGQxID0gMDsgZDEgPCBjb252SW5mby5pbkNoYW5uZWxzOyArK2QxKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB4VmFsID0geFZhbHNbeE9mZnNldDQgKyBkMV07XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBkMiA9IDA7IGQyIDwgY29udkluZm8ub3V0Q2hhbm5lbHM7ICsrZDIpIHtcbiAgICAgICAgICAgICAgICAgICAgeVZhbHNbeU9mZnNldDQgKyBkMl0gKz0geFZhbCAqIHdWYWxzW3dPZmZzZXQ0ICsgZDJdO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgd09mZnNldDQgKz0gY29udkluZm8ub3V0Q2hhbm5lbHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeS5zaGFwZSwgeS5kdHlwZSwgeS52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjNEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYzRCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb252M0QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropFilterV2, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv3DBackpropFilterV2(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, pad, filterShape } = attrs;\n assertNotComplex([x, dy], 'conv3dBackpropFilterV2');\n const xStrides = util.computeStrides(x.shape);\n const dyStrides = util.computeStrides(dy.shape);\n const convInfo = backend_util.computeConv3DInfo(x.shape, filterShape, strides, 1 /* dilations */, pad);\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const filterDepth = convInfo.filterDepth;\n const filterHeight = convInfo.filterHeight;\n const filterWidth = convInfo.filterWidth;\n const dw = new TensorBuffer(convInfo.filterShape, 'float32');\n const dwValues = dw.values;\n const [dwS0, dwS1, dwS2, dwS3] = dw.strides;\n const dyValues = backend.data.get(dy.dataId).values;\n const [dyS0, dyS1, dyS2, dyS3] = dyStrides;\n const xValues = backend.data.get(x.dataId).values;\n const [xS0, xS1, xS2, xS3] = xStrides;\n const frontPad = convInfo.padInfo.front;\n const leftPad = convInfo.padInfo.left;\n const topPad = convInfo.padInfo.top;\n for (let wF = 0; wF < filterDepth; ++wF) {\n const yFMin = Math.max(0, Math.ceil((frontPad - wF) / strideDepth));\n const yFMax = Math.min(convInfo.outDepth, (convInfo.inDepth + frontPad - wF) / strideDepth);\n const wOffset1 = wF * dwS0;\n for (let wR = 0; wR < filterHeight; ++wR) {\n const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight);\n const wOffset2 = wR * dwS1 + wOffset1;\n for (let wC = 0; wC < filterWidth; ++wC) {\n const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth);\n const wOffset3 = wC * dwS2 + wOffset2;\n for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n const wOffset4 = d1 * dwS3 + wOffset3;\n for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n let dotProd = 0;\n for (let b = 0; b < convInfo.batchSize; ++b) {\n const xOffset1 = b * xS0;\n const yOffset1 = b * dyS0;\n for (let yF = yFMin; yF < yFMax; ++yF) {\n const xF = wF + yF * strideDepth - frontPad;\n const xOffset2 = xF * xS1 + xOffset1;\n const yOffset2 = yF * dyS1 + yOffset1;\n for (let yR = yRMin; yR < yRMax; ++yR) {\n const xR = wR + yR * strideHeight - topPad;\n const xOffset3 = xR * xS2 + xOffset2;\n const yOffset3 = yR * dyS2 + yOffset2;\n for (let yC = yCMin; yC < yCMax; ++yC) {\n const xC = wC + yC * strideWidth - leftPad;\n const xOffset4 = xC * xS3 + xOffset3;\n const yOffset4 = yC * dyS3 + yOffset3;\n dotProd += xValues[xOffset4 + d1] * dyValues[yOffset4 + d2];\n }\n }\n }\n }\n dwValues[wOffset4 + d2] = dotProd;\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(dw.shape, dw.dtype, dw.values);\n}\nexport const conv3DBackpropFilterV2Config = {\n kernelName: Conv3DBackpropFilterV2,\n backendName: 'cpu',\n kernelFunc: conv3DBackpropFilterV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BGaWx0ZXJWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29udjNEQmFja3Byb3BGaWx0ZXJWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLHNCQUFzQixFQUF1RixZQUFZLEVBQTBCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzVNLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFJdEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFFcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUN6RSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDekMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDekMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBRXpDLE1BQU0sRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUMzQixNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNsRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7SUFFdEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFFcEMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFM0IsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBRXRDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFFdEMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO29CQUV0QyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRTt3QkFDaEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO3dCQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTs0QkFDM0MsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs0QkFDekIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzs0QkFFMUIsS0FBSyxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtnQ0FDckMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dDQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztnQ0FDckMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUM7Z0NBRXRDLEtBQUssSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0NBQ3JDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQztvQ0FDM0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7b0NBQ3JDLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO29DQUV0QyxLQUFLLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO3dDQUNyQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUM7d0NBQzNDLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO3dDQUNyQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQzt3Q0FFdEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztxQ0FDN0Q7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7d0JBQ0QsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7cUJBQ25DO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFpQjtJQUN4RCxVQUFVLEVBQUUsc0JBQXNCO0lBQ2xDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxzQkFBK0M7Q0FDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIENvbnYzREJhY2twcm9wRmlsdGVyVjIsIENvbnYzREJhY2twcm9wRmlsdGVyVjJBdHRycywgQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JCdWZmZXIsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udjNEQmFja3Byb3BGaWx0ZXJWMihhcmdzOiB7XG4gIGlucHV0czogQ29udjNEQmFja3Byb3BGaWx0ZXJWMklucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBDb252M0RCYWNrcHJvcEZpbHRlclYyQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZmlsdGVyU2hhcGV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChbeCwgZHldLCAnY29udjNkQmFja3Byb3BGaWx0ZXJWMicpO1xuXG4gIGNvbnN0IHhTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcbiAgY29uc3QgZHlTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhkeS5zaGFwZSk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZUNvbnYzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNoYXBlLCBzdHJpZGVzLFxuICAgICAgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCk7XG5cbiAgY29uc3Qgc3RyaWRlRGVwdGggPSBjb252SW5mby5zdHJpZGVEZXB0aDtcbiAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICBjb25zdCBmaWx0ZXJEZXB0aCA9IGNvbnZJbmZvLmZpbHRlckRlcHRoO1xuICBjb25zdCBmaWx0ZXJIZWlnaHQgPSBjb252SW5mby5maWx0ZXJIZWlnaHQ7XG4gIGNvbnN0IGZpbHRlcldpZHRoID0gY29udkluZm8uZmlsdGVyV2lkdGg7XG5cbiAgY29uc3QgZHcgPSBuZXcgVGVuc29yQnVmZmVyKGNvbnZJbmZvLmZpbHRlclNoYXBlLCAnZmxvYXQzMicpO1xuICBjb25zdCBkd1ZhbHVlcyA9IGR3LnZhbHVlcztcbiAgY29uc3QgW2R3UzAsIGR3UzEsIGR3UzIsIGR3UzNdID0gZHcuc3RyaWRlcztcbiAgY29uc3QgZHlWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IFtkeVMwLCBkeVMxLCBkeVMyLCBkeVMzXSA9IGR5U3RyaWRlcztcbiAgY29uc3QgeFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBbeFMwLCB4UzEsIHhTMiwgeFMzXSA9IHhTdHJpZGVzO1xuXG4gIGNvbnN0IGZyb250UGFkID0gY29udkluZm8ucGFkSW5mby5mcm9udDtcbiAgY29uc3QgbGVmdFBhZCA9IGNvbnZJbmZvLnBhZEluZm8ubGVmdDtcbiAgY29uc3QgdG9wUGFkID0gY29udkluZm8ucGFkSW5mby50b3A7XG5cbiAgZm9yIChsZXQgd0YgPSAwOyB3RiA8IGZpbHRlckRlcHRoOyArK3dGKSB7XG4gICAgY29uc3QgeUZNaW4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoKGZyb250UGFkIC0gd0YpIC8gc3RyaWRlRGVwdGgpKTtcbiAgICBjb25zdCB5Rk1heCA9IE1hdGgubWluKFxuICAgICAgICBjb252SW5mby5vdXREZXB0aCwgKGNvbnZJbmZvLmluRGVwdGggKyBmcm9udFBhZCAtIHdGKSAvIHN0cmlkZURlcHRoKTtcbiAgICBjb25zdCB3T2Zmc2V0MSA9IHdGICogZHdTMDtcblxuICAgIGZvciAobGV0IHdSID0gMDsgd1IgPCBmaWx0ZXJIZWlnaHQ7ICsrd1IpIHtcbiAgICAgIGNvbnN0IHlSTWluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKCh0b3BQYWQgLSB3UikgLyBzdHJpZGVIZWlnaHQpKTtcbiAgICAgIGNvbnN0IHlSTWF4ID0gTWF0aC5taW4oXG4gICAgICAgICAgY29udkluZm8ub3V0SGVpZ2h0LCAoY29udkluZm8uaW5IZWlnaHQgKyB0b3BQYWQgLSB3UikgLyBzdHJpZGVIZWlnaHQpO1xuICAgICAgY29uc3Qgd09mZnNldDIgPSB3UiAqIGR3UzEgKyB3T2Zmc2V0MTtcblxuICAgICAgZm9yIChsZXQgd0MgPSAwOyB3QyA8IGZpbHRlcldpZHRoOyArK3dDKSB7XG4gICAgICAgIGNvbnN0IHlDTWluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChsZWZ0UGFkIC0gd0MpIC8gc3RyaWRlV2lkdGgpKTtcbiAgICAgICAgY29uc3QgeUNNYXggPSBNYXRoLm1pbihcbiAgICAgICAgICAgIGNvbnZJbmZvLm91dFdpZHRoLCAoY29udkluZm8uaW5XaWR0aCArIGxlZnRQYWQgLSB3QykgLyBzdHJpZGVXaWR0aCk7XG4gICAgICAgIGNvbnN0IHdPZmZzZXQzID0gd0MgKiBkd1MyICsgd09mZnNldDI7XG5cbiAgICAgICAgZm9yIChsZXQgZDEgPSAwOyBkMSA8IGNvbnZJbmZvLmluQ2hhbm5lbHM7ICsrZDEpIHtcbiAgICAgICAgICBjb25zdCB3T2Zmc2V0NCA9IGQxICogZHdTMyArIHdPZmZzZXQzO1xuXG4gICAgICAgICAgZm9yIChsZXQgZDIgPSAwOyBkMiA8IGNvbnZJbmZvLm91dENoYW5uZWxzOyArK2QyKSB7XG4gICAgICAgICAgICBsZXQgZG90UHJvZCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBiID0gMDsgYiA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHhPZmZzZXQxID0gYiAqIHhTMDtcbiAgICAgICAgICAgICAgY29uc3QgeU9mZnNldDEgPSBiICogZHlTMDtcblxuICAgICAgICAgICAgICBmb3IgKGxldCB5RiA9IHlGTWluOyB5RiA8IHlGTWF4OyArK3lGKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeEYgPSB3RiArIHlGICogc3RyaWRlRGVwdGggLSBmcm9udFBhZDtcbiAgICAgICAgICAgICAgICBjb25zdCB4T2Zmc2V0MiA9IHhGICogeFMxICsgeE9mZnNldDE7XG4gICAgICAgICAgICAgICAgY29uc3QgeU9mZnNldDIgPSB5RiAqIGR5UzEgKyB5T2Zmc2V0MTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHlSID0geVJNaW47IHlSIDwgeVJNYXg7ICsreVIpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHhSID0gd1IgKyB5UiAqIHN0cmlkZUhlaWdodCAtIHRvcFBhZDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHhPZmZzZXQzID0geFIgKiB4UzIgKyB4T2Zmc2V0MjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQzID0geVIgKiBkeVMyICsgeU9mZnNldDI7XG5cbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IHlDID0geUNNaW47IHlDIDwgeUNNYXg7ICsreUMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeEMgPSB3QyArIHlDICogc3RyaWRlV2lkdGggLSBsZWZ0UGFkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4T2Zmc2V0NCA9IHhDICogeFMzICsgeE9mZnNldDM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQ0ID0geUMgKiBkeVMzICsgeU9mZnNldDM7XG5cbiAgICAgICAgICAgICAgICAgICAgZG90UHJvZCArPSB4VmFsdWVzW3hPZmZzZXQ0ICsgZDFdICogZHlWYWx1ZXNbeU9mZnNldDQgKyBkMl07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkd1ZhbHVlc1t3T2Zmc2V0NCArIGQyXSA9IGRvdFByb2Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZHcuc2hhcGUsIGR3LmR0eXBlLCBkdy52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjNEQmFja3Byb3BGaWx0ZXJWMkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDb252M0RCYWNrcHJvcEZpbHRlclYyLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNvbnYzREJhY2twcm9wRmlsdGVyVjIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Conv3DBackpropInputV2, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function conv3DBackpropInputV2(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { pad, strides, inputShape } = attrs;\n assertNotComplex([dy], 'conv3dBackpropInputV2');\n const dyStrides = util.computeStrides(dy.shape);\n const filterStrides = util.computeStrides(filter.shape);\n const convInfo = backend_util.computeConv3DInfo(inputShape, filter.shape, strides, 1 /* dilations */, pad);\n const dx = new TensorBuffer(convInfo.inShape, 'float32');\n const dxValues = dx.values;\n const [dxS0, dxS1, dxS2, dxS3] = dx.strides;\n const dyValues = backend.data.get(dy.dataId).values;\n const [dyS0, dyS1, dyS2, dyS3] = dyStrides;\n const fltValues = backend.data.get(filter.dataId).values;\n const [fltS0, fltS1, fltS2, fltS3] = filterStrides;\n const { batchSize, filterDepth, filterHeight, filterWidth, inChannels, inDepth, inHeight, inWidth, outChannels, outDepth, outHeight, outWidth, strideDepth, strideHeight, strideWidth } = convInfo;\n const frontPad = filterDepth - 1 - convInfo.padInfo.front;\n const topPad = filterHeight - 1 - convInfo.padInfo.top;\n const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n for (let b = 0; b < batchSize; ++b) {\n for (let d1 = 0; d1 < inChannels; ++d1) {\n // Frames of depth\n for (let xF = 0; xF < inDepth; ++xF) {\n const xFCorner = xF - frontPad;\n const xFMin = Math.max(0, Math.ceil(xFCorner / strideDepth));\n const yFMax = Math.min(outDepth, (filterDepth + xFCorner) / strideDepth);\n // Rows as per standard 2d matrix notation\n for (let xR = 0; xR < inHeight; ++xR) {\n const xRCorner = xR - topPad;\n const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n // Columns as per standard 2d matrix notation\n for (let xC = 0; xC < inWidth; ++xC) {\n const xCCorner = xC - leftPad;\n const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n let dotProd = 0;\n for (let yF = xFMin; yF < yFMax; ++yF) {\n const wF = yF * strideDepth - xFCorner;\n for (let yR = xRMin; yR < yRMax; ++yR) {\n const wR = yR * strideHeight - xRCorner;\n for (let yC = xCMin; yC < yCMax; ++yC) {\n const wC = yC * strideWidth - xCCorner;\n const dyOffset = dyS0 * b + dyS1 * yF + dyS2 * yR + dyS3 * yC;\n const fltOffset = fltS0 * (filterDepth - 1 - wF) +\n fltS1 * (filterHeight - 1 - wR) +\n fltS2 * (filterWidth - 1 - wC) + fltS3 * d1;\n for (let d2 = 0; d2 < outChannels; ++d2) {\n const pixel = dyValues[dyOffset + d2];\n const weight = fltValues[fltOffset + d2];\n dotProd += pixel * weight;\n }\n }\n }\n }\n dxValues[dxS0 * b + dxS1 * xF + dxS2 * xR + dxS3 * xC + d1] =\n dotProd;\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const conv3DBackpropInputV2Config = {\n kernelName: Conv3DBackpropInputV2,\n backendName: 'cpu',\n kernelFunc: conv3DBackpropInputV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udjNEQmFja3Byb3BJbnB1dFYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Db252M0RCYWNrcHJvcElucHV0VjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBcUYsWUFBWSxFQUEwQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6TSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBSXJDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV6QyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQWlELEVBQ3BFLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLE1BQU0sRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7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LFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRTt3Q0FDdkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQzt3Q0FDdEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQzt3Q0FDekMsT0FBTyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7cUNBQzNCO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs0QkFDdkQsT0FBTyxDQUFDO3FCQUNiO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFpQjtJQUN2RCxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxxQkFBOEM7Q0FDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIENvbnYzREJhY2twcm9wSW5wdXRWMiwgQ29udjNEQmFja3Byb3BJbnB1dFYyQXR0cnMsIENvbnYzREJhY2twcm9wSW5wdXRWMklucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JCdWZmZXIsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udjNEQmFja3Byb3BJbnB1dFYyKGFyZ3M6IHtcbiAgaW5wdXRzOiBDb252M0RCYWNrcHJvcElucHV0VjJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogQ29udjNEQmFja3Byb3BJbnB1dFYyQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7cGFkLCBzdHJpZGVzLCBpbnB1dFNoYXBlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2R5XSwgJ2NvbnYzZEJhY2twcm9wSW5wdXRWMicpO1xuXG4gIGNvbnN0IGR5U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoZHkuc2hhcGUpO1xuICBjb25zdCBmaWx0ZXJTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhmaWx0ZXIuc2hhcGUpO1xuXG4gIGNvbnN0IGNvbnZJbmZvID0gYmFja2VuZF91dGlsLmNvbXB1dGVDb252M0RJbmZvKFxuICAgICAgaW5wdXRTaGFwZSwgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBzdHJpZGVzLCAxIC8qIGRpbGF0aW9ucyAqLywgcGFkKTtcblxuICBjb25zdCBkeCA9IG5ldyBUZW5zb3JCdWZmZXIoY29udkluZm8uaW5TaGFwZSwgJ2Zsb2F0MzInKTtcbiAgY29uc3QgZHhWYWx1ZXMgPSBkeC52YWx1ZXM7XG4gIGNvbnN0IFtkeFMwLCBkeFMxLCBkeFMyLCBkeFMzXSA9IGR4LnN0cmlkZXM7XG4gIGNvbnN0IGR5VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldChkeS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBbZHlTMCwgZHlTMSwgZHlTMiwgZHlTM10gPSBkeVN0cmlkZXM7XG4gIGNvbnN0IGZsdFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoZmlsdGVyLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IFtmbHRTMCwgZmx0UzEsIGZsdFMyLCBmbHRTM10gPSBmaWx0ZXJTdHJpZGVzO1xuICBjb25zdCB7XG4gICAgYmF0Y2hTaXplLFxuICAgIGZpbHRlckRlcHRoLFxuICAgIGZpbHRlckhlaWdodCxcbiAgICBmaWx0ZXJXaWR0aCxcbiAgICBpbkNoYW5uZWxzLFxuICAgIGluRGVwdGgsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBvdXREZXB0aCxcbiAgICBvdXRIZWlnaHQsXG4gICAgb3V0V2lkdGgsXG4gICAgc3RyaWRlRGVwdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoXG4gIH0gPSBjb252SW5mbztcbiAgY29uc3QgZnJvbnRQYWQgPSBmaWx0ZXJEZXB0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmZyb250O1xuICBjb25zdCB0b3BQYWQgPSBmaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGxlZnRQYWQgPSBmaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaFNpemU7ICsrYikge1xuICAgIGZvciAobGV0IGQxID0gMDsgZDEgPCBpbkNoYW5uZWxzOyArK2QxKSB7XG4gICAgICAvLyBGcmFtZXMgb2YgZGVwdGhcbiAgICAgIGZvciAobGV0IHhGID0gMDsgeEYgPCBpbkRlcHRoOyArK3hGKSB7XG4gICAgICAgIGNvbnN0IHhGQ29ybmVyID0geEYgLSBmcm9udFBhZDtcbiAgICAgICAgY29uc3QgeEZNaW4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoeEZDb3JuZXIgLyBzdHJpZGVEZXB0aCkpO1xuICAgICAgICBjb25zdCB5Rk1heCA9XG4gICAgICAgICAgICBNYXRoLm1pbihvdXREZXB0aCwgKGZpbHRlckRlcHRoICsgeEZDb3JuZXIpIC8gc3RyaWRlRGVwdGgpO1xuXG4gICAgICAgIC8vIFJvd3MgYXMgcGVyIHN0YW5kYXJkIDJkIG1hdHJpeCBub3RhdGlvblxuICAgICAgICBmb3IgKGxldCB4UiA9IDA7IHhSIDwgaW5IZWlnaHQ7ICsreFIpIHtcbiAgICAgICAgICBjb25zdCB4UkNvcm5lciA9IHhSIC0gdG9wUGFkO1xuICAgICAgICAgIGNvbnN0IHhSTWluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHhSQ29ybmVyIC8gc3RyaWRlSGVpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgeVJNYXggPVxuICAgICAgICAgICAgICBNYXRoLm1pbihvdXRIZWlnaHQsIChmaWx0ZXJIZWlnaHQgKyB4UkNvcm5lcikgLyBzdHJpZGVIZWlnaHQpO1xuICAgICAgICAgIC8vIENvbHVtbnMgYXMgcGVyIHN0YW5kYXJkIDJkIG1hdHJpeCBub3RhdGlvblxuICAgICAgICAgIGZvciAobGV0IHhDID0gMDsgeEMgPCBpbldpZHRoOyArK3hDKSB7XG4gICAgICAgICAgICBjb25zdCB4Q0Nvcm5lciA9IHhDIC0gbGVmdFBhZDtcbiAgICAgICAgICAgIGNvbnN0IHhDTWluID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHhDQ29ybmVyIC8gc3RyaWRlV2lkdGgpKTtcbiAgICAgICAgICAgIGNvbnN0IHlDTWF4ID1cbiAgICAgICAgICAgICAgICBNYXRoLm1pbihvdXRXaWR0aCwgKGZpbHRlcldpZHRoICsgeENDb3JuZXIpIC8gc3RyaWRlV2lkdGgpO1xuXG4gICAgICAgICAgICBsZXQgZG90UHJvZCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB5RiA9IHhGTWluOyB5RiA8IHlGTWF4OyArK3lGKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdGID0geUYgKiBzdHJpZGVEZXB0aCAtIHhGQ29ybmVyO1xuXG4gICAgICAgICAgICAgIGZvciAobGV0IHlSID0geFJNaW47IHlSIDwgeVJNYXg7ICsreVIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3UiA9IHlSICogc3RyaWRlSGVpZ2h0IC0geFJDb3JuZXI7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5QyA9IHhDTWluOyB5QyA8IHlDTWF4OyArK3lDKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB3QyA9IHlDICogc3RyaWRlV2lkdGggLSB4Q0Nvcm5lcjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGR5T2Zmc2V0ID0gZHlTMCAqIGIgKyBkeVMxICogeUYgKyBkeVMyICogeVIgKyBkeVMzICogeUM7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmbHRPZmZzZXQgPSBmbHRTMCAqIChmaWx0ZXJEZXB0aCAtIDEgLSB3RikgK1xuICAgICAgICAgICAgICAgICAgICAgIGZsdFMxICogKGZpbHRlckhlaWdodCAtIDEgLSB3UikgK1xuICAgICAgICAgICAgICAgICAgICAgIGZsdFMyICogKGZpbHRlcldpZHRoIC0gMSAtIHdDKSArIGZsdFMzICogZDE7XG5cbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGQyID0gMDsgZDIgPCBvdXRDaGFubmVsczsgKytkMikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9IGR5VmFsdWVzW2R5T2Zmc2V0ICsgZDJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3ZWlnaHQgPSBmbHRWYWx1ZXNbZmx0T2Zmc2V0ICsgZDJdO1xuICAgICAgICAgICAgICAgICAgICBkb3RQcm9kICs9IHBpeGVsICogd2VpZ2h0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHhWYWx1ZXNbZHhTMCAqIGIgKyBkeFMxICogeEYgKyBkeFMyICogeFIgKyBkeFMzICogeEMgKyBkMV0gPVxuICAgICAgICAgICAgICAgIGRvdFByb2Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZHguc2hhcGUsIGR4LmR0eXBlLCBkeC52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY29udjNEQmFja3Byb3BJbnB1dFYyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvbnYzREJhY2twcm9wSW5wdXRWMixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb252M0RCYWNrcHJvcElucHV0VjIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cos } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const cos = unaryKernelFunc(Cos, (xi) => Math.cos(xi));\nexport const cosConfig = {\n kernelName: Cos,\n backendName: 'cpu',\n kernelFunc: cos,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Db3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0NvcywgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgY29zID0gdW5hcnlLZXJuZWxGdW5jKENvcywgKHhpKSA9PiBNYXRoLmNvcyh4aSkpO1xuXG5leHBvcnQgY29uc3QgY29zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvcyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjb3MsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Cosh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const cosh = unaryKernelFunc(Cosh, (xi) => Math.cosh(xi));\nexport const coshConfig = {\n kernelName: Cosh,\n backendName: 'cpu',\n kernelFunc: cosh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ29zaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtDb3NoLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBjb3NoID0gdW5hcnlLZXJuZWxGdW5jKENvc2gsICh4aSkgPT4gTWF0aC5jb3NoKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBjb3NoQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IENvc2gsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogY29zaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, CropAndResize, util } from '@tensorflow/tfjs-core';\nexport function cropAndResize(args) {\n const { inputs, backend, attrs } = args;\n const { image, boxes, boxInd } = inputs;\n const { cropSize, method, extrapolationValue } = attrs;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const numBoxes = boxes.shape[0];\n const [cropHeight, cropWidth] = cropSize;\n const output = buffer([numBoxes, cropHeight, cropWidth, numChannels], 'float32');\n const boxVals = backend.data.get(boxes.dataId).values;\n const boxIndVals = backend.data.get(boxInd.dataId).values;\n const imageVals = backend.data.get(image.dataId).values;\n const inStride = util.computeStrides(image.shape); // to calculate flat indexes into image\n const outStride = util.computeStrides(output.shape); // to calculate flat indexes into output\n // Reference implementation\n // tslint:disable-next-line:max-line-length\n // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/crop_and_resize_op.cc\n for (let b = 0; b < numBoxes; b++) {\n const startInd = b * 4;\n const y1 = boxVals[startInd];\n const x1 = boxVals[startInd + 1];\n const y2 = boxVals[startInd + 2];\n const x2 = boxVals[startInd + 3];\n const bInd = boxIndVals[b];\n if (bInd >= batch) {\n continue;\n }\n const heightScale = (cropHeight > 1) ? (y2 - y1) * (imageHeight - 1) / (cropHeight - 1) : 0;\n const widthScale = (cropWidth > 1) ? (x2 - x1) * (imageWidth - 1) / (cropWidth - 1) : 0;\n for (let y = 0; y < cropHeight; y++) {\n const yInd = (cropHeight > 1) ?\n y1 * (imageHeight - 1) + y * (heightScale) :\n 0.5 * (y1 + y2) * (imageHeight - 1);\n if (yInd < 0 || yInd > imageHeight - 1) {\n for (let x = 0; x < cropWidth; x++) {\n for (let c = 0; c < numChannels; c++) {\n const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n output.values[ind] = extrapolationValue;\n }\n }\n continue;\n }\n if (method === 'bilinear') {\n const topInd = Math.floor(yInd);\n const bottomInd = Math.ceil(yInd);\n const yLerp = yInd - topInd;\n for (let x = 0; x < cropWidth; x++) {\n const xInd = (cropWidth > 1) ?\n x1 * (imageWidth - 1) + x * widthScale :\n 0.5 * (x1 + x2) * (imageWidth - 1);\n if (xInd < 0 || xInd > imageWidth - 1) {\n for (let c = 0; c < numChannels; c++) {\n const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n output.values[ind] = extrapolationValue;\n }\n continue;\n }\n const leftInd = Math.floor(xInd);\n const rightInd = Math.ceil(xInd);\n const xLerp = xInd - leftInd;\n for (let c = 0; c < numChannels; c++) {\n let ind = c + leftInd * inStride[2] + topInd * inStride[1] +\n bInd * inStride[0];\n const topLeft = imageVals[ind];\n ind = c + rightInd * inStride[2] + topInd * inStride[1] +\n bInd * inStride[0];\n const topRight = imageVals[ind];\n ind = c + leftInd * inStride[2] + bottomInd * inStride[1] +\n bInd * inStride[0];\n const bottomLeft = imageVals[ind];\n ind = c + rightInd * inStride[2] + bottomInd * inStride[1] +\n bInd * inStride[0];\n const bottomRight = imageVals[ind];\n const top = topLeft + (topRight - topLeft) * xLerp;\n const bottom = bottomLeft + (bottomRight - bottomLeft) * xLerp;\n ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n output.values[ind] = top + ((bottom - top) * yLerp);\n }\n }\n }\n else { // method == \"nearest\"\n for (let x = 0; x < cropWidth; ++x) {\n const xInd = (cropWidth > 1) ?\n x1 * (imageWidth - 1) + x * widthScale :\n 0.5 * (x1 + x2) * (imageWidth - 1);\n if (xInd < 0 || xInd > imageWidth - 1) {\n for (let c = 0; c < numChannels; c++) {\n const ind = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n output.values[ind] = extrapolationValue;\n }\n continue;\n }\n const closestX = Math.round(xInd);\n const closestY = Math.round(yInd);\n for (let c = 0; c < numChannels; c++) {\n const inInd = c + closestX * inStride[2] + closestY * inStride[1] +\n bInd * inStride[0];\n const outInd = c + x * outStride[2] + y * outStride[1] + b * outStride[0];\n output.values[outInd] = imageVals[inInd];\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(output.shape, output.dtype, output.values);\n}\nexport const cropAndResizeConfig = {\n kernelName: CropAndResize,\n backendName: 'cpu',\n kernelFunc: cropAndResize\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3JvcEFuZFJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ3JvcEFuZFJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBNkYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJN0osTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUk3QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDdEMsTUFBTSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckQsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FDUixNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV0RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFD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dCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtidWZmZXIsIENyb3BBbmRSZXNpemUsIENyb3BBbmRSZXNpemVBdHRycywgQ3JvcEFuZFJlc2l6ZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9wQW5kUmVzaXplKGFyZ3M6IHtcbiAgaW5wdXRzOiBDcm9wQW5kUmVzaXplSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IENyb3BBbmRSZXNpemVBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2UsIGJveGVzLCBib3hJbmR9ID0gaW5wdXRzO1xuICBjb25zdCB7Y3JvcFNpemUsIG1ldGhvZCwgZXh0cmFwb2xhdGlvblZhbHVlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IFtiYXRjaCwgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIG51bUNoYW5uZWxzXSA9IGltYWdlLnNoYXBlO1xuICBjb25zdCBudW1Cb3hlcyA9IGJveGVzLnNoYXBlWzBdO1xuXG4gIGNvbnN0IFtjcm9wSGVpZ2h0LCBjcm9wV2lkdGhdID0gY3JvcFNpemU7XG4gIGNvbnN0IG91dHB1dCA9XG4gICAgICBidWZmZXIoW251bUJveGVzLCBjcm9wSGVpZ2h0LCBjcm9wV2lkdGgsIG51bUNoYW5uZWxzXSwgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBib3hWYWxzID0gYmFja2VuZC5kYXRhLmdldChib3hlcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBib3hJbmRWYWxzID0gYmFja2VuZC5kYXRhLmdldChib3hJbmQuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgaW1hZ2VWYWxzID0gYmFja2VuZC5kYXRhLmdldChpbWFnZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IGluU3RyaWRlID1cbiAgICAgIHV0aWwuY29tcHV0ZVN0cmlkZXMoaW1hZ2Uuc2hhcGUpOyAgLy8gdG8gY2FsY3VsYXRlIGZsYXQgaW5kZXhlcyBpbnRvIGltYWdlXG4gIGNvbnN0IG91dFN0cmlkZSA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoXG4gICAgICBvdXRwdXQuc2hhcGUpOyAgLy8gdG8gY2FsY3VsYXRlIGZsYXQgaW5kZXhlcyBpbnRvIG91dHB1dFxuXG4gIC8vIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi9tYXN0ZXIvdGVuc29yZmxvdy9jb3JlL2tlcm5lbHMvY3JvcF9hbmRfcmVzaXplX29wLmNjXG4gIGZvciAobGV0IGIgPSAwOyBiIDwgbnVtQm94ZXM7IGIrKykge1xuICAgIGNvbnN0IHN0YXJ0SW5kID0gYiAqIDQ7XG4gICAgY29uc3QgeTEgPSBib3hWYWxzW3N0YXJ0SW5kXTtcbiAgICBjb25zdCB4MSA9IGJveFZhbHNbc3RhcnRJbmQgKyAxXTtcbiAgICBjb25zdCB5MiA9IGJveFZhbHNbc3RhcnRJbmQgKyAyXTtcbiAgICBjb25zdCB4MiA9IGJveFZhbHNbc3RhcnRJbmQgKyAzXTtcblxuICAgIGNvbnN0IGJJbmQ6IG51bWJlciA9IGJveEluZFZhbHNbYl07XG4gICAgaWYgKGJJbmQgPj0gYmF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodFNjYWxlID1cbiAgICAgICAgKGNyb3BIZWlnaHQgPiAxKSA/ICh5MiAtIHkxKSAqIChpbWFnZUhlaWdodCAtIDEpIC8gKGNyb3BIZWlnaHQgLSAxKSA6IDA7XG4gICAgY29uc3Qgd2lkdGhTY2FsZSA9XG4gICAgICAgIChjcm9wV2lkdGggPiAxKSA/ICh4MiAtIHgxKSAqIChpbWFnZVdpZHRoIC0gMSkgLyAoY3JvcFdpZHRoIC0gMSkgOiAwO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjcm9wSGVpZ2h0OyB5KyspIHtcbiAgICAgIGNvbnN0IHlJbmQ6IG51bWJlciA9IChjcm9wSGVpZ2h0ID4gMSkgP1xuICAgICAgICAgIHkxICogKGltYWdlSGVpZ2h0IC0gMSkgKyB5ICogKGhlaWdodFNjYWxlKSA6XG4gICAgICAgICAgMC41ICogKHkxICsgeTIpICogKGltYWdlSGVpZ2h0IC0gMSk7XG5cbiAgICAgIGlmICh5SW5kIDwgMCB8fCB5SW5kID4gaW1hZ2VIZWlnaHQgLSAxKSB7XG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgY3JvcFdpZHRoOyB4KyspIHtcbiAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IG51bUNoYW5uZWxzOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZCA9XG4gICAgICAgICAgICAgICAgYyArIHggKiBvdXRTdHJpZGVbMl0gKyB5ICogb3V0U3RyaWRlWzFdICsgYiAqIG91dFN0cmlkZVswXTtcbiAgICAgICAgICAgIG91dHB1dC52YWx1ZXNbaW5kXSA9IGV4dHJhcG9sYXRpb25WYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdiaWxpbmVhcicpIHtcbiAgICAgICAgY29uc3QgdG9wSW5kID0gTWF0aC5mbG9vcih5SW5kKTtcbiAgICAgICAgY29uc3QgYm90dG9tSW5kID0gTWF0aC5jZWlsKHlJbmQpO1xuICAgICAgICBjb25zdCB5TGVycCA9IHlJbmQgLSB0b3BJbmQ7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjcm9wV2lkdGg7IHgrKykge1xuICAgICAgICAgIGNvbnN0IHhJbmQgPSAoY3JvcFdpZHRoID4gMSkgP1xuICAgICAgICAgICAgICB4MSAqIChpbWFnZVdpZHRoIC0gMSkgKyB4ICogd2lkdGhTY2FsZSA6XG4gICAgICAgICAgICAgIDAuNSAqICh4MSArIHgyKSAqIChpbWFnZVdpZHRoIC0gMSk7XG5cbiAgICAgICAgICBpZiAoeEluZCA8IDAgfHwgeEluZCA+IGltYWdlV2lkdGggLSAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IG51bUNoYW5uZWxzOyBjKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kID1cbiAgICAgICAgICAgICAgICAgIGMgKyB4ICogb3V0U3RyaWRlWzJdICsgeSAqIG91dFN0cmlkZVsxXSArIGIgKiBvdXRTdHJpZGVbMF07XG4gICAgICAgICAgICAgIG91dHB1dC52YWx1ZXNbaW5kXSA9IGV4dHJhcG9sYXRpb25WYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxlZnRJbmQgPSBNYXRoLmZsb29yKHhJbmQpO1xuICAgICAgICAgIGNvbnN0IHJpZ2h0SW5kID0gTWF0aC5jZWlsKHhJbmQpO1xuICAgICAgICAgIGNvbnN0IHhMZXJwID0geEluZCAtIGxlZnRJbmQ7XG5cbiAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IG51bUNoYW5uZWxzOyBjKyspIHtcbiAgICAgICAgICAgIGxldCBpbmQgPSBjICsgbGVmdEluZCAqIGluU3RyaWRlWzJdICsgdG9wSW5kICogaW5TdHJpZGVbMV0gK1xuICAgICAgICAgICAgICAgIGJJbmQgKiBpblN0cmlkZVswXTtcbiAgICAgICAgICAgIGNvbnN0IHRvcExlZnQgPSBpbWFnZVZhbHNbaW5kXTtcblxuICAgICAgICAgICAgaW5kID0gYyArIHJpZ2h0SW5kICogaW5TdHJpZGVbMl0gKyB0b3BJbmQgKiBpblN0cmlkZVsxXSArXG4gICAgICAgICAgICAgICAgYkluZCAqIGluU3RyaWRlWzBdO1xuICAgICAgICAgICAgY29uc3QgdG9wUmlnaHQgPSBpbWFnZVZhbHNbaW5kXTtcblxuICAgICAgICAgICAgaW5kID0gYyArIGxlZnRJbmQgKiBpblN0cmlkZVsyXSArIGJvdHRvbUluZCAqIGluU3RyaWRlWzFdICtcbiAgICAgICAgICAgICAgICBiSW5kICogaW5TdHJpZGVbMF07XG4gICAgICAgICAgICBjb25zdCBib3R0b21MZWZ0ID0gaW1hZ2VWYWxzW2luZF07XG5cbiAgICAgICAgICAgIGluZCA9IGMgKyByaWdodEluZCAqIGluU3RyaWRlWzJdICsgYm90dG9tSW5kICogaW5TdHJpZGVbMV0gK1xuICAgICAgICAgICAgICAgIGJJbmQgKiBpblN0cmlkZVswXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gaW1hZ2VWYWxzW2luZF07XG5cbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHRvcExlZnQgKyAodG9wUmlnaHQgLSB0b3BMZWZ0KSAqIHhMZXJwO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gYm90dG9tTGVmdCArIChib3R0b21SaWdodCAtIGJvdHRvbUxlZnQpICogeExlcnA7XG5cbiAgICAgICAgICAgIGluZCA9IGMgKyB4ICogb3V0U3RyaWRlWzJdICsgeSAqIG91dFN0cmlkZVsxXSArIGIgKiBvdXRTdHJpZGVbMF07XG4gICAgICAgICAgICBvdXRwdXQudmFsdWVzW2luZF0gPSB0b3AgKyAoKGJvdHRvbSAtIHRvcCkgKiB5TGVycCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyAgLy8gbWV0aG9kID09IFwibmVhcmVzdFwiXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgY3JvcFdpZHRoOyArK3gpIHtcbiAgICAgICAgICBjb25zdCB4SW5kID0gKGNyb3BXaWR0aCA+IDEpID9cbiAgICAgICAgICAgICAgeDEgKiAoaW1hZ2VXaWR0aCAtIDEpICsgeCAqIHdpZHRoU2NhbGUgOlxuICAgICAgICAgICAgICAwLjUgKiAoeDEgKyB4MikgKiAoaW1hZ2VXaWR0aCAtIDEpO1xuXG4gICAgICAgICAgaWYgKHhJbmQgPCAwIHx8IHhJbmQgPiBpbWFnZVdpZHRoIC0gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBudW1DaGFubmVsczsgYysrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZCA9XG4gICAgICAgICAgICAgICAgICBjICsgeCAqIG91dFN0cmlkZVsyXSArIHkgKiBvdXRTdHJpZGVbMV0gKyBiICogb3V0U3RyaWRlWzBdO1xuICAgICAgICAgICAgICBvdXRwdXQudmFsdWVzW2luZF0gPSBleHRyYXBvbGF0aW9uVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjbG9zZXN0WCA9IE1hdGgucm91bmQoeEluZCk7XG4gICAgICAgICAgY29uc3QgY2xvc2VzdFkgPSBNYXRoLnJvdW5kKHlJbmQpO1xuICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbnVtQ2hhbm5lbHM7IGMrKykge1xuICAgICAgICAgICAgY29uc3QgaW5JbmQgPSBjICsgY2xvc2VzdFggKiBpblN0cmlkZVsyXSArIGNsb3Nlc3RZICogaW5TdHJpZGVbMV0gK1xuICAgICAgICAgICAgICAgIGJJbmQgKiBpblN0cmlkZVswXTtcbiAgICAgICAgICAgIGNvbnN0IG91dEluZCA9XG4gICAgICAgICAgICAgICAgYyArIHggKiBvdXRTdHJpZGVbMl0gKyB5ICogb3V0U3RyaWRlWzFdICsgYiAqIG91dFN0cmlkZVswXTtcbiAgICAgICAgICAgIG91dHB1dC52YWx1ZXNbb3V0SW5kXSA9IGltYWdlVmFsc1tpbkluZF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0cHV0LnNoYXBlLCBvdXRwdXQuZHR5cGUsIG91dHB1dC52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY3JvcEFuZFJlc2l6ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBDcm9wQW5kUmVzaXplLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGNyb3BBbmRSZXNpemUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Cumprod, upcastType, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function cumprod(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n assertNotComplex(x, 'cumprod');\n const permutation = backend_util.getAxesPermutation([axis], x.shape.length);\n let $x = x;\n if (permutation != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n }\n const permutedAxis = backend_util.getInnerMostAxes(1, x.shape.length)[0];\n if (permutedAxis !== $x.shape.length - 1) {\n throw new Error(`backend.cumprod in CPU expects an inner-most ` +\n `axis=${$x.shape.length - 1} but got axis=${permutedAxis}`);\n }\n const resultDtype = upcastType($x.dtype, 'int32');\n const vals = util.makeOnesTypedArray(util.sizeFromShape($x.shape), resultDtype);\n const aVals = backend.data.get($x.dataId).values;\n const finalDim = $x.shape[$x.shape.length - 1];\n const indexAdjuster = reverse ?\n (i, j) => i + finalDim - j - 1 :\n (i, j) => i + j;\n for (let i = 0; i < aVals.length; i += finalDim) {\n for (let j = 0; j < finalDim; j++) {\n const idx = indexAdjuster(i, j);\n if (j === 0) {\n vals[idx] = exclusive ? 1 : aVals[idx];\n }\n else {\n const prevIdx = indexAdjuster(i, j - 1);\n vals[idx] = exclusive ? aVals[prevIdx] * vals[prevIdx] :\n aVals[idx] * vals[prevIdx];\n }\n }\n }\n const result = backend.makeTensorInfo($x.shape, resultDtype, vals);\n if (permutation != null) {\n const reversePermutation = backend_util.getUndoAxesPermutation(permutation);\n const reverseTransposedResult = transpose({ inputs: { x: result }, backend, attrs: { perm: reversePermutation } });\n backend.disposeIntermediateTensorInfo(result);\n backend.disposeIntermediateTensorInfo($x);\n return reverseTransposedResult;\n }\n return result;\n}\nexport const cumprodConfig = {\n kernelName: Cumprod,\n backendName: 'cpu',\n kernelFunc: cumprod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VtcHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvQ3VtcHJvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE9BQU8sRUFBaUYsVUFBVSxFQUFFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzdKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQzJCO0lBQzdCLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV6QyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFL0IsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7UUFDdkIsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFB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QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBDdW1wcm9kLCBDdW1wcm9kQXR0cnMsIEN1bXByb2RJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXBjYXN0VHlwZSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3VtcHJvZChcbiAgICBhcmdzOiB7aW5wdXRzOiBDdW1wcm9kSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgICAgICAgICAgYXR0cnM6IEN1bXByb2RBdHRyc30pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpcywgZXhjbHVzaXZlLCByZXZlcnNlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ2N1bXByb2QnKTtcblxuICBjb25zdCBwZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oW2F4aXNdLCB4LnNoYXBlLmxlbmd0aCk7XG4gIGxldCAkeCA9IHg7XG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgJHggPSB0cmFuc3Bvc2Uoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge3Blcm06IHBlcm11dGF0aW9ufX0pO1xuICB9XG4gIGNvbnN0IHBlcm11dGVkQXhpcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKDEsIHguc2hhcGUubGVuZ3RoKVswXTtcblxuICBpZiAocGVybXV0ZWRBeGlzICE9PSAkeC5zaGFwZS5sZW5ndGggLSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYmFja2VuZC5jdW1wcm9kIGluIENQVSBleHBlY3RzIGFuIGlubmVyLW1vc3QgYCArXG4gICAgICAgIGBheGlzPSR7JHguc2hhcGUubGVuZ3RoIC0gMX0gYnV0IGdvdCBheGlzPSR7cGVybXV0ZWRBeGlzfWApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0RHR5cGUgPSB1cGNhc3RUeXBlKCR4LmR0eXBlLCAnaW50MzInKTtcbiAgY29uc3QgdmFscyA9IHV0aWwubWFrZU9uZXNUeXBlZEFycmF5KFxuICAgICAgICAgICAgICAgICAgIHV0aWwuc2l6ZUZyb21TaGFwZSgkeC5zaGFwZSksIHJlc3VsdER0eXBlKSBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IGFWYWxzID0gYmFja2VuZC5kYXRhLmdldCgkeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBmaW5hbERpbSA9ICR4LnNoYXBlWyR4LnNoYXBlLmxlbmd0aCAtIDFdO1xuICBjb25zdCBpbmRleEFkanVzdGVyID0gcmV2ZXJzZSA/XG4gICAgICAoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgKyBmaW5hbERpbSAtIGogLSAxIDpcbiAgICAgIChpOiBudW1iZXIsIGo6IG51bWJlcikgPT4gaSArIGo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYVZhbHMubGVuZ3RoOyBpICs9IGZpbmFsRGltKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaW5hbERpbTsgaisrKSB7XG4gICAgICBjb25zdCBpZHggPSBpbmRleEFkanVzdGVyKGksIGopO1xuICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgdmFsc1tpZHhdID0gZXhjbHVzaXZlID8gMSA6IGFWYWxzW2lkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2SWR4ID0gaW5kZXhBZGp1c3RlcihpLCBqIC0gMSk7XG4gICAgICAgIHZhbHNbaWR4XSA9IGV4Y2x1c2l2ZSA/IGFWYWxzW3ByZXZJZHhdICogdmFsc1twcmV2SWR4XSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFWYWxzW2lkeF0gKiB2YWxzW3ByZXZJZHhdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oJHguc2hhcGUsIHJlc3VsdER0eXBlLCB2YWxzKTtcblxuICBpZiAocGVybXV0YXRpb24gIT0gbnVsbCkge1xuICAgIGNvbnN0IHJldmVyc2VQZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRVbmRvQXhlc1Blcm11dGF0aW9uKHBlcm11dGF0aW9uKTtcbiAgICBjb25zdCByZXZlcnNlVHJhbnNwb3NlZFJlc3VsdCA9IHRyYW5zcG9zZShcbiAgICAgICAge2lucHV0czoge3g6IHJlc3VsdH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcmV2ZXJzZVBlcm11dGF0aW9ufX0pO1xuXG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXN1bHQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJHgpO1xuXG4gICAgcmV0dXJuIHJldmVyc2VUcmFuc3Bvc2VkUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGN1bXByb2RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogQ3VtcHJvZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjdW1wcm9kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Cumsum, upcastType, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { transpose } from './Transpose';\nexport function cumsum(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, exclusive, reverse } = attrs;\n assertNotComplex(x, 'cumsum');\n const permutation = backend_util.getAxesPermutation([axis], x.shape.length);\n let $x = x;\n if (permutation != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutation } });\n }\n const permutedAxis = backend_util.getInnerMostAxes(1, x.shape.length)[0];\n if (permutedAxis !== $x.shape.length - 1) {\n throw new Error(`backend.cumsum in CPU expects an inner-most ` +\n `axis=${$x.shape.length - 1} but got axis=${permutedAxis}`);\n }\n const resultDtype = upcastType($x.dtype, 'int32');\n const vals = util.makeZerosTypedArray(util.sizeFromShape($x.shape), resultDtype);\n const aVals = backend.data.get($x.dataId).values;\n const finalDim = $x.shape[$x.shape.length - 1];\n const indexAdjuster = reverse ?\n (i, j) => i + finalDim - j - 1 :\n (i, j) => i + j;\n for (let i = 0; i < aVals.length; i += finalDim) {\n for (let j = 0; j < finalDim; j++) {\n const idx = indexAdjuster(i, j);\n if (j === 0) {\n vals[idx] = exclusive ? 0 : aVals[idx];\n }\n else {\n const prevIdx = indexAdjuster(i, j - 1);\n vals[idx] = exclusive ? aVals[prevIdx] + vals[prevIdx] :\n aVals[idx] + vals[prevIdx];\n }\n }\n }\n const result = backend.makeTensorInfo($x.shape, resultDtype, vals);\n if (permutation != null) {\n const reversePermutation = backend_util.getUndoAxesPermutation(permutation);\n const reverseTransposedResult = transpose({ inputs: { x: result }, backend, attrs: { perm: reversePermutation } });\n backend.disposeIntermediateTensorInfo(result);\n backend.disposeIntermediateTensorInfo($x);\n return reverseTransposedResult;\n }\n return result;\n}\nexport const cumsumConfig = {\n kernelName: Cumsum,\n backendName: 'cpu',\n kernelFunc: cumsum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Vtc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9DdW1zdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQStFLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUcxSixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUF5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFekMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1FBQ3ZCLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUNwRTtJQUNELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUs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Q2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgQ3Vtc3VtLCBDdW1zdW1BdHRycywgQ3Vtc3VtSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHVwY2FzdFR5cGUsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHt0cmFuc3Bvc2V9IGZyb20gJy4vVHJhbnNwb3NlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGN1bXN1bShcbiAgICBhcmdzOiB7aW5wdXRzOiBDdW1zdW1JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogQ3Vtc3VtQXR0cnN9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YXhpcywgZXhjbHVzaXZlLCByZXZlcnNlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ2N1bXN1bScpO1xuXG4gIGNvbnN0IHBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihbYXhpc10sIHguc2hhcGUubGVuZ3RoKTtcbiAgbGV0ICR4ID0geDtcbiAgaWYgKHBlcm11dGF0aW9uICE9IG51bGwpIHtcbiAgICAkeCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0YXRpb259fSk7XG4gIH1cbiAgY29uc3QgcGVybXV0ZWRBeGlzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoMSwgeC5zaGFwZS5sZW5ndGgpWzBdO1xuXG4gIGlmIChwZXJtdXRlZEF4aXMgIT09ICR4LnNoYXBlLmxlbmd0aCAtIDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBiYWNrZW5kLmN1bXN1bSBpbiBDUFUgZXhwZWN0cyBhbiBpbm5lci1tb3N0IGAgK1xuICAgICAgICBgYXhpcz0keyR4LnNoYXBlLmxlbmd0aCAtIDF9IGJ1dCBnb3QgYXhpcz0ke3Blcm11dGVkQXhpc31gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdER0eXBlID0gdXBjYXN0VHlwZSgkeC5kdHlwZSwgJ2ludDMyJyk7XG4gIGNvbnN0IHZhbHMgPSB1dGlsLm1ha2VaZXJvc1R5cGVkQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgdXRpbC5zaXplRnJvbVNoYXBlKCR4LnNoYXBlKSwgcmVzdWx0RHR5cGUpIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgYVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KCR4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGZpbmFsRGltID0gJHguc2hhcGVbJHguc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGluZGV4QWRqdXN0ZXIgPSByZXZlcnNlID9cbiAgICAgIChpOiBudW1iZXIsIGo6IG51bWJlcikgPT4gaSArIGZpbmFsRGltIC0gaiAtIDEgOlxuICAgICAgKGk6IG51bWJlciwgajogbnVtYmVyKSA9PiBpICsgajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVmFscy5sZW5ndGg7IGkgKz0gZmluYWxEaW0pIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpbmFsRGltOyBqKyspIHtcbiAgICAgIGNvbnN0IGlkeCA9IGluZGV4QWRqdXN0ZXIoaSwgaik7XG4gICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICB2YWxzW2lkeF0gPSBleGNsdXNpdmUgPyAwIDogYVZhbHNbaWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXZJZHggPSBpbmRleEFkanVzdGVyKGksIGogLSAxKTtcbiAgICAgICAgdmFsc1tpZHhdID0gZXhjbHVzaXZlID8gYVZhbHNbcHJldklkeF0gKyB2YWxzW3ByZXZJZHhdIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVZhbHNbaWR4XSArIHZhbHNbcHJldklkeF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbygkeC5zaGFwZSwgcmVzdWx0RHR5cGUsIHZhbHMpO1xuXG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgY29uc3QgcmV2ZXJzZVBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldFVuZG9BeGVzUGVybXV0YXRpb24ocGVybXV0YXRpb24pO1xuICAgIGNvbnN0IHJldmVyc2VUcmFuc3Bvc2VkUmVzdWx0ID0gdHJhbnNwb3NlKFxuICAgICAgICB7aW5wdXRzOiB7eDogcmVzdWx0fSwgYmFja2VuZCwgYXR0cnM6IHtwZXJtOiByZXZlcnNlUGVybXV0YXRpb259fSk7XG5cbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbygkeCk7XG5cbiAgICByZXR1cm4gcmV2ZXJzZVRyYW5zcG9zZWRSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgY3Vtc3VtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEN1bXN1bSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBjdW1zdW0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DenseBincount } from '@tensorflow/tfjs-core';\nimport { bincountImpl, bincountReduceImpl } from './Bincount_impl';\nexport function denseBincount(args) {\n const { inputs, backend, attrs } = args;\n const { x, weights } = inputs;\n const { size, binaryOutput } = attrs;\n if (x.shape.length === 1) {\n const xVals = backend.data.get(x.dataId).values;\n const weightsVals = backend.data.get(weights.dataId).values;\n const outVals = bincountImpl(xVals, weightsVals, weights.dtype, weights.shape, size);\n return backend.makeTensorInfo([size], weights.dtype, outVals);\n }\n else if (x.shape.length === 2) {\n const xBuf = backend.bufferSync(x);\n const weightsBuf = backend.bufferSync(weights);\n const outBuf = bincountReduceImpl(xBuf, weightsBuf, size, binaryOutput);\n return backend.makeTensorInfo(outBuf.shape, weights.dtype, outBuf.values);\n }\n throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank` +\n `${x.shape.length}.`);\n}\nexport const denseBincountConfig = {\n kernelName: DenseBincount,\n backendName: 'cpu',\n kernelFunc: denseBincount\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVuc2VCaW5jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRGVuc2VCaW5jb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsYUFBYSxFQUFrRyxNQUFNLHVCQUF1QixDQUFDO0FBR3JKLE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRSxNQUFNLFVBQVUsYUFBYSxDQUFDLElBSTdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRW5DLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO1FBRTFFLE1BQU0sT0FBTyxHQUNULFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV6RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQy9EO1NBQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBa0IsQ0FBQyxDQUFDLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBa0IsT0FBTyxDQUFDLENBQUM7UUFFaEUsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFeEUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0U7SUFFRCxNQUFNLElBQUksS0FBSyxDQUNYLG9FQUFvRTtRQUNwRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RlbnNlQmluY291bnQsIERlbnNlQmluY291bnRBdHRycywgRGVuc2VCaW5jb3VudElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2JpbmNvdW50SW1wbCwgYmluY291bnRSZWR1Y2VJbXBsfSBmcm9tICcuL0JpbmNvdW50X2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVuc2VCaW5jb3VudChhcmdzOiB7XG4gIGlucHV0czogRGVuc2VCaW5jb3VudElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBEZW5zZUJpbmNvdW50QXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIHdlaWdodHN9ID0gaW5wdXRzO1xuICBjb25zdCB7c2l6ZSwgYmluYXJ5T3V0cHV0fSA9IGF0dHJzO1xuXG4gIGlmICh4LnNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3Qgd2VpZ2h0c1ZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHdlaWdodHMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgIGNvbnN0IG91dFZhbHMgPVxuICAgICAgICBiaW5jb3VudEltcGwoeFZhbHMsIHdlaWdodHNWYWxzLCB3ZWlnaHRzLmR0eXBlLCB3ZWlnaHRzLnNoYXBlLCBzaXplKTtcblxuICAgIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtzaXplXSwgd2VpZ2h0cy5kdHlwZSwgb3V0VmFscyk7XG4gIH0gZWxzZSBpZiAoeC5zaGFwZS5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCB4QnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdmbG9hdDMyJz4oeCk7XG4gICAgY29uc3Qgd2VpZ2h0c0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnZmxvYXQzMic+KHdlaWdodHMpO1xuXG4gICAgY29uc3Qgb3V0QnVmID0gYmluY291bnRSZWR1Y2VJbXBsKHhCdWYsIHdlaWdodHNCdWYsIHNpemUsIGJpbmFyeU91dHB1dCk7XG5cbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRCdWYuc2hhcGUsIHdlaWdodHMuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yIGluIGRlbnNlQmluY291bnQ6IGlucHV0IG11c3QgYmUgYXQgbW9zdCByYW5rIDIsIGJ1dCBnb3QgcmFua2AgK1xuICAgICAgYCR7eC5zaGFwZS5sZW5ndGh9LmApO1xufVxuXG5leHBvcnQgY29uc3QgZGVuc2VCaW5jb3VudENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEZW5zZUJpbmNvdW50LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGRlbnNlQmluY291bnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { DepthToSpace, util } from '@tensorflow/tfjs-core';\nexport function depthToSpace(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockSize, dataFormat } = attrs;\n util.assert(dataFormat === 'NHWC', () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${dataFormat}`);\n const batchSize = x.shape[0];\n const inputHeight = x.shape[1];\n const inputWidth = x.shape[2];\n const inputDepth = x.shape[3];\n const outputHeight = inputHeight * blockSize;\n const outputWidth = inputWidth * blockSize;\n const outputDepth = inputDepth / (blockSize * blockSize);\n const xValues = backend.data.get(x.dataId).values;\n const result = new Float32Array(batchSize * outputHeight * outputWidth * outputDepth);\n let outputIdx = 0;\n for (let b = 0; b < batchSize; ++b) {\n for (let h = 0; h < outputHeight; ++h) {\n const inH = Math.floor(h / blockSize);\n const offsetH = (h % blockSize);\n for (let w = 0; w < outputWidth; ++w) {\n const inW = Math.floor(w / blockSize);\n const offsetW = (w % blockSize);\n const offsetD = (offsetH * blockSize + offsetW) * outputDepth;\n for (let d = 0; d < outputDepth; ++d) {\n const inD = d + offsetD;\n const inputIdx = inD + inputDepth * (inW + inputWidth * (inH + inputHeight * b));\n result[outputIdx++] = xValues[inputIdx];\n }\n }\n }\n }\n return backend.makeTensorInfo([batchSize, outputHeight, outputWidth, outputDepth], x.dtype, result);\n}\nexport const depthToSpaceConfig = {\n kernelName: DepthToSpace,\n backendName: 'cpu',\n kernelFunc: depthToSpace\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGhUb1NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9EZXB0aFRvU3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBMkYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbEosTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRDLElBQUksQ0FBQyxNQUFNLENBQ1AsVUFBVSxLQUFLLE1BQU0sRUFDckIsR0FBRyxFQUFFLENBQUMsK0RBQ0YsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUV0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sWUFBWSxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDN0MsTUFBTSxXQUFXLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQ1IsSUFBSSxZQUFZLENBQUMsU0FBUyxHQUFHLFlBQVksR0FBRyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFFM0UsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUN0QyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUM7Z0JBQzlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ3BDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7b0JBQ3hCLE1BQU0sUUFBUSxHQUNWLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3pDO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUN6QixDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEZXB0aFRvU3BhY2UsIERlcHRoVG9TcGFjZUF0dHJzLCBEZXB0aFRvU3BhY2VJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGhUb1NwYWNlKGFyZ3M6IHtcbiAgaW5wdXRzOiBEZXB0aFRvU3BhY2VJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogRGVwdGhUb1NwYWNlQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7YmxvY2tTaXplLCBkYXRhRm9ybWF0fSA9IGF0dHJzO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgZGF0YUZvcm1hdCA9PT0gJ05IV0MnLFxuICAgICAgKCkgPT4gYE9ubHkgTkhXQyBkYXRhRm9ybWF0IHN1cHBvcnRlZCBvbiBDUFUgZm9yIGRlcHRoVG9TcGFjZS4gR290ICR7XG4gICAgICAgICAgZGF0YUZvcm1hdH1gKTtcblxuICBjb25zdCBiYXRjaFNpemUgPSB4LnNoYXBlWzBdO1xuICBjb25zdCBpbnB1dEhlaWdodCA9IHguc2hhcGVbMV07XG4gIGNvbnN0IGlucHV0V2lkdGggPSB4LnNoYXBlWzJdO1xuICBjb25zdCBpbnB1dERlcHRoID0geC5zaGFwZVszXTtcblxuICBjb25zdCBvdXRwdXRIZWlnaHQgPSBpbnB1dEhlaWdodCAqIGJsb2NrU2l6ZTtcbiAgY29uc3Qgb3V0cHV0V2lkdGggPSBpbnB1dFdpZHRoICogYmxvY2tTaXplO1xuICBjb25zdCBvdXRwdXREZXB0aCA9IGlucHV0RGVwdGggLyAoYmxvY2tTaXplICogYmxvY2tTaXplKTtcblxuICBjb25zdCB4VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgICBuZXcgRmxvYXQzMkFycmF5KGJhdGNoU2l6ZSAqIG91dHB1dEhlaWdodCAqIG91dHB1dFdpZHRoICogb3V0cHV0RGVwdGgpO1xuXG4gIGxldCBvdXRwdXRJZHggPSAwO1xuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoU2l6ZTsgKytiKSB7XG4gICAgZm9yIChsZXQgaCA9IDA7IGggPCBvdXRwdXRIZWlnaHQ7ICsraCkge1xuICAgICAgY29uc3QgaW5IID0gTWF0aC5mbG9vcihoIC8gYmxvY2tTaXplKTtcbiAgICAgIGNvbnN0IG9mZnNldEggPSAoaCAlIGJsb2NrU2l6ZSk7XG4gICAgICBmb3IgKGxldCB3ID0gMDsgdyA8IG91dHB1dFdpZHRoOyArK3cpIHtcbiAgICAgICAgY29uc3QgaW5XID0gTWF0aC5mbG9vcih3IC8gYmxvY2tTaXplKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0VyA9ICh3ICUgYmxvY2tTaXplKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0RCA9IChvZmZzZXRIICogYmxvY2tTaXplICsgb2Zmc2V0VykgKiBvdXRwdXREZXB0aDtcbiAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBvdXRwdXREZXB0aDsgKytkKSB7XG4gICAgICAgICAgY29uc3QgaW5EID0gZCArIG9mZnNldEQ7XG4gICAgICAgICAgY29uc3QgaW5wdXRJZHggPVxuICAgICAgICAgICAgICBpbkQgKyBpbnB1dERlcHRoICogKGluVyArIGlucHV0V2lkdGggKiAoaW5IICsgaW5wdXRIZWlnaHQgKiBiKSk7XG4gICAgICAgICAgcmVzdWx0W291dHB1dElkeCsrXSA9IHhWYWx1ZXNbaW5wdXRJZHhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBbYmF0Y2hTaXplLCBvdXRwdXRIZWlnaHQsIG91dHB1dFdpZHRoLCBvdXRwdXREZXB0aF0sIHguZHR5cGUsIHJlc3VsdCk7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aFRvU3BhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGVwdGhUb1NwYWNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGRlcHRoVG9TcGFjZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNative, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function depthwiseConv2dNative(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter } = inputs;\n const { strides, pad, dilations, dimRoundingMode } = attrs;\n assertNotComplex([x, filter], 'depthwiseConv2DNative');\n const xStrides = util.computeStrides(x.shape);\n const filterStrides = util.computeStrides(filter.shape);\n let $dilations = dilations;\n if ($dilations == null) {\n $dilations = [1, 1];\n }\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, $dilations), () => 'Error in depthwiseConv2d: Either strides or dilations must be ' +\n `1. Got strides ${strides} and dilations '${$dilations}'`);\n const convInfo = backend_util.computeConv2DInfo(x.shape, filter.shape, strides, $dilations, pad, dimRoundingMode, true /* depthwise */);\n const { filterHeight, filterWidth, dilationHeight, dilationWidth, padInfo } = convInfo;\n const padLeft = padInfo.left;\n const padTop = padInfo.top;\n const chMul = convInfo.outChannels / convInfo.inChannels;\n const y = new TensorBuffer(convInfo.outShape, x.dtype);\n const xVals = backend.data.get(x.dataId).values;\n const wVals = backend.data.get(filter.dataId).values;\n const yVals = y.values;\n for (let b = 0; b < convInfo.batchSize; ++b) {\n const xOffset1 = b * xStrides[0];\n const yOffset1 = b * y.strides[0];\n for (let yR = 0; yR < convInfo.outHeight; ++yR) {\n const yOffset2 = yOffset1 + yR * y.strides[1];\n const xRCorner = yR * convInfo.strideHeight - padTop;\n for (let wR = 0; wR < filterHeight; ++wR) {\n const xR = xRCorner + wR * dilationHeight;\n if (xR < 0 || xR >= convInfo.inHeight) {\n continue;\n }\n const wOffset1 = wR * filterStrides[0];\n const xOffset2 = xOffset1 + xR * xStrides[1];\n for (let yC = 0; yC < convInfo.outWidth; ++yC) {\n const yOffset3 = yOffset2 + yC * y.strides[2];\n const xCCorner = yC * convInfo.strideWidth - padLeft;\n for (let wC = 0; wC < filterWidth; ++wC) {\n const xC = xCCorner + wC * dilationWidth;\n if (xC < 0 || xC >= convInfo.inWidth) {\n continue;\n }\n const wOffset2 = wOffset1 + wC * filterStrides[1];\n const xOffset3 = xOffset2 + xC * convInfo.inChannels;\n let yOffset4 = yOffset3;\n let wOffset3 = wOffset2;\n for (let d1 = 0; d1 < convInfo.inChannels; ++d1) {\n const xVal = xVals[xOffset3 + d1];\n for (let q = 0; q < chMul; ++q) {\n yVals[yOffset4 + q] += xVal * wVals[wOffset3 + q];\n }\n yOffset4 += chMul;\n wOffset3 += chMul;\n }\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(y.shape, y.dtype, y.values);\n}\nexport const depthwiseConv2dNativeConfig = {\n kernelName: DepthwiseConv2dNative,\n backendName: 'cpu',\n kernelFunc: depthwiseConv2dNative\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9EZXB0aHdpc2VDb252MmROYXRpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBcUYsWUFBWSxFQUEwQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6TSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBSXJDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFekQsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUV2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDM0IsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1FBQ3RCLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUVELElBQUksQ0FBQyxNQUFNLENBQ1AsWUFBWSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxV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LFVBQVUsRUFBRSxxQkFBOEM7Q0FDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERlcHRod2lzZUNvbnYyZE5hdGl2ZSwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUlucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JCdWZmZXIsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGh3aXNlQ29udjJkTmF0aXZlKGFyZ3M6IHtcbiAgaW5wdXRzOiBEZXB0aHdpc2VDb252MmROYXRpdmVJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3gsIGZpbHRlcn0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRpbGF0aW9ucywgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW3gsIGZpbHRlcl0sICdkZXB0aHdpc2VDb252MkROYXRpdmUnKTtcblxuICBjb25zdCB4U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoeC5zaGFwZSk7XG4gIGNvbnN0IGZpbHRlclN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGZpbHRlci5zaGFwZSk7XG5cbiAgbGV0ICRkaWxhdGlvbnMgPSBkaWxhdGlvbnM7XG4gIGlmICgkZGlsYXRpb25zID09IG51bGwpIHtcbiAgICAkZGlsYXRpb25zID0gWzEsIDFdO1xuICB9XG5cbiAgdXRpbC5hc3NlcnQoXG4gICAgICBiYWNrZW5kX3V0aWwuZWl0aGVyU3RyaWRlc09yRGlsYXRpb25zQXJlT25lKHN0cmlkZXMsICRkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIGRlcHRod2lzZUNvbnYyZDogRWl0aGVyIHN0cmlkZXMgb3IgZGlsYXRpb25zIG11c3QgYmUgJyArXG4gICAgICAgICAgYDEuIEdvdCBzdHJpZGVzICR7c3RyaWRlc30gYW5kIGRpbGF0aW9ucyAnJHskZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICBmaWx0ZXIuc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsICRkaWxhdGlvbnMsXG4gICAgICBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgdHJ1ZSAvKiBkZXB0aHdpc2UgKi8pO1xuXG4gIGNvbnN0IHtmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRoLCBkaWxhdGlvbkhlaWdodCwgZGlsYXRpb25XaWR0aCwgcGFkSW5mb30gPVxuICAgICAgY29udkluZm87XG4gIGNvbnN0IHBhZExlZnQgPSBwYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IHBhZFRvcCA9IHBhZEluZm8udG9wO1xuICBjb25zdCBjaE11bCA9IGNvbnZJbmZvLm91dENoYW5uZWxzIC8gY29udkluZm8uaW5DaGFubmVscztcbiAgY29uc3QgeSA9IG5ldyBUZW5zb3JCdWZmZXIoY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUgYXMgJ2Zsb2F0MzInKTtcbiAgY29uc3QgeFZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgd1ZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGZpbHRlci5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB5VmFscyA9IHkudmFsdWVzO1xuXG4gIGZvciAobGV0IGIgPSAwOyBiIDwgY29udkluZm8uYmF0Y2hTaXplOyArK2IpIHtcbiAgICBjb25zdCB4T2Zmc2V0MSA9IGIgKiB4U3RyaWRlc1swXTtcbiAgICBjb25zdCB5T2Zmc2V0MSA9IGIgKiB5LnN0cmlkZXNbMF07XG4gICAgZm9yIChsZXQgeVIgPSAwOyB5UiA8IGNvbnZJbmZvLm91dEhlaWdodDsgKyt5Uikge1xuICAgICAgY29uc3QgeU9mZnNldDIgPSB5T2Zmc2V0MSArIHlSICogeS5zdHJpZGVzWzFdO1xuICAgICAgY29uc3QgeFJDb3JuZXIgPSB5UiAqIGNvbnZJbmZvLnN0cmlkZUhlaWdodCAtIHBhZFRvcDtcbiAgICAgIGZvciAobGV0IHdSID0gMDsgd1IgPCBmaWx0ZXJIZWlnaHQ7ICsrd1IpIHtcbiAgICAgICAgY29uc3QgeFIgPSB4UkNvcm5lciArIHdSICogZGlsYXRpb25IZWlnaHQ7XG4gICAgICAgIGlmICh4UiA8IDAgfHwgeFIgPj0gY29udkluZm8uaW5IZWlnaHQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3T2Zmc2V0MSA9IHdSICogZmlsdGVyU3RyaWRlc1swXTtcbiAgICAgICAgY29uc3QgeE9mZnNldDIgPSB4T2Zmc2V0MSArIHhSICogeFN0cmlkZXNbMV07XG4gICAgICAgIGZvciAobGV0IHlDID0gMDsgeUMgPCBjb252SW5mby5vdXRXaWR0aDsgKyt5Qykge1xuICAgICAgICAgIGNvbnN0IHlPZmZzZXQzID0geU9mZnNldDIgKyB5QyAqIHkuc3RyaWRlc1syXTtcbiAgICAgICAgICBjb25zdCB4Q0Nvcm5lciA9IHlDICogY29udkluZm8uc3RyaWRlV2lkdGggLSBwYWRMZWZ0O1xuICAgICAgICAgIGZvciAobGV0IHdDID0gMDsgd0MgPCBmaWx0ZXJXaWR0aDsgKyt3Qykge1xuICAgICAgICAgICAgY29uc3QgeEMgPSB4Q0Nvcm5lciArIHdDICogZGlsYXRpb25XaWR0aDtcbiAgICAgICAgICAgIGlmICh4QyA8IDAgfHwgeEMgPj0gY29udkluZm8uaW5XaWR0aCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdPZmZzZXQyID0gd09mZnNldDEgKyB3QyAqIGZpbHRlclN0cmlkZXNbMV07XG4gICAgICAgICAgICBjb25zdCB4T2Zmc2V0MyA9IHhPZmZzZXQyICsgeEMgKiBjb252SW5mby5pbkNoYW5uZWxzO1xuICAgICAgICAgICAgbGV0IHlPZmZzZXQ0ID0geU9mZnNldDM7XG4gICAgICAgICAgICBsZXQgd09mZnNldDMgPSB3T2Zmc2V0MjtcbiAgICAgICAgICAgIGZvciAobGV0IGQxID0gMDsgZDEgPCBjb252SW5mby5pbkNoYW5uZWxzOyArK2QxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHhWYWwgPSB4VmFsc1t4T2Zmc2V0MyArIGQxXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcSA9IDA7IHEgPCBjaE11bDsgKytxKSB7XG4gICAgICAgICAgICAgICAgeVZhbHNbeU9mZnNldDQgKyBxXSArPSB4VmFsICogd1ZhbHNbd09mZnNldDMgKyBxXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB5T2Zmc2V0NCArPSBjaE11bDtcbiAgICAgICAgICAgICAgd09mZnNldDMgKz0gY2hNdWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeS5zaGFwZSwgeS5kdHlwZSwgeS52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgZGVwdGh3aXNlQ29udjJkTmF0aXZlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERlcHRod2lzZUNvbnYyZE5hdGl2ZSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBkZXB0aHdpc2VDb252MmROYXRpdmUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNativeBackpropFilter, TensorBuffer } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function depthwiseConv2dNativeBackpropFilter(args) {\n const { inputs, backend, attrs } = args;\n const { x, dy } = inputs;\n const { strides, dilations, pad, dimRoundingMode, filterShape } = attrs;\n assertNotComplex([x, dy], 'depthwiseConv2dNativeBackpropFilter');\n const convInfo = backend_util.computeConv2DInfo(x.shape, filterShape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n const { strideHeight, strideWidth, filterHeight, filterWidth } = convInfo;\n const dW = new TensorBuffer(convInfo.filterShape, 'float32');\n const leftPad = convInfo.padInfo.left;\n const topPad = convInfo.padInfo.top;\n const chMul = convInfo.outChannels / convInfo.inChannels;\n const xVals = backend.data.get(x.dataId).values;\n const xBuf = new TensorBuffer(x.shape, x.dtype, xVals);\n const dyVals = backend.data.get(dy.dataId).values;\n const dyBuf = new TensorBuffer(dy.shape, dy.dtype, dyVals);\n for (let wR = 0; wR < filterHeight; ++wR) {\n const yRMin = Math.max(0, Math.ceil((topPad - wR) / strideHeight));\n const yRMax = Math.min(convInfo.outHeight, (convInfo.inHeight + topPad - wR) / strideHeight);\n for (let wC = 0; wC < filterWidth; ++wC) {\n const yCMin = Math.max(0, Math.ceil((leftPad - wC) / strideWidth));\n const yCMax = Math.min(convInfo.outWidth, (convInfo.inWidth + leftPad - wC) / strideWidth);\n for (let d2 = 0; d2 < convInfo.outChannels; ++d2) {\n const d1 = Math.trunc(d2 / chMul);\n const dm = d2 % chMul;\n let dotProd = 0;\n for (let b = 0; b < convInfo.batchSize; ++b) {\n for (let yR = yRMin; yR < yRMax; ++yR) {\n const xR = wR + yR * strideHeight - topPad;\n for (let yC = yCMin; yC < yCMax; ++yC) {\n const xC = wC + yC * strideWidth - leftPad;\n dotProd += xBuf.get(b, xR, xC, d1) *\n dyBuf.get(b, yR, yC, d2);\n }\n }\n }\n dW.set(dotProd, wR, wC, d1, dm);\n }\n }\n }\n return backend.makeTensorInfo(dW.shape, dW.dtype, dW.values);\n}\nexport const depthwiseConv2dNativeBackpropFilterConfig = {\n kernelName: DepthwiseConv2dNativeBackpropFilter,\n backendName: 'cpu',\n kernelFunc: depthwiseConv2dNativeBackpropFilter\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsbUNBQW1DLEVBQWlILFlBQVksRUFBeUIsTUFBTSx1QkFBdUIsQ0FBQztBQUc3TyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLG1DQUFtQyxDQUFDLElBSW5EO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7SUFFakUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBeUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUNqRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFM0QsTUFBTSxFQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQyxHQUFHLFFBQVEsQ0FBQztJQUV4RSxNQUFNLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FB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QUUsRUFBRSxDQUFZO2dDQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBWSxDQUFDO3lCQUMxQztxQkFDRjtpQkFDRjtnQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNqQztTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQWlCO0lBQ3JFLFVBQVUsRUFBRSxtQ0FBbUM7SUFDL0MsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLG1DQUE0RDtDQUN6RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyQXR0cnMsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckJ1ZmZlciwgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlcihhcmdzOiB7XG4gIGlucHV0czogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgZmlsdGVyU2hhcGV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChbeCwgZHldLCAnZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXInKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNoYXBlLCBzdHJpZGVzLFxuICAgICAgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgdHJ1ZSAvKiBkZXB0aHdpc2UgKi8pO1xuXG4gIGNvbnN0IHtzdHJpZGVIZWlnaHQsIHN0cmlkZVdpZHRoLCBmaWx0ZXJIZWlnaHQsIGZpbHRlcldpZHRofSA9IGNvbnZJbmZvO1xuXG4gIGNvbnN0IGRXID0gbmV3IFRlbnNvckJ1ZmZlcihjb252SW5mby5maWx0ZXJTaGFwZSwgJ2Zsb2F0MzInKTtcblxuICBjb25zdCBsZWZ0UGFkID0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICBjb25zdCB0b3BQYWQgPSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgY29uc3QgY2hNdWwgPSBjb252SW5mby5vdXRDaGFubmVscyAvIGNvbnZJbmZvLmluQ2hhbm5lbHM7XG5cbiAgY29uc3QgeFZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgeEJ1ZiA9IG5ldyBUZW5zb3JCdWZmZXIoeC5zaGFwZSwgeC5kdHlwZSwgeFZhbHMpO1xuICBjb25zdCBkeVZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGR5QnVmID0gbmV3IFRlbnNvckJ1ZmZlcihkeS5zaGFwZSwgZHkuZHR5cGUsIGR5VmFscyk7XG4gIGZvciAobGV0IHdSID0gMDsgd1IgPCBmaWx0ZXJIZWlnaHQ7ICsrd1IpIHtcbiAgICBjb25zdCB5Uk1pbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgodG9wUGFkIC0gd1IpIC8gc3RyaWRlSGVpZ2h0KSk7XG4gICAgY29uc3QgeVJNYXggPSBNYXRoLm1pbihcbiAgICAgICAgY29udkluZm8ub3V0SGVpZ2h0LCAoY29udkluZm8uaW5IZWlnaHQgKyB0b3BQYWQgLSB3UikgLyBzdHJpZGVIZWlnaHQpO1xuXG4gICAgZm9yIChsZXQgd0MgPSAwOyB3QyA8IGZpbHRlcldpZHRoOyArK3dDKSB7XG4gICAgICBjb25zdCB5Q01pbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgobGVmdFBhZCAtIHdDKSAvIHN0cmlkZVdpZHRoKSk7XG4gICAgICBjb25zdCB5Q01heCA9IE1hdGgubWluKFxuICAgICAgICAgIGNvbnZJbmZvLm91dFdpZHRoLCAoY29udkluZm8uaW5XaWR0aCArIGxlZnRQYWQgLSB3QykgLyBzdHJpZGVXaWR0aCk7XG5cbiAgICAgIGZvciAobGV0IGQyID0gMDsgZDIgPCBjb252SW5mby5vdXRDaGFubmVsczsgKytkMikge1xuICAgICAgICBjb25zdCBkMSA9IE1hdGgudHJ1bmMoZDIgLyBjaE11bCk7XG4gICAgICAgIGNvbnN0IGRtID0gZDIgJSBjaE11bDtcblxuICAgICAgICBsZXQgZG90UHJvZCA9IDA7XG4gICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgY29udkluZm8uYmF0Y2hTaXplOyArK2IpIHtcbiAgICAgICAgICBmb3IgKGxldCB5UiA9IHlSTWluOyB5UiA8IHlSTWF4OyArK3lSKSB7XG4gICAgICAgICAgICBjb25zdCB4UiA9IHdSICsgeVIgKiBzdHJpZGVIZWlnaHQgLSB0b3BQYWQ7XG4gICAgICAgICAgICBmb3IgKGxldCB5QyA9IHlDTWluOyB5QyA8IHlDTWF4OyArK3lDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHhDID0gd0MgKyB5QyAqIHN0cmlkZVdpZHRoIC0gbGVmdFBhZDtcbiAgICAgICAgICAgICAgZG90UHJvZCArPSAoeEJ1Zi5nZXQoYiwgeFIsIHhDLCBkMSkgYXMgbnVtYmVyKSAqXG4gICAgICAgICAgICAgICAgICAoZHlCdWYuZ2V0KGIsIHlSLCB5QywgZDIpIGFzIG51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRXLnNldChkb3RQcm9kLCB3Uiwgd0MsIGQxLCBkbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oZFcuc2hhcGUsIGRXLmR0eXBlLCBkVy52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BGaWx0ZXIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, DepthwiseConv2dNativeBackpropInput, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function depthwiseConv2dNativeBackpropInput(args) {\n const { inputs, backend, attrs } = args;\n const { dy, filter } = inputs;\n const { strides, dilations, pad, dimRoundingMode, inputShape } = attrs;\n assertNotComplex([dy, filter], 'depthwiseConv2DNativeBackpropInput');\n const dyStrides = util.computeStrides(dy.shape);\n const filterStrides = util.computeStrides(filter.shape);\n const convInfo = backend_util.computeConv2DInfo(inputShape, filter.shape, strides, dilations, pad, dimRoundingMode, true /* depthwise */);\n const dx = new TensorBuffer(convInfo.inShape, 'float32');\n const dxValues = dx.values;\n const [dxS0, dxS1, dxS2] = dx.strides;\n const dyValues = backend.data.get(dy.dataId).values;\n const [dyS0, dyS1, dyS2] = dyStrides;\n const fltValues = backend.data.get(filter.dataId).values;\n const [fltS0, fltS1, fltS2] = filterStrides;\n const { batchSize, filterHeight, filterWidth, inChannels, inHeight, inWidth, outChannels, outHeight, outWidth, strideHeight, strideWidth } = convInfo;\n const topPad = filterHeight - 1 - convInfo.padInfo.top;\n const leftPad = filterWidth - 1 - convInfo.padInfo.left;\n const chMul = outChannels / inChannels;\n for (let b = 0; b < batchSize; ++b) {\n for (let d1 = 0; d1 < inChannels; ++d1) {\n for (let xR = 0; xR < inHeight; ++xR) {\n const xRCorner = xR - topPad;\n const xRMin = Math.max(0, Math.ceil(xRCorner / strideHeight));\n const yRMax = Math.min(outHeight, (filterHeight + xRCorner) / strideHeight);\n for (let xC = 0; xC < inWidth; ++xC) {\n const xCCorner = xC - leftPad;\n const xCMin = Math.max(0, Math.ceil(xCCorner / strideWidth));\n const yCMax = Math.min(outWidth, (filterWidth + xCCorner) / strideWidth);\n let dotProd = 0;\n for (let yR = xRMin; yR < yRMax; ++yR) {\n const wR = yR * strideHeight - xRCorner;\n for (let yC = xCMin; yC < yCMax; ++yC) {\n const wC = yC * strideWidth - xCCorner;\n const dyOffset = dyS0 * b + dyS1 * yR + dyS2 * yC;\n const fltOffset = fltS0 * (filterHeight - 1 - wR) +\n fltS1 * (filterWidth - 1 - wC) + fltS2 * d1;\n for (let dm = 0; dm < chMul; ++dm) {\n const d2 = d1 * chMul + dm;\n const pixel = dyValues[dyOffset + d2];\n const weight = fltValues[fltOffset + dm];\n dotProd += pixel * weight;\n }\n }\n }\n dxValues[dxS0 * b + dxS1 * xR + dxS2 * xC + d1] = dotProd;\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const depthwiseConv2dNativeBackpropInputConfig = {\n kernelName: DepthwiseConv2dNativeBackpropInput,\n backendName: 'cpu',\n kernelFunc: depthwiseConv2dNativeBackpropInput\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLGtDQUFrQyxFQUErRyxZQUFZLEVBQTBCLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2hQLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsa0NBQWtDLENBQUMsSUFJbEQ7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUIsTUFBTSxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztJQUVyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQzNDLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBeUMsRUFBRSxPQUFPLEVBQ3JFLFNBQVMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMs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MkQ7Q0FDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQsIERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXRBdHRycywgRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JCdWZmZXIsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dChhcmdzOiB7XG4gIGlucHV0czogRGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0QXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBmaWx0ZXJ9ID0gaW5wdXRzO1xuICBjb25zdCB7c3RyaWRlcywgZGlsYXRpb25zLCBwYWQsIGRpbVJvdW5kaW5nTW9kZSwgaW5wdXRTaGFwZX0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KFtkeSwgZmlsdGVyXSwgJ2RlcHRod2lzZUNvbnYyRE5hdGl2ZUJhY2twcm9wSW5wdXQnKTtcblxuICBjb25zdCBkeVN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGR5LnNoYXBlKTtcbiAgY29uc3QgZmlsdGVyU3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoZmlsdGVyLnNoYXBlKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlQ29udjJESW5mbyhcbiAgICAgIGlucHV0U2hhcGUsIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcyxcbiAgICAgIGRpbGF0aW9ucywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIHRydWUgLyogZGVwdGh3aXNlICovKTtcblxuICBjb25zdCBkeCA9IG5ldyBUZW5zb3JCdWZmZXIoY29udkluZm8uaW5TaGFwZSwgJ2Zsb2F0MzInKTtcbiAgY29uc3QgZHhWYWx1ZXMgPSBkeC52YWx1ZXM7XG4gIGNvbnN0IFtkeFMwLCBkeFMxLCBkeFMyXSA9IGR4LnN0cmlkZXM7XG4gIGNvbnN0IGR5VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldChkeS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBbZHlTMCwgZHlTMSwgZHlTMl0gPSBkeVN0cmlkZXM7XG4gIGNvbnN0IGZsdFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoZmlsdGVyLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IFtmbHRTMCwgZmx0UzEsIGZsdFMyXSA9IGZpbHRlclN0cmlkZXM7XG4gIGNvbnN0IHtcbiAgICBiYXRjaFNpemUsXG4gICAgZmlsdGVySGVpZ2h0LFxuICAgIGZpbHRlcldpZHRoLFxuICAgIGluQ2hhbm5lbHMsXG4gICAgaW5IZWlnaHQsXG4gICAgaW5XaWR0aCxcbiAgICBvdXRDaGFubmVscyxcbiAgICBvdXRIZWlnaHQsXG4gICAgb3V0V2lkdGgsXG4gICAgc3RyaWRlSGVpZ2h0LFxuICAgIHN0cmlkZVdpZHRoXG4gIH0gPSBjb252SW5mbztcbiAgY29uc3QgdG9wUGFkID0gZmlsdGVySGVpZ2h0IC0gMSAtIGNvbnZJbmZvLnBhZEluZm8udG9wO1xuICBjb25zdCBsZWZ0UGFkID0gZmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICBjb25zdCBjaE11bCA9IG91dENoYW5uZWxzIC8gaW5DaGFubmVscztcblxuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoU2l6ZTsgKytiKSB7XG4gICAgZm9yIChsZXQgZDEgPSAwOyBkMSA8IGluQ2hhbm5lbHM7ICsrZDEpIHtcbiAgICAgIGZvciAobGV0IHhSID0gMDsgeFIgPCBpbkhlaWdodDsgKyt4Uikge1xuICAgICAgICBjb25zdCB4UkNvcm5lciA9IHhSIC0gdG9wUGFkO1xuICAgICAgICBjb25zdCB4Uk1pbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCh4UkNvcm5lciAvIHN0cmlkZUhlaWdodCkpO1xuICAgICAgICBjb25zdCB5Uk1heCA9XG4gICAgICAgICAgICBNYXRoLm1pbihvdXRIZWlnaHQsIChmaWx0ZXJIZWlnaHQgKyB4UkNvcm5lcikgLyBzdHJpZGVIZWlnaHQpO1xuXG4gICAgICAgIGZvciAobGV0IHhDID0gMDsgeEMgPCBpbldpZHRoOyArK3hDKSB7XG4gICAgICAgICAgY29uc3QgeENDb3JuZXIgPSB4QyAtIGxlZnRQYWQ7XG4gICAgICAgICAgY29uc3QgeENNaW4gPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwoeENDb3JuZXIgLyBzdHJpZGVXaWR0aCkpO1xuICAgICAgICAgIGNvbnN0IHlDTWF4ID1cbiAgICAgICAgICAgICAgTWF0aC5taW4ob3V0V2lkdGgsIChmaWx0ZXJXaWR0aCArIHhDQ29ybmVyKSAvIHN0cmlkZVdpZHRoKTtcblxuICAgICAgICAgIGxldCBkb3RQcm9kID0gMDtcbiAgICAgICAgICBmb3IgKGxldCB5UiA9IHhSTWluOyB5UiA8IHlSTWF4OyArK3lSKSB7XG4gICAgICAgICAgICBjb25zdCB3UiA9IHlSICogc3RyaWRlSGVpZ2h0IC0geFJDb3JuZXI7XG5cbiAgICAgICAgICAgIGZvciAobGV0IHlDID0geENNaW47IHlDIDwgeUNNYXg7ICsreUMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgd0MgPSB5QyAqIHN0cmlkZVdpZHRoIC0geENDb3JuZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGR5T2Zmc2V0ID0gZHlTMCAqIGIgKyBkeVMxICogeVIgKyBkeVMyICogeUM7XG4gICAgICAgICAgICAgIGNvbnN0IGZsdE9mZnNldCA9IGZsdFMwICogKGZpbHRlckhlaWdodCAtIDEgLSB3UikgK1xuICAgICAgICAgICAgICAgICAgZmx0UzEgKiAoZmlsdGVyV2lkdGggLSAxIC0gd0MpICsgZmx0UzIgKiBkMTtcblxuICAgICAgICAgICAgICBmb3IgKGxldCBkbSA9IDA7IGRtIDwgY2hNdWw7ICsrZG0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkMiA9IGQxICogY2hNdWwgKyBkbTtcbiAgICAgICAgICAgICAgICBjb25zdCBwaXhlbCA9IGR5VmFsdWVzW2R5T2Zmc2V0ICsgZDJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlaWdodCA9IGZsdFZhbHVlc1tmbHRPZmZzZXQgKyBkbV07XG4gICAgICAgICAgICAgICAgZG90UHJvZCArPSBwaXhlbCAqIHdlaWdodDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkeFZhbHVlc1tkeFMwICogYiArIGR4UzEgKiB4UiArIGR4UzIgKiB4QyArIGQxXSA9IGRvdFByb2Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhkeC5zaGFwZSwgZHguZHR5cGUsIGR4LnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcElucHV0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { buffer, Diag, util } from '@tensorflow/tfjs-core';\nexport function diag(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n const xSize = util.sizeFromShape(x.shape);\n const xVals = backend.data.get(x.dataId).values;\n const outBuf = buffer([xSize, xSize], x.dtype);\n const vals = outBuf.values;\n for (let i = 0; i < xVals.length; i++) {\n vals[i * xSize + i] = xVals[i];\n }\n const outShape = [...x.shape, ...x.shape];\n return backend.makeTensorInfo(outShape, outBuf.dtype, outBuf.values);\n}\nexport const diagConfig = {\n kernelName: Diag,\n backendName: 'cpu',\n kernelFunc: diag\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRGlhZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBZ0UsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkgsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFtRDtJQUV0RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzlELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEM7SUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxQyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2J1ZmZlciwgRGlhZywgRGlhZ0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWFnKGFyZ3M6IHtpbnB1dHM6IERpYWdJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGNvbnN0IHhTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IG91dEJ1ZiA9IGJ1ZmZlcihbeFNpemUsIHhTaXplXSwgeC5kdHlwZSk7XG4gIGNvbnN0IHZhbHMgPSBvdXRCdWYudmFsdWVzO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHhWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsc1tpICogeFNpemUgKyBpXSA9IHhWYWxzW2ldO1xuICB9XG5cbiAgY29uc3Qgb3V0U2hhcGUgPSBbLi4ueC5zaGFwZSwgLi4ueC5zaGFwZV07XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsIG91dEJ1Zi5kdHlwZSwgb3V0QnVmLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBkaWFnQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERpYWcsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZGlhZyBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2D, util } from '@tensorflow/tfjs-core';\nexport const dilation2DConfig = {\n kernelName: Dilation2D,\n backendName: 'cpu',\n kernelFunc: ({ inputs, backend, attrs }) => {\n const { x, filter } = inputs;\n const { strides, pad, dilations } = attrs;\n const cpuBackend = backend;\n const xVals = cpuBackend.data.get(x.dataId).values;\n const xRank = x.shape.length;\n const filterVals = cpuBackend.data.get(filter.dataId).values;\n const filterRank = filter.shape.length;\n const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, 'NHWC' /* dataFormat */, dilations);\n const outSize = util.sizeFromShape(outShape);\n const outRank = outShape.length;\n const outputVals = util.getArrayFromDType(x.dtype, outSize);\n // Upsampling the input by fill in `dilation size - 1` values between each\n // input value.\n // This implementation follows the TF c++ implementation:\n // https://github.com/tensorflow/tensorflow/blob/d9a3a849edc198e90172bc58eb293de457f9d986/tensorflow/core/kernels/dilation_ops.cc\n for (let b = 0; b < batchSize; ++b) {\n for (let hOut = 0; hOut < outHeight; ++hOut) {\n const hBeg = hOut * strideHeight - padInfo.top;\n for (let wOut = 0; wOut < outWidth; ++wOut) {\n const wBeg = wOut * strideWidth - padInfo.left;\n for (let d = 0; d < inChannels; ++d) {\n let curVal = Number.MIN_SAFE_INTEGER;\n for (let h = 0; h < filterHeight; ++h) {\n const hIn = hBeg + h * dilationHeight;\n if (hIn >= 0 && hIn < inHeight) {\n for (let w = 0; w < filterWidth; ++w) {\n const wIn = wBeg + w * dilationWidth;\n if (wIn >= 0 && wIn < inWidth) {\n const xIndex = util.locToIndex([b, hIn, wIn, d], xRank, util.computeStrides(x.shape));\n const filterIndex = util.locToIndex([h, w, d], filterRank, util.computeStrides(filter.shape));\n const val = xVals[xIndex] + filterVals[filterIndex];\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n const outputIndex = util.locToIndex([b, hOut, wOut, d], outRank, util.computeStrides(outShape));\n outputVals[outputIndex] = curVal;\n }\n }\n }\n }\n const dataId = cpuBackend.write(util.toTypedArray(outputVals, x.dtype), outShape, x.dtype);\n return { dataId, shape: outShape, dtype: x.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yRC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRGlsYXRpb24yRC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBK0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJbEksTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBMEIsQ0FBQztRQUMvQyxNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFtQyxDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLE9BQXlCLENBQUM7UUFFN0MsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFN0IsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFdkMsTUFBTSxFQUNKLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxZQUFZLEVBQ1osV0FB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LENBQUMsQ0FBQyxDQUFDO3dCQUNoRSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO3FCQUNsQztpQkFDRjthQUNGO1NBQ0Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERpbGF0aW9uMkQsIERpbGF0aW9uMkRBdHRycywgRGlsYXRpb24yRElucHV0cywgS2VybmVsQ29uZmlnLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBjb25zdCBkaWxhdGlvbjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IERpbGF0aW9uMkQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogKHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSkgPT4ge1xuICAgIGNvbnN0IHt4LCBmaWx0ZXJ9ID0gaW5wdXRzIGFzIERpbGF0aW9uMkRJbnB1dHM7XG4gICAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGlsYXRpb25zfSA9IGF0dHJzIGFzIHVua25vd24gYXMgRGlsYXRpb24yREF0dHJzO1xuICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kQ1BVO1xuXG4gICAgY29uc3QgeFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuXG4gICAgY29uc3QgZmlsdGVyVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoZmlsdGVyLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gICAgY29uc3QgZmlsdGVyUmFuayA9IGZpbHRlci5zaGFwZS5sZW5ndGg7XG5cbiAgICBjb25zdCB7XG4gICAgICBiYXRjaFNpemUsXG4gICAgICBpbkhlaWdodCxcbiAgICAgIGluV2lkdGgsXG4gICAgICBpbkNoYW5uZWxzLFxuICAgICAgb3V0SGVpZ2h0LFxuICAgICAgb3V0V2lkdGgsXG4gICAgICBwYWRJbmZvLFxuICAgICAgc3RyaWRlSGVpZ2h0LFxuICAgICAgc3RyaWRlV2lkdGgsXG4gICAgICBmaWx0ZXJIZWlnaHQsXG4gICAgICBmaWx0ZXJXaWR0aCxcbiAgICAgIGRpbGF0aW9uSGVpZ2h0LFxuICAgICAgZGlsYXRpb25XaWR0aCxcbiAgICAgIG91dFNoYXBlXG4gICAgfSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlRGlsYXRpb24yREluZm8oXG4gICAgICAgICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcywgcGFkLFxuICAgICAgICAgICAgJ05IV0MnIC8qIGRhdGFGb3JtYXQgKi8sIGRpbGF0aW9ucyk7XG5cbiAgICBjb25zdCBvdXRTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dFNoYXBlKTtcbiAgICBjb25zdCBvdXRSYW5rID0gb3V0U2hhcGUubGVuZ3RoO1xuICAgIGNvbnN0IG91dHB1dFZhbHMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKHguZHR5cGUsIG91dFNpemUpO1xuXG4gICAgLy8gVXBzYW1wbGluZyB0aGUgaW5wdXQgYnkgZmlsbCBpbiBgZGlsYXRpb24gc2l6ZSAtIDFgIHZhbHVlcyBiZXR3ZWVuIGVhY2hcbiAgICAvLyBpbnB1dCB2YWx1ZS5cbiAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIFRGIGMrKyBpbXBsZW1lbnRhdGlvbjpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3JmbG93L2Jsb2IvZDlhM2E4NDllZGMxOThlOTAxNzJiYzU4ZWIyOTNkZTQ1N2Y5ZDk4Ni90ZW5zb3JmbG93L2NvcmUva2VybmVscy9kaWxhdGlvbl9vcHMuY2NcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoU2l6ZTsgKytiKSB7XG4gICAgICBmb3IgKGxldCBoT3V0ID0gMDsgaE91dCA8IG91dEhlaWdodDsgKytoT3V0KSB7XG4gICAgICAgIGNvbnN0IGhCZWcgPSBoT3V0ICogc3RyaWRlSGVpZ2h0IC0gcGFkSW5mby50b3A7XG4gICAgICAgIGZvciAobGV0IHdPdXQgPSAwOyB3T3V0IDwgb3V0V2lkdGg7ICsrd091dCkge1xuICAgICAgICAgIGNvbnN0IHdCZWcgPSB3T3V0ICogc3RyaWRlV2lkdGggLSBwYWRJbmZvLmxlZnQ7XG4gICAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBpbkNoYW5uZWxzOyArK2QpIHtcbiAgICAgICAgICAgIGxldCBjdXJWYWwgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgICAgICAgICAgIGZvciAobGV0IGggPSAwOyBoIDwgZmlsdGVySGVpZ2h0OyArK2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgaEluID0gaEJlZyArIGggKiBkaWxhdGlvbkhlaWdodDtcbiAgICAgICAgICAgICAgaWYgKGhJbiA+PSAwICYmIGhJbiA8IGluSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdyA9IDA7IHcgPCBmaWx0ZXJXaWR0aDsgKyt3KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB3SW4gPSB3QmVnICsgdyAqIGRpbGF0aW9uV2lkdGg7XG4gICAgICAgICAgICAgICAgICBpZiAod0luID49IDAgJiYgd0luIDwgaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4SW5kZXggPSB1dGlsLmxvY1RvSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgICBbYiwgaEluLCB3SW4sIGRdLCB4UmFuaywgdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckluZGV4ID0gdXRpbC5sb2NUb0luZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgW2gsIHcsIGRdLCBmaWx0ZXJSYW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wdXRlU3RyaWRlcyhmaWx0ZXIuc2hhcGUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0geFZhbHNbeEluZGV4XSArIGZpbHRlclZhbHNbZmlsdGVySW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4gY3VyVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY3VyVmFsID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IHV0aWwubG9jVG9JbmRleChcbiAgICAgICAgICAgICAgICBbYiwgaE91dCwgd091dCwgZF0sIG91dFJhbmssIHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0U2hhcGUpKTtcbiAgICAgICAgICAgIG91dHB1dFZhbHNbb3V0cHV0SW5kZXhdID0gY3VyVmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFJZCA9IGNwdUJhY2tlbmQud3JpdGUoXG4gICAgICAgIHV0aWwudG9UeXBlZEFycmF5KG91dHB1dFZhbHMsIHguZHR5cGUpLCBvdXRTaGFwZSwgeC5kdHlwZSk7XG5cbiAgICByZXR1cm4ge2RhdGFJZCwgc2hhcGU6IG91dFNoYXBlLCBkdHlwZTogeC5kdHlwZX07XG4gIH1cbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2DBackpropFilter, util } from '@tensorflow/tfjs-core';\nexport const dilation2DBackpropFilterConfig = {\n kernelName: Dilation2DBackpropFilter,\n backendName: 'cpu',\n kernelFunc: ({ inputs, backend, attrs }) => {\n const { x, filter, dy } = inputs;\n const { strides, pad, dilations } = attrs;\n const cpuBackend = backend;\n const $x = util.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values);\n const $filter = util.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values);\n const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, 'NHWC' /* dataFormat */, dilations);\n util.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropFilter}, dy ` +\n `must have the same rank as output ${outShape.length}, but got ` +\n `${dy.rank}`);\n const $dy = util.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values);\n // The computed filter gradients has the same dimensions as the filter:\n // [filterHeight, filterWidth, depth]\n const gradients = util.makeZerosNestedTypedArray(filter.shape, filter.dtype);\n // In the case of multiple argmax branches, we only back-propagate along the\n // last branch, i.e., the one with largest value of `h * filter_cols + w`,\n // similarly to the max-pooling backward routines.\n // This implementation follows the TF c++ implementation:\n // https://github.com/tensorflow/tensorflow/blob/d9a3a849edc198e90172bc58eb293de457f9d986/tensorflow/core/kernels/dilation_ops.cc\n for (let b = 0; b < batchSize; ++b) {\n for (let hOut = 0; hOut < outHeight; ++hOut) {\n const hBeg = hOut * strideHeight - padInfo.top;\n for (let wOut = 0; wOut < outWidth; ++wOut) {\n const wBeg = wOut * strideWidth - padInfo.left;\n for (let d = 0; d < inChannels; ++d) {\n let curVal = Number.MIN_SAFE_INTEGER;\n let hMax = 0;\n let wMax = 0;\n for (let h = 0; h < filterHeight; ++h) {\n const hIn = hBeg + h * dilationHeight;\n if (hIn >= 0 && hIn < inHeight) {\n for (let w = 0; w < filterWidth; ++w) {\n const wIn = wBeg + w * dilationWidth;\n if (wIn >= 0 && wIn < inWidth) {\n const val = $x[b][hIn][wIn][d] + $filter[h][w][d];\n if (val > curVal) {\n curVal = val;\n hMax = h;\n wMax = w;\n }\n }\n }\n }\n }\n gradients[hMax][wMax][d] += $dy[b][hOut][wOut][d];\n }\n }\n }\n }\n const dataId = cpuBackend.write(util.toTypedArray(gradients, x.dtype), filter.shape, filter.dtype);\n return { dataId, shape: filter.shape, dtype: filter.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yREJhY2twcm9wRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9EaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBbUIsd0JBQXdCLEVBQWtDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBS3BJLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFpQjtJQUMxRCxVQUFVLEVBQUUsd0JBQXdCO0lBQ3BDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUNqQixNQUF1RCxDQUFDO1FBQzVELE1BQU0sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxHQUFHLEtBQW1DLENBQUM7UUFDdEUsTUFBTSxVQUFVLEdBQUcsT0FBeUIsQ0FBQztRQUU3QyxNQUFNLEVBQUUsR0FDSixJQUFJLENBQUMsYUFBYSxDQUNkLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQ2pELENBQUM7UUFFbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FDZCxNQUFNLENBQUMsS0FBSyxFQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUNyQixDQUFpQixDQUFDO1FBRXBELE1BQU0sRUFDSixTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEVBQ1YsU0FBUyxFQUNU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Q1QsSUFBSSxHQUFHLENBQUMsQ0FBQzt5Q0FDVjtxQ0FDRjtpQ0FDRjs2QkFDRjt5QkFDRjt3QkFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNuRDtpQkFDRjthQUNGO1NBQ0Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkUsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBQyxDQUFDO0lBQzVELENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgRGlsYXRpb24yREF0dHJzLCBEaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXIsIFRlbnNvcjNELCBUZW5zb3I0RCwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBjb25zdCBkaWxhdGlvbjJEQmFja3Byb3BGaWx0ZXJDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGlsYXRpb24yREJhY2twcm9wRmlsdGVyLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6ICh7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30pID0+IHtcbiAgICBjb25zdCB7eCwgZmlsdGVyLCBkeX0gPVxuICAgICAgICBpbnB1dHMgYXMge3g6IFRlbnNvcjRELCBmaWx0ZXI6IFRlbnNvcjNELCBkeTogVGVuc29yNER9O1xuICAgIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRpbGF0aW9uc30gPSBhdHRycyBhcyB1bmtub3duIGFzIERpbGF0aW9uMkRBdHRycztcbiAgICBjb25zdCBjcHVCYWNrZW5kID0gYmFja2VuZCBhcyBNYXRoQmFja2VuZENQVTtcblxuICAgIGNvbnN0ICR4ID1cbiAgICAgICAgdXRpbC50b05lc3RlZEFycmF5KFxuICAgICAgICAgICAgeC5zaGFwZSwgY3B1QmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXkpIGFzXG4gICAgICAgIG51bWJlcltdW11bXVtdO1xuXG4gICAgY29uc3QgJGZpbHRlciA9IHV0aWwudG9OZXN0ZWRBcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoZmlsdGVyLmRhdGFJZCkudmFsdWVzIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZWRBcnJheSkgYXMgbnVtYmVyW11bXVtdO1xuXG4gICAgY29uc3Qge1xuICAgICAgYmF0Y2hTaXplLFxuICAgICAgaW5IZWlnaHQsXG4gICAgICBpbldpZHRoLFxuICAgICAgaW5DaGFubmVscyxcbiAgICAgIG91dEhlaWdodCxcbiAgICAgIG91dFdpZHRoLFxuICAgICAgcGFkSW5mbyxcbiAgICAgIHN0cmlkZUhlaWdodCxcbiAgICAgIHN0cmlkZVdpZHRoLFxuICAgICAgZmlsdGVySGVpZ2h0LFxuICAgICAgZmlsdGVyV2lkdGgsXG4gICAgICBkaWxhdGlvbkhlaWdodCxcbiAgICAgIGRpbGF0aW9uV2lkdGgsXG4gICAgICBvdXRTaGFwZVxuICAgIH0gPVxuICAgICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZURpbGF0aW9uMkRJbmZvKFxuICAgICAgICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsIHBhZCxcbiAgICAgICAgICAgICdOSFdDJyAvKiBkYXRhRm9ybWF0ICovLCBkaWxhdGlvbnMpO1xuXG4gICAgdXRpbC5hc3NlcnQoXG4gICAgICAgIGR5LnJhbmsgPT09IG91dFNoYXBlLmxlbmd0aCxcbiAgICAgICAgKCkgPT4gYEVycm9yIGluICR7RGlsYXRpb24yREJhY2twcm9wRmlsdGVyfSwgZHkgYCArXG4gICAgICAgICAgICBgbXVzdCBoYXZlIHRoZSBzYW1lIHJhbmsgYXMgb3V0cHV0ICR7b3V0U2hhcGUubGVuZ3RofSwgYnV0IGdvdCBgICtcbiAgICAgICAgICAgIGAke2R5LnJhbmt9YCk7XG5cbiAgICBjb25zdCAkZHkgPVxuICAgICAgICB1dGlsLnRvTmVzdGVkQXJyYXkoXG4gICAgICAgICAgICBvdXRTaGFwZSwgY3B1QmFja2VuZC5kYXRhLmdldChkeS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5KSBhc1xuICAgICAgICBudW1iZXJbXVtdW11bXTtcblxuICAgIC8vIFRoZSBjb21wdXRlZCBmaWx0ZXIgZ3JhZGllbnRzIGhhcyB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHRoZSBmaWx0ZXI6XG4gICAgLy8gW2ZpbHRlckhlaWdodCwgZmlsdGVyV2lkdGgsIGRlcHRoXVxuICAgIGNvbnN0IGdyYWRpZW50cyA9IHV0aWwubWFrZVplcm9zTmVzdGVkVHlwZWRBcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnNoYXBlLCBmaWx0ZXIuZHR5cGUpIGFzIG51bWJlcltdW11bXTtcblxuICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxlIGFyZ21heCBicmFuY2hlcywgd2Ugb25seSBiYWNrLXByb3BhZ2F0ZSBhbG9uZyB0aGVcbiAgICAvLyBsYXN0IGJyYW5jaCwgaS5lLiwgdGhlIG9uZSB3aXRoIGxhcmdlc3QgdmFsdWUgb2YgYGggKiBmaWx0ZXJfY29scyArIHdgLFxuICAgIC8vIHNpbWlsYXJseSB0byB0aGUgbWF4LXBvb2xpbmcgYmFja3dhcmQgcm91dGluZXMuXG4gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBmb2xsb3dzIHRoZSBURiBjKysgaW1wbGVtZW50YXRpb246XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yZmxvdy9ibG9iL2Q5YTNhODQ5ZWRjMTk4ZTkwMTcyYmM1OGViMjkzZGU0NTdmOWQ5ODYvdGVuc29yZmxvdy9jb3JlL2tlcm5lbHMvZGlsYXRpb25fb3BzLmNjXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaFNpemU7ICsrYikge1xuICAgICAgZm9yIChsZXQgaE91dCA9IDA7IGhPdXQgPCBvdXRIZWlnaHQ7ICsraE91dCkge1xuICAgICAgICBjb25zdCBoQmVnID0gaE91dCAqIHN0cmlkZUhlaWdodCAtIHBhZEluZm8udG9wO1xuICAgICAgICBmb3IgKGxldCB3T3V0ID0gMDsgd091dCA8IG91dFdpZHRoOyArK3dPdXQpIHtcbiAgICAgICAgICBjb25zdCB3QmVnID0gd091dCAqIHN0cmlkZVdpZHRoIC0gcGFkSW5mby5sZWZ0O1xuICAgICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgaW5DaGFubmVsczsgKytkKSB7XG4gICAgICAgICAgICBsZXQgY3VyVmFsID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgICBsZXQgaE1heCA9IDA7XG4gICAgICAgICAgICBsZXQgd01heCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBoID0gMDsgaCA8IGZpbHRlckhlaWdodDsgKytoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhJbiA9IGhCZWcgKyBoICogZGlsYXRpb25IZWlnaHQ7XG4gICAgICAgICAgICAgIGlmIChoSW4gPj0gMCAmJiBoSW4gPCBpbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHcgPSAwOyB3IDwgZmlsdGVyV2lkdGg7ICsrdykge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgd0luID0gd0JlZyArIHcgKiBkaWxhdGlvbldpZHRoO1xuICAgICAgICAgICAgICAgICAgaWYgKHdJbiA+PSAwICYmIHdJbiA8IGluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gJHhbYl1baEluXVt3SW5dW2RdICsgJGZpbHRlcltoXVt3XVtkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA+IGN1clZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGN1clZhbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICBoTWF4ID0gaDtcbiAgICAgICAgICAgICAgICAgICAgICB3TWF4ID0gdztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhZGllbnRzW2hNYXhdW3dNYXhdW2RdICs9ICRkeVtiXVtoT3V0XVt3T3V0XVtkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhSWQgPSBjcHVCYWNrZW5kLndyaXRlKFxuICAgICAgICB1dGlsLnRvVHlwZWRBcnJheShncmFkaWVudHMsIHguZHR5cGUpLCBmaWx0ZXIuc2hhcGUsIGZpbHRlci5kdHlwZSk7XG5cbiAgICByZXR1cm4ge2RhdGFJZCwgc2hhcGU6IGZpbHRlci5zaGFwZSwgZHR5cGU6IGZpbHRlci5kdHlwZX07XG4gIH1cbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Dilation2DBackpropInput, util } from '@tensorflow/tfjs-core';\nexport const dilation2DBackpropInputConfig = {\n kernelName: Dilation2DBackpropInput,\n backendName: 'cpu',\n kernelFunc: ({ inputs, backend, attrs }) => {\n const { x, filter, dy } = inputs;\n const { strides, pad, dilations } = attrs;\n const cpuBackend = backend;\n const $x = util.toNestedArray(x.shape, cpuBackend.data.get(x.dataId).values);\n const $filter = util.toNestedArray(filter.shape, cpuBackend.data.get(filter.dataId).values);\n const { batchSize, inHeight, inWidth, inChannels, outHeight, outWidth, padInfo, strideHeight, strideWidth, filterHeight, filterWidth, dilationHeight, dilationWidth, outShape } = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, 'NHWC' /* dataFormat */, dilations);\n util.assert(dy.rank === outShape.length, () => `Error in ${Dilation2DBackpropInput}, dy ` +\n `must have the same rank as output ${outShape.length}, but got ` +\n `${dy.rank}`);\n const $dy = util.toNestedArray(outShape, cpuBackend.data.get(dy.dataId).values);\n // The computed gradients has the same dimensions as the input:\n // [batch, inputHeight, inputCols, inChannel]\n const gradients = util.makeZerosNestedTypedArray(x.shape, x.dtype);\n // In the case of multiple argmax branches, we only back-propagate along the\n // last branch, i.e., the one with largest value of `h * filter_cols + w`,\n // similarly to the max-pooling backward routines.\n // This implementation follows the TF c++ implementation:\n // https://github.com/tensorflow/tensorflow/blob/d9a3a849edc198e90172bc58eb293de457f9d986/tensorflow/core/kernels/dilation_ops.cc\n for (let b = 0; b < batchSize; ++b) {\n for (let hOut = 0; hOut < outHeight; ++hOut) {\n const hBeg = hOut * strideHeight - padInfo.top;\n for (let wOut = 0; wOut < outWidth; ++wOut) {\n const wBeg = wOut * strideWidth - padInfo.left;\n for (let d = 0; d < inChannels; ++d) {\n let curVal = Number.MIN_SAFE_INTEGER;\n let hInMax = (hBeg < 0) ? 0 : hBeg;\n let wInMax = (wBeg < 0) ? 0 : wBeg;\n for (let h = 0; h < filterHeight; ++h) {\n const hIn = hBeg + h * dilationHeight;\n if (hIn >= 0 && hIn < inHeight) {\n for (let w = 0; w < filterWidth; ++w) {\n const wIn = wBeg + w * dilationWidth;\n if (wIn >= 0 && wIn < inWidth) {\n const val = $x[b][hIn][wIn][d] + $filter[h][w][d];\n if (val > curVal) {\n curVal = val;\n hInMax = hIn;\n wInMax = wIn;\n }\n }\n }\n }\n }\n gradients[b][hInMax][wInMax][d] += $dy[b][hOut][wOut][d];\n }\n }\n }\n }\n const dataId = cpuBackend.write(util.toTypedArray(gradients, x.dtype), x.shape, x.dtype);\n return { dataId, shape: x.shape, dtype: x.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yREJhY2twcm9wSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0RpbGF0aW9uMkRCYWNrcHJvcElucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQW1CLHVCQUF1QixFQUFrQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUtuSSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBaUI7SUFDekQsVUFBVSxFQUFFLHVCQUF1QjtJQUNuQyxXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUMsR0FDakIsTUFBdUQsQ0FBQztRQUM1RCxNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFtQyxDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLE9BQXlCLENBQUM7UUFFN0MsTUFBTSxFQUFFLEdBQ0osSUFBSSxDQUFDLGFBQWEsQ0FDZCxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUNqRCxDQUFDO1FBRW5CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQ2QsTUFBTSxDQUFDLEtBQUssRUFDWixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFDckIsQ0FBaUIsQ0FBQztRQUVwRCxNQUFNLEVBQ0osU0FBUyxFQUNULFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsRUFDVCxR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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUNsRCxJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUU7NENBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUM7NENBQ2IsTUFBTSxHQUFHLEdBQUcsQ0FBQzs0Q0FDYixNQUFNLEdBQUcsR0FBRyxDQUFDO3lDQUNkO3FDQUNGO2lDQUNGOzZCQUNGO3lCQUNGO3dCQUNELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFEO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3RCxPQUFPLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEaWxhdGlvbjJEQXR0cnMsIERpbGF0aW9uMkRCYWNrcHJvcElucHV0LCBUZW5zb3IzRCwgVGVuc29yNEQsIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge0tlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgY29uc3QgZGlsYXRpb24yREJhY2twcm9wSW5wdXRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRGlsYXRpb24yREJhY2twcm9wSW5wdXQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogKHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSkgPT4ge1xuICAgIGNvbnN0IHt4LCBmaWx0ZXIsIGR5fSA9XG4gICAgICAgIGlucHV0cyBhcyB7eDogVGVuc29yNEQsIGZpbHRlcjogVGVuc29yM0QsIGR5OiBUZW5zb3I0RH07XG4gICAgY29uc3Qge3N0cmlkZXMsIHBhZCwgZGlsYXRpb25zfSA9IGF0dHJzIGFzIHVua25vd24gYXMgRGlsYXRpb24yREF0dHJzO1xuICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kQ1BVO1xuXG4gICAgY29uc3QgJHggPVxuICAgICAgICB1dGlsLnRvTmVzdGVkQXJyYXkoXG4gICAgICAgICAgICB4LnNoYXBlLCBjcHVCYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheSkgYXNcbiAgICAgICAgbnVtYmVyW11bXVtdW107XG5cbiAgICBjb25zdCAkZmlsdGVyID0gdXRpbC50b05lc3RlZEFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnNoYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChmaWx0ZXIuZGF0YUlkKS52YWx1ZXMgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlZEFycmF5KSBhcyBudW1iZXJbXVtdW107XG5cbiAgICBjb25zdCB7XG4gICAgICBiYXRjaFNpemUsXG4gICAgICBpbkhlaWdodCxcbiAgICAgIGluV2lkdGgsXG4gICAgICBpbkNoYW5uZWxzLFxuICAgICAgb3V0SGVpZ2h0LFxuICAgICAgb3V0V2lkdGgsXG4gICAgICBwYWRJbmZvLFxuICAgICAgc3RyaWRlSGVpZ2h0LFxuICAgICAgc3RyaWRlV2lkdGgsXG4gICAgICBmaWx0ZXJIZWlnaHQsXG4gICAgICBmaWx0ZXJXaWR0aCxcbiAgICAgIGRpbGF0aW9uSGVpZ2h0LFxuICAgICAgZGlsYXRpb25XaWR0aCxcbiAgICAgIG91dFNoYXBlXG4gICAgfSA9XG4gICAgICAgIGJhY2tlbmRfdXRpbC5jb21wdXRlRGlsYXRpb24yREluZm8oXG4gICAgICAgICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgZmlsdGVyLnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgc3RyaWRlcywgcGFkLFxuICAgICAgICAgICAgJ05IV0MnIC8qIGRhdGFGb3JtYXQgKi8sIGRpbGF0aW9ucyk7XG5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgZHkucmFuayA9PT0gb3V0U2hhcGUubGVuZ3RoLFxuICAgICAgICAoKSA9PiBgRXJyb3IgaW4gJHtEaWxhdGlvbjJEQmFja3Byb3BJbnB1dH0sIGR5IGAgK1xuICAgICAgICAgICAgYG11c3QgaGF2ZSB0aGUgc2FtZSByYW5rIGFzIG91dHB1dCAke291dFNoYXBlLmxlbmd0aH0sIGJ1dCBnb3QgYCArXG4gICAgICAgICAgICBgJHtkeS5yYW5rfWApO1xuXG4gICAgY29uc3QgJGR5ID1cbiAgICAgICAgdXRpbC50b05lc3RlZEFycmF5KFxuICAgICAgICAgICAgb3V0U2hhcGUsIGNwdUJhY2tlbmQuZGF0YS5nZXQoZHkuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheSkgYXNcbiAgICAgICAgbnVtYmVyW11bXVtdW107XG5cbiAgICAvLyBUaGUgY29tcHV0ZWQgZ3JhZGllbnRzIGhhcyB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHRoZSBpbnB1dDpcbiAgICAvLyBbYmF0Y2gsIGlucHV0SGVpZ2h0LCBpbnB1dENvbHMsIGluQ2hhbm5lbF1cbiAgICBjb25zdCBncmFkaWVudHMgPVxuICAgICAgICB1dGlsLm1ha2VaZXJvc05lc3RlZFR5cGVkQXJyYXkoeC5zaGFwZSwgeC5kdHlwZSkgYXMgbnVtYmVyW11bXVtdW107XG5cbiAgICAvLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBhcmdtYXggYnJhbmNoZXMsIHdlIG9ubHkgYmFjay1wcm9wYWdhdGUgYWxvbmcgdGhlXG4gICAgLy8gbGFzdCBicmFuY2gsIGkuZS4sIHRoZSBvbmUgd2l0aCBsYXJnZXN0IHZhbHVlIG9mIGBoICogZmlsdGVyX2NvbHMgKyB3YCxcbiAgICAvLyBzaW1pbGFybHkgdG8gdGhlIG1heC1wb29saW5nIGJhY2t3YXJkIHJvdXRpbmVzLlxuICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgVEYgYysrIGltcGxlbWVudGF0aW9uOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi9kOWEzYTg0OWVkYzE5OGU5MDE3MmJjNThlYjI5M2RlNDU3ZjlkOTg2L3RlbnNvcmZsb3cvY29yZS9rZXJuZWxzL2RpbGF0aW9uX29wcy5jY1xuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYmF0Y2hTaXplOyArK2IpIHtcbiAgICAgIGZvciAobGV0IGhPdXQgPSAwOyBoT3V0IDwgb3V0SGVpZ2h0OyArK2hPdXQpIHtcbiAgICAgICAgY29uc3QgaEJlZyA9IGhPdXQgKiBzdHJpZGVIZWlnaHQgLSBwYWRJbmZvLnRvcDtcbiAgICAgICAgZm9yIChsZXQgd091dCA9IDA7IHdPdXQgPCBvdXRXaWR0aDsgKyt3T3V0KSB7XG4gICAgICAgICAgY29uc3Qgd0JlZyA9IHdPdXQgKiBzdHJpZGVXaWR0aCAtIHBhZEluZm8ubGVmdDtcbiAgICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGluQ2hhbm5lbHM7ICsrZCkge1xuICAgICAgICAgICAgbGV0IGN1clZhbCA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgICAgICAgICAgbGV0IGhJbk1heCA9IChoQmVnIDwgMCkgPyAwIDogaEJlZztcbiAgICAgICAgICAgIGxldCB3SW5NYXggPSAod0JlZyA8IDApID8gMCA6IHdCZWc7XG4gICAgICAgICAgICBmb3IgKGxldCBoID0gMDsgaCA8IGZpbHRlckhlaWdodDsgKytoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhJbiA9IGhCZWcgKyBoICogZGlsYXRpb25IZWlnaHQ7XG4gICAgICAgICAgICAgIGlmIChoSW4gPj0gMCAmJiBoSW4gPCBpbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHcgPSAwOyB3IDwgZmlsdGVyV2lkdGg7ICsrdykge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgd0luID0gd0JlZyArIHcgKiBkaWxhdGlvbldpZHRoO1xuICAgICAgICAgICAgICAgICAgaWYgKHdJbiA+PSAwICYmIHdJbiA8IGluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gJHhbYl1baEluXVt3SW5dW2RdICsgJGZpbHRlcltoXVt3XVtkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA+IGN1clZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGN1clZhbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICBoSW5NYXggPSBoSW47XG4gICAgICAgICAgICAgICAgICAgICAgd0luTWF4ID0gd0luO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncmFkaWVudHNbYl1baEluTWF4XVt3SW5NYXhdW2RdICs9ICRkeVtiXVtoT3V0XVt3T3V0XVtkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhSWQgPSBjcHVCYWNrZW5kLndyaXRlKFxuICAgICAgICB1dGlsLnRvVHlwZWRBcnJheShncmFkaWVudHMsIHguZHR5cGUpLCB4LnNoYXBlLCB4LmR0eXBlKTtcblxuICAgIHJldHVybiB7ZGF0YUlkLCBzaGFwZTogeC5zaGFwZSwgZHR5cGU6IHguZHR5cGV9O1xuICB9XG59O1xuIl19","/**\n * @license\n * Copyright 2023 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Draw } from '@tensorflow/tfjs-core';\nexport function draw(args) {\n const { inputs, backend, attrs } = args;\n const { image } = inputs;\n const { canvas, options } = attrs;\n const { contextOptions, imageOptions } = options || {};\n const alpha = (imageOptions === null || imageOptions === void 0 ? void 0 : imageOptions.alpha) || 1;\n const contextType = (contextOptions === null || contextOptions === void 0 ? void 0 : contextOptions.contextType) || '2d';\n if (contextType !== '2d') {\n throw new Error(`Context type ${contextOptions.contextType} is not supported by the CPU backend.`);\n }\n const ctx = canvas.getContext(contextType, (contextOptions === null || contextOptions === void 0 ? void 0 : contextOptions.contextAttributes) || {});\n if (ctx == null) {\n throw new Error(`Could not get the context with ${contextType} type.`);\n }\n const [height, width] = image.shape.slice(0, 2);\n const depth = image.shape.length === 2 ? 1 : image.shape[2];\n const data = backend.data.get(image.dataId).values;\n const multiplier = image.dtype === 'float32' ? 255 : 1;\n const bytes = new Uint8ClampedArray(width * height * 4);\n for (let i = 0; i < height * width; ++i) {\n const rgba = [0, 0, 0, 255 * alpha];\n for (let d = 0; d < depth; d++) {\n const value = data[i * depth + d];\n if (image.dtype === 'float32') {\n if (value < 0 || value > 1) {\n throw new Error(`Tensor values for a float32 Tensor must be in the ` +\n `range [0 - 1] but encountered ${value}.`);\n }\n }\n else if (image.dtype === 'int32') {\n if (value < 0 || value > 255) {\n throw new Error(`Tensor values for a int32 Tensor must be in the ` +\n `range [0 - 255] but encountered ${value}.`);\n }\n }\n if (depth === 1) {\n rgba[0] = value * multiplier;\n rgba[1] = value * multiplier;\n rgba[2] = value * multiplier;\n }\n else {\n rgba[d] = value * multiplier;\n }\n }\n const j = i * 4;\n bytes[j + 0] = Math.round(rgba[0]);\n bytes[j + 1] = Math.round(rgba[1]);\n bytes[j + 2] = Math.round(rgba[2]);\n bytes[j + 3] = Math.round(rgba[3]);\n }\n canvas.width = width;\n canvas.height = height;\n const imageData = new ImageData(bytes, width, height);\n ctx.putImageData(imageData, 0, 0);\n return image;\n}\nexport const drawConfig = {\n kernelName: Draw,\n backendName: 'cpu',\n kernelFunc: draw\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUE4RCxNQUFNLHVCQUF1QixDQUFDO0FBS3hHLE1BQU0sVUFBVSxJQUFJLENBQ2hCLElBQXFFO0lBRXZFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLE1BQU0sRUFBQyxjQUFjLEVBQUUsWUFBWSxFQUFDLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxNQUFNLEtBQUssR0FBRyxDQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRyxLQUFLLEtBQUksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sV0FBVyxHQUFHLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFHLFdBQVcsS0FBSSxJQUFJLENBQUM7SUFDekQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQ1osY0FBYyxDQUFDLFdBQVcsdUNBQXVDLENBQUMsQ0FBQztLQUN4RTtJQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUN2QyxDQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxpQkFBaUIsS0FBSSxFQUFFLENBQTZCLENBQUU7SUFDeEUsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsV0FBVyxRQUFRLENBQUMs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RCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjMgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0RyYXcsIERyYXdBdHRycywgRHJhd0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3KFxuICAgIGFyZ3M6IHtpbnB1dHM6IERyYXdJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogRHJhd0F0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtjYW52YXMsIG9wdGlvbnN9ID0gYXR0cnM7XG4gIGNvbnN0IHtjb250ZXh0T3B0aW9ucywgaW1hZ2VPcHRpb25zfSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGFscGhhID0gaW1hZ2VPcHRpb25zID8uYWxwaGEgfHwgMTtcblxuICBjb25zdCBjb250ZXh0VHlwZSA9IGNvbnRleHRPcHRpb25zID8uY29udGV4dFR5cGUgfHwgJzJkJztcbiAgaWYgKGNvbnRleHRUeXBlICE9PSAnMmQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb250ZXh0IHR5cGUgJHtcbiAgICAgICAgY29udGV4dE9wdGlvbnMuY29udGV4dFR5cGV9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIENQVSBiYWNrZW5kLmApO1xuICB9XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KGNvbnRleHRUeXBlLFxuICAgIGNvbnRleHRPcHRpb25zPy5jb250ZXh0QXR0cmlidXRlcyB8fCB7fSkgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDtcbiAgaWYgKGN0eCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZ2V0IHRoZSBjb250ZXh0IHdpdGggJHtjb250ZXh0VHlwZX0gdHlwZS5gKTtcbiAgfVxuXG4gIGNvbnN0IFtoZWlnaHQsIHdpZHRoXSA9IGltYWdlLnNoYXBlLnNsaWNlKDAsIDIpO1xuICBjb25zdCBkZXB0aCA9IGltYWdlLnNoYXBlLmxlbmd0aCA9PT0gMiA/IDEgOiBpbWFnZS5zaGFwZVsyXTtcbiAgY29uc3QgZGF0YSA9IGJhY2tlbmQuZGF0YS5nZXQoaW1hZ2UuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgbXVsdGlwbGllciA9IGltYWdlLmR0eXBlID09PSAnZmxvYXQzMicgPyAyNTUgOiAxO1xuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0ICogd2lkdGg7ICsraSkge1xuICAgIGNvbnN0IHJnYmEgPSBbMCwgMCwgMCwgMjU1ICogYWxwaGFdO1xuXG4gICAgZm9yIChsZXQgZCA9IDA7IGQgPCBkZXB0aDsgZCsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbaSAqIGRlcHRoICsgZF07XG5cbiAgICAgIGlmIChpbWFnZS5kdHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGVuc29yIHZhbHVlcyBmb3IgYSBmbG9hdDMyIFRlbnNvciBtdXN0IGJlIGluIHRoZSBgICtcbiAgICAgICAgICAgICAgYHJhbmdlIFswIC0gMV0gYnV0IGVuY291bnRlcmVkICR7dmFsdWV9LmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGltYWdlLmR0eXBlID09PSAnaW50MzInKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyNTUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUZW5zb3IgdmFsdWVzIGZvciBhIGludDMyIFRlbnNvciBtdXN0IGJlIGluIHRoZSBgICtcbiAgICAgICAgICAgICAgYHJhbmdlIFswIC0gMjU1XSBidXQgZW5jb3VudGVyZWQgJHt2YWx1ZX0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoID09PSAxKSB7XG4gICAgICAgIHJnYmFbMF0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMV0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICAgIHJnYmFbMl0gPSB2YWx1ZSAqIG11bHRpcGxpZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JhW2RdID0gdmFsdWUgKiBtdWx0aXBsaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGogPSBpICogNDtcbiAgICBieXRlc1tqICsgMF0gPSBNYXRoLnJvdW5kKHJnYmFbMF0pO1xuICAgIGJ5dGVzW2ogKyAxXSA9IE1hdGgucm91bmQocmdiYVsxXSk7XG4gICAgYnl0ZXNbaiArIDJdID0gTWF0aC5yb3VuZChyZ2JhWzJdKTtcbiAgICBieXRlc1tqICsgM10gPSBNYXRoLnJvdW5kKHJnYmFbM10pO1xuICB9XG5cbiAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIGNvbnN0IGltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEoYnl0ZXMsIHdpZHRoLCBoZWlnaHQpO1xuICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XG4gIHJldHVybiBpbWFnZTtcbn1cblxuZXhwb3J0IGNvbnN0IGRyYXdDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRHJhdyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBkcmF3IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Sum, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { zeros } from '../utils/zeros_impl';\nimport { cast } from './Cast';\nimport { identity } from './Identity';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function sum(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'sum');\n let $x;\n if (x.dtype === 'bool') {\n $x = cast({ inputs: { x }, backend, attrs: { dtype: 'int32' } });\n }\n else {\n $x = identity({ inputs: { x }, backend });\n }\n const xRank = $x.shape.length;\n const axes = util.parseAxisParam(axis, $x.shape);\n const permutation = backend_util.getAxesPermutation(axes, xRank);\n let reductionAxes = axes;\n let permutedX = $x;\n if (permutation != null) {\n permutedX =\n transpose({ inputs: { x: $x }, backend, attrs: { perm: permutation } });\n reductionAxes = backend_util.getInnerMostAxes(reductionAxes.length, xRank);\n }\n backend_util.assertAxesAreInnerMostDims('sum', reductionAxes, permutedX.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes(permutedX.shape, reductionAxes);\n const resultDtype = backend_util.upcastType(permutedX.dtype, 'int32');\n let result = zeros(backend, outShape, resultDtype);\n const reduceSize = util.sizeFromShape(reduceShape);\n const vals = backend.data.get(result.dataId).values;\n const aVals = backend.data.get(permutedX.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let sum = 0;\n for (let j = 0; j < reduceSize; ++j) {\n sum += aVals[offset + j];\n }\n vals[i] = sum;\n }\n if (keepDims) {\n const newShape = backend_util.expandShapeToKeepDim(result.shape, axes);\n const oldResult = result;\n result = reshape({ inputs: { x: result }, backend, attrs: { shape: newShape } });\n backend.disposeIntermediateTensorInfo(oldResult);\n }\n backend.disposeIntermediateTensorInfo($x);\n if (permutation != null) {\n backend.disposeIntermediateTensorInfo(permutedX);\n }\n return result;\n}\nexport const sumConfig = {\n kernelName: Sum,\n backendName: 'cpu',\n kernelFunc: sum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsR0FBRyxFQUErQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdySSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLEdBQUcsQ0FDZixJQUFtRTtJQUVyRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0IsSUFBSSxFQUFFLENBQUM7SUFDUCxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3RCLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxFQUFDLENBQUMsQ0FBQztLQUM1RDtTQUFNO1FBQ0ws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QyxDQUFDO0lBRTFDLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtRQUN2QixPQUFPLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbEQ7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUE0QjtDQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdW0sIFN1bUF0dHJzLCBTdW1JbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHt6ZXJvc30gZnJvbSAnLi4vdXRpbHMvemVyb3NfaW1wbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vQ2FzdCc7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tICcuL0lkZW50aXR5JztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW0oXG4gICAgYXJnczoge2lucHV0czogU3VtSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFN1bUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2F4aXMsIGtlZXBEaW1zfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ3N1bScpO1xuXG4gIGxldCAkeDtcbiAgaWYgKHguZHR5cGUgPT09ICdib29sJykge1xuICAgICR4ID0gY2FzdCh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7ZHR5cGU6ICdpbnQzMid9fSk7XG4gIH0gZWxzZSB7XG4gICAgJHggPSBpZGVudGl0eSh7aW5wdXRzOiB7eH0sIGJhY2tlbmR9KTtcbiAgfVxuXG4gIGNvbnN0IHhSYW5rID0gJHguc2hhcGUubGVuZ3RoO1xuICBjb25zdCBheGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCAkeC5zaGFwZSk7XG4gIGNvbnN0IHBlcm11dGF0aW9uID0gYmFja2VuZF91dGlsLmdldEF4ZXNQZXJtdXRhdGlvbihheGVzLCB4UmFuayk7XG5cbiAgbGV0IHJlZHVjdGlvbkF4ZXMgPSBheGVzO1xuICBsZXQgcGVybXV0ZWRYID0gJHg7XG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgcGVybXV0ZWRYID1cbiAgICAgICAgdHJhbnNwb3NlKHtpbnB1dHM6IHt4OiAkeH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0YXRpb259fSk7XG4gICAgcmVkdWN0aW9uQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRJbm5lck1vc3RBeGVzKHJlZHVjdGlvbkF4ZXMubGVuZ3RoLCB4UmFuayk7XG4gIH1cblxuICBiYWNrZW5kX3V0aWwuYXNzZXJ0QXhlc0FyZUlubmVyTW9zdERpbXMoXG4gICAgICAnc3VtJywgcmVkdWN0aW9uQXhlcywgcGVybXV0ZWRYLnNoYXBlLmxlbmd0aCk7XG5cbiAgY29uc3QgW291dFNoYXBlLCByZWR1Y2VTaGFwZV0gPVxuICAgICAgYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMocGVybXV0ZWRYLnNoYXBlLCByZWR1Y3Rpb25BeGVzKTtcbiAgY29uc3QgcmVzdWx0RHR5cGUgPSBiYWNrZW5kX3V0aWwudXBjYXN0VHlwZShwZXJtdXRlZFguZHR5cGUsICdpbnQzMicpO1xuICBsZXQgcmVzdWx0ID0gemVyb3MoYmFja2VuZCwgb3V0U2hhcGUsIHJlc3VsdER0eXBlKTtcbiAgY29uc3QgcmVkdWNlU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZWR1Y2VTaGFwZSk7XG4gIGNvbnN0IHZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHJlc3VsdC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IGFWYWxzID0gYmFja2VuZC5kYXRhLmdldChwZXJtdXRlZFguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaSAqIHJlZHVjZVNpemU7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIHN1bSArPSBhVmFsc1tvZmZzZXQgKyBqXTtcbiAgICB9XG4gICAgdmFsc1tpXSA9IHN1bTtcbiAgfVxuXG4gIGlmIChrZWVwRGltcykge1xuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKHJlc3VsdC5zaGFwZSwgYXhlcyk7XG4gICAgY29uc3Qgb2xkUmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9IHJlc2hhcGUoe2lucHV0czoge3g6IHJlc3VsdH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfX0pO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ob2xkUmVzdWx0KTtcbiAgfVxuXG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJHgpO1xuXG4gIGlmIChwZXJtdXRhdGlvbiAhPSBudWxsKSB7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwZXJtdXRlZFgpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdW0sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc3VtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Einsum, util } from '@tensorflow/tfjs-core';\nimport { multiply } from './Multiply';\nimport { reshape } from './Reshape';\nimport { sum } from './Sum';\nimport { transpose } from './Transpose';\nexport function einsum(args) {\n const { inputs, backend, attrs } = args;\n const { equation } = attrs;\n const tensors = inputs;\n const { allDims, summedDims, idDims } = backend_util.decodeEinsumEquation(equation, tensors.length);\n backend_util.checkEinsumDimSizes(allDims.length, idDims, tensors);\n const { path, steps } = backend_util.getEinsumComputePath(summedDims, idDims);\n const nSteps = steps.length;\n let out = null;\n let numDimsRemaining = allDims.length;\n const tensorsToDispose = [];\n for (let i = 0; i < nSteps; ++i) {\n for (const idTerm of steps[i]) {\n const { permutationIndices: perm, expandDims: dimsToExpand } = backend_util.getEinsumPermutation(numDimsRemaining, idDims[idTerm]);\n let x;\n if (backend_util.isIdentityPermutation(perm)) {\n x = tensors[idTerm];\n }\n else {\n x = transpose({ inputs: { x: tensors[idTerm] }, backend, attrs: { perm } });\n tensorsToDispose.push(x);\n }\n const targetShape = x.shape.slice();\n for (let k = 0; k < dimsToExpand.length; ++k) {\n targetShape.splice(dimsToExpand[k], 0, 1);\n }\n if (!util.arraysEqual(x.shape, targetShape)) {\n x = reshape({ inputs: { x }, backend, attrs: { shape: targetShape } });\n tensorsToDispose.push(x);\n }\n if (out === null) {\n out = x;\n }\n else {\n // tslint:disable-next-line: no-unnecessary-type-assertion\n out = multiply({ inputs: { a: x, b: out }, backend });\n tensorsToDispose.push(out);\n }\n }\n if (i < nSteps - 1) {\n if (path[i] >= 0) {\n out = sum({\n inputs: { x: out },\n backend,\n attrs: {\n axis: path[i] - (allDims.length - numDimsRemaining),\n keepDims: false\n }\n });\n tensorsToDispose.push(out);\n }\n numDimsRemaining--;\n }\n }\n // Clean up intermediate tensors.\n for (const tensorInfo of tensorsToDispose) {\n if (tensorInfo === out) {\n continue;\n }\n backend.disposeIntermediateTensorInfo(tensorInfo);\n }\n return out;\n}\nexport const einsumConfig = {\n kernelName: Einsum,\n backendName: 'cpu',\n kernelFunc: einsum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWluc3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9FaW5zdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQTJFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTFJLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsSUFBeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsTUFBTSxPQUFPLEdBQUcsTUFBa0IsQ0FBQztJQUVuQyxNQUFNLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsR0FDL0IsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEUsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzVCLElBQUksR0FBRyxHQUFvQixJQUFJLENB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LEtBQUssR0FBRyxFQUFFO1lBQ3RCLFNBQVM7U0FDVjtRQUNELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNuRDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBFaW5zdW0sIEVpbnN1bUF0dHJzLCBFaW5zdW1JbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmltcG9ydCB7bXVsdGlwbHl9IGZyb20gJy4vTXVsdGlwbHknO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vU3VtJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlaW5zdW0oXG4gICAgYXJnczoge2lucHV0czogRWluc3VtSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IEVpbnN1bUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtlcXVhdGlvbn0gPSBhdHRycztcbiAgY29uc3QgdGVuc29ycyA9IGlucHV0cyBhcyBUZW5zb3JbXTtcblxuICBjb25zdCB7YWxsRGltcywgc3VtbWVkRGltcywgaWREaW1zfSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZGVjb2RlRWluc3VtRXF1YXRpb24oZXF1YXRpb24sIHRlbnNvcnMubGVuZ3RoKTtcbiAgYmFja2VuZF91dGlsLmNoZWNrRWluc3VtRGltU2l6ZXMoYWxsRGltcy5sZW5ndGgsIGlkRGltcywgdGVuc29ycyk7XG4gIGNvbnN0IHtwYXRoLCBzdGVwc30gPSBiYWNrZW5kX3V0aWwuZ2V0RWluc3VtQ29tcHV0ZVBhdGgoc3VtbWVkRGltcywgaWREaW1zKTtcblxuICBjb25zdCBuU3RlcHMgPSBzdGVwcy5sZW5ndGg7XG4gIGxldCBvdXQ6IFRlbnNvckluZm98bnVsbCA9IG51bGw7XG4gIGxldCBudW1EaW1zUmVtYWluaW5nID0gYWxsRGltcy5sZW5ndGg7XG4gIGNvbnN0IHRlbnNvcnNUb0Rpc3Bvc2U6IFRlbnNvckluZm9bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG5TdGVwczsgKytpKSB7XG4gICAgZm9yIChjb25zdCBpZFRlcm0gb2Ygc3RlcHNbaV0pIHtcbiAgICAgIGNvbnN0IHtwZXJtdXRhdGlvbkluZGljZXM6IHBlcm0sIGV4cGFuZERpbXM6IGRpbXNUb0V4cGFuZH0gPVxuICAgICAgICAgIGJhY2tlbmRfdXRpbC5nZXRFaW5zdW1QZXJtdXRhdGlvbihudW1EaW1zUmVtYWluaW5nLCBpZERpbXNbaWRUZXJtXSk7XG4gICAgICBsZXQgeDogVGVuc29ySW5mbztcbiAgICAgIGlmIChiYWNrZW5kX3V0aWwuaXNJZGVudGl0eVBlcm11dGF0aW9uKHBlcm0pKSB7XG4gICAgICAgIHggPSB0ZW5zb3JzW2lkVGVybV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gdHJhbnNwb3NlKHtpbnB1dHM6IHt4OiB0ZW5zb3JzW2lkVGVybV19LCBiYWNrZW5kLCBhdHRyczoge3Blcm19fSk7XG4gICAgICAgIHRlbnNvcnNUb0Rpc3Bvc2UucHVzaCh4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldFNoYXBlOiBudW1iZXJbXSA9IHguc2hhcGUuc2xpY2UoKTtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGltc1RvRXhwYW5kLmxlbmd0aDsgKytrKSB7XG4gICAgICAgIHRhcmdldFNoYXBlLnNwbGljZShkaW1zVG9FeHBhbmRba10sIDAsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWwuYXJyYXlzRXF1YWwoeC5zaGFwZSwgdGFyZ2V0U2hhcGUpKSB7XG4gICAgICAgIHggPSByZXNoYXBlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogdGFyZ2V0U2hhcGV9fSk7XG4gICAgICAgIHRlbnNvcnNUb0Rpc3Bvc2UucHVzaCh4KTtcbiAgICAgIH1cbiAgICAgIGlmIChvdXQgPT09IG51bGwpIHtcbiAgICAgICAgb3V0ID0geDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgb3V0ID0gbXVsdGlwbHkoe2lucHV0czoge2E6IHgsIGI6IG91dH0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICAgICAgICB0ZW5zb3JzVG9EaXNwb3NlLnB1c2gob3V0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPCBuU3RlcHMgLSAxKSB7XG4gICAgICBpZiAocGF0aFtpXSA+PSAwKSB7XG4gICAgICAgIG91dCA9IHN1bSh7XG4gICAgICAgICAgaW5wdXRzOiB7eDogb3V0fSxcbiAgICAgICAgICBiYWNrZW5kLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBheGlzOiBwYXRoW2ldIC0gKGFsbERpbXMubGVuZ3RoIC0gbnVtRGltc1JlbWFpbmluZyksXG4gICAgICAgICAgICBrZWVwRGltczogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0ZW5zb3JzVG9EaXNwb3NlLnB1c2gob3V0KTtcbiAgICAgIH1cbiAgICAgIG51bURpbXNSZW1haW5pbmctLTtcbiAgICB9XG4gIH1cblxuICAvLyBDbGVhbiB1cCBpbnRlcm1lZGlhdGUgdGVuc29ycy5cbiAgZm9yIChjb25zdCB0ZW5zb3JJbmZvIG9mIHRlbnNvcnNUb0Rpc3Bvc2UpIHtcbiAgICBpZiAodGVuc29ySW5mbyA9PT0gb3V0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0ZW5zb3JJbmZvKTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBlaW5zdW1Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRWluc3VtLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGVpbnN1bSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { EluGrad, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function eluGrad(args) {\n const { inputs, backend } = args;\n const { dy, y } = inputs;\n assertNotComplex([dy, y], 'eluGrad');\n const resultValues = new Float32Array(util.sizeFromShape(y.shape));\n const values = backend.data.get(y.dataId).values;\n const dyValues = backend.data.get(dy.dataId).values;\n for (let i = 0; i < values.length; ++i) {\n const v = values[i];\n if (v >= 0) {\n resultValues[i] = dyValues[i];\n }\n else {\n resultValues[i] = dyValues[i] * (v + 1);\n }\n }\n return backend.makeTensorInfo(y.shape, 'float32', resultValues);\n}\nexport const eluGradConfig = {\n kernelName: EluGrad,\n backendName: 'cpu',\n kernelFunc: eluGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWx1R3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRWx1R3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsT0FBTyxFQUFtRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdySCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFzRDtJQUU1RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVyQyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2xFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO2FBQU07WUFDTCxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RWx1R3JhZCwgRWx1R3JhZElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVsdUdyYWQoYXJnczoge2lucHV0czogRWx1R3JhZElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7ZHksIHl9ID0gaW5wdXRzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2R5LCB5XSwgJ2VsdUdyYWQnKTtcblxuICBjb25zdCByZXN1bHRWYWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZSh5LnNoYXBlKSk7XG4gIGNvbnN0IHZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoeS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCBkeVZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoZHkuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCB2ID0gdmFsdWVzW2ldO1xuICAgIGlmICh2ID49IDApIHtcbiAgICAgIHJlc3VsdFZhbHVlc1tpXSA9IGR5VmFsdWVzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRWYWx1ZXNbaV0gPSBkeVZhbHVlc1tpXSAqICh2ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeS5zaGFwZSwgJ2Zsb2F0MzInLCByZXN1bHRWYWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgZWx1R3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFbHVHcmFkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGVsdUdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Erf } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nconst p = backend_util.ERF_P;\nconst a1 = backend_util.ERF_A1;\nconst a2 = backend_util.ERF_A2;\nconst a3 = backend_util.ERF_A3;\nconst a4 = backend_util.ERF_A4;\nconst a5 = backend_util.ERF_A5;\nexport const erf = unaryKernelFunc(Erf, (xi) => {\n const sign = Math.sign(xi);\n const v = Math.abs(xi);\n const t = 1.0 / (1.0 + p * v);\n return sign *\n (1.0 -\n (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t *\n Math.exp(-v * v));\n});\nexport const erfConfig = {\n kernelName: Erf,\n backendName: 'cpu',\n kernelFunc: erf,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9FcmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztBQUM3QixNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0FBQy9CLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDL0IsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0FBQy9CLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FDOUIsR0FBRyxFQUNILENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDTCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLElBQUk7UUFDUCxDQUFDLEdBQUc7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQ0osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEVyZiwgS2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5jb25zdCBwID0gYmFja2VuZF91dGlsLkVSRl9QO1xuY29uc3QgYTEgPSBiYWNrZW5kX3V0aWwuRVJGX0ExO1xuY29uc3QgYTIgPSBiYWNrZW5kX3V0aWwuRVJGX0EyO1xuY29uc3QgYTMgPSBiYWNrZW5kX3V0aWwuRVJGX0EzO1xuY29uc3QgYTQgPSBiYWNrZW5kX3V0aWwuRVJGX0E0O1xuY29uc3QgYTUgPSBiYWNrZW5kX3V0aWwuRVJGX0E1O1xuXG5leHBvcnQgY29uc3QgZXJmID0gdW5hcnlLZXJuZWxGdW5jKFxuICAgIEVyZixcbiAgICAoeGkpID0+IHtcbiAgICAgIGNvbnN0IHNpZ24gPSBNYXRoLnNpZ24oeGkpO1xuICAgICAgY29uc3QgdiA9IE1hdGguYWJzKHhpKTtcbiAgICAgIGNvbnN0IHQgPSAxLjAgLyAoMS4wICsgcCAqIHYpO1xuICAgICAgcmV0dXJuIHNpZ24gKlxuICAgICAgICAgICgxLjAgLVxuICAgICAgICAgICAoKCgoKGE1ICogdCArIGE0KSAqIHQpICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICpcbiAgICAgICAgICAgICAgIE1hdGguZXhwKC12ICogdikpO1xuICAgIH0sXG4pO1xuXG5leHBvcnQgY29uc3QgZXJmQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEVyZixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBlcmYsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ExpandDims, util } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nexport function expandDims(args) {\n const { inputs, backend, attrs } = args;\n const { input } = inputs;\n const { dim } = attrs;\n const inputRank = input.shape.length;\n const newShape = input.shape.slice();\n let $dim = dim;\n if (dim < 0) {\n // Negative value is counted from the tail of rank.\n util.assert(-(inputRank + 1) <= dim, () => `Axis must be in the interval [${-(inputRank + 1)}, ${inputRank}]`);\n $dim = inputRank + dim + 1;\n }\n newShape.splice($dim, 0, 1);\n return reshape({ inputs: { x: input }, backend, attrs: { shape: newShape } });\n}\nexport const expandDimsConfig = {\n kernelName: ExpandDims,\n backendName: 'cpu',\n kernelFunc: expandDims\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kRGltcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRXhwYW5kRGltcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUEyRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdoSSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxVQUFVLENBQUMsSUFJMUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN2QixNQUFNLEVBQUMsR0FBRyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXBCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ1gsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQ1AsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQ3ZCLEdBQUcsRUFBRSxDQUFDLGlDQUFpQyxDQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUNwRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUM1QjtJQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1QixPQUFPLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxVQUFtQztDQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0V4cGFuZERpbXMsIEV4cGFuZERpbXNBdHRycywgRXhwYW5kRGltc0lucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmREaW1zKGFyZ3M6IHtcbiAgaW5wdXRzOiBFeHBhbmREaW1zSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IEV4cGFuZERpbXNBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuICBjb25zdCB7ZGltfSA9IGF0dHJzO1xuXG4gIGNvbnN0IGlucHV0UmFuayA9IGlucHV0LnNoYXBlLmxlbmd0aDtcbiAgY29uc3QgbmV3U2hhcGUgPSBpbnB1dC5zaGFwZS5zbGljZSgpO1xuICBsZXQgJGRpbSA9IGRpbTtcbiAgaWYgKGRpbSA8IDApIHtcbiAgICAvLyBOZWdhdGl2ZSB2YWx1ZSBpcyBjb3VudGVkIGZyb20gdGhlIHRhaWwgb2YgcmFuay5cbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgLShpbnB1dFJhbmsgKyAxKSA8PSBkaW0sXG4gICAgICAgICgpID0+IGBBeGlzIG11c3QgYmUgaW4gdGhlIGludGVydmFsIFskey0gKGlucHV0UmFuayArIDEpfSwgJHtcbiAgICAgICAgICAgIGlucHV0UmFua31dYCk7XG4gICAgJGRpbSA9IGlucHV0UmFuayArIGRpbSArIDE7XG4gIH1cbiAgbmV3U2hhcGUuc3BsaWNlKCRkaW0sIDAsIDEpO1xuXG4gIHJldHVybiByZXNoYXBlKHtpbnB1dHM6IHt4OiBpbnB1dH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IG5ld1NoYXBlfX0pO1xufVxuXG5leHBvcnQgY29uc3QgZXhwYW5kRGltc0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBFeHBhbmREaW1zLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGV4cGFuZERpbXMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RealDiv } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const realDivImpl = createSimpleBinaryKernelImpl((a, b) => a / b);\nexport const div = binaryKernelFunc(RealDiv, realDivImpl);\nexport const realDivConfig = {\n kernelName: RealDiv,\n backendName: 'cpu',\n kernelFunc: div\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhbERpdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVhbERpdi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUNwQiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQUc7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFJlYWxEaXZ9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgcmVhbERpdkltcGwgPVxuICAgIGNyZWF0ZVNpbXBsZUJpbmFyeUtlcm5lbEltcGwoKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIC8gYik7XG5leHBvcnQgY29uc3QgZGl2ID0gYmluYXJ5S2VybmVsRnVuYyhSZWFsRGl2LCByZWFsRGl2SW1wbCk7XG5cbmV4cG9ydCBjb25zdCByZWFsRGl2Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJlYWxEaXYsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZGl2XG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, util } from '@tensorflow/tfjs-core';\nimport { add } from '../kernels/Add';\nimport { complex } from '../kernels/Complex';\nimport { concat } from '../kernels/Concat';\nimport { identity } from '../kernels/Identity';\nimport { imag } from '../kernels/Imag';\nimport { multiply } from '../kernels/Multiply';\nimport { real } from '../kernels/Real';\nimport { realDivConfig } from '../kernels/RealDiv';\nimport { slice } from '../kernels/Slice';\nimport { sub } from '../kernels/Sub';\n/**\n * Calculate FFT of inner most elements of batch tensor.\n */\nexport function fftBatch(input, inverse, cpuBackend) {\n const inputShape = input.shape;\n const batch = inputShape[0];\n const innerDim = inputShape[1];\n const inputVals = cpuBackend.data.get(input.dataId);\n const real2D = inputVals.complexTensorInfos.real;\n const imag2D = inputVals.complexTensorInfos.imag;\n // Collects real and imaginary values separately.\n const resultShape = [batch, innerDim];\n const resultSize = util.sizeFromShape(resultShape);\n const resultReal = util.getTypedArrayFromDType('float32', resultSize);\n const resultImag = util.getTypedArrayFromDType('float32', resultSize);\n for (let b = 0; b < batch; b++) {\n // TODO: Support slice ops for complex type.\n const r = slice({\n inputs: { x: real2D },\n backend: cpuBackend,\n attrs: { begin: [b, 0], size: [1, innerDim] }\n });\n const i = slice({\n inputs: { x: imag2D },\n backend: cpuBackend,\n attrs: { begin: [b, 0], size: [1, innerDim] }\n });\n const input = complex({ inputs: { real: r, imag: i }, backend: cpuBackend });\n // Run FFT by batch element.\n const { real, imag } = fftImpl(input, inverse, cpuBackend);\n const res = backend_util.mergeRealAndImagArrays(real, imag);\n for (let d = 0; d < innerDim; d++) {\n const c = backend_util.getComplexWithIndex(res, d);\n resultReal[b * innerDim + d] = c.real;\n resultImag[b * innerDim + d] = c.imag;\n }\n cpuBackend.disposeIntermediateTensorInfo(r);\n cpuBackend.disposeIntermediateTensorInfo(i);\n cpuBackend.disposeIntermediateTensorInfo(input);\n }\n const $realInfo = cpuBackend.makeTensorInfo(resultShape, 'float32', resultReal);\n const $imagInfo = cpuBackend.makeTensorInfo(resultShape, 'float32', resultImag);\n const result = complex({ inputs: { real: $realInfo, imag: $imagInfo }, backend: cpuBackend });\n cpuBackend.disposeIntermediateTensorInfo($realInfo);\n cpuBackend.disposeIntermediateTensorInfo($imagInfo);\n return result;\n}\nexport function fftImpl(input, inverse, cpuBackend) {\n const inputSize = util.sizeFromShape(input.shape);\n const inputVals = cpuBackend.data.get(input.dataId);\n const realVals = cpuBackend.data.get(inputVals.complexTensorInfos.real.dataId).values;\n const imagVals = cpuBackend.data.get(inputVals.complexTensorInfos.imag.dataId).values;\n if (isExponentOf2(inputSize)) {\n const result = fftRadix2(realVals, imagVals, inputSize, inverse, cpuBackend);\n const resultShape = [input.shape[0], input.shape[1]];\n if (inverse) {\n const realInfo = cpuBackend.makeTensorInfo(resultShape, 'float32', result.real);\n const imagInfo = cpuBackend.makeTensorInfo(resultShape, 'float32', result.imag);\n const sizeInfo = cpuBackend.makeTensorInfo([], 'float32', util.createScalarValue(inputSize, 'float32'));\n const sizeInfoCopy = identity({ inputs: { x: sizeInfo }, backend: cpuBackend });\n const divRealInfo = realDivConfig.kernelFunc({ inputs: { a: realInfo, b: sizeInfo }, backend: cpuBackend });\n const divImagInfo = realDivConfig.kernelFunc({ inputs: { a: imagInfo, b: sizeInfoCopy }, backend: cpuBackend });\n const divRealVals = cpuBackend.data.get(divRealInfo.dataId).values;\n const divImagVals = cpuBackend.data.get(divImagInfo.dataId).values;\n cpuBackend.disposeIntermediateTensorInfo(realInfo);\n cpuBackend.disposeIntermediateTensorInfo(imagInfo);\n cpuBackend.disposeIntermediateTensorInfo(sizeInfo);\n cpuBackend.disposeIntermediateTensorInfo(sizeInfoCopy);\n cpuBackend.disposeIntermediateTensorInfo(divRealInfo);\n cpuBackend.disposeIntermediateTensorInfo(divImagInfo);\n return { real: divRealVals, imag: divImagVals };\n }\n return result;\n }\n else {\n const data = backend_util.mergeRealAndImagArrays(realVals, imagVals);\n const rawOutput = fourierTransformByMatmul(data, inputSize, inverse);\n return backend_util.splitRealAndImagArrays(rawOutput);\n }\n}\nfunction isExponentOf2(size) {\n return (size & size - 1) === 0;\n}\n// FFT using Cooley-Tukey algorithm on radix 2 dimensional input.\nfunction fftRadix2(realVals, imagVals, size, inverse, cpuBackend) {\n if (size === 1) {\n return { real: realVals, imag: imagVals };\n }\n const data = backend_util.mergeRealAndImagArrays(realVals, imagVals);\n const half = size / 2;\n const evenComplex = backend_util.complexWithEvenIndex(data);\n const evenRealVals = evenComplex.real;\n const evenImagVals = evenComplex.imag;\n const evenShape = [evenRealVals.length];\n const evenRealInfo = cpuBackend.makeTensorInfo(evenShape, 'float32', evenRealVals);\n const evenImagInfo = cpuBackend.makeTensorInfo(evenShape, 'float32', evenImagVals);\n const evenTensorInfo = complex({ inputs: { real: evenRealInfo, imag: evenImagInfo }, backend: cpuBackend });\n const oddComplex = backend_util.complexWithOddIndex(data);\n const oddRealVals = oddComplex.real;\n const oddImagVals = oddComplex.imag;\n const oddShape = [oddRealVals.length];\n const oddRealInfo = cpuBackend.makeTensorInfo(oddShape, 'float32', oddRealVals);\n const oddImagInfo = cpuBackend.makeTensorInfo(oddShape, 'float32', oddImagVals);\n const oddTensorInfo = complex({ inputs: { real: oddRealInfo, imag: oddImagInfo }, backend: cpuBackend });\n // Recursive call for half part of original input.\n const $evenComplex = fftRadix2(evenRealVals, evenImagVals, half, inverse, cpuBackend);\n const $evenRealVals = $evenComplex.real;\n const $evenImagVals = $evenComplex.imag;\n const $evenShape = [$evenRealVals.length];\n const $evenRealInfo = cpuBackend.makeTensorInfo($evenShape, 'float32', $evenRealVals);\n const $evenImagInfo = cpuBackend.makeTensorInfo($evenShape, 'float32', $evenImagVals);\n const $evenTensorInfo = complex({\n inputs: { real: $evenRealInfo, imag: $evenImagInfo },\n backend: cpuBackend\n });\n const $oddComplex = fftRadix2(oddRealVals, oddImagVals, half, inverse, cpuBackend);\n const $oddRealVals = $oddComplex.real;\n const $oddImagVals = $oddComplex.imag;\n const $oddShape = [$oddRealVals.length];\n const $oddRealInfo = cpuBackend.makeTensorInfo($oddShape, 'float32', $oddRealVals);\n const $oddImagInfo = cpuBackend.makeTensorInfo($oddShape, 'float32', $oddImagVals);\n const $oddTensorInfo = complex({ inputs: { real: $oddRealInfo, imag: $oddImagInfo }, backend: cpuBackend });\n const e = backend_util.exponents(size, inverse);\n const eShape = [e.real.length];\n const eRealInfo = cpuBackend.makeTensorInfo(eShape, 'float32', e.real);\n const eImagInfo = cpuBackend.makeTensorInfo(eShape, 'float32', e.imag);\n const complexInfo = complex({ inputs: { real: eRealInfo, imag: eImagInfo }, backend: cpuBackend });\n const exponentInfo = multiply({ inputs: { a: complexInfo, b: $oddTensorInfo }, backend: cpuBackend });\n const addPart = add({\n inputs: { a: $evenTensorInfo, b: exponentInfo },\n backend: cpuBackend\n });\n const subPart = sub({\n inputs: { a: $evenTensorInfo, b: exponentInfo },\n backend: cpuBackend\n });\n const addPartReal = real({ inputs: { input: addPart }, backend: cpuBackend });\n const subPartReal = real({ inputs: { input: subPart }, backend: cpuBackend });\n const addPartImag = imag({ inputs: { input: addPart }, backend: cpuBackend });\n const subPartImag = imag({ inputs: { input: subPart }, backend: cpuBackend });\n const $real = concat({\n inputs: [addPartReal, subPartReal],\n backend: cpuBackend,\n attrs: { axis: 0 }\n });\n const $imag = concat({\n inputs: [addPartImag, subPartImag],\n backend: cpuBackend,\n attrs: { axis: 0 }\n });\n const $realVals = cpuBackend.data.get($real.dataId).values;\n const $imagVals = cpuBackend.data.get($imag.dataId).values;\n cpuBackend.disposeIntermediateTensorInfo(evenRealInfo);\n cpuBackend.disposeIntermediateTensorInfo(evenImagInfo);\n cpuBackend.disposeIntermediateTensorInfo(evenTensorInfo);\n cpuBackend.disposeIntermediateTensorInfo(oddRealInfo);\n cpuBackend.disposeIntermediateTensorInfo(oddImagInfo);\n cpuBackend.disposeIntermediateTensorInfo(oddTensorInfo);\n cpuBackend.disposeIntermediateTensorInfo($evenRealInfo);\n cpuBackend.disposeIntermediateTensorInfo($evenImagInfo);\n cpuBackend.disposeIntermediateTensorInfo($evenTensorInfo);\n cpuBackend.disposeIntermediateTensorInfo($oddRealInfo);\n cpuBackend.disposeIntermediateTensorInfo($oddImagInfo);\n cpuBackend.disposeIntermediateTensorInfo($oddTensorInfo);\n cpuBackend.disposeIntermediateTensorInfo(eRealInfo);\n cpuBackend.disposeIntermediateTensorInfo(eImagInfo);\n cpuBackend.disposeIntermediateTensorInfo(complexInfo);\n cpuBackend.disposeIntermediateTensorInfo(exponentInfo);\n cpuBackend.disposeIntermediateTensorInfo(addPart);\n cpuBackend.disposeIntermediateTensorInfo(subPart);\n cpuBackend.disposeIntermediateTensorInfo(addPartReal);\n cpuBackend.disposeIntermediateTensorInfo(addPartImag);\n cpuBackend.disposeIntermediateTensorInfo(subPartReal);\n cpuBackend.disposeIntermediateTensorInfo(subPartImag);\n cpuBackend.disposeIntermediateTensorInfo($real);\n cpuBackend.disposeIntermediateTensorInfo($imag);\n return { real: $realVals, imag: $imagVals };\n}\n// Calculate fourier transform by multplying sinusoid matrix.\nfunction fourierTransformByMatmul(data, size, inverse) {\n const ret = new Float32Array(size * 2);\n // TODO: Use matmul instead once it supports complex64 type.\n for (let r = 0; r < size; r++) {\n let real = 0.0;\n let imag = 0.0;\n for (let c = 0; c < size; c++) {\n const e = backend_util.exponent(r * c, size, inverse);\n const term = backend_util.getComplexWithIndex(data, c);\n real += term.real * e.real - term.imag * e.imag;\n imag += term.real * e.imag + term.imag * e.real;\n }\n if (inverse) {\n real /= size;\n imag /= size;\n }\n backend_util.assignToTypedArray(ret, real, imag, r);\n }\n return ret;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmZ0X3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMvdXRpbHMvZmZ0X3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQWtDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3pGLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQzs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3BCLEtBQWlCLEVBQUUsT0FBZ0IsRUFDbkMsVUFBMEI7SUFDNUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9CLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ2pELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFFakQsaURBQWlEO0lBQ2pELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXRFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsNENBQTRDO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNkLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUM7WUFDbkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBQztTQUM1QyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDZCxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDO1lBQ25CLE9BQU8sRUFBRSxVQUFVO1lBQ25CLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUM7U0FDNUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7UUFFekUsNEJBQTRCO1FBQzVCLE1BQU0sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsVUFBVSxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN0QyxVQUFVLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO1FBRUQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxVQUFVLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakQ7SUFFRCxNQUFNLFNBQVMsR0FDWCxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEUsTUFBTSxTQUFTLEdBQ1gsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FDbEIsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztJQUV2RSxVQUFVLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXBELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUNuQixLQUFpQixFQUFFLE9BQWdCLEVBQ25DLFVBQTBCO0lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwRCxNQUFNLFFBQVEsR0FDVixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQ2xELENBQUM7SUFFakIsTUFBTSxRQUFRLEdBQ1YsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUNsRCxDQUFDO0lBRWpCLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzVCLE1BQU0sTUFBTSxHQUNSLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sUUFBUSxHQUNWLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQ1YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuRSxNQUFNLFFBQVEsR0FBZSxVQUFVLENBQUMsY0FBYyxDQUNsRCxFQUFFLEVBQUUsU0FBUyxFQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFpQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsTUFBTSxZQUFZLEdBQ2QsUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1lBRTNELE1BQU0sV0FBVyxHQUNiLGFBQWEsQ0FBQyxVQUFVLENBQ3BCLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUNuRCxDQUFDO1lBQ2YsTUFBTSxXQUFXLEdBQ2IsYUFBYSxDQUFDLFVBQVUsQ0FDcEIsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQ3ZELENBQUM7WUFFZixNQUFNLFdBQVcsR0FDYixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBc0IsQ0FBQztZQUNuRSxNQUFNLFdBQVcsR0FDYixVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBc0IsQ0FBQztZQUVuRSxVQUFVLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV0RCxPQUFPLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUM7U0FDL0M7UUFFRCxPQUFPLE1BQU0sQ0FBQztLQUNmO1NBQU07UUFDTCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sU0FBUyxHQUNYLHdCQUF3QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFpQixDQUFDO1FBRXZFLE9BQU8sWUFBWSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZEO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQVk7SUFDakMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsU0FBUyxTQUFTLENBQ2QsUUFBc0IsRUFBRSxRQUFzQixFQUFFLElBQVksRUFDNUQsT0FBZ0IsRUFDaEIsVUFBMEI7SUFDNUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1FBQ2QsT0FBTyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDO0tBQ3pDO0lBRUQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVyRSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRXRCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFFdEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEMsTUFBTSxZQUFZLEdBQ2QsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sWUFBWSxHQUNkLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVsRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQzFCLEVBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDcEMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUVwQyxNQUFNLFFBQVEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV0QyxNQUFNLFdBQVcsR0FDYixVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEUsTUFBTSxXQUFXLEdBQ2IsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWhFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FDekIsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztJQUUzRSxrREFBa0Q7SUFDbEQsTUFBTSxZQUFZLEdBQ2QsU0FBUyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVyRSxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ3hDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFFeEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUMsTUFBTSxhQUFhLEdBQ2YsVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sYUFBYSxHQUNmLFVBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUVwRSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDOUIsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDO1FBQ2xELE9BQU8sRUFBRSxVQUFVO0tBQ3BCLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUNiLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFbkUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztJQUN0QyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBRXRDLE1BQU0sU0FBUyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhDLE1BQU0sWUFBWSxHQUNkLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRSxNQUFNLFlBQVksR0FDZCxVQUFVLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFbEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUMxQixFQUFDLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUvQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUN2QixFQUFDLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sWUFBWSxHQUNkLFFBQVEsQ0FDSixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FDNUQsQ0FBQztJQUVmLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNGLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBQztRQUM3QyxPQUFPLEVBQUUsVUFBVTtLQUNwQixDQUFlLENBQUM7SUFDakMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ0YsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFDO1FBQzdDLE9BQU8sRUFBRSxVQUFVO0tBQ3BCLENBQWUsQ0FBQztJQUVqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7SUFFMUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxDQUFDLFdBQXFCLEVBQUUsV0FBcUIsQ0FBQztRQUN0RCxPQUFPLEVBQUUsVUFBVTtRQUNuQixLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0tBQ2pCLENBQUMsQ0FBQztJQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNuQixNQUFNLEVBQUUsQ0FBQyxXQUFxQixFQUFFLFdBQXFCLENBQUM7UUFDdEQsT0FBTyxFQUFFLFVBQVU7UUFDbkIsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQztLQUNqQixDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBc0IsQ0FBQztJQUMzRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBc0IsQ0FBQztJQUUzRSxVQUFVLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxVQUFVLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxVQUFVLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxVQUFVLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6RCxVQUFVLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxVQUFVLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxVQUFVLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxVQUFVLENBQUMsNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsVUFBVSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxTQUFTLHdCQUF3QixDQUM3QixJQUFnQixFQUFFLElBQVksRUFBRSxPQUFnQjtJQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsNERBQTREO0lBQzVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hELElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLElBQUksSUFBSSxDQUFDO1lBQ2IsSUFBSSxJQUFJLElBQUksQ0FBQztTQUNkO1FBQ0QsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgVGVuc29yLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi4va2VybmVscy9BZGQnO1xuaW1wb3J0IHtjb21wbGV4fSBmcm9tICcuLi9rZXJuZWxzL0NvbXBsZXgnO1xuaW1wb3J0IHtjb25jYXR9IGZyb20gJy4uL2tlcm5lbHMvQ29uY2F0JztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4uL2tlcm5lbHMvSWRlbnRpdHknO1xuaW1wb3J0IHtpbWFnfSBmcm9tICcuLi9rZXJuZWxzL0ltYWcnO1xuaW1wb3J0IHttdWx0aXBseX0gZnJvbSAnLi4va2VybmVscy9NdWx0aXBseSc7XG5pbXBvcnQge3JlYWx9IGZyb20gJy4uL2tlcm5lbHMvUmVhbCc7XG5pbXBvcnQge3JlYWxEaXZDb25maWd9IGZyb20gJy4uL2tlcm5lbHMvUmVhbERpdic7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuLi9rZXJuZWxzL1NsaWNlJztcbmltcG9ydCB7c3VifSBmcm9tICcuLi9rZXJuZWxzL1N1Yic7XG5cbi8qKlxuICogQ2FsY3VsYXRlIEZGVCBvZiBpbm5lciBtb3N0IGVsZW1lbnRzIG9mIGJhdGNoIHRlbnNvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZmdEJhdGNoKFxuICAgIGlucHV0OiBUZW5zb3JJbmZvLCBpbnZlcnNlOiBib29sZWFuLFxuICAgIGNwdUJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVKTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IGlucHV0U2hhcGUgPSBpbnB1dC5zaGFwZTtcbiAgY29uc3QgYmF0Y2ggPSBpbnB1dFNoYXBlWzBdO1xuICBjb25zdCBpbm5lckRpbSA9IGlucHV0U2hhcGVbMV07XG5cbiAgY29uc3QgaW5wdXRWYWxzID0gY3B1QmFja2VuZC5kYXRhLmdldChpbnB1dC5kYXRhSWQpO1xuXG4gIGNvbnN0IHJlYWwyRCA9IGlucHV0VmFscy5jb21wbGV4VGVuc29ySW5mb3MucmVhbDtcbiAgY29uc3QgaW1hZzJEID0gaW5wdXRWYWxzLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnO1xuXG4gIC8vIENvbGxlY3RzIHJlYWwgYW5kIGltYWdpbmFyeSB2YWx1ZXMgc2VwYXJhdGVseS5cbiAgY29uc3QgcmVzdWx0U2hhcGUgPSBbYmF0Y2gsIGlubmVyRGltXTtcbiAgY29uc3QgcmVzdWx0U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShyZXN1bHRTaGFwZSk7XG4gIGNvbnN0IHJlc3VsdFJlYWwgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoJ2Zsb2F0MzInLCByZXN1bHRTaXplKTtcbiAgY29uc3QgcmVzdWx0SW1hZyA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZSgnZmxvYXQzMicsIHJlc3VsdFNpemUpO1xuXG4gIGZvciAobGV0IGIgPSAwOyBiIDwgYmF0Y2g7IGIrKykge1xuICAgIC8vIFRPRE86IFN1cHBvcnQgc2xpY2Ugb3BzIGZvciBjb21wbGV4IHR5cGUuXG4gICAgY29uc3QgciA9IHNsaWNlKHtcbiAgICAgIGlucHV0czoge3g6IHJlYWwyRH0sXG4gICAgICBiYWNrZW5kOiBjcHVCYWNrZW5kLFxuICAgICAgYXR0cnM6IHtiZWdpbjogW2IsIDBdLCBzaXplOiBbMSwgaW5uZXJEaW1dfVxuICAgIH0pO1xuICAgIGNvbnN0IGkgPSBzbGljZSh7XG4gICAgICBpbnB1dHM6IHt4OiBpbWFnMkR9LFxuICAgICAgYmFja2VuZDogY3B1QmFja2VuZCxcbiAgICAgIGF0dHJzOiB7YmVnaW46IFtiLCAwXSwgc2l6ZTogWzEsIGlubmVyRGltXX1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0ID0gY29tcGxleCh7aW5wdXRzOiB7cmVhbDogciwgaW1hZzogaX0sIGJhY2tlbmQ6IGNwdUJhY2tlbmR9KTtcblxuICAgIC8vIFJ1biBGRlQgYnkgYmF0Y2ggZWxlbWVudC5cbiAgICBjb25zdCB7cmVhbCwgaW1hZ30gPSBmZnRJbXBsKGlucHV0LCBpbnZlcnNlLCBjcHVCYWNrZW5kKTtcbiAgICBjb25zdCByZXMgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhyZWFsLCBpbWFnKTtcblxuICAgIGZvciAobGV0IGQgPSAwOyBkIDwgaW5uZXJEaW07IGQrKykge1xuICAgICAgY29uc3QgYyA9IGJhY2tlbmRfdXRpbC5nZXRDb21wbGV4V2l0aEluZGV4KHJlcywgZCk7XG4gICAgICByZXN1bHRSZWFsW2IgKiBpbm5lckRpbSArIGRdID0gYy5yZWFsO1xuICAgICAgcmVzdWx0SW1hZ1tiICogaW5uZXJEaW0gKyBkXSA9IGMuaW1hZztcbiAgICB9XG5cbiAgICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHIpO1xuICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaSk7XG4gICAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbnB1dCk7XG4gIH1cblxuICBjb25zdCAkcmVhbEluZm86IFRlbnNvckluZm8gPVxuICAgICAgY3B1QmFja2VuZC5tYWtlVGVuc29ySW5mbyhyZXN1bHRTaGFwZSwgJ2Zsb2F0MzInLCByZXN1bHRSZWFsKTtcbiAgY29uc3QgJGltYWdJbmZvOiBUZW5zb3JJbmZvID1cbiAgICAgIGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsICdmbG9hdDMyJywgcmVzdWx0SW1hZyk7XG5cbiAgY29uc3QgcmVzdWx0ID0gY29tcGxleChcbiAgICAgIHtpbnB1dHM6IHtyZWFsOiAkcmVhbEluZm8sIGltYWc6ICRpbWFnSW5mb30sIGJhY2tlbmQ6IGNwdUJhY2tlbmR9KTtcblxuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKCRyZWFsSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGltYWdJbmZvKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmZ0SW1wbChcbiAgICBpbnB1dDogVGVuc29ySW5mbywgaW52ZXJzZTogYm9vbGVhbixcbiAgICBjcHVCYWNrZW5kOiBNYXRoQmFja2VuZENQVSk6IHtyZWFsOiBGbG9hdDMyQXJyYXksIGltYWc6IEZsb2F0MzJBcnJheX0ge1xuICBjb25zdCBpbnB1dFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoaW5wdXQuc2hhcGUpO1xuXG4gIGNvbnN0IGlucHV0VmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoaW5wdXQuZGF0YUlkKTtcblxuICBjb25zdCByZWFsVmFscyA9XG4gICAgICBjcHVCYWNrZW5kLmRhdGEuZ2V0KGlucHV0VmFscy5jb21wbGV4VGVuc29ySW5mb3MucmVhbC5kYXRhSWQpLnZhbHVlcyBhc1xuICAgICAgRmxvYXQzMkFycmF5O1xuXG4gIGNvbnN0IGltYWdWYWxzID1cbiAgICAgIGNwdUJhY2tlbmQuZGF0YS5nZXQoaW5wdXRWYWxzLmNvbXBsZXhUZW5zb3JJbmZvcy5pbWFnLmRhdGFJZCkudmFsdWVzIGFzXG4gICAgICBGbG9hdDMyQXJyYXk7XG5cbiAgaWYgKGlzRXhwb25lbnRPZjIoaW5wdXRTaXplKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgIGZmdFJhZGl4MihyZWFsVmFscywgaW1hZ1ZhbHMsIGlucHV0U2l6ZSwgaW52ZXJzZSwgY3B1QmFja2VuZCk7XG5cbiAgICBjb25zdCByZXN1bHRTaGFwZSA9IFtpbnB1dC5zaGFwZVswXSwgaW5wdXQuc2hhcGVbMV1dO1xuXG4gICAgaWYgKGludmVyc2UpIHtcbiAgICAgIGNvbnN0IHJlYWxJbmZvOiBUZW5zb3JJbmZvID1cbiAgICAgICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAnZmxvYXQzMicsIHJlc3VsdC5yZWFsKTtcbiAgICAgIGNvbnN0IGltYWdJbmZvOiBUZW5zb3JJbmZvID1cbiAgICAgICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKHJlc3VsdFNoYXBlLCAnZmxvYXQzMicsIHJlc3VsdC5pbWFnKTtcblxuICAgICAgY29uc3Qgc2l6ZUluZm86IFRlbnNvckluZm8gPSBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICAgIFtdLCAnZmxvYXQzMicsXG4gICAgICAgICAgdXRpbC5jcmVhdGVTY2FsYXJWYWx1ZShpbnB1dFNpemUgYXMgdW5rbm93biBhcyAnZmxvYXQzMicsICdmbG9hdDMyJykpO1xuICAgICAgY29uc3Qgc2l6ZUluZm9Db3B5ID1cbiAgICAgICAgICBpZGVudGl0eSh7aW5wdXRzOiB7eDogc2l6ZUluZm99LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSk7XG5cbiAgICAgIGNvbnN0IGRpdlJlYWxJbmZvID1cbiAgICAgICAgICByZWFsRGl2Q29uZmlnLmtlcm5lbEZ1bmMoXG4gICAgICAgICAgICAgIHtpbnB1dHM6IHthOiByZWFsSW5mbywgYjogc2l6ZUluZm99LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSkgYXNcbiAgICAgICAgICBUZW5zb3JJbmZvO1xuICAgICAgY29uc3QgZGl2SW1hZ0luZm8gPVxuICAgICAgICAgIHJlYWxEaXZDb25maWcua2VybmVsRnVuYyhcbiAgICAgICAgICAgICAge2lucHV0czoge2E6IGltYWdJbmZvLCBiOiBzaXplSW5mb0NvcHl9LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSkgYXNcbiAgICAgICAgICBUZW5zb3JJbmZvO1xuXG4gICAgICBjb25zdCBkaXZSZWFsVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChkaXZSZWFsSW5mby5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG4gICAgICBjb25zdCBkaXZJbWFnVmFscyA9XG4gICAgICAgICAgY3B1QmFja2VuZC5kYXRhLmdldChkaXZJbWFnSW5mby5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG5cbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbEluZm8pO1xuICAgICAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnSW5mbyk7XG4gICAgICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHNpemVJbmZvKTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oc2l6ZUluZm9Db3B5KTtcbiAgICAgIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZGl2UmVhbEluZm8pO1xuICAgICAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhkaXZJbWFnSW5mbyk7XG5cbiAgICAgIHJldHVybiB7cmVhbDogZGl2UmVhbFZhbHMsIGltYWc6IGRpdkltYWdWYWxzfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRhdGEgPSBiYWNrZW5kX3V0aWwubWVyZ2VSZWFsQW5kSW1hZ0FycmF5cyhyZWFsVmFscywgaW1hZ1ZhbHMpO1xuXG4gICAgY29uc3QgcmF3T3V0cHV0ID1cbiAgICAgICAgZm91cmllclRyYW5zZm9ybUJ5TWF0bXVsKGRhdGEsIGlucHV0U2l6ZSwgaW52ZXJzZSkgYXMgRmxvYXQzMkFycmF5O1xuXG4gICAgcmV0dXJuIGJhY2tlbmRfdXRpbC5zcGxpdFJlYWxBbmRJbWFnQXJyYXlzKHJhd091dHB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNFeHBvbmVudE9mMihzaXplOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChzaXplICYgc2l6ZSAtIDEpID09PSAwO1xufVxuXG4vLyBGRlQgdXNpbmcgQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBvbiByYWRpeCAyIGRpbWVuc2lvbmFsIGlucHV0LlxuZnVuY3Rpb24gZmZ0UmFkaXgyKFxuICAgIHJlYWxWYWxzOiBGbG9hdDMyQXJyYXksIGltYWdWYWxzOiBGbG9hdDMyQXJyYXksIHNpemU6IG51bWJlcixcbiAgICBpbnZlcnNlOiBib29sZWFuLFxuICAgIGNwdUJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVKToge3JlYWw6IEZsb2F0MzJBcnJheSwgaW1hZzogRmxvYXQzMkFycmF5fSB7XG4gIGlmIChzaXplID09PSAxKSB7XG4gICAgcmV0dXJuIHtyZWFsOiByZWFsVmFscywgaW1hZzogaW1hZ1ZhbHN9O1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGJhY2tlbmRfdXRpbC5tZXJnZVJlYWxBbmRJbWFnQXJyYXlzKHJlYWxWYWxzLCBpbWFnVmFscyk7XG5cbiAgY29uc3QgaGFsZiA9IHNpemUgLyAyO1xuXG4gIGNvbnN0IGV2ZW5Db21wbGV4ID0gYmFja2VuZF91dGlsLmNvbXBsZXhXaXRoRXZlbkluZGV4KGRhdGEpO1xuXG4gIGNvbnN0IGV2ZW5SZWFsVmFscyA9IGV2ZW5Db21wbGV4LnJlYWw7XG4gIGNvbnN0IGV2ZW5JbWFnVmFscyA9IGV2ZW5Db21wbGV4LmltYWc7XG5cbiAgY29uc3QgZXZlblNoYXBlID0gW2V2ZW5SZWFsVmFscy5sZW5ndGhdO1xuXG4gIGNvbnN0IGV2ZW5SZWFsSW5mbyA9XG4gICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGV2ZW5TaGFwZSwgJ2Zsb2F0MzInLCBldmVuUmVhbFZhbHMpO1xuICBjb25zdCBldmVuSW1hZ0luZm8gPVxuICAgICAgY3B1QmFja2VuZC5tYWtlVGVuc29ySW5mbyhldmVuU2hhcGUsICdmbG9hdDMyJywgZXZlbkltYWdWYWxzKTtcblxuICBjb25zdCBldmVuVGVuc29ySW5mbyA9IGNvbXBsZXgoXG4gICAgICB7aW5wdXRzOiB7cmVhbDogZXZlblJlYWxJbmZvLCBpbWFnOiBldmVuSW1hZ0luZm99LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSk7XG5cbiAgY29uc3Qgb2RkQ29tcGxleCA9IGJhY2tlbmRfdXRpbC5jb21wbGV4V2l0aE9kZEluZGV4KGRhdGEpO1xuXG4gIGNvbnN0IG9kZFJlYWxWYWxzID0gb2RkQ29tcGxleC5yZWFsO1xuICBjb25zdCBvZGRJbWFnVmFscyA9IG9kZENvbXBsZXguaW1hZztcblxuICBjb25zdCBvZGRTaGFwZSA9IFtvZGRSZWFsVmFscy5sZW5ndGhdO1xuXG4gIGNvbnN0IG9kZFJlYWxJbmZvID1cbiAgICAgIGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8ob2RkU2hhcGUsICdmbG9hdDMyJywgb2RkUmVhbFZhbHMpO1xuICBjb25zdCBvZGRJbWFnSW5mbyA9XG4gICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG9kZFNoYXBlLCAnZmxvYXQzMicsIG9kZEltYWdWYWxzKTtcblxuICBjb25zdCBvZGRUZW5zb3JJbmZvID0gY29tcGxleChcbiAgICAgIHtpbnB1dHM6IHtyZWFsOiBvZGRSZWFsSW5mbywgaW1hZzogb2RkSW1hZ0luZm99LCBiYWNrZW5kOiBjcHVCYWNrZW5kfSk7XG5cbiAgLy8gUmVjdXJzaXZlIGNhbGwgZm9yIGhhbGYgcGFydCBvZiBvcmlnaW5hbCBpbnB1dC5cbiAgY29uc3QgJGV2ZW5Db21wbGV4ID1cbiAgICAgIGZmdFJhZGl4MihldmVuUmVhbFZhbHMsIGV2ZW5JbWFnVmFscywgaGFsZiwgaW52ZXJzZSwgY3B1QmFja2VuZCk7XG5cbiAgY29uc3QgJGV2ZW5SZWFsVmFscyA9ICRldmVuQ29tcGxleC5yZWFsO1xuICBjb25zdCAkZXZlbkltYWdWYWxzID0gJGV2ZW5Db21wbGV4LmltYWc7XG5cbiAgY29uc3QgJGV2ZW5TaGFwZSA9IFskZXZlblJlYWxWYWxzLmxlbmd0aF07XG5cbiAgY29uc3QgJGV2ZW5SZWFsSW5mbyA9XG4gICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKCRldmVuU2hhcGUsICdmbG9hdDMyJywgJGV2ZW5SZWFsVmFscyk7XG4gIGNvbnN0ICRldmVuSW1hZ0luZm8gPVxuICAgICAgY3B1QmFja2VuZC5tYWtlVGVuc29ySW5mbygkZXZlblNoYXBlLCAnZmxvYXQzMicsICRldmVuSW1hZ1ZhbHMpO1xuXG4gIGNvbnN0ICRldmVuVGVuc29ySW5mbyA9IGNvbXBsZXgoe1xuICAgIGlucHV0czoge3JlYWw6ICRldmVuUmVhbEluZm8sIGltYWc6ICRldmVuSW1hZ0luZm99LFxuICAgIGJhY2tlbmQ6IGNwdUJhY2tlbmRcbiAgfSk7XG5cbiAgY29uc3QgJG9kZENvbXBsZXggPVxuICAgICAgZmZ0UmFkaXgyKG9kZFJlYWxWYWxzLCBvZGRJbWFnVmFscywgaGFsZiwgaW52ZXJzZSwgY3B1QmFja2VuZCk7XG5cbiAgY29uc3QgJG9kZFJlYWxWYWxzID0gJG9kZENvbXBsZXgucmVhbDtcbiAgY29uc3QgJG9kZEltYWdWYWxzID0gJG9kZENvbXBsZXguaW1hZztcblxuICBjb25zdCAkb2RkU2hhcGUgPSBbJG9kZFJlYWxWYWxzLmxlbmd0aF07XG5cbiAgY29uc3QgJG9kZFJlYWxJbmZvID1cbiAgICAgIGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8oJG9kZFNoYXBlLCAnZmxvYXQzMicsICRvZGRSZWFsVmFscyk7XG4gIGNvbnN0ICRvZGRJbWFnSW5mbyA9XG4gICAgICBjcHVCYWNrZW5kLm1ha2VUZW5zb3JJbmZvKCRvZGRTaGFwZSwgJ2Zsb2F0MzInLCAkb2RkSW1hZ1ZhbHMpO1xuXG4gIGNvbnN0ICRvZGRUZW5zb3JJbmZvID0gY29tcGxleChcbiAgICAgIHtpbnB1dHM6IHtyZWFsOiAkb2RkUmVhbEluZm8sIGltYWc6ICRvZGRJbWFnSW5mb30sIGJhY2tlbmQ6IGNwdUJhY2tlbmR9KTtcblxuICBjb25zdCBlID0gYmFja2VuZF91dGlsLmV4cG9uZW50cyhzaXplLCBpbnZlcnNlKTtcbiAgY29uc3QgZVNoYXBlID0gW2UucmVhbC5sZW5ndGhdO1xuXG4gIGNvbnN0IGVSZWFsSW5mbyA9IGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8oZVNoYXBlLCAnZmxvYXQzMicsIGUucmVhbCk7XG4gIGNvbnN0IGVJbWFnSW5mbyA9IGNwdUJhY2tlbmQubWFrZVRlbnNvckluZm8oZVNoYXBlLCAnZmxvYXQzMicsIGUuaW1hZyk7XG5cbiAgY29uc3QgY29tcGxleEluZm8gPSBjb21wbGV4KFxuICAgICAge2lucHV0czoge3JlYWw6IGVSZWFsSW5mbywgaW1hZzogZUltYWdJbmZvfSwgYmFja2VuZDogY3B1QmFja2VuZH0pO1xuXG4gIGNvbnN0IGV4cG9uZW50SW5mbyA9XG4gICAgICBtdWx0aXBseShcbiAgICAgICAgICB7aW5wdXRzOiB7YTogY29tcGxleEluZm8sIGI6ICRvZGRUZW5zb3JJbmZvfSwgYmFja2VuZDogY3B1QmFja2VuZH0pIGFzXG4gICAgICBUZW5zb3JJbmZvO1xuXG4gIGNvbnN0IGFkZFBhcnQgPSBhZGQoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHthOiAkZXZlblRlbnNvckluZm8sIGI6IGV4cG9uZW50SW5mb30sXG4gICAgICAgICAgICAgICAgICAgIGJhY2tlbmQ6IGNwdUJhY2tlbmRcbiAgICAgICAgICAgICAgICAgIH0pIGFzIFRlbnNvckluZm87XG4gIGNvbnN0IHN1YlBhcnQgPSBzdWIoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHthOiAkZXZlblRlbnNvckluZm8sIGI6IGV4cG9uZW50SW5mb30sXG4gICAgICAgICAgICAgICAgICAgIGJhY2tlbmQ6IGNwdUJhY2tlbmRcbiAgICAgICAgICAgICAgICAgIH0pIGFzIFRlbnNvckluZm87XG5cbiAgY29uc3QgYWRkUGFydFJlYWwgPSByZWFsKHtpbnB1dHM6IHtpbnB1dDogYWRkUGFydH0sIGJhY2tlbmQ6IGNwdUJhY2tlbmR9KTtcbiAgY29uc3Qgc3ViUGFydFJlYWwgPSByZWFsKHtpbnB1dHM6IHtpbnB1dDogc3ViUGFydH0sIGJhY2tlbmQ6IGNwdUJhY2tlbmR9KTtcblxuICBjb25zdCBhZGRQYXJ0SW1hZyA9IGltYWcoe2lucHV0czoge2lucHV0OiBhZGRQYXJ0fSwgYmFja2VuZDogY3B1QmFja2VuZH0pO1xuICBjb25zdCBzdWJQYXJ0SW1hZyA9IGltYWcoe2lucHV0czoge2lucHV0OiBzdWJQYXJ0fSwgYmFja2VuZDogY3B1QmFja2VuZH0pO1xuXG4gIGNvbnN0ICRyZWFsID0gY29uY2F0KHtcbiAgICBpbnB1dHM6IFthZGRQYXJ0UmVhbCBhcyBUZW5zb3IsIHN1YlBhcnRSZWFsIGFzIFRlbnNvcl0sXG4gICAgYmFja2VuZDogY3B1QmFja2VuZCxcbiAgICBhdHRyczoge2F4aXM6IDB9XG4gIH0pO1xuICBjb25zdCAkaW1hZyA9IGNvbmNhdCh7XG4gICAgaW5wdXRzOiBbYWRkUGFydEltYWcgYXMgVGVuc29yLCBzdWJQYXJ0SW1hZyBhcyBUZW5zb3JdLFxuICAgIGJhY2tlbmQ6IGNwdUJhY2tlbmQsXG4gICAgYXR0cnM6IHtheGlzOiAwfVxuICB9KTtcblxuICBjb25zdCAkcmVhbFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KCRyZWFsLmRhdGFJZCkudmFsdWVzIGFzIEZsb2F0MzJBcnJheTtcbiAgY29uc3QgJGltYWdWYWxzID0gY3B1QmFja2VuZC5kYXRhLmdldCgkaW1hZy5kYXRhSWQpLnZhbHVlcyBhcyBGbG9hdDMyQXJyYXk7XG5cbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhldmVuUmVhbEluZm8pO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGV2ZW5JbWFnSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZXZlblRlbnNvckluZm8pO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKG9kZFJlYWxJbmZvKTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhvZGRJbWFnSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ob2RkVGVuc29ySW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGV2ZW5SZWFsSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGV2ZW5JbWFnSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJGV2ZW5UZW5zb3JJbmZvKTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbygkb2RkUmVhbEluZm8pO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKCRvZGRJbWFnSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJG9kZFRlbnNvckluZm8pO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGVSZWFsSW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZUltYWdJbmZvKTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhjb21wbGV4SW5mbyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZXhwb25lbnRJbmZvKTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhhZGRQYXJ0KTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhzdWJQYXJ0KTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhhZGRQYXJ0UmVhbCk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYWRkUGFydEltYWcpO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHN1YlBhcnRSZWFsKTtcbiAgY3B1QmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhzdWJQYXJ0SW1hZyk7XG4gIGNwdUJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oJHJlYWwpO1xuICBjcHVCYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKCRpbWFnKTtcblxuICByZXR1cm4ge3JlYWw6ICRyZWFsVmFscywgaW1hZzogJGltYWdWYWxzfTtcbn1cblxuLy8gQ2FsY3VsYXRlIGZvdXJpZXIgdHJhbnNmb3JtIGJ5IG11bHRwbHlpbmcgc2ludXNvaWQgbWF0cml4LlxuZnVuY3Rpb24gZm91cmllclRyYW5zZm9ybUJ5TWF0bXVsKFxuICAgIGRhdGE6IFR5cGVkQXJyYXksIHNpemU6IG51bWJlciwgaW52ZXJzZTogYm9vbGVhbik6IFR5cGVkQXJyYXkge1xuICBjb25zdCByZXQgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAyKTtcbiAgLy8gVE9ETzogVXNlIG1hdG11bCBpbnN0ZWFkIG9uY2UgaXQgc3VwcG9ydHMgY29tcGxleDY0IHR5cGUuXG4gIGZvciAobGV0IHIgPSAwOyByIDwgc2l6ZTsgcisrKSB7XG4gICAgbGV0IHJlYWwgPSAwLjA7XG4gICAgbGV0IGltYWcgPSAwLjA7XG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzaXplOyBjKyspIHtcbiAgICAgIGNvbnN0IGUgPSBiYWNrZW5kX3V0aWwuZXhwb25lbnQociAqIGMsIHNpemUsIGludmVyc2UpO1xuICAgICAgY29uc3QgdGVybSA9IGJhY2tlbmRfdXRpbC5nZXRDb21wbGV4V2l0aEluZGV4KGRhdGEgYXMgRmxvYXQzMkFycmF5LCBjKTtcbiAgICAgIHJlYWwgKz0gdGVybS5yZWFsICogZS5yZWFsIC0gdGVybS5pbWFnICogZS5pbWFnO1xuICAgICAgaW1hZyArPSB0ZXJtLnJlYWwgKiBlLmltYWcgKyB0ZXJtLmltYWcgKiBlLnJlYWw7XG4gICAgfVxuICAgIGlmIChpbnZlcnNlKSB7XG4gICAgICByZWFsIC89IHNpemU7XG4gICAgICBpbWFnIC89IHNpemU7XG4gICAgfVxuICAgIGJhY2tlbmRfdXRpbC5hc3NpZ25Ub1R5cGVkQXJyYXkocmV0LCByZWFsLCBpbWFnLCByKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FFT, util } from '@tensorflow/tfjs-core';\nimport { fftBatch } from '../utils/fft_utils';\nimport { reshape } from './Reshape';\nexport function fft(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const inputSize = util.sizeFromShape(input.shape);\n // Collapse all outer dimensions to a single batch dimension.\n const innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = inputSize / innerDimensionSize;\n const input2D = reshape({\n inputs: { x: input },\n backend,\n attrs: { shape: [batch, innerDimensionSize] }\n });\n const result = fftBatch(input2D, false, backend);\n const resultReshaped = reshape({ inputs: { x: result }, backend, attrs: { shape: input.shape } });\n backend.disposeIntermediateTensorInfo(input2D);\n backend.disposeIntermediateTensorInfo(result);\n return resultReshaped;\n}\nexport const fftConfig = {\n kernelName: FFT,\n backendName: 'cpu',\n kernelFunc: fft\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkZULmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9GRlQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLEdBQUcsRUFBbUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFrRDtJQUVwRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELDZEQUE2RDtJQUM3RCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0lBRTdDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0QixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFDO1FBQ2xCLE9BQU87UUFDUCxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBQztLQUM1QyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRCxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV6RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlDLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RkZULCBGRlRJbnB1dHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHtmZnRCYXRjaH0gZnJvbSAnLi4vdXRpbHMvZmZ0X3V0aWxzJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZmdChhcmdzOiB7aW5wdXRzOiBGRlRJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2lucHV0fSA9IGlucHV0cztcblxuICBjb25zdCBpbnB1dFNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoaW5wdXQuc2hhcGUpO1xuXG4gIC8vIENvbGxhcHNlIGFsbCBvdXRlciBkaW1lbnNpb25zIHRvIGEgc2luZ2xlIGJhdGNoIGRpbWVuc2lvbi5cbiAgY29uc3QgaW5uZXJEaW1lbnNpb25TaXplID0gaW5wdXQuc2hhcGVbaW5wdXQuc2hhcGUubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGJhdGNoID0gaW5wdXRTaXplIC8gaW5uZXJEaW1lbnNpb25TaXplO1xuXG4gIGNvbnN0IGlucHV0MkQgPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4OiBpbnB1dH0sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge3NoYXBlOiBbYmF0Y2gsIGlubmVyRGltZW5zaW9uU2l6ZV19XG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGZmdEJhdGNoKGlucHV0MkQsIGZhbHNlLCBiYWNrZW5kKTtcblxuICBjb25zdCByZXN1bHRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBpbnB1dC5zaGFwZX19KTtcblxuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGlucHV0MkQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdFJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgZmZ0Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZGVCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBmZnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Fill, util } from '@tensorflow/tfjs-core';\nexport function fill(args) {\n const { backend, attrs } = args;\n const { shape, value, dtype } = attrs;\n const $dtype = dtype || util.inferDtype(value);\n const values = util.getArrayFromDType($dtype, util.sizeFromShape(shape));\n fillValues(values, value, $dtype);\n return backend.makeTensorInfo(shape, $dtype, values);\n}\nexport const fillConfig = {\n kernelName: Fill,\n backendName: 'cpu',\n kernelFunc: fill\n};\nfunction fillValues(values, value, dtype) {\n if (dtype === 'string') {\n values.fill(value);\n }\n else {\n values.fill(value);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRmlsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVCLElBQUksRUFBK0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJcEksTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFpRDtJQUVwRSxNQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFcEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekUsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFbEMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUM7QUFFRixTQUFTLFVBQVUsQ0FDZixNQUFrQixFQUFFLEtBQW9CLEVBQUUsS0FBZTtJQUMzRCxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDckIsTUFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7S0FDNUM7U0FBTTtRQUNKLE1BQXFCLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO0tBQzlDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtEYXRhVHlwZSwgRGF0YVZhbHVlcywgRmlsbCwgRmlsbEF0dHJzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGwoYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogRmlsbEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7c2hhcGUsIHZhbHVlLCBkdHlwZX0gPSBhdHRycztcblxuICBjb25zdCAkZHR5cGUgPSBkdHlwZSB8fCB1dGlsLmluZmVyRHR5cGUodmFsdWUpO1xuICBjb25zdCB2YWx1ZXMgPSB1dGlsLmdldEFycmF5RnJvbURUeXBlKCRkdHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKHNoYXBlKSk7XG4gIGZpbGxWYWx1ZXModmFsdWVzLCB2YWx1ZSwgJGR0eXBlKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhzaGFwZSwgJGR0eXBlLCB2YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgZmlsbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGaWxsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGZpbGwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuXG5mdW5jdGlvbiBmaWxsVmFsdWVzKFxuICAgIHZhbHVlczogRGF0YVZhbHVlcywgdmFsdWU6IHN0cmluZ3xudW1iZXIsIGR0eXBlOiBEYXRhVHlwZSk6IHZvaWQge1xuICBpZiAoZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgKHZhbHVlcyBhcyBzdHJpbmdbXSkuZmlsbCh2YWx1ZSBhcyBzdHJpbmcpO1xuICB9IGVsc2Uge1xuICAgICh2YWx1ZXMgYXMgVHlwZWRBcnJheSkuZmlsbCh2YWx1ZSBhcyBudW1iZXIpO1xuICB9XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FlipLeftRight, util } from '@tensorflow/tfjs-core';\nexport const flipLeftRightConfig = {\n kernelName: FlipLeftRight,\n backendName: 'cpu',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { image } = inputs;\n const cpuBackend = backend;\n const output = util.getTypedArrayFromDType(image.dtype, util.sizeFromShape(image.shape));\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const imageVals = cpuBackend.data.get(image.dataId).values;\n for (let batchIdx = 0; batchIdx < batch; batchIdx++) {\n const batchOffset = batchIdx * imageWidth * imageHeight * numChannels;\n for (let row = 0; row < imageHeight; row++) {\n const rowOffset = row * (imageWidth * numChannels);\n for (let col = 0; col < imageWidth; col++) {\n const colOffset = col * numChannels;\n for (let channel = 0; channel < numChannels; channel++) {\n const coordX = Math.round(imageWidth - col - 1);\n const outIdx = batchOffset + rowOffset + colOffset + channel;\n let outputValue = imageVals[outIdx];\n // If the coordinate position falls within the image boundaries...\n if (coordX >= 0 && coordX < imageWidth) {\n // set the output to the image value at the coordinate position.\n const rotatedColOffset = coordX * numChannels;\n const imageIdx = batchOffset + rowOffset + rotatedColOffset + channel;\n outputValue = imageVals[imageIdx];\n }\n output[outIdx] = outputValue;\n }\n }\n }\n }\n const dataId = cpuBackend.write(output, image.shape, image.dtype);\n return { dataId, shape: image.shape, dtype: image.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxpcExlZnRSaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvRmxpcExlZnRSaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsYUFBYSxFQUF1QixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkvRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUI7SUFDL0MsVUFBVSxFQUFFLGFBQWE7SUFDekIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQTZCLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsT0FBeUIsQ0FBQztRQUU3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3RDLEtBQUssQ0FBQyxLQUF3QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFbEUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7UUFFekUsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFdBQVcsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFFdEUsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUVuRCxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUN6QyxNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO29CQUVwQyxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ2hELE1BQU0sTUFBTSxHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQzt3QkFFN0QsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNwQyxrRUFBa0U7d0JBQ2xFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLEdBQUcsVUFBVSxFQUFFOzRCQUN0QyxnRUFBZ0U7NEJBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxHQUFHLFdBQVcsQ0FBQzs0QkFDOUMsTUFBTSxRQUFRLEdBQ1YsV0FBVyxHQUFHLFNBQVMsR0FBRyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7NEJBQ3pELFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ25DO3dCQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7cUJBQzlCO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7RmxpcExlZnRSaWdodCwgRmxpcExlZnRSaWdodElucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5leHBvcnQgY29uc3QgZmxpcExlZnRSaWdodENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBGbGlwTGVmdFJpZ2h0LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6ICh7aW5wdXRzLCBhdHRycywgYmFja2VuZH0pID0+IHtcbiAgICBjb25zdCB7aW1hZ2V9ID0gaW5wdXRzIGFzIEZsaXBMZWZ0UmlnaHRJbnB1dHM7XG4gICAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRDUFU7XG5cbiAgICBjb25zdCBvdXRwdXQgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoXG4gICAgICAgIGltYWdlLmR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKGltYWdlLnNoYXBlKSk7XG4gICAgY29uc3QgW2JhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgbnVtQ2hhbm5lbHNdID0gaW1hZ2Uuc2hhcGU7XG5cbiAgICBjb25zdCBpbWFnZVZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KGltYWdlLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgICBmb3IgKGxldCBiYXRjaElkeCA9IDA7IGJhdGNoSWR4IDwgYmF0Y2g7IGJhdGNoSWR4KyspIHtcbiAgICAgIGNvbnN0IGJhdGNoT2Zmc2V0ID0gYmF0Y2hJZHggKiBpbWFnZVdpZHRoICogaW1hZ2VIZWlnaHQgKiBudW1DaGFubmVscztcblxuICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgaW1hZ2VIZWlnaHQ7IHJvdysrKSB7XG4gICAgICAgIGNvbnN0IHJvd09mZnNldCA9IHJvdyAqIChpbWFnZVdpZHRoICogbnVtQ2hhbm5lbHMpO1xuXG4gICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGltYWdlV2lkdGg7IGNvbCsrKSB7XG4gICAgICAgICAgY29uc3QgY29sT2Zmc2V0ID0gY29sICogbnVtQ2hhbm5lbHM7XG5cbiAgICAgICAgICBmb3IgKGxldCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG51bUNoYW5uZWxzOyBjaGFubmVsKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkWCA9IE1hdGgucm91bmQoaW1hZ2VXaWR0aCAtIGNvbCAtIDEpO1xuICAgICAgICAgICAgY29uc3Qgb3V0SWR4ID0gYmF0Y2hPZmZzZXQgKyByb3dPZmZzZXQgKyBjb2xPZmZzZXQgKyBjaGFubmVsO1xuXG4gICAgICAgICAgICBsZXQgb3V0cHV0VmFsdWUgPSBpbWFnZVZhbHNbb3V0SWR4XTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29yZGluYXRlIHBvc2l0aW9uIGZhbGxzIHdpdGhpbiB0aGUgaW1hZ2UgYm91bmRhcmllcy4uLlxuICAgICAgICAgICAgaWYgKGNvb3JkWCA+PSAwICYmIGNvb3JkWCA8IGltYWdlV2lkdGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHRoZSBvdXRwdXQgdG8gdGhlIGltYWdlIHZhbHVlIGF0IHRoZSBjb29yZGluYXRlIHBvc2l0aW9uLlxuICAgICAgICAgICAgICBjb25zdCByb3RhdGVkQ29sT2Zmc2V0ID0gY29vcmRYICogbnVtQ2hhbm5lbHM7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlSWR4ID1cbiAgICAgICAgICAgICAgICAgIGJhdGNoT2Zmc2V0ICsgcm93T2Zmc2V0ICsgcm90YXRlZENvbE9mZnNldCArIGNoYW5uZWw7XG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gaW1hZ2VWYWxzW2ltYWdlSWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dHB1dFtvdXRJZHhdID0gb3V0cHV0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUlkID0gY3B1QmFja2VuZC53cml0ZShvdXRwdXQsIGltYWdlLnNoYXBlLCBpbWFnZS5kdHlwZSk7XG4gICAgcmV0dXJuIHtkYXRhSWQsIHNoYXBlOiBpbWFnZS5zaGFwZSwgZHR5cGU6IGltYWdlLmR0eXBlfTtcbiAgfVxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FusedConv2D } from '@tensorflow/tfjs-core';\nimport { applyActivation } from '../utils/fused_utils';\nimport { add } from './Add';\nimport { conv2D } from './Conv2D';\nimport { reshape } from './Reshape';\nexport function fusedConv2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n let result = conv2D({\n inputs: { x, filter },\n backend,\n attrs: { strides, pad, dataFormat, dilations, dimRoundingMode }\n });\n if (bias) {\n const resultOld = result;\n // For NCHW format, if bias is a 1-D tensor, it is supposed to be aligned\n // to the channel of the conv2d's result; if the bias is a scalar, the\n // bias_add is computed as if the bias was broadcasted to the shape of the\n // conv2d's result.\n if (dataFormat === 'NCHW' && bias.shape.length === 1 &&\n bias.shape[0] !== 1) {\n const reshapedBias = reshape({ inputs: { x: bias }, backend, attrs: { shape: [bias.shape[0], 1, 1] } });\n result =\n add({ inputs: { a: result, b: reshapedBias }, backend });\n backend.disposeIntermediateTensorInfo(reshapedBias);\n }\n else {\n // This condition handles NHWC and NCHW (scalar case). The only other case\n // for NCHW (1D case) is handled above.\n result = add({ inputs: { a: result, b: bias }, backend });\n }\n backend.disposeIntermediateTensorInfo(resultOld);\n }\n if (activation) {\n const resultOld = result;\n // For NCHW format, if PReLu activation weights is a 1-D tensor, it is\n // supposed to be aligned with the channel of the conv2d's result. For other\n // cases, whether NCHW or NHWC data format, the conv2d result is\n // already aligned with the activation weights.\n if (dataFormat === 'NCHW' && activation === 'prelu' &&\n preluActivationWeights.shape.length === 1 &&\n preluActivationWeights.shape[0] !== 1) {\n const reshapedAlpha = reshape({\n inputs: { x: preluActivationWeights },\n backend,\n attrs: { shape: [preluActivationWeights.shape[0], 1, 1] }\n });\n result = applyActivation(backend, result, activation, reshapedAlpha, leakyreluAlpha);\n backend.disposeIntermediateTensorInfo(reshapedAlpha);\n }\n else {\n result = applyActivation(backend, result, activation, preluActivationWeights, leakyreluAlpha);\n }\n backend.disposeIntermediateTensorInfo(resultOld);\n }\n return result;\n}\nexport const fusedConv2DConfig = {\n kernelName: FusedConv2D,\n backendName: 'cpu',\n kernelFunc: fusedConv2D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWRDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Z1c2VkQ29udjJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxXQUFXLEVBQTRFLE1BQU0sdUJBQXVCLENBQUM7QUFHN0gsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3pELE1BQU0sRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2YsR0FBRyxLQUFLLENBQUM7SUFFVixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDbEIsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQztRQUNuQixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBQztLQUM5RCxDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksRUFBRTtRQUNSLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUN6Qix5RUFBeUU7UUFDekUsc0VBQXNFO1FBQ3RFLDBFQUEwRTtRQUMxRSxtQkFBbUI7UUFDbkIsSUFBSSxVQUFVLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUN4QixFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7WUFDekUsTUFBTTtnQkFDRixHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsMEVBQTBFO1lBQzFFLHVDQUF1QztZQUN2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztTQUNyRTtRQUNELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUVELElBQUksVUFBVSxFQUFFO1FBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLHNFQUFzRTtRQUN0RSw0RUFBNEU7UUFDNUUsZ0VBQWdFO1FBQ2hFLCtDQUErQztRQUMvQyxJQUFJLFVBQVUsS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLE9BQU87WUFDL0Msc0JBQXNCLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3pDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO2dCQUM1QixNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUM7Z0JBQ25DLE9BQU87Z0JBQ1AsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQzthQUN4RCxDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsZUFBZSxDQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxNQUFNLEdBQUcsZUFBZSxDQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMxRTtRQUNELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RnVzZWRDb252MkQsIEZ1c2VkQ29udjJEQXR0cnMsIEZ1c2VkQ29udjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXBwbHlBY3RpdmF0aW9ufSBmcm9tICcuLi91dGlscy9mdXNlZF91dGlscyc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi9BZGQnO1xuaW1wb3J0IHtjb252MkR9IGZyb20gJy4vQ29udjJEJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZ1c2VkQ29udjJEKGFyZ3M6IHtcbiAgaW5wdXRzOiBGdXNlZENvbnYyRElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBGdXNlZENvbnYyREF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXIsIGJpYXMsIHByZWx1QWN0aXZhdGlvbldlaWdodHN9ID0gaW5wdXRzO1xuICBjb25zdCB7XG4gICAgc3RyaWRlcyxcbiAgICBwYWQsXG4gICAgZGF0YUZvcm1hdCxcbiAgICBkaWxhdGlvbnMsXG4gICAgZGltUm91bmRpbmdNb2RlLFxuICAgIGFjdGl2YXRpb24sXG4gICAgbGVha3lyZWx1QWxwaGFcbiAgfSA9IGF0dHJzO1xuXG4gIGxldCByZXN1bHQgPSBjb252MkQoe1xuICAgIGlucHV0czoge3gsIGZpbHRlcn0sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9XG4gIH0pO1xuXG4gIGlmIChiaWFzKSB7XG4gICAgY29uc3QgcmVzdWx0T2xkID0gcmVzdWx0O1xuICAgIC8vIEZvciBOQ0hXIGZvcm1hdCwgaWYgYmlhcyBpcyBhIDEtRCB0ZW5zb3IsIGl0IGlzIHN1cHBvc2VkIHRvIGJlIGFsaWduZWRcbiAgICAvLyB0byB0aGUgY2hhbm5lbCBvZiB0aGUgY29udjJkJ3MgcmVzdWx0OyBpZiB0aGUgYmlhcyBpcyBhIHNjYWxhciwgdGhlXG4gICAgLy8gYmlhc19hZGQgaXMgY29tcHV0ZWQgYXMgaWYgdGhlIGJpYXMgd2FzIGJyb2FkY2FzdGVkIHRvIHRoZSBzaGFwZSBvZiB0aGVcbiAgICAvLyBjb252MmQncyByZXN1bHQuXG4gICAgaWYgKGRhdGFGb3JtYXQgPT09ICdOQ0hXJyAmJiBiaWFzLnNoYXBlLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBiaWFzLnNoYXBlWzBdICE9PSAxKSB7XG4gICAgICBjb25zdCByZXNoYXBlZEJpYXMgPSByZXNoYXBlKFxuICAgICAgICAgIHtpbnB1dHM6IHt4OiBiaWFzfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogW2JpYXMuc2hhcGVbMF0sIDEsIDFdfX0pO1xuICAgICAgcmVzdWx0ID1cbiAgICAgICAgICBhZGQoe2lucHV0czoge2E6IHJlc3VsdCwgYjogcmVzaGFwZWRCaWFzfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc2hhcGVkQmlhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY29uZGl0aW9uIGhhbmRsZXMgTkhXQyBhbmQgTkNIVyAoc2NhbGFyIGNhc2UpLiBUaGUgb25seSBvdGhlciBjYXNlXG4gICAgICAvLyBmb3IgTkNIVyAoMUQgY2FzZSkgaXMgaGFuZGxlZCBhYm92ZS5cbiAgICAgIHJlc3VsdCA9IGFkZCh7aW5wdXRzOiB7YTogcmVzdWx0LCBiOiBiaWFzfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgfVxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVzdWx0T2xkKTtcbiAgfVxuXG4gIGlmIChhY3RpdmF0aW9uKSB7XG4gICAgY29uc3QgcmVzdWx0T2xkID0gcmVzdWx0O1xuICAgIC8vIEZvciBOQ0hXIGZvcm1hdCwgaWYgUFJlTHUgYWN0aXZhdGlvbiB3ZWlnaHRzIGlzIGEgMS1EIHRlbnNvciwgaXQgaXNcbiAgICAvLyBzdXBwb3NlZCB0byBiZSBhbGlnbmVkIHdpdGggdGhlIGNoYW5uZWwgb2YgdGhlIGNvbnYyZCdzIHJlc3VsdC4gRm9yIG90aGVyXG4gICAgLy8gY2FzZXMsIHdoZXRoZXIgTkNIVyBvciBOSFdDIGRhdGEgZm9ybWF0LCB0aGUgY29udjJkIHJlc3VsdCBpc1xuICAgIC8vIGFscmVhZHkgYWxpZ25lZCB3aXRoIHRoZSBhY3RpdmF0aW9uIHdlaWdodHMuXG4gICAgaWYgKGRhdGFGb3JtYXQgPT09ICdOQ0hXJyAmJiBhY3RpdmF0aW9uID09PSAncHJlbHUnICYmXG4gICAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHMuc2hhcGUubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHByZWx1QWN0aXZhdGlvbldlaWdodHMuc2hhcGVbMF0gIT09IDEpIHtcbiAgICAgIGNvbnN0IHJlc2hhcGVkQWxwaGEgPSByZXNoYXBlKHtcbiAgICAgICAgaW5wdXRzOiB7eDogcHJlbHVBY3RpdmF0aW9uV2VpZ2h0c30sXG4gICAgICAgIGJhY2tlbmQsXG4gICAgICAgIGF0dHJzOiB7c2hhcGU6IFtwcmVsdUFjdGl2YXRpb25XZWlnaHRzLnNoYXBlWzBdLCAxLCAxXX1cbiAgICAgIH0pO1xuICAgICAgcmVzdWx0ID0gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgIGJhY2tlbmQsIHJlc3VsdCwgYWN0aXZhdGlvbiwgcmVzaGFwZWRBbHBoYSwgbGVha3lyZWx1QWxwaGEpO1xuICAgICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXNoYXBlZEFscGhhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXBwbHlBY3RpdmF0aW9uKFxuICAgICAgICAgIGJhY2tlbmQsIHJlc3VsdCwgYWN0aXZhdGlvbiwgcHJlbHVBY3RpdmF0aW9uV2VpZ2h0cywgbGVha3lyZWx1QWxwaGEpO1xuICAgIH1cbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdE9sZCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgZnVzZWRDb252MkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogRnVzZWRDb252MkQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogZnVzZWRDb252MkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { FusedDepthwiseConv2D } from '@tensorflow/tfjs-core';\nimport { applyActivation } from '../utils/fused_utils';\nimport { add } from './Add';\nimport { depthwiseConv2dNative } from './DepthwiseConv2dNative';\nexport function fusedDepthwiseConv2D(args) {\n const { inputs, backend, attrs } = args;\n const { x, filter, bias, preluActivationWeights } = inputs;\n const { strides, pad, dataFormat, dilations, dimRoundingMode, activation, leakyreluAlpha } = attrs;\n let result = depthwiseConv2dNative({\n inputs: { x, filter },\n backend,\n attrs: { strides, pad, dataFormat, dilations, dimRoundingMode }\n });\n if (bias) {\n const oldResult = result;\n result = add({ inputs: { a: result, b: bias }, backend });\n backend.disposeIntermediateTensorInfo(oldResult);\n }\n if (activation) {\n const oldResult = result;\n result = applyActivation(backend, result, activation, preluActivationWeights, leakyreluAlpha);\n backend.disposeIntermediateTensorInfo(oldResult);\n }\n return result;\n}\nexport const fusedDepthwiseConv2DConfig = {\n kernelName: FusedDepthwiseConv2D,\n backendName: 'cpu',\n kernelFunc: fusedDepthwiseConv2D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVzZWREZXB0aHdpc2VDb252MkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0Z1c2VkRGVwdGh3aXNlQ29udjJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxvQkFBb0IsRUFBOEYsTUFBTSx1QkFBdUIsQ0FBQztBQUd4SixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFJcEM7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3pELE1BQU0sRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEVBQ2YsR0FBRyxLQUFLLENBQUM7SUFFVixJQUFJLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztRQUNqQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDO1FBQ25CLE9BQU87UUFDUCxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFDO0tBQzlELENBQUMsQ0FBQztJQUVILElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUNELElBQUksVUFBVSxFQUFFO1FBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxlQUFlLENBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNsRDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBaUI7SUFDdEQsVUFBVSxFQUFFLG9CQUFvQjtJQUNoQyxXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsb0JBQTZDO0NBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RnVzZWREZXB0aHdpc2VDb252MkQsIEZ1c2VkRGVwdGh3aXNlQ29udjJEQXR0cnMsIEZ1c2VkRGVwdGh3aXNlQ29udjJESW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXBwbHlBY3RpdmF0aW9ufSBmcm9tICcuLi91dGlscy9mdXNlZF91dGlscyc7XG5pbXBvcnQge2FkZH0gZnJvbSAnLi9BZGQnO1xuaW1wb3J0IHtkZXB0aHdpc2VDb252MmROYXRpdmV9IGZyb20gJy4vRGVwdGh3aXNlQ29udjJkTmF0aXZlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZ1c2VkRGVwdGh3aXNlQ29udjJEKGFyZ3M6IHtcbiAgaW5wdXRzOiBGdXNlZERlcHRod2lzZUNvbnYyRElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBGdXNlZERlcHRod2lzZUNvbnYyREF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBmaWx0ZXIsIGJpYXMsIHByZWx1QWN0aXZhdGlvbldlaWdodHN9ID0gaW5wdXRzO1xuICBjb25zdCB7XG4gICAgc3RyaWRlcyxcbiAgICBwYWQsXG4gICAgZGF0YUZvcm1hdCxcbiAgICBkaWxhdGlvbnMsXG4gICAgZGltUm91bmRpbmdNb2RlLFxuICAgIGFjdGl2YXRpb24sXG4gICAgbGVha3lyZWx1QWxwaGFcbiAgfSA9IGF0dHJzO1xuXG4gIGxldCByZXN1bHQgPSBkZXB0aHdpc2VDb252MmROYXRpdmUoe1xuICAgIGlucHV0czoge3gsIGZpbHRlcn0sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge3N0cmlkZXMsIHBhZCwgZGF0YUZvcm1hdCwgZGlsYXRpb25zLCBkaW1Sb3VuZGluZ01vZGV9XG4gIH0pO1xuXG4gIGlmIChiaWFzKSB7XG4gICAgY29uc3Qgb2xkUmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9IGFkZCh7aW5wdXRzOiB7YTogcmVzdWx0LCBiOiBiaWFzfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhvbGRSZXN1bHQpO1xuICB9XG4gIGlmIChhY3RpdmF0aW9uKSB7XG4gICAgY29uc3Qgb2xkUmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9IGFwcGx5QWN0aXZhdGlvbihcbiAgICAgICAgYmFja2VuZCwgcmVzdWx0LCBhY3RpdmF0aW9uLCBwcmVsdUFjdGl2YXRpb25XZWlnaHRzLCBsZWFreXJlbHVBbHBoYSk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhvbGRSZXN1bHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IGZ1c2VkRGVwdGh3aXNlQ29udjJEQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEZ1c2VkRGVwdGh3aXNlQ29udjJELFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGZ1c2VkRGVwdGh3aXNlQ29udjJEIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, GatherNd, util } from '@tensorflow/tfjs-core';\nimport { gatherNdImpl } from './GatherNd_Impl';\nexport function gatherNd(args) {\n const { inputs, backend } = args;\n const { params, indices } = inputs;\n const paramsSize = util.sizeFromShape(params.shape);\n const indicesShape = indices.shape;\n const sliceRank = indicesShape[indicesShape.length - 1];\n const [resultShape, numSlices, sliceSize, strides] = backend_util.prepareAndValidate(params, indices);\n if (numSlices === 0) {\n return backend.makeTensorInfo(resultShape, params.dtype, []);\n }\n const indicesData = backend.data.get(indices.dataId).values;\n const paramsBuf = backend.bufferSync(params);\n const outBuf = gatherNdImpl(indicesData, paramsBuf, params.dtype, numSlices, sliceRank, sliceSize, strides, params.shape, paramsSize);\n return backend.makeTensorInfo(resultShape, params.dtype, outBuf.values);\n}\nexport const gatherNdConfig = {\n kernelName: GatherNd,\n backendName: 'cpu',\n kernelFunc: gatherNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyTmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0dhdGhlck5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUEwRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkzSSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsSUFBdUQ7SUFDekQsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNuQyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQzlDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ25CLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5RDtJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWtCLE1BQU0sQ0FBQyxDQUFDO0lBQzlELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FDdkIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUNyRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUV2QyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgR2F0aGVyTmQsIEdhdGhlck5kSW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhbmssIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtnYXRoZXJOZEltcGx9IGZyb20gJy4vR2F0aGVyTmRfSW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJOZChcbiAgICBhcmdzOiB7aW5wdXRzOiBHYXRoZXJOZElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3BhcmFtcywgaW5kaWNlc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgcGFyYW1zU2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShwYXJhbXMuc2hhcGUpO1xuXG4gIGNvbnN0IGluZGljZXNTaGFwZSA9IGluZGljZXMuc2hhcGU7XG4gIGNvbnN0IHNsaWNlUmFuayA9IGluZGljZXNTaGFwZVtpbmRpY2VzU2hhcGUubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgW3Jlc3VsdFNoYXBlLCBudW1TbGljZXMsIHNsaWNlU2l6ZSwgc3RyaWRlc10gPVxuICAgICAgYmFja2VuZF91dGlsLnByZXBhcmVBbmRWYWxpZGF0ZShwYXJhbXMsIGluZGljZXMpO1xuICBpZiAobnVtU2xpY2VzID09PSAwKSB7XG4gICAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzdWx0U2hhcGUsIHBhcmFtcy5kdHlwZSwgW10pO1xuICB9XG5cbiAgY29uc3QgaW5kaWNlc0RhdGEgPSBiYWNrZW5kLmRhdGEuZ2V0KGluZGljZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgcGFyYW1zQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdmbG9hdDMyJz4ocGFyYW1zKTtcbiAgY29uc3Qgb3V0QnVmID0gZ2F0aGVyTmRJbXBsKFxuICAgICAgaW5kaWNlc0RhdGEsIHBhcmFtc0J1ZiwgcGFyYW1zLmR0eXBlLCBudW1TbGljZXMsIHNsaWNlUmFuaywgc2xpY2VTaXplLFxuICAgICAgc3RyaWRlcywgcGFyYW1zLnNoYXBlLCBwYXJhbXNTaXplKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhyZXN1bHRTaGFwZSwgcGFyYW1zLmR0eXBlLCBvdXRCdWYudmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdhdGhlck5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEdhdGhlck5kLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGdhdGhlck5kIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, GatherV2, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { gatherV2Impl } from './GatherV2_impl';\nimport { reshape } from './Reshape';\nexport function gatherV2(args) {\n const { inputs, backend, attrs } = args;\n const { x, indices } = inputs;\n const { axis, batchDims } = attrs;\n assertNotComplex([x, indices], 'gatherV2');\n // Throw error when any index is out of bound.\n const parsedAxis = util.parseAxisParam(axis, x.shape)[0];\n const indicesVals = backend.data.get(indices.dataId).values;\n const axisDim = x.shape[parsedAxis];\n for (let i = 0; i < indicesVals.length; ++i) {\n const index = indicesVals[i];\n util.assert(index <= axisDim - 1 && index >= 0, () => `GatherV2: the index value ${index} is not in [0, ${axisDim - 1}]`);\n }\n let $batchDims = batchDims;\n if (batchDims == null) {\n $batchDims = 0;\n }\n const indicesSize = util.sizeFromShape(indices.shape);\n const shapeInfo = backend_util.segment_util.collectGatherOpShapeInfo(x, indices, parsedAxis, $batchDims);\n const flattenX = reshape({\n inputs: { x },\n backend,\n attrs: {\n shape: [\n shapeInfo.batchSize, shapeInfo.outerSize, shapeInfo.dimSize,\n shapeInfo.sliceSize\n ]\n }\n });\n const flattenIndex = reshape({\n inputs: { x: indices },\n backend,\n attrs: { shape: [shapeInfo.batchSize, indicesSize / shapeInfo.batchSize] }\n });\n const flattenOutputShape = [\n shapeInfo.batchSize, shapeInfo.outerSize, indicesSize / shapeInfo.batchSize,\n shapeInfo.sliceSize\n ];\n const indicesBuf = backend.bufferSync(flattenIndex);\n const xBuf = backend.bufferSync(flattenX);\n const outBuf = gatherV2Impl(xBuf, indicesBuf, flattenOutputShape);\n backend.disposeIntermediateTensorInfo(flattenX);\n backend.disposeIntermediateTensorInfo(flattenIndex);\n return backend.makeTensorInfo(shapeInfo.outputShape, outBuf.dtype, outBuf.values);\n}\nexport const gatherV2Config = {\n kernelName: GatherV2,\n backendName: 'cpu',\n kernelFunc: gatherV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0aGVyVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0dhdGhlclYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFtRixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwSixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFbEMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUl4QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVoQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUzQyw4Q0FBOEM7SUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzFFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDM0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQ1AsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFDbEMsR0FBRyxFQUFFLENBQ0QsNkJBQTZCLEtBQUssa0JBQWtCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzdFO0lBRUQsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBRTNCLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFdEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsQ0FDaEUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQztRQUNYLE9BQU87UUFDUCxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUU7Z0JBQ0wsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUMzRCxTQUFTLENBQUMsU0FBUzthQUNwQjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO1FBQzNCLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxPQUFPLEVBQUM7UUFDcEIsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBQztLQUN6RSxDQUFDLENBQUM7SUFFSCxNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLFNBQVM7UUFDM0UsU0FBUyxDQUFDLFNBQVM7S0FDcEIsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBRWxFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFcEQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUN6QixTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgR2F0aGVyVjIsIEdhdGhlclYyQXR0cnMsIEdhdGhlclYySW5wdXRzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtnYXRoZXJWMkltcGx9IGZyb20gJy4vR2F0aGVyVjJfaW1wbCc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnYXRoZXJWMihhcmdzOiB7XG4gIGlucHV0czogR2F0aGVyVjJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogR2F0aGVyVjJBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgaW5kaWNlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBiYXRjaERpbXN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChbeCwgaW5kaWNlc10sICdnYXRoZXJWMicpO1xuXG4gIC8vIFRocm93IGVycm9yIHdoZW4gYW55IGluZGV4IGlzIG91dCBvZiBib3VuZC5cbiAgY29uc3QgcGFyc2VkQXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSlbMF07XG4gIGNvbnN0IGluZGljZXNWYWxzID0gYmFja2VuZC5kYXRhLmdldChpbmRpY2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGF4aXNEaW0gPSB4LnNoYXBlW3BhcnNlZEF4aXNdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXNWYWxzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgaW5kZXggPSBpbmRpY2VzVmFsc1tpXTtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgaW5kZXggPD0gYXhpc0RpbSAtIDEgJiYgaW5kZXggPj0gMCxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGBHYXRoZXJWMjogdGhlIGluZGV4IHZhbHVlICR7aW5kZXh9IGlzIG5vdCBpbiBbMCwgJHtheGlzRGltIC0gMX1dYCk7XG4gIH1cblxuICBsZXQgJGJhdGNoRGltcyA9IGJhdGNoRGltcztcblxuICBpZiAoYmF0Y2hEaW1zID09IG51bGwpIHtcbiAgICAkYmF0Y2hEaW1zID0gMDtcbiAgfVxuXG4gIGNvbnN0IGluZGljZXNTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGluZGljZXMuc2hhcGUpO1xuXG4gIGNvbnN0IHNoYXBlSW5mbyA9IGJhY2tlbmRfdXRpbC5zZWdtZW50X3V0aWwuY29sbGVjdEdhdGhlck9wU2hhcGVJbmZvKFxuICAgICAgeCwgaW5kaWNlcywgcGFyc2VkQXhpcywgJGJhdGNoRGltcyk7XG5cbiAgY29uc3QgZmxhdHRlblggPSByZXNoYXBlKHtcbiAgICBpbnB1dHM6IHt4fSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7XG4gICAgICBzaGFwZTogW1xuICAgICAgICBzaGFwZUluZm8uYmF0Y2hTaXplLCBzaGFwZUluZm8ub3V0ZXJTaXplLCBzaGFwZUluZm8uZGltU2l6ZSxcbiAgICAgICAgc2hhcGVJbmZvLnNsaWNlU2l6ZVxuICAgICAgXVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZmxhdHRlbkluZGV4ID0gcmVzaGFwZSh7XG4gICAgaW5wdXRzOiB7eDogaW5kaWNlc30sXG4gICAgYmFja2VuZCxcbiAgICBhdHRyczoge3NoYXBlOiBbc2hhcGVJbmZvLmJhdGNoU2l6ZSwgaW5kaWNlc1NpemUgLyBzaGFwZUluZm8uYmF0Y2hTaXplXX1cbiAgfSk7XG5cbiAgY29uc3QgZmxhdHRlbk91dHB1dFNoYXBlID0gW1xuICAgIHNoYXBlSW5mby5iYXRjaFNpemUsIHNoYXBlSW5mby5vdXRlclNpemUsIGluZGljZXNTaXplIC8gc2hhcGVJbmZvLmJhdGNoU2l6ZSxcbiAgICBzaGFwZUluZm8uc2xpY2VTaXplXG4gIF07XG5cbiAgY29uc3QgaW5kaWNlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYyhmbGF0dGVuSW5kZXgpO1xuICBjb25zdCB4QnVmID0gYmFja2VuZC5idWZmZXJTeW5jKGZsYXR0ZW5YKTtcbiAgY29uc3Qgb3V0QnVmID0gZ2F0aGVyVjJJbXBsKHhCdWYsIGluZGljZXNCdWYsIGZsYXR0ZW5PdXRwdXRTaGFwZSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhmbGF0dGVuWCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oZmxhdHRlbkluZGV4KTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIHNoYXBlSW5mby5vdXRwdXRTaGFwZSwgb3V0QnVmLmR0eXBlLCBvdXRCdWYudmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdhdGhlclYyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IEdhdGhlclYyLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGdhdGhlclYyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IFFT, util } from '@tensorflow/tfjs-core';\nimport { fftBatch } from '../utils/fft_utils';\nimport { reshape } from './Reshape';\nexport function ifft(args) {\n const { inputs, backend } = args;\n const { input } = inputs;\n const inputSize = util.sizeFromShape(input.shape);\n // Collapse all outer dimensions to a single batch dimension.\n const innerDimensionSize = input.shape[input.shape.length - 1];\n const batch = inputSize / innerDimensionSize;\n const input2D = reshape({\n inputs: { x: input },\n backend,\n attrs: { shape: [batch, innerDimensionSize] }\n });\n const result = fftBatch(input2D, true, backend);\n const resultReshaped = reshape({ inputs: { x: result }, backend, attrs: { shape: input.shape } });\n backend.disposeIntermediateTensorInfo(input2D);\n backend.disposeIntermediateTensorInfo(result);\n return resultReshaped;\n}\nexport const ifftConfig = {\n kernelName: IFFT,\n backendName: 'cpu',\n kernelFunc: ifft\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUZGVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvSUZGVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsSUFBSSxFQUFvRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUduRyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsSUFBSSxDQUFDLElBQW1EO0lBRXRFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEQsNkRBQTZEO0lBQzdELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7SUFFN0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxLQUFLLEVBQUM7UUFDbEIsT0FBTztRQUNQLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxFQUFDO0tBQzVDLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWhELE1BQU0sY0FBYyxHQUNoQixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBRXpFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUMsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SUZGVCwgSUZGVElucHV0cywgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2ZmdEJhdGNofSBmcm9tICcuLi91dGlscy9mZnRfdXRpbHMnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaWZmdChhcmdzOiB7aW5wdXRzOiBJRkZUSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbnB1dH0gPSBpbnB1dHM7XG5cbiAgY29uc3QgaW5wdXRTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGlucHV0LnNoYXBlKTtcblxuICAvLyBDb2xsYXBzZSBhbGwgb3V0ZXIgZGltZW5zaW9ucyB0byBhIHNpbmdsZSBiYXRjaCBkaW1lbnNpb24uXG4gIGNvbnN0IGlubmVyRGltZW5zaW9uU2l6ZSA9IGlucHV0LnNoYXBlW2lucHV0LnNoYXBlLmxlbmd0aCAtIDFdO1xuICBjb25zdCBiYXRjaCA9IGlucHV0U2l6ZSAvIGlubmVyRGltZW5zaW9uU2l6ZTtcblxuICBjb25zdCBpbnB1dDJEID0gcmVzaGFwZSh7XG4gICAgaW5wdXRzOiB7eDogaW5wdXR9LFxuICAgIGJhY2tlbmQsXG4gICAgYXR0cnM6IHtzaGFwZTogW2JhdGNoLCBpbm5lckRpbWVuc2lvblNpemVdfVxuICB9KTtcblxuICBjb25zdCByZXN1bHQgPSBmZnRCYXRjaChpbnB1dDJELCB0cnVlLCBiYWNrZW5kKTtcblxuICBjb25zdCByZXN1bHRSZXNoYXBlZCA9XG4gICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBpbnB1dC5zaGFwZX19KTtcblxuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKGlucHV0MkQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdFJlc2hhcGVkO1xufVxuXG5leHBvcnQgY29uc3QgaWZmdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBJRkZULFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGlmZnQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsFinite } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const isFinite = unaryKernelFunc(IsFinite, (xi) => Number.isFinite(xi) ? 1 : 0, 'bool');\nexport const isFiniteConfig = {\n kernelName: IsFinite,\n backendName: 'cpu',\n kernelFunc: isFinite,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNGaW5pdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0lzRmluaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxRQUFRLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUNqQixlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0lzRmluaXRlLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0Zpbml0ZSA9XG4gICAgdW5hcnlLZXJuZWxGdW5jKElzRmluaXRlLCAoeGkpID0+IE51bWJlci5pc0Zpbml0ZSh4aSkgPyAxIDogMCwgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGlzRmluaXRlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IElzRmluaXRlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGlzRmluaXRlLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsInf } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const isInf = unaryKernelFunc(IsInf, (xi) => Math.abs(xi) === Infinity ? 1 : 0, 'bool');\nexport const isInfConfig = {\n kernelName: IsInf,\n backendName: 'cpu',\n kernelFunc: isInf,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNJbmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0lzSW5mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0lzSW5mLCBLZXJuZWxDb25maWd9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0luZiA9XG4gICAgdW5hcnlLZXJuZWxGdW5jKElzSW5mLCAoeGkpID0+IE1hdGguYWJzKHhpKSA9PT0gSW5maW5pdHkgPyAxIDogMCwgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGlzSW5mQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IElzSW5mLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IGlzSW5mLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { IsNan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const isNaN = unaryKernelFunc(IsNan, (xi) => Number.isNaN(xi) ? 1 : 0, 'bool');\nexport const isNaNConfig = {\n kernelName: IsNan,\n backendName: 'cpu',\n kernelFunc: isNaN,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSXNOYU4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0lzTmFOLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxLQUFLLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUNkLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBaUI7SUFDdkMsVUFBVSxFQUFFLEtBQUs7SUFDakIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7SXNOYW4sIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzTmFOID1cbiAgICB1bmFyeUtlcm5lbEZ1bmMoSXNOYW4sICh4aSkgPT4gTnVtYmVyLmlzTmFOKHhpKSA/IDEgOiAwLCAnYm9vbCcpO1xuXG5leHBvcnQgY29uc3QgaXNOYU5Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogSXNOYW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogaXNOYU4sXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LinSpace } from '@tensorflow/tfjs-core';\nimport { linSpaceImpl } from './LinSpace_impl';\nexport function linSpace(args) {\n const { backend, attrs } = args;\n const { start, stop, num } = attrs;\n const outVals = linSpaceImpl(start, stop, num);\n return backend.makeTensorInfo([outVals.length], 'float32', outVals);\n}\nexport const linSpaceConfig = {\n kernelName: LinSpace,\n backendName: 'cpu',\n kernelFunc: linSpace\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluU3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0xpblNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsUUFBUSxFQUE0QixNQUFNLHVCQUF1QixDQUFDO0FBR3BHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQXFEO0lBRTVFLE1BQU0sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlCLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUUvQyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxRQUFpQztDQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTGluU3BhY2UsIExpblNwYWNlQXR0cnMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7bGluU3BhY2VJbXBsfSBmcm9tICcuL0xpblNwYWNlX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluU3BhY2UoYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogTGluU3BhY2VBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3N0YXJ0LCBzdG9wLCBudW19ID0gYXR0cnM7XG5cbiAgY29uc3Qgb3V0VmFscyA9IGxpblNwYWNlSW1wbChzdGFydCwgc3RvcCwgbnVtKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbb3V0VmFscy5sZW5ndGhdLCAnZmxvYXQzMicsIG91dFZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgbGluU3BhY2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTGluU3BhY2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbGluU3BhY2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Log1p } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const log1p = unaryKernelFunc(Log1p, (xi) => Math.log1p(xi));\nexport const log1pConfig = {\n kernelName: Log1p,\n backendName: 'cpu',\n kernelFunc: log1p,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nMXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL0xvZzFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9nMXB9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsb2cxcCA9IHVuYXJ5S2VybmVsRnVuYyhMb2cxcCwgKHhpKSA9PiBNYXRoLmxvZzFwKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBsb2cxcENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMb2cxcCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBsb2cxcCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalAnd } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const logicalAndImpl = createSimpleBinaryKernelImpl((a, b) => a && b);\nexport const logicalAnd = binaryKernelFunc(LogicalAnd, logicalAndImpl, null /* complexImpl */, 'bool');\nexport const logicalAndConfig = {\n kernelName: LogicalAnd,\n backendName: 'cpu',\n kernelFunc: logicalAnd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbEFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTG9naWNhbEFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0QsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN2Qiw0QkFBNEIsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQ3RDLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFpQjtJQUM1QyxVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsVUFBVTtDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgTG9naWNhbEFuZH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtjcmVhdGVTaW1wbGVCaW5hcnlLZXJuZWxJbXBsfSBmcm9tICcuLi91dGlscy9iaW5hcnlfaW1wbCc7XG5pbXBvcnQge2JpbmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL2JpbmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgJiYgYik7XG5leHBvcnQgY29uc3QgbG9naWNhbEFuZCA9IGJpbmFyeUtlcm5lbEZ1bmMoXG4gICAgTG9naWNhbEFuZCwgbG9naWNhbEFuZEltcGwsIG51bGwgLyogY29tcGxleEltcGwgKi8sICdib29sJyk7XG5cbmV4cG9ydCBjb25zdCBsb2dpY2FsQW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExvZ2ljYWxBbmQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbG9naWNhbEFuZFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalNot } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const logicalNot = unaryKernelFunc(LogicalNot, (xi) => xi ? 0 : 1, 'bool');\nexport const logicalNotConfig = {\n kernelName: LogicalNot,\n backendName: 'cpu',\n kernelFunc: logicalNot,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE5vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTG9naWNhbE5vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FDbkIsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBaUI7SUFDNUMsVUFBVSxFQUFFLFVBQVU7SUFDdEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFVBQVU7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMb2dpY2FsTm90fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbG9naWNhbE5vdCA9XG4gICAgdW5hcnlLZXJuZWxGdW5jKExvZ2ljYWxOb3QsICh4aSkgPT4geGkgPyAwIDogMSwgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGxvZ2ljYWxOb3RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTG9naWNhbE5vdCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBsb2dpY2FsTm90LFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LogicalOr } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const logicalOrImpl = createSimpleBinaryKernelImpl((a, b) => a || b);\nexport const logicalOr = binaryKernelFunc(LogicalOr, logicalOrImpl, null /* complexImpl */, 'bool');\nexport const logicalOrConfig = {\n kernelName: LogicalOr,\n backendName: 'cpu',\n kernelFunc: logicalOr\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naWNhbE9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Mb2dpY2FsT3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDdEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUNsQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxTQUFTO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBMb2dpY2FsT3J9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbG9naWNhbE9ySW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgfHwgYik7XG5leHBvcnQgY29uc3QgbG9naWNhbE9yID1cbiAgICBiaW5hcnlLZXJuZWxGdW5jKExvZ2ljYWxPciwgbG9naWNhbE9ySW1wbCwgbnVsbCAvKiBjb21wbGV4SW1wbCAqLywgJ2Jvb2wnKTtcblxuZXhwb3J0IGNvbnN0IGxvZ2ljYWxPckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBMb2dpY2FsT3IsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbG9naWNhbE9yXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LRN, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function lRN(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n assertNotComplex(x, 'LRN');\n const channels = x.shape[3];\n const maxD = channels - 1;\n const xValues = backend.data.get(x.dataId).values;\n const size = util.sizeFromShape(x.shape);\n const result = new Float32Array(size);\n function sumAcrossChannels(offset) {\n const currentChannel = offset % channels;\n let beginSumOffset = offset - currentChannel + Math.max(0, currentChannel - depthRadius);\n const endSumOffset = offset - currentChannel + Math.min(currentChannel + depthRadius, maxD);\n let sum = 0.0;\n for (; beginSumOffset <= endSumOffset; beginSumOffset++) {\n const z = xValues[beginSumOffset];\n sum += z * z;\n }\n return sum;\n }\n for (let offset = 0; offset < size; offset++) {\n const sum = sumAcrossChannels(offset);\n const val = xValues[offset] * Math.pow(bias + alpha * sum, -beta);\n result[offset] = val;\n }\n return backend.makeTensorInfo(x.shape, x.dtype, result);\n}\n// tslint:disable-next-line: variable-name\nexport const LRNConfig = {\n kernelName: LRN,\n backendName: 'cpu',\n kernelFunc: lRN\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9MUk4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixHQUFHLEVBQStDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3ZILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUNmLElBQW1FO0lBRXJFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0MsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNoRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0QyxTQUFTLGlCQUFpQixDQUFDLE1BQWM7UUFDdkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN6QyxJQUFJLGNBQWMsR0FDZCxNQUFNLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FDZCxNQUFNLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZCxPQUFPLGNBQWMsSUFBSSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7WUFDdkQsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzVDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN0QjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELDBDQUEwQztBQUMxQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMUk4sIExSTkF0dHJzLCBMUk5JbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbFJOKFxuICAgIGFyZ3M6IHtpbnB1dHM6IExSTklucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBMUk5BdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtkZXB0aFJhZGl1cywgYmlhcywgYWxwaGEsIGJldGF9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnTFJOJyk7XG5cbiAgY29uc3QgY2hhbm5lbHMgPSB4LnNoYXBlWzNdO1xuICBjb25zdCBtYXhEID0gY2hhbm5lbHMgLSAxO1xuICBjb25zdCB4VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoeC5zaGFwZSk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSk7XG5cbiAgZnVuY3Rpb24gc3VtQWNyb3NzQ2hhbm5lbHMob2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjdXJyZW50Q2hhbm5lbCA9IG9mZnNldCAlIGNoYW5uZWxzO1xuICAgIGxldCBiZWdpblN1bU9mZnNldCA9XG4gICAgICAgIG9mZnNldCAtIGN1cnJlbnRDaGFubmVsICsgTWF0aC5tYXgoMCwgY3VycmVudENoYW5uZWwgLSBkZXB0aFJhZGl1cyk7XG4gICAgY29uc3QgZW5kU3VtT2Zmc2V0ID1cbiAgICAgICAgb2Zmc2V0IC0gY3VycmVudENoYW5uZWwgKyBNYXRoLm1pbihjdXJyZW50Q2hhbm5lbCArIGRlcHRoUmFkaXVzLCBtYXhEKTtcblxuICAgIGxldCBzdW0gPSAwLjA7XG4gICAgZm9yICg7IGJlZ2luU3VtT2Zmc2V0IDw9IGVuZFN1bU9mZnNldDsgYmVnaW5TdW1PZmZzZXQrKykge1xuICAgICAgY29uc3QgeiA9IHhWYWx1ZXNbYmVnaW5TdW1PZmZzZXRdO1xuICAgICAgc3VtICs9IHogKiB6O1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc2l6ZTsgb2Zmc2V0KyspIHtcbiAgICBjb25zdCBzdW0gPSBzdW1BY3Jvc3NDaGFubmVscyhvZmZzZXQpO1xuICAgIGNvbnN0IHZhbCA9IHhWYWx1ZXNbb2Zmc2V0XSAqIE1hdGgucG93KGJpYXMgKyBhbHBoYSAqIHN1bSwgLWJldGEpO1xuICAgIHJlc3VsdFtvZmZzZXRdID0gdmFsO1xuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oeC5zaGFwZSwgeC5kdHlwZSwgcmVzdWx0KTtcbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXG5leHBvcnQgY29uc3QgTFJOQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExSTixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBsUk4gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { LRNGrad, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function lRNGrad(args) {\n const { inputs, backend, attrs } = args;\n const { x, y, dy } = inputs;\n const { depthRadius, bias, alpha, beta } = attrs;\n assertNotComplex(dy, 'LRNGrad');\n const dySize = util.sizeFromShape(dy.shape);\n const channels = dy.shape[3];\n const dyValues = backend.data.get(dy.dataId).values;\n const xValues = backend.data.get(x.dataId).values;\n const yValues = backend.data.get(y.dataId).values;\n const result = new Float32Array(dySize);\n const size = dySize;\n for (let offset = 0; offset < size; offset++) {\n const currentChannel = offset % channels;\n const depthBegin = (offset - currentChannel) + Math.max(0, currentChannel - depthRadius);\n const depthEnd = (offset - currentChannel) +\n Math.min(channels, currentChannel + depthRadius + 1);\n let norm = 0;\n for (let k = depthBegin; k < depthEnd; k++) {\n norm += Math.pow(xValues[k], 2);\n }\n norm = alpha * norm + bias;\n for (let k = depthBegin; k < depthEnd; k++) {\n let dyi = -2 * alpha * beta * xValues[k] * yValues[offset] / norm;\n if (offset === k) {\n dyi += Math.pow(norm, -beta);\n }\n dyi *= dyValues[offset];\n result[k] += dyi;\n }\n }\n return backend.makeTensorInfo(dy.shape, x.dtype, result);\n}\n// tslint:disable-next-line: variable-name\nexport const LRNGradConfig = {\n kernelName: LRNGrad,\n backendName: 'cpu',\n kernelFunc: lRNGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTFJOR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTFJOR3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLE9BQU8sRUFBdUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHbkksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUIsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUvQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFNUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNsRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNoRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7SUFFcEIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM1QyxNQUFNLGNBQWMsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUNaLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUUzQixLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQixHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QjtZQUNELEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztTQUNsQjtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBMUk5HcmFkLCBMUk5HcmFkQXR0cnMsIExSTkdyYWRJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbFJOR3JhZChcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBMUk5HcmFkSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IExSTkdyYWRBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgeSwgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7ZGVwdGhSYWRpdXMsIGJpYXMsIGFscGhhLCBiZXRhfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoZHksICdMUk5HcmFkJyk7XG5cbiAgY29uc3QgZHlTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKGR5LnNoYXBlKTtcblxuICBjb25zdCBjaGFubmVscyA9IGR5LnNoYXBlWzNdO1xuICBjb25zdCBkeVZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoZHkuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgeFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoeC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB5VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoZHlTaXplKTtcbiAgY29uc3Qgc2l6ZSA9IGR5U2l6ZTtcblxuICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzaXplOyBvZmZzZXQrKykge1xuICAgIGNvbnN0IGN1cnJlbnRDaGFubmVsID0gb2Zmc2V0ICUgY2hhbm5lbHM7XG4gICAgY29uc3QgZGVwdGhCZWdpbiA9XG4gICAgICAgIChvZmZzZXQgLSBjdXJyZW50Q2hhbm5lbCkgKyBNYXRoLm1heCgwLCBjdXJyZW50Q2hhbm5lbCAtIGRlcHRoUmFkaXVzKTtcbiAgICBjb25zdCBkZXB0aEVuZCA9IChvZmZzZXQgLSBjdXJyZW50Q2hhbm5lbCkgK1xuICAgICAgICBNYXRoLm1pbihjaGFubmVscywgY3VycmVudENoYW5uZWwgKyBkZXB0aFJhZGl1cyArIDEpO1xuXG4gICAgbGV0IG5vcm0gPSAwO1xuICAgIGZvciAobGV0IGsgPSBkZXB0aEJlZ2luOyBrIDwgZGVwdGhFbmQ7IGsrKykge1xuICAgICAgbm9ybSArPSBNYXRoLnBvdyh4VmFsdWVzW2tdLCAyKTtcbiAgICB9XG4gICAgbm9ybSA9IGFscGhhICogbm9ybSArIGJpYXM7XG5cbiAgICBmb3IgKGxldCBrID0gZGVwdGhCZWdpbjsgayA8IGRlcHRoRW5kOyBrKyspIHtcbiAgICAgIGxldCBkeWkgPSAtMiAqIGFscGhhICogYmV0YSAqIHhWYWx1ZXNba10gKiB5VmFsdWVzW29mZnNldF0gLyBub3JtO1xuICAgICAgaWYgKG9mZnNldCA9PT0gaykge1xuICAgICAgICBkeWkgKz0gTWF0aC5wb3cobm9ybSwgLWJldGEpO1xuICAgICAgfVxuICAgICAgZHlpICo9IGR5VmFsdWVzW29mZnNldF07XG4gICAgICByZXN1bHRba10gKz0gZHlpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGR5LnNoYXBlLCB4LmR0eXBlLCByZXN1bHQpO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcbmV4cG9ydCBjb25zdCBMUk5HcmFkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IExSTkdyYWQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbFJOR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Max } from '@tensorflow/tfjs-core';\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { maxImpl } from './Max_impl';\nimport { transposeImpl } from './Transpose_impl';\nexport function max(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { reductionIndices, keepDims } = attrs;\n const cpuBackend = backend;\n let xShape = x.shape;\n const xRank = xShape.length;\n const origAxes = util.parseAxisParam(reductionIndices, xShape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, xRank);\n let xVals = cpuBackend.data.get(x.dataId).values;\n if (permutedAxes != null) {\n const newShape = new Array(xRank);\n for (let i = 0; i < newShape.length; i++) {\n newShape[i] = xShape[permutedAxes[i]];\n }\n xVals = transposeImpl(xVals, xShape, x.dtype, permutedAxes, newShape);\n axes = backend_util.getInnerMostAxes(axes.length, xRank);\n xShape = newShape;\n }\n assertNotComplex(x, 'max');\n backend_util.assertAxesAreInnerMostDims('max', axes, xRank);\n const [maxOutShape, reduceShape] = backend_util.computeOutAndReduceShapes(xShape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const result = maxImpl(xVals, reduceSize, maxOutShape, x.dtype);\n const dataId = cpuBackend.write(result, maxOutShape, x.dtype);\n let outShape = maxOutShape;\n if (keepDims) {\n // reshape\n const newShape = backend_util.expandShapeToKeepDim(maxOutShape, origAxes);\n outShape = newShape;\n }\n return { dataId, shape: outShape, dtype: x.dtype };\n}\nexport const maxConfig = {\n kernelName: Max,\n backendName: 'cpu',\n kernelFunc: max\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9NYXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFhLEdBQUcsRUFBa0MsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQUMsWUFBWSxFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFhLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFNLFVBQVUsR0FBRyxDQUNmLElBQW1FO0lBRXJFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQzNCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDckIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUU1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNwQixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQy9ELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBYSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6RCxNQUFNLEdBQUcsUUFBUSxDQUFDO0tBQ25CO0lBRUQsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNCLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQzVCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFekQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUQsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQzNCLElBQUksUUFBUSxFQUFFO1FBQ1osVUFBVTtRQUNWLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUUsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUNyQjtJQUVELE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsRnVuYywgTWF4LCBNYXhBdHRycywgTWF4SW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZ30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7VHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmltcG9ydCB7bWF4SW1wbH0gZnJvbSAnLi9NYXhfaW1wbCc7XG5pbXBvcnQge3RyYW5zcG9zZUltcGx9IGZyb20gJy4vVHJhbnNwb3NlX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KFxuICAgIGFyZ3M6IHtpbnB1dHM6IE1heElucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBNYXhBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtyZWR1Y3Rpb25JbmRpY2VzLCBrZWVwRGltc30gPSBhdHRycztcbiAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQ7XG4gIGxldCB4U2hhcGUgPSB4LnNoYXBlO1xuICBjb25zdCB4UmFuayA9IHhTaGFwZS5sZW5ndGg7XG5cbiAgY29uc3Qgb3JpZ0F4ZXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKHJlZHVjdGlvbkluZGljZXMsIHhTaGFwZSk7XG4gIGxldCBheGVzID0gb3JpZ0F4ZXM7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeFJhbmspO1xuICBsZXQgeFZhbHMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgaWYgKHBlcm11dGVkQXhlcyAhPSBudWxsKSB7XG4gICAgY29uc3QgbmV3U2hhcGU6IG51bWJlcltdID0gbmV3IEFycmF5KHhSYW5rKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1NoYXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdTaGFwZVtpXSA9IHhTaGFwZVtwZXJtdXRlZEF4ZXNbaV1dO1xuICAgIH1cblxuICAgIHhWYWxzID0gdHJhbnNwb3NlSW1wbCh4VmFscywgeFNoYXBlLCB4LmR0eXBlLCBwZXJtdXRlZEF4ZXMsIG5ld1NoYXBlKTtcbiAgICBheGVzID0gYmFja2VuZF91dGlsLmdldElubmVyTW9zdEF4ZXMoYXhlcy5sZW5ndGgsIHhSYW5rKTtcblxuICAgIHhTaGFwZSA9IG5ld1NoYXBlO1xuICB9XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnbWF4Jyk7XG4gIGJhY2tlbmRfdXRpbC5hc3NlcnRBeGVzQXJlSW5uZXJNb3N0RGltcygnbWF4JywgYXhlcywgeFJhbmspO1xuICBjb25zdCBbbWF4T3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcyh4U2hhcGUsIGF4ZXMpO1xuXG4gIGNvbnN0IHJlZHVjZVNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVkdWNlU2hhcGUpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IG1heEltcGwoeFZhbHMsIHJlZHVjZVNpemUsIG1heE91dFNoYXBlLCB4LmR0eXBlKTtcbiAgY29uc3QgZGF0YUlkID0gY3B1QmFja2VuZC53cml0ZShyZXN1bHQsIG1heE91dFNoYXBlLCB4LmR0eXBlKTtcblxuICBsZXQgb3V0U2hhcGUgPSBtYXhPdXRTaGFwZTtcbiAgaWYgKGtlZXBEaW1zKSB7XG4gICAgLy8gcmVzaGFwZVxuICAgIGNvbnN0IG5ld1NoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG1heE91dFNoYXBlLCBvcmlnQXhlcyk7XG4gICAgb3V0U2hhcGUgPSBuZXdTaGFwZTtcbiAgfVxuXG4gIHJldHVybiB7ZGF0YUlkLCBzaGFwZTogb3V0U2hhcGUsIGR0eXBlOiB4LmR0eXBlfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNYXgsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbWF4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { pool } from '../utils/pool_utils';\nimport { identity } from './Identity';\nexport function maxPool(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n assertNotComplex(x, 'maxPool');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const dilations = 1;\n util.assert(backend_util.eitherStridesOrDilationsAreOne(strides, dilations), () => 'Error in maxPool: Either strides or dilations must be 1. ' +\n `Got strides ${strides} and dilations '${dilations}'`);\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, dilations, pad, dimRoundingMode);\n let res;\n if (convInfo.filterWidth === 1 && convInfo.filterHeight === 1 &&\n util.arraysEqual(convInfo.inShape, convInfo.outShape)) {\n res = identity({ inputs: { x }, backend });\n }\n else {\n const xValues = backend.data.get(x.dataId).values;\n const strides = util.computeStrides(x.shape);\n const buffer = pool(xValues, x.shape, x.dtype, strides, convInfo, 'max');\n res = backend.makeTensorInfo(convInfo.outShape, x.dtype, buffer.values);\n }\n return res;\n}\nexport const maxPoolConfig = {\n kernelName: MaxPool,\n backendName: 'cpu',\n kernelFunc: maxPool\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWF4UG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixPQUFPLEVBQXVELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2pKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLFVBQVUsT0FBTyxDQUNuQixJQUN5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0IsTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUMxRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FDUCxZQUFZLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUMvRCxHQUFHLEVBQUUsQ0FBQywyREFBMkQ7UUFDN0QsZUFBZSxPQUFPLG1CQUFtQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsU0FBUyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNyQyxJQUFJLEdBQWUsQ0FBQztJQUVwQixJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3pELEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUN4QixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQW9CLENBQUMsQ0FBQztLQUM5RDtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUI7SUFDekMsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE9BQWdDO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sLCBNYXhQb29sQXR0cnMsIE1heFBvb2xJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtwb29sfSBmcm9tICcuLi91dGlscy9wb29sX3V0aWxzJztcbmltcG9ydCB7aWRlbnRpdHl9IGZyb20gJy4vSWRlbnRpdHknO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbChcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBNYXhQb29sSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IE1heFBvb2xBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ21heFBvb2wnKTtcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuICBjb25zdCBkaWxhdGlvbnMgPSAxO1xuXG4gIHV0aWwuYXNzZXJ0KFxuICAgICAgYmFja2VuZF91dGlsLmVpdGhlclN0cmlkZXNPckRpbGF0aW9uc0FyZU9uZShzdHJpZGVzLCBkaWxhdGlvbnMpLFxuICAgICAgKCkgPT4gJ0Vycm9yIGluIG1heFBvb2w6IEVpdGhlciBzdHJpZGVzIG9yIGRpbGF0aW9ucyBtdXN0IGJlIDEuICcgK1xuICAgICAgICAgIGBHb3Qgc3RyaWRlcyAke3N0cmlkZXN9IGFuZCBkaWxhdGlvbnMgJyR7ZGlsYXRpb25zfSdgKTtcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICBkaWxhdGlvbnMsIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcbiAgbGV0IHJlczogVGVuc29ySW5mbztcblxuICBpZiAoY29udkluZm8uZmlsdGVyV2lkdGggPT09IDEgJiYgY29udkluZm8uZmlsdGVySGVpZ2h0ID09PSAxICYmXG4gICAgICB1dGlsLmFycmF5c0VxdWFsKGNvbnZJbmZvLmluU2hhcGUsIGNvbnZJbmZvLm91dFNoYXBlKSkge1xuICAgIHJlcyA9IGlkZW50aXR5KHtpbnB1dHM6IHt4fSwgYmFja2VuZH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHhWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBzdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcbiAgICBjb25zdCBidWZmZXIgPSBwb29sKHhWYWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIHN0cmlkZXMsIGNvbnZJbmZvLCAnbWF4Jyk7XG4gICAgcmVzID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUsIGJ1ZmZlci52YWx1ZXMgYXMgVHlwZWRBcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2xDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtYXhQb29sIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, MaxPool3D, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { pool3d } from '../utils/pool_utils';\nexport function maxPool3D(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { filterSize, strides, pad, dimRoundingMode, dataFormat } = attrs;\n assertNotComplex(x, 'maxPool3d');\n const convInfo = backend_util.computePool3DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode, dataFormat);\n const xValues = backend.data.get(x.dataId).values;\n const outBuf = pool3d(xValues, x.shape, x.dtype, util.computeStrides(x.shape), convInfo, 'max');\n return backend.makeTensorInfo(outBuf.shape, 'float32', outBuf.values);\n}\nexport const maxPool3DConfig = {\n kernelName: MaxPool3D,\n backendName: 'cpu',\n kernelFunc: maxPool3D\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9NYXhQb29sM0QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsU0FBUyxFQUEyRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd2SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUV0RSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxDQUFDLENBQUMsS0FBaUQsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUN4RSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUNqQixPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU5RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNYXhQb29sM0QsIE1heFBvb2wzREF0dHJzLCBNYXhQb29sM0RJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtwb29sM2R9IGZyb20gJy4uL3V0aWxzL3Bvb2xfdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbDNEKGFyZ3M6IHtcbiAgaW5wdXRzOiBNYXhQb29sM0RJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogTWF4UG9vbDNEQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7ZmlsdGVyU2l6ZSwgc3RyaWRlcywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXR9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnbWF4UG9vbDNkJyk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wzREluZm8oXG4gICAgICB4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICAxIC8qIGRpbGF0aW9ucyAqLywgcGFkLCBkaW1Sb3VuZGluZ01vZGUsIGRhdGFGb3JtYXQpO1xuXG4gIGNvbnN0IHhWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgb3V0QnVmID0gcG9vbDNkKFxuICAgICAgeFZhbHVlcywgeC5zaGFwZSwgeC5kdHlwZSwgdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKSwgY29udkluZm8sICdtYXgnKTtcblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRCdWYuc2hhcGUsICdmbG9hdDMyJywgb3V0QnVmLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sM0RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbDNELFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IG1heFBvb2wzRCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, buffer, MaxPool3DGrad } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { maxPool3dPositions } from '../utils/pool_utils';\nexport function maxPool3DGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input } = inputs;\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n assertNotComplex([dy, input], 'maxPool3DGrad');\n const convInfo = backend_util.computePool3DInfo(input.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const inputBuf = backend.bufferSync(input);\n const maxPosBuf = maxPool3dPositions(inputBuf, convInfo);\n const strideDepth = convInfo.strideDepth;\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationDepth = convInfo.dilationDepth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterDepth = convInfo.effectiveFilterDepth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padFront = effectiveFilterDepth - 1 - convInfo.padInfo.front;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const dx = buffer(input.shape, 'float32');\n const dyBuf = backend.bufferSync(dy);\n for (let batch = 0; batch < convInfo.batchSize; ++batch) {\n for (let channel = 0; channel < convInfo.inChannels; ++channel) {\n for (let dxDepth = 0; dxDepth < convInfo.inDepth; ++dxDepth) {\n for (let dxRow = 0; dxRow < convInfo.inHeight; ++dxRow) {\n for (let dxCol = 0; dxCol < convInfo.inWidth; ++dxCol) {\n // Shader code begins\n const dyDepthCorner = dxDepth - padFront;\n const dyRowCorner = dxRow - padTop;\n const dyColCorner = dxCol - padLeft;\n let dotProd = 0;\n for (let wDepth = 0; wDepth < effectiveFilterDepth; wDepth += dilationDepth) {\n const dyDepth = (dyDepthCorner + wDepth) / strideDepth;\n if (dyDepth < 0 || dyDepth >= convInfo.outDepth ||\n Math.floor(dyDepth) !== dyDepth) {\n continue;\n }\n for (let wRow = 0; wRow < effectiveFilterHeight; wRow += dilationHeight) {\n const dyRow = (dyRowCorner + wRow) / strideHeight;\n if (dyRow < 0 || dyRow >= convInfo.outHeight ||\n Math.floor(dyRow) !== dyRow) {\n continue;\n }\n for (let wCol = 0; wCol < effectiveFilterWidth; wCol += dilationWidth) {\n const dyCol = (dyColCorner + wCol) / strideWidth;\n if (dyCol < 0 || dyCol >= convInfo.outWidth ||\n Math.floor(dyCol) !== dyCol) {\n continue;\n }\n const maxPos = effectiveFilterDepth * effectiveFilterHeight *\n effectiveFilterWidth -\n 1 -\n maxPosBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n const curPos = wDepth * effectiveFilterHeight * effectiveFilterWidth +\n wRow * effectiveFilterWidth + wCol;\n const mask = maxPos === curPos ? 1 : 0;\n if (mask === 0) {\n continue;\n }\n const pixel = dyBuf.get(batch, dyDepth, dyRow, dyCol, channel);\n dotProd += pixel * mask;\n }\n }\n }\n dx.set(dotProd, batch, dxDepth, dxRow, dxCol, channel);\n }\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const maxPool3DGradConfig = {\n kernelName: MaxPool3DGrad,\n backendName: 'cpu',\n kernelFunc: maxPool3DGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbDNER3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWF4UG9vbDNER3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBNEIsYUFBYSxFQUE0RCxNQUFNLHVCQUF1QixDQUFDO0FBRy9KLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBSTdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNCLE1BQU0sRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFMUQsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFL0MsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUMzQyxLQUFLLENBQUMsS0FBaUQsRUFBRSxVQUFVLEVBQ25FLE9BQU8sRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQzdDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUM3QyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztJQUMzRCxNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztJQUM3RCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztJQUMzRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUUxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFrQixFQUFFLENBQUMsQ0FBQztJQUV0RCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRTtRQUN2RCxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRTtZQUM5RCxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRTtnQkFDM0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUU7b0JBQ3RELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFO3dCQUNyRCxxQkFBcUI7d0JBQ3JCLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxRQUFRLENBQUM7d0JBQ3pDLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7d0JBQ25DLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7d0JBQ3BDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQzt3QkFDaEIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLG9CQUFvQixFQUM3QyxNQUFNLElBQUksYUFBYSxFQUFFOzRCQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7NEJBQ3ZELElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVE7Z0NBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxFQUFFO2dDQUNuQyxTQUFTOzZCQUNWOzRCQUNELEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxxQkFBcUIsRUFDMUMsSUFBSSxJQUFJLGNBQWMsRUFBRTtnQ0FDM0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDO2dDQUNsRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxTQUFTO29DQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTtvQ0FDL0IsU0FBUztpQ0FDVjtnQ0FDRCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsb0JBQW9CLEVBQ3pDLElBQUksSUFBSSxhQUFhLEVBQUU7b0NBQzFCLE1BQU0sS0FBSyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQztvQ0FDakQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxRQUFRLENBQUMsUUFBUTt3Q0FDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUU7d0NBQy9CLFNBQVM7cUNBQ1Y7b0NBRUQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLEdBQUcscUJBQXFCO3dDQUNuRCxvQkFBb0I7d0NBQ3hCLENBQUM7d0NBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUM1QyxDQUFDO29DQUNiLE1BQU0sTUFBTSxHQUNSLE1BQU0sR0FBRyxxQkFBcUIsR0FBRyxvQkFBb0I7d0NBQ3JELElBQUksR0FBRyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7b0NBRXZDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUN2QyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7d0NBQ2QsU0FBUztxQ0FDVjtvQ0FFRCxNQUFNLEtBQUssR0FDUCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztvQ0FDckQsT0FBTyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7aUNBQ3pCOzZCQUNGO3lCQUNGO3dCQUNELEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztxQkFDeEQ7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgYnVmZmVyLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heFBvb2wzREdyYWQsIE1heFBvb2wzREdyYWRBdHRycywgTWF4UG9vbDNER3JhZElucHV0cywgUmFuaywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge21heFBvb2wzZFBvc2l0aW9uc30gZnJvbSAnLi4vdXRpbHMvcG9vbF91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXhQb29sM0RHcmFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBNYXhQb29sM0RHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IE1heFBvb2wzREdyYWRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7ZHksIGlucHV0fSA9IGlucHV0cztcbiAgY29uc3Qge2ZpbHRlclNpemUsIHN0cmlkZXMsIHBhZCwgZGltUm91bmRpbmdNb2RlfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2R5LCBpbnB1dF0sICdtYXhQb29sM0RHcmFkJyk7XG5cbiAgY29uc3QgY29udkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZVBvb2wzREluZm8oXG4gICAgICBpbnB1dC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCBmaWx0ZXJTaXplLFxuICAgICAgc3RyaWRlcywgMSAvKiBkaWxhdGlvbnMgKi8sIHBhZCwgZGltUm91bmRpbmdNb2RlKTtcblxuICBjb25zdCBpbnB1dEJ1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYyhpbnB1dCk7XG4gIGNvbnN0IG1heFBvc0J1ZiA9IG1heFBvb2wzZFBvc2l0aW9ucyhpbnB1dEJ1ZiwgY29udkluZm8pO1xuICBjb25zdCBzdHJpZGVEZXB0aCA9IGNvbnZJbmZvLnN0cmlkZURlcHRoO1xuICBjb25zdCBzdHJpZGVIZWlnaHQgPSBjb252SW5mby5zdHJpZGVIZWlnaHQ7XG4gIGNvbnN0IHN0cmlkZVdpZHRoID0gY29udkluZm8uc3RyaWRlV2lkdGg7XG4gIGNvbnN0IGRpbGF0aW9uRGVwdGggPSBjb252SW5mby5kaWxhdGlvbkRlcHRoO1xuICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVyRGVwdGggPSBjb252SW5mby5lZmZlY3RpdmVGaWx0ZXJEZXB0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRGcm9udCA9IGVmZmVjdGl2ZUZpbHRlckRlcHRoIC0gMSAtIGNvbnZJbmZvLnBhZEluZm8uZnJvbnQ7XG4gIGNvbnN0IHBhZExlZnQgPSBlZmZlY3RpdmVGaWx0ZXJXaWR0aCAtIDEgLSBjb252SW5mby5wYWRJbmZvLmxlZnQ7XG4gIGNvbnN0IHBhZFRvcCA9IGVmZmVjdGl2ZUZpbHRlckhlaWdodCAtIDEgLSBjb252SW5mby5wYWRJbmZvLnRvcDtcbiAgY29uc3QgZHggPSBidWZmZXIoaW5wdXQuc2hhcGUsICdmbG9hdDMyJyk7XG5cbiAgY29uc3QgZHlCdWYgPSBiYWNrZW5kLmJ1ZmZlclN5bmM8UmFuaywgJ2Zsb2F0MzInPihkeSk7XG5cbiAgZm9yIChsZXQgYmF0Y2ggPSAwOyBiYXRjaCA8IGNvbnZJbmZvLmJhdGNoU2l6ZTsgKytiYXRjaCkge1xuICAgIGZvciAobGV0IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgY29udkluZm8uaW5DaGFubmVsczsgKytjaGFubmVsKSB7XG4gICAgICBmb3IgKGxldCBkeERlcHRoID0gMDsgZHhEZXB0aCA8IGNvbnZJbmZvLmluRGVwdGg7ICsrZHhEZXB0aCkge1xuICAgICAgICBmb3IgKGxldCBkeFJvdyA9IDA7IGR4Um93IDwgY29udkluZm8uaW5IZWlnaHQ7ICsrZHhSb3cpIHtcbiAgICAgICAgICBmb3IgKGxldCBkeENvbCA9IDA7IGR4Q29sIDwgY29udkluZm8uaW5XaWR0aDsgKytkeENvbCkge1xuICAgICAgICAgICAgLy8gU2hhZGVyIGNvZGUgYmVnaW5zXG4gICAgICAgICAgICBjb25zdCBkeURlcHRoQ29ybmVyID0gZHhEZXB0aCAtIHBhZEZyb250O1xuICAgICAgICAgICAgY29uc3QgZHlSb3dDb3JuZXIgPSBkeFJvdyAtIHBhZFRvcDtcbiAgICAgICAgICAgIGNvbnN0IGR5Q29sQ29ybmVyID0gZHhDb2wgLSBwYWRMZWZ0O1xuICAgICAgICAgICAgbGV0IGRvdFByb2QgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgd0RlcHRoID0gMDsgd0RlcHRoIDwgZWZmZWN0aXZlRmlsdGVyRGVwdGg7XG4gICAgICAgICAgICAgICAgIHdEZXB0aCArPSBkaWxhdGlvbkRlcHRoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGR5RGVwdGggPSAoZHlEZXB0aENvcm5lciArIHdEZXB0aCkgLyBzdHJpZGVEZXB0aDtcbiAgICAgICAgICAgICAgaWYgKGR5RGVwdGggPCAwIHx8IGR5RGVwdGggPj0gY29udkluZm8ub3V0RGVwdGggfHxcbiAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZHlEZXB0aCkgIT09IGR5RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCB3Um93ID0gMDsgd1JvdyA8IGVmZmVjdGl2ZUZpbHRlckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICB3Um93ICs9IGRpbGF0aW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHlSb3cgPSAoZHlSb3dDb3JuZXIgKyB3Um93KSAvIHN0cmlkZUhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAoZHlSb3cgPCAwIHx8IGR5Um93ID49IGNvbnZJbmZvLm91dEhlaWdodCB8fFxuICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGR5Um93KSAhPT0gZHlSb3cpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCB3Q29sID0gMDsgd0NvbCA8IGVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgd0NvbCArPSBkaWxhdGlvbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkeUNvbCA9IChkeUNvbENvcm5lciArIHdDb2wpIC8gc3RyaWRlV2lkdGg7XG4gICAgICAgICAgICAgICAgICBpZiAoZHlDb2wgPCAwIHx8IGR5Q29sID49IGNvbnZJbmZvLm91dFdpZHRoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihkeUNvbCkgIT09IGR5Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXhQb3MgPSBlZmZlY3RpdmVGaWx0ZXJEZXB0aCAqIGVmZmVjdGl2ZUZpbHRlckhlaWdodCAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUZpbHRlcldpZHRoIC1cbiAgICAgICAgICAgICAgICAgICAgICAxIC1cbiAgICAgICAgICAgICAgICAgICAgICAobWF4UG9zQnVmLmdldChiYXRjaCwgZHlEZXB0aCwgZHlSb3csIGR5Q29sLCBjaGFubmVsKSBhc1xuICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3VyUG9zID1cbiAgICAgICAgICAgICAgICAgICAgICB3RGVwdGggKiBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgKiBlZmZlY3RpdmVGaWx0ZXJXaWR0aCArXG4gICAgICAgICAgICAgICAgICAgICAgd1JvdyAqIGVmZmVjdGl2ZUZpbHRlcldpZHRoICsgd0NvbDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgbWFzayA9IG1heFBvcyA9PT0gY3VyUG9zID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgPVxuICAgICAgICAgICAgICAgICAgICAgIGR5QnVmLmdldChiYXRjaCwgZHlEZXB0aCwgZHlSb3csIGR5Q29sLCBjaGFubmVsKTtcbiAgICAgICAgICAgICAgICAgIGRvdFByb2QgKz0gcGl4ZWwgKiBtYXNrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHguc2V0KGRvdFByb2QsIGJhdGNoLCBkeERlcHRoLCBkeFJvdywgZHhDb2wsIGNoYW5uZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGR4LnNoYXBlLCBkeC5kdHlwZSwgZHgudmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IG1heFBvb2wzREdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTWF4UG9vbDNER3JhZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtYXhQb29sM0RHcmFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, buffer, MaxPoolGrad } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { maxPoolPositions } from '../utils/pool_utils';\nexport function maxPoolGrad(args) {\n const { inputs, backend, attrs } = args;\n const { dy, input, output } = inputs;\n const x = input;\n assertNotComplex([input, output], 'maxPoolGrad');\n const { filterSize, strides, pad, dimRoundingMode } = attrs;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, 1 /* dilations */, pad, dimRoundingMode);\n const xValues = backend.data.get(x.dataId).values;\n const maxPosBuf = buffer(convInfo.outShape, x.dtype, maxPoolPositions(xValues, x.shape, x.dtype, convInfo).values);\n const strideHeight = convInfo.strideHeight;\n const strideWidth = convInfo.strideWidth;\n const dilationHeight = convInfo.dilationHeight;\n const dilationWidth = convInfo.dilationWidth;\n const effectiveFilterHeight = convInfo.effectiveFilterHeight;\n const effectiveFilterWidth = convInfo.effectiveFilterWidth;\n const padLeft = effectiveFilterWidth - 1 - convInfo.padInfo.left;\n const padTop = effectiveFilterHeight - 1 - convInfo.padInfo.top;\n const dx = buffer(x.shape, 'float32');\n const dyData = backend.data.get(dy.dataId).values;\n const dyBuf = buffer(dy.shape, 'float32', dyData);\n for (let b = 0; b < convInfo.batchSize; ++b) {\n for (let d = 0; d < convInfo.inChannels; ++d) {\n for (let dxR = 0; dxR < convInfo.inHeight; ++dxR) {\n for (let dxC = 0; dxC < convInfo.inWidth; ++dxC) {\n // Shader code begins.\n const dyRCorner = dxR - padTop;\n const dyCCorner = dxC - padLeft;\n let dotProd = 0;\n for (let wR = 0; wR < effectiveFilterHeight; wR += dilationHeight) {\n const dyR = (dyRCorner + wR) / strideHeight;\n if (dyR < 0 || dyR >= convInfo.outHeight ||\n Math.floor(dyR) !== dyR) {\n continue;\n }\n for (let wC = 0; wC < effectiveFilterWidth; wC += dilationWidth) {\n const dyC = (dyCCorner + wC) / strideWidth;\n if (dyC < 0 || dyC >= convInfo.outWidth ||\n Math.floor(dyC) !== dyC) {\n continue;\n }\n const maxPos = effectiveFilterHeight * effectiveFilterWidth - 1 -\n maxPosBuf.get(b, dyR, dyC, d);\n const curPos = wR * effectiveFilterWidth + wC;\n const mask = maxPos === curPos ? 1 : 0;\n if (mask === 0) {\n continue;\n }\n const pixel = dyBuf.get(b, dyR, dyC, d);\n dotProd += pixel * mask;\n }\n }\n dx.set(dotProd, b, dxR, dxC, d);\n }\n }\n }\n }\n return backend.makeTensorInfo(dx.shape, dx.dtype, dx.values);\n}\nexport const maxPoolGradConfig = {\n kernelName: MaxPoolGrad,\n backendName: 'cpu',\n kernelFunc: maxPoolGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbEdyYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL01heFBvb2xHcmFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUE0QixXQUFXLEVBQW9FLE1BQU0sdUJBQXVCLENBQUM7QUFHckssT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFJM0I7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDaEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUNwQixRQUFR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O2dDQUMxRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBWSxDQUFDOzRCQUM5QyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxDQUFDOzRCQUU5QyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dDQUNkLFNBQVM7NkJBQ1Y7NEJBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEMsT0FBTyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7eUJBQ3pCO3FCQUNGO29CQUNELEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7S0FDRjtJQUNELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgYnVmZmVyLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1heFBvb2xHcmFkLCBNYXhQb29sR3JhZEF0dHJzLCBNYXhQb29sR3JhZElucHV0cywgUmFuaywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge21heFBvb2xQb3NpdGlvbnN9IGZyb20gJy4uL3V0aWxzL3Bvb2xfdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4UG9vbEdyYWQoYXJnczoge1xuICBpbnB1dHM6IE1heFBvb2xHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IE1heFBvb2xHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2R5LCBpbnB1dCwgb3V0cHV0fSA9IGlucHV0cztcbiAgY29uc3QgeCA9IGlucHV0O1xuICBhc3NlcnROb3RDb21wbGV4KFtpbnB1dCwgb3V0cHV0XSwgJ21heFBvb2xHcmFkJyk7XG4gIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGRpbVJvdW5kaW5nTW9kZX0gPSBhdHRycztcblxuICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgIHguc2hhcGUgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIGZpbHRlclNpemUsIHN0cmlkZXMsXG4gICAgICAxIC8qIGRpbGF0aW9ucyAqLywgcGFkLCBkaW1Sb3VuZGluZ01vZGUpO1xuICBjb25zdCB4VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IG1heFBvc0J1ZiA9IGJ1ZmZlcihcbiAgICAgIGNvbnZJbmZvLm91dFNoYXBlLCB4LmR0eXBlLFxuICAgICAgbWF4UG9vbFBvc2l0aW9ucyh4VmFsdWVzLCB4LnNoYXBlLCB4LmR0eXBlLCBjb252SW5mbykudmFsdWVzKTtcbiAgY29uc3Qgc3RyaWRlSGVpZ2h0ID0gY29udkluZm8uc3RyaWRlSGVpZ2h0O1xuICBjb25zdCBzdHJpZGVXaWR0aCA9IGNvbnZJbmZvLnN0cmlkZVdpZHRoO1xuICBjb25zdCBkaWxhdGlvbkhlaWdodCA9IGNvbnZJbmZvLmRpbGF0aW9uSGVpZ2h0O1xuICBjb25zdCBkaWxhdGlvbldpZHRoID0gY29udkluZm8uZGlsYXRpb25XaWR0aDtcbiAgY29uc3QgZWZmZWN0aXZlRmlsdGVySGVpZ2h0ID0gY29udkluZm8uZWZmZWN0aXZlRmlsdGVySGVpZ2h0O1xuICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJXaWR0aCA9IGNvbnZJbmZvLmVmZmVjdGl2ZUZpbHRlcldpZHRoO1xuICBjb25zdCBwYWRMZWZ0ID0gZWZmZWN0aXZlRmlsdGVyV2lkdGggLSAxIC0gY29udkluZm8ucGFkSW5mby5sZWZ0O1xuICBjb25zdCBwYWRUb3AgPSBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQgLSAxIC0gY29udkluZm8ucGFkSW5mby50b3A7XG4gIGNvbnN0IGR4ID1cbiAgICAgIGJ1ZmZlcjxSYW5rLlI0Pih4LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCAnZmxvYXQzMicpO1xuXG4gIGNvbnN0IGR5RGF0YSA9IGJhY2tlbmQuZGF0YS5nZXQoZHkuZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuICBjb25zdCBkeUJ1ZiA9IGJ1ZmZlcjxSYW5rLlI0PihcbiAgICAgIGR5LnNoYXBlIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLCAnZmxvYXQzMicsIGR5RGF0YSk7XG5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBjb252SW5mby5iYXRjaFNpemU7ICsrYikge1xuICAgIGZvciAobGV0IGQgPSAwOyBkIDwgY29udkluZm8uaW5DaGFubmVsczsgKytkKSB7XG4gICAgICBmb3IgKGxldCBkeFIgPSAwOyBkeFIgPCBjb252SW5mby5pbkhlaWdodDsgKytkeFIpIHtcbiAgICAgICAgZm9yIChsZXQgZHhDID0gMDsgZHhDIDwgY29udkluZm8uaW5XaWR0aDsgKytkeEMpIHtcbiAgICAgICAgICAvLyBTaGFkZXIgY29kZSBiZWdpbnMuXG4gICAgICAgICAgY29uc3QgZHlSQ29ybmVyID0gZHhSIC0gcGFkVG9wO1xuICAgICAgICAgIGNvbnN0IGR5Q0Nvcm5lciA9IGR4QyAtIHBhZExlZnQ7XG4gICAgICAgICAgbGV0IGRvdFByb2QgPSAwO1xuICAgICAgICAgIGZvciAobGV0IHdSID0gMDsgd1IgPCBlZmZlY3RpdmVGaWx0ZXJIZWlnaHQ7IHdSICs9IGRpbGF0aW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCBkeVIgPSAoZHlSQ29ybmVyICsgd1IpIC8gc3RyaWRlSGVpZ2h0O1xuICAgICAgICAgICAgaWYgKGR5UiA8IDAgfHwgZHlSID49IGNvbnZJbmZvLm91dEhlaWdodCB8fFxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZHlSKSAhPT0gZHlSKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgd0MgPSAwOyB3QyA8IGVmZmVjdGl2ZUZpbHRlcldpZHRoOyB3QyArPSBkaWxhdGlvbldpZHRoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGR5QyA9IChkeUNDb3JuZXIgKyB3QykgLyBzdHJpZGVXaWR0aDtcbiAgICAgICAgICAgICAgaWYgKGR5QyA8IDAgfHwgZHlDID49IGNvbnZJbmZvLm91dFdpZHRoIHx8XG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGR5QykgIT09IGR5Qykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1heFBvcyA9IGVmZmVjdGl2ZUZpbHRlckhlaWdodCAqIGVmZmVjdGl2ZUZpbHRlcldpZHRoIC0gMSAtXG4gICAgICAgICAgICAgICAgICAobWF4UG9zQnVmLmdldChiLCBkeVIsIGR5QywgZCkgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VyUG9zID0gd1IgKiBlZmZlY3RpdmVGaWx0ZXJXaWR0aCArIHdDO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1hc2sgPSBtYXhQb3MgPT09IGN1clBvcyA/IDEgOiAwO1xuICAgICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcGl4ZWwgPSBkeUJ1Zi5nZXQoYiwgZHlSLCBkeUMsIGQpO1xuICAgICAgICAgICAgICBkb3RQcm9kICs9IHBpeGVsICogbWFzaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHguc2V0KGRvdFByb2QsIGIsIGR4UiwgZHhDLCBkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhkeC5zaGFwZSwgZHguZHR5cGUsIGR4LnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNYXhQb29sR3JhZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBtYXhQb29sR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nimport { maxPoolPositions, pool } from '../utils/pool_utils';\nexport function maxPoolWithArgmaxImpl(xValues, xShape, dtype, includeBatchInIndex, convInfo) {\n const strides = util.computeStrides(xShape);\n const maxPools = pool(xValues, xShape, dtype, strides, convInfo, 'max');\n const maxPositions = maxPoolPositions(xValues, xShape, dtype, convInfo, true, includeBatchInIndex);\n return [maxPools.values, maxPositions.values];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbFdpdGhBcmdtYXhfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWF4UG9vbFdpdGhBcmdtYXhfaW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQXFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxNQUFNLFVBQVUscUJBQXFCLENBQ2pDLE9BQW1CLEVBQUUsTUFBZ0IsRUFBRSxLQUFlLEVBQ3RELG1CQUE0QixFQUFFLFFBQWlDO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUVqRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cbmltcG9ydCB7YmFja2VuZF91dGlsLCBEYXRhVHlwZSwgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHttYXhQb29sUG9zaXRpb25zLCBwb29sfSBmcm9tICcuLi91dGlscy9wb29sX3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBtYXhQb29sV2l0aEFyZ21heEltcGwoXG4gICAgeFZhbHVlczogVHlwZWRBcnJheSwgeFNoYXBlOiBudW1iZXJbXSwgZHR5cGU6IERhdGFUeXBlLFxuICAgIGluY2x1ZGVCYXRjaEluSW5kZXg6IGJvb2xlYW4sIGNvbnZJbmZvOiBiYWNrZW5kX3V0aWwuQ29udjJESW5mbykge1xuICBjb25zdCBzdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4U2hhcGUpO1xuICBjb25zdCBtYXhQb29scyA9IHBvb2woeFZhbHVlcywgeFNoYXBlLCBkdHlwZSwgc3RyaWRlcywgY29udkluZm8sICdtYXgnKTtcbiAgY29uc3QgbWF4UG9zaXRpb25zID0gbWF4UG9vbFBvc2l0aW9ucyhcbiAgICAgIHhWYWx1ZXMsIHhTaGFwZSwgZHR5cGUsIGNvbnZJbmZvLCB0cnVlLCBpbmNsdWRlQmF0Y2hJbkluZGV4KTtcblxuICByZXR1cm4gW21heFBvb2xzLnZhbHVlcywgbWF4UG9zaXRpb25zLnZhbHVlc107XG59XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { MaxPoolWithArgmax } from '@tensorflow/tfjs-core';\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { maxPoolWithArgmaxImpl } from './MaxPoolWithArgmax_impl';\nexport const maxPoolWithArgmaxConfig = {\n kernelName: MaxPoolWithArgmax,\n backendName: 'cpu',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { x } = inputs;\n const { filterSize, strides, pad, includeBatchInIndex } = attrs;\n const cpuBackend = backend;\n assertNotComplex(x, 'MaxPoolWithArgmax');\n const values = cpuBackend.data.get(x.dataId).values;\n const convInfo = backend_util.computePool2DInfo(x.shape, filterSize, strides, [1, 1], pad);\n const [pooled, indexes] = maxPoolWithArgmaxImpl(values, x.shape, x.dtype, includeBatchInIndex, convInfo);\n const pooledDataId = cpuBackend.write(pooled, convInfo.outShape, x.dtype);\n const indexesDataId = cpuBackend.write(indexes, convInfo.outShape, x.dtype);\n return [\n { dataId: pooledDataId, shape: convInfo.outShape, dtype: x.dtype },\n { dataId: indexesDataId, shape: convInfo.outShape, dtype: 'int32' }\n ];\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF4UG9vbFdpdGhBcmdtYXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL01heFBvb2xXaXRoQXJnbWF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RyxPQUFPLEVBQUMsWUFBWSxFQUEyQixNQUFNLHVCQUF1QixDQUFDO0FBRTdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUI7SUFDbkQsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBaUMsQ0FBQztRQUM5QyxNQUFNLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUMsR0FDakQsS0FBMEMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxPQUF5QixDQUFDO1FBQzdDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FDM0MsQ0FBQyxDQUFDLEtBQXlDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFDaEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxxQkFBcUIsQ0FDM0MsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU3RCxNQUFNLFlBQVksR0FDZCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQXNCLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxhQUFhLEdBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFxQixFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLE9BQU87WUFDTCxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUM7WUFDaEUsRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUM7U0FDbEUsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge01heFBvb2xXaXRoQXJnbWF4LCBNYXhQb29sV2l0aEFyZ21heEF0dHJzLCBNYXhQb29sV2l0aEFyZ21heElucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuaW1wb3J0IHttYXhQb29sV2l0aEFyZ21heEltcGx9IGZyb20gJy4vTWF4UG9vbFdpdGhBcmdtYXhfaW1wbCc7XG5cbmV4cG9ydCBjb25zdCBtYXhQb29sV2l0aEFyZ21heENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNYXhQb29sV2l0aEFyZ21heCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiAoe2lucHV0cywgYXR0cnMsIGJhY2tlbmR9KSA9PiB7XG4gICAgY29uc3Qge3h9ID0gaW5wdXRzIGFzIE1heFBvb2xXaXRoQXJnbWF4SW5wdXRzO1xuICAgIGNvbnN0IHtmaWx0ZXJTaXplLCBzdHJpZGVzLCBwYWQsIGluY2x1ZGVCYXRjaEluSW5kZXh9ID1cbiAgICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBNYXhQb29sV2l0aEFyZ21heEF0dHJzO1xuICAgIGNvbnN0IGNwdUJhY2tlbmQgPSBiYWNrZW5kIGFzIE1hdGhCYWNrZW5kQ1BVO1xuICAgIGFzc2VydE5vdENvbXBsZXgoeCwgJ01heFBvb2xXaXRoQXJnbWF4Jyk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgICBjb25zdCBjb252SW5mbyA9IGJhY2tlbmRfdXRpbC5jb21wdXRlUG9vbDJESW5mbyhcbiAgICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgZmlsdGVyU2l6ZSwgc3RyaWRlcyxcbiAgICAgICAgWzEsIDFdLCBwYWQpO1xuICAgIGNvbnN0IFtwb29sZWQsIGluZGV4ZXNdID0gbWF4UG9vbFdpdGhBcmdtYXhJbXBsKFxuICAgICAgICB2YWx1ZXMsIHguc2hhcGUsIHguZHR5cGUsIGluY2x1ZGVCYXRjaEluSW5kZXgsIGNvbnZJbmZvKTtcblxuICAgIGNvbnN0IHBvb2xlZERhdGFJZCA9XG4gICAgICAgIGNwdUJhY2tlbmQud3JpdGUocG9vbGVkIGFzIEZsb2F0MzJBcnJheSwgY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuICAgIGNvbnN0IGluZGV4ZXNEYXRhSWQgPVxuICAgICAgICBjcHVCYWNrZW5kLndyaXRlKGluZGV4ZXMgYXMgSW50MzJBcnJheSwgY29udkluZm8ub3V0U2hhcGUsIHguZHR5cGUpO1xuICAgIHJldHVybiBbXG4gICAgICB7ZGF0YUlkOiBwb29sZWREYXRhSWQsIHNoYXBlOiBjb252SW5mby5vdXRTaGFwZSwgZHR5cGU6IHguZHR5cGV9LFxuICAgICAge2RhdGFJZDogaW5kZXhlc0RhdGFJZCwgc2hhcGU6IGNvbnZJbmZvLm91dFNoYXBlLCBkdHlwZTogJ2ludDMyJ31cbiAgICBdO1xuICB9XG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Mean, util } from '@tensorflow/tfjs-core';\nimport { cast } from './Cast';\nimport { div } from './RealDiv';\nimport { sum } from './Sum';\nexport function mean(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n const axes = util.parseAxisParam(axis, x.shape);\n const shapes = backend_util.computeOutAndReduceShapes(x.shape, axes);\n const reduceShape = shapes[1];\n const reduceSize = util.sizeFromShape(reduceShape);\n const toDispose = [];\n const reduceSizeScalar = backend.makeTensorInfo([], 'float32', new Float32Array([reduceSize]));\n toDispose.push(reduceSizeScalar);\n const $x = cast({ inputs: { x }, backend, attrs: { dtype: 'float32' } });\n toDispose.push($x);\n const res = div({ inputs: { a: $x, b: reduceSizeScalar }, backend });\n toDispose.push(res);\n const result = sum({ inputs: { x: res }, backend, attrs: { axis, keepDims } });\n toDispose.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const meanConfig = {\n kernelName: Mean,\n backendName: 'cpu',\n kernelFunc: mean\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTWVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixJQUFJLEVBQXFDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzVILE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUM5QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sVUFBVSxJQUFJLENBQ2hCLElBQXFFO0lBRXZFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRS9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsTUFBTSxnQkFBZ0IsR0FDbEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUNuRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRW5CLE1BQU0sR0FBRyxHQUNMLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUN2RSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUV6RSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQTZCO0NBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1lYW4sIE1lYW5BdHRycywgTWVhbklucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHtjYXN0fSBmcm9tICcuL0Nhc3QnO1xuaW1wb3J0IHtkaXZ9IGZyb20gJy4vUmVhbERpdic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9TdW0nO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVhbihcbiAgICBhcmdzOiB7aW5wdXRzOiBNZWFuSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IE1lYW5BdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBjb25zdCBheGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShheGlzLCB4LnNoYXBlKTtcbiAgY29uc3Qgc2hhcGVzID0gYmFja2VuZF91dGlsLmNvbXB1dGVPdXRBbmRSZWR1Y2VTaGFwZXMoeC5zaGFwZSwgYXhlcyk7XG4gIGNvbnN0IHJlZHVjZVNoYXBlID0gc2hhcGVzWzFdO1xuICBjb25zdCByZWR1Y2VTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHJlZHVjZVNoYXBlKTtcbiAgY29uc3QgdG9EaXNwb3NlID0gW107XG4gIGNvbnN0IHJlZHVjZVNpemVTY2FsYXIgPVxuICAgICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbXSwgJ2Zsb2F0MzInLCBuZXcgRmxvYXQzMkFycmF5KFtyZWR1Y2VTaXplXSkpO1xuICB0b0Rpc3Bvc2UucHVzaChyZWR1Y2VTaXplU2NhbGFyKTtcblxuICBjb25zdCAkeCA9IGNhc3Qoe2lucHV0czoge3h9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG4gIHRvRGlzcG9zZS5wdXNoKCR4KTtcblxuICBjb25zdCByZXMgPVxuICAgICAgZGl2KHtpbnB1dHM6IHthOiAkeCwgYjogcmVkdWNlU2l6ZVNjYWxhcn0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICB0b0Rpc3Bvc2UucHVzaChyZXMpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHN1bSh7aW5wdXRzOiB7eDogcmVzfSwgYmFja2VuZCwgYXR0cnM6IHtheGlzLCBrZWVwRGltc319KTtcblxuICB0b0Rpc3Bvc2UuZm9yRWFjaCh0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBtZWFuQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE1lYW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbWVhbiBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Min, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function min(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { axis, keepDims } = attrs;\n assertNotComplex(x, 'min');\n const origAxes = util.parseAxisParam(axis, x.shape);\n let axes = origAxes;\n const permutedAxes = backend_util.getAxesPermutation(axes, x.shape.length);\n let $x = x;\n if (permutedAxes != null) {\n $x = transpose({ inputs: { x }, backend, attrs: { perm: permutedAxes } });\n axes = backend_util.getInnerMostAxes(axes.length, x.shape.length);\n }\n backend_util.assertAxesAreInnerMostDims('min', axes, $x.shape.length);\n const [outShape, reduceShape] = backend_util.computeOutAndReduceShapes($x.shape, axes);\n const reduceSize = util.sizeFromShape(reduceShape);\n const vals = util.makeZerosTypedArray(util.sizeFromShape(outShape), $x.dtype);\n const aVals = backend.data.get($x.dataId).values;\n for (let i = 0; i < vals.length; ++i) {\n const offset = i * reduceSize;\n let min = aVals[offset];\n for (let j = 0; j < reduceSize; ++j) {\n const value = aVals[offset + j];\n if (Number.isNaN(value) ||\n value < min) { // comparison with NaN always return false\n min = value;\n }\n }\n vals[i] = min;\n }\n if (permutedAxes != null) {\n backend.disposeIntermediateTensorInfo($x);\n }\n const result = backend.makeTensorInfo(outShape, $x.dtype, vals);\n if (keepDims) {\n const expandedShape = backend_util.expandShapeToKeepDim(outShape, origAxes);\n const reshapedResult = reshape({ inputs: { x: result }, backend, attrs: { shape: expandedShape } });\n backend.disposeIntermediateTensorInfo(result);\n return reshapedResult;\n }\n return result;\n}\nexport const minConfig = {\n kernelName: Min,\n backendName: 'cpu',\n kernelFunc: min\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9NaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsR0FBRyxFQUErQyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdySSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxHQUFHLENBQ2YsSUFBbUU7SUFFckUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7SUFDcEIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkU7SUFFRCxZQUFZLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQ3pCLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQy9ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNuQixLQUFLLEdBQUcsR0FBRyxFQUFFLEVBQUcsMENBQTBDO2dCQUM1RCxHQUFHLEdBQUcsS0FBSyxDQUFDO2FBQ2I7U0FDRjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDZjtJQUVELElBQUksWUFBWSxJQUFJLElBQUksRUFBRTtRQUN4QixPQUFPLENBQUMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRWhFLElBQUksUUFBUSxFQUFFO1FBQ1osTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RSxNQUFNLGNBQWMsR0FDaEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QyxPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQWlCO0lBQ3JDLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLEdBQTRCO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE1pbiwgTWluQXR0cnMsIE1pbklucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3RyYW5zcG9zZX0gZnJvbSAnLi9UcmFuc3Bvc2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKFxuICAgIGFyZ3M6IHtpbnB1dHM6IE1pbklucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBNaW5BdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtheGlzLCBrZWVwRGltc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICdtaW4nKTtcblxuICBjb25zdCBvcmlnQXhlcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSk7XG4gIGxldCBheGVzID0gb3JpZ0F4ZXM7XG4gIGNvbnN0IHBlcm11dGVkQXhlcyA9IGJhY2tlbmRfdXRpbC5nZXRBeGVzUGVybXV0YXRpb24oYXhlcywgeC5zaGFwZS5sZW5ndGgpO1xuICBsZXQgJHggPSB4O1xuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICAkeCA9IHRyYW5zcG9zZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7cGVybTogcGVybXV0ZWRBeGVzfX0pO1xuICAgIGF4ZXMgPSBiYWNrZW5kX3V0aWwuZ2V0SW5uZXJNb3N0QXhlcyhheGVzLmxlbmd0aCwgeC5zaGFwZS5sZW5ndGgpO1xuICB9XG5cbiAgYmFja2VuZF91dGlsLmFzc2VydEF4ZXNBcmVJbm5lck1vc3REaW1zKCdtaW4nLCBheGVzLCAkeC5zaGFwZS5sZW5ndGgpO1xuICBjb25zdCBbb3V0U2hhcGUsIHJlZHVjZVNoYXBlXSA9XG4gICAgICBiYWNrZW5kX3V0aWwuY29tcHV0ZU91dEFuZFJlZHVjZVNoYXBlcygkeC5zaGFwZSwgYXhlcyk7XG4gIGNvbnN0IHJlZHVjZVNpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUocmVkdWNlU2hhcGUpO1xuICBjb25zdCB2YWxzID0gdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSksICR4LmR0eXBlKTtcblxuICBjb25zdCBhVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoJHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaSAqIHJlZHVjZVNpemU7XG4gICAgbGV0IG1pbiA9IGFWYWxzW29mZnNldF07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWR1Y2VTaXplOyArK2opIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYVZhbHNbb2Zmc2V0ICsgal07XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSB8fFxuICAgICAgICAgIHZhbHVlIDwgbWluKSB7ICAvLyBjb21wYXJpc29uIHdpdGggTmFOIGFsd2F5cyByZXR1cm4gZmFsc2VcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbHNbaV0gPSBtaW47XG4gIH1cblxuICBpZiAocGVybXV0ZWRBeGVzICE9IG51bGwpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKCR4KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8ob3V0U2hhcGUsICR4LmR0eXBlLCB2YWxzKTtcblxuICBpZiAoa2VlcERpbXMpIHtcbiAgICBjb25zdCBleHBhbmRlZFNoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG91dFNoYXBlLCBvcmlnQXhlcyk7XG4gICAgY29uc3QgcmVzaGFwZWRSZXN1bHQgPVxuICAgICAgICByZXNoYXBlKHtpbnB1dHM6IHt4OiByZXN1bHR9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBleHBhbmRlZFNoYXBlfX0pO1xuXG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhyZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc2hhcGVkUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IG1pbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNaW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbWluIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { MirrorPad, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function mirrorPad(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { paddings, mode } = attrs;\n assertNotComplex(x, 'mirrorPad');\n const outShape = paddings.map((p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n const start = paddings.map(p => p[0]);\n const end = paddings.map((p, i) => p[0] + x.shape[i]);\n const offset = mode === 'reflect' ? 0 : 1;\n const xVals = backend.data.get(x.dataId).values;\n const xRank = x.shape.length;\n const xStrides = util.computeStrides(x.shape);\n const resultSize = util.sizeFromShape(outShape);\n const resultRank = outShape.length;\n const resultStrides = util.computeStrides(outShape);\n const resVals = util.getTypedArrayFromDType(x.dtype, resultSize);\n for (let i = 0; i < resultSize; i++) {\n let coords = util.indexToLoc(i, resultRank, resultStrides);\n for (let i = 0; i < resultRank; i++) {\n if (coords[i] < start[i]) {\n coords[i] = start[i] * 2 - coords[i] - offset;\n }\n else if (coords[i] >= end[i]) {\n coords[i] = (end[i] - 1) * 2 - coords[i] + offset;\n }\n }\n coords = coords.map((c, i) => c - start[i]);\n const inIndex = util.locToIndex(coords, xRank, xStrides);\n resVals[i] = xVals[inIndex];\n }\n const outId = backend.write(resVals, outShape, x.dtype);\n return { dataId: outId, shape: outShape, dtype: x.dtype };\n}\nexport const mirrorPadConfig = {\n kernelName: MirrorPad,\n backendName: 'cpu',\n kernelFunc: mirrorPad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlycm9yUGFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9NaXJyb3JQYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixTQUFTLEVBQTRFLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzFKLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWpDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3pCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV2RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxLQUF3QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQy9DO2lCQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFekQsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM3QjtJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTWlycm9yUGFkLCBNaXJyb3JQYWRBdHRycywgTWlycm9yUGFkSW5wdXRzLCBOdW1lcmljRGF0YVR5cGUsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbWlycm9yUGFkKGFyZ3M6IHtcbiAgaW5wdXRzOiBNaXJyb3JQYWRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogTWlycm9yUGFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBjb25zdCB7cGFkZGluZ3MsIG1vZGV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnbWlycm9yUGFkJyk7XG5cbiAgY29uc3Qgb3V0U2hhcGUgPSBwYWRkaW5ncy5tYXAoXG4gICAgICAocCwgaSkgPT4gcFswXSAvKiBiZWZvcmVQYWQgKi8gKyB4LnNoYXBlW2ldICsgcFsxXSAvKiBhZnRlclBhZCAqLyk7XG5cbiAgY29uc3Qgc3RhcnQgPSBwYWRkaW5ncy5tYXAocCA9PiBwWzBdKTtcbiAgY29uc3QgZW5kID0gcGFkZGluZ3MubWFwKChwLCBpKSA9PiBwWzBdICsgeC5zaGFwZVtpXSk7XG4gIGNvbnN0IG9mZnNldCA9IG1vZGUgPT09ICdyZWZsZWN0JyA/IDAgOiAxO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHhTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyh4LnNoYXBlKTtcblxuICBjb25zdCByZXN1bHRTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKG91dFNoYXBlKTtcbiAgY29uc3QgcmVzdWx0UmFuayA9IG91dFNoYXBlLmxlbmd0aDtcbiAgY29uc3QgcmVzdWx0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0U2hhcGUpO1xuICBjb25zdCByZXNWYWxzID1cbiAgICAgIHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZSh4LmR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgcmVzdWx0U2l6ZSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRTaXplOyBpKyspIHtcbiAgICBsZXQgY29vcmRzID0gdXRpbC5pbmRleFRvTG9jKGksIHJlc3VsdFJhbmssIHJlc3VsdFN0cmlkZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0UmFuazsgaSsrKSB7XG4gICAgICBpZiAoY29vcmRzW2ldIDwgc3RhcnRbaV0pIHtcbiAgICAgICAgY29vcmRzW2ldID0gc3RhcnRbaV0gKiAyIC0gY29vcmRzW2ldIC0gb2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChjb29yZHNbaV0gPj0gZW5kW2ldKSB7XG4gICAgICAgIGNvb3Jkc1tpXSA9IChlbmRbaV0gLSAxKSAqIDIgLSBjb29yZHNbaV0gKyBvZmZzZXQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvb3JkcyA9IGNvb3Jkcy5tYXAoKGMsIGkpID0+IGMgLSBzdGFydFtpXSk7XG5cbiAgICBjb25zdCBpbkluZGV4ID0gdXRpbC5sb2NUb0luZGV4KGNvb3JkcywgeFJhbmssIHhTdHJpZGVzKTtcblxuICAgIHJlc1ZhbHNbaV0gPSB4VmFsc1tpbkluZGV4XTtcbiAgfVxuXG4gIGNvbnN0IG91dElkID0gYmFja2VuZC53cml0ZShyZXNWYWxzLCBvdXRTaGFwZSwgeC5kdHlwZSk7XG5cbiAgcmV0dXJuIHtkYXRhSWQ6IG91dElkLCBzaGFwZTogb3V0U2hhcGUsIGR0eXBlOiB4LmR0eXBlfTtcbn1cblxuZXhwb3J0IGNvbnN0IG1pcnJvclBhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBNaXJyb3JQYWQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbWlycm9yUGFkIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Mod } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const modImpl = createSimpleBinaryKernelImpl(((aValue, bValue) => {\n const rem = aValue % bValue;\n if ((aValue < 0 && bValue < 0) || (aValue >= 0 && bValue >= 0)) {\n return rem;\n }\n else {\n return (rem + bValue) % bValue;\n }\n}));\nexport const mod = binaryKernelFunc(Mod, modImpl);\nexport const modConfig = {\n kernelName: Mod,\n backendName: 'cpu',\n kernelFunc: mod\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Nb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQzlELE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTTtRQUNMLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVSLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUFHO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBNb2R9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgbW9kSW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoKGFWYWx1ZTogbnVtYmVyLCBiVmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVtID0gYVZhbHVlICUgYlZhbHVlO1xuICAgICAgaWYgKChhVmFsdWUgPCAwICYmIGJWYWx1ZSA8IDApIHx8IChhVmFsdWUgPj0gMCAmJiBiVmFsdWUgPj0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHJlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAocmVtICsgYlZhbHVlKSAlIGJWYWx1ZTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbmV4cG9ydCBjb25zdCBtb2QgPSBiaW5hcnlLZXJuZWxGdW5jKE1vZCwgbW9kSW1wbCk7XG5cbmV4cG9ydCBjb25zdCBtb2RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTW9kLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IG1vZFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Softmax, util } from '@tensorflow/tfjs-core';\nimport { exp } from './Exp';\nimport { max } from './Max';\nimport { div } from './RealDiv';\nimport { reshape } from './Reshape';\nimport { sub } from './Sub';\nimport { sum } from './Sum';\nexport function softmax(args) {\n const { inputs, backend, attrs } = args;\n const { logits } = inputs;\n const { dim } = attrs;\n const logitsRank = logits.shape.length;\n let $dim = dim;\n if ($dim === -1) {\n $dim = logitsRank - 1;\n }\n if ($dim !== logitsRank - 1) {\n throw Error('Softmax along a non-last dimension is not yet supported. ' +\n `Logits was rank ${logitsRank} and dim was ${$dim}`);\n }\n const axes = util.parseAxisParam([$dim], logits.shape);\n const maxLogit = max({\n inputs: { x: logits },\n backend,\n attrs: { reductionIndices: axes, keepDims: false }\n });\n const expandedShape = backend_util.expandShapeToKeepDim(maxLogit.shape, axes);\n const maxLogitReshaped = reshape({ inputs: { x: maxLogit }, backend, attrs: { shape: expandedShape } });\n const a = sub({ inputs: { a: logits, b: maxLogitReshaped }, backend });\n const b = exp({ inputs: { x: a }, backend });\n const sumExp = sum({ inputs: { x: b }, backend, attrs: { axis: axes, keepDims: false } });\n const sumReshaped = reshape({ inputs: { x: sumExp }, backend, attrs: { shape: expandedShape } });\n const result = div({ inputs: { a: b, b: sumReshaped }, backend });\n backend.disposeIntermediateTensorInfo(maxLogit);\n backend.disposeIntermediateTensorInfo(maxLogitReshaped);\n backend.disposeIntermediateTensorInfo(a);\n backend.disposeIntermediateTensorInfo(b);\n backend.disposeIntermediateTensorInfo(sumExp);\n backend.disposeIntermediateTensorInfo(sumReshaped);\n return result;\n}\nexport const softmaxConfig = {\n kernelName: Softmax,\n backendName: 'cpu',\n kernelFunc: softmax\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdG1heC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU29mdG1heC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixPQUFPLEVBQTJDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSXJJLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFcEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFdkMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2YsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDZixJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztLQUN2QjtJQUNELElBQUksSUFBSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxLQUFLLENBQ1AsMkRBQTJEO1lBQzNELG1CQUFtQixVQUFVLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDbkIsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQztRQUNuQixPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7S0FDakQsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFOUUsTUFBTSxnQkFBZ0IsR0FDbEIsT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxHQUNILEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUMzRSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FDUixHQUFHLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQyxFQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLFdBQVcsR0FDYixPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFM0UsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQWUsQ0FBQztJQUU1RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxPQUFPLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRW5ELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTb2Z0bWF4LCBTb2Z0bWF4QXR0cnMsIFNvZnRtYXhJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtleHB9IGZyb20gJy4vRXhwJztcbmltcG9ydCB7bWF4fSBmcm9tICcuL01heCc7XG5pbXBvcnQge2Rpdn0gZnJvbSAnLi9SZWFsRGl2JztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7c3VifSBmcm9tICcuL1N1Yic7XG5pbXBvcnQge3N1bX0gZnJvbSAnLi9TdW0nO1xuXG5leHBvcnQgZnVuY3Rpb24gc29mdG1heChcbiAgICBhcmdzOlxuICAgICAgICB7aW5wdXRzOiBTb2Z0bWF4SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFNvZnRtYXhBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7bG9naXRzfSA9IGlucHV0cztcbiAgY29uc3Qge2RpbX0gPSBhdHRycztcblxuICBjb25zdCBsb2dpdHNSYW5rID0gbG9naXRzLnNoYXBlLmxlbmd0aDtcblxuICBsZXQgJGRpbSA9IGRpbTtcbiAgaWYgKCRkaW0gPT09IC0xKSB7XG4gICAgJGRpbSA9IGxvZ2l0c1JhbmsgLSAxO1xuICB9XG4gIGlmICgkZGltICE9PSBsb2dpdHNSYW5rIC0gMSkge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgICAnU29mdG1heCBhbG9uZyBhIG5vbi1sYXN0IGRpbWVuc2lvbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4gJyArXG4gICAgICAgIGBMb2dpdHMgd2FzIHJhbmsgJHtsb2dpdHNSYW5rfSBhbmQgZGltIHdhcyAkeyRkaW19YCk7XG4gIH1cblxuICBjb25zdCBheGVzID0gdXRpbC5wYXJzZUF4aXNQYXJhbShbJGRpbV0sIGxvZ2l0cy5zaGFwZSk7XG4gIGNvbnN0IG1heExvZ2l0ID0gbWF4KHtcbiAgICBpbnB1dHM6IHt4OiBsb2dpdHN9LFxuICAgIGJhY2tlbmQsXG4gICAgYXR0cnM6IHtyZWR1Y3Rpb25JbmRpY2VzOiBheGVzLCBrZWVwRGltczogZmFsc2V9XG4gIH0pO1xuICBjb25zdCBleHBhbmRlZFNoYXBlID0gYmFja2VuZF91dGlsLmV4cGFuZFNoYXBlVG9LZWVwRGltKG1heExvZ2l0LnNoYXBlLCBheGVzKTtcblxuICBjb25zdCBtYXhMb2dpdFJlc2hhcGVkID1cbiAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IG1heExvZ2l0fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZXhwYW5kZWRTaGFwZX19KTtcbiAgY29uc3QgYSA9XG4gICAgICBzdWIoe2lucHV0czoge2E6IGxvZ2l0cywgYjogbWF4TG9naXRSZXNoYXBlZH0sIGJhY2tlbmR9KSBhcyBUZW5zb3JJbmZvO1xuICBjb25zdCBiID0gZXhwKHtpbnB1dHM6IHt4OiBhfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gIGNvbnN0IHN1bUV4cCA9XG4gICAgICBzdW0oe2lucHV0czoge3g6IGJ9LCBiYWNrZW5kLCBhdHRyczoge2F4aXM6IGF4ZXMsIGtlZXBEaW1zOiBmYWxzZX19KTtcbiAgY29uc3Qgc3VtUmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiB7eDogc3VtRXhwfSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZXhwYW5kZWRTaGFwZX19KTtcblxuICBjb25zdCByZXN1bHQgPSBkaXYoe2lucHV0czoge2E6IGIsIGI6IHN1bVJlc2hhcGVkfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhtYXhMb2dpdCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8obWF4TG9naXRSZXNoYXBlZCk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYSk7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oYik7XG4gIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oc3VtRXhwKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhzdW1SZXNoYXBlZCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHNvZnRtYXhDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU29mdG1heCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzb2Z0bWF4IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Multinomial, util } from '@tensorflow/tfjs-core';\nimport * as seedrandom from 'seedrandom';\nimport { assertNotComplex } from '../cpu_util';\nimport { softmax } from './Softmax';\nexport function multinomial(args) {\n const { inputs, backend, attrs } = args;\n const { logits } = inputs;\n const { numSamples, seed, normalized } = attrs;\n assertNotComplex(logits, 'multinomial');\n const probabilities = normalized ?\n logits :\n softmax({ inputs: { logits }, backend, attrs: { dim: -1 } });\n const batchSize = probabilities.shape[0];\n const numEvents = probabilities.shape[1];\n const probVals = backend.data.get(probabilities.dataId).values;\n const resShape = [batchSize, numSamples];\n const resVals = util.makeZerosTypedArray(util.sizeFromShape(resShape), 'int32');\n for (let b = 0; b < batchSize; ++b) {\n const offset = b * numEvents;\n // The cdf won't include the last event. It will be implicit if no other\n // event happened.\n const cdf = new Float32Array(numEvents - 1);\n cdf[0] = probVals[offset];\n for (let event = 1; event < cdf.length; ++event) {\n cdf[event] = cdf[event - 1] + probVals[offset + event];\n }\n const random = seedrandom.alea(seed.toString());\n const outOffset = b * numSamples;\n for (let sampleId = 0; sampleId < numSamples; ++sampleId) {\n const r = random();\n // Assume last event happened by default.\n resVals[outOffset + sampleId] = cdf.length;\n for (let event = 0; event < cdf.length; event++) {\n if (r < cdf[event]) {\n resVals[outOffset + sampleId] = event;\n break;\n }\n }\n }\n }\n if (!normalized) {\n backend.disposeIntermediateTensorInfo(probabilities);\n }\n return backend.makeTensorInfo(resShape, 'int32', resVals);\n}\nexport const multinomialConfig = {\n kernelName: Multinomial,\n backendName: 'cpu',\n kernelFunc: multinomial\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlub21pYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL011bHRpbm9taWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsV0FBVyxFQUErRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSSxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQztBQUd6QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDeEIsTUFBTSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUV4QyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQztRQUNSLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQzdFLE1BQU0sUUFBUSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXBFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM3Qix3RUFBd0U7UUFDeEUsa0JBQWtCO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFO1lBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDakMsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRTtZQUN4RCxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUVuQix5Q0FBeUM7WUFDekMsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBRTNDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN0QyxNQUFNO2lCQUNQO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNmLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUN0RDtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBNdWx0aW5vbWlhbCwgTXVsdGlub21pYWxBdHRycywgTXVsdGlub21pYWxJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5pbXBvcnQgKiBhcyBzZWVkcmFuZG9tIGZyb20gJ3NlZWRyYW5kb20nO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuaW1wb3J0IHtzb2Z0bWF4fSBmcm9tICcuL1NvZnRtYXgnO1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlub21pYWwoYXJnczoge1xuICBpbnB1dHM6IE11bHRpbm9taWFsSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IE11bHRpbm9taWFsQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2xvZ2l0c30gPSBpbnB1dHM7XG4gIGNvbnN0IHtudW1TYW1wbGVzLCBzZWVkLCBub3JtYWxpemVkfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgobG9naXRzLCAnbXVsdGlub21pYWwnKTtcblxuICBjb25zdCBwcm9iYWJpbGl0aWVzID0gbm9ybWFsaXplZCA/XG4gICAgICBsb2dpdHMgOlxuICAgICAgc29mdG1heCh7aW5wdXRzOiB7bG9naXRzfSwgYmFja2VuZCwgYXR0cnM6IHtkaW06IC0xfX0pO1xuXG4gIGNvbnN0IGJhdGNoU2l6ZSA9IHByb2JhYmlsaXRpZXMuc2hhcGVbMF07XG4gIGNvbnN0IG51bUV2ZW50cyA9IHByb2JhYmlsaXRpZXMuc2hhcGVbMV07XG4gIGNvbnN0IHByb2JWYWxzID0gYmFja2VuZC5kYXRhLmdldChwcm9iYWJpbGl0aWVzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHJlc1NoYXBlID0gW2JhdGNoU2l6ZSwgbnVtU2FtcGxlc107XG4gIGNvbnN0IHJlc1ZhbHMgPVxuICAgICAgdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZShyZXNTaGFwZSksICdpbnQzMicpO1xuXG4gIGZvciAobGV0IGIgPSAwOyBiIDwgYmF0Y2hTaXplOyArK2IpIHtcbiAgICBjb25zdCBvZmZzZXQgPSBiICogbnVtRXZlbnRzO1xuICAgIC8vIFRoZSBjZGYgd29uJ3QgaW5jbHVkZSB0aGUgbGFzdCBldmVudC4gSXQgd2lsbCBiZSBpbXBsaWNpdCBpZiBubyBvdGhlclxuICAgIC8vIGV2ZW50IGhhcHBlbmVkLlxuICAgIGNvbnN0IGNkZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtRXZlbnRzIC0gMSk7XG4gICAgY2RmWzBdID0gcHJvYlZhbHNbb2Zmc2V0XTtcbiAgICBmb3IgKGxldCBldmVudCA9IDE7IGV2ZW50IDwgY2RmLmxlbmd0aDsgKytldmVudCkge1xuICAgICAgY2RmW2V2ZW50XSA9IGNkZltldmVudCAtIDFdICsgcHJvYlZhbHNbb2Zmc2V0ICsgZXZlbnRdO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmRvbSA9IHNlZWRyYW5kb20uYWxlYShzZWVkLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IG91dE9mZnNldCA9IGIgKiBudW1TYW1wbGVzO1xuICAgIGZvciAobGV0IHNhbXBsZUlkID0gMDsgc2FtcGxlSWQgPCBudW1TYW1wbGVzOyArK3NhbXBsZUlkKSB7XG4gICAgICBjb25zdCByID0gcmFuZG9tKCk7XG5cbiAgICAgIC8vIEFzc3VtZSBsYXN0IGV2ZW50IGhhcHBlbmVkIGJ5IGRlZmF1bHQuXG4gICAgICByZXNWYWxzW291dE9mZnNldCArIHNhbXBsZUlkXSA9IGNkZi5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGV2ZW50ID0gMDsgZXZlbnQgPCBjZGYubGVuZ3RoOyBldmVudCsrKSB7XG4gICAgICAgIGlmIChyIDwgY2RmW2V2ZW50XSkge1xuICAgICAgICAgIHJlc1ZhbHNbb3V0T2Zmc2V0ICsgc2FtcGxlSWRdID0gZXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHByb2JhYmlsaXRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8ocmVzU2hhcGUsICdpbnQzMicsIHJlc1ZhbHMpO1xufVxuXG5leHBvcnQgY29uc3QgbXVsdGlub21pYWxDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTXVsdGlub21pYWwsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbXVsdGlub21pYWwgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { kernel_impls, NonMaxSuppressionV3 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV3Impl = kernel_impls.nonMaxSuppressionV3Impl;\nimport { assertNotComplex } from '../cpu_util';\nexport function nonMaxSuppressionV3(args) {\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold } = attrs;\n assertNotComplex(boxes, 'NonMaxSuppression');\n const boxesVals = backend.data.get(boxes.dataId).values;\n const scoresVals = backend.data.get(scores.dataId).values;\n const { selectedIndices } = nonMaxSuppressionV3Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold);\n return backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices));\n}\nexport const nonMaxSuppressionV3Config = {\n kernelName: NonMaxSuppressionV3,\n backendName: 'cpu',\n kernelFunc: nonMaxSuppressionV3\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WMy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixtQkFBbUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvSyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUdyRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBSW5DO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUU1RCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUU3QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUN0RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUV4RSxNQUFNLEVBQUMsZUFBZSxFQUFDLEdBQUcsdUJBQXVCLENBQzdDLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUV4RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQ3pCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7a2VybmVsX2ltcGxzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE5vbk1heFN1cHByZXNzaW9uVjMsIE5vbk1heFN1cHByZXNzaW9uVjNBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WM0lucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WM0ltcGwgPSBrZXJuZWxfaW1wbHMubm9uTWF4U3VwcHJlc3Npb25WM0ltcGw7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WMyhhcmdzOiB7XG4gIGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WM0lucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBOb25NYXhTdXBwcmVzc2lvblYzQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2JveGVzLCBzY29yZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7bWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZH0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KGJveGVzLCAnTm9uTWF4U3VwcHJlc3Npb24nKTtcblxuICBjb25zdCBib3hlc1ZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGJveGVzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHNjb3Jlc1ZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHNjb3Jlcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IHtzZWxlY3RlZEluZGljZXN9ID0gbm9uTWF4U3VwcHJlc3Npb25WM0ltcGwoXG4gICAgICBib3hlc1ZhbHMsIHNjb3Jlc1ZhbHMsIG1heE91dHB1dFNpemUsIGlvdVRocmVzaG9sZCwgc2NvcmVUaHJlc2hvbGQpO1xuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgW3NlbGVjdGVkSW5kaWNlcy5sZW5ndGhdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShzZWxlY3RlZEluZGljZXMpKTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uVjNDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTm9uTWF4U3VwcHJlc3Npb25WMyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBub25NYXhTdXBwcmVzc2lvblYzIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { kernel_impls, NonMaxSuppressionV4 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV4Impl = kernel_impls.nonMaxSuppressionV4Impl;\nimport { assertNotComplex } from '../cpu_util';\nexport function nonMaxSuppressionV4(args) {\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize } = attrs;\n assertNotComplex(boxes, 'NonMaxSuppressionPadded');\n const boxesVals = backend.data.get(boxes.dataId).values;\n const scoresVals = backend.data.get(scores.dataId).values;\n const { selectedIndices, validOutputs } = nonMaxSuppressionV4Impl(boxesVals, scoresVals, maxOutputSize, iouThreshold, scoreThreshold, padToMaxOutputSize);\n return [\n backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices)),\n backend.makeTensorInfo([], 'int32', new Int32Array([validOutputs]))\n ];\n}\nexport const nonMaxSuppressionV4Config = {\n kernelName: NonMaxSuppressionV4,\n backendName: 'cpu',\n kernelFunc: nonMaxSuppressionV4\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WNC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixtQkFBbUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvSyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBSW5DO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBQyxHQUNuRSxLQUFLLENBQUM7SUFFVixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUVuRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUN0RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUV4RSxNQUFNLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxHQUFHLHVCQUF1QixDQUMzRCxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUNsRSxrQkFBa0IsQ0FBQyxDQUFDO0lBRXhCLE9BQU87UUFDTCxPQUFPLENBQUMsY0FBYyxDQUNsQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztLQUNwRSxDQUFDO0FBQ0osQ0FBQztBQUNELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFpQjtJQUNyRCxVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxtQkFBNEM7Q0FDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtrZXJuZWxfaW1wbHMsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTm9uTWF4U3VwcHJlc3Npb25WNCwgTm9uTWF4U3VwcHJlc3Npb25WNEF0dHJzLCBOb25NYXhTdXBwcmVzc2lvblY0SW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5jb25zdCBub25NYXhTdXBwcmVzc2lvblY0SW1wbCA9IGtlcm5lbF9pbXBscy5ub25NYXhTdXBwcmVzc2lvblY0SW1wbDtcbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9uTWF4U3VwcHJlc3Npb25WNChhcmdzOiB7XG4gIGlucHV0czogTm9uTWF4U3VwcHJlc3Npb25WNElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBOb25NYXhTdXBwcmVzc2lvblY0QXR0cnNcbn0pOiBbVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7Ym94ZXMsIHNjb3Jlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHttYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLCBwYWRUb01heE91dHB1dFNpemV9ID1cbiAgICAgIGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoYm94ZXMsICdOb25NYXhTdXBwcmVzc2lvblBhZGRlZCcpO1xuXG4gIGNvbnN0IGJveGVzVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoYm94ZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgc2NvcmVzVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoc2NvcmVzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3Qge3NlbGVjdGVkSW5kaWNlcywgdmFsaWRPdXRwdXRzfSA9IG5vbk1heFN1cHByZXNzaW9uVjRJbXBsKFxuICAgICAgYm94ZXNWYWxzLCBzY29yZXNWYWxzLCBtYXhPdXRwdXRTaXplLCBpb3VUaHJlc2hvbGQsIHNjb3JlVGhyZXNob2xkLFxuICAgICAgcGFkVG9NYXhPdXRwdXRTaXplKTtcblxuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIFtzZWxlY3RlZEluZGljZXMubGVuZ3RoXSwgJ2ludDMyJywgbmV3IEludDMyQXJyYXkoc2VsZWN0ZWRJbmRpY2VzKSksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbXSwgJ2ludDMyJywgbmV3IEludDMyQXJyYXkoW3ZhbGlkT3V0cHV0c10pKVxuICBdO1xufVxuZXhwb3J0IGNvbnN0IG5vbk1heFN1cHByZXNzaW9uVjRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogTm9uTWF4U3VwcHJlc3Npb25WNCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBub25NYXhTdXBwcmVzc2lvblY0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { kernel_impls, NonMaxSuppressionV5 } from '@tensorflow/tfjs-core';\nconst nonMaxSuppressionV5Impl = kernel_impls.nonMaxSuppressionV5Impl;\nimport { assertNotComplex } from '../cpu_util';\nexport function nonMaxSuppressionV5(args) {\n const { inputs, backend, attrs } = args;\n const { boxes, scores } = inputs;\n const { maxOutputSize, iouThreshold, scoreThreshold, softNmsSigma } = attrs;\n assertNotComplex(boxes, 'NonMaxSuppressionWithScore');\n const boxesVals = backend.data.get(boxes.dataId).values;\n const scoresVals = backend.data.get(scores.dataId).values;\n const maxOutputSizeVal = maxOutputSize;\n const iouThresholdVal = iouThreshold;\n const scoreThresholdVal = scoreThreshold;\n const softNmsSigmaVal = softNmsSigma;\n const { selectedIndices, selectedScores } = nonMaxSuppressionV5Impl(boxesVals, scoresVals, maxOutputSizeVal, iouThresholdVal, scoreThresholdVal, softNmsSigmaVal);\n return [\n backend.makeTensorInfo([selectedIndices.length], 'int32', new Int32Array(selectedIndices)),\n backend.makeTensorInfo([selectedScores.length], 'float32', new Float32Array(selectedScores))\n ];\n}\nexport const nonMaxSuppressionV5Config = {\n kernelName: NonMaxSuppressionV5,\n backendName: 'cpu',\n kernelFunc: nonMaxSuppressionV5\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9uTWF4U3VwcHJlc3Npb25WNS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WNS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE0QixtQkFBbUIsRUFBOEUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvSyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBSW5DO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFMUUsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFFdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDdEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFeEUsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7SUFDdkMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0lBQ3pDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQztJQUVyQyxNQUFNLEVBQUMsZUFBZSxFQUFFLGNBQWMsRUFBQyxHQUFHLHVCQUF1QixDQUM3RCxTQUFTLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFDeEQsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFeEMsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQ2xCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsY0FBYyxDQUNsQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7a2VybmVsX2ltcGxzLCBLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE5vbk1heFN1cHByZXNzaW9uVjUsIE5vbk1heFN1cHByZXNzaW9uVjVBdHRycywgTm9uTWF4U3VwcHJlc3Npb25WNUlucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuY29uc3Qgbm9uTWF4U3VwcHJlc3Npb25WNUltcGwgPSBrZXJuZWxfaW1wbHMubm9uTWF4U3VwcHJlc3Npb25WNUltcGw7XG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIG5vbk1heFN1cHByZXNzaW9uVjUoYXJnczoge1xuICBpbnB1dHM6IE5vbk1heFN1cHByZXNzaW9uVjVJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogTm9uTWF4U3VwcHJlc3Npb25WNUF0dHJzXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2JveGVzLCBzY29yZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7bWF4T3V0cHV0U2l6ZSwgaW91VGhyZXNob2xkLCBzY29yZVRocmVzaG9sZCwgc29mdE5tc1NpZ21hfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoYm94ZXMsICdOb25NYXhTdXBwcmVzc2lvbldpdGhTY29yZScpO1xuXG4gIGNvbnN0IGJveGVzVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoYm94ZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgc2NvcmVzVmFscyA9IGJhY2tlbmQuZGF0YS5nZXQoc2NvcmVzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgbWF4T3V0cHV0U2l6ZVZhbCA9IG1heE91dHB1dFNpemU7XG4gIGNvbnN0IGlvdVRocmVzaG9sZFZhbCA9IGlvdVRocmVzaG9sZDtcbiAgY29uc3Qgc2NvcmVUaHJlc2hvbGRWYWwgPSBzY29yZVRocmVzaG9sZDtcbiAgY29uc3Qgc29mdE5tc1NpZ21hVmFsID0gc29mdE5tc1NpZ21hO1xuXG4gIGNvbnN0IHtzZWxlY3RlZEluZGljZXMsIHNlbGVjdGVkU2NvcmVzfSA9IG5vbk1heFN1cHByZXNzaW9uVjVJbXBsKFxuICAgICAgYm94ZXNWYWxzLCBzY29yZXNWYWxzLCBtYXhPdXRwdXRTaXplVmFsLCBpb3VUaHJlc2hvbGRWYWwsXG4gICAgICBzY29yZVRocmVzaG9sZFZhbCwgc29mdE5tc1NpZ21hVmFsKTtcblxuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIFtzZWxlY3RlZEluZGljZXMubGVuZ3RoXSwgJ2ludDMyJywgbmV3IEludDMyQXJyYXkoc2VsZWN0ZWRJbmRpY2VzKSksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW3NlbGVjdGVkU2NvcmVzLmxlbmd0aF0sICdmbG9hdDMyJywgbmV3IEZsb2F0MzJBcnJheShzZWxlY3RlZFNjb3JlcykpXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBub25NYXhTdXBwcmVzc2lvblY1Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE5vbk1heFN1cHByZXNzaW9uVjUsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogbm9uTWF4U3VwcHJlc3Npb25WNSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OneHot, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function oneHot(args) {\n const { inputs, backend, attrs } = args;\n const { indices } = inputs;\n const { dtype, depth, onValue, offValue } = attrs;\n assertNotComplex(indices, 'oneHot');\n const indicesSize = util.sizeFromShape(indices.shape);\n const res = new Float32Array(indicesSize * depth);\n res.fill(offValue);\n const indicesVal = backend.data.get(indices.dataId).values;\n for (let event = 0; event < indicesSize; ++event) {\n if (indicesVal[event] >= 0 && indicesVal[event] < depth) {\n res[event * depth + indicesVal[event]] = onValue;\n }\n }\n return backend.makeTensorInfo([...indices.shape, depth], dtype, res);\n}\nexport const oneHotConfig = {\n kernelName: OneHot,\n backendName: 'cpu',\n kernelFunc: oneHot\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lSG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9PbmVIb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixNQUFNLEVBQXFELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2hJLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLFVBQVUsTUFBTSxDQUNsQixJQUF5RTtJQUUzRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN6QixNQUFNLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWhELGdCQUFnQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbEQsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUV6RSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ2hELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFO1lBQ3ZELEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUNsRDtLQUNGO0lBRUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE9uZUhvdCwgT25lSG90QXR0cnMsIE9uZUhvdElucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVIb3QoXG4gICAgYXJnczoge2lucHV0czogT25lSG90SW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IE9uZUhvdEF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbmRpY2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2R0eXBlLCBkZXB0aCwgb25WYWx1ZSwgb2ZmVmFsdWV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChpbmRpY2VzLCAnb25lSG90Jyk7XG5cbiAgY29uc3QgaW5kaWNlc1NpemUgPSB1dGlsLnNpemVGcm9tU2hhcGUoaW5kaWNlcy5zaGFwZSk7XG5cbiAgY29uc3QgcmVzID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzU2l6ZSAqIGRlcHRoKTtcbiAgcmVzLmZpbGwob2ZmVmFsdWUpO1xuICBjb25zdCBpbmRpY2VzVmFsID0gYmFja2VuZC5kYXRhLmdldChpbmRpY2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgZm9yIChsZXQgZXZlbnQgPSAwOyBldmVudCA8IGluZGljZXNTaXplOyArK2V2ZW50KSB7XG4gICAgaWYgKGluZGljZXNWYWxbZXZlbnRdID49IDAgJiYgaW5kaWNlc1ZhbFtldmVudF0gPCBkZXB0aCkge1xuICAgICAgcmVzW2V2ZW50ICogZGVwdGggKyBpbmRpY2VzVmFsW2V2ZW50XV0gPSBvblZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFsuLi5pbmRpY2VzLnNoYXBlLCBkZXB0aF0sIGR0eXBlLCByZXMpO1xufVxuXG5leHBvcnQgY29uc3Qgb25lSG90Q29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IE9uZUhvdCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBvbmVIb3QgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ZerosLike } from '@tensorflow/tfjs-core';\nimport { complex } from './Complex';\nimport { fill } from './Fill';\nimport { imag } from './Imag';\nimport { real } from './Real';\nexport function zerosLike(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n if (x.dtype === 'string') {\n throw new Error('zerosLike is not supported for string tensors');\n }\n else if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const r = zerosLike({ inputs: { x: realPart }, backend });\n const imagPart = imag({ inputs: { input: x }, backend });\n const i = zerosLike({ inputs: { x: imagPart }, backend });\n const result = complex({ inputs: { real: r, imag: i }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(r);\n backend.disposeIntermediateTensorInfo(imagPart);\n backend.disposeIntermediateTensorInfo(i);\n return result;\n }\n else {\n return fill({ backend, attrs: { shape: x.shape, value: 0, dtype: x.dtype } });\n }\n}\nexport const zerosLikeConfig = {\n kernelName: ZerosLike,\n backendName: 'cpu',\n kernelFunc: zerosLike\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmVyb3NMaWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9aZXJvc0xpa2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxTQUFTLEVBQWtCLE1BQU0sdUJBQXVCLENBQUM7QUFJdkcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixNQUFNLFVBQVUsU0FBUyxDQUNyQixJQUF3RDtJQUMxRCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2xFO1NBQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRTlELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QyxPQUFPLE1BQU0sQ0FBQztLQUNmO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQzNFO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBaUI7SUFDM0MsVUFBVSxFQUFFLFNBQVM7SUFDckIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFNBQWtDO0NBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBUZW5zb3JJbmZvLCBaZXJvc0xpa2UsIFplcm9zTGlrZUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5pbXBvcnQge2NvbXBsZXh9IGZyb20gJy4vQ29tcGxleCc7XG5pbXBvcnQge2ZpbGx9IGZyb20gJy4vRmlsbCc7XG5pbXBvcnQge2ltYWd9IGZyb20gJy4vSW1hZyc7XG5pbXBvcnQge3JlYWx9IGZyb20gJy4vUmVhbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvc0xpa2UoXG4gICAgYXJnczoge2lucHV0czogWmVyb3NMaWtlSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVX0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG5cbiAgaWYgKHguZHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd6ZXJvc0xpa2UgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyaW5nIHRlbnNvcnMnKTtcbiAgfSBlbHNlIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWxQYXJ0ID0gcmVhbCh7aW5wdXRzOiB7aW5wdXQ6IHh9LCBiYWNrZW5kfSk7XG4gICAgY29uc3QgciA9IHplcm9zTGlrZSh7aW5wdXRzOiB7eDogcmVhbFBhcnR9LCBiYWNrZW5kfSk7XG4gICAgY29uc3QgaW1hZ1BhcnQgPSBpbWFnKHtpbnB1dHM6IHtpbnB1dDogeH0sIGJhY2tlbmR9KTtcbiAgICBjb25zdCBpID0gemVyb3NMaWtlKHtpbnB1dHM6IHt4OiBpbWFnUGFydH0sIGJhY2tlbmR9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBsZXgoe2lucHV0czoge3JlYWw6IHIsIGltYWc6IGl9LCBiYWNrZW5kfSk7XG5cbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHJlYWxQYXJ0KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHIpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaW1hZ1BhcnQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8oaSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmaWxsKHtiYWNrZW5kLCBhdHRyczoge3NoYXBlOiB4LnNoYXBlLCB2YWx1ZTogMCwgZHR5cGU6IHguZHR5cGV9fSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHplcm9zTGlrZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBaZXJvc0xpa2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogemVyb3NMaWtlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { OnesLike } from '@tensorflow/tfjs-core';\nimport { complex } from './Complex';\nimport { fill } from './Fill';\nimport { imag } from './Imag';\nimport { real } from './Real';\nimport { zerosLike } from './ZerosLike';\nexport function onesLike(args) {\n const { inputs, backend } = args;\n const { x } = inputs;\n if (x.dtype === 'string') {\n throw new Error('onesLike is not supported for string tensors');\n }\n else if (x.dtype === 'complex64') {\n const realPart = real({ inputs: { input: x }, backend });\n const r = onesLike({ inputs: { x: realPart }, backend });\n const imagPart = imag({ inputs: { input: x }, backend });\n const i = zerosLike({ inputs: { x: imagPart }, backend });\n const result = complex({ inputs: { real: r, imag: i }, backend });\n backend.disposeIntermediateTensorInfo(realPart);\n backend.disposeIntermediateTensorInfo(r);\n backend.disposeIntermediateTensorInfo(imagPart);\n backend.disposeIntermediateTensorInfo(i);\n return result;\n }\n else {\n return fill({ backend, attrs: { shape: x.shape, value: 1, dtype: x.dtype } });\n }\n}\nexport const onesLikeConfig = {\n kernelName: OnesLike,\n backendName: 'cpu',\n kernelFunc: onesLike\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT25lc0xpa2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL09uZXNMaWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsUUFBUSxFQUE2QixNQUFNLHVCQUF1QixDQUFDO0FBR3JHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxNQUFNLFVBQVUsUUFBUSxDQUNwQixJQUF1RDtJQUN6RCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRW5CLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0tBQ2pFO1NBQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBRTlELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6QyxPQUFPLE1BQU0sQ0FBQztLQUNmO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQzNFO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBaUI7SUFDMUMsVUFBVSxFQUFFLFFBQVE7SUFDcEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFFBQWlDO0NBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBPbmVzTGlrZSwgT25lc0xpa2VJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7Y29tcGxleH0gZnJvbSAnLi9Db21wbGV4JztcbmltcG9ydCB7ZmlsbH0gZnJvbSAnLi9GaWxsJztcbmltcG9ydCB7aW1hZ30gZnJvbSAnLi9JbWFnJztcbmltcG9ydCB7cmVhbH0gZnJvbSAnLi9SZWFsJztcbmltcG9ydCB7emVyb3NMaWtlfSBmcm9tICcuL1plcm9zTGlrZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVzTGlrZShcbiAgICBhcmdzOiB7aW5wdXRzOiBPbmVzTGlrZUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuXG4gIGlmICh4LmR0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignb25lc0xpa2UgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyaW5nIHRlbnNvcnMnKTtcbiAgfSBlbHNlIGlmICh4LmR0eXBlID09PSAnY29tcGxleDY0Jykge1xuICAgIGNvbnN0IHJlYWxQYXJ0ID0gcmVhbCh7aW5wdXRzOiB7aW5wdXQ6IHh9LCBiYWNrZW5kfSk7XG4gICAgY29uc3QgciA9IG9uZXNMaWtlKHtpbnB1dHM6IHt4OiByZWFsUGFydH0sIGJhY2tlbmR9KTtcbiAgICBjb25zdCBpbWFnUGFydCA9IGltYWcoe2lucHV0czoge2lucHV0OiB4fSwgYmFja2VuZH0pO1xuICAgIGNvbnN0IGkgPSB6ZXJvc0xpa2Uoe2lucHV0czoge3g6IGltYWdQYXJ0fSwgYmFja2VuZH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gY29tcGxleCh7aW5wdXRzOiB7cmVhbDogciwgaW1hZzogaX0sIGJhY2tlbmR9KTtcblxuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocmVhbFBhcnQpO1xuICAgIGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8ocik7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpbWFnUGFydCk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbGwoe2JhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IHguc2hhcGUsIHZhbHVlOiAxLCBkdHlwZTogeC5kdHlwZX19KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgb25lc0xpa2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogT25lc0xpa2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogb25lc0xpa2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pack, util } from '@tensorflow/tfjs-core';\nimport { concat } from './Concat';\nimport { expandDims } from './ExpandDims';\nexport function pack(args) {\n const { inputs, backend, attrs } = args;\n const { axis } = attrs;\n if (inputs.length === 1) {\n return expandDims({ inputs: { input: inputs[0] }, backend, attrs: { dim: axis } });\n }\n const shape = inputs[0].shape;\n const dtype = inputs[0].dtype;\n inputs.forEach(t => {\n util.assertShapesMatch(shape, t.shape, 'All tensors passed to stack must have matching shapes');\n util.assert(dtype === t.dtype, () => 'All tensors passed to stack must have matching dtypes');\n });\n const intermediateTensorInfos = [];\n const expandedTensors = inputs.map(t => {\n const expandedT = expandDims({ inputs: { input: t }, backend, attrs: { dim: axis } });\n intermediateTensorInfos.push(expandedT);\n return expandedT;\n });\n const result = concat({ inputs: expandedTensors, backend, attrs: { axis } });\n intermediateTensorInfos.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const packConfig = {\n kernelName: Pack,\n backendName: 'cpu',\n kernelFunc: pack\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLElBQUksRUFBcUMsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHOUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sVUFBVSxJQUFJLENBQ2hCLElBQXFFO0lBRXZFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxVQUFVLENBQ2IsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7S0FDaEU7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQ2xCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUNkLHVEQUF1RCxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FDUCxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFDakIsR0FBRyxFQUFFLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sdUJBQXVCLEdBQWlCLEVBQUUsQ0FBQztJQUNqRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sU0FBUyxHQUNYLFVBQVUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztRQUNsRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7SUFFekUsdUJBQXVCLENBQUMsT0FBTyxDQUMzQixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5ELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUGFjaywgUGFja0F0dHJzLCBQYWNrSW5wdXRzLCBUZW5zb3JJbmZvLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2NvbmNhdH0gZnJvbSAnLi9Db25jYXQnO1xuaW1wb3J0IHtleHBhbmREaW1zfSBmcm9tICcuL0V4cGFuZERpbXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFjayhcbiAgICBhcmdzOiB7aW5wdXRzOiBQYWNrSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFBhY2tBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7YXhpc30gPSBhdHRycztcblxuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBleHBhbmREaW1zKFxuICAgICAgICB7aW5wdXRzOiB7aW5wdXQ6IGlucHV0c1swXX0sIGJhY2tlbmQsIGF0dHJzOiB7ZGltOiBheGlzfX0pO1xuICB9XG5cbiAgY29uc3Qgc2hhcGUgPSBpbnB1dHNbMF0uc2hhcGU7XG4gIGNvbnN0IGR0eXBlID0gaW5wdXRzWzBdLmR0eXBlO1xuXG4gIGlucHV0cy5mb3JFYWNoKHQgPT4ge1xuICAgIHV0aWwuYXNzZXJ0U2hhcGVzTWF0Y2goXG4gICAgICAgIHNoYXBlLCB0LnNoYXBlLFxuICAgICAgICAnQWxsIHRlbnNvcnMgcGFzc2VkIHRvIHN0YWNrIG11c3QgaGF2ZSBtYXRjaGluZyBzaGFwZXMnKTtcbiAgICB1dGlsLmFzc2VydChcbiAgICAgICAgZHR5cGUgPT09IHQuZHR5cGUsXG4gICAgICAgICgpID0+ICdBbGwgdGVuc29ycyBwYXNzZWQgdG8gc3RhY2sgbXVzdCBoYXZlIG1hdGNoaW5nIGR0eXBlcycpO1xuICB9KTtcblxuICBjb25zdCBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvczogVGVuc29ySW5mb1tdID0gW107XG4gIGNvbnN0IGV4cGFuZGVkVGVuc29ycyA9IGlucHV0cy5tYXAodCA9PiB7XG4gICAgY29uc3QgZXhwYW5kZWRUID1cbiAgICAgICAgZXhwYW5kRGltcyh7aW5wdXRzOiB7aW5wdXQ6IHR9LCBiYWNrZW5kLCBhdHRyczoge2RpbTogYXhpc319KTtcbiAgICBpbnRlcm1lZGlhdGVUZW5zb3JJbmZvcy5wdXNoKGV4cGFuZGVkVCk7XG4gICAgcmV0dXJuIGV4cGFuZGVkVDtcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0ID0gY29uY2F0KHtpbnB1dHM6IGV4cGFuZGVkVGVuc29ycywgYmFja2VuZCwgYXR0cnM6IHtheGlzfX0pO1xuXG4gIGludGVybWVkaWF0ZVRlbnNvckluZm9zLmZvckVhY2goXG4gICAgICB0ID0+IGJhY2tlbmQuZGlzcG9zZUludGVybWVkaWF0ZVRlbnNvckluZm8odCkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBwYWNrQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFBhY2ssXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcGFjayBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { PadV2, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function padV2(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { paddings, constantValue } = attrs;\n assertNotComplex(x, 'pad');\n const outShape = paddings.map((p, i) => p[0] /* beforePad */ + x.shape[i] + p[1] /* afterPad */);\n const start = paddings.map(p => p[0]);\n const xVals = backend.data.get(x.dataId).values;\n const xSize = util.sizeFromShape(x.shape);\n const xRank = x.shape.length;\n const xStrides = util.computeStrides(x.shape);\n const resultSize = util.sizeFromShape(outShape);\n const resultRank = outShape.length;\n const resultStrides = util.computeStrides(outShape);\n const resVals = util.getTypedArrayFromDType(x.dtype, resultSize);\n if (constantValue !== 0) {\n resVals.fill(constantValue);\n }\n for (let i = 0; i < xSize; i++) {\n const coords = util.indexToLoc(i, xRank, xStrides);\n const outCoords = coords.map((c, i) => c + start[i]);\n const outIndex = util.locToIndex(outCoords, resultRank, resultStrides);\n resVals[outIndex] = xVals[i];\n }\n const outId = backend.write(resVals, outShape, x.dtype);\n return { dataId: outId, shape: outShape, dtype: x.dtype };\n}\nexport const padV2Config = {\n kernelName: PadV2,\n backendName: 'cpu',\n kernelFunc: padV2\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFkVjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1BhZFYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBNEMsS0FBSyxFQUFtRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLEtBQUssQ0FDakIsSUFBdUU7SUFFekUsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkIsTUFBTSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3pCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV2RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxLQUF3QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXhFLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzdCO0lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFdkUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QjtJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTnVtZXJpY0RhdGFUeXBlLCBQYWRWMiwgUGFkVjJBdHRycywgUGFkVjJJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkVjIoXG4gICAgYXJnczoge2lucHV0czogUGFkVjJJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogUGFkVjJBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtwYWRkaW5ncywgY29uc3RhbnRWYWx1ZX0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICdwYWQnKTtcblxuICBjb25zdCBvdXRTaGFwZSA9IHBhZGRpbmdzLm1hcChcbiAgICAgIChwLCBpKSA9PiBwWzBdIC8qIGJlZm9yZVBhZCAqLyArIHguc2hhcGVbaV0gKyBwWzFdIC8qIGFmdGVyUGFkICovKTtcblxuICBjb25zdCBzdGFydCA9IHBhZGRpbmdzLm1hcChwID0+IHBbMF0pO1xuXG4gIGNvbnN0IHhWYWxzID0gYmFja2VuZC5kYXRhLmdldCh4LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHhTaXplID0gdXRpbC5zaXplRnJvbVNoYXBlKHguc2hhcGUpO1xuICBjb25zdCB4UmFuayA9IHguc2hhcGUubGVuZ3RoO1xuICBjb25zdCB4U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoeC5zaGFwZSk7XG5cbiAgY29uc3QgcmVzdWx0U2l6ZSA9IHV0aWwuc2l6ZUZyb21TaGFwZShvdXRTaGFwZSk7XG4gIGNvbnN0IHJlc3VsdFJhbmsgPSBvdXRTaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHJlc3VsdFN0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKG91dFNoYXBlKTtcbiAgY29uc3QgcmVzVmFscyA9XG4gICAgICB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoeC5kdHlwZSBhcyBOdW1lcmljRGF0YVR5cGUsIHJlc3VsdFNpemUpO1xuXG4gIGlmIChjb25zdGFudFZhbHVlICE9PSAwKSB7XG4gICAgcmVzVmFscy5maWxsKGNvbnN0YW50VmFsdWUpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4U2l6ZTsgaSsrKSB7XG4gICAgY29uc3QgY29vcmRzID0gdXRpbC5pbmRleFRvTG9jKGksIHhSYW5rLCB4U3RyaWRlcyk7XG4gICAgY29uc3Qgb3V0Q29vcmRzID0gY29vcmRzLm1hcCgoYywgaSkgPT4gYyArIHN0YXJ0W2ldKTtcbiAgICBjb25zdCBvdXRJbmRleCA9IHV0aWwubG9jVG9JbmRleChvdXRDb29yZHMsIHJlc3VsdFJhbmssIHJlc3VsdFN0cmlkZXMpO1xuXG4gICAgcmVzVmFsc1tvdXRJbmRleF0gPSB4VmFsc1tpXTtcbiAgfVxuXG4gIGNvbnN0IG91dElkID0gYmFja2VuZC53cml0ZShyZXNWYWxzLCBvdXRTaGFwZSwgeC5kdHlwZSk7XG5cbiAgcmV0dXJuIHtkYXRhSWQ6IG91dElkLCBzaGFwZTogb3V0U2hhcGUsIGR0eXBlOiB4LmR0eXBlfTtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZFYyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFBhZFYyLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHBhZFYyIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Pow } from '@tensorflow/tfjs-core';\nimport { createSimpleBinaryKernelImpl } from '../utils/binary_impl';\nimport { binaryKernelFunc } from '../utils/binary_utils';\nexport const powImpl = createSimpleBinaryKernelImpl((a, b) => Math.pow(a, b));\nexport const pow = binaryKernelFunc(Pow, powImpl);\nexport const powConfig = {\n kernelName: Pow,\n backendName: 'cpu',\n kernelFunc: pow\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9Qb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FDaEIsNEJBQTRCLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFpQjtJQUNyQyxVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxHQUFHO0NBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBQb3d9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7Y3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbH0gZnJvbSAnLi4vdXRpbHMvYmluYXJ5X2ltcGwnO1xuaW1wb3J0IHtiaW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy9iaW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgcG93SW1wbCA9XG4gICAgY3JlYXRlU2ltcGxlQmluYXJ5S2VybmVsSW1wbCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IE1hdGgucG93KGEsIGIpKTtcbmV4cG9ydCBjb25zdCBwb3cgPSBiaW5hcnlLZXJuZWxGdW5jKFBvdywgcG93SW1wbCk7XG5cbmV4cG9ydCBjb25zdCBwb3dDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUG93LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHBvd1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedGather } from '@tensorflow/tfjs-core';\nimport { raggedGatherImpl } from './RaggedGather_impl';\nexport function raggedGather(args) {\n const { inputs, backend, attrs } = args;\n const { paramsNestedSplits, paramsDenseValues, indices } = inputs;\n const { outputRaggedRank } = attrs;\n const $paramsNestedSplits = paramsNestedSplits.map(t => backend.data.get(t.dataId).values);\n const $paramsNestedSplitsShapes = paramsNestedSplits.map(t => t.shape);\n const $paramsDenseValues = backend.data.get(paramsDenseValues.dataId).values;\n const $indices = backend.data.get(indices.dataId).values;\n const [outputNestedSplits, outputDenseValues, outputDenseValuesShape] = raggedGatherImpl($paramsNestedSplits, $paramsNestedSplitsShapes, $paramsDenseValues, paramsDenseValues.shape, paramsDenseValues.dtype, $indices, indices.shape, outputRaggedRank);\n const outputNestedSplitsTensors = outputNestedSplits.map((splits) => backend.makeTensorInfo([splits.length], 'int32', splits));\n const outputDenseValuesTensor = backend.makeTensorInfo(outputDenseValuesShape, paramsDenseValues.dtype, outputDenseValues);\n return outputNestedSplitsTensors.concat([outputDenseValuesTensor]);\n}\nexport const raggedGatherConfig = {\n kernelName: RaggedGather,\n backendName: 'cpu',\n kernelFunc: raggedGather,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkR2F0aGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9SYWdnZWRHYXRoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixZQUFZLEVBQWdFLE1BQU0sdUJBQXVCLENBQUM7QUFJNUksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2hFLE1BQU0sRUFBQyxnQkFBZ0IsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVqQyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FDOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQyxDQUFDO0lBQzFELE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sa0JBQWtCLEdBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFdkUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixDQUFDLEdBQ2pFLGdCQUFnQixDQUNaLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUNsRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFDMUQsT0FBTyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXpDLE1BQU0seUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUNwRCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUUxRSxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQ2xELHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRXhFLE9BQU8seUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFlBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYWdnZWRHYXRoZXIsIFJhZ2dlZEdhdGhlckF0dHJzLCBSYWdnZWRHYXRoZXJJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtyYWdnZWRHYXRoZXJJbXBsfSBmcm9tICcuL1JhZ2dlZEdhdGhlcl9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhZ2dlZEdhdGhlcihhcmdzOiB7XG4gIGlucHV0czogUmFnZ2VkR2F0aGVySW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IFJhZ2dlZEdhdGhlckF0dHJzXG59KTogVGVuc29ySW5mb1tdIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3BhcmFtc05lc3RlZFNwbGl0cywgcGFyYW1zRGVuc2VWYWx1ZXMsIGluZGljZXN9ID0gaW5wdXRzO1xuICBjb25zdCB7b3V0cHV0UmFnZ2VkUmFua30gPSBhdHRycztcblxuICBjb25zdCAkcGFyYW1zTmVzdGVkU3BsaXRzID0gcGFyYW1zTmVzdGVkU3BsaXRzLm1hcChcbiAgICAgIHQgPT4gYmFja2VuZC5kYXRhLmdldCh0LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXkpO1xuICBjb25zdCAkcGFyYW1zTmVzdGVkU3BsaXRzU2hhcGVzID0gcGFyYW1zTmVzdGVkU3BsaXRzLm1hcCh0ID0+IHQuc2hhcGUpO1xuICBjb25zdCAkcGFyYW1zRGVuc2VWYWx1ZXMgPVxuICAgICAgYmFja2VuZC5kYXRhLmdldChwYXJhbXNEZW5zZVZhbHVlcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkaW5kaWNlcyA9IGJhY2tlbmQuZGF0YS5nZXQoaW5kaWNlcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIGNvbnN0IFtvdXRwdXROZXN0ZWRTcGxpdHMsIG91dHB1dERlbnNlVmFsdWVzLCBvdXRwdXREZW5zZVZhbHVlc1NoYXBlXSA9XG4gICAgICByYWdnZWRHYXRoZXJJbXBsKFxuICAgICAgICAgICRwYXJhbXNOZXN0ZWRTcGxpdHMsICRwYXJhbXNOZXN0ZWRTcGxpdHNTaGFwZXMsICRwYXJhbXNEZW5zZVZhbHVlcyxcbiAgICAgICAgICBwYXJhbXNEZW5zZVZhbHVlcy5zaGFwZSwgcGFyYW1zRGVuc2VWYWx1ZXMuZHR5cGUsICRpbmRpY2VzLFxuICAgICAgICAgIGluZGljZXMuc2hhcGUsIG91dHB1dFJhZ2dlZFJhbmspO1xuXG4gIGNvbnN0IG91dHB1dE5lc3RlZFNwbGl0c1RlbnNvcnMgPSBvdXRwdXROZXN0ZWRTcGxpdHMubWFwKFxuICAgICAgKHNwbGl0cykgPT4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbc3BsaXRzLmxlbmd0aF0sICdpbnQzMicsIHNwbGl0cykpO1xuXG4gIGNvbnN0IG91dHB1dERlbnNlVmFsdWVzVGVuc29yID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIG91dHB1dERlbnNlVmFsdWVzU2hhcGUsIHBhcmFtc0RlbnNlVmFsdWVzLmR0eXBlLCBvdXRwdXREZW5zZVZhbHVlcyk7XG5cbiAgcmV0dXJuIG91dHB1dE5lc3RlZFNwbGl0c1RlbnNvcnMuY29uY2F0KFtvdXRwdXREZW5zZVZhbHVlc1RlbnNvcl0pO1xufVxuXG5leHBvcnQgY29uc3QgcmFnZ2VkR2F0aGVyQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJhZ2dlZEdhdGhlcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiByYWdnZWRHYXRoZXIgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedRange } from '@tensorflow/tfjs-core';\nimport { raggedRangeImpl } from './RaggedRange_impl';\nexport function raggedRange(args) {\n const { inputs, backend } = args;\n const { starts, limits, deltas } = inputs;\n const $starts = backend.data.get(starts.dataId).values;\n const $limits = backend.data.get(limits.dataId).values;\n const $deltas = backend.data.get(deltas.dataId).values;\n const [rtNestedSplitsData, rtDenseValuesData] = raggedRangeImpl($starts, starts.shape, starts.dtype, $limits, limits.shape, $deltas, deltas.shape);\n const rtNestedSplits = backend.makeTensorInfo([rtNestedSplitsData.length], 'int32', rtNestedSplitsData);\n const rtDenseValues = backend.makeTensorInfo([rtDenseValuesData.length], starts.dtype, rtDenseValuesData);\n return [rtNestedSplits, rtDenseValues];\n}\nexport const raggedRangeConfig = {\n kernelName: RaggedRange,\n backendName: 'cpu',\n kernelFunc: raggedRange,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkUmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JhZ2dlZFJhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsV0FBVyxFQUE0QyxNQUFNLHVCQUF1QixDQUFDO0FBSXZILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixJQUEwRDtJQUU1RCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFckUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLEdBQUcsZUFBZSxDQUMzRCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFDbkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQ3pDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FDeEMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFakUsT0FBTyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlCO0lBQzdDLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxXQUFvQztDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFnZ2VkUmFuZ2UsIFJhZ2dlZFJhbmdlSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmltcG9ydCB7cmFnZ2VkUmFuZ2VJbXBsfSBmcm9tICcuL1JhZ2dlZFJhbmdlX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFnZ2VkUmFuZ2UoXG4gICAgYXJnczoge2lucHV0czogUmFnZ2VkUmFuZ2VJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgW1RlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7c3RhcnRzLCBsaW1pdHMsIGRlbHRhc30gPSBpbnB1dHM7XG5cbiAgY29uc3QgJHN0YXJ0cyA9IGJhY2tlbmQuZGF0YS5nZXQoc3RhcnRzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRsaW1pdHMgPSBiYWNrZW5kLmRhdGEuZ2V0KGxpbWl0cy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVsdGFzID0gYmFja2VuZC5kYXRhLmdldChkZWx0YXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICBjb25zdCBbcnROZXN0ZWRTcGxpdHNEYXRhLCBydERlbnNlVmFsdWVzRGF0YV0gPSByYWdnZWRSYW5nZUltcGwoXG4gICAgICAkc3RhcnRzLCBzdGFydHMuc2hhcGUsIHN0YXJ0cy5kdHlwZSwgJGxpbWl0cywgbGltaXRzLnNoYXBlLCAkZGVsdGFzLFxuICAgICAgZGVsdGFzLnNoYXBlKTtcblxuICBjb25zdCBydE5lc3RlZFNwbGl0cyA9IGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBbcnROZXN0ZWRTcGxpdHNEYXRhLmxlbmd0aF0sICdpbnQzMicsIHJ0TmVzdGVkU3BsaXRzRGF0YSk7XG4gIGNvbnN0IHJ0RGVuc2VWYWx1ZXMgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgW3J0RGVuc2VWYWx1ZXNEYXRhLmxlbmd0aF0sIHN0YXJ0cy5kdHlwZSwgcnREZW5zZVZhbHVlc0RhdGEpO1xuXG4gIHJldHVybiBbcnROZXN0ZWRTcGxpdHMsIHJ0RGVuc2VWYWx1ZXNdO1xufVxuXG5leHBvcnQgY29uc3QgcmFnZ2VkUmFuZ2VDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmFnZ2VkUmFuZ2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmFnZ2VkUmFuZ2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { RaggedTensorToTensor } from '@tensorflow/tfjs-core';\nimport { raggedTensorToTensorImpl } from './RaggedTensorToTensor_impl';\nexport function raggedTensorToTensor(args) {\n const { inputs, backend, attrs } = args;\n const { shape, values, defaultValue, rowPartitionTensors } = inputs;\n const { rowPartitionTypes } = attrs;\n const $shape = backend.data.get(shape.dataId).values;\n const $values = backend.data.get(values.dataId).values;\n const $defaultValue = backend.data.get(defaultValue.dataId).values;\n const $rowPartitionValues = rowPartitionTensors.map(t => backend.data.get(t.dataId).values);\n const rowPartitionValuesShapes = rowPartitionTensors.map(t => t.shape);\n const [outputShape, output] = raggedTensorToTensorImpl($shape, shape.shape, $values, values.shape, values.dtype, $defaultValue, defaultValue.shape, $rowPartitionValues, rowPartitionValuesShapes, rowPartitionTypes);\n return backend.makeTensorInfo(outputShape, values.dtype, output);\n}\nexport const raggedTensorToTensorConfig = {\n kernelName: RaggedTensorToTensor,\n backendName: 'cpu',\n kernelFunc: raggedTensorToTensor,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFnZ2VkVGVuc29yVG9UZW5zb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JhZ2dlZFRlbnNvclRvVGVuc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsb0JBQW9CLEVBQWdGLE1BQU0sdUJBQXVCLENBQUM7QUFJcEssT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBSXBDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNsRSxNQUFNLEVBQUMsaUJBQWlCLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDckUsTUFBTSxhQUFhLEdBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQy9DLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUMsQ0FBQztJQUMxRCxNQUFNLHdCQUF3QixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2RSxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLHdCQUF3QixDQUNsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFDdkUsWUFBWSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSx3QkFBd0IsRUFDakUsaUJBQWlCLENBQUMsQ0FBQztJQUN2QixPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFpQjtJQUN0RCxVQUFVLEVBQUUsb0JBQW9CO0lBQ2hDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxvQkFBNkM7Q0FDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhZ2dlZFRlbnNvclRvVGVuc29yLCBSYWdnZWRUZW5zb3JUb1RlbnNvckF0dHJzLCBSYWdnZWRUZW5zb3JUb1RlbnNvcklucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5pbXBvcnQge3JhZ2dlZFRlbnNvclRvVGVuc29ySW1wbH0gZnJvbSAnLi9SYWdnZWRUZW5zb3JUb1RlbnNvcl9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJhZ2dlZFRlbnNvclRvVGVuc29yKGFyZ3M6IHtcbiAgaW5wdXRzOiBSYWdnZWRUZW5zb3JUb1RlbnNvcklucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBSYWdnZWRUZW5zb3JUb1RlbnNvckF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzaGFwZSwgdmFsdWVzLCBkZWZhdWx0VmFsdWUsIHJvd1BhcnRpdGlvblRlbnNvcnN9ID0gaW5wdXRzO1xuICBjb25zdCB7cm93UGFydGl0aW9uVHlwZXN9ID0gYXR0cnM7XG5cbiAgY29uc3QgJHNoYXBlID0gYmFja2VuZC5kYXRhLmdldChzaGFwZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkdmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh2YWx1ZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJGRlZmF1bHRWYWx1ZSA9XG4gICAgICBiYWNrZW5kLmRhdGEuZ2V0KGRlZmF1bHRWYWx1ZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkcm93UGFydGl0aW9uVmFsdWVzID0gcm93UGFydGl0aW9uVGVuc29ycy5tYXAoXG4gICAgICB0ID0+IGJhY2tlbmQuZGF0YS5nZXQodC5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5KTtcbiAgY29uc3Qgcm93UGFydGl0aW9uVmFsdWVzU2hhcGVzID0gcm93UGFydGl0aW9uVGVuc29ycy5tYXAodCA9PiB0LnNoYXBlKTtcblxuICBjb25zdCBbb3V0cHV0U2hhcGUsIG91dHB1dF0gPSByYWdnZWRUZW5zb3JUb1RlbnNvckltcGwoXG4gICAgICAkc2hhcGUsIHNoYXBlLnNoYXBlLCAkdmFsdWVzLCB2YWx1ZXMuc2hhcGUsIHZhbHVlcy5kdHlwZSwgJGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZS5zaGFwZSwgJHJvd1BhcnRpdGlvblZhbHVlcywgcm93UGFydGl0aW9uVmFsdWVzU2hhcGVzLFxuICAgICAgcm93UGFydGl0aW9uVHlwZXMpO1xuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRwdXRTaGFwZSwgdmFsdWVzLmR0eXBlLCBvdXRwdXQpO1xufVxuXG5leHBvcnQgY29uc3QgcmFnZ2VkVGVuc29yVG9UZW5zb3JDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmFnZ2VkVGVuc29yVG9UZW5zb3IsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmFnZ2VkVGVuc29yVG9UZW5zb3IgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Range } from '@tensorflow/tfjs-core';\nimport { rangeImpl } from './Range_impl';\nexport function range(args) {\n const { backend, attrs } = args;\n const { start, stop, dtype, step } = attrs;\n const values = rangeImpl(start, stop, step, dtype);\n return backend.makeTensorInfo([values.length], dtype, values);\n}\nexport const rangeConfig = {\n kernelName: Range,\n backendName: 'cpu',\n kernelFunc: range\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsS0FBSyxFQUF5QixNQUFNLHVCQUF1QixDQUFDO0FBRzlGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxVQUFVLEtBQUssQ0FBQyxJQUFrRDtJQUV0RSxNQUFNLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUM5QixNQUFNLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXpDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUE4QjtDQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmFuZ2UsIFJhbmdlQXR0cnMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7cmFuZ2VJbXBsfSBmcm9tICcuL1JhbmdlX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2UoYXJnczoge2JhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogUmFuZ2VBdHRyc30pOlxuICAgIFRlbnNvckluZm8ge1xuICBjb25zdCB7YmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3N0YXJ0LCBzdG9wLCBkdHlwZSwgc3RlcH0gPSBhdHRycztcblxuICBjb25zdCB2YWx1ZXMgPSByYW5nZUltcGwoc3RhcnQsIHN0b3AsIHN0ZXAsIGR0eXBlKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oW3ZhbHVlcy5sZW5ndGhdLCBkdHlwZSwgdmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJhbmdlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJhbmdlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHJhbmdlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reciprocal } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const reciprocal = unaryKernelFunc(Reciprocal, (xi) => 1 / xi);\nexport const reciprocalConfig = {\n kernelName: Reciprocal,\n backendName: 'cpu',\n kernelFunc: reciprocal,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjaXByb2NhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVjaXByb2NhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFL0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWlCO0lBQzVDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxVQUFVO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUmVjaXByb2NhbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHJlY2lwcm9jYWwgPSB1bmFyeUtlcm5lbEZ1bmMoUmVjaXByb2NhbCwgKHhpKSA9PiAxIC8geGkpO1xuXG5leHBvcnQgY29uc3QgcmVjaXByb2NhbENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZWNpcHJvY2FsLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHJlY2lwcm9jYWwsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeBilinear, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function resizeBilinear(args) {\n const { inputs, backend, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n assertNotComplex(images, 'resizeBilinear');\n const imagesStrides = util.computeStrides(images.shape);\n const [newHeight, newWidth] = size;\n const [batch, oldHeight, oldWidth, numChannels] = images.shape;\n const xValues = backend.data.get(images.dataId).values;\n const result = new Float32Array(util.sizeFromShape([batch, newHeight, newWidth, numChannels]));\n const effectiveInputSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutputSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n let outputIdx = 0;\n const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0];\n const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1];\n for (let b = 0; b < batch; b++) {\n for (let r = 0; r < newHeight; r++) {\n let sourceFracRow;\n if (halfPixelCenters) {\n sourceFracRow = effectiveRowSizeRatio * (r + 0.5) - 0.5;\n }\n else {\n sourceFracRow = effectiveRowSizeRatio * r;\n }\n const sourceRowFloor = Math.max(0, Math.floor(sourceFracRow));\n const rowFrac = sourceFracRow - sourceRowFloor;\n const sourceRowCeil = Math.min(oldHeight - 1, Math.ceil(sourceFracRow));\n const topRowOffset = b * imagesStrides[0] + sourceRowFloor * imagesStrides[1];\n const botRowOffset = b * imagesStrides[0] + sourceRowCeil * imagesStrides[1];\n for (let c = 0; c < newWidth; c++) {\n let sourceFracCol;\n if (halfPixelCenters) {\n sourceFracCol = effectiveColSizeRatio * (c + 0.5) - 0.5;\n }\n else {\n sourceFracCol = effectiveColSizeRatio * c;\n }\n const sourceColFloor = Math.max(0, Math.floor(sourceFracCol));\n const colFrac = sourceFracCol - sourceColFloor;\n const sourceColCeil = Math.min(oldWidth - 1, Math.ceil(sourceFracCol));\n const topLeftOffest = topRowOffset + sourceColFloor * imagesStrides[2];\n const botLeftOffset = botRowOffset + sourceColFloor * imagesStrides[2];\n const topRightOffset = topRowOffset + sourceColCeil * imagesStrides[2];\n const botRightOffest = botRowOffset + sourceColCeil * imagesStrides[2];\n for (let d = 0; d < numChannels; d++) {\n // Begin shader.\n // Compute the fractional index of the source.\n const topLeft = xValues[topLeftOffest + d];\n const bottomLeft = xValues[botLeftOffset + d];\n const topRight = xValues[topRightOffset + d];\n const bottomRight = xValues[botRightOffest + d];\n const top = topLeft + (topRight - topLeft) * colFrac;\n const bottom = bottomLeft + (bottomRight - bottomLeft) * colFrac;\n const newValue = top + (bottom - top) * rowFrac;\n result[outputIdx++] = newValue;\n }\n }\n }\n }\n return backend.makeTensorInfo([batch, newHeight, newWidth, numChannels], 'float32', result);\n}\nexport const resizeBilinearConfig = {\n kernelName: ResizeBilinear,\n backendName: 'cpu',\n kernelFunc: resizeBilinear\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1Jlc2l6ZUJpbGluZWFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsY0FBYyxFQUFxRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd4SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUk5QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJELGdCQUFnQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRW5DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FB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QUFDO2lCQUNoQzthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FDekIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJlc2l6ZUJpbGluZWFyLCBSZXNpemVCaWxpbmVhckF0dHJzLCBSZXNpemVCaWxpbmVhcklucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheSwgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVCaWxpbmVhcihhcmdzOiB7XG4gIGlucHV0czogUmVzaXplQmlsaW5lYXJJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogUmVzaXplQmlsaW5lYXJBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2VzfSA9IGlucHV0cztcbiAgY29uc3Qge2FsaWduQ29ybmVycywgaGFsZlBpeGVsQ2VudGVycywgc2l6ZX0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KGltYWdlcywgJ3Jlc2l6ZUJpbGluZWFyJyk7XG5cbiAgY29uc3QgaW1hZ2VzU3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoaW1hZ2VzLnNoYXBlKTtcbiAgY29uc3QgW25ld0hlaWdodCwgbmV3V2lkdGhdID0gc2l6ZTtcblxuICBjb25zdCBbYmF0Y2gsIG9sZEhlaWdodCwgb2xkV2lkdGgsIG51bUNoYW5uZWxzXSA9IGltYWdlcy5zaGFwZTtcbiAgY29uc3QgeFZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQoaW1hZ2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBGbG9hdDMyQXJyYXkoXG4gICAgICB1dGlsLnNpemVGcm9tU2hhcGUoW2JhdGNoLCBuZXdIZWlnaHQsIG5ld1dpZHRoLCBudW1DaGFubmVsc10pKTtcblxuICBjb25zdCBlZmZlY3RpdmVJbnB1dFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG9sZEhlaWdodCAtIDEgOiBvbGRIZWlnaHQsXG4gICAgKGFsaWduQ29ybmVycyAmJiBuZXdXaWR0aCA+IDEpID8gb2xkV2lkdGggLSAxIDogb2xkV2lkdGhcbiAgXTtcblxuICBjb25zdCBlZmZlY3RpdmVPdXRwdXRTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgIChhbGlnbkNvcm5lcnMgJiYgbmV3SGVpZ2h0ID4gMSkgPyBuZXdIZWlnaHQgLSAxIDogbmV3SGVpZ2h0LFxuICAgIChhbGlnbkNvcm5lcnMgJiYgbmV3V2lkdGggPiAxKSA/IG5ld1dpZHRoIC0gMSA6IG5ld1dpZHRoXG4gIF07XG4gIGxldCBvdXRwdXRJZHggPSAwO1xuICBjb25zdCBlZmZlY3RpdmVSb3dTaXplUmF0aW8gPSBlZmZlY3RpdmVJbnB1dFNpemVbMF0gLyBlZmZlY3RpdmVPdXRwdXRTaXplWzBdO1xuICBjb25zdCBlZmZlY3RpdmVDb2xTaXplUmF0aW8gPSBlZmZlY3RpdmVJbnB1dFNpemVbMV0gLyBlZmZlY3RpdmVPdXRwdXRTaXplWzFdO1xuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyBiKyspIHtcbiAgICBmb3IgKGxldCByID0gMDsgciA8IG5ld0hlaWdodDsgcisrKSB7XG4gICAgICBsZXQgc291cmNlRnJhY1JvdzogbnVtYmVyO1xuICAgICAgaWYgKGhhbGZQaXhlbENlbnRlcnMpIHtcbiAgICAgICAgc291cmNlRnJhY1JvdyA9IGVmZmVjdGl2ZVJvd1NpemVSYXRpbyAqIChyICsgMC41KSAtIDAuNTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZyYWNSb3cgPSBlZmZlY3RpdmVSb3dTaXplUmF0aW8gKiByO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VSb3dGbG9vciA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3Ioc291cmNlRnJhY1JvdykpO1xuICAgICAgY29uc3Qgcm93RnJhYyA9IHNvdXJjZUZyYWNSb3cgLSBzb3VyY2VSb3dGbG9vcjtcbiAgICAgIGNvbnN0IHNvdXJjZVJvd0NlaWwgPSBNYXRoLm1pbihvbGRIZWlnaHQgLSAxLCBNYXRoLmNlaWwoc291cmNlRnJhY1JvdykpO1xuICAgICAgY29uc3QgdG9wUm93T2Zmc2V0ID1cbiAgICAgICAgICBiICogaW1hZ2VzU3RyaWRlc1swXSArIHNvdXJjZVJvd0Zsb29yICogaW1hZ2VzU3RyaWRlc1sxXTtcbiAgICAgIGNvbnN0IGJvdFJvd09mZnNldCA9XG4gICAgICAgICAgYiAqIGltYWdlc1N0cmlkZXNbMF0gKyBzb3VyY2VSb3dDZWlsICogaW1hZ2VzU3RyaWRlc1sxXTtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbmV3V2lkdGg7IGMrKykge1xuICAgICAgICBsZXQgc291cmNlRnJhY0NvbDogbnVtYmVyO1xuICAgICAgICBpZiAoaGFsZlBpeGVsQ2VudGVycykge1xuICAgICAgICAgIHNvdXJjZUZyYWNDb2wgPSBlZmZlY3RpdmVDb2xTaXplUmF0aW8gKiAoYyArIDAuNSkgLSAwLjU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc291cmNlRnJhY0NvbCA9IGVmZmVjdGl2ZUNvbFNpemVSYXRpbyAqIGM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlQ29sRmxvb3IgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHNvdXJjZUZyYWNDb2wpKTtcbiAgICAgICAgY29uc3QgY29sRnJhYyA9IHNvdXJjZUZyYWNDb2wgLSBzb3VyY2VDb2xGbG9vcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ29sQ2VpbCA9IE1hdGgubWluKG9sZFdpZHRoIC0gMSwgTWF0aC5jZWlsKHNvdXJjZUZyYWNDb2wpKTtcbiAgICAgICAgY29uc3QgdG9wTGVmdE9mZmVzdCA9IHRvcFJvd09mZnNldCArIHNvdXJjZUNvbEZsb29yICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgY29uc3QgYm90TGVmdE9mZnNldCA9IGJvdFJvd09mZnNldCArIHNvdXJjZUNvbEZsb29yICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgY29uc3QgdG9wUmlnaHRPZmZzZXQgPSB0b3BSb3dPZmZzZXQgKyBzb3VyY2VDb2xDZWlsICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgY29uc3QgYm90UmlnaHRPZmZlc3QgPSBib3RSb3dPZmZzZXQgKyBzb3VyY2VDb2xDZWlsICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgZm9yIChsZXQgZCA9IDA7IGQgPCBudW1DaGFubmVsczsgZCsrKSB7XG4gICAgICAgICAgLy8gQmVnaW4gc2hhZGVyLlxuXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCBpbmRleCBvZiB0aGUgc291cmNlLlxuICAgICAgICAgIGNvbnN0IHRvcExlZnQgPSB4VmFsdWVzW3RvcExlZnRPZmZlc3QgKyBkXTtcbiAgICAgICAgICBjb25zdCBib3R0b21MZWZ0ID0geFZhbHVlc1tib3RMZWZ0T2Zmc2V0ICsgZF07XG4gICAgICAgICAgY29uc3QgdG9wUmlnaHQgPSB4VmFsdWVzW3RvcFJpZ2h0T2Zmc2V0ICsgZF07XG4gICAgICAgICAgY29uc3QgYm90dG9tUmlnaHQgPSB4VmFsdWVzW2JvdFJpZ2h0T2ZmZXN0ICsgZF07XG5cbiAgICAgICAgICBjb25zdCB0b3AgPSB0b3BMZWZ0ICsgKHRvcFJpZ2h0IC0gdG9wTGVmdCkgKiBjb2xGcmFjO1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGJvdHRvbUxlZnQgKyAoYm90dG9tUmlnaHQgLSBib3R0b21MZWZ0KSAqIGNvbEZyYWM7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0b3AgKyAoYm90dG9tIC0gdG9wKSAqIHJvd0ZyYWM7XG5cbiAgICAgICAgICByZXN1bHRbb3V0cHV0SWR4KytdID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgIFtiYXRjaCwgbmV3SGVpZ2h0LCBuZXdXaWR0aCwgbnVtQ2hhbm5lbHNdLCAnZmxvYXQzMicsIHJlc3VsdCk7XG59XG5cbmV4cG9ydCBjb25zdCByZXNpemVCaWxpbmVhckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNpemVCaWxpbmVhcixcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiByZXNpemVCaWxpbmVhciBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeBilinearGrad, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function resizeBilinearGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n assertNotComplex([dy, images], 'resizeBilinearGrad');\n const imagesStrides = util.computeStrides(images.shape);\n const [batch, xHeight, xWidth, depth] = images.shape;\n const [, yHeight, yWidth] = dy.shape;\n const output = new Float32Array(batch * xHeight * xWidth * depth);\n // In the backwards pass, we want to find the pixels that were generated\n // for each pixel in the input image the forward pass and add the\n // corresponding coefficient from dy to the gradient (with some\n // interpolation).\n const effectiveXSize = [\n (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n ];\n const effectiveYSize = [\n (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n ];\n const heightScale = effectiveXSize[0] / effectiveYSize[0];\n const widthScale = effectiveXSize[1] / effectiveYSize[1];\n // Reference implementation\n // tslint:disable-next-line:max-line-length\n // https://github.com/tensorflow/tensorflow/blob/3039375c86a5bbc9610c7725dcaa95d635f87ba2/tensorflow/core/kernels/resize_bilinear_op.cc#L275\n const dyValues = backend.data.get(dy.dataId).values;\n let offset = 0;\n for (let b = 0; b < batch; b++) {\n const bOffset = b * imagesStrides[0];\n for (let r = 0; r < yHeight; r++) {\n const dxR = r * heightScale;\n const topDxRIndex = Math.floor(dxR);\n const bottomDxRIndex = Math.min(Math.ceil(dxR), xHeight - 1);\n const topDxROffset = bOffset + topDxRIndex * imagesStrides[1];\n const bottomDxROffset = bOffset + bottomDxRIndex * imagesStrides[1];\n const dxRLerp = dxR - topDxRIndex;\n const inverseDxRLerp = 1.0 - dxRLerp;\n for (let c = 0; c < yWidth; c++) {\n const dxC = c * widthScale;\n const leftDxCIndex = Math.floor(dxC);\n const rightDxCIndex = Math.min(Math.ceil(dxC), xWidth - 1);\n const dxCLerp = dxC - leftDxCIndex;\n const inverseDxCLerp = 1.0 - dxCLerp;\n const topLeftRCOffset = topDxROffset + leftDxCIndex * imagesStrides[2];\n const topRightRCOffset = topDxROffset + rightDxCIndex * imagesStrides[2];\n const bottomLeftRCOffset = bottomDxROffset + leftDxCIndex * imagesStrides[2];\n const bottomRightRCOffset = bottomDxROffset + rightDxCIndex * imagesStrides[2];\n const inverseDxRLerpTimesInverseDxCLerp = inverseDxRLerp * inverseDxCLerp;\n const inverseDxRLerpTimesDxCLerp = inverseDxRLerp * dxCLerp;\n const dxRLerpTimesInverseDxCLerp = dxRLerp * inverseDxCLerp;\n const dxRLerpTimesDxCLerp = dxRLerp * dxCLerp;\n for (let d = 0; d < depth; d++) {\n const dyVal = dyValues[offset++];\n output[topLeftRCOffset + d] +=\n dyVal * inverseDxRLerpTimesInverseDxCLerp;\n output[topRightRCOffset + d] += dyVal * inverseDxRLerpTimesDxCLerp;\n output[bottomLeftRCOffset + d] += dyVal * dxRLerpTimesInverseDxCLerp;\n output[bottomRightRCOffset + d] += dyVal * dxRLerpTimesDxCLerp;\n }\n }\n }\n }\n return backend.makeTensorInfo([batch, xWidth, xHeight, depth], 'float32', output);\n}\nexport const resizeBilinearGradConfig = {\n kernelName: ResizeBilinearGrad,\n backendName: 'cpu',\n kernelFunc: resizeBilinearGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplQmlsaW5lYXJHcmFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9SZXNpemVCaWxpbmVhckdyYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixrQkFBa0IsRUFBNkUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHcEssT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUlsQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUM1QixNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTdCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFFckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDckQsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFFckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFFbEUsd0VBQXdFO0lBQ3hFLGlFQUFpRTtJQUNqRSwrREFBK0Q7SUFDL0Qsa0JBQWtCO0lBRWxCLE1BQU0sY0FB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QVUsRUFBRSxrQkFBa0I7SUFDOUIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLGtCQUEyQztDQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaXplQmlsaW5lYXJHcmFkLCBSZXNpemVCaWxpbmVhckdyYWRBdHRycywgUmVzaXplQmlsaW5lYXJHcmFkSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUJpbGluZWFyR3JhZChhcmdzOiB7XG4gIGlucHV0czogUmVzaXplQmlsaW5lYXJHcmFkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IFJlc2l6ZUJpbGluZWFyR3JhZEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbWFnZXMsIGR5fSA9IGlucHV0cztcbiAgY29uc3Qge2FsaWduQ29ybmVyc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KFtkeSwgaW1hZ2VzXSwgJ3Jlc2l6ZUJpbGluZWFyR3JhZCcpO1xuXG4gIGNvbnN0IGltYWdlc1N0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGltYWdlcy5zaGFwZSk7XG5cbiAgY29uc3QgW2JhdGNoLCB4SGVpZ2h0LCB4V2lkdGgsIGRlcHRoXSA9IGltYWdlcy5zaGFwZTtcbiAgY29uc3QgWywgeUhlaWdodCwgeVdpZHRoXSA9IGR5LnNoYXBlO1xuXG4gIGNvbnN0IG91dHB1dCA9IG5ldyBGbG9hdDMyQXJyYXkoYmF0Y2ggKiB4SGVpZ2h0ICogeFdpZHRoICogZGVwdGgpO1xuXG4gIC8vIEluIHRoZSBiYWNrd2FyZHMgcGFzcywgd2Ugd2FudCB0byBmaW5kIHRoZSBwaXhlbHMgdGhhdCB3ZXJlIGdlbmVyYXRlZFxuICAvLyBmb3IgZWFjaCBwaXhlbCBpbiB0aGUgaW5wdXQgaW1hZ2UgdGhlIGZvcndhcmQgcGFzcyBhbmQgYWRkIHRoZVxuICAvLyBjb3JyZXNwb25kaW5nIGNvZWZmaWNpZW50IGZyb20gZHkgdG8gdGhlIGdyYWRpZW50ICh3aXRoIHNvbWVcbiAgLy8gaW50ZXJwb2xhdGlvbikuXG5cbiAgY29uc3QgZWZmZWN0aXZlWFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgKGFsaWduQ29ybmVycyAmJiB5SGVpZ2h0ID4gMSkgPyB4SGVpZ2h0IC0gMSA6IHhIZWlnaHQsXG4gICAgKGFsaWduQ29ybmVycyAmJiB5V2lkdGggPiAxKSA/IHhXaWR0aCAtIDEgOiB4V2lkdGhcbiAgXTtcblxuICBjb25zdCBlZmZlY3RpdmVZU2l6ZTogW251bWJlciwgbnVtYmVyXSA9IFtcbiAgICAoYWxpZ25Db3JuZXJzICYmIHlIZWlnaHQgPiAxKSA/IHlIZWlnaHQgLSAxIDogeUhlaWdodCxcbiAgICAoYWxpZ25Db3JuZXJzICYmIHlXaWR0aCA+IDEpID8geVdpZHRoIC0gMSA6IHlXaWR0aFxuICBdO1xuXG4gIGNvbnN0IGhlaWdodFNjYWxlID0gZWZmZWN0aXZlWFNpemVbMF0gLyBlZmZlY3RpdmVZU2l6ZVswXTtcbiAgY29uc3Qgd2lkdGhTY2FsZSA9IGVmZmVjdGl2ZVhTaXplWzFdIC8gZWZmZWN0aXZlWVNpemVbMV07XG5cbiAgLy8gUmVmZXJlbmNlIGltcGxlbWVudGF0aW9uXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yZmxvdy9ibG9iLzMwMzkzNzVjODZhNWJiYzk2MTBjNzcyNWRjYWE5NWQ2MzVmODdiYTIvdGVuc29yZmxvdy9jb3JlL2tlcm5lbHMvcmVzaXplX2JpbGluZWFyX29wLmNjI0wyNzVcbiAgY29uc3QgZHlWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGR5LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyBiKyspIHtcbiAgICBjb25zdCBiT2Zmc2V0ID0gYiAqIGltYWdlc1N0cmlkZXNbMF07XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCB5SGVpZ2h0OyByKyspIHtcbiAgICAgIGNvbnN0IGR4UiA9IHIgKiBoZWlnaHRTY2FsZTtcbiAgICAgIGNvbnN0IHRvcER4UkluZGV4ID0gTWF0aC5mbG9vcihkeFIpO1xuICAgICAgY29uc3QgYm90dG9tRHhSSW5kZXggPSBNYXRoLm1pbihNYXRoLmNlaWwoZHhSKSwgeEhlaWdodCAtIDEpO1xuXG4gICAgICBjb25zdCB0b3BEeFJPZmZzZXQgPSBiT2Zmc2V0ICsgdG9wRHhSSW5kZXggKiBpbWFnZXNTdHJpZGVzWzFdO1xuICAgICAgY29uc3QgYm90dG9tRHhST2Zmc2V0ID0gYk9mZnNldCArIGJvdHRvbUR4UkluZGV4ICogaW1hZ2VzU3RyaWRlc1sxXTtcblxuICAgICAgY29uc3QgZHhSTGVycCA9IGR4UiAtIHRvcER4UkluZGV4O1xuICAgICAgY29uc3QgaW52ZXJzZUR4UkxlcnAgPSAxLjAgLSBkeFJMZXJwO1xuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB5V2lkdGg7IGMrKykge1xuICAgICAgICBjb25zdCBkeEMgPSBjICogd2lkdGhTY2FsZTtcbiAgICAgICAgY29uc3QgbGVmdER4Q0luZGV4ID0gTWF0aC5mbG9vcihkeEMpO1xuICAgICAgICBjb25zdCByaWdodER4Q0luZGV4ID0gTWF0aC5taW4oTWF0aC5jZWlsKGR4QyksIHhXaWR0aCAtIDEpO1xuICAgICAgICBjb25zdCBkeENMZXJwID0gZHhDIC0gbGVmdER4Q0luZGV4O1xuICAgICAgICBjb25zdCBpbnZlcnNlRHhDTGVycCA9IDEuMCAtIGR4Q0xlcnA7XG5cbiAgICAgICAgY29uc3QgdG9wTGVmdFJDT2Zmc2V0ID0gdG9wRHhST2Zmc2V0ICsgbGVmdER4Q0luZGV4ICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgY29uc3QgdG9wUmlnaHRSQ09mZnNldCA9XG4gICAgICAgICAgICB0b3BEeFJPZmZzZXQgKyByaWdodER4Q0luZGV4ICogaW1hZ2VzU3RyaWRlc1syXTtcbiAgICAgICAgY29uc3QgYm90dG9tTGVmdFJDT2Zmc2V0ID1cbiAgICAgICAgICAgIGJvdHRvbUR4Uk9mZnNldCArIGxlZnREeENJbmRleCAqIGltYWdlc1N0cmlkZXNbMl07XG4gICAgICAgIGNvbnN0IGJvdHRvbVJpZ2h0UkNPZmZzZXQgPVxuICAgICAgICAgICAgYm90dG9tRHhST2Zmc2V0ICsgcmlnaHREeENJbmRleCAqIGltYWdlc1N0cmlkZXNbMl07XG5cbiAgICAgICAgY29uc3QgaW52ZXJzZUR4UkxlcnBUaW1lc0ludmVyc2VEeENMZXJwID1cbiAgICAgICAgICAgIGludmVyc2VEeFJMZXJwICogaW52ZXJzZUR4Q0xlcnA7XG4gICAgICAgIGNvbnN0IGludmVyc2VEeFJMZXJwVGltZXNEeENMZXJwID0gaW52ZXJzZUR4UkxlcnAgKiBkeENMZXJwO1xuICAgICAgICBjb25zdCBkeFJMZXJwVGltZXNJbnZlcnNlRHhDTGVycCA9IGR4UkxlcnAgKiBpbnZlcnNlRHhDTGVycDtcbiAgICAgICAgY29uc3QgZHhSTGVycFRpbWVzRHhDTGVycCA9IGR4UkxlcnAgKiBkeENMZXJwO1xuICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IGRlcHRoOyBkKyspIHtcbiAgICAgICAgICBjb25zdCBkeVZhbCA9IGR5VmFsdWVzW29mZnNldCsrXTtcbiAgICAgICAgICBvdXRwdXRbdG9wTGVmdFJDT2Zmc2V0ICsgZF0gKz1cbiAgICAgICAgICAgICAgZHlWYWwgKiBpbnZlcnNlRHhSTGVycFRpbWVzSW52ZXJzZUR4Q0xlcnA7XG4gICAgICAgICAgb3V0cHV0W3RvcFJpZ2h0UkNPZmZzZXQgKyBkXSArPSBkeVZhbCAqIGludmVyc2VEeFJMZXJwVGltZXNEeENMZXJwO1xuICAgICAgICAgIG91dHB1dFtib3R0b21MZWZ0UkNPZmZzZXQgKyBkXSArPSBkeVZhbCAqIGR4UkxlcnBUaW1lc0ludmVyc2VEeENMZXJwO1xuICAgICAgICAgIG91dHB1dFtib3R0b21SaWdodFJDT2Zmc2V0ICsgZF0gKz0gZHlWYWwgKiBkeFJMZXJwVGltZXNEeENMZXJwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICBbYmF0Y2gsIHhXaWR0aCwgeEhlaWdodCwgZGVwdGhdLCAnZmxvYXQzMicsIG91dHB1dCk7XG59XG5cbmV4cG9ydCBjb25zdCByZXNpemVCaWxpbmVhckdyYWRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUmVzaXplQmlsaW5lYXJHcmFkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZUJpbGluZWFyR3JhZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeNearestNeighbor, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function resizeNearestNeighbor(args) {\n const { inputs, backend, attrs } = args;\n const { images } = inputs;\n const { alignCorners, halfPixelCenters, size } = attrs;\n assertNotComplex(images, 'resizeNearestNeighbor');\n const imagesStrides = util.computeStrides(images.shape);\n const [newHeight, newWidth] = size;\n const [batch, oldHeight, oldWidth, numChannels] = images.shape;\n const xValues = backend.data.get(images.dataId).values;\n const output = new Float32Array(batch * newHeight * newWidth * numChannels);\n const effectiveInputSize = [\n (alignCorners && newHeight > 1) ? oldHeight - 1 : oldHeight,\n (alignCorners && newWidth > 1) ? oldWidth - 1 : oldWidth\n ];\n const effectiveOutputSize = [\n (alignCorners && newHeight > 1) ? newHeight - 1 : newHeight,\n (alignCorners && newWidth > 1) ? newWidth - 1 : newWidth\n ];\n const effectiveRowSizeRatio = effectiveInputSize[0] / effectiveOutputSize[0];\n const effectiveColSizeRatio = effectiveInputSize[1] / effectiveOutputSize[1];\n let outputOffset = 0;\n for (let b = 0; b < batch; b++) {\n const batchOffset = b * imagesStrides[0];\n for (let r = 0; r < newHeight; r++) {\n const sourceFracRow = halfPixelCenters ?\n effectiveRowSizeRatio * (r + 0.5) :\n effectiveRowSizeRatio * r;\n let sourceNearestRow = Math.min(oldHeight - 1, alignCorners ? Math.round(sourceFracRow) : Math.floor(sourceFracRow));\n if (halfPixelCenters) {\n sourceNearestRow = Math.max(0, sourceNearestRow);\n }\n const rowOffset = batchOffset + sourceNearestRow * imagesStrides[1];\n for (let c = 0; c < newWidth; c++) {\n const sourceFracCol = halfPixelCenters ?\n effectiveColSizeRatio * (c + 0.5) :\n effectiveColSizeRatio * c;\n let sourceNearestCol = Math.min(oldWidth - 1, alignCorners ? Math.round(sourceFracCol) :\n Math.floor(sourceFracCol));\n if (halfPixelCenters) {\n sourceNearestCol = Math.max(0, sourceNearestCol);\n }\n const colOffset = rowOffset + sourceNearestCol * imagesStrides[2];\n for (let d = 0; d < numChannels; d++) {\n // Begin shader.\n // Compute the fractional index of the source.\n const newVal = xValues[colOffset + d];\n output[outputOffset++] = newVal;\n }\n }\n }\n }\n return backend.makeTensorInfo([batch, newHeight, newWidth, numChannels], images.dtype, output);\n}\nexport const resizeNearestNeighborConfig = {\n kernelName: ResizeNearestNeighbor,\n backendName: 'cpu',\n kernelFunc: resizeNearestNeighbor\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9SZXNpemVOZWFyZXN0TmVpZ2hib3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixxQkFBcUIsRUFBbUYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHN0ssT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUlyQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJELGdCQUFnQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBRWxELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRW5DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQy9ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsUUFBUSxHQUFHLFdBQVcsQ0FBQyxD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O2dCQUNsRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwQyxnQkFBZ0I7b0JBQ2hCLDhDQUE4QztvQkFDOUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FDekIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBaUI7SUFDdkQsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQyxXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUscUJBQThDO0NBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXNpemVOZWFyZXN0TmVpZ2hib3IsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckF0dHJzLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplTmVhcmVzdE5laWdoYm9yKGFyZ3M6IHtcbiAgaW5wdXRzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogUmVzaXplTmVhcmVzdE5laWdoYm9yQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlc30gPSBpbnB1dHM7XG4gIGNvbnN0IHthbGlnbkNvcm5lcnMsIGhhbGZQaXhlbENlbnRlcnMsIHNpemV9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChpbWFnZXMsICdyZXNpemVOZWFyZXN0TmVpZ2hib3InKTtcblxuICBjb25zdCBpbWFnZXNTdHJpZGVzID0gdXRpbC5jb21wdXRlU3RyaWRlcyhpbWFnZXMuc2hhcGUpO1xuICBjb25zdCBbbmV3SGVpZ2h0LCBuZXdXaWR0aF0gPSBzaXplO1xuXG4gIGNvbnN0IFtiYXRjaCwgb2xkSGVpZ2h0LCBvbGRXaWR0aCwgbnVtQ2hhbm5lbHNdID0gaW1hZ2VzLnNoYXBlO1xuICBjb25zdCB4VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldChpbWFnZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3Qgb3V0cHV0ID0gbmV3IEZsb2F0MzJBcnJheShiYXRjaCAqIG5ld0hlaWdodCAqIG5ld1dpZHRoICogbnVtQ2hhbm5lbHMpO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZUlucHV0U2l6ZTogW251bWJlciwgbnVtYmVyXSA9IFtcbiAgICAoYWxpZ25Db3JuZXJzICYmIG5ld0hlaWdodCA+IDEpID8gb2xkSGVpZ2h0IC0gMSA6IG9sZEhlaWdodCxcbiAgICAoYWxpZ25Db3JuZXJzICYmIG5ld1dpZHRoID4gMSkgPyBvbGRXaWR0aCAtIDEgOiBvbGRXaWR0aFxuICBdO1xuXG4gIGNvbnN0IGVmZmVjdGl2ZU91dHB1dFNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgKGFsaWduQ29ybmVycyAmJiBuZXdIZWlnaHQgPiAxKSA/IG5ld0hlaWdodCAtIDEgOiBuZXdIZWlnaHQsXG4gICAgKGFsaWduQ29ybmVycyAmJiBuZXdXaWR0aCA+IDEpID8gbmV3V2lkdGggLSAxIDogbmV3V2lkdGhcbiAgXTtcblxuICBjb25zdCBlZmZlY3RpdmVSb3dTaXplUmF0aW8gPSBlZmZlY3RpdmVJbnB1dFNpemVbMF0gLyBlZmZlY3RpdmVPdXRwdXRTaXplWzBdO1xuICBjb25zdCBlZmZlY3RpdmVDb2xTaXplUmF0aW8gPSBlZmZlY3RpdmVJbnB1dFNpemVbMV0gLyBlZmZlY3RpdmVPdXRwdXRTaXplWzFdO1xuXG4gIGxldCBvdXRwdXRPZmZzZXQgPSAwO1xuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyBiKyspIHtcbiAgICBjb25zdCBiYXRjaE9mZnNldCA9IGIgKiBpbWFnZXNTdHJpZGVzWzBdO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDwgbmV3SGVpZ2h0OyByKyspIHtcbiAgICAgIGNvbnN0IHNvdXJjZUZyYWNSb3cgPSBoYWxmUGl4ZWxDZW50ZXJzID9cbiAgICAgICAgICBlZmZlY3RpdmVSb3dTaXplUmF0aW8gKiAociArIDAuNSkgOlxuICAgICAgICAgIGVmZmVjdGl2ZVJvd1NpemVSYXRpbyAqIHI7XG4gICAgICBsZXQgc291cmNlTmVhcmVzdFJvdyA9IE1hdGgubWluKFxuICAgICAgICAgIG9sZEhlaWdodCAtIDEsXG4gICAgICAgICAgYWxpZ25Db3JuZXJzID8gTWF0aC5yb3VuZChzb3VyY2VGcmFjUm93KSA6IE1hdGguZmxvb3Ioc291cmNlRnJhY1JvdykpO1xuICAgICAgaWYgKGhhbGZQaXhlbENlbnRlcnMpIHtcbiAgICAgICAgc291cmNlTmVhcmVzdFJvdyA9IE1hdGgubWF4KDAsIHNvdXJjZU5lYXJlc3RSb3cpO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm93T2Zmc2V0ID0gYmF0Y2hPZmZzZXQgKyBzb3VyY2VOZWFyZXN0Um93ICogaW1hZ2VzU3RyaWRlc1sxXTtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbmV3V2lkdGg7IGMrKykge1xuICAgICAgICBjb25zdCBzb3VyY2VGcmFjQ29sID0gaGFsZlBpeGVsQ2VudGVycyA/XG4gICAgICAgICAgICBlZmZlY3RpdmVDb2xTaXplUmF0aW8gKiAoYyArIDAuNSkgOlxuICAgICAgICAgICAgZWZmZWN0aXZlQ29sU2l6ZVJhdGlvICogYztcbiAgICAgICAgbGV0IHNvdXJjZU5lYXJlc3RDb2wgPSBNYXRoLm1pbihcbiAgICAgICAgICAgIG9sZFdpZHRoIC0gMSxcbiAgICAgICAgICAgIGFsaWduQ29ybmVycyA/IE1hdGgucm91bmQoc291cmNlRnJhY0NvbCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihzb3VyY2VGcmFjQ29sKSk7XG4gICAgICAgIGlmIChoYWxmUGl4ZWxDZW50ZXJzKSB7XG4gICAgICAgICAgc291cmNlTmVhcmVzdENvbCA9IE1hdGgubWF4KDAsIHNvdXJjZU5lYXJlc3RDb2wpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbE9mZnNldCA9IHJvd09mZnNldCArIHNvdXJjZU5lYXJlc3RDb2wgKiBpbWFnZXNTdHJpZGVzWzJdO1xuICAgICAgICBmb3IgKGxldCBkID0gMDsgZCA8IG51bUNoYW5uZWxzOyBkKyspIHtcbiAgICAgICAgICAvLyBCZWdpbiBzaGFkZXIuXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCBpbmRleCBvZiB0aGUgc291cmNlLlxuICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHhWYWx1ZXNbY29sT2Zmc2V0ICsgZF07XG4gICAgICAgICAgb3V0cHV0W291dHB1dE9mZnNldCsrXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgW2JhdGNoLCBuZXdIZWlnaHQsIG5ld1dpZHRoLCBudW1DaGFubmVsc10sIGltYWdlcy5kdHlwZSwgb3V0cHV0KTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlc2l6ZU5lYXJlc3ROZWlnaGJvckNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNpemVOZWFyZXN0TmVpZ2hib3IsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmVzaXplTmVhcmVzdE5laWdoYm9yIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ResizeNearestNeighborGrad, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function resizeNearestNeighborGrad(args) {\n const { inputs, backend, attrs } = args;\n const { images, dy } = inputs;\n const { alignCorners } = attrs;\n assertNotComplex([dy, images], 'resizeNearestNeighborGrad');\n const imagesStrides = util.computeStrides(images.shape);\n const dyStrides = util.computeStrides(dy.shape);\n const [batch, xHeight, xWidth, depth] = images.shape;\n const [, yHeight, yWidth] = dy.shape;\n const output = new Float32Array(batch * xHeight * xWidth * depth);\n const dyValues = backend.data.get(dy.dataId).values;\n // In the backwards pass, we want to find the pixels that were generated\n // for each pixel in the input image the forward pass\n const effectiveXSize = [\n (alignCorners && yHeight > 1) ? xHeight - 1 : xHeight,\n (alignCorners && yWidth > 1) ? xWidth - 1 : xWidth\n ];\n const effectiveYSize = [\n (alignCorners && yHeight > 1) ? yHeight - 1 : yHeight,\n (alignCorners && yWidth > 1) ? yWidth - 1 : yWidth\n ];\n const heightScale = effectiveXSize[0] / effectiveYSize[0];\n const widthScale = effectiveXSize[1] / effectiveYSize[1];\n const invHeightScale = 1 / heightScale;\n const invWidthScale = 1 / widthScale;\n // This defines the size of the window of values around a particular\n // index in dy that we want to search for contributions to dx.\n const winHeight = (Math.ceil(invHeightScale) * 2) + 2;\n const winWidth = (Math.ceil(invWidthScale) * 2) + 2;\n // Loop over the output space.\n for (let b = 0; b < batch; b++) {\n const batchOffset = b * imagesStrides[0];\n for (let r = 0; r < xHeight; r++) {\n const rowOffset = batchOffset + r * imagesStrides[1];\n // Compute bounds for where in dy we will look\n const startRLerp = Math.floor(r * invHeightScale);\n const startDyR = Math.floor(startRLerp - (winHeight / 2));\n for (let c = 0; c < xWidth; c++) {\n const colOffset = rowOffset + c * imagesStrides[2];\n // Compute bounds for where in dy we will look\n const startCLerp = Math.floor(c * invWidthScale);\n const startDyC = Math.floor(startCLerp - (winWidth / 2));\n for (let d = 0; d < depth; d++) {\n let accum = 0;\n // loop over dy\n for (let dyRIndex = 0; dyRIndex < winHeight; dyRIndex++) {\n const dyR = dyRIndex + startDyR;\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= yHeight) {\n continue;\n }\n const dyROffset = batchOffset + dyR * dyStrides[1];\n const sourceFracRow = dyR * heightScale;\n const sourceNearestRow = Math.min(xHeight - 1, alignCorners ? Math.round(sourceFracRow) :\n Math.floor(sourceFracRow));\n if (r !== sourceNearestRow) {\n continue;\n }\n for (let dyCIndex = 0; dyCIndex < winWidth; dyCIndex++) {\n const dyC = dyCIndex + startDyC;\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= yWidth) {\n continue;\n }\n const dyCOffset = dyROffset + dyC * dyStrides[2];\n const sourceFracCol = dyC * widthScale;\n const sourceNearestCol = Math.min(xWidth - 1, alignCorners ? Math.round(sourceFracCol) :\n Math.floor(sourceFracCol));\n if (c === sourceNearestCol) {\n accum += dyValues[dyCOffset + d];\n }\n }\n }\n output[colOffset + d] = accum;\n }\n }\n }\n }\n return backend.makeTensorInfo(images.shape, images.dtype, output);\n}\nexport const resizeNearestNeighborGradConfig = {\n kernelName: ResizeNearestNeighborGrad,\n backendName: 'cpu',\n kernelFunc: resizeNearestNeighborGrad\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLHlCQUF5QixFQUEyRixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6TCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBSXpDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFN0IsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUU1RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNyRCxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxL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QUksQ0FBQyxHQUFHLENBQzdCLE1BQU0sR0FBRyxDQUFDLEVBQ1YsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0NBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs0QkFFOUMsSUFBSSxDQUFDLEtBQUssZ0JBQWdCLEVBQUU7Z0NBQzFCLEtBQUssSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUNsQzt5QkFDRjtxQkFDRjtvQkFDRCxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDL0I7YUFDRjtTQUNGO0tBQ0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBaUI7SUFDM0QsVUFBVSxFQUFFLHlCQUF5QjtJQUNyQyxXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUseUJBQWtEO0NBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkLCBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQXR0cnMsIFJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZChhcmdzOiB7XG4gIGlucHV0czogUmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZElucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge2ltYWdlcywgZHl9ID0gaW5wdXRzO1xuICBjb25zdCB7YWxpZ25Db3JuZXJzfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoW2R5LCBpbWFnZXNdLCAncmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZCcpO1xuXG4gIGNvbnN0IGltYWdlc1N0cmlkZXMgPSB1dGlsLmNvbXB1dGVTdHJpZGVzKGltYWdlcy5zaGFwZSk7XG4gIGNvbnN0IGR5U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoZHkuc2hhcGUpO1xuICBjb25zdCBbYmF0Y2gsIHhIZWlnaHQsIHhXaWR0aCwgZGVwdGhdID0gaW1hZ2VzLnNoYXBlO1xuICBjb25zdCBbLCB5SGVpZ2h0LCB5V2lkdGhdID0gZHkuc2hhcGU7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IEZsb2F0MzJBcnJheShiYXRjaCAqIHhIZWlnaHQgKiB4V2lkdGggKiBkZXB0aCk7XG4gIGNvbnN0IGR5VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldChkeS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIC8vIEluIHRoZSBiYWNrd2FyZHMgcGFzcywgd2Ugd2FudCB0byBmaW5kIHRoZSBwaXhlbHMgdGhhdCB3ZXJlIGdlbmVyYXRlZFxuICAvLyBmb3IgZWFjaCBwaXhlbCBpbiB0aGUgaW5wdXQgaW1hZ2UgdGhlIGZvcndhcmQgcGFzc1xuXG4gIGNvbnN0IGVmZmVjdGl2ZVhTaXplOiBbbnVtYmVyLCBudW1iZXJdID0gW1xuICAgIChhbGlnbkNvcm5lcnMgJiYgeUhlaWdodCA+IDEpID8geEhlaWdodCAtIDEgOiB4SGVpZ2h0LFxuICAgIChhbGlnbkNvcm5lcnMgJiYgeVdpZHRoID4gMSkgPyB4V2lkdGggLSAxIDogeFdpZHRoXG4gIF07XG5cbiAgY29uc3QgZWZmZWN0aXZlWVNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgKGFsaWduQ29ybmVycyAmJiB5SGVpZ2h0ID4gMSkgPyB5SGVpZ2h0IC0gMSA6IHlIZWlnaHQsXG4gICAgKGFsaWduQ29ybmVycyAmJiB5V2lkdGggPiAxKSA/IHlXaWR0aCAtIDEgOiB5V2lkdGhcbiAgXTtcblxuICBjb25zdCBoZWlnaHRTY2FsZSA9IGVmZmVjdGl2ZVhTaXplWzBdIC8gZWZmZWN0aXZlWVNpemVbMF07XG4gIGNvbnN0IHdpZHRoU2NhbGUgPSBlZmZlY3RpdmVYU2l6ZVsxXSAvIGVmZmVjdGl2ZVlTaXplWzFdO1xuXG4gIGNvbnN0IGludkhlaWdodFNjYWxlID0gMSAvIGhlaWdodFNjYWxlO1xuICBjb25zdCBpbnZXaWR0aFNjYWxlID0gMSAvIHdpZHRoU2NhbGU7XG5cbiAgLy8gVGhpcyBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSB3aW5kb3cgb2YgdmFsdWVzIGFyb3VuZCBhIHBhcnRpY3VsYXJcbiAgLy8gaW5kZXggaW4gZHkgdGhhdCB3ZSB3YW50IHRvIHNlYXJjaCBmb3IgY29udHJpYnV0aW9ucyB0byBkeC5cbiAgY29uc3Qgd2luSGVpZ2h0ID0gKE1hdGguY2VpbChpbnZIZWlnaHRTY2FsZSkgKiAyKSArIDI7XG4gIGNvbnN0IHdpbldpZHRoID0gKE1hdGguY2VpbChpbnZXaWR0aFNjYWxlKSAqIDIpICsgMjtcblxuICAvLyBMb29wIG92ZXIgdGhlIG91dHB1dCBzcGFjZS5cbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaDsgYisrKSB7XG4gICAgY29uc3QgYmF0Y2hPZmZzZXQgPSBiICogaW1hZ2VzU3RyaWRlc1swXTtcbiAgICBmb3IgKGxldCByID0gMDsgciA8IHhIZWlnaHQ7IHIrKykge1xuICAgICAgY29uc3Qgcm93T2Zmc2V0ID0gYmF0Y2hPZmZzZXQgKyByICogaW1hZ2VzU3RyaWRlc1sxXTtcblxuICAgICAgLy8gQ29tcHV0ZSBib3VuZHMgZm9yIHdoZXJlIGluIGR5IHdlIHdpbGwgbG9va1xuICAgICAgY29uc3Qgc3RhcnRSTGVycCA9IE1hdGguZmxvb3IociAqIGludkhlaWdodFNjYWxlKTtcbiAgICAgIGNvbnN0IHN0YXJ0RHlSID0gTWF0aC5mbG9vcihzdGFydFJMZXJwIC0gKHdpbkhlaWdodCAvIDIpKTtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgeFdpZHRoOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sT2Zmc2V0ID0gcm93T2Zmc2V0ICsgYyAqIGltYWdlc1N0cmlkZXNbMl07XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBib3VuZHMgZm9yIHdoZXJlIGluIGR5IHdlIHdpbGwgbG9va1xuICAgICAgICBjb25zdCBzdGFydENMZXJwID0gTWF0aC5mbG9vcihjICogaW52V2lkdGhTY2FsZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RHlDID0gTWF0aC5mbG9vcihzdGFydENMZXJwIC0gKHdpbldpZHRoIC8gMikpO1xuXG4gICAgICAgIGZvciAobGV0IGQgPSAwOyBkIDwgZGVwdGg7IGQrKykge1xuICAgICAgICAgIGxldCBhY2N1bSA9IDA7XG4gICAgICAgICAgLy8gbG9vcCBvdmVyIGR5XG5cbiAgICAgICAgICBmb3IgKGxldCBkeVJJbmRleCA9IDA7IGR5UkluZGV4IDwgd2luSGVpZ2h0OyBkeVJJbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkeVIgPSBkeVJJbmRleCArIHN0YXJ0RHlSO1xuICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgd2luZG93IGV4Y2VlZGluZyB0aGUgYm91bmRzIG9mIGR5XG4gICAgICAgICAgICBpZiAoZHlSIDwgMCB8fCBkeVIgPj0geUhlaWdodCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZHlST2Zmc2V0ID0gYmF0Y2hPZmZzZXQgKyBkeVIgKiBkeVN0cmlkZXNbMV07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VGcmFjUm93ID0gZHlSICogaGVpZ2h0U2NhbGU7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VOZWFyZXN0Um93ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgeEhlaWdodCAtIDEsXG4gICAgICAgICAgICAgICAgYWxpZ25Db3JuZXJzID8gTWF0aC5yb3VuZChzb3VyY2VGcmFjUm93KSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihzb3VyY2VGcmFjUm93KSk7XG4gICAgICAgICAgICBpZiAociAhPT0gc291cmNlTmVhcmVzdFJvdykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGR5Q0luZGV4ID0gMDsgZHlDSW5kZXggPCB3aW5XaWR0aDsgZHlDSW5kZXgrKykge1xuICAgICAgICAgICAgICBjb25zdCBkeUMgPSBkeUNJbmRleCArIHN0YXJ0RHlDO1xuICAgICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSB3aW5kb3cgZXhjZWVkaW5nIHRoZSBib3VuZHMgb2YgZHlcbiAgICAgICAgICAgICAgaWYgKGR5QyA8IDAgfHwgZHlDID49IHlXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZHlDT2Zmc2V0ID0gZHlST2Zmc2V0ICsgZHlDICogZHlTdHJpZGVzWzJdO1xuICAgICAgICAgICAgICBjb25zdCBzb3VyY2VGcmFjQ29sID0gZHlDICogd2lkdGhTY2FsZTtcbiAgICAgICAgICAgICAgY29uc3Qgc291cmNlTmVhcmVzdENvbCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgeFdpZHRoIC0gMSxcbiAgICAgICAgICAgICAgICAgIGFsaWduQ29ybmVycyA/IE1hdGgucm91bmQoc291cmNlRnJhY0NvbCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihzb3VyY2VGcmFjQ29sKSk7XG5cbiAgICAgICAgICAgICAgaWYgKGMgPT09IHNvdXJjZU5lYXJlc3RDb2wpIHtcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBkeVZhbHVlc1tkeUNPZmZzZXQgKyBkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXRbY29sT2Zmc2V0ICsgZF0gPSBhY2N1bTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKGltYWdlcy5zaGFwZSwgaW1hZ2VzLmR0eXBlLCBvdXRwdXQpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzaXplTmVhcmVzdE5laWdoYm9yR3JhZENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHJlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Reverse, TensorBuffer, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { identity } from './Identity';\nexport function reverse(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { dims } = attrs;\n assertNotComplex(x, 'reverse');\n const xRank = x.shape.length;\n const $dims = util.parseAxisParam(dims, x.shape);\n if (xRank === 0) {\n return identity({ inputs: { x }, backend });\n }\n const outBuf = new TensorBuffer(x.shape, x.dtype);\n const xBuf = backend.bufferSync(x);\n for (let i = 0; i < outBuf.size; i++) {\n const outLoc = outBuf.indexToLoc(i);\n const inLoc = outLoc.slice();\n $dims.forEach(d => inLoc[d] = x.shape[d] - 1 - inLoc[d]);\n outBuf.set(xBuf.get(...inLoc), ...outLoc);\n }\n return backend.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values);\n}\nexport const reverseConfig = {\n kernelName: Reverse,\n backendName: 'cpu',\n kernelFunc: reverse\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUmV2ZXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLE9BQU8sRUFBK0IsWUFBWSxFQUFjLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR3JJLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sVUFBVSxPQUFPLENBQ25CLElBQ3lFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFckIsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRS9CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDZixPQUFPLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7S0FDekM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztLQUMzQztJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWlCO0lBQ3pDLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxPQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmV2ZXJzZSwgUmV2ZXJzZUF0dHJzLCBSZXZlcnNlSW5wdXRzLCBUZW5zb3JCdWZmZXIsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHtpZGVudGl0eX0gZnJvbSAnLi9JZGVudGl0eSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlKFxuICAgIGFyZ3M6XG4gICAgICAgIHtpbnB1dHM6IFJldmVyc2VJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogUmV2ZXJzZUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2RpbXN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAncmV2ZXJzZScpO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG5cbiAgY29uc3QgJGRpbXMgPSB1dGlsLnBhcnNlQXhpc1BhcmFtKGRpbXMsIHguc2hhcGUpO1xuICBpZiAoeFJhbmsgPT09IDApIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoe2lucHV0czoge3h9LCBiYWNrZW5kfSk7XG4gIH1cblxuICBjb25zdCBvdXRCdWYgPSBuZXcgVGVuc29yQnVmZmVyKHguc2hhcGUsIHguZHR5cGUpO1xuICBjb25zdCB4QnVmID0gYmFja2VuZC5idWZmZXJTeW5jKHgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0QnVmLnNpemU7IGkrKykge1xuICAgIGNvbnN0IG91dExvYyA9IG91dEJ1Zi5pbmRleFRvTG9jKGkpO1xuICAgIGNvbnN0IGluTG9jID0gb3V0TG9jLnNsaWNlKCk7XG4gICAgJGRpbXMuZm9yRWFjaChkID0+IGluTG9jW2RdID0geC5zaGFwZVtkXSAtIDEgLSBpbkxvY1tkXSk7XG4gICAgb3V0QnVmLnNldCh4QnVmLmdldCguLi5pbkxvYyksIC4uLm91dExvYyk7XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRCdWYuc2hhcGUsIG91dEJ1Zi5kdHlwZSwgb3V0QnVmLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCByZXZlcnNlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJldmVyc2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogcmV2ZXJzZSBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, RotateWithOffset, util } from '@tensorflow/tfjs-core';\nexport const rotateWithOffsetConfig = {\n kernelName: RotateWithOffset,\n backendName: 'cpu',\n kernelFunc: ({ inputs, attrs, backend }) => {\n const { image } = inputs;\n const { radians, fillValue, center } = attrs;\n const cpuBackend = backend;\n const output = util.getTypedArrayFromDType(image.dtype, util.sizeFromShape(image.shape));\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const [centerX, centerY] = backend_util.getImageCenter(center, imageHeight, imageWidth);\n const fullOpacityValue = 255;\n const sinFactor = Math.sin(radians);\n const cosFactor = Math.cos(radians);\n const imageVals = cpuBackend.data.get(image.dataId).values;\n for (let batchIdx = 0; batchIdx < batch; batchIdx++) {\n const batchOffset = batchIdx * imageWidth * imageHeight * numChannels;\n for (let row = 0; row < imageHeight; row++) {\n const rowOffset = row * (imageWidth * numChannels);\n for (let col = 0; col < imageWidth; col++) {\n const colOffset = col * numChannels;\n for (let channel = 0; channel < numChannels; channel++) {\n const coords = [batch, row, col, channel];\n const x = coords[2];\n const y = coords[1];\n // coordX/coordY are the result of rotating and translating x/y.\n let coordX = (x - centerX) * cosFactor - (y - centerY) * sinFactor;\n let coordY = (x - centerX) * sinFactor + (y - centerY) * cosFactor;\n coordX = Math.round(coordX + centerX);\n coordY = Math.round(coordY + centerY);\n let outputValue = fillValue;\n if (typeof fillValue !== 'number') {\n if (channel === 3) {\n outputValue = fullOpacityValue;\n }\n else {\n outputValue = fillValue[channel];\n }\n }\n // If the coordinate position falls within the image boundaries...\n if (coordX >= 0 && coordX < imageWidth && coordY >= 0 &&\n coordY < imageHeight) {\n // set the output to the image value at the coordinate position.\n const rotatedRowOffset = coordY * (imageWidth * numChannels);\n const rotatedColOffset = coordX * numChannels;\n const imageIdx = batchOffset + rotatedRowOffset + rotatedColOffset + channel;\n outputValue = imageVals[imageIdx];\n }\n const outIdx = batchOffset + rowOffset + colOffset + channel;\n output[outIdx] = outputValue;\n }\n }\n }\n }\n const dataId = cpuBackend.write(output, image.shape, image.dtype);\n return { dataId, shape: image.shape, dtype: image.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm90YXRlV2l0aE9mZnNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvUm90YXRlV2l0aE9mZnNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFHSCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFpRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUkxSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBaUI7SUFDbEQsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBZ0MsQ0FBQztRQUNqRCxNQUFNLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsR0FDaEMsS0FBeUMsQ0FBQztRQUM1QyxNQUFNLFVBQVUsR0FBRyxPQUF5QixDQUFDO1FBRTdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDdEMsS0FBSyxDQUFDLEtBQXdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVsRSxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUNwQixZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFFN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxP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QUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIE51bWVyaWNEYXRhVHlwZSwgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7YmFja2VuZF91dGlsLCBSb3RhdGVXaXRoT2Zmc2V0LCBSb3RhdGVXaXRoT2Zmc2V0QXR0cnMsIFJvdGF0ZVdpdGhPZmZzZXRJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuZXhwb3J0IGNvbnN0IHJvdGF0ZVdpdGhPZmZzZXRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogUm90YXRlV2l0aE9mZnNldCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiAoe2lucHV0cywgYXR0cnMsIGJhY2tlbmR9KSA9PiB7XG4gICAgY29uc3Qge2ltYWdlfSA9IGlucHV0cyBhcyBSb3RhdGVXaXRoT2Zmc2V0SW5wdXRzO1xuICAgIGNvbnN0IHtyYWRpYW5zLCBmaWxsVmFsdWUsIGNlbnRlcn0gPVxuICAgICAgYXR0cnMgYXMgdW5rbm93biBhcyBSb3RhdGVXaXRoT2Zmc2V0QXR0cnM7XG4gICAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRDUFU7XG5cbiAgICBjb25zdCBvdXRwdXQgPSB1dGlsLmdldFR5cGVkQXJyYXlGcm9tRFR5cGUoXG4gICAgICAgIGltYWdlLmR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKGltYWdlLnNoYXBlKSk7XG4gICAgY29uc3QgW2JhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgbnVtQ2hhbm5lbHNdID0gaW1hZ2Uuc2hhcGU7XG5cbiAgICBjb25zdCBbY2VudGVyWCwgY2VudGVyWV0gPVxuICAgICAgICBiYWNrZW5kX3V0aWwuZ2V0SW1hZ2VDZW50ZXIoY2VudGVyLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCk7XG4gICAgY29uc3QgZnVsbE9wYWNpdHlWYWx1ZSA9IDI1NTtcblxuICAgIGNvbnN0IHNpbkZhY3RvciA9IE1hdGguc2luKHJhZGlhbnMpO1xuICAgIGNvbnN0IGNvc0ZhY3RvciA9IE1hdGguY29zKHJhZGlhbnMpO1xuICAgIGNvbnN0IGltYWdlVmFscyA9IGNwdUJhY2tlbmQuZGF0YS5nZXQoaW1hZ2UuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcblxuICAgIGZvciAobGV0IGJhdGNoSWR4ID0gMDsgYmF0Y2hJZHggPCBiYXRjaDsgYmF0Y2hJZHgrKykge1xuICAgICAgY29uc3QgYmF0Y2hPZmZzZXQgPSBiYXRjaElkeCAqIGltYWdlV2lkdGggKiBpbWFnZUhlaWdodCAqIG51bUNoYW5uZWxzO1xuXG4gICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBpbWFnZUhlaWdodDsgcm93KyspIHtcbiAgICAgICAgY29uc3Qgcm93T2Zmc2V0ID0gcm93ICogKGltYWdlV2lkdGggKiBudW1DaGFubmVscyk7XG5cbiAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgaW1hZ2VXaWR0aDsgY29sKyspIHtcbiAgICAgICAgICBjb25zdCBjb2xPZmZzZXQgPSBjb2wgKiBudW1DaGFubmVscztcblxuICAgICAgICAgIGZvciAobGV0IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtQ2hhbm5lbHM7IGNoYW5uZWwrKykge1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gW2JhdGNoLCByb3csIGNvbCwgY2hhbm5lbF07XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBjb29yZHNbMl07XG4gICAgICAgICAgICBjb25zdCB5ID0gY29vcmRzWzFdO1xuXG4gICAgICAgICAgICAvLyBjb29yZFgvY29vcmRZIGFyZSB0aGUgcmVzdWx0IG9mIHJvdGF0aW5nIGFuZCB0cmFuc2xhdGluZyB4L3kuXG4gICAgICAgICAgICBsZXQgY29vcmRYID0gKHggLSBjZW50ZXJYKSAqIGNvc0ZhY3RvciAtICh5IC0gY2VudGVyWSkgKiBzaW5GYWN0b3I7XG4gICAgICAgICAgICBsZXQgY29vcmRZID0gKHggLSBjZW50ZXJYKSAqIHNpbkZhY3RvciArICh5IC0gY2VudGVyWSkgKiBjb3NGYWN0b3I7XG4gICAgICAgICAgICBjb29yZFggPSBNYXRoLnJvdW5kKGNvb3JkWCArIGNlbnRlclgpO1xuICAgICAgICAgICAgY29vcmRZID0gTWF0aC5yb3VuZChjb29yZFkgKyBjZW50ZXJZKTtcblxuICAgICAgICAgICAgbGV0IG91dHB1dFZhbHVlID0gZmlsbFZhbHVlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWxsVmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFubmVsID09PSAzKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSBmdWxsT3BhY2l0eVZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gZmlsbFZhbHVlW2NoYW5uZWxdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29yZGluYXRlIHBvc2l0aW9uIGZhbGxzIHdpdGhpbiB0aGUgaW1hZ2UgYm91bmRhcmllcy4uLlxuICAgICAgICAgICAgaWYgKGNvb3JkWCA+PSAwICYmIGNvb3JkWCA8IGltYWdlV2lkdGggJiYgY29vcmRZID49IDAgJiZcbiAgICAgICAgICAgICAgICBjb29yZFkgPCBpbWFnZUhlaWdodCkge1xuICAgICAgICAgICAgICAvLyBzZXQgdGhlIG91dHB1dCB0byB0aGUgaW1hZ2UgdmFsdWUgYXQgdGhlIGNvb3JkaW5hdGUgcG9zaXRpb24uXG4gICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRSb3dPZmZzZXQgPSBjb29yZFkgKiAoaW1hZ2VXaWR0aCAqIG51bUNoYW5uZWxzKTtcbiAgICAgICAgICAgICAgY29uc3Qgcm90YXRlZENvbE9mZnNldCA9IGNvb3JkWCAqIG51bUNoYW5uZWxzO1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZUlkeCA9XG4gICAgICAgICAgICAgICAgICBiYXRjaE9mZnNldCArIHJvdGF0ZWRSb3dPZmZzZXQgKyByb3RhdGVkQ29sT2Zmc2V0ICsgY2hhbm5lbDtcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSBpbWFnZVZhbHNbaW1hZ2VJZHhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvdXRJZHggPSBiYXRjaE9mZnNldCArIHJvd09mZnNldCArIGNvbE9mZnNldCArIGNoYW5uZWw7XG4gICAgICAgICAgICBvdXRwdXRbb3V0SWR4XSA9IG91dHB1dFZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhSWQgPSBjcHVCYWNrZW5kLndyaXRlKG91dHB1dCwgaW1hZ2Uuc2hhcGUsIGltYWdlLmR0eXBlKTtcbiAgICByZXR1cm4ge2RhdGFJZCwgc2hhcGU6IGltYWdlLnNoYXBlLCBkdHlwZTogaW1hZ2UuZHR5cGV9O1xuICB9XG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Round } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const round = unaryKernelFunc(Round, (xi) => {\n // The algorithm is based on banker's rounding.\n const base = Math.floor(xi);\n if (xi - base < 0.5) {\n return Math.floor(xi);\n }\n else if (xi - base > 0.5) {\n return Math.ceil(xi);\n }\n else {\n if (base % 2.0 === 0.0) {\n return base;\n }\n else {\n return base + 1.0;\n }\n }\n});\nexport const roundConfig = {\n kernelName: Round,\n backendName: 'cpu',\n kernelFunc: round,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1JvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxLQUFLLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtJQUNqRCwrQ0FBK0M7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN2QjtTQUFNLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3RCO1NBQU07UUFDTCxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUNuQjtLQUNGO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQWlCO0lBQ3ZDLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxLQUFLO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgUm91bmR9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCByb3VuZCA9IHVuYXJ5S2VybmVsRnVuYyhSb3VuZCwgKHhpKSA9PiB7XG4gIC8vIFRoZSBhbGdvcml0aG0gaXMgYmFzZWQgb24gYmFua2VyJ3Mgcm91bmRpbmcuXG4gIGNvbnN0IGJhc2UgPSBNYXRoLmZsb29yKHhpKTtcbiAgaWYgKHhpIC0gYmFzZSA8IDAuNSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHhpKTtcbiAgfSBlbHNlIGlmICh4aSAtIGJhc2UgPiAwLjUpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHhpKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYmFzZSAlIDIuMCA9PT0gMC4wKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2UgKyAxLjA7XG4gICAgfVxuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IHJvdW5kQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFJvdW5kLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHJvdW5kLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, ScatterNd } from '@tensorflow/tfjs-core';\nimport { scatterImpl } from './Scatter_impl';\nexport function scatterNd(args) {\n const { inputs, backend, attrs } = args;\n const { indices, updates } = inputs;\n const { shape } = attrs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(updates, indices, shape);\n const sumDupeIndices = true;\n const indicesBuf = backend.bufferSync(indices);\n const updatesBuf = backend.bufferSync(updates);\n const outBuf = scatterImpl(indicesBuf, updatesBuf, shape, outputSize, sliceSize, numUpdates, sliceRank, strides, 0 /* defaultValue */, sumDupeIndices);\n return backend.makeTensorInfo(shape, outBuf.dtype, outBuf.values);\n}\nexport const scatterNdConfig = {\n kernelName: ScatterNd,\n backendName: 'cpu',\n kernelFunc: scatterNd\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NhdHRlck5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TY2F0dGVyTmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBa0MsU0FBUyxFQUE4QyxNQUFNLHVCQUF1QixDQUFDO0FBRzNJLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBSXpCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFdEIsTUFBTSxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FDekQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztJQUU1QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFnQixPQUFPLENBQUMsQ0FBQztJQUM5RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUEwQixPQUFPLENBQUMsQ0FBQztJQUV4RSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQ3RCLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUNoRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUU5RCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWlCO0lBQzNDLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxTQUFrQztDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBTY2F0dGVyTmQsIFNjYXR0ZXJOZEF0dHJzLCBTY2F0dGVyTmRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7c2NhdHRlckltcGx9IGZyb20gJy4vU2NhdHRlcl9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNjYXR0ZXJOZChhcmdzOiB7XG4gIGlucHV0czogU2NhdHRlck5kSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IFNjYXR0ZXJOZEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtpbmRpY2VzLCB1cGRhdGVzfSA9IGlucHV0cztcbiAgY29uc3Qge3NoYXBlfSA9IGF0dHJzO1xuXG4gIGNvbnN0IHtzbGljZVJhbmssIG51bVVwZGF0ZXMsIHNsaWNlU2l6ZSwgc3RyaWRlcywgb3V0cHV0U2l6ZX0gPVxuICAgICAgYmFja2VuZF91dGlsLmNhbGN1bGF0ZVNoYXBlcyh1cGRhdGVzLCBpbmRpY2VzLCBzaGFwZSk7XG4gIGNvbnN0IHN1bUR1cGVJbmRpY2VzID0gdHJ1ZTtcblxuICBjb25zdCBpbmRpY2VzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdpbnQzMic+KGluZGljZXMpO1xuICBjb25zdCB1cGRhdGVzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdpbnQzMid8J2Zsb2F0MzInPih1cGRhdGVzKTtcblxuICBjb25zdCBvdXRCdWYgPSBzY2F0dGVySW1wbChcbiAgICAgIGluZGljZXNCdWYsIHVwZGF0ZXNCdWYsIHNoYXBlLCBvdXRwdXRTaXplLCBzbGljZVNpemUsIG51bVVwZGF0ZXMsXG4gICAgICBzbGljZVJhbmssIHN0cmlkZXMsIDAgLyogZGVmYXVsdFZhbHVlICovLCBzdW1EdXBlSW5kaWNlcyk7XG5cbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8oc2hhcGUsIG91dEJ1Zi5kdHlwZSwgb3V0QnVmLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBzY2F0dGVyTmRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU2NhdHRlck5kLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNjYXR0ZXJOZCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmNcbn07XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { util } from '@tensorflow/tfjs-core';\nfunction lowerBound(array, value) {\n let left = 0;\n let right = array.length;\n let mid = 0;\n while (left < right) {\n mid = Math.floor((left + right) / 2);\n if (array[mid] < value) {\n left = mid + 1;\n }\n else {\n right = mid;\n }\n }\n return right;\n}\nfunction upperBound(array, value) {\n let left = 0;\n let right = array.length;\n let mid = 0;\n while (left < right) {\n mid = Math.floor((left + right) / 2);\n if (array[mid] <= value) {\n left = mid + 1;\n }\n else {\n right = mid;\n }\n }\n return right;\n}\nexport function searchSortedImpl(sortedInputs, values, batchSize, numInputs, numValues, side) {\n const output = util.getArrayFromDType('int32', batchSize * numValues);\n for (let b = 0; b < batchSize; ++b) {\n const sortedInputsSlice = sortedInputs.slice(b * numInputs, (b + 1) * numInputs);\n const outputOffset = b * numValues;\n for (let i = 0; i < numValues; ++i) {\n output[outputOffset + i] = side === 'left' ?\n lowerBound(sortedInputsSlice, values[i + outputOffset]) :\n upperBound(sortedInputsSlice, values[i + outputOffset]);\n }\n }\n return output;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoU29ydGVkX2ltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NlYXJjaFNvcnRlZF9pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBYSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxTQUFTLFVBQVUsQ0FBQyxLQUFpQixFQUFFLEtBQWE7SUFDbEQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN6QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLElBQUksR0FBRyxLQUFLLEVBQUU7UUFDbkIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFO1lBQ3RCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO2FBQU07WUFDTCxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWlCLEVBQUUsS0FBYTtJQUNsRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ3pCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sSUFBSSxHQUFHLEtBQUssRUFBRTtRQUNuQixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDaEI7YUFBTTtZQUNMLEtBQUssR0FBRyxHQUFHLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixZQUF3QixFQUFFLE1BQWtCLEVBQUUsU0FBaUIsRUFDL0QsU0FBaUIsRUFBRSxTQUFpQixFQUFFLElBQW9CO0lBQzVELE1BQU0sTUFBTSxHQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBZSxDQUFDO0lBQ3pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsTUFBTSxpQkFBaUIsR0FDbkIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNsQyxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQzdEO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge1R5cGVkQXJyYXksIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXk6IFR5cGVkQXJyYXksIHZhbHVlOiBudW1iZXIpIHtcbiAgbGV0IGxlZnQgPSAwO1xuICBsZXQgcmlnaHQgPSBhcnJheS5sZW5ndGg7XG4gIGxldCBtaWQgPSAwO1xuICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7XG4gICAgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuICAgIGlmIChhcnJheVttaWRdIDwgdmFsdWUpIHtcbiAgICAgIGxlZnQgPSBtaWQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IG1pZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJpZ2h0O1xufVxuXG5mdW5jdGlvbiB1cHBlckJvdW5kKGFycmF5OiBUeXBlZEFycmF5LCB2YWx1ZTogbnVtYmVyKSB7XG4gIGxldCBsZWZ0ID0gMDtcbiAgbGV0IHJpZ2h0ID0gYXJyYXkubGVuZ3RoO1xuICBsZXQgbWlkID0gMDtcbiAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xuICAgIG1pZCA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcbiAgICBpZiAoYXJyYXlbbWlkXSA8PSB2YWx1ZSkge1xuICAgICAgbGVmdCA9IG1pZCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gbWlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTb3J0ZWRJbXBsKFxuICAgIHNvcnRlZElucHV0czogVHlwZWRBcnJheSwgdmFsdWVzOiBUeXBlZEFycmF5LCBiYXRjaFNpemU6IG51bWJlcixcbiAgICBudW1JbnB1dHM6IG51bWJlciwgbnVtVmFsdWVzOiBudW1iZXIsIHNpZGU6ICdsZWZ0J3wncmlnaHQnKTogVHlwZWRBcnJheSB7XG4gIGNvbnN0IG91dHB1dCA9XG4gICAgICB1dGlsLmdldEFycmF5RnJvbURUeXBlKCdpbnQzMicsIGJhdGNoU2l6ZSAqIG51bVZhbHVlcykgYXMgVHlwZWRBcnJheTtcbiAgZm9yIChsZXQgYiA9IDA7IGIgPCBiYXRjaFNpemU7ICsrYikge1xuICAgIGNvbnN0IHNvcnRlZElucHV0c1NsaWNlID1cbiAgICAgICAgc29ydGVkSW5wdXRzLnNsaWNlKGIgKiBudW1JbnB1dHMsIChiICsgMSkgKiBudW1JbnB1dHMpO1xuICAgIGNvbnN0IG91dHB1dE9mZnNldCA9IGIgKiBudW1WYWx1ZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7ICsraSkge1xuICAgICAgb3V0cHV0W291dHB1dE9mZnNldCArIGldID0gc2lkZSA9PT0gJ2xlZnQnID9cbiAgICAgICAgICBsb3dlckJvdW5kKHNvcnRlZElucHV0c1NsaWNlLCB2YWx1ZXNbaSArIG91dHB1dE9mZnNldF0pIDpcbiAgICAgICAgICB1cHBlckJvdW5kKHNvcnRlZElucHV0c1NsaWNlLCB2YWx1ZXNbaSArIG91dHB1dE9mZnNldF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuIl19","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SearchSorted } from '@tensorflow/tfjs-core';\nimport { searchSortedImpl } from './SearchSorted_impl';\nexport function searchSorted(args) {\n const { inputs, backend, attrs } = args;\n const { sortedSequence, values } = inputs;\n const { side } = attrs;\n const $sortedSequence = backend.data.get(sortedSequence.dataId).values;\n const $values = backend.data.get(values.dataId).values;\n const output = searchSortedImpl($sortedSequence, $values, sortedSequence.shape[0], sortedSequence.shape[1], values.shape[1], side);\n return backend.makeTensorInfo(values.shape, 'int32', output);\n}\nexport const searchSortedConfig = {\n kernelName: SearchSorted,\n backendName: 'cpu',\n kernelFunc: searchSorted,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoU29ydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TZWFyY2hTb3J0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixZQUFZLEVBQWdFLE1BQU0sdUJBQXVCLENBQUM7QUFJNUksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUN4QyxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLE1BQU0sZUFBZSxHQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUVyRSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FDM0IsZUFBZSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNqRCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBaUI7SUFDOUMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFlBQXFDO0NBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTZWFyY2hTb3J0ZWQsIFNlYXJjaFNvcnRlZEF0dHJzLCBTZWFyY2hTb3J0ZWRJbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtzZWFyY2hTb3J0ZWRJbXBsfSBmcm9tICcuL1NlYXJjaFNvcnRlZF9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFNvcnRlZChhcmdzOiB7XG4gIGlucHV0czogU2VhcmNoU29ydGVkSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IFNlYXJjaFNvcnRlZEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzb3J0ZWRTZXF1ZW5jZSwgdmFsdWVzfSA9IGlucHV0cztcbiAgY29uc3Qge3NpZGV9ID0gYXR0cnM7XG5cbiAgY29uc3QgJHNvcnRlZFNlcXVlbmNlID1cbiAgICAgIGJhY2tlbmQuZGF0YS5nZXQoc29ydGVkU2VxdWVuY2UuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgJHZhbHVlcyA9IGJhY2tlbmQuZGF0YS5nZXQodmFsdWVzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gc2VhcmNoU29ydGVkSW1wbChcbiAgICAgICRzb3J0ZWRTZXF1ZW5jZSwgJHZhbHVlcywgc29ydGVkU2VxdWVuY2Uuc2hhcGVbMF0sXG4gICAgICBzb3J0ZWRTZXF1ZW5jZS5zaGFwZVsxXSwgdmFsdWVzLnNoYXBlWzFdLCBzaWRlKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8odmFsdWVzLnNoYXBlLCAnaW50MzInLCBvdXRwdXQpO1xufVxuXG5leHBvcnQgY29uc3Qgc2VhcmNoU29ydGVkQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNlYXJjaFNvcnRlZCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzZWFyY2hTb3J0ZWQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Select, upcastType, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport function select(args) {\n const { inputs, backend } = args;\n const { condition, t, e } = inputs;\n assertNotComplex([condition, t, e], 'select');\n const conditionRank = condition.shape.length;\n const values = backend.data.get(condition.dataId).values;\n const tValues = backend.data.get(t.dataId).values;\n const eValues = backend.data.get(e.dataId).values;\n const resultDtype = upcastType(t.dtype, e.dtype);\n const newValues = util.makeZerosTypedArray(util.sizeFromShape(t.shape), resultDtype);\n let index = 0;\n const offset = conditionRank === 0 || conditionRank > 1 || t.shape.length === 1 ?\n 1 :\n util.sizeFromShape(t.shape.slice(1));\n for (let i = 0; i < values.length; i++) {\n for (let j = 0; j < offset; j++) {\n if (values[i] === 1) {\n newValues[index++] = tValues[i];\n }\n else {\n newValues[index++] = eValues[i];\n }\n }\n }\n return backend.makeTensorInfo(t.shape, resultDtype, newValues);\n}\nexport const selectConfig = {\n kernelName: Select,\n backendName: 'cpu',\n kernelFunc: select\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixNQUFNLEVBQXdDLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUcvSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFN0MsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFxRDtJQUUxRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFakMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRTdDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFdkUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxNQUFNLEdBQ1IsYUFBYSxLQUFLLENBQUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNuQixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7S0FDRjtJQUVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFNlbGVjdCwgU2VsZWN0SW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5LCB1cGNhc3RUeXBlLCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChhcmdzOiB7aW5wdXRzOiBTZWxlY3RJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2NvbmRpdGlvbiwgdCwgZX0gPSBpbnB1dHM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleChbY29uZGl0aW9uLCB0LCBlXSwgJ3NlbGVjdCcpO1xuICBjb25zdCBjb25kaXRpb25SYW5rID0gY29uZGl0aW9uLnNoYXBlLmxlbmd0aDtcblxuICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGNvbmRpdGlvbi5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB0VmFsdWVzID0gYmFja2VuZC5kYXRhLmdldCh0LmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0IGVWYWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KGUuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgcmVzdWx0RHR5cGUgPSB1cGNhc3RUeXBlKHQuZHR5cGUsIGUuZHR5cGUpO1xuICBjb25zdCBuZXdWYWx1ZXMgPVxuICAgICAgdXRpbC5tYWtlWmVyb3NUeXBlZEFycmF5KHV0aWwuc2l6ZUZyb21TaGFwZSh0LnNoYXBlKSwgcmVzdWx0RHR5cGUpO1xuXG4gIGxldCBpbmRleCA9IDA7XG4gIGNvbnN0IG9mZnNldCA9XG4gICAgICBjb25kaXRpb25SYW5rID09PSAwIHx8IGNvbmRpdGlvblJhbmsgPiAxIHx8IHQuc2hhcGUubGVuZ3RoID09PSAxID9cbiAgICAgIDEgOlxuICAgICAgdXRpbC5zaXplRnJvbVNoYXBlKHQuc2hhcGUuc2xpY2UoMSkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBvZmZzZXQ7IGorKykge1xuICAgICAgaWYgKHZhbHVlc1tpXSA9PT0gMSkge1xuICAgICAgICBuZXdWYWx1ZXNbaW5kZXgrK10gPSB0VmFsdWVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWVzW2luZGV4KytdID0gZVZhbHVlc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyh0LnNoYXBlLCByZXN1bHREdHlwZSwgbmV3VmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlbGVjdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTZWxlY3QsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc2VsZWN0IGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, Selu } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nconst scaleAlpha = backend_util.SELU_SCALEALPHA;\nconst scale = backend_util.SELU_SCALE;\nexport const selu = unaryKernelFunc(Selu, (xi) => {\n if (xi >= 0) {\n return scale * xi;\n }\n else {\n return scaleAlpha * (Math.exp(xi) - 1);\n }\n});\nexport const seluConfig = {\n kernelName: Selu,\n backendName: 'cpu',\n kernelFunc: selu,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU2VsdS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFnQixJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQztBQUNoRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ1gsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDO0tBQ25CO1NBQU07UUFDTCxPQUFPLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDeEM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7YmFja2VuZF91dGlsLCBLZXJuZWxDb25maWcsIFNlbHV9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmNvbnN0IHNjYWxlQWxwaGEgPSBiYWNrZW5kX3V0aWwuU0VMVV9TQ0FMRUFMUEhBO1xuY29uc3Qgc2NhbGUgPSBiYWNrZW5kX3V0aWwuU0VMVV9TQ0FMRTtcblxuZXhwb3J0IGNvbnN0IHNlbHUgPSB1bmFyeUtlcm5lbEZ1bmMoU2VsdSwgKHhpKSA9PiB7XG4gIGlmICh4aSA+PSAwKSB7XG4gICAgcmV0dXJuIHNjYWxlICogeGk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNjYWxlQWxwaGEgKiAoTWF0aC5leHAoeGkpIC0gMSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3Qgc2VsdUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTZWx1LFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNlbHUsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sign } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sign = unaryKernelFunc(Sign, (xi) => {\n if (xi < 0) {\n return -1;\n }\n else if (xi > 0) {\n return 1;\n }\n else {\n return 0;\n }\n});\nexport const signConfig = {\n kernelName: Sign,\n backendName: 'cpu',\n kernelFunc: sign,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU2lnbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYO1NBQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7U0FBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBaUI7SUFDdEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTaWdufSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge3VuYXJ5S2VybmVsRnVuY30gZnJvbSAnLi4vdXRpbHMvdW5hcnlfdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgc2lnbiA9IHVuYXJ5S2VybmVsRnVuYyhTaWduLCAoeGkpID0+IHtcbiAgaWYgKHhpIDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIGlmICh4aSA+IDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzaWduQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNpZ24sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc2lnbixcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sin } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sin = unaryKernelFunc(Sin, (xi) => Math.sin(xi));\nexport const sinConfig = {\n kernelName: Sin,\n backendName: 'cpu',\n kernelFunc: sin,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpbn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHNpbiA9IHVuYXJ5S2VybmVsRnVuYyhTaW4sICh4aSkgPT4gTWF0aC5zaW4oeGkpKTtcblxuZXhwb3J0IGNvbnN0IHNpbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTaW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc2luLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Sinh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const sinh = unaryKernelFunc(Sinh, (xi) => Math.sinh(xi));\nexport const sinhConfig = {\n kernelName: Sinh,\n backendName: 'cpu',\n kernelFunc: sinh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU2luaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFNpbmh9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBzaW5oID0gdW5hcnlLZXJuZWxGdW5jKFNpbmgsICh4aSkgPT4gTWF0aC5zaW5oKHhpKSk7XG5cbmV4cG9ydCBjb25zdCBzaW5oQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFNpbmgsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc2luaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Softplus } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\n// mirrors the implementation of tf.nn.softplus: https://goo.gl/vkcvwX\n// epsilon is the difference between 1.0 and the next representable float.\n// For a single precision 32 bit float this should be 2^-23, see:\n// https://math.byu.edu/~schow/work/IEEEFloatingPoint.htm\nconst epsilon = 1.1920928955078125e-7;\nconst threshold = Math.log(epsilon) + 2.0;\nexport const softplus = unaryKernelFunc(Softplus, (xi) => {\n // Value above which exp(x) may overflow, but softplus(x) == x\n // is within machine epsilon.\n const tooLarge = xi > -threshold;\n // Value below which exp(x) may underflow, but softplus(x) == exp(x)\n // is within machine epsilon.\n const tooSmall = xi < threshold;\n const expX = Math.exp(xi);\n let result;\n if (tooSmall) {\n result = expX;\n }\n else if (tooLarge) {\n result = xi;\n }\n else {\n result = Math.log(1.0 + expX);\n }\n return result;\n});\nexport const softplusConfig = {\n kernelName: Softplus,\n backendName: 'cpu',\n kernelFunc: softplus,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHBsdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NvZnRwbHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsc0VBQXNFO0FBRXRFLDBFQUEwRTtBQUMxRSxpRUFBaUU7QUFDakUseURBQXlEO0FBQ3pELE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDO0FBQ3RDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7SUFDdkQsOERBQThEO0lBQzlELDZCQUE2QjtJQUM3QixNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFFakMsb0VBQW9FO0lBQ3BFLDZCQUE2QjtJQUM3QixNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBRWhDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLFFBQVEsRUFBRTtRQUNaLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDZjtTQUFNLElBQUksUUFBUSxFQUFFO1FBQ25CLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDYjtTQUFNO1FBQ0wsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlCO0lBQzFDLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU29mdHBsdXN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbi8vIG1pcnJvcnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRmLm5uLnNvZnRwbHVzOiBodHRwczovL2dvby5nbC92a2N2d1hcblxuLy8gZXBzaWxvbiBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIDEuMCBhbmQgdGhlIG5leHQgcmVwcmVzZW50YWJsZSBmbG9hdC5cbi8vIEZvciBhIHNpbmdsZSBwcmVjaXNpb24gMzIgYml0IGZsb2F0IHRoaXMgc2hvdWxkIGJlIDJeLTIzLCBzZWU6XG4vLyBodHRwczovL21hdGguYnl1LmVkdS9+c2Nob3cvd29yay9JRUVFRmxvYXRpbmdQb2ludC5odG1cbmNvbnN0IGVwc2lsb24gPSAxLjE5MjA5Mjg5NTUwNzgxMjVlLTc7XG5jb25zdCB0aHJlc2hvbGQgPSBNYXRoLmxvZyhlcHNpbG9uKSArIDIuMDtcblxuZXhwb3J0IGNvbnN0IHNvZnRwbHVzID0gdW5hcnlLZXJuZWxGdW5jKFNvZnRwbHVzLCAoeGkpID0+IHtcbiAgLy8gVmFsdWUgYWJvdmUgd2hpY2ggZXhwKHgpIG1heSBvdmVyZmxvdywgYnV0IHNvZnRwbHVzKHgpID09IHhcbiAgLy8gaXMgd2l0aGluIG1hY2hpbmUgZXBzaWxvbi5cbiAgY29uc3QgdG9vTGFyZ2UgPSB4aSA+IC10aHJlc2hvbGQ7XG5cbiAgLy8gVmFsdWUgYmVsb3cgd2hpY2ggZXhwKHgpIG1heSB1bmRlcmZsb3csIGJ1dCBzb2Z0cGx1cyh4KSA9PSBleHAoeClcbiAgLy8gaXMgd2l0aGluIG1hY2hpbmUgZXBzaWxvbi5cbiAgY29uc3QgdG9vU21hbGwgPSB4aSA8IHRocmVzaG9sZDtcblxuICBjb25zdCBleHBYID0gTWF0aC5leHAoeGkpO1xuICBsZXQgcmVzdWx0O1xuXG4gIGlmICh0b29TbWFsbCkge1xuICAgIHJlc3VsdCA9IGV4cFg7XG4gIH0gZWxzZSBpZiAodG9vTGFyZ2UpIHtcbiAgICByZXN1bHQgPSB4aTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBNYXRoLmxvZygxLjAgKyBleHBYKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBjb25zdCBzb2Z0cGx1c0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTb2Z0cGx1cyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzb2Z0cGx1cyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SpaceToBatchND, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { padV2Config } from './PadV2';\nimport { reshape } from './Reshape';\nimport { transpose } from './Transpose';\nexport function spaceToBatchND(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { blockShape, paddings } = attrs;\n assertNotComplex([x], 'spaceToBatchND');\n const prod = util.sizeFromShape(blockShape);\n const completePaddings = [[0, 0]];\n completePaddings.push(...paddings);\n for (let i = 1 + blockShape.length; i < x.shape.length; ++i) {\n completePaddings.push([0, 0]);\n }\n const paddedX = padV2Config.kernelFunc({\n inputs: { x },\n backend,\n attrs: { paddings: completePaddings, constantValue: 0 }\n });\n const reshapedPaddedShape = backend_util.getReshaped(paddedX.shape, blockShape, prod, false);\n const permutedReshapedPaddedPermutation = backend_util.getPermuted(reshapedPaddedShape.length, blockShape.length, false);\n const flattenShape = backend_util.getReshapedPermuted(paddedX.shape, blockShape, prod, false);\n const reshapeInputs = { x: paddedX };\n const reshapeAttrs = { shape: reshapedPaddedShape };\n const paddedXReshaped = reshape({ inputs: reshapeInputs, backend, attrs: reshapeAttrs });\n const transposeInputs = { x: paddedXReshaped };\n const transposeAttrs = { perm: permutedReshapedPaddedPermutation };\n const paddedXT = transpose({ inputs: transposeInputs, backend, attrs: transposeAttrs });\n const resultReshapeInputs = { x: paddedXT };\n const resultReshapeAttrs = { shape: flattenShape };\n const result = reshape({ inputs: resultReshapeInputs, backend, attrs: resultReshapeAttrs });\n backend.disposeIntermediateTensorInfo(paddedX);\n backend.disposeIntermediateTensorInfo(paddedXReshaped);\n backend.disposeIntermediateTensorInfo(paddedXT);\n return result;\n}\nexport const spaceToBatchNDConfig = {\n kernelName: SpaceToBatchND,\n backendName: 'cpu',\n kernelFunc: spaceToBatchND\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhY2VUb0JhdGNoTkQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NwYWNlVG9CYXRjaE5ELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxZQUFZLEVBQXlELGNBQWMsRUFBMEYsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeE4sT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sVUFBVSxjQUFjLENBQUMsSUFJOUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVyQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUU1QyxNQUFNLGdCQUFnQixHQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUksUUFBb0MsQ0FBQyxDQUFDO0lBRWhFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQy9CO0lBRUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUM7UUFDWCxPQUFPO1FBQ1AsS0FBSyxFQUFFLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUM7S0FDdEQsQ0FBZSxDQUFDO0lBRWpCLE1BQU0sbUJBQW1CLEdBQ3JCLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXJFLE1BQU0saUNBQWlDLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FDOUQsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFMUQsTUFBTSxZQUFZLEdBQ2QsWUFBWSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU3RSxNQUFNLGFBQWEsR0FBa0IsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLENBQUM7SUFDbEQsTUFBTSxZQUFZLEdBQWlCLEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFDLENBQUM7SUFDaEUsTUFBTSxlQUFlLEdBQ2pCLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sZUFBZSxHQUFvQixFQUFDLENBQUMsRUFBRSxlQUFlLEVBQUMsQ0FBQztJQUM5RCxNQUFNLGNBQWMsR0FDQyxFQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUNWLFNBQVMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sbUJBQW1CLEdBQWtCLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQ3pELE1BQU0sa0JBQWtCLEdBQWlCLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FDbEIsRUFBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxDQUFDLENBQUM7SUFFdkUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxPQUFPLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFaEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFpQjtJQUNoRCxVQUFVLEVBQUUsY0FBYztJQUMxQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsY0FBdUM7Q0FDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgUmVzaGFwZUF0dHJzLCBSZXNoYXBlSW5wdXRzLCBTcGFjZVRvQmF0Y2hORCwgU3BhY2VUb0JhdGNoTkRBdHRycywgU3BhY2VUb0JhdGNoTkRJbnB1dHMsIFRlbnNvckluZm8sIFRyYW5zcG9zZUF0dHJzLCBUcmFuc3Bvc2VJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuXG5pbXBvcnQge3BhZFYyQ29uZmlnfSBmcm9tICcuL1BhZFYyJztcbmltcG9ydCB7cmVzaGFwZX0gZnJvbSAnLi9SZXNoYXBlJztcbmltcG9ydCB7dHJhbnNwb3NlfSBmcm9tICcuL1RyYW5zcG9zZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFjZVRvQmF0Y2hORChhcmdzOiB7XG4gIGlucHV0czogU3BhY2VUb0JhdGNoTkRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogU3BhY2VUb0JhdGNoTkRBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtibG9ja1NoYXBlLCBwYWRkaW5nc30gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KFt4XSwgJ3NwYWNlVG9CYXRjaE5EJyk7XG5cbiAgY29uc3QgcHJvZCA9IHV0aWwuc2l6ZUZyb21TaGFwZShibG9ja1NoYXBlKTtcblxuICBjb25zdCBjb21wbGV0ZVBhZGRpbmdzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IFtbMCwgMF1dO1xuICBjb21wbGV0ZVBhZGRpbmdzLnB1c2goLi4uKHBhZGRpbmdzIGFzIEFycmF5PFtudW1iZXIsIG51bWJlcl0+KSk7XG5cbiAgZm9yIChsZXQgaSA9IDEgKyBibG9ja1NoYXBlLmxlbmd0aDsgaSA8IHguc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBjb21wbGV0ZVBhZGRpbmdzLnB1c2goWzAsIDBdKTtcbiAgfVxuXG4gIGNvbnN0IHBhZGRlZFggPSBwYWRWMkNvbmZpZy5rZXJuZWxGdW5jKHtcbiAgICBpbnB1dHM6IHt4fSxcbiAgICBiYWNrZW5kLFxuICAgIGF0dHJzOiB7cGFkZGluZ3M6IGNvbXBsZXRlUGFkZGluZ3MsIGNvbnN0YW50VmFsdWU6IDB9XG4gIH0pIGFzIFRlbnNvckluZm87XG5cbiAgY29uc3QgcmVzaGFwZWRQYWRkZWRTaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWQocGFkZGVkWC5zaGFwZSwgYmxvY2tTaGFwZSwgcHJvZCwgZmFsc2UpO1xuXG4gIGNvbnN0IHBlcm11dGVkUmVzaGFwZWRQYWRkZWRQZXJtdXRhdGlvbiA9IGJhY2tlbmRfdXRpbC5nZXRQZXJtdXRlZChcbiAgICAgIHJlc2hhcGVkUGFkZGVkU2hhcGUubGVuZ3RoLCBibG9ja1NoYXBlLmxlbmd0aCwgZmFsc2UpO1xuXG4gIGNvbnN0IGZsYXR0ZW5TaGFwZSA9XG4gICAgICBiYWNrZW5kX3V0aWwuZ2V0UmVzaGFwZWRQZXJtdXRlZChwYWRkZWRYLnNoYXBlLCBibG9ja1NoYXBlLCBwcm9kLCBmYWxzZSk7XG5cbiAgY29uc3QgcmVzaGFwZUlucHV0czogUmVzaGFwZUlucHV0cyA9IHt4OiBwYWRkZWRYfTtcbiAgY29uc3QgcmVzaGFwZUF0dHJzOiBSZXNoYXBlQXR0cnMgPSB7c2hhcGU6IHJlc2hhcGVkUGFkZGVkU2hhcGV9O1xuICBjb25zdCBwYWRkZWRYUmVzaGFwZWQgPVxuICAgICAgcmVzaGFwZSh7aW5wdXRzOiByZXNoYXBlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogcmVzaGFwZUF0dHJzfSk7XG5cbiAgY29uc3QgdHJhbnNwb3NlSW5wdXRzOiBUcmFuc3Bvc2VJbnB1dHMgPSB7eDogcGFkZGVkWFJlc2hhcGVkfTtcbiAgY29uc3QgdHJhbnNwb3NlQXR0cnM6XG4gICAgICBUcmFuc3Bvc2VBdHRycyA9IHtwZXJtOiBwZXJtdXRlZFJlc2hhcGVkUGFkZGVkUGVybXV0YXRpb259O1xuICBjb25zdCBwYWRkZWRYVCA9XG4gICAgICB0cmFuc3Bvc2Uoe2lucHV0czogdHJhbnNwb3NlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogdHJhbnNwb3NlQXR0cnN9KTtcblxuICBjb25zdCByZXN1bHRSZXNoYXBlSW5wdXRzOiBSZXNoYXBlSW5wdXRzID0ge3g6IHBhZGRlZFhUfTtcbiAgY29uc3QgcmVzdWx0UmVzaGFwZUF0dHJzOiBSZXNoYXBlQXR0cnMgPSB7c2hhcGU6IGZsYXR0ZW5TaGFwZX07XG4gIGNvbnN0IHJlc3VsdCA9IHJlc2hhcGUoXG4gICAgICB7aW5wdXRzOiByZXN1bHRSZXNoYXBlSW5wdXRzLCBiYWNrZW5kLCBhdHRyczogcmVzdWx0UmVzaGFwZUF0dHJzfSk7XG5cbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwYWRkZWRYKTtcbiAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhwYWRkZWRYUmVzaGFwZWQpO1xuICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHBhZGRlZFhUKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3Qgc3BhY2VUb0JhdGNoTkRDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhY2VUb0JhdGNoTkQsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc3BhY2VUb0JhdGNoTkQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseFillEmptyRows } from '@tensorflow/tfjs-core';\nimport { sparseFillEmptyRowsImpl } from './SparseFillEmptyRows_impl';\nexport function sparseFillEmptyRows(args) {\n const { inputs, backend } = args;\n const { indices, values, denseShape, defaultValue } = inputs;\n if (denseShape.shape.length !== 1) {\n throw new Error(`Dense shape must be a vector, saw:\n ${denseShape.shape}`);\n }\n if (indices.shape.length !== 2) {\n throw new Error(`Indices must be a matrix, saw:\n ${indices.shape}`);\n }\n if (values.shape.length !== 1) {\n throw new Error(`Values must be a vector, saw:\n ${values.shape}`);\n }\n if (defaultValue.shape.length !== 0) {\n throw new Error(`Default value must be a scalar, saw:\n ${defaultValue.shape}`);\n }\n const $indices = backend.data.get(indices.dataId).values;\n const $values = backend.data.get(values.dataId).values;\n const $denseShape = backend.data.get(denseShape.dataId).values;\n const $defaultValue = backend.data.get(defaultValue.dataId).values[0];\n const [outputIndices, outputIndicesShape, outputValues, emptyRowIndicator, reverseIndexMap] = sparseFillEmptyRowsImpl($indices, indices.shape, indices.dtype, $values, values.dtype, $denseShape, $defaultValue);\n return [\n backend.makeTensorInfo(outputIndicesShape, indices.dtype, outputIndices),\n backend.makeTensorInfo([outputIndicesShape[0]], values.dtype, outputValues),\n backend.makeTensorInfo([emptyRowIndicator.length], 'bool', new Uint8Array(emptyRowIndicator.map((value) => Number(value)))),\n backend.makeTensorInfo([reverseIndexMap.length], indices.dtype, new Int32Array(reverseIndexMap)),\n ];\n}\nexport const sparseFillEmptyRowsConfig = {\n kernelName: SparseFillEmptyRows,\n backendName: 'cpu',\n kernelFunc: sparseFillEmptyRows,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlRmlsbEVtcHR5Um93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3BhcnNlRmlsbEVtcHR5Um93cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLG1CQUFtQixFQUFvRCxNQUFNLHVCQUF1QixDQUFDO0FBSXZJLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUduQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0QsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQztVQUNWLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzNCO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQztVQUNWLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQztVQUNWLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQztVQUNWLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdCO0lBRUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDN0UsTUFBTSxhQUFhLEdBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQVcsQ0FBQztJQUU5RCxNQUFNLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFDL0MsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEdBQ3RDLHVCQUF1QixDQUNuQixRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUM3RCxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDcEMsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7UUFDeEUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxjQUFjLENBQ2xCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUNsQyxJQUFJLFVBQVUsQ0FDVixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFDdkMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBaUI7SUFDckQsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsbUJBQTRDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGFyc2VGaWxsRW1wdHlSb3dzLCBTcGFyc2VGaWxsRW1wdHlSb3dzSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmltcG9ydCB7c3BhcnNlRmlsbEVtcHR5Um93c0ltcGx9IGZyb20gJy4vU3BhcnNlRmlsbEVtcHR5Um93c19pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZUZpbGxFbXB0eVJvd3MoYXJnczoge1xuICBpbnB1dHM6IFNwYXJzZUZpbGxFbXB0eVJvd3NJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVXG59KTogW1RlbnNvckluZm8sIFRlbnNvckluZm8sIFRlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW5kaWNlcywgdmFsdWVzLCBkZW5zZVNoYXBlLCBkZWZhdWx0VmFsdWV9ID0gaW5wdXRzO1xuICBpZiAoZGVuc2VTaGFwZS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlbnNlIHNoYXBlIG11c3QgYmUgYSB2ZWN0b3IsIHNhdzpcbiAgICAgICAgJHtkZW5zZVNoYXBlLnNoYXBlfWApO1xuICB9XG4gIGlmIChpbmRpY2VzLnNoYXBlLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5kaWNlcyBtdXN0IGJlIGEgbWF0cml4LCBzYXc6XG4gICAgICAgICR7aW5kaWNlcy5zaGFwZX1gKTtcbiAgfVxuICBpZiAodmFsdWVzLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWVzIG11c3QgYmUgYSB2ZWN0b3IsIHNhdzpcbiAgICAgICAgJHt2YWx1ZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKGRlZmF1bHRWYWx1ZS5zaGFwZS5sZW5ndGggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlZmF1bHQgdmFsdWUgbXVzdCBiZSBhIHNjYWxhciwgc2F3OlxuICAgICAgICAke2RlZmF1bHRWYWx1ZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGNvbnN0ICRpbmRpY2VzID0gYmFja2VuZC5kYXRhLmdldChpbmRpY2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICR2YWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHZhbHVlcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVuc2VTaGFwZSA9IGJhY2tlbmQuZGF0YS5nZXQoZGVuc2VTaGFwZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCAkZGVmYXVsdFZhbHVlID1cbiAgICAgIGJhY2tlbmQuZGF0YS5nZXQoZGVmYXVsdFZhbHVlLmRhdGFJZCkudmFsdWVzWzBdIGFzIG51bWJlcjtcblxuICBjb25zdCBbb3V0cHV0SW5kaWNlcywgb3V0cHV0SW5kaWNlc1NoYXBlLCBvdXRwdXRWYWx1ZXMsXG4gICAgICAgICBlbXB0eVJvd0luZGljYXRvciwgcmV2ZXJzZUluZGV4TWFwXSA9XG4gICAgICBzcGFyc2VGaWxsRW1wdHlSb3dzSW1wbChcbiAgICAgICAgICAkaW5kaWNlcywgaW5kaWNlcy5zaGFwZSwgaW5kaWNlcy5kdHlwZSwgJHZhbHVlcywgdmFsdWVzLmR0eXBlLFxuICAgICAgICAgICRkZW5zZVNoYXBlLCAkZGVmYXVsdFZhbHVlKTtcbiAgcmV0dXJuIFtcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dHB1dEluZGljZXNTaGFwZSwgaW5kaWNlcy5kdHlwZSwgb3V0cHV0SW5kaWNlcyksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW291dHB1dEluZGljZXNTaGFwZVswXV0sIHZhbHVlcy5kdHlwZSwgb3V0cHV0VmFsdWVzKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFxuICAgICAgICBbZW1wdHlSb3dJbmRpY2F0b3IubGVuZ3RoXSwgJ2Jvb2wnLFxuICAgICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgICAgIGVtcHR5Um93SW5kaWNhdG9yLm1hcCgodmFsdWU6IGJvb2xlYW4pID0+IE51bWJlcih2YWx1ZSkpKSksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgW3JldmVyc2VJbmRleE1hcC5sZW5ndGhdLCBpbmRpY2VzLmR0eXBlLFxuICAgICAgICBuZXcgSW50MzJBcnJheShyZXZlcnNlSW5kZXhNYXApKSxcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZUZpbGxFbXB0eVJvd3NDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlRmlsbEVtcHR5Um93cyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzcGFyc2VGaWxsRW1wdHlSb3dzIGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseReshape } from '@tensorflow/tfjs-core';\nimport { sparseReshapeImpl } from './SparseReshape_impl';\nexport function sparseReshape(args) {\n const { inputs, backend } = args;\n const { inputIndices, inputShape, newShape } = inputs;\n if (inputIndices.shape.length !== 2) {\n throw new Error(`Input indices should be a matrix but received shape\n ${inputIndices.shape}`);\n }\n if (inputShape.shape.length !== 1) {\n throw new Error(`Input shape should be a vector but received shape\n ${inputShape.shape}`);\n }\n if (newShape.shape.length !== 1) {\n throw new Error(`Target shape should be a vector but received shape ${newShape.shape}`);\n }\n const $inputShape = Array.from(backend.data.get(inputShape.dataId).values);\n const $inputIndices = backend.data.get(inputIndices.dataId).values;\n const targetShape = Array.from(backend.data.get(newShape.dataId).values);\n const [newIndices, indicesShape, outputShape] = sparseReshapeImpl($inputIndices, inputIndices.shape, inputIndices.dtype, $inputShape, targetShape);\n return [\n backend.makeTensorInfo(indicesShape, inputIndices.dtype, newIndices),\n backend.makeTensorInfo([outputShape.length], newShape.dtype, new Int32Array(outputShape)),\n ];\n}\nexport const sparseReshapeConfig = {\n kernelName: SparseReshape,\n backendName: 'cpu',\n kernelFunc: sparseReshape,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlUmVzaGFwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3BhcnNlUmVzaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsYUFBYSxFQUE4QyxNQUFNLHVCQUF1QixDQUFDO0FBSS9HLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE1BQU0sVUFBVSxhQUFhLENBQ3pCLElBQTREO0lBRTlELE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNwRCxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDO1VBQ1YsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0I7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDO1VBQ1YsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0I7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUNYLHNEQUFzRCxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM3RTtJQUVELE1BQU0sV0FBVyxHQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUMsQ0FBQztJQUN6RSxNQUFNLGFBQWEsR0FDZixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUMvRCxNQUFNLFdBQVcsR0FDYixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFvQixDQUFDLENBQUM7SUFFdkUsTUFBTSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsaUJBQWlCLENBQzdELGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUNsRSxXQUFXLENBQUMsQ0FBQztJQUNqQixPQUFPO1FBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7UUFDcEUsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN2RSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFpQjtJQUMvQyxVQUFVLEVBQUUsYUFBYTtJQUN6QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsYUFBYTtDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgU3BhcnNlUmVzaGFwZSwgU3BhcnNlUmVzaGFwZUlucHV0cywgVGVuc29ySW5mbywgVHlwZWRBcnJheX0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5pbXBvcnQge3NwYXJzZVJlc2hhcGVJbXBsfSBmcm9tICcuL1NwYXJzZVJlc2hhcGVfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGFyc2VSZXNoYXBlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFNwYXJzZVJlc2hhcGVJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgW1RlbnNvckluZm8sIFRlbnNvckluZm9dIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW5wdXRJbmRpY2VzLCBpbnB1dFNoYXBlLCBuZXdTaGFwZX0gPSBpbnB1dHM7XG4gIGlmIChpbnB1dEluZGljZXMuc2hhcGUubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBpbmRpY2VzIHNob3VsZCBiZSBhIG1hdHJpeCBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgJHtpbnB1dEluZGljZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKGlucHV0U2hhcGUuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBzaGFwZSBzaG91bGQgYmUgYSB2ZWN0b3IgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICR7aW5wdXRTaGFwZS5zaGFwZX1gKTtcbiAgfVxuXG4gIGlmIChuZXdTaGFwZS5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUYXJnZXQgc2hhcGUgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZSAke25ld1NoYXBlLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgJGlucHV0U2hhcGUgPVxuICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLmRhdGEuZ2V0KGlucHV0U2hhcGUuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheSk7XG4gIGNvbnN0ICRpbnB1dEluZGljZXMgPVxuICAgICAgYmFja2VuZC5kYXRhLmdldChpbnB1dEluZGljZXMuZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgdGFyZ2V0U2hhcGUgPVxuICAgICAgQXJyYXkuZnJvbShiYWNrZW5kLmRhdGEuZ2V0KG5ld1NoYXBlLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXkpO1xuXG4gIGNvbnN0IFtuZXdJbmRpY2VzLCBpbmRpY2VzU2hhcGUsIG91dHB1dFNoYXBlXSA9IHNwYXJzZVJlc2hhcGVJbXBsKFxuICAgICAgJGlucHV0SW5kaWNlcywgaW5wdXRJbmRpY2VzLnNoYXBlLCBpbnB1dEluZGljZXMuZHR5cGUsICRpbnB1dFNoYXBlLFxuICAgICAgdGFyZ2V0U2hhcGUpO1xuICByZXR1cm4gW1xuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oaW5kaWNlc1NoYXBlLCBpbnB1dEluZGljZXMuZHR5cGUsIG5ld0luZGljZXMpLFxuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIFtvdXRwdXRTaGFwZS5sZW5ndGhdLCBuZXdTaGFwZS5kdHlwZSwgbmV3IEludDMyQXJyYXkob3V0cHV0U2hhcGUpKSxcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZVJlc2hhcGVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlUmVzaGFwZSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzcGFyc2VSZXNoYXBlLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentMean } from '@tensorflow/tfjs-core';\nimport { sparseSegmentReductionImpl } from './SparseSegmentReduction_impl';\nexport function sparseSegmentMean(args) {\n const { inputs, backend } = args;\n const { data, indices, segmentIds } = inputs;\n if (data.shape.length < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if (indices.shape.length !== 1) {\n throw new Error(`Indices should be a vector but received shape\n ${indices.shape}`);\n }\n if (segmentIds.shape.length !== 1) {\n throw new Error(`Segment ids should be a vector but received shape\n ${segmentIds.shape}`);\n }\n if (indices.shape[0] !== segmentIds.shape[0]) {\n throw new Error(`segmentIds and indices should have same size.`);\n }\n const $data = backend.data.get(data.dataId).values;\n const $indices = backend.data.get(indices.dataId).values;\n const $segmentIds = backend.data.get(segmentIds.dataId).values;\n const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds, true);\n return backend.makeTensorInfo(outputDataShape, data.dtype, outputData);\n}\nexport const sparseSegmentMeanConfig = {\n kernelName: SparseSegmentMean,\n backendName: 'cpu',\n kernelFunc: sparseSegmentMean,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudE1lYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1NwYXJzZVNlZ21lbnRNZWFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBZSxpQkFBaUIsRUFBa0QsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUV6RSxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLElBQWdFO0lBRWxFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLE1BQU0sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUNYLDJEQUEyRCxDQUFDLENBQUM7S0FDbEU7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDO1lBQ1IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDO1lBQ1IsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDN0I7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7S0FDbEU7SUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUN2RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUU3RSxNQUFNLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxHQUFHLDBCQUEwQixDQUM1RCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBaUI7SUFDbkQsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsaUJBQWlCO0NBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcGFyc2VTZWdtZW50TWVhbiwgU3BhcnNlU2VnbWVudE1lYW5JbnB1dHMsIFRlbnNvckluZm8sIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbH0gZnJvbSAnLi9TcGFyc2VTZWdtZW50UmVkdWN0aW9uX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhcnNlU2VnbWVudE1lYW4oXG4gICAgYXJnczoge2lucHV0czogU3BhcnNlU2VnbWVudE1lYW5JbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmR9ID0gYXJncztcbiAgY29uc3Qge2RhdGEsIGluZGljZXMsIHNlZ21lbnRJZHN9ID0gaW5wdXRzO1xuICBpZiAoZGF0YS5zaGFwZS5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGF0YSBzaG91bGQgYmUgYXQgbGVhc3QgMSBkaW1lbnNpb25hbCBidXQgcmVjZWl2ZWQgc2NhbGFyYCk7XG4gIH1cbiAgaWYgKGluZGljZXMuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbmRpY2VzIHNob3VsZCBiZSBhIHZlY3RvciBidXQgcmVjZWl2ZWQgc2hhcGVcbiAgICAgICAgICAke2luZGljZXMuc2hhcGV9YCk7XG4gIH1cbiAgaWYgKHNlZ21lbnRJZHMuc2hhcGUubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWdtZW50IGlkcyBzaG91bGQgYmUgYSB2ZWN0b3IgYnV0IHJlY2VpdmVkIHNoYXBlXG4gICAgICAgICAgJHtzZWdtZW50SWRzLnNoYXBlfWApO1xuICB9XG4gIGlmIChpbmRpY2VzLnNoYXBlWzBdICE9PSBzZWdtZW50SWRzLnNoYXBlWzBdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZWdtZW50SWRzIGFuZCBpbmRpY2VzIHNob3VsZCBoYXZlIHNhbWUgc2l6ZS5gKTtcbiAgfVxuXG4gIGNvbnN0ICRkYXRhID0gYmFja2VuZC5kYXRhLmdldChkYXRhLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRpbmRpY2VzID0gYmFja2VuZC5kYXRhLmdldChpbmRpY2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID0gYmFja2VuZC5kYXRhLmdldChzZWdtZW50SWRzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgW291dHB1dERhdGEsIG91dHB1dERhdGFTaGFwZV0gPSBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbChcbiAgICAgICRkYXRhLCBkYXRhLnNoYXBlLCBkYXRhLmR0eXBlLCAkaW5kaWNlcywgJHNlZ21lbnRJZHMsIHRydWUpO1xuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRwdXREYXRhU2hhcGUsIGRhdGEuZHR5cGUsIG91dHB1dERhdGEpO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudE1lYW5Db25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3BhcnNlU2VnbWVudE1lYW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc3BhcnNlU2VnbWVudE1lYW4sXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { SparseSegmentSum } from '@tensorflow/tfjs-core';\nimport { sparseSegmentReductionImpl } from './SparseSegmentReduction_impl';\nexport function sparseSegmentSum(args) {\n const { inputs, backend } = args;\n const { data, indices, segmentIds } = inputs;\n if (data.shape.length < 1) {\n throw new Error(`Data should be at least 1 dimensional but received scalar`);\n }\n if (indices.shape.length !== 1) {\n throw new Error(`Indices should be a vector but received shape\n ${indices.shape}`);\n }\n if (segmentIds.shape.length !== 1) {\n throw new Error(`Segment ids should be a vector but received shape\n ${segmentIds.shape}`);\n }\n if (indices.shape[0] !== segmentIds.shape[0]) {\n throw new Error(`segmentIds and indices should have same size.`);\n }\n const $data = backend.data.get(data.dataId).values;\n const $indices = backend.data.get(indices.dataId).values;\n const $segmentIds = backend.data.get(segmentIds.dataId).values;\n const [outputData, outputDataShape] = sparseSegmentReductionImpl($data, data.shape, data.dtype, $indices, $segmentIds);\n return backend.makeTensorInfo(outputDataShape, data.dtype, outputData);\n}\nexport const sparseSegmentSumConfig = {\n kernelName: SparseSegmentSum,\n backendName: 'cpu',\n kernelFunc: sparseSegmentSum,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlU2VnbWVudFN1bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3BhcnNlU2VnbWVudFN1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsZ0JBQWdCLEVBQWlELE1BQU0sdUJBQXVCLENBQUM7QUFJckgsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFekUsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixJQUErRDtJQUVqRSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQztJQUMvQixNQUFNLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDWCwyREFBMkQsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQztXQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQztXQUNULFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzVCO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0tBQ2xFO0lBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFFN0UsTUFBTSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsR0FBRywwQkFBMEIsQ0FDNUQsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBaUI7SUFDbEQsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsZ0JBQWdCO0NBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBTcGFyc2VTZWdtZW50U3VtLCBTcGFyc2VTZWdtZW50U3VtSW5wdXRzLCBUZW5zb3JJbmZvLCBUeXBlZEFycmF5fSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmltcG9ydCB7c3BhcnNlU2VnbWVudFJlZHVjdGlvbkltcGx9IGZyb20gJy4vU3BhcnNlU2VnbWVudFJlZHVjdGlvbl9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVNlZ21lbnRTdW0oXG4gICAgYXJnczoge2lucHV0czogU3BhcnNlU2VnbWVudFN1bUlucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTpcbiAgICBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7ZGF0YSwgaW5kaWNlcywgc2VnbWVudElkc30gPSBpbnB1dHM7XG4gIGlmIChkYXRhLnNoYXBlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEYXRhIHNob3VsZCBiZSBhdCBsZWFzdCAxIGRpbWVuc2lvbmFsIGJ1dCByZWNlaXZlZCBzY2FsYXJgKTtcbiAgfVxuICBpZiAoaW5kaWNlcy5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGljZXMgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZVxuICAgICAgICAgJHtpbmRpY2VzLnNoYXBlfWApO1xuICB9XG4gIGlmIChzZWdtZW50SWRzLnNoYXBlLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VnbWVudCBpZHMgc2hvdWxkIGJlIGEgdmVjdG9yIGJ1dCByZWNlaXZlZCBzaGFwZVxuICAgICAgICAgJHtzZWdtZW50SWRzLnNoYXBlfWApO1xuICB9XG4gIGlmIChpbmRpY2VzLnNoYXBlWzBdICE9PSBzZWdtZW50SWRzLnNoYXBlWzBdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZWdtZW50SWRzIGFuZCBpbmRpY2VzIHNob3VsZCBoYXZlIHNhbWUgc2l6ZS5gKTtcbiAgfVxuXG4gIGNvbnN0ICRkYXRhID0gYmFja2VuZC5kYXRhLmdldChkYXRhLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRpbmRpY2VzID0gYmFja2VuZC5kYXRhLmdldChpbmRpY2VzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG4gIGNvbnN0ICRzZWdtZW50SWRzID0gYmFja2VuZC5kYXRhLmdldChzZWdtZW50SWRzLmRhdGFJZCkudmFsdWVzIGFzIFR5cGVkQXJyYXk7XG5cbiAgY29uc3QgW291dHB1dERhdGEsIG91dHB1dERhdGFTaGFwZV0gPSBzcGFyc2VTZWdtZW50UmVkdWN0aW9uSW1wbChcbiAgICAgICRkYXRhLCBkYXRhLnNoYXBlLCBkYXRhLmR0eXBlLCAkaW5kaWNlcywgJHNlZ21lbnRJZHMpO1xuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRwdXREYXRhU2hhcGUsIGRhdGEuZHR5cGUsIG91dHB1dERhdGEpO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlU2VnbWVudFN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VTZWdtZW50U3VtLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNwYXJzZVNlZ21lbnRTdW0sXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, SparseToDense, util } from '@tensorflow/tfjs-core';\nimport { scatterImpl } from './Scatter_impl';\nexport function sparseToDense(args) {\n const { inputs, backend, attrs } = args;\n const { sparseIndices, sparseValues, defaultValue } = inputs;\n const { outputShape } = attrs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(sparseValues, sparseIndices, outputShape);\n const sumDupeIndices = false;\n const indicesBuf = backend.bufferSync(sparseIndices);\n let outBuf;\n switch (sparseValues.dtype) {\n case 'bool': {\n const updatesBuf = backend.bufferSync(sparseValues);\n const $defaultValue = Boolean(backend.data.get(defaultValue.dataId).values[0]);\n outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices);\n break;\n }\n case 'float32': {\n const updatesBuf = backend.bufferSync(sparseValues);\n const $defaultValue = backend.data.get(defaultValue.dataId).values[0];\n outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices);\n break;\n }\n case 'int32': {\n const updatesBuf = backend.bufferSync(sparseValues);\n const $defaultValue = backend.data.get(defaultValue.dataId).values[0];\n outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices);\n break;\n }\n case 'string': {\n const updatesBuf = backend.bufferSync(sparseValues);\n const $defaultValue = util.decodeString(backend.data.get(defaultValue.dataId).values[0]);\n outBuf = scatterImpl(indicesBuf, updatesBuf, outputShape, outputSize, sliceSize, numUpdates, sliceRank, strides, $defaultValue, sumDupeIndices);\n break;\n }\n default:\n throw new Error(`Unsupported type ${sparseValues.dtype}`);\n }\n return backend.makeTensorInfo(outputShape, outBuf.dtype, outBuf.values);\n}\nexport const sparseToDenseConfig = {\n kernelName: SparseToDense,\n backendName: 'cpu',\n kernelFunc: sparseToDense\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BhcnNlVG9EZW5zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3BhcnNlVG9EZW5zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFrQyxhQUFhLEVBQXVELElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRzdKLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLFVBQVUsYUFBYSxDQUFDLElBSTdCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMzRCxNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTVCLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLEdBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRSxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFN0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBZ0IsYUFBYSxDQUFDLENBQUM7SUFFcEUsSUFBSSxNQUFNLENBQUM7SUFDWCxRQUFRLFlBQVksQ0FBQyxLQUFLLEVBQUU7UUFDMUIsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUNYLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWUsWUFBWSxDQUFDLENBQUM7WUFDbEUsTUFBTSxhQUFhLEdBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RCxNQUFNLEdBQUcsV0FBVyxDQUNoQixVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUMxRCxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDbkUsTUFBTTtTQUNQO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNkLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWtCLFlBQVksQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sYUFBYSxHQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFXLENBQUM7WUFDOUQsTUFBTSxHQUFHLFdBQVcsQ0FDaEIsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFDMUQsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLE1BQU07U0FDUDtRQUNELEtBQUssT0FBTyxDQUFDLENBQUM7WUFDWixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFnQixZQUFZLENBQUMsQ0FBQztZQUNuRSxNQUFNLGFBQWEsR0FDZixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBVyxDQUFDO1lBQzlELE1BQU0sR0FBRyxXQUFXLENBQ2hCLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNuRSxNQUFNO1NBQ1A7UUFDRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBaUIsWUFBWSxDQUFDLENBQUM7WUFDcEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQWUsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sR0FBRyxXQUFXLENBQ2hCLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQzFELFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNuRSxNQUFNO1NBQ1A7UUFDRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQy9DLFVBQVUsRUFBRSxhQUFhO0lBQ3pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxhQUFzQztDQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBTcGFyc2VUb0RlbnNlLCBTcGFyc2VUb0RlbnNlQXR0cnMsIFNwYXJzZVRvRGVuc2VJbnB1dHMsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7c2NhdHRlckltcGx9IGZyb20gJy4vU2NhdHRlcl9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXJzZVRvRGVuc2UoYXJnczoge1xuICBpbnB1dHM6IFNwYXJzZVRvRGVuc2VJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogU3BhcnNlVG9EZW5zZUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtzcGFyc2VJbmRpY2VzLCBzcGFyc2VWYWx1ZXMsIGRlZmF1bHRWYWx1ZX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtvdXRwdXRTaGFwZX0gPSBhdHRycztcblxuICBjb25zdCB7c2xpY2VSYW5rLCBudW1VcGRhdGVzLCBzbGljZVNpemUsIHN0cmlkZXMsIG91dHB1dFNpemV9ID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jYWxjdWxhdGVTaGFwZXMoc3BhcnNlVmFsdWVzLCBzcGFyc2VJbmRpY2VzLCBvdXRwdXRTaGFwZSk7XG4gIGNvbnN0IHN1bUR1cGVJbmRpY2VzID0gZmFsc2U7XG5cbiAgY29uc3QgaW5kaWNlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnaW50MzInPihzcGFyc2VJbmRpY2VzKTtcblxuICBsZXQgb3V0QnVmO1xuICBzd2l0Y2ggKHNwYXJzZVZhbHVlcy5kdHlwZSkge1xuICAgIGNhc2UgJ2Jvb2wnOiB7XG4gICAgICBjb25zdCB1cGRhdGVzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdib29sJz4oc3BhcnNlVmFsdWVzKTtcbiAgICAgIGNvbnN0ICRkZWZhdWx0VmFsdWUgPVxuICAgICAgICAgIEJvb2xlYW4oYmFja2VuZC5kYXRhLmdldChkZWZhdWx0VmFsdWUuZGF0YUlkKS52YWx1ZXNbMF0pO1xuICAgICAgb3V0QnVmID0gc2NhdHRlckltcGwoXG4gICAgICAgICAgaW5kaWNlc0J1ZiwgdXBkYXRlc0J1Ziwgb3V0cHV0U2hhcGUsIG91dHB1dFNpemUsIHNsaWNlU2l6ZSxcbiAgICAgICAgICBudW1VcGRhdGVzLCBzbGljZVJhbmssIHN0cmlkZXMsICRkZWZhdWx0VmFsdWUsIHN1bUR1cGVJbmRpY2VzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdmbG9hdDMyJzoge1xuICAgICAgY29uc3QgdXBkYXRlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnZmxvYXQzMic+KHNwYXJzZVZhbHVlcyk7XG4gICAgICBjb25zdCAkZGVmYXVsdFZhbHVlID1cbiAgICAgICAgICBiYWNrZW5kLmRhdGEuZ2V0KGRlZmF1bHRWYWx1ZS5kYXRhSWQpLnZhbHVlc1swXSBhcyBudW1iZXI7XG4gICAgICBvdXRCdWYgPSBzY2F0dGVySW1wbChcbiAgICAgICAgICBpbmRpY2VzQnVmLCB1cGRhdGVzQnVmLCBvdXRwdXRTaGFwZSwgb3V0cHV0U2l6ZSwgc2xpY2VTaXplLFxuICAgICAgICAgIG51bVVwZGF0ZXMsIHNsaWNlUmFuaywgc3RyaWRlcywgJGRlZmF1bHRWYWx1ZSwgc3VtRHVwZUluZGljZXMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ2ludDMyJzoge1xuICAgICAgY29uc3QgdXBkYXRlc0J1ZiA9IGJhY2tlbmQuYnVmZmVyU3luYzxSYW5rLCAnaW50MzInPihzcGFyc2VWYWx1ZXMpO1xuICAgICAgY29uc3QgJGRlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgYmFja2VuZC5kYXRhLmdldChkZWZhdWx0VmFsdWUuZGF0YUlkKS52YWx1ZXNbMF0gYXMgbnVtYmVyO1xuICAgICAgb3V0QnVmID0gc2NhdHRlckltcGwoXG4gICAgICAgICAgaW5kaWNlc0J1ZiwgdXBkYXRlc0J1Ziwgb3V0cHV0U2hhcGUsIG91dHB1dFNpemUsIHNsaWNlU2l6ZSxcbiAgICAgICAgICBudW1VcGRhdGVzLCBzbGljZVJhbmssIHN0cmlkZXMsICRkZWZhdWx0VmFsdWUsIHN1bUR1cGVJbmRpY2VzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdzdHJpbmcnOiB7XG4gICAgICBjb25zdCB1cGRhdGVzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdzdHJpbmcnPihzcGFyc2VWYWx1ZXMpO1xuICAgICAgY29uc3QgJGRlZmF1bHRWYWx1ZSA9IHV0aWwuZGVjb2RlU3RyaW5nKFxuICAgICAgICAgIGJhY2tlbmQuZGF0YS5nZXQoZGVmYXVsdFZhbHVlLmRhdGFJZCkudmFsdWVzWzBdIGFzIFVpbnQ4QXJyYXkpO1xuICAgICAgb3V0QnVmID0gc2NhdHRlckltcGwoXG4gICAgICAgICAgaW5kaWNlc0J1ZiwgdXBkYXRlc0J1Ziwgb3V0cHV0U2hhcGUsIG91dHB1dFNpemUsIHNsaWNlU2l6ZSxcbiAgICAgICAgICBudW1VcGRhdGVzLCBzbGljZVJhbmssIHN0cmlkZXMsICRkZWZhdWx0VmFsdWUsIHN1bUR1cGVJbmRpY2VzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlICR7c3BhcnNlVmFsdWVzLmR0eXBlfWApO1xuICB9XG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dHB1dFNoYXBlLCBvdXRCdWYuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3Qgc3BhcnNlVG9EZW5zZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGFyc2VUb0RlbnNlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHNwYXJzZVRvRGVuc2UgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util } from '@tensorflow/tfjs-core';\nimport { SplitV, util } from '@tensorflow/tfjs-core';\nimport { slice } from './Slice';\nexport function splitV(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { numOrSizeSplits, axis } = attrs;\n const $axis = util.parseAxisParam(axis, x.shape)[0];\n const splitSizes = backend_util.prepareSplitSize(x, numOrSizeSplits, $axis);\n const begin = new Array(x.shape.length).fill(0);\n const size = x.shape.slice();\n return splitSizes.map(s => {\n const sliceSize = [...size];\n sliceSize[$axis] = s;\n const sliceT = slice({ inputs: { x }, backend, attrs: { begin, size: sliceSize } });\n begin[$axis] += s;\n return sliceT;\n });\n}\nexport const splitVConfig = {\n kernelName: SplitV,\n backendName: 'cpu',\n kernelFunc: splitV\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaXRWLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcGxpdFYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQTJCLE1BQU0sRUFBYyxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd6RixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlCLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXlFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ25CLE1BQU0sRUFBQyxlQUFlLEVBQUUsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXRDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUU1RSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN4QixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixNQUFNLE1BQU0sR0FDUixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxNQUErQjtDQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgU3BsaXRWQXR0cnMsIFNwbGl0VklucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTcGxpdFYsIFRlbnNvckluZm8sIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7c2xpY2V9IGZyb20gJy4vU2xpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRWKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFNwbGl0VklucHV0cywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsIGF0dHJzOiBTcGxpdFZBdHRyc30pOlxuICAgIFRlbnNvckluZm9bXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge251bU9yU2l6ZVNwbGl0cywgYXhpc30gPSBhdHRycztcblxuICBjb25zdCAkYXhpcyA9IHV0aWwucGFyc2VBeGlzUGFyYW0oYXhpcywgeC5zaGFwZSlbMF07XG4gIGNvbnN0IHNwbGl0U2l6ZXMgPSBiYWNrZW5kX3V0aWwucHJlcGFyZVNwbGl0U2l6ZSh4LCBudW1PclNpemVTcGxpdHMsICRheGlzKTtcblxuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheSh4LnNoYXBlLmxlbmd0aCkuZmlsbCgwKTtcbiAgY29uc3Qgc2l6ZSA9IHguc2hhcGUuc2xpY2UoKTtcbiAgcmV0dXJuIHNwbGl0U2l6ZXMubWFwKHMgPT4ge1xuICAgIGNvbnN0IHNsaWNlU2l6ZSA9IFsuLi5zaXplXTtcbiAgICBzbGljZVNpemVbJGF4aXNdID0gcztcbiAgICBjb25zdCBzbGljZVQgPVxuICAgICAgICBzbGljZSh7aW5wdXRzOiB7eH0sIGJhY2tlbmQsIGF0dHJzOiB7YmVnaW4sIHNpemU6IHNsaWNlU2l6ZX19KTtcbiAgICBiZWdpblskYXhpc10gKz0gcztcbiAgICByZXR1cm4gc2xpY2VUO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHNwbGl0VkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTcGxpdFYsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc3BsaXRWIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Square } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nexport const squareConfig = {\n kernelName: Square,\n backendName: 'cpu',\n kernelFunc: ({ inputs, backend }) => {\n const { x } = inputs;\n const cpuBackend = backend;\n assertNotComplex(x, 'square');\n const values = cpuBackend.data.get(x.dataId).values;\n const newValues = new Float32Array(values.length);\n for (let i = 0; i < values.length; ++i) {\n const value = values[i];\n newValues[i] = value * value;\n }\n const dataId = cpuBackend.write(newValues, x.shape, x.dtype);\n return { dataId, shape: x.shape, dtype: x.dtype };\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TcXVhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlCO0lBQ3hDLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQXNCLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsT0FBeUIsQ0FBQztRQUM3QyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFOUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQXNCLENBQUM7UUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUM5QjtRQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtTcXVhcmUsIFNxdWFyZUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcbmltcG9ydCB7S2VybmVsQ29uZmlnfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBzcXVhcmVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3F1YXJlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6ICh7aW5wdXRzLCBiYWNrZW5kfSkgPT4ge1xuICAgIGNvbnN0IHt4fSA9IGlucHV0cyBhcyBTcXVhcmVJbnB1dHM7XG4gICAgY29uc3QgY3B1QmFja2VuZCA9IGJhY2tlbmQgYXMgTWF0aEJhY2tlbmRDUFU7XG4gICAgYXNzZXJ0Tm90Q29tcGxleCh4LCAnc3F1YXJlJyk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBjcHVCYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgRmxvYXQzMkFycmF5O1xuICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkodmFsdWVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWUgKiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YUlkID0gY3B1QmFja2VuZC53cml0ZShuZXdWYWx1ZXMsIHguc2hhcGUsIHguZHR5cGUpO1xuICAgIHJldHVybiB7ZGF0YUlkLCBzaGFwZTogeC5zaGFwZSwgZHR5cGU6IHguZHR5cGV9O1xuICB9XG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Step } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const step = unaryKernelFunc(Step, (xi, attrs) => {\n const stepAttrs = attrs;\n if (isNaN(xi)) {\n return NaN;\n }\n else {\n return xi > 0 ? 1 : stepAttrs.alpha;\n }\n});\nexport const stepConfig = {\n kernelName: Step,\n backendName: 'cpu',\n kernelFunc: step,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFFcEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3RELE1BQU0sU0FBUyxHQUFHLEtBQTZCLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDYixPQUFPLEdBQUcsQ0FBQztLQUNaO1NBQU07UUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztLQUNyQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFN0ZXAsIFN0ZXBBdHRyc30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHN0ZXAgPSB1bmFyeUtlcm5lbEZ1bmMoU3RlcCwgKHhpLCBhdHRycykgPT4ge1xuICBjb25zdCBzdGVwQXR0cnMgPSBhdHRycyBhcyB1bmtub3duIGFzIFN0ZXBBdHRycztcbiAgaWYgKGlzTmFOKHhpKSkge1xuICAgIHJldHVybiBOYU47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHhpID4gMCA/IDEgOiBzdGVwQXR0cnMuYWxwaGE7XG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3Qgc3RlcENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdGVwLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHN0ZXAsXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { slice_util, StridedSlice, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nimport { stridedSliceImpl } from './StridedSlice_impl';\nexport function stridedSlice(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask } = attrs;\n assertNotComplex(x, 'stridedSlice');\n const { finalShapeSparse, finalShape, isIdentity, sliceDim0, isSimpleSlice, begin: $begin, end: $end, strides: $strides } = slice_util.sliceInfo(x.shape, begin, end, strides, beginMask, endMask, ellipsisMask, newAxisMask, shrinkAxisMask);\n let result;\n // ref:\n // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/strided_slice_op.cc\n if (isIdentity) {\n // Optimization #1, slice is a no-op plus reshape\n result = reshape({ inputs: { x }, backend, attrs: { shape: finalShape } });\n }\n else if (sliceDim0 || isSimpleSlice) {\n // Optimization #2, slice is memory contiguous (only occurs in dim 0)\n util.assert(x.shape.length >= 1, () => `Input must have rank at least 1, got: ${x.shape.length}`);\n const size = slice_util.computeOutShape($begin, $end, $strides);\n // To tolerate begin[0] > end[0] (a 0-output slice), we min(begin, end).\n const sliced = slice({ inputs: { x }, backend, attrs: { begin: $begin, size } });\n result =\n reshape({ inputs: { x: sliced }, backend, attrs: { shape: finalShape } });\n backend.disposeIntermediateTensorInfo(sliced);\n }\n else {\n const xBuf = backend.bufferSync(x);\n const outBuf = stridedSliceImpl(finalShapeSparse, xBuf, $strides, $begin);\n result = backend.makeTensorInfo(finalShape, outBuf.dtype, outBuf.values);\n }\n return result;\n}\nexport const stridedSliceConfig = {\n kernelName: StridedSlice,\n backendName: 'cpu',\n kernelFunc: stridedSlice\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaWRlZFNsaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdHJpZGVkU2xpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFpQyxVQUFVLEVBQUUsWUFBWSxFQUFxRCxJQUFJLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUd4SixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFJNUI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osV0FBVyxFQUNYLGNBQWMsRUFDZixHQUFHLEtBQUssQ0FBQztJQUVWLGdCQUFnQixDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUVwQyxNQUFNLEVBQ0osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUNULGFBQWEsRUFDYixLQUFLLEVBQUUsTUFBTSxFQUNiLEdBQUcsRUFBRSxJQUFJLEVBQ1QsT0FBTyxFQUFFLFFBQVEsRUFDbEIsR0FDRyxVQUFVLENBQUMsU0FBUyxDQUNoQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUM5RCxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFckMsSUFBSSxNQUFNLENBQUM7SUFFWCxPQUFPO0lBQ1AsbUdBQW1HO0lBQ25HLElBQUksVUFBVSxFQUFFO1FBQ2QsaURBQWlEO1FBQ2pELE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBQyxFQUFDLENBQUMsQ0FBQztLQUN0RTtTQUFNLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRTtRQUNyQyxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FDUCxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQ25CLEdBQUcsRUFBRSxDQUFDLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFckUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLHdFQUF3RTtRQUN4RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0UsTUFBTTtZQUNGLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxNQUFNLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBQyxFQUFDLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0M7U0FBTTtRQUNMLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFFO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFJhbmssIHNsaWNlX3V0aWwsIFN0cmlkZWRTbGljZSwgU3RyaWRlZFNsaWNlQXR0cnMsIFN0cmlkZWRTbGljZUlucHV0cywgVGVuc29ySW5mbywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge3Jlc2hhcGV9IGZyb20gJy4vUmVzaGFwZSc7XG5pbXBvcnQge3NsaWNlfSBmcm9tICcuL1NsaWNlJztcbmltcG9ydCB7c3RyaWRlZFNsaWNlSW1wbH0gZnJvbSAnLi9TdHJpZGVkU2xpY2VfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpZGVkU2xpY2UoYXJnczoge1xuICBpbnB1dHM6IFN0cmlkZWRTbGljZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBTdHJpZGVkU2xpY2VBdHRyc1xufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eH0gPSBpbnB1dHM7XG4gIGNvbnN0IHtcbiAgICBiZWdpbixcbiAgICBlbmQsXG4gICAgc3RyaWRlcyxcbiAgICBiZWdpbk1hc2ssXG4gICAgZW5kTWFzayxcbiAgICBlbGxpcHNpc01hc2ssXG4gICAgbmV3QXhpc01hc2ssXG4gICAgc2hyaW5rQXhpc01hc2tcbiAgfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ3N0cmlkZWRTbGljZScpO1xuXG4gIGNvbnN0IHtcbiAgICBmaW5hbFNoYXBlU3BhcnNlLFxuICAgIGZpbmFsU2hhcGUsXG4gICAgaXNJZGVudGl0eSxcbiAgICBzbGljZURpbTAsXG4gICAgaXNTaW1wbGVTbGljZSxcbiAgICBiZWdpbjogJGJlZ2luLFxuICAgIGVuZDogJGVuZCxcbiAgICBzdHJpZGVzOiAkc3RyaWRlc1xuICB9ID1cbiAgICAgIHNsaWNlX3V0aWwuc2xpY2VJbmZvKFxuICAgICAgICAgIHguc2hhcGUsIGJlZ2luLCBlbmQsIHN0cmlkZXMsIGJlZ2luTWFzaywgZW5kTWFzaywgZWxsaXBzaXNNYXNrLFxuICAgICAgICAgIG5ld0F4aXNNYXNrLCBzaHJpbmtBeGlzTWFzayk7XG5cbiAgbGV0IHJlc3VsdDtcblxuICAvLyByZWY6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmZsb3cvYmxvYi9tYXN0ZXIvdGVuc29yZmxvdy9jb3JlL2tlcm5lbHMvc3RyaWRlZF9zbGljZV9vcC5jY1xuICBpZiAoaXNJZGVudGl0eSkge1xuICAgIC8vIE9wdGltaXphdGlvbiAjMSwgc2xpY2UgaXMgYSBuby1vcCBwbHVzIHJlc2hhcGVcbiAgICByZXN1bHQgPSByZXNoYXBlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtzaGFwZTogZmluYWxTaGFwZX19KTtcbiAgfSBlbHNlIGlmIChzbGljZURpbTAgfHwgaXNTaW1wbGVTbGljZSkge1xuICAgIC8vIE9wdGltaXphdGlvbiAjMiwgc2xpY2UgaXMgbWVtb3J5IGNvbnRpZ3VvdXMgKG9ubHkgb2NjdXJzIGluIGRpbSAwKVxuICAgIHV0aWwuYXNzZXJ0KFxuICAgICAgICB4LnNoYXBlLmxlbmd0aCA+PSAxLFxuICAgICAgICAoKSA9PiBgSW5wdXQgbXVzdCBoYXZlIHJhbmsgYXQgbGVhc3QgMSwgZ290OiAke3guc2hhcGUubGVuZ3RofWApO1xuXG4gICAgY29uc3Qgc2l6ZSA9IHNsaWNlX3V0aWwuY29tcHV0ZU91dFNoYXBlKCRiZWdpbiwgJGVuZCwgJHN0cmlkZXMpO1xuICAgIC8vIFRvIHRvbGVyYXRlIGJlZ2luWzBdID4gZW5kWzBdIChhIDAtb3V0cHV0IHNsaWNlKSwgd2UgbWluKGJlZ2luLCBlbmQpLlxuICAgIGNvbnN0IHNsaWNlZCA9IHNsaWNlKHtpbnB1dHM6IHt4fSwgYmFja2VuZCwgYXR0cnM6IHtiZWdpbjogJGJlZ2luLCBzaXplfX0pO1xuICAgIHJlc3VsdCA9XG4gICAgICAgIHJlc2hhcGUoe2lucHV0czoge3g6IHNsaWNlZH0sIGJhY2tlbmQsIGF0dHJzOiB7c2hhcGU6IGZpbmFsU2hhcGV9fSk7XG4gICAgYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyhzbGljZWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHhCdWYgPSBiYWNrZW5kLmJ1ZmZlclN5bmM8UmFuaywgJ2Zsb2F0MzInPih4KTtcbiAgICBjb25zdCBvdXRCdWYgPSBzdHJpZGVkU2xpY2VJbXBsKGZpbmFsU2hhcGVTcGFyc2UsIHhCdWYsICRzdHJpZGVzLCAkYmVnaW4pO1xuXG4gICAgcmVzdWx0ID0gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhmaW5hbFNoYXBlLCBvdXRCdWYuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmlkZWRTbGljZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdHJpZGVkU2xpY2UsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogc3RyaWRlZFNsaWNlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringNGrams } from '@tensorflow/tfjs-core';\nimport { stringNGramsImpl } from './StringNGrams_impl';\nexport function stringNGrams(args) {\n const { inputs, backend, attrs } = args;\n const { separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences } = attrs;\n const { data, dataSplits } = inputs;\n const $data = backend.data.get(data.dataId).values;\n const $dataSplits = backend.data.get(dataSplits.dataId).values;\n const [nGrams, nGramsSplits] = stringNGramsImpl($data, $dataSplits, separator, nGramWidths, leftPad, rightPad, padWidth, preserveShortSequences);\n return [\n backend.makeTensorInfo([nGrams.length], 'string', nGrams),\n backend.makeTensorInfo(dataSplits.shape, 'int32', nGramsSplits),\n ];\n}\nexport const stringNGramsConfig = {\n kernelName: StringNGrams,\n backendName: 'cpu',\n kernelFunc: stringNGrams,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nTkdyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9TdHJpbmdOR3JhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUEyQixZQUFZLEVBQW9ELE1BQU0sdUJBQXVCLENBQUM7QUFJaEksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUk1QjtJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQ0osU0FBUyxFQUNULFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixzQkFBc0IsRUFDdkIsR0FBRyxLQUFLLENBQUM7SUFDVixNQUFNLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBc0IsQ0FBQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBb0IsQ0FBQztJQUU3RSxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLGdCQUFnQixDQUMzQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQ3ZFLHNCQUFzQixDQUFDLENBQUM7SUFDNUIsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUN6RCxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQztLQUNoRSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFpQjtJQUM5QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsWUFBcUM7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFN0cmluZ05HcmFtcywgU3RyaW5nTkdyYW1zQXR0cnMsIFN0cmluZ05HcmFtc0lucHV0cywgVGVuc29ySW5mb30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuXG5pbXBvcnQge3N0cmluZ05HcmFtc0ltcGx9IGZyb20gJy4vU3RyaW5nTkdyYW1zX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nTkdyYW1zKGFyZ3M6IHtcbiAgaW5wdXRzOiBTdHJpbmdOR3JhbXNJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogU3RyaW5nTkdyYW1zQXR0cnNcbn0pOiBbVGVuc29ySW5mbywgVGVuc29ySW5mb10ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7XG4gICAgc2VwYXJhdG9yLFxuICAgIG5HcmFtV2lkdGhzLFxuICAgIGxlZnRQYWQsXG4gICAgcmlnaHRQYWQsXG4gICAgcGFkV2lkdGgsXG4gICAgcHJlc2VydmVTaG9ydFNlcXVlbmNlc1xuICB9ID0gYXR0cnM7XG4gIGNvbnN0IHtkYXRhLCBkYXRhU3BsaXRzfSA9IGlucHV0cztcbiAgY29uc3QgJGRhdGEgPSBiYWNrZW5kLmRhdGEuZ2V0KGRhdGEuZGF0YUlkKS52YWx1ZXMgYXMgVWludDhBcnJheVtdO1xuICBjb25zdCAkZGF0YVNwbGl0cyA9IGJhY2tlbmQuZGF0YS5nZXQoZGF0YVNwbGl0cy5kYXRhSWQpLnZhbHVlcyBhcyBJbnQzMkFycmF5O1xuXG4gIGNvbnN0IFtuR3JhbXMsIG5HcmFtc1NwbGl0c10gPSBzdHJpbmdOR3JhbXNJbXBsKFxuICAgICAgJGRhdGEsICRkYXRhU3BsaXRzLCBzZXBhcmF0b3IsIG5HcmFtV2lkdGhzLCBsZWZ0UGFkLCByaWdodFBhZCwgcGFkV2lkdGgsXG4gICAgICBwcmVzZXJ2ZVNob3J0U2VxdWVuY2VzKTtcbiAgcmV0dXJuIFtcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtuR3JhbXMubGVuZ3RoXSwgJ3N0cmluZycsIG5HcmFtcyksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhkYXRhU3BsaXRzLnNoYXBlLCAnaW50MzInLCBuR3JhbXNTcGxpdHMpLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3Qgc3RyaW5nTkdyYW1zQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFN0cmluZ05HcmFtcyxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzdHJpbmdOR3JhbXMgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringSplit } from '@tensorflow/tfjs-core';\nimport { stringSplitImpl } from './StringSplit_impl';\nexport function stringSplit(args) {\n const { inputs, backend, attrs } = args;\n const { skipEmpty } = attrs;\n const { input, delimiter } = inputs;\n if (input.dtype !== 'string') {\n throw new Error('Input must be of datatype string');\n }\n if (input.shape.length !== 1) {\n throw new Error(`Input must be a vector, got shape: ${input.shape}`);\n }\n if (delimiter.shape.length !== 0) {\n throw new Error(`Delimiter must be a scalar, got shape: ${delimiter.shape}`);\n }\n const $input = backend.data.get(input.dataId).values;\n const $delimiter = backend.data.get(delimiter.dataId).values[0];\n const [indices, values, shape] = stringSplitImpl($input, $delimiter, skipEmpty);\n const outputSize = values.length;\n return [\n backend.makeTensorInfo([outputSize, 2], 'int32', indices),\n backend.makeTensorInfo([outputSize], 'string', values),\n backend.makeTensorInfo([2], 'int32', new Int32Array(shape))\n ];\n}\nexport const stringSplitConfig = {\n kernelName: StringSplit,\n backendName: 'cpu',\n kernelFunc: stringSplit,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nU3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9rZXJuZWxzL1N0cmluZ1NwbGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBMkIsV0FBVyxFQUFrRCxNQUFNLHVCQUF1QixDQUFDO0FBSTdILE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBSTNCO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUIsTUFBTSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFbEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7S0FDckQ7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN0RTtJQUNELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ1gsMENBQTBDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFO0lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQXNCLENBQUM7SUFDckUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQWUsQ0FBQztJQUU5RSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FDMUIsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqQyxPQUFPO1FBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBaUI7SUFDN0MsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLFdBQW9DO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7S2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBTdHJpbmdTcGxpdCwgU3RyaW5nU3BsaXRBdHRycywgU3RyaW5nU3BsaXRJbnB1dHMsIFRlbnNvckluZm99IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtzdHJpbmdTcGxpdEltcGx9IGZyb20gJy4vU3RyaW5nU3BsaXRfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdTcGxpdChhcmdzOiB7XG4gIGlucHV0czogU3RyaW5nU3BsaXRJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogU3RyaW5nU3BsaXRBdHRyc1xufSk6IFtUZW5zb3JJbmZvLCBUZW5zb3JJbmZvLCBUZW5zb3JJbmZvXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtza2lwRW1wdHl9ID0gYXR0cnM7XG4gIGNvbnN0IHtpbnB1dCwgZGVsaW1pdGVyfSA9IGlucHV0cztcblxuICBpZiAoaW5wdXQuZHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIG9mIGRhdGF0eXBlIHN0cmluZycpO1xuICB9XG4gIGlmIChpbnB1dC5zaGFwZS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IG11c3QgYmUgYSB2ZWN0b3IsIGdvdCBzaGFwZTogJHtpbnB1dC5zaGFwZX1gKTtcbiAgfVxuICBpZiAoZGVsaW1pdGVyLnNoYXBlLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERlbGltaXRlciBtdXN0IGJlIGEgc2NhbGFyLCBnb3Qgc2hhcGU6ICR7ZGVsaW1pdGVyLnNoYXBlfWApO1xuICB9XG5cbiAgY29uc3QgJGlucHV0ID0gYmFja2VuZC5kYXRhLmdldChpbnB1dC5kYXRhSWQpLnZhbHVlcyBhcyBVaW50OEFycmF5W107XG4gIGNvbnN0ICRkZWxpbWl0ZXIgPSBiYWNrZW5kLmRhdGEuZ2V0KGRlbGltaXRlci5kYXRhSWQpLnZhbHVlc1swXSBhcyBVaW50OEFycmF5O1xuXG4gIGNvbnN0IFtpbmRpY2VzLCB2YWx1ZXMsIHNoYXBlXSA9XG4gICAgICBzdHJpbmdTcGxpdEltcGwoJGlucHV0LCAkZGVsaW1pdGVyLCBza2lwRW1wdHkpO1xuICBjb25zdCBvdXRwdXRTaXplID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIFtcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtvdXRwdXRTaXplLCAyXSwgJ2ludDMyJywgaW5kaWNlcyksXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhbb3V0cHV0U2l6ZV0sICdzdHJpbmcnLCB2YWx1ZXMpLFxuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oWzJdLCAnaW50MzInLCBuZXcgSW50MzJBcnJheShzaGFwZSkpXG4gIF07XG59XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdTcGxpdENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBTdHJpbmdTcGxpdCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzdHJpbmdTcGxpdCBhcyB1bmtub3duIGFzIEtlcm5lbEZ1bmMsXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { StringToHashBucketFast } from '@tensorflow/tfjs-core';\nimport { stringToHashBucketFastImpl } from './StringToHashBucketFast_impl';\nexport function stringToHashBucketFast(args) {\n const { inputs, backend, attrs } = args;\n const { numBuckets } = attrs;\n const { input } = inputs;\n if (input.dtype !== 'string') {\n throw new Error('Input must be of datatype string');\n }\n if (numBuckets <= 0) {\n throw new Error(`Number of buckets must be at least 1`);\n }\n const $input = backend.data.get(input.dataId).values;\n const output = stringToHashBucketFastImpl($input, numBuckets);\n return backend.makeTensorInfo(input.shape, 'int32', output);\n}\nexport const stringToHashBucketFastConfig = {\n kernelName: StringToHashBucketFast,\n backendName: 'cpu',\n kernelFunc: stringToHashBucketFast,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVG9IYXNoQnVja2V0RmFzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvU3RyaW5nVG9IYXNoQnVja2V0RmFzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQTJCLHNCQUFzQixFQUF3RSxNQUFNLHVCQUF1QixDQUFDO0FBSTlKLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXpFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxJQUl0QztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFFdkIsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7S0FDckQ7SUFDRCxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0tBQ3pEO0lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQXNCLENBQUM7SUFFckUsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQWlCO0lBQ3hELFVBQVUsRUFBRSxzQkFBc0I7SUFDbEMsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLHNCQUErQztDQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgU3RyaW5nVG9IYXNoQnVja2V0RmFzdCwgU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzLCBTdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW5wdXRzLCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmltcG9ydCB7c3RyaW5nVG9IYXNoQnVja2V0RmFzdEltcGx9IGZyb20gJy4vU3RyaW5nVG9IYXNoQnVja2V0RmFzdF9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3QoYXJnczoge1xuICBpbnB1dHM6IFN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RJbnB1dHMsXG4gIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLFxuICBhdHRyczogU3RyaW5nVG9IYXNoQnVja2V0RmFzdEF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHtudW1CdWNrZXRzfSA9IGF0dHJzO1xuICBjb25zdCB7aW5wdXR9ID0gaW5wdXRzO1xuXG4gIGlmIChpbnB1dC5kdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgb2YgZGF0YXR5cGUgc3RyaW5nJyk7XG4gIH1cbiAgaWYgKG51bUJ1Y2tldHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTnVtYmVyIG9mIGJ1Y2tldHMgbXVzdCBiZSBhdCBsZWFzdCAxYCk7XG4gIH1cblxuICBjb25zdCAkaW5wdXQgPSBiYWNrZW5kLmRhdGEuZ2V0KGlucHV0LmRhdGFJZCkudmFsdWVzIGFzIFVpbnQ4QXJyYXlbXTtcblxuICBjb25zdCBvdXRwdXQgPSBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0SW1wbCgkaW5wdXQsIG51bUJ1Y2tldHMpO1xuICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhpbnB1dC5zaGFwZSwgJ2ludDMyJywgb3V0cHV0KTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogU3RyaW5nVG9IYXNoQnVja2V0RmFzdCxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiBzdHJpbmdUb0hhc2hCdWNrZXRGYXN0IGFzIHVua25vd24gYXMgS2VybmVsRnVuYyxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tan } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const tan = unaryKernelFunc(Tan, (xi) => Math.tan(xi));\nexport const tanConfig = {\n kernelName: Tan,\n backendName: 'cpu',\n kernelFunc: tan,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9UYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFlLEdBQUcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBaUI7SUFDckMsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFRhbn0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHt1bmFyeUtlcm5lbEZ1bmN9IGZyb20gJy4uL3V0aWxzL3VuYXJ5X3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHRhbiA9IHVuYXJ5S2VybmVsRnVuYyhUYW4sICh4aSkgPT4gTWF0aC50YW4oeGkpKTtcblxuZXhwb3J0IGNvbnN0IHRhbkNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUYW4sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogdGFuLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tanh } from '@tensorflow/tfjs-core';\nimport { unaryKernelFunc } from '../utils/unary_utils';\nexport const tanh = unaryKernelFunc(Tanh, (xi) => Math.tanh(xi));\nexport const tanhConfig = {\n kernelName: Tanh,\n backendName: 'cpu',\n kernelFunc: tanh,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFuaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvVGFuaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQWUsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIFRhbmh9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7dW5hcnlLZXJuZWxGdW5jfSBmcm9tICcuLi91dGlscy91bmFyeV91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB0YW5oID0gdW5hcnlLZXJuZWxGdW5jKFRhbmgsICh4aSkgPT4gTWF0aC50YW5oKHhpKSk7XG5cbmV4cG9ydCBjb25zdCB0YW5oQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRhbmgsXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogdGFuaCxcbn07XG4iXX0=","/**\n * @license\n * Copyright 2022 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { backend_util, TensorScatterUpdate } from '@tensorflow/tfjs-core';\nimport { scatterImpl } from './Scatter_impl';\nexport function tensorScatterUpdate(args) {\n const { inputs, backend } = args;\n const { tensor, indices, updates } = inputs;\n const { sliceRank, numUpdates, sliceSize, strides, outputSize } = backend_util.calculateShapes(updates, indices, tensor.shape);\n const sumDupeIndices = false;\n const indicesBuf = backend.bufferSync(indices);\n const updatesBuf = backend.bufferSync(updates);\n const tensorBuf = backend.bufferSync(tensor);\n const outBuf = scatterImpl(indicesBuf, updatesBuf, tensor.shape, outputSize, sliceSize, numUpdates, sliceRank, strides, tensorBuf, sumDupeIndices);\n return backend.makeTensorInfo(tensor.shape, outBuf.dtype, outBuf.values);\n}\nexport const tensorScatterUpdateConfig = {\n kernelName: TensorScatterUpdate,\n backendName: 'cpu',\n kernelFunc: tensorScatterUpdate\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVuc29yU2NhdHRlclVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvVGVuc29yU2NhdHRlclVwZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUE4QyxtQkFBbUIsRUFBc0QsTUFBTSx1QkFBdUIsQ0FBQztBQUl6SyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBSW5DO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDL0IsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBRTFDLE1BQU0sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLEdBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRTdCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWdCLE9BQU8sQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQTBCLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQTBCLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FDdEIsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUN2RSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQWlCO0lBQ3JELFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLG1CQUE0QztDQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge2JhY2tlbmRfdXRpbCwgS2VybmVsQ29uZmlnLCBLZXJuZWxGdW5jLCBSYW5rLCBUZW5zb3JJbmZvLCBUZW5zb3JTY2F0dGVyVXBkYXRlLCBUZW5zb3JTY2F0dGVyVXBkYXRlQXR0cnMsIFRlbnNvclNjYXR0ZXJVcGRhdGVJbnB1dHN9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcblxuaW1wb3J0IHtzY2F0dGVySW1wbH0gZnJvbSAnLi9TY2F0dGVyX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVuc29yU2NhdHRlclVwZGF0ZShhcmdzOiB7XG4gIGlucHV0czogVGVuc29yU2NhdHRlclVwZGF0ZUlucHV0cyxcbiAgYmFja2VuZDogTWF0aEJhY2tlbmRDUFUsXG4gIGF0dHJzOiBUZW5zb3JTY2F0dGVyVXBkYXRlQXR0cnNcbn0pOiBUZW5zb3JJbmZvIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7dGVuc29yLCBpbmRpY2VzLCB1cGRhdGVzfSA9IGlucHV0cztcblxuICBjb25zdCB7c2xpY2VSYW5rLCBudW1VcGRhdGVzLCBzbGljZVNpemUsIHN0cmlkZXMsIG91dHB1dFNpemV9ID1cbiAgICAgIGJhY2tlbmRfdXRpbC5jYWxjdWxhdGVTaGFwZXModXBkYXRlcywgaW5kaWNlcywgdGVuc29yLnNoYXBlKTtcbiAgY29uc3Qgc3VtRHVwZUluZGljZXMgPSBmYWxzZTtcblxuICBjb25zdCBpbmRpY2VzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdpbnQzMic+KGluZGljZXMpO1xuICBjb25zdCB1cGRhdGVzQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdpbnQzMid8J2Zsb2F0MzInPih1cGRhdGVzKTtcbiAgY29uc3QgdGVuc29yQnVmID0gYmFja2VuZC5idWZmZXJTeW5jPFJhbmssICdpbnQzMid8J2Zsb2F0MzInPih0ZW5zb3IpO1xuICBjb25zdCBvdXRCdWYgPSBzY2F0dGVySW1wbChcbiAgICAgIGluZGljZXNCdWYsIHVwZGF0ZXNCdWYsIHRlbnNvci5zaGFwZSwgb3V0cHV0U2l6ZSwgc2xpY2VTaXplLCBudW1VcGRhdGVzLFxuICAgICAgc2xpY2VSYW5rLCBzdHJpZGVzLCB0ZW5zb3JCdWYsIHN1bUR1cGVJbmRpY2VzKTtcbiAgcmV0dXJuIGJhY2tlbmQubWFrZVRlbnNvckluZm8odGVuc29yLnNoYXBlLCBvdXRCdWYuZHR5cGUsIG91dEJ1Zi52YWx1ZXMpO1xufVxuXG5leHBvcnQgY29uc3QgdGVuc29yU2NhdHRlclVwZGF0ZUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUZW5zb3JTY2F0dGVyVXBkYXRlLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHRlbnNvclNjYXR0ZXJVcGRhdGUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tile } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { tileImpl } from './Tile_impl';\nexport function tile(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { reps } = attrs;\n assertNotComplex(x, 'tile');\n const outBuf = tileImpl(backend.bufferSync(x), reps);\n return backend.makeTensorInfo(outBuf.shape, outBuf.dtype, outBuf.values);\n}\nexport const tileConfig = {\n kernelName: Tile,\n backendName: 'cpu',\n kernelFunc: tile\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvVGlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXVDLElBQUksRUFBd0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd4RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxNQUFNLFVBQVUsSUFBSSxDQUNoQixJQUFxRTtJQUV2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRXJCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVyRCxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFpQjtJQUN0QyxVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsSUFBNkI7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFRpbGUsIFRpbGVBdHRycywgVGlsZUlucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge3RpbGVJbXBsfSBmcm9tICcuL1RpbGVfaW1wbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWxlKFxuICAgIGFyZ3M6IHtpbnB1dHM6IFRpbGVJbnB1dHMsIGJhY2tlbmQ6IE1hdGhCYWNrZW5kQ1BVLCBhdHRyczogVGlsZUF0dHJzfSk6XG4gICAgVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge3JlcHN9ID0gYXR0cnM7XG5cbiAgYXNzZXJ0Tm90Q29tcGxleCh4LCAndGlsZScpO1xuICBjb25zdCBvdXRCdWYgPSB0aWxlSW1wbChiYWNrZW5kLmJ1ZmZlclN5bmMoeCksIHJlcHMpO1xuXG4gIHJldHVybiBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKG91dEJ1Zi5zaGFwZSwgb3V0QnVmLmR0eXBlLCBvdXRCdWYudmFsdWVzKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRpbGVDb25maWc6IEtlcm5lbENvbmZpZyA9IHtcbiAga2VybmVsTmFtZTogVGlsZSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiB0aWxlIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TopK } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { topKImpl } from './TopK_impl';\nexport function topK(args) {\n const { inputs, backend, attrs } = args;\n const { x } = inputs;\n const { k, sorted } = attrs;\n assertNotComplex(x, 'topk');\n const xVals = backend.data.get(x.dataId).values;\n const [allTopKVals, allTopKIndices] = topKImpl(xVals, x.shape, x.dtype, k, sorted);\n return [\n backend.makeTensorInfo(allTopKVals.shape, allTopKVals.dtype, allTopKVals.values),\n backend.makeTensorInfo(allTopKIndices.shape, allTopKIndices.dtype, allTopKIndices.values)\n ];\n}\nexport const topKConfig = {\n kernelName: TopK,\n backendName: 'cpu',\n kernelFunc: topK\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wSy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RmanMtYmFja2VuZC1jcHUvc3JjL2tlcm5lbHMvVG9wSy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQXdELElBQUksRUFBb0MsTUFBTSx1QkFBdUIsQ0FBQztBQUdySSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxNQUFNLFVBQVUsSUFBSSxDQUNoQixJQUFxRTtJQUV2RSxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixNQUFNLEVBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBQyxHQUFHLEtBQUssQ0FBQztJQUUxQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW9CLENBQUM7SUFDOUQsTUFBTSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsR0FDL0IsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUF3QixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVwRSxPQUFPO1FBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDN0QsT0FBTyxDQUFDLGNBQWMsQ0FDbEIsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWlCO0lBQ3RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUE2QjtDQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgTnVtZXJpY0RhdGFUeXBlLCBUZW5zb3JJbmZvLCBUb3BLLCBUb3BLQXR0cnMsIFRvcEtJbnB1dHMsIFR5cGVkQXJyYXl9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7TWF0aEJhY2tlbmRDUFV9IGZyb20gJy4uL2JhY2tlbmRfY3B1JztcbmltcG9ydCB7YXNzZXJ0Tm90Q29tcGxleH0gZnJvbSAnLi4vY3B1X3V0aWwnO1xuaW1wb3J0IHt0b3BLSW1wbH0gZnJvbSAnLi9Ub3BLX2ltcGwnO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9wSyhcbiAgICBhcmdzOiB7aW5wdXRzOiBUb3BLSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFRvcEtBdHRyc30pOlxuICAgIFtUZW5zb3JJbmZvLCBUZW5zb3JJbmZvXSB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4fSA9IGlucHV0cztcbiAgY29uc3Qge2ssIHNvcnRlZH0gPSBhdHRycztcblxuICBhc3NlcnROb3RDb21wbGV4KHgsICd0b3BrJyk7XG5cbiAgY29uc3QgeFZhbHMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXMgYXMgVHlwZWRBcnJheTtcbiAgY29uc3QgW2FsbFRvcEtWYWxzLCBhbGxUb3BLSW5kaWNlc10gPVxuICAgICAgdG9wS0ltcGwoeFZhbHMsIHguc2hhcGUsIHguZHR5cGUgYXMgTnVtZXJpY0RhdGFUeXBlLCBrLCBzb3J0ZWQpO1xuXG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhcbiAgICAgICAgYWxsVG9wS1ZhbHMuc2hhcGUsIGFsbFRvcEtWYWxzLmR0eXBlLCBhbGxUb3BLVmFscy52YWx1ZXMpLFxuICAgIGJhY2tlbmQubWFrZVRlbnNvckluZm8oXG4gICAgICAgIGFsbFRvcEtJbmRpY2VzLnNoYXBlLCBhbGxUb3BLSW5kaWNlcy5kdHlwZSwgYWxsVG9wS0luZGljZXMudmFsdWVzKVxuICBdO1xufVxuXG5leHBvcnQgY29uc3QgdG9wS0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBUb3BLLFxuICBiYWNrZW5kTmFtZTogJ2NwdScsXG4gIGtlcm5lbEZ1bmM6IHRvcEsgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19","/**\n * @license\n * Copyright 2021 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Transform, util } from '@tensorflow/tfjs-core';\nexport function transform(args) {\n const { inputs, attrs, backend } = args;\n const { image, transforms } = inputs;\n const { interpolation, fillMode, fillValue, outputShape } = attrs;\n const [batch, imageHeight, imageWidth, numChannels] = image.shape;\n const [outHeight, outWidth] = outputShape != null ? outputShape : [imageHeight, imageWidth];\n const outShape = [batch, outHeight, outWidth, numChannels];\n const inStrides = util.computeStrides(image.shape);\n const batchInStride = inStrides[0];\n const rowInStride = inStrides[1];\n const colInStride = inStrides[2];\n const outStrides = util.computeStrides(outShape);\n const batchOutStride = outStrides[0];\n const rowOutStride = outStrides[1];\n const colOutStride = outStrides[2];\n const outVals = util.getTypedArrayFromDType(image.dtype, util.sizeFromShape(outShape));\n outVals.fill(fillValue);\n const imageVals = backend.data.get(image.dataId).values;\n const transformVals = backend.data.get(transforms.dataId).values;\n // Ref TF implementation:\n // https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/image/image_ops.h\n for (let b = 0; b < batch; ++b) {\n const transform = transforms.shape[0] === 1 ?\n transformVals :\n transformVals.subarray(b * 8, b * 8 + 8);\n for (let outY = 0; outY < outHeight; ++outY) {\n for (let outX = 0; outX < outWidth; ++outX) {\n for (let channel = 0; channel < numChannels; ++channel) {\n let val;\n const projection = transform[6] * outX + transform[7] * outY + 1;\n if (projection === 0) {\n // Return the fill value for infinite coordinates,\n // which are outside the input image\n continue;\n }\n const inX = (transform[0] * outX + transform[1] * outY + transform[2]) /\n projection;\n const inY = (transform[3] * outX + transform[4] * outY + transform[5]) /\n projection;\n const x = mapCoord(inX, imageWidth, fillMode);\n const y = mapCoord(inY, imageHeight, fillMode);\n switch (interpolation) {\n case 'nearest':\n val = nearestInterpolation(imageVals, imageHeight, imageWidth, batchInStride, rowInStride, colInStride, b, y, x, channel, fillValue);\n break;\n case 'bilinear':\n val = bilinearInterpolation(imageVals, imageHeight, imageWidth, batchInStride, rowInStride, colInStride, b, y, x, channel, fillValue);\n break;\n default:\n throw new Error(`Error in Transform: Expect 'nearest' or ` +\n `'bilinear', but got ${interpolation}`);\n }\n const ind = b * batchOutStride + outY * rowOutStride +\n outX * colOutStride + channel;\n outVals[ind] = val;\n }\n }\n }\n return backend.makeTensorInfo(outShape, image.dtype, outVals);\n }\n const dataId = backend.write(outVals, outShape, image.dtype);\n return { dataId, shape: image.shape, dtype: image.dtype };\n}\nexport const transformConfig = {\n kernelName: Transform,\n backendName: 'cpu',\n kernelFunc: transform\n};\nfunction mapCoord(outCoord, len, mode) {\n switch (mode) {\n case 'reflect':\n return mapCoordReflect(outCoord, len);\n case 'wrap':\n return mapCoordWrap(outCoord, len);\n case 'nearest':\n return mapCoordNearest(outCoord, len);\n case 'constant':\n default:\n return mapCoordConstant(outCoord, len);\n }\n}\nfunction mapCoordReflect(outCoord, len) {\n // Reflect [abcd] to [dcba|abcd|dcba].\n let inCoord = outCoord;\n if (inCoord < 0) {\n if (len <= 1) {\n inCoord = 0;\n }\n else {\n const sz2 = 2 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * Math.trunc(-inCoord / sz2) + inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1;\n }\n }\n else if (inCoord > len - 1) {\n if (len <= 1) {\n inCoord = 0;\n }\n else {\n const sz2 = 2 * len;\n inCoord -= sz2 * Math.trunc(inCoord / sz2);\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1;\n }\n }\n }\n // clamp is necessary because when outCoord = 3.5 and len = 4,\n // inCoord = 3.5 and will be rounded to 4 in nearest interpolation.\n return util.clamp(0, inCoord, len - 1);\n}\nfunction mapCoordWrap(outCoord, len) {\n // Wrap [abcd] to [abcd|abcd|abcd].\n let inCoord = outCoord;\n if (inCoord < 0) {\n if (len <= 1) {\n inCoord = 0;\n }\n else {\n const sz = len - 1;\n inCoord += len * (Math.trunc(-inCoord / sz) + 1);\n }\n }\n else if (inCoord > len - 1) {\n if (len <= 1) {\n inCoord = 0;\n }\n else {\n const sz = len - 1;\n inCoord -= len * Math.trunc(inCoord / sz);\n }\n }\n // clamp is necessary because when outCoord = -0.5 and len = 4,\n // inCoord = 3.5 and will be rounded to 4 in nearest interpolation.\n return util.clamp(0, inCoord, len - 1);\n}\nfunction mapCoordConstant(outCoord, len) {\n return outCoord;\n}\nfunction mapCoordNearest(outCoord, len) {\n return util.clamp(0, outCoord, len - 1);\n}\nfunction readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) {\n const ind = batch * batchStride + y * rowStride + x * colStride + channel;\n if (0 <= y && y < imageHeight && 0 <= x && x < imageWidth) {\n return imageVals[ind];\n }\n else {\n return fillValue;\n }\n}\nfunction nearestInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) {\n const $y = Math.round(y);\n const $x = Math.round(x);\n return readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, $y, $x, channel, fillValue);\n}\nfunction bilinearInterpolation(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, y, x, channel, fillValue) {\n const yFloor = Math.floor(y);\n const xFloor = Math.floor(x);\n const yCeil = yFloor + 1;\n const xCeil = xFloor + 1;\n // f(x, yFloor) = (xCeil - x) / (xCeil - xFloor) * f(xFloor, yFloor)\n // + (x - xFloor) / (xCeil - xFloor) * f(xCeil, yFloor)\n const valueYFloor = (xCeil - x) *\n readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xFloor, channel, fillValue) +\n (x - xFloor) *\n readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yFloor, xCeil, channel, fillValue);\n // f(x, yCeil) = (xCeil - x) / (xCeil - xFloor) * f(xFloor, yCeil)\n // + (x - xFloor) / (xCeil - xFloor) * f(xCeil, yCeil)\n const valueYCeil = (xCeil - x) *\n readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xFloor, channel, fillValue) +\n (x - xFloor) *\n readWithFillValue(imageVals, imageHeight, imageWidth, batchStride, rowStride, colStride, batch, yCeil, xCeil, channel, fillValue);\n // f(x, y) = (yCeil - y) / (yCeil - yFloor) * f(x, yFloor)\n // + (y - yFloor) / (yCeil - yFloor) * f(x, yCeil)\n return (yCeil - y) * valueYFloor + (y - yFloor) * valueYCeil;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9UcmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF3RCxTQUFTLEVBQStDLElBQUksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBSTFKLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFJekI7SUFDQyxNQUFNLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUM7SUFDdEMsTUFBTSxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkMsTUFBTSxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxHQUFHLEtBQUssQ0FBQztJQUVoRSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNsRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUN2QixXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENB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RSxTQUFTLEVBQzFELFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO1FBQzVELENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNSLGlCQUFpQixDQUNiLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQzFELFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsMERBQTBEO0lBQzFELDBEQUEwRDtJQUMxRCxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIE51bWVyaWNEYXRhVHlwZSwgVGVuc29ySW5mbywgVHJhbnNmb3JtLCBUcmFuc2Zvcm1BdHRycywgVHJhbnNmb3JtSW5wdXRzLCBUeXBlZEFycmF5LCB1dGlsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oYXJnczoge1xuICBpbnB1dHM6IFRyYW5zZm9ybUlucHV0cyxcbiAgYXR0cnM6IFRyYW5zZm9ybUF0dHJzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVVxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7aW1hZ2UsIHRyYW5zZm9ybXN9ID0gaW5wdXRzO1xuICBjb25zdCB7aW50ZXJwb2xhdGlvbiwgZmlsbE1vZGUsIGZpbGxWYWx1ZSwgb3V0cHV0U2hhcGV9ID0gYXR0cnM7XG5cbiAgY29uc3QgW2JhdGNoLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgbnVtQ2hhbm5lbHNdID0gaW1hZ2Uuc2hhcGU7XG4gIGNvbnN0IFtvdXRIZWlnaHQsIG91dFdpZHRoXSA9XG4gICAgICBvdXRwdXRTaGFwZSAhPSBudWxsID8gb3V0cHV0U2hhcGUgOiBbaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGhdO1xuICBjb25zdCBvdXRTaGFwZSA9IFtiYXRjaCwgb3V0SGVpZ2h0LCBvdXRXaWR0aCwgbnVtQ2hhbm5lbHNdO1xuXG4gIGNvbnN0IGluU3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMoaW1hZ2Uuc2hhcGUpO1xuICBjb25zdCBiYXRjaEluU3RyaWRlID0gaW5TdHJpZGVzWzBdO1xuICBjb25zdCByb3dJblN0cmlkZSA9IGluU3RyaWRlc1sxXTtcbiAgY29uc3QgY29sSW5TdHJpZGUgPSBpblN0cmlkZXNbMl07XG5cbiAgY29uc3Qgb3V0U3RyaWRlcyA9IHV0aWwuY29tcHV0ZVN0cmlkZXMob3V0U2hhcGUpO1xuICBjb25zdCBiYXRjaE91dFN0cmlkZSA9IG91dFN0cmlkZXNbMF07XG4gIGNvbnN0IHJvd091dFN0cmlkZSA9IG91dFN0cmlkZXNbMV07XG4gIGNvbnN0IGNvbE91dFN0cmlkZSA9IG91dFN0cmlkZXNbMl07XG5cbiAgY29uc3Qgb3V0VmFscyA9IHV0aWwuZ2V0VHlwZWRBcnJheUZyb21EVHlwZShcbiAgICAgIGltYWdlLmR0eXBlIGFzIE51bWVyaWNEYXRhVHlwZSwgdXRpbC5zaXplRnJvbVNoYXBlKG91dFNoYXBlKSk7XG5cbiAgb3V0VmFscy5maWxsKGZpbGxWYWx1ZSk7XG5cbiAgY29uc3QgaW1hZ2VWYWxzID0gYmFja2VuZC5kYXRhLmdldChpbWFnZS5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuICBjb25zdCB0cmFuc2Zvcm1WYWxzID1cbiAgICAgIGJhY2tlbmQuZGF0YS5nZXQodHJhbnNmb3Jtcy5kYXRhSWQpLnZhbHVlcyBhcyBUeXBlZEFycmF5O1xuXG4gIC8vIFJlZiBURiBpbXBsZW1lbnRhdGlvbjpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yZmxvdy9ibG9iL21hc3Rlci90ZW5zb3JmbG93L2NvcmUva2VybmVscy9pbWFnZS9pbWFnZV9vcHMuaFxuICBmb3IgKGxldCBiID0gMDsgYiA8IGJhdGNoOyArK2IpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1zLnNoYXBlWzBdID09PSAxID9cbiAgICAgICAgdHJhbnNmb3JtVmFscyA6XG4gICAgICAgIHRyYW5zZm9ybVZhbHMuc3ViYXJyYXkoYiAqIDgsIGIgKiA4ICsgOCk7XG5cbiAgICBmb3IgKGxldCBvdXRZID0gMDsgb3V0WSA8IG91dEhlaWdodDsgKytvdXRZKSB7XG4gICAgICBmb3IgKGxldCBvdXRYID0gMDsgb3V0WCA8IG91dFdpZHRoOyArK291dFgpIHtcbiAgICAgICAgZm9yIChsZXQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBudW1DaGFubmVsczsgKytjaGFubmVsKSB7XG4gICAgICAgICAgbGV0IHZhbDtcblxuICAgICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0cmFuc2Zvcm1bNl0gKiBvdXRYICsgdHJhbnNmb3JtWzddICogb3V0WSArIDE7XG5cbiAgICAgICAgICBpZiAocHJvamVjdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBmaWxsIHZhbHVlIGZvciBpbmZpbml0ZSBjb29yZGluYXRlcyxcbiAgICAgICAgICAgIC8vIHdoaWNoIGFyZSBvdXRzaWRlIHRoZSBpbnB1dCBpbWFnZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaW5YID1cbiAgICAgICAgICAgICAgKHRyYW5zZm9ybVswXSAqIG91dFggKyB0cmFuc2Zvcm1bMV0gKiBvdXRZICsgdHJhbnNmb3JtWzJdKSAvXG4gICAgICAgICAgICAgIHByb2plY3Rpb247XG4gICAgICAgICAgY29uc3QgaW5ZID1cbiAgICAgICAgICAgICAgKHRyYW5zZm9ybVszXSAqIG91dFggKyB0cmFuc2Zvcm1bNF0gKiBvdXRZICsgdHJhbnNmb3JtWzVdKSAvXG4gICAgICAgICAgICAgIHByb2plY3Rpb247XG5cbiAgICAgICAgICBjb25zdCB4ID0gbWFwQ29vcmQoaW5YLCBpbWFnZVdpZHRoLCBmaWxsTW9kZSk7XG4gICAgICAgICAgY29uc3QgeSA9IG1hcENvb3JkKGluWSwgaW1hZ2VIZWlnaHQsIGZpbGxNb2RlKTtcblxuICAgICAgICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnbmVhcmVzdCc6XG4gICAgICAgICAgICAgIHZhbCA9IG5lYXJlc3RJbnRlcnBvbGF0aW9uKFxuICAgICAgICAgICAgICAgICAgaW1hZ2VWYWxzLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgYmF0Y2hJblN0cmlkZSxcbiAgICAgICAgICAgICAgICAgIHJvd0luU3RyaWRlLCBjb2xJblN0cmlkZSwgYiwgeSwgeCwgY2hhbm5lbCwgZmlsbFZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWxpbmVhcic6XG4gICAgICAgICAgICAgIHZhbCA9IGJpbGluZWFySW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICAgIGltYWdlVmFscywgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGJhdGNoSW5TdHJpZGUsXG4gICAgICAgICAgICAgICAgICByb3dJblN0cmlkZSwgY29sSW5TdHJpZGUsIGIsIHksIHgsIGNoYW5uZWwsIGZpbGxWYWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgYEVycm9yIGluIFRyYW5zZm9ybTogRXhwZWN0ICduZWFyZXN0JyBvciBgICtcbiAgICAgICAgICAgICAgICAgIGAnYmlsaW5lYXInLCBidXQgZ290ICR7aW50ZXJwb2xhdGlvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbmQgPVxuICAgICAgICAgICAgICBiICogYmF0Y2hPdXRTdHJpZGUgKyBvdXRZICogcm93T3V0U3RyaWRlICtcbiAgICAgICAgICAgICAgb3V0WCAqIGNvbE91dFN0cmlkZSArIGNoYW5uZWw7XG5cbiAgICAgICAgICBvdXRWYWxzW2luZF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRTaGFwZSwgaW1hZ2UuZHR5cGUsIG91dFZhbHMpO1xuICB9XG5cbiAgY29uc3QgZGF0YUlkID0gYmFja2VuZC53cml0ZShvdXRWYWxzLCBvdXRTaGFwZSwgaW1hZ2UuZHR5cGUpO1xuICByZXR1cm4ge2RhdGFJZCwgc2hhcGU6IGltYWdlLnNoYXBlLCBkdHlwZTogaW1hZ2UuZHR5cGV9O1xufVxuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFRyYW5zZm9ybSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiB0cmFuc2Zvcm0gYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuXG5mdW5jdGlvbiBtYXBDb29yZChcbiAgICBvdXRDb29yZDogbnVtYmVyLCBsZW46IG51bWJlcixcbiAgICBtb2RlOiAnY29uc3RhbnQnfCdyZWZsZWN0J3wnd3JhcCd8J25lYXJlc3QnKSB7XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3JlZmxlY3QnOlxuICAgICAgcmV0dXJuIG1hcENvb3JkUmVmbGVjdChvdXRDb29yZCwgbGVuKTtcbiAgICBjYXNlICd3cmFwJzpcbiAgICAgIHJldHVybiBtYXBDb29yZFdyYXAob3V0Q29vcmQsIGxlbik7XG4gICAgY2FzZSAnbmVhcmVzdCc6XG4gICAgICByZXR1cm4gbWFwQ29vcmROZWFyZXN0KG91dENvb3JkLCBsZW4pO1xuICAgIGNhc2UgJ2NvbnN0YW50JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG1hcENvb3JkQ29uc3RhbnQob3V0Q29vcmQsIGxlbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwQ29vcmRSZWZsZWN0KG91dENvb3JkOiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gUmVmbGVjdCBbYWJjZF0gdG8gW2RjYmF8YWJjZHxkY2JhXS5cbiAgbGV0IGluQ29vcmQgPSBvdXRDb29yZDtcbiAgaWYgKGluQ29vcmQgPCAwKSB7XG4gICAgaWYgKGxlbiA8PSAxKSB7XG4gICAgICBpbkNvb3JkID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3oyID0gMiAqIGxlbjtcbiAgICAgIGlmIChpbkNvb3JkIDwgc3oyKSB7XG4gICAgICAgIGluQ29vcmQgPSBzejIgKiBNYXRoLnRydW5jKC1pbkNvb3JkIC8gc3oyKSArIGluQ29vcmQ7XG4gICAgICB9XG4gICAgICBpbkNvb3JkID0gaW5Db29yZCA8IC1sZW4gPyBpbkNvb3JkICsgc3oyIDogLWluQ29vcmQgLSAxO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbkNvb3JkID4gbGVuIC0gMSkge1xuICAgIGlmIChsZW4gPD0gMSkge1xuICAgICAgaW5Db29yZCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN6MiA9IDIgKiBsZW47XG4gICAgICBpbkNvb3JkIC09IHN6MiAqIE1hdGgudHJ1bmMoaW5Db29yZCAvIHN6Mik7XG4gICAgICBpZiAoaW5Db29yZCA+PSBsZW4pIHtcbiAgICAgICAgaW5Db29yZCA9IHN6MiAtIGluQ29vcmQgLSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBjbGFtcCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3aGVuIG91dENvb3JkID0gMy41IGFuZCBsZW4gPSA0LFxuICAvLyBpbkNvb3JkID0gMy41IGFuZCB3aWxsIGJlIHJvdW5kZWQgdG8gNCBpbiBuZWFyZXN0IGludGVycG9sYXRpb24uXG4gIHJldHVybiB1dGlsLmNsYW1wKDAsIGluQ29vcmQsIGxlbiAtIDEpO1xufVxuXG5mdW5jdGlvbiBtYXBDb29yZFdyYXAob3V0Q29vcmQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xuICAvLyBXcmFwIFthYmNkXSB0byBbYWJjZHxhYmNkfGFiY2RdLlxuICBsZXQgaW5Db29yZCA9IG91dENvb3JkO1xuICBpZiAoaW5Db29yZCA8IDApIHtcbiAgICBpZiAobGVuIDw9IDEpIHtcbiAgICAgIGluQ29vcmQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeiA9IGxlbiAtIDE7XG4gICAgICBpbkNvb3JkICs9IGxlbiAqIChNYXRoLnRydW5jKC1pbkNvb3JkIC8gc3opICsgMSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGluQ29vcmQgPiBsZW4gLSAxKSB7XG4gICAgaWYgKGxlbiA8PSAxKSB7XG4gICAgICBpbkNvb3JkID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3ogPSBsZW4gLSAxO1xuICAgICAgaW5Db29yZCAtPSBsZW4gKiBNYXRoLnRydW5jKGluQ29vcmQgLyBzeik7XG4gICAgfVxuICB9XG4gIC8vIGNsYW1wIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdoZW4gb3V0Q29vcmQgPSAtMC41IGFuZCBsZW4gPSA0LFxuICAvLyBpbkNvb3JkID0gMy41IGFuZCB3aWxsIGJlIHJvdW5kZWQgdG8gNCBpbiBuZWFyZXN0IGludGVycG9sYXRpb24uXG4gIHJldHVybiB1dGlsLmNsYW1wKDAsIGluQ29vcmQsIGxlbiAtIDEpO1xufVxuXG5mdW5jdGlvbiBtYXBDb29yZENvbnN0YW50KG91dENvb3JkOiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIG91dENvb3JkO1xufVxuXG5mdW5jdGlvbiBtYXBDb29yZE5lYXJlc3Qob3V0Q29vcmQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdXRpbC5jbGFtcCgwLCBvdXRDb29yZCwgbGVuIC0gMSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRXaXRoRmlsbFZhbHVlKFxuICAgIGltYWdlVmFsczogVHlwZWRBcnJheSwgaW1hZ2VIZWlnaHQ6IG51bWJlciwgaW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIGJhdGNoU3RyaWRlOiBudW1iZXIsIHJvd1N0cmlkZTogbnVtYmVyLCBjb2xTdHJpZGU6IG51bWJlciwgYmF0Y2g6IG51bWJlcixcbiAgICB5OiBudW1iZXIsIHg6IG51bWJlciwgY2hhbm5lbDogbnVtYmVyLCBmaWxsVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGluZCA9IGJhdGNoICogYmF0Y2hTdHJpZGUgKyB5ICogcm93U3RyaWRlICsgeCAqIGNvbFN0cmlkZSArIGNoYW5uZWw7XG4gIGlmICgwIDw9IHkgJiYgeSA8IGltYWdlSGVpZ2h0ICYmIDAgPD0geCAmJiB4IDwgaW1hZ2VXaWR0aCkge1xuICAgIHJldHVybiBpbWFnZVZhbHNbaW5kXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmlsbFZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcnBvbGF0aW9uKFxuICAgIGltYWdlVmFsczogVHlwZWRBcnJheSwgaW1hZ2VIZWlnaHQ6IG51bWJlciwgaW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIGJhdGNoU3RyaWRlOiBudW1iZXIsIHJvd1N0cmlkZTogbnVtYmVyLCBjb2xTdHJpZGU6IG51bWJlciwgYmF0Y2g6IG51bWJlcixcbiAgICB5OiBudW1iZXIsIHg6IG51bWJlciwgY2hhbm5lbDogbnVtYmVyLCBmaWxsVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0ICR5ID0gTWF0aC5yb3VuZCh5KTtcbiAgY29uc3QgJHggPSBNYXRoLnJvdW5kKHgpO1xuXG4gIHJldHVybiByZWFkV2l0aEZpbGxWYWx1ZShcbiAgICAgIGltYWdlVmFscywgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGJhdGNoU3RyaWRlLCByb3dTdHJpZGUsIGNvbFN0cmlkZSxcbiAgICAgIGJhdGNoLCAkeSwgJHgsIGNoYW5uZWwsIGZpbGxWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGJpbGluZWFySW50ZXJwb2xhdGlvbihcbiAgICBpbWFnZVZhbHM6IFR5cGVkQXJyYXksIGltYWdlSGVpZ2h0OiBudW1iZXIsIGltYWdlV2lkdGg6IG51bWJlcixcbiAgICBiYXRjaFN0cmlkZTogbnVtYmVyLCByb3dTdHJpZGU6IG51bWJlciwgY29sU3RyaWRlOiBudW1iZXIsIGJhdGNoOiBudW1iZXIsXG4gICAgeTogbnVtYmVyLCB4OiBudW1iZXIsIGNoYW5uZWw6IG51bWJlciwgZmlsbFZhbHVlOiBudW1iZXIpIHtcbiAgY29uc3QgeUZsb29yID0gTWF0aC5mbG9vcih5KTtcbiAgY29uc3QgeEZsb29yID0gTWF0aC5mbG9vcih4KTtcbiAgY29uc3QgeUNlaWwgPSB5Rmxvb3IgKyAxO1xuICBjb25zdCB4Q2VpbCA9IHhGbG9vciArIDE7XG4gIC8vIGYoeCwgeUZsb29yKSA9ICh4Q2VpbCAtIHgpIC8gKHhDZWlsIC0geEZsb29yKSAqIGYoeEZsb29yLCB5Rmxvb3IpXG4gIC8vICAgICAgICAgICAgICAgKyAoeCAtIHhGbG9vcikgLyAoeENlaWwgLSB4Rmxvb3IpICogZih4Q2VpbCwgeUZsb29yKVxuICBjb25zdCB2YWx1ZVlGbG9vciA9XG4gICAgICAoeENlaWwgLSB4KSAqXG4gICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoXG4gICAgICAgICAgICAgIGltYWdlVmFscywgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGJhdGNoU3RyaWRlLCByb3dTdHJpZGUsXG4gICAgICAgICAgICAgIGNvbFN0cmlkZSwgYmF0Y2gsIHlGbG9vciwgeEZsb29yLCBjaGFubmVsLCBmaWxsVmFsdWUpICtcbiAgICAgICh4IC0geEZsb29yKSAqXG4gICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoXG4gICAgICAgICAgICAgIGltYWdlVmFscywgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGJhdGNoU3RyaWRlLCByb3dTdHJpZGUsXG4gICAgICAgICAgICAgIGNvbFN0cmlkZSwgYmF0Y2gsIHlGbG9vciwgeENlaWwsIGNoYW5uZWwsIGZpbGxWYWx1ZSk7XG4gIC8vIGYoeCwgeUNlaWwpID0gKHhDZWlsIC0geCkgLyAoeENlaWwgLSB4Rmxvb3IpICogZih4Rmxvb3IsIHlDZWlsKVxuICAvLyAgICAgICAgICAgICArICh4IC0geEZsb29yKSAvICh4Q2VpbCAtIHhGbG9vcikgKiBmKHhDZWlsLCB5Q2VpbClcbiAgY29uc3QgdmFsdWVZQ2VpbCA9XG4gICAgICAoeENlaWwgLSB4KSAqXG4gICAgICAgICAgcmVhZFdpdGhGaWxsVmFsdWUoXG4gICAgICAgICAgICAgIGltYWdlVmFscywgaW1hZ2VIZWlnaHQsIGltYWdlV2lkdGgsIGJhdGNoU3RyaWRlLCByb3dTdHJpZGUsXG4gICAgICAgICAgICAgIGNvbFN0cmlkZSwgYmF0Y2gsIHlDZWlsLCB4Rmxvb3IsIGNoYW5uZWwsIGZpbGxWYWx1ZSkgK1xuICAgICAgKHggLSB4Rmxvb3IpICpcbiAgICAgICAgICByZWFkV2l0aEZpbGxWYWx1ZShcbiAgICAgICAgICAgICAgaW1hZ2VWYWxzLCBpbWFnZUhlaWdodCwgaW1hZ2VXaWR0aCwgYmF0Y2hTdHJpZGUsIHJvd1N0cmlkZSxcbiAgICAgICAgICAgICAgY29sU3RyaWRlLCBiYXRjaCwgeUNlaWwsIHhDZWlsLCBjaGFubmVsLCBmaWxsVmFsdWUpO1xuICAvLyBmKHgsIHkpID0gKHlDZWlsIC0geSkgLyAoeUNlaWwgLSB5Rmxvb3IpICogZih4LCB5Rmxvb3IpXG4gIC8vICAgICAgICAgKyAoeSAtIHlGbG9vcikgLyAoeUNlaWwgLSB5Rmxvb3IpICogZih4LCB5Q2VpbClcbiAgcmV0dXJuICh5Q2VpbCAtIHkpICogdmFsdWVZRmxvb3IgKyAoeSAtIHlGbG9vcikgKiB2YWx1ZVlDZWlsO1xufVxuIl19","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the License);\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unique } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { uniqueImpl } from './Unique_impl';\nexport function unique(args) {\n const { inputs, attrs, backend } = args;\n const { axis } = attrs;\n const { x } = inputs;\n assertNotComplex(x, 'unique');\n const values = backend.data.get(x.dataId).values;\n const { outputValues, outputShape, indices } = uniqueImpl(values, axis, x.shape, x.dtype);\n return [\n backend.makeTensorInfo(outputShape, x.dtype, outputValues),\n backend.makeTensorInfo([indices.length], 'int32', indices),\n ];\n}\nexport const uniqueConfig = {\n kernelName: Unique,\n backendName: 'cpu',\n kernelFunc: unique,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9VbmlxdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxNQUFNLEVBQTRCLE1BQU0sdUJBQXVCLENBQUM7QUFHOUcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsSUFBeUU7SUFFM0UsTUFBTSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFDckIsTUFBTSxFQUFDLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUNuQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFOUIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxNQUFNLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUMsR0FDdEMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsT0FBTztRQUNMLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztLQUMzRCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBaUI7SUFDeEMsVUFBVSxFQUFFLE1BQU07SUFDbEIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLE1BQStCO0NBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqL1xuXG5pbXBvcnQge0tlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29ySW5mbywgVW5pcXVlLCBVbmlxdWVBdHRycywgVW5pcXVlSW5wdXRzfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge01hdGhCYWNrZW5kQ1BVfSBmcm9tICcuLi9iYWNrZW5kX2NwdSc7XG5pbXBvcnQge2Fzc2VydE5vdENvbXBsZXh9IGZyb20gJy4uL2NwdV91dGlsJztcblxuaW1wb3J0IHt1bmlxdWVJbXBsfSBmcm9tICcuL1VuaXF1ZV9pbXBsJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZShcbiAgICBhcmdzOiB7aW5wdXRzOiBVbmlxdWVJbnB1dHMsIGF0dHJzOiBVbmlxdWVBdHRycywgYmFja2VuZDogTWF0aEJhY2tlbmRDUFV9KTpcbiAgICBUZW5zb3JJbmZvW10ge1xuICBjb25zdCB7aW5wdXRzLCBhdHRycywgYmFja2VuZH0gPSBhcmdzO1xuICBjb25zdCB7YXhpc30gPSBhdHRycztcbiAgY29uc3Qge3h9ID0gaW5wdXRzO1xuICBhc3NlcnROb3RDb21wbGV4KHgsICd1bmlxdWUnKTtcblxuICBjb25zdCB2YWx1ZXMgPSBiYWNrZW5kLmRhdGEuZ2V0KHguZGF0YUlkKS52YWx1ZXM7XG4gIGNvbnN0IHtvdXRwdXRWYWx1ZXMsIG91dHB1dFNoYXBlLCBpbmRpY2VzfSA9XG4gICAgICB1bmlxdWVJbXBsKHZhbHVlcywgYXhpcywgeC5zaGFwZSwgeC5kdHlwZSk7XG4gIHJldHVybiBbXG4gICAgYmFja2VuZC5tYWtlVGVuc29ySW5mbyhvdXRwdXRTaGFwZSwgeC5kdHlwZSwgb3V0cHV0VmFsdWVzKSxcbiAgICBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtpbmRpY2VzLmxlbmd0aF0sICdpbnQzMicsIGluZGljZXMpLFxuICBdO1xufVxuXG5leHBvcnQgY29uc3QgdW5pcXVlQ29uZmlnOiBLZXJuZWxDb25maWcgPSB7XG4gIGtlcm5lbE5hbWU6IFVuaXF1ZSxcbiAgYmFja2VuZE5hbWU6ICdjcHUnLFxuICBrZXJuZWxGdW5jOiB1bmlxdWUgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jLFxufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Unpack } from '@tensorflow/tfjs-core';\nimport { reshape } from './Reshape';\nimport { slice } from './Slice';\nexport function unpack(args) {\n const { inputs, backend, attrs } = args;\n const { value } = inputs;\n let { axis } = attrs;\n if (axis < 0) {\n axis += value.shape.length;\n }\n const valueRank = value.shape.length;\n const num = value.shape[axis];\n const outShape = new Array(valueRank - 1);\n let outIndex = 0;\n for (let i = 0; i < valueRank; i++) {\n if (i !== axis) {\n outShape[outIndex++] = value.shape[i];\n }\n }\n const begin = new Array(valueRank).fill(0);\n const size = value.shape.slice();\n size[axis] = 1;\n const res = new Array(num);\n for (let i = 0; i < res.length; i++) {\n begin[axis] = i;\n const tempRes = slice({ inputs: { x: value }, backend, attrs: { begin, size } });\n res[i] = reshape({ inputs: { x: tempRes }, backend, attrs: { shape: outShape } });\n backend.disposeIntermediateTensorInfo(tempRes);\n }\n return res;\n}\nexport const unpackConfig = {\n kernelName: Unpack,\n backendName: 'cpu',\n kernelFunc: unpack\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5wYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9VbnBhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxNQUFNLEVBQTRCLE1BQU0sdUJBQXVCLENBQUM7QUFHOUcsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlCLE1BQU0sVUFBVSxNQUFNLENBQ2xCLElBQXlFO0lBRTNFLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFbkIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ1osSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0tBQzVCO0lBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFckMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLFFBQVEsR0FBYSxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2QsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztLQUNGO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUMsQ0FBQyxFQUFFLEtBQUssRUFBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQzNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFpQjtJQUN4QyxVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsTUFBK0I7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFVucGFjaywgVW5wYWNrQXR0cnMsIFVucGFja0lucHV0c30gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHtyZXNoYXBlfSBmcm9tICcuL1Jlc2hhcGUnO1xuaW1wb3J0IHtzbGljZX0gZnJvbSAnLi9TbGljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnBhY2soXG4gICAgYXJnczoge2lucHV0czogVW5wYWNrSW5wdXRzLCBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSwgYXR0cnM6IFVucGFja0F0dHJzfSk6XG4gICAgVGVuc29ySW5mb1tdIHtcbiAgY29uc3Qge2lucHV0cywgYmFja2VuZCwgYXR0cnN9ID0gYXJncztcbiAgY29uc3Qge3ZhbHVlfSA9IGlucHV0cztcbiAgbGV0IHtheGlzfSA9IGF0dHJzO1xuXG4gIGlmIChheGlzIDwgMCkge1xuICAgIGF4aXMgKz0gdmFsdWUuc2hhcGUubGVuZ3RoO1xuICB9XG5cbiAgY29uc3QgdmFsdWVSYW5rID0gdmFsdWUuc2hhcGUubGVuZ3RoO1xuXG4gIGNvbnN0IG51bSA9IHZhbHVlLnNoYXBlW2F4aXNdO1xuICBjb25zdCBvdXRTaGFwZTogbnVtYmVyW10gPSBuZXcgQXJyYXkodmFsdWVSYW5rIC0gMSk7XG4gIGxldCBvdXRJbmRleCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVSYW5rOyBpKyspIHtcbiAgICBpZiAoaSAhPT0gYXhpcykge1xuICAgICAgb3V0U2hhcGVbb3V0SW5kZXgrK10gPSB2YWx1ZS5zaGFwZVtpXTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBiZWdpbiA9IG5ldyBBcnJheSh2YWx1ZVJhbmspLmZpbGwoMCk7XG4gIGNvbnN0IHNpemUgPSB2YWx1ZS5zaGFwZS5zbGljZSgpO1xuICBzaXplW2F4aXNdID0gMTtcbiAgY29uc3QgcmVzID0gbmV3IEFycmF5KG51bSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYmVnaW5bYXhpc10gPSBpO1xuICAgIGNvbnN0IHRlbXBSZXMgPSBzbGljZSh7aW5wdXRzOiB7eDogdmFsdWV9LCBiYWNrZW5kLCBhdHRyczoge2JlZ2luLCBzaXplfX0pO1xuICAgIHJlc1tpXSA9IHJlc2hhcGUoe2lucHV0czoge3g6IHRlbXBSZXN9LCBiYWNrZW5kLCBhdHRyczoge3NoYXBlOiBvdXRTaGFwZX19KTtcbiAgICBiYWNrZW5kLmRpc3Bvc2VJbnRlcm1lZGlhdGVUZW5zb3JJbmZvKHRlbXBSZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGNvbnN0IHVucGFja0NvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBVbnBhY2ssXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogdW5wYWNrIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { UnsortedSegmentSum, util } from '@tensorflow/tfjs-core';\nimport { assertNotComplex } from '../cpu_util';\nimport { cast } from './Cast';\nimport { equal } from './Equal';\nimport { expandDims } from './ExpandDims';\nimport { multiply } from './Multiply';\nimport { pack } from './Pack';\nimport { sum } from './Sum';\nexport function unsortedSegmentSum(args) {\n const { inputs, backend, attrs } = args;\n const { x, segmentIds } = inputs;\n const { numSegments } = attrs;\n assertNotComplex(x, 'unsortedSegmentSum');\n const xRank = x.shape.length;\n const segmentIdsRank = segmentIds.shape.length;\n const res = [];\n const intermediates = [];\n // Reshape the segment id's so that they can be broadcast with\n // x. The new shape should be [segmentIds.shape, 1, ..., 1]\n const numIters = xRank - segmentIdsRank;\n let $segmentIds = segmentIds;\n for (let i = 0; i < numIters; ++i) {\n const expanded = expandDims({ inputs: { input: $segmentIds }, backend, attrs: { dim: i + 1 } });\n $segmentIds = expanded;\n intermediates.push(expanded);\n }\n for (let i = 0; i < numSegments; ++i) {\n const scalarValue = util.createScalarValue(i, 'int32');\n const segmentId = backend.makeTensorInfo([], 'int32', scalarValue);\n const mask = equal({ inputs: { a: segmentId, b: $segmentIds }, backend });\n const maskCasted = cast({ inputs: { x: mask }, backend, attrs: { dtype: 'float32' } });\n const mul = multiply({ inputs: { a: maskCasted, b: x }, backend });\n const sumTensorInfo = sum({ inputs: { x: mul }, backend, attrs: { axis: 0, keepDims: false } });\n res.push(sumTensorInfo);\n intermediates.push(segmentId);\n intermediates.push(mask);\n intermediates.push(maskCasted);\n intermediates.push(mul);\n intermediates.push(sumTensorInfo);\n }\n const result = pack({ inputs: res, backend, attrs: { axis: 0 } });\n intermediates.forEach(t => backend.disposeIntermediateTensorInfo(t));\n return result;\n}\nexport const unsortedSegmentSumConfig = {\n kernelName: UnsortedSegmentSum,\n backendName: 'cpu',\n kernelFunc: unsortedSegmentSum\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zb3J0ZWRTZWdtZW50U3VtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLWNwdS9zcmMva2VybmVscy9VbnNvcnRlZFNlZ21lbnRTdW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUF1QyxrQkFBa0IsRUFBcUQsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHeEosT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUlsQztJQUNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQztJQUN0QyxNQUFNLEVBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsS0FBSyxDQUFDO0lBRTVCLGdCQUFnQixDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sYUFBYSxHQUFpQixFQUFFLENBQUM7SUFFdkMsOERBQThEO0lBQzlELDJEQUEyRDtJQUMzRCxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsY0FBYyxDQUFDO0lBQ3hDLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FDdkIsRUFBQyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ2xFLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDdkIsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5QjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUN4QyxDQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRSxNQUFNLElBQUksR0FDTixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUNaLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FDTCxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBZSxDQUFDO1FBQ3JFLE1BQU0sYUFBYSxHQUNmLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEIsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQztJQUU5RCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFpQjtJQUNwRCxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxrQkFBMkM7Q0FDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtLZXJuZWxDb25maWcsIEtlcm5lbEZ1bmMsIFRlbnNvckluZm8sIFVuc29ydGVkU2VnbWVudFN1bSwgVW5zb3J0ZWRTZWdtZW50U3VtQXR0cnMsIFVuc29ydGVkU2VnbWVudFN1bUlucHV0cywgdXRpbH0gZnJvbSAnQHRlbnNvcmZsb3cvdGZqcy1jb3JlJztcblxuaW1wb3J0IHtNYXRoQmFja2VuZENQVX0gZnJvbSAnLi4vYmFja2VuZF9jcHUnO1xuaW1wb3J0IHthc3NlcnROb3RDb21wbGV4fSBmcm9tICcuLi9jcHVfdXRpbCc7XG5pbXBvcnQge2Nhc3R9IGZyb20gJy4vQ2FzdCc7XG5pbXBvcnQge2VxdWFsfSBmcm9tICcuL0VxdWFsJztcbmltcG9ydCB7ZXhwYW5kRGltc30gZnJvbSAnLi9FeHBhbmREaW1zJztcbmltcG9ydCB7bXVsdGlwbHl9IGZyb20gJy4vTXVsdGlwbHknO1xuaW1wb3J0IHtwYWNrfSBmcm9tICcuL1BhY2snO1xuaW1wb3J0IHtzdW19IGZyb20gJy4vU3VtJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVuc29ydGVkU2VnbWVudFN1bShhcmdzOiB7XG4gIGlucHV0czogVW5zb3J0ZWRTZWdtZW50U3VtSW5wdXRzLFxuICBiYWNrZW5kOiBNYXRoQmFja2VuZENQVSxcbiAgYXR0cnM6IFVuc29ydGVkU2VnbWVudFN1bUF0dHJzXG59KTogVGVuc29ySW5mbyB7XG4gIGNvbnN0IHtpbnB1dHMsIGJhY2tlbmQsIGF0dHJzfSA9IGFyZ3M7XG4gIGNvbnN0IHt4LCBzZWdtZW50SWRzfSA9IGlucHV0cztcbiAgY29uc3Qge251bVNlZ21lbnRzfSA9IGF0dHJzO1xuXG4gIGFzc2VydE5vdENvbXBsZXgoeCwgJ3Vuc29ydGVkU2VnbWVudFN1bScpO1xuXG4gIGNvbnN0IHhSYW5rID0geC5zaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHNlZ21lbnRJZHNSYW5rID0gc2VnbWVudElkcy5zaGFwZS5sZW5ndGg7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBjb25zdCBpbnRlcm1lZGlhdGVzOiBUZW5zb3JJbmZvW10gPSBbXTtcblxuICAvLyBSZXNoYXBlIHRoZSBzZWdtZW50IGlkJ3Mgc28gdGhhdCB0aGV5IGNhbiBiZSBicm9hZGNhc3Qgd2l0aFxuICAvLyB4LiBUaGUgbmV3IHNoYXBlIHNob3VsZCBiZSBbc2VnbWVudElkcy5zaGFwZSwgMSwgLi4uLCAxXVxuICBjb25zdCBudW1JdGVycyA9IHhSYW5rIC0gc2VnbWVudElkc1Jhbms7XG4gIGxldCAkc2VnbWVudElkcyA9IHNlZ21lbnRJZHM7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1JdGVyczsgKytpKSB7XG4gICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmREaW1zKFxuICAgICAgICB7aW5wdXRzOiB7aW5wdXQ6ICRzZWdtZW50SWRzfSwgYmFja2VuZCwgYXR0cnM6IHtkaW06IGkgKyAxfX0pO1xuICAgICRzZWdtZW50SWRzID0gZXhwYW5kZWQ7XG4gICAgaW50ZXJtZWRpYXRlcy5wdXNoKGV4cGFuZGVkKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtU2VnbWVudHM7ICsraSkge1xuICAgIGNvbnN0IHNjYWxhclZhbHVlID0gdXRpbC5jcmVhdGVTY2FsYXJWYWx1ZShcbiAgICAgIGkgYXMgdW5rbm93biBhcyAnaW50MzInLCAnaW50MzInKTtcbiAgICBjb25zdCBzZWdtZW50SWQgPSBiYWNrZW5kLm1ha2VUZW5zb3JJbmZvKFtdLCAnaW50MzInLCBzY2FsYXJWYWx1ZSk7XG4gICAgY29uc3QgbWFzayA9XG4gICAgICAgIGVxdWFsKHtpbnB1dHM6IHthOiBzZWdtZW50SWQsIGI6ICRzZWdtZW50SWRzfSwgYmFja2VuZH0pIGFzIFRlbnNvckluZm87XG4gICAgY29uc3QgbWFza0Nhc3RlZCA9XG4gICAgICAgIGNhc3Qoe2lucHV0czoge3g6IG1hc2t9LCBiYWNrZW5kLCBhdHRyczoge2R0eXBlOiAnZmxvYXQzMid9fSk7XG4gICAgY29uc3QgbXVsID1cbiAgICAgICAgbXVsdGlwbHkoe2lucHV0czoge2E6IG1hc2tDYXN0ZWQsIGI6IHh9LCBiYWNrZW5kfSkgYXMgVGVuc29ySW5mbztcbiAgICBjb25zdCBzdW1UZW5zb3JJbmZvID1cbiAgICAgICAgc3VtKHtpbnB1dHM6IHt4OiBtdWx9LCBiYWNrZW5kLCBhdHRyczoge2F4aXM6IDAsIGtlZXBEaW1zOiBmYWxzZX19KTtcbiAgICByZXMucHVzaChzdW1UZW5zb3JJbmZvKTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2goc2VnbWVudElkKTtcbiAgICBpbnRlcm1lZGlhdGVzLnB1c2gobWFzayk7XG4gICAgaW50ZXJtZWRpYXRlcy5wdXNoKG1hc2tDYXN0ZWQpO1xuICAgIGludGVybWVkaWF0ZXMucHVzaChtdWwpO1xuICAgIGludGVybWVkaWF0ZXMucHVzaChzdW1UZW5zb3JJbmZvKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHBhY2soe2lucHV0czogcmVzLCBiYWNrZW5kLCBhdHRyczoge2F4aXM6IDB9fSk7XG5cbiAgaW50ZXJtZWRpYXRlcy5mb3JFYWNoKHQgPT4gYmFja2VuZC5kaXNwb3NlSW50ZXJtZWRpYXRlVGVuc29ySW5mbyh0KSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IHVuc29ydGVkU2VnbWVudFN1bUNvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBVbnNvcnRlZFNlZ21lbnRTdW0sXG4gIGJhY2tlbmROYW1lOiAnY3B1JyxcbiAga2VybmVsRnVuYzogdW5zb3J0ZWRTZWdtZW50U3VtIGFzIHVua25vd24gYXMgS2VybmVsRnVuY1xufTtcbiJdfQ==","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// We explicitly import the modular kernels so they get registered in the\n// global registry when we compile the library. A modular build would replace\n// the contents of this file and import only the kernels that are needed.\nimport { registerKernel } from '@tensorflow/tfjs-core';\nimport { _fusedMatMulConfig } from './kernels/_FusedMatMul';\nimport { absConfig } from './kernels/Abs';\nimport { acosConfig } from './kernels/Acos';\nimport { acoshConfig } from './kernels/Acosh';\nimport { addConfig } from './kernels/Add';\nimport { addNConfig } from './kernels/AddN';\nimport { allConfig } from './kernels/All';\nimport { anyConfig } from './kernels/Any';\nimport { argMaxConfig } from './kernels/ArgMax';\nimport { argMinConfig } from './kernels/ArgMin';\nimport { asinConfig } from './kernels/Asin';\nimport { asinhConfig } from './kernels/Asinh';\nimport { atanConfig } from './kernels/Atan';\nimport { atan2Config } from './kernels/Atan2';\nimport { atanhConfig } from './kernels/Atanh';\nimport { avgPoolConfig } from './kernels/AvgPool';\nimport { avgPool3DConfig } from './kernels/AvgPool3D';\nimport { avgPool3DGradConfig } from './kernels/AvgPool3DGrad';\nimport { avgPoolGradConfig } from './kernels/AvgPoolGrad';\nimport { batchMatMulConfig } from './kernels/BatchMatMul';\nimport { batchNormConfig } from './kernels/BatchNorm';\nimport { batchToSpaceNDConfig } from './kernels/BatchToSpaceND';\nimport { bincountConfig } from './kernels/Bincount';\nimport { bitwiseAndConfig } from './kernels/BitwiseAnd';\nimport { broadcastArgsConfig } from './kernels/BroadcastArgs';\nimport { castConfig } from './kernels/Cast';\nimport { ceilConfig } from './kernels/Ceil';\nimport { clipByValueConfig } from './kernels/ClipByValue';\nimport { complexConfig } from './kernels/Complex';\nimport { complexAbsConfig } from './kernels/ComplexAbs';\nimport { concatConfig } from './kernels/Concat';\nimport { conv2DConfig } from './kernels/Conv2D';\nimport { conv2DBackpropFilterConfig } from './kernels/Conv2DBackpropFilter';\nimport { conv2DBackpropInputConfig } from './kernels/Conv2DBackpropInput';\nimport { conv3DConfig } from './kernels/Conv3D';\nimport { conv3DBackpropFilterV2Config } from './kernels/Conv3DBackpropFilterV2';\nimport { conv3DBackpropInputV2Config } from './kernels/Conv3DBackpropInputV2';\nimport { cosConfig } from './kernels/Cos';\nimport { coshConfig } from './kernels/Cosh';\nimport { cropAndResizeConfig } from './kernels/CropAndResize';\nimport { cumprodConfig } from './kernels/Cumprod';\nimport { cumsumConfig } from './kernels/Cumsum';\nimport { denseBincountConfig } from './kernels/DenseBincount';\nimport { depthToSpaceConfig } from './kernels/DepthToSpace';\nimport { depthwiseConv2dNativeConfig } from './kernels/DepthwiseConv2dNative';\nimport { depthwiseConv2dNativeBackpropFilterConfig } from './kernels/DepthwiseConv2dNativeBackpropFilter';\nimport { depthwiseConv2dNativeBackpropInputConfig } from './kernels/DepthwiseConv2dNativeBackpropInput';\nimport { diagConfig } from './kernels/Diag';\nimport { dilation2DConfig } from './kernels/Dilation2D';\nimport { dilation2DBackpropFilterConfig } from './kernels/Dilation2DBackpropFilter';\nimport { dilation2DBackpropInputConfig } from './kernels/Dilation2DBackpropInput';\nimport { drawConfig } from './kernels/Draw';\nimport { einsumConfig } from './kernels/Einsum';\nimport { eluConfig } from './kernels/Elu';\nimport { eluGradConfig } from './kernels/EluGrad';\nimport { equalConfig } from './kernels/Equal';\nimport { erfConfig } from './kernels/Erf';\nimport { expConfig } from './kernels/Exp';\nimport { expandDimsConfig } from './kernels/ExpandDims';\nimport { expm1Config } from './kernels/Expm1';\nimport { fftConfig } from './kernels/FFT';\nimport { fillConfig } from './kernels/Fill';\nimport { flipLeftRightConfig } from './kernels/FlipLeftRight';\nimport { floorConfig } from './kernels/Floor';\nimport { floorDivConfig } from './kernels/FloorDiv';\nimport { fusedConv2DConfig } from './kernels/FusedConv2D';\nimport { fusedDepthwiseConv2DConfig } from './kernels/FusedDepthwiseConv2D';\nimport { gatherNdConfig } from './kernels/GatherNd';\nimport { gatherV2Config } from './kernels/GatherV2';\nimport { greaterConfig } from './kernels/Greater';\nimport { greaterEqualConfig } from './kernels/GreaterEqual';\nimport { identityConfig } from './kernels/Identity';\nimport { ifftConfig } from './kernels/IFFT';\nimport { imagConfig } from './kernels/Imag';\nimport { isFiniteConfig } from './kernels/IsFinite';\nimport { isInfConfig } from './kernels/IsInf';\nimport { isNaNConfig } from './kernels/IsNaN';\nimport { leakyReluConfig } from './kernels/LeakyRelu';\nimport { lessConfig } from './kernels/Less';\nimport { lessEqualConfig } from './kernels/LessEqual';\nimport { linSpaceConfig } from './kernels/LinSpace';\nimport { logConfig } from './kernels/Log';\nimport { log1pConfig } from './kernels/Log1p';\nimport { logicalAndConfig } from './kernels/LogicalAnd';\nimport { logicalNotConfig } from './kernels/LogicalNot';\nimport { logicalOrConfig } from './kernels/LogicalOr';\nimport { LRNConfig } from './kernels/LRN';\nimport { LRNGradConfig } from './kernels/LRNGrad';\nimport { maxConfig } from './kernels/Max';\nimport { maximumConfig } from './kernels/Maximum';\nimport { maxPoolConfig } from './kernels/MaxPool';\nimport { maxPool3DConfig } from './kernels/MaxPool3D';\nimport { maxPool3DGradConfig } from './kernels/MaxPool3DGrad';\nimport { maxPoolGradConfig } from './kernels/MaxPoolGrad';\nimport { maxPoolWithArgmaxConfig } from './kernels/MaxPoolWithArgmax';\nimport { meanConfig } from './kernels/Mean';\nimport { minConfig } from './kernels/Min';\nimport { minimumConfig } from './kernels/Minimum';\nimport { mirrorPadConfig } from './kernels/MirrorPad';\nimport { modConfig } from './kernels/Mod';\nimport { multinomialConfig } from './kernels/Multinomial';\nimport { multiplyConfig } from './kernels/Multiply';\nimport { negConfig } from './kernels/Neg';\nimport { nonMaxSuppressionV3Config } from './kernels/NonMaxSuppressionV3';\nimport { nonMaxSuppressionV4Config } from './kernels/NonMaxSuppressionV4';\nimport { nonMaxSuppressionV5Config } from './kernels/NonMaxSuppressionV5';\nimport { notEqualConfig } from './kernels/NotEqual';\nimport { oneHotConfig } from './kernels/OneHot';\nimport { onesLikeConfig } from './kernels/OnesLike';\nimport { packConfig } from './kernels/Pack';\nimport { padV2Config } from './kernels/PadV2';\nimport { powConfig } from './kernels/Pow';\nimport { preluConfig } from './kernels/Prelu';\nimport { prodConfig } from './kernels/Prod';\nimport { raggedGatherConfig } from './kernels/RaggedGather';\nimport { raggedRangeConfig } from './kernels/RaggedRange';\nimport { raggedTensorToTensorConfig } from './kernels/RaggedTensorToTensor';\nimport { rangeConfig } from './kernels/Range';\nimport { realConfig } from './kernels/Real';\nimport { realDivConfig } from './kernels/RealDiv';\nimport { reciprocalConfig } from './kernels/Reciprocal';\nimport { reluConfig } from './kernels/Relu';\nimport { relu6Config } from './kernels/Relu6';\nimport { reshapeConfig } from './kernels/Reshape';\nimport { resizeBilinearConfig } from './kernels/ResizeBilinear';\nimport { resizeBilinearGradConfig } from './kernels/ResizeBilinearGrad';\nimport { resizeNearestNeighborConfig } from './kernels/ResizeNearestNeighbor';\nimport { resizeNearestNeighborGradConfig } from './kernels/ResizeNearestNeighborGrad';\nimport { reverseConfig } from './kernels/Reverse';\nimport { rotateWithOffsetConfig } from './kernels/RotateWithOffset';\nimport { roundConfig } from './kernels/Round';\nimport { rsqrtConfig } from './kernels/Rsqrt';\nimport { scatterNdConfig } from './kernels/ScatterNd';\nimport { searchSortedConfig } from './kernels/SearchSorted';\nimport { selectConfig } from './kernels/Select';\nimport { seluConfig } from './kernels/Selu';\nimport { sigmoidConfig } from './kernels/Sigmoid';\nimport { signConfig } from './kernels/Sign';\nimport { sinConfig } from './kernels/Sin';\nimport { sinhConfig } from './kernels/Sinh';\nimport { sliceConfig } from './kernels/Slice';\nimport { softmaxConfig } from './kernels/Softmax';\nimport { softplusConfig } from './kernels/Softplus';\nimport { spaceToBatchNDConfig } from './kernels/SpaceToBatchND';\nimport { sparseFillEmptyRowsConfig } from './kernels/SparseFillEmptyRows';\nimport { sparseReshapeConfig } from './kernels/SparseReshape';\nimport { sparseSegmentMeanConfig } from './kernels/SparseSegmentMean';\nimport { sparseSegmentSumConfig } from './kernels/SparseSegmentSum';\nimport { sparseToDenseConfig } from './kernels/SparseToDense';\nimport { splitVConfig } from './kernels/SplitV';\nimport { sqrtConfig } from './kernels/Sqrt';\nimport { squareConfig } from './kernels/Square';\nimport { squaredDifferenceConfig } from './kernels/SquaredDifference';\nimport { staticRegexReplaceConfig } from './kernels/StaticRegexReplace';\nimport { stepConfig } from './kernels/Step';\nimport { stridedSliceConfig } from './kernels/StridedSlice';\nimport { stringNGramsConfig } from './kernels/StringNGrams';\nimport { stringSplitConfig } from './kernels/StringSplit';\nimport { stringToHashBucketFastConfig } from './kernels/StringToHashBucketFast';\nimport { subConfig } from './kernels/Sub';\nimport { sumConfig } from './kernels/Sum';\nimport { tanConfig } from './kernels/Tan';\nimport { tanhConfig } from './kernels/Tanh';\nimport { tensorScatterUpdateConfig } from './kernels/TensorScatterUpdate';\nimport { tileConfig } from './kernels/Tile';\nimport { topKConfig } from './kernels/TopK';\nimport { transformConfig } from './kernels/Transform';\nimport { transposeConfig } from './kernels/Transpose';\nimport { uniqueConfig } from './kernels/Unique';\nimport { unpackConfig } from './kernels/Unpack';\nimport { unsortedSegmentSumConfig } from './kernels/UnsortedSegmentSum';\nimport { zerosLikeConfig } from './kernels/ZerosLike';\n// List all kernel configs here\nconst kernelConfigs = [\n _fusedMatMulConfig,\n absConfig,\n acosConfig,\n acoshConfig,\n addConfig,\n addNConfig,\n allConfig,\n anyConfig,\n argMaxConfig,\n argMinConfig,\n asinConfig,\n asinhConfig,\n atanConfig,\n atan2Config,\n atanhConfig,\n avgPoolConfig,\n avgPool3DConfig,\n avgPool3DGradConfig,\n avgPoolGradConfig,\n batchMatMulConfig,\n batchNormConfig,\n batchToSpaceNDConfig,\n bincountConfig,\n bitwiseAndConfig,\n broadcastArgsConfig,\n castConfig,\n ceilConfig,\n clipByValueConfig,\n complexConfig,\n complexAbsConfig,\n concatConfig,\n conv2DConfig,\n conv2DBackpropFilterConfig,\n conv2DBackpropInputConfig,\n conv3DConfig,\n conv3DBackpropFilterV2Config,\n conv3DBackpropInputV2Config,\n cosConfig,\n coshConfig,\n cropAndResizeConfig,\n cumprodConfig,\n cumsumConfig,\n denseBincountConfig,\n depthToSpaceConfig,\n depthwiseConv2dNativeConfig,\n depthwiseConv2dNativeBackpropFilterConfig,\n depthwiseConv2dNativeBackpropInputConfig,\n diagConfig,\n dilation2DConfig,\n dilation2DBackpropFilterConfig,\n dilation2DBackpropInputConfig,\n drawConfig,\n einsumConfig,\n eluConfig,\n eluGradConfig,\n equalConfig,\n erfConfig,\n expConfig,\n expandDimsConfig,\n expm1Config,\n fftConfig,\n fillConfig,\n flipLeftRightConfig,\n floorConfig,\n floorDivConfig,\n fusedConv2DConfig,\n fusedDepthwiseConv2DConfig,\n gatherNdConfig,\n gatherV2Config,\n greaterConfig,\n greaterEqualConfig,\n identityConfig,\n ifftConfig,\n imagConfig,\n isFiniteConfig,\n isInfConfig,\n isNaNConfig,\n leakyReluConfig,\n lessConfig,\n lessEqualConfig,\n linSpaceConfig,\n logConfig,\n log1pConfig,\n logicalAndConfig,\n logicalNotConfig,\n logicalOrConfig,\n LRNConfig,\n LRNGradConfig,\n maxConfig,\n maximumConfig,\n maxPoolConfig,\n maxPool3DConfig,\n maxPool3DGradConfig,\n maxPoolGradConfig,\n maxPoolWithArgmaxConfig,\n meanConfig,\n minConfig,\n minimumConfig,\n mirrorPadConfig,\n modConfig,\n multinomialConfig,\n multiplyConfig,\n negConfig,\n nonMaxSuppressionV3Config,\n nonMaxSuppressionV4Config,\n nonMaxSuppressionV5Config,\n notEqualConfig,\n oneHotConfig,\n onesLikeConfig,\n packConfig,\n padV2Config,\n powConfig,\n preluConfig,\n prodConfig,\n raggedGatherConfig,\n raggedRangeConfig,\n raggedTensorToTensorConfig,\n rangeConfig,\n realConfig,\n realDivConfig,\n reciprocalConfig,\n reluConfig,\n relu6Config,\n reshapeConfig,\n resizeBilinearConfig,\n resizeBilinearGradConfig,\n resizeNearestNeighborConfig,\n resizeNearestNeighborGradConfig,\n reverseConfig,\n rotateWithOffsetConfig,\n roundConfig,\n rsqrtConfig,\n scatterNdConfig,\n searchSortedConfig,\n selectConfig,\n seluConfig,\n sigmoidConfig,\n signConfig,\n sinConfig,\n sinhConfig,\n sliceConfig,\n softmaxConfig,\n softplusConfig,\n spaceToBatchNDConfig,\n sparseFillEmptyRowsConfig,\n sparseReshapeConfig,\n sparseSegmentMeanConfig,\n sparseSegmentSumConfig,\n sparseToDenseConfig,\n splitVConfig,\n sqrtConfig,\n squareConfig,\n squaredDifferenceConfig,\n staticRegexReplaceConfig,\n stepConfig,\n stridedSliceConfig,\n stringNGramsConfig,\n stringSplitConfig,\n stringToHashBucketFastConfig,\n subConfig,\n sumConfig,\n tanConfig,\n tanhConfig,\n tensorScatterUpdateConfig,\n tileConfig,\n topKConfig,\n transformConfig,\n transposeConfig,\n uniqueConfig,\n unpackConfig,\n unsortedSegmentSumConfig,\n zerosLikeConfig\n];\nfor (const kernelConfig of kernelConfigs) {\n registerKernel(kernelConfig);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfYWxsX2tlcm5lbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtY3B1L3NyYy9yZWdpc3Rlcl9hbGxfa2VybmVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCx5RUFBeUU7QUFDekUsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENB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QUFTO0lBQ1QsV0FBVztJQUNYLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLDBCQUEwQjtJQUMxQixXQUFXO0lBQ1gsVUFBVTtJQUNWLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsK0JBQStCO0lBQy9CLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsV0FBVztJQUNYLFdBQVc7SUFDWCxlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixVQUFVO0lBQ1YsYUFBYTtJQUNiLFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsY0FBYztJQUNkLG9CQUFvQjtJQUNwQix5QkFBeUI7SUFDekIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixVQUFVO0lBQ1YsWUFBWTtJQUNaLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLDRCQUE0QjtJQUM1QixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1YseUJBQXlCO0lBQ3pCLFVBQVU7SUFDVixVQUFVO0lBQ1YsZUFBZTtJQUNmLGVBQWU7SUFDZixZQUFZO0lBQ1osWUFBWTtJQUNaLHdCQUF3QjtJQUN4QixlQUFlO0NBQ2hCLENBQUM7QUFFRixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtJQUN4QyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vLyBXZSBleHBsaWNpdGx5IGltcG9ydCB0aGUgbW9kdWxhciBrZXJuZWxzIHNvIHRoZXkgZ2V0IHJlZ2lzdGVyZWQgaW4gdGhlXG4vLyBnbG9iYWwgcmVnaXN0cnkgd2hlbiB3ZSBjb21waWxlIHRoZSBsaWJyYXJ5LiBBIG1vZHVsYXIgYnVpbGQgd291bGQgcmVwbGFjZVxuLy8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhbmQgaW1wb3J0IG9ubHkgdGhlIGtlcm5lbHMgdGhhdCBhcmUgbmVlZGVkLlxuaW1wb3J0IHtLZXJuZWxDb25maWcsIHJlZ2lzdGVyS2VybmVsfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge19mdXNlZE1hdE11bENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL19GdXNlZE1hdE11bCc7XG5pbXBvcnQge2Fic0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Ficyc7XG5pbXBvcnQge2Fjb3NDb25maWd9IGZyb20gJy4va2VybmVscy9BY29zJztcbmltcG9ydCB7YWNvc2hDb25maWd9IGZyb20gJy4va2VybmVscy9BY29zaCc7XG5pbXBvcnQge2FkZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FkZCc7XG5pbXBvcnQge2FkZE5Db25maWd9IGZyb20gJy4va2VybmVscy9BZGROJztcbmltcG9ydCB7YWxsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQWxsJztcbmltcG9ydCB7YW55Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQW55JztcbmltcG9ydCB7YXJnTWF4Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXJnTWF4JztcbmltcG9ydCB7YXJnTWluQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXJnTWluJztcbmltcG9ydCB7YXNpbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FzaW4nO1xuaW1wb3J0IHthc2luaENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0FzaW5oJztcbmltcG9ydCB7YXRhbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F0YW4nO1xuaW1wb3J0IHthdGFuMkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F0YW4yJztcbmltcG9ydCB7YXRhbmhDb25maWd9IGZyb20gJy4va2VybmVscy9BdGFuaCc7XG5pbXBvcnQge2F2Z1Bvb2xDb25maWd9IGZyb20gJy4va2VybmVscy9BdmdQb29sJztcbmltcG9ydCB7YXZnUG9vbDNEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQXZnUG9vbDNEJztcbmltcG9ydCB7YXZnUG9vbDNER3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F2Z1Bvb2wzREdyYWQnO1xuaW1wb3J0IHthdmdQb29sR3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0F2Z1Bvb2xHcmFkJztcbmltcG9ydCB7YmF0Y2hNYXRNdWxDb25maWd9IGZyb20gJy4va2VybmVscy9CYXRjaE1hdE11bCc7XG5pbXBvcnQge2JhdGNoTm9ybUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0JhdGNoTm9ybSc7XG5pbXBvcnQge2JhdGNoVG9TcGFjZU5EQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQmF0Y2hUb1NwYWNlTkQnO1xuaW1wb3J0IHtiaW5jb3VudENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0JpbmNvdW50JztcbmltcG9ydCB7Yml0d2lzZUFuZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0JpdHdpc2VBbmQnO1xuaW1wb3J0IHticm9hZGNhc3RBcmdzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQnJvYWRjYXN0QXJncyc7XG5pbXBvcnQge2Nhc3RDb25maWd9IGZyb20gJy4va2VybmVscy9DYXN0JztcbmltcG9ydCB7Y2VpbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NlaWwnO1xuaW1wb3J0IHtjbGlwQnlWYWx1ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NsaXBCeVZhbHVlJztcbmltcG9ydCB7Y29tcGxleENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbXBsZXgnO1xuaW1wb3J0IHtjb21wbGV4QWJzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29tcGxleEFicyc7XG5pbXBvcnQge2NvbmNhdENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbmNhdCc7XG5pbXBvcnQge2NvbnYyRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYyRCc7XG5pbXBvcnQge2NvbnYyREJhY2twcm9wRmlsdGVyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29udjJEQmFja3Byb3BGaWx0ZXInO1xuaW1wb3J0IHtjb252MkRCYWNrcHJvcElucHV0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29udjJEQmFja3Byb3BJbnB1dCc7XG5pbXBvcnQge2NvbnYzRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0NvbnYzRCc7XG5pbXBvcnQge2NvbnYzREJhY2twcm9wRmlsdGVyVjJDb25maWd9IGZyb20gJy4va2VybmVscy9Db252M0RCYWNrcHJvcEZpbHRlclYyJztcbmltcG9ydCB7Y29udjNEQmFja3Byb3BJbnB1dFYyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29udjNEQmFja3Byb3BJbnB1dFYyJztcbmltcG9ydCB7Y29zQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ29zJztcbmltcG9ydCB7Y29zaENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Nvc2gnO1xuaW1wb3J0IHtjcm9wQW5kUmVzaXplQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ3JvcEFuZFJlc2l6ZSc7XG5pbXBvcnQge2N1bXByb2RDb25maWd9IGZyb20gJy4va2VybmVscy9DdW1wcm9kJztcbmltcG9ydCB7Y3Vtc3VtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvQ3Vtc3VtJztcbmltcG9ydCB7ZGVuc2VCaW5jb3VudENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlbnNlQmluY291bnQnO1xuaW1wb3J0IHtkZXB0aFRvU3BhY2VDb25maWd9IGZyb20gJy4va2VybmVscy9EZXB0aFRvU3BhY2UnO1xuaW1wb3J0IHtkZXB0aHdpc2VDb252MmROYXRpdmVDb25maWd9IGZyb20gJy4va2VybmVscy9EZXB0aHdpc2VDb252MmROYXRpdmUnO1xuaW1wb3J0IHtkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wRmlsdGVyJztcbmltcG9ydCB7ZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0RlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQnO1xuaW1wb3J0IHtkaWFnQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGlhZyc7XG5pbXBvcnQge2RpbGF0aW9uMkRDb25maWd9IGZyb20gJy4va2VybmVscy9EaWxhdGlvbjJEJztcbmltcG9ydCB7ZGlsYXRpb24yREJhY2twcm9wRmlsdGVyQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRGlsYXRpb24yREJhY2twcm9wRmlsdGVyJztcbmltcG9ydCB7ZGlsYXRpb24yREJhY2twcm9wSW5wdXRDb25maWd9IGZyb20gJy4va2VybmVscy9EaWxhdGlvbjJEQmFja3Byb3BJbnB1dCc7XG5pbXBvcnQge2RyYXdDb25maWd9IGZyb20gJy4va2VybmVscy9EcmF3JztcbmltcG9ydCB7ZWluc3VtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRWluc3VtJztcbmltcG9ydCB7ZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRWx1JztcbmltcG9ydCB7ZWx1R3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0VsdUdyYWQnO1xuaW1wb3J0IHtlcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0VxdWFsJztcbmltcG9ydCB7ZXJmQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXJmJztcbmltcG9ydCB7ZXhwQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRXhwJztcbmltcG9ydCB7ZXhwYW5kRGltc0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0V4cGFuZERpbXMnO1xuaW1wb3J0IHtleHBtMUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0V4cG0xJztcbmltcG9ydCB7ZmZ0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRkZUJztcbmltcG9ydCB7ZmlsbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0ZpbGwnO1xuaW1wb3J0IHtmbGlwTGVmdFJpZ2h0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmxpcExlZnRSaWdodCc7XG5pbXBvcnQge2Zsb29yQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRmxvb3InO1xuaW1wb3J0IHtmbG9vckRpdkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0Zsb29yRGl2JztcbmltcG9ydCB7ZnVzZWRDb252MkRDb25maWd9IGZyb20gJy4va2VybmVscy9GdXNlZENvbnYyRCc7XG5pbXBvcnQge2Z1c2VkRGVwdGh3aXNlQ29udjJEQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvRnVzZWREZXB0aHdpc2VDb252MkQnO1xuaW1wb3J0IHtnYXRoZXJOZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0dhdGhlck5kJztcbmltcG9ydCB7Z2F0aGVyVjJDb25maWd9IGZyb20gJy4va2VybmVscy9HYXRoZXJWMic7XG5pbXBvcnQge2dyZWF0ZXJDb25maWd9IGZyb20gJy4va2VybmVscy9HcmVhdGVyJztcbmltcG9ydCB7Z3JlYXRlckVxdWFsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvR3JlYXRlckVxdWFsJztcbmltcG9ydCB7aWRlbnRpdHlDb25maWd9IGZyb20gJy4va2VybmVscy9JZGVudGl0eSc7XG5pbXBvcnQge2lmZnRDb25maWd9IGZyb20gJy4va2VybmVscy9JRkZUJztcbmltcG9ydCB7aW1hZ0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0ltYWcnO1xuaW1wb3J0IHtpc0Zpbml0ZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0lzRmluaXRlJztcbmltcG9ydCB7aXNJbmZDb25maWd9IGZyb20gJy4va2VybmVscy9Jc0luZic7XG5pbXBvcnQge2lzTmFOQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvSXNOYU4nO1xuaW1wb3J0IHtsZWFreVJlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9MZWFreVJlbHUnO1xuaW1wb3J0IHtsZXNzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTGVzcyc7XG5pbXBvcnQge2xlc3NFcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xlc3NFcXVhbCc7XG5pbXBvcnQge2xpblNwYWNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTGluU3BhY2UnO1xuaW1wb3J0IHtsb2dDb25maWd9IGZyb20gJy4va2VybmVscy9Mb2cnO1xuaW1wb3J0IHtsb2cxcENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZzFwJztcbmltcG9ydCB7bG9naWNhbEFuZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZ2ljYWxBbmQnO1xuaW1wb3J0IHtsb2dpY2FsTm90Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTG9naWNhbE5vdCc7XG5pbXBvcnQge2xvZ2ljYWxPckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xvZ2ljYWxPcic7XG5pbXBvcnQge0xSTkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL0xSTic7XG5pbXBvcnQge0xSTkdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9MUk5HcmFkJztcbmltcG9ydCB7bWF4Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4JztcbmltcG9ydCB7bWF4aW11bUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heGltdW0nO1xuaW1wb3J0IHttYXhQb29sQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4UG9vbCc7XG5pbXBvcnQge21heFBvb2wzRENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01heFBvb2wzRCc7XG5pbXBvcnQge21heFBvb2wzREdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9NYXhQb29sM0RHcmFkJztcbmltcG9ydCB7bWF4UG9vbEdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9NYXhQb29sR3JhZCc7XG5pbXBvcnQge21heFBvb2xXaXRoQXJnbWF4Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWF4UG9vbFdpdGhBcmdtYXgnO1xuaW1wb3J0IHttZWFuQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWVhbic7XG5pbXBvcnQge21pbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL01pbic7XG5pbXBvcnQge21pbmltdW1Db25maWd9IGZyb20gJy4va2VybmVscy9NaW5pbXVtJztcbmltcG9ydCB7bWlycm9yUGFkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTWlycm9yUGFkJztcbmltcG9ydCB7bW9kQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTW9kJztcbmltcG9ydCB7bXVsdGlub21pYWxDb25maWd9IGZyb20gJy4va2VybmVscy9NdWx0aW5vbWlhbCc7XG5pbXBvcnQge211bHRpcGx5Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTXVsdGlwbHknO1xuaW1wb3J0IHtuZWdDb25maWd9IGZyb20gJy4va2VybmVscy9OZWcnO1xuaW1wb3J0IHtub25NYXhTdXBwcmVzc2lvblYzQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvTm9uTWF4U3VwcHJlc3Npb25WMyc7XG5pbXBvcnQge25vbk1heFN1cHByZXNzaW9uVjRDb25maWd9IGZyb20gJy4va2VybmVscy9Ob25NYXhTdXBwcmVzc2lvblY0JztcbmltcG9ydCB7bm9uTWF4U3VwcHJlc3Npb25WNUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL05vbk1heFN1cHByZXNzaW9uVjUnO1xuaW1wb3J0IHtub3RFcXVhbENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL05vdEVxdWFsJztcbmltcG9ydCB7b25lSG90Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvT25lSG90JztcbmltcG9ydCB7b25lc0xpa2VDb25maWd9IGZyb20gJy4va2VybmVscy9PbmVzTGlrZSc7XG5pbXBvcnQge3BhY2tDb25maWd9IGZyb20gJy4va2VybmVscy9QYWNrJztcbmltcG9ydCB7cGFkVjJDb25maWd9IGZyb20gJy4va2VybmVscy9QYWRWMic7XG5pbXBvcnQge3Bvd0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Bvdyc7XG5pbXBvcnQge3ByZWx1Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUHJlbHUnO1xuaW1wb3J0IHtwcm9kQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUHJvZCc7XG5pbXBvcnQge3JhZ2dlZEdhdGhlckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JhZ2dlZEdhdGhlcic7XG5pbXBvcnQge3JhZ2dlZFJhbmdlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmFnZ2VkUmFuZ2UnO1xuaW1wb3J0IHtyYWdnZWRUZW5zb3JUb1RlbnNvckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JhZ2dlZFRlbnNvclRvVGVuc29yJztcbmltcG9ydCB7cmFuZ2VDb25maWd9IGZyb20gJy4va2VybmVscy9SYW5nZSc7XG5pbXBvcnQge3JlYWxDb25maWd9IGZyb20gJy4va2VybmVscy9SZWFsJztcbmltcG9ydCB7cmVhbERpdkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JlYWxEaXYnO1xuaW1wb3J0IHtyZWNpcHJvY2FsQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUmVjaXByb2NhbCc7XG5pbXBvcnQge3JlbHVDb25maWd9IGZyb20gJy4va2VybmVscy9SZWx1JztcbmltcG9ydCB7cmVsdTZDb25maWd9IGZyb20gJy4va2VybmVscy9SZWx1Nic7XG5pbXBvcnQge3Jlc2hhcGVDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNoYXBlJztcbmltcG9ydCB7cmVzaXplQmlsaW5lYXJDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVCaWxpbmVhcic7XG5pbXBvcnQge3Jlc2l6ZUJpbGluZWFyR3JhZENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Jlc2l6ZUJpbGluZWFyR3JhZCc7XG5pbXBvcnQge3Jlc2l6ZU5lYXJlc3ROZWlnaGJvckNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1Jlc2l6ZU5lYXJlc3ROZWlnaGJvcic7XG5pbXBvcnQge3Jlc2l6ZU5lYXJlc3ROZWlnaGJvckdyYWRDb25maWd9IGZyb20gJy4va2VybmVscy9SZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkJztcbmltcG9ydCB7cmV2ZXJzZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JldmVyc2UnO1xuaW1wb3J0IHtyb3RhdGVXaXRoT2Zmc2V0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUm90YXRlV2l0aE9mZnNldCc7XG5pbXBvcnQge3JvdW5kQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvUm91bmQnO1xuaW1wb3J0IHtyc3FydENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1JzcXJ0JztcbmltcG9ydCB7c2NhdHRlck5kQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2NhdHRlck5kJztcbmltcG9ydCB7c2VhcmNoU29ydGVkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2VhcmNoU29ydGVkJztcbmltcG9ydCB7c2VsZWN0Q29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2VsZWN0JztcbmltcG9ydCB7c2VsdUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NlbHUnO1xuaW1wb3J0IHtzaWdtb2lkQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2lnbW9pZCc7XG5pbXBvcnQge3NpZ25Db25maWd9IGZyb20gJy4va2VybmVscy9TaWduJztcbmltcG9ydCB7c2luQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU2luJztcbmltcG9ydCB7c2luaENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NpbmgnO1xuaW1wb3J0IHtzbGljZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NsaWNlJztcbmltcG9ydCB7c29mdG1heENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NvZnRtYXgnO1xuaW1wb3J0IHtzb2Z0cGx1c0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NvZnRwbHVzJztcbmltcG9ydCB7c3BhY2VUb0JhdGNoTkRDb25maWd9IGZyb20gJy4va2VybmVscy9TcGFjZVRvQmF0Y2hORCc7XG5pbXBvcnQge3NwYXJzZUZpbGxFbXB0eVJvd3NDb25maWd9IGZyb20gJy4va2VybmVscy9TcGFyc2VGaWxsRW1wdHlSb3dzJztcbmltcG9ydCB7c3BhcnNlUmVzaGFwZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwYXJzZVJlc2hhcGUnO1xuaW1wb3J0IHtzcGFyc2VTZWdtZW50TWVhbkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwYXJzZVNlZ21lbnRNZWFuJztcbmltcG9ydCB7c3BhcnNlU2VnbWVudFN1bUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwYXJzZVNlZ21lbnRTdW0nO1xuaW1wb3J0IHtzcGFyc2VUb0RlbnNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3BhcnNlVG9EZW5zZSc7XG5pbXBvcnQge3NwbGl0VkNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1NwbGl0Vic7XG5pbXBvcnQge3NxcnRDb25maWd9IGZyb20gJy4va2VybmVscy9TcXJ0JztcbmltcG9ydCB7c3F1YXJlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3F1YXJlJztcbmltcG9ydCB7c3F1YXJlZERpZmZlcmVuY2VDb25maWd9IGZyb20gJy4va2VybmVscy9TcXVhcmVkRGlmZmVyZW5jZSc7XG5pbXBvcnQge3N0YXRpY1JlZ2V4UmVwbGFjZUNvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1N0YXRpY1JlZ2V4UmVwbGFjZSc7XG5pbXBvcnQge3N0ZXBDb25maWd9IGZyb20gJy4va2VybmVscy9TdGVwJztcbmltcG9ydCB7c3RyaWRlZFNsaWNlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaWRlZFNsaWNlJztcbmltcG9ydCB7c3RyaW5nTkdyYW1zQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3RyaW5nTkdyYW1zJztcbmltcG9ydCB7c3RyaW5nU3BsaXRDb25maWd9IGZyb20gJy4va2VybmVscy9TdHJpbmdTcGxpdCc7XG5pbXBvcnQge3N0cmluZ1RvSGFzaEJ1Y2tldEZhc3RDb25maWd9IGZyb20gJy4va2VybmVscy9TdHJpbmdUb0hhc2hCdWNrZXRGYXN0JztcbmltcG9ydCB7c3ViQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3ViJztcbmltcG9ydCB7c3VtQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvU3VtJztcbmltcG9ydCB7dGFuQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVGFuJztcbmltcG9ydCB7dGFuaENvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1RhbmgnO1xuaW1wb3J0IHt0ZW5zb3JTY2F0dGVyVXBkYXRlQ29uZmlnfSBmcm9tICcuL2tlcm5lbHMvVGVuc29yU2NhdHRlclVwZGF0ZSc7XG5pbXBvcnQge3RpbGVDb25maWd9IGZyb20gJy4va2VybmVscy9UaWxlJztcbmltcG9ydCB7dG9wS0NvbmZpZ30gZnJvbSAnLi9rZXJuZWxzL1RvcEsnO1xuaW1wb3J0IHt0cmFuc2Zvcm1Db25maWd9IGZyb20gJy4va2VybmVscy9UcmFuc2Zvcm0nO1xuaW1wb3J0IHt0cmFuc3Bvc2VDb25maWd9IGZyb20gJy4va2VybmVscy9UcmFuc3Bvc2UnO1xuaW1wb3J0IHt1bmlxdWVDb25maWd9IGZyb20gJy4va2VybmVscy9VbmlxdWUnO1xuaW1wb3J0IHt1bnBhY2tDb25maWd9IGZyb20gJy4va2VybmVscy9VbnBhY2snO1xuaW1wb3J0IHt1bnNvcnRlZFNlZ21lbnRTdW1Db25maWd9IGZyb20gJy4va2VybmVscy9VbnNvcnRlZFNlZ21lbnRTdW0nO1xuaW1wb3J0IHt6ZXJvc0xpa2VDb25maWd9IGZyb20gJy4va2VybmVscy9aZXJvc0xpa2UnO1xuXG4vLyBMaXN0IGFsbCBrZXJuZWwgY29uZmlncyBoZXJlXG5jb25zdCBrZXJuZWxDb25maWdzOiBLZXJuZWxDb25maWdbXSA9IFtcbiAgX2Z1c2VkTWF0TXVsQ29uZmlnLFxuICBhYnNDb25maWcsXG4gIGFjb3NDb25maWcsXG4gIGFjb3NoQ29uZmlnLFxuICBhZGRDb25maWcsXG4gIGFkZE5Db25maWcsXG4gIGFsbENvbmZpZyxcbiAgYW55Q29uZmlnLFxuICBhcmdNYXhDb25maWcsXG4gIGFyZ01pbkNvbmZpZyxcbiAgYXNpbkNvbmZpZyxcbiAgYXNpbmhDb25maWcsXG4gIGF0YW5Db25maWcsXG4gIGF0YW4yQ29uZmlnLFxuICBhdGFuaENvbmZpZyxcbiAgYXZnUG9vbENvbmZpZyxcbiAgYXZnUG9vbDNEQ29uZmlnLFxuICBhdmdQb29sM0RHcmFkQ29uZmlnLFxuICBhdmdQb29sR3JhZENvbmZpZyxcbiAgYmF0Y2hNYXRNdWxDb25maWcsXG4gIGJhdGNoTm9ybUNvbmZpZyxcbiAgYmF0Y2hUb1NwYWNlTkRDb25maWcsXG4gIGJpbmNvdW50Q29uZmlnLFxuICBiaXR3aXNlQW5kQ29uZmlnLFxuICBicm9hZGNhc3RBcmdzQ29uZmlnLFxuICBjYXN0Q29uZmlnLFxuICBjZWlsQ29uZmlnLFxuICBjbGlwQnlWYWx1ZUNvbmZpZyxcbiAgY29tcGxleENvbmZpZyxcbiAgY29tcGxleEFic0NvbmZpZyxcbiAgY29uY2F0Q29uZmlnLFxuICBjb252MkRDb25maWcsXG4gIGNvbnYyREJhY2twcm9wRmlsdGVyQ29uZmlnLFxuICBjb252MkRCYWNrcHJvcElucHV0Q29uZmlnLFxuICBjb252M0RDb25maWcsXG4gIGNvbnYzREJhY2twcm9wRmlsdGVyVjJDb25maWcsXG4gIGNvbnYzREJhY2twcm9wSW5wdXRWMkNvbmZpZyxcbiAgY29zQ29uZmlnLFxuICBjb3NoQ29uZmlnLFxuICBjcm9wQW5kUmVzaXplQ29uZmlnLFxuICBjdW1wcm9kQ29uZmlnLFxuICBjdW1zdW1Db25maWcsXG4gIGRlbnNlQmluY291bnRDb25maWcsXG4gIGRlcHRoVG9TcGFjZUNvbmZpZyxcbiAgZGVwdGh3aXNlQ29udjJkTmF0aXZlQ29uZmlnLFxuICBkZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlckNvbmZpZyxcbiAgZGVwdGh3aXNlQ29udjJkTmF0aXZlQmFja3Byb3BJbnB1dENvbmZpZyxcbiAgZGlhZ0NvbmZpZyxcbiAgZGlsYXRpb24yRENvbmZpZyxcbiAgZGlsYXRpb24yREJhY2twcm9wRmlsdGVyQ29uZmlnLFxuICBkaWxhdGlvbjJEQmFja3Byb3BJbnB1dENvbmZpZyxcbiAgZHJhd0NvbmZpZyxcbiAgZWluc3VtQ29uZmlnLFxuICBlbHVDb25maWcsXG4gIGVsdUdyYWRDb25maWcsXG4gIGVxdWFsQ29uZmlnLFxuICBlcmZDb25maWcsXG4gIGV4cENvbmZpZyxcbiAgZXhwYW5kRGltc0NvbmZpZyxcbiAgZXhwbTFDb25maWcsXG4gIGZmdENvbmZpZyxcbiAgZmlsbENvbmZpZyxcbiAgZmxpcExlZnRSaWdodENvbmZpZyxcbiAgZmxvb3JDb25maWcsXG4gIGZsb29yRGl2Q29uZmlnLFxuICBmdXNlZENvbnYyRENvbmZpZyxcbiAgZnVzZWREZXB0aHdpc2VDb252MkRDb25maWcsXG4gIGdhdGhlck5kQ29uZmlnLFxuICBnYXRoZXJWMkNvbmZpZyxcbiAgZ3JlYXRlckNvbmZpZyxcbiAgZ3JlYXRlckVxdWFsQ29uZmlnLFxuICBpZGVudGl0eUNvbmZpZyxcbiAgaWZmdENvbmZpZyxcbiAgaW1hZ0NvbmZpZyxcbiAgaXNGaW5pdGVDb25maWcsXG4gIGlzSW5mQ29uZmlnLFxuICBpc05hTkNvbmZpZyxcbiAgbGVha3lSZWx1Q29uZmlnLFxuICBsZXNzQ29uZmlnLFxuICBsZXNzRXF1YWxDb25maWcsXG4gIGxpblNwYWNlQ29uZmlnLFxuICBsb2dDb25maWcsXG4gIGxvZzFwQ29uZmlnLFxuICBsb2dpY2FsQW5kQ29uZmlnLFxuICBsb2dpY2FsTm90Q29uZmlnLFxuICBsb2dpY2FsT3JDb25maWcsXG4gIExSTkNvbmZpZyxcbiAgTFJOR3JhZENvbmZpZyxcbiAgbWF4Q29uZmlnLFxuICBtYXhpbXVtQ29uZmlnLFxuICBtYXhQb29sQ29uZmlnLFxuICBtYXhQb29sM0RDb25maWcsXG4gIG1heFBvb2wzREdyYWRDb25maWcsXG4gIG1heFBvb2xHcmFkQ29uZmlnLFxuICBtYXhQb29sV2l0aEFyZ21heENvbmZpZyxcbiAgbWVhbkNvbmZpZyxcbiAgbWluQ29uZmlnLFxuICBtaW5pbXVtQ29uZmlnLFxuICBtaXJyb3JQYWRDb25maWcsXG4gIG1vZENvbmZpZyxcbiAgbXVsdGlub21pYWxDb25maWcsXG4gIG11bHRpcGx5Q29uZmlnLFxuICBuZWdDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjNDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjRDb25maWcsXG4gIG5vbk1heFN1cHByZXNzaW9uVjVDb25maWcsXG4gIG5vdEVxdWFsQ29uZmlnLFxuICBvbmVIb3RDb25maWcsXG4gIG9uZXNMaWtlQ29uZmlnLFxuICBwYWNrQ29uZmlnLFxuICBwYWRWMkNvbmZpZyxcbiAgcG93Q29uZmlnLFxuICBwcmVsdUNvbmZpZyxcbiAgcHJvZENvbmZpZyxcbiAgcmFnZ2VkR2F0aGVyQ29uZmlnLFxuICByYWdnZWRSYW5nZUNvbmZpZyxcbiAgcmFnZ2VkVGVuc29yVG9UZW5zb3JDb25maWcsXG4gIHJhbmdlQ29uZmlnLFxuICByZWFsQ29uZmlnLFxuICByZWFsRGl2Q29uZmlnLFxuICByZWNpcHJvY2FsQ29uZmlnLFxuICByZWx1Q29uZmlnLFxuICByZWx1NkNvbmZpZyxcbiAgcmVzaGFwZUNvbmZpZyxcbiAgcmVzaXplQmlsaW5lYXJDb25maWcsXG4gIHJlc2l6ZUJpbGluZWFyR3JhZENvbmZpZyxcbiAgcmVzaXplTmVhcmVzdE5laWdoYm9yQ29uZmlnLFxuICByZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkQ29uZmlnLFxuICByZXZlcnNlQ29uZmlnLFxuICByb3RhdGVXaXRoT2Zmc2V0Q29uZmlnLFxuICByb3VuZENvbmZpZyxcbiAgcnNxcnRDb25maWcsXG4gIHNjYXR0ZXJOZENvbmZpZyxcbiAgc2VhcmNoU29ydGVkQ29uZmlnLFxuICBzZWxlY3RDb25maWcsXG4gIHNlbHVDb25maWcsXG4gIHNpZ21vaWRDb25maWcsXG4gIHNpZ25Db25maWcsXG4gIHNpbkNvbmZpZyxcbiAgc2luaENvbmZpZyxcbiAgc2xpY2VDb25maWcsXG4gIHNvZnRtYXhDb25maWcsXG4gIHNvZnRwbHVzQ29uZmlnLFxuICBzcGFjZVRvQmF0Y2hORENvbmZpZyxcbiAgc3BhcnNlRmlsbEVtcHR5Um93c0NvbmZpZyxcbiAgc3BhcnNlUmVzaGFwZUNvbmZpZyxcbiAgc3BhcnNlU2VnbWVudE1lYW5Db25maWcsXG4gIHNwYXJzZVNlZ21lbnRTdW1Db25maWcsXG4gIHNwYXJzZVRvRGVuc2VDb25maWcsXG4gIHNwbGl0VkNvbmZpZyxcbiAgc3FydENvbmZpZyxcbiAgc3F1YXJlQ29uZmlnLFxuICBzcXVhcmVkRGlmZmVyZW5jZUNvbmZpZyxcbiAgc3RhdGljUmVnZXhSZXBsYWNlQ29uZmlnLFxuICBzdGVwQ29uZmlnLFxuICBzdHJpZGVkU2xpY2VDb25maWcsXG4gIHN0cmluZ05HcmFtc0NvbmZpZyxcbiAgc3RyaW5nU3BsaXRDb25maWcsXG4gIHN0cmluZ1RvSGFzaEJ1Y2tldEZhc3RDb25maWcsXG4gIHN1YkNvbmZpZyxcbiAgc3VtQ29uZmlnLFxuICB0YW5Db25maWcsXG4gIHRhbmhDb25maWcsXG4gIHRlbnNvclNjYXR0ZXJVcGRhdGVDb25maWcsXG4gIHRpbGVDb25maWcsXG4gIHRvcEtDb25maWcsXG4gIHRyYW5zZm9ybUNvbmZpZyxcbiAgdHJhbnNwb3NlQ29uZmlnLFxuICB1bmlxdWVDb25maWcsXG4gIHVucGFja0NvbmZpZyxcbiAgdW5zb3J0ZWRTZWdtZW50U3VtQ29uZmlnLFxuICB6ZXJvc0xpa2VDb25maWdcbl07XG5cbmZvciAoY29uc3Qga2VybmVsQ29uZmlnIG9mIGtlcm5lbENvbmZpZ3MpIHtcbiAgcmVnaXN0ZXJLZXJuZWwoa2VybmVsQ29uZmlnKTtcbn1cbiJdfQ==","/**\n * Checks whether WebAssembly is supported in the current environment.\n */\nfunction isWebAssemblySupported() {\n try {\n return (!!window.WebAssembly &&\n (!!window.WebAssembly.compile || !!window.WebAssembly.compileStreaming));\n }\n catch (e) {\n return false;\n }\n}\n\nexport { isWebAssemblySupported };\n","/**\n * The abstract class representing FaceDetection\n * to be implemented for different libraries.\n */\nclass FaceDetection {\n /**\n * Triggers the `loadModels` method and stores\n * the corresponding promise to be awaited later.\n */\n triggerModelLoading() {\n this.modelLoadingPromise = this.loadModels();\n }\n}\n\nexport { FaceDetection };\n","import { ready, setBackend } from '@tensorflow/tfjs-core';\nimport { createDetector, SupportedModels } from '@tensorflow-models/face-detection';\nimport { setWasmPaths, version_wasm } from '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport { jitteredExponentialRetry } from '@aws-amplify/core/internals/utils';\nimport { isWebAssemblySupported } from './support.mjs';\nimport { FaceDetection } from '../types/faceDetection.mjs';\nimport '../types/liveness.mjs';\n\nconst BLAZEFACE_VERSION = '1.0.2';\n/**\n * WARNING: When updating these links,\n * also make sure to update documentation and the link in the canary/e2e test \"canary/e2e/features/liveness/face-detect.feature\"\n */\nconst DEFAULT_BLAZEFACE_URL = `https://cdn.liveness.rekognition.amazonaws.com/face-detection/tensorflow-models/blazeface/${BLAZEFACE_VERSION}/model/model.json`;\nconst DEFAULT_TFJS_WASM_URL = `https://cdn.liveness.rekognition.amazonaws.com/face-detection/tensorflow/tfjs-backend-wasm/${version_wasm}/`;\n/**\n * The BlazeFace implementation of the FaceDetection interface.\n */\nclass BlazeFaceFaceDetection extends FaceDetection {\n constructor(binaryPath, faceModelUrl) {\n super();\n this.faceModelUrl = faceModelUrl ?? DEFAULT_BLAZEFACE_URL;\n this.binaryPath = binaryPath ?? DEFAULT_TFJS_WASM_URL;\n }\n async loadModels() {\n if (isWebAssemblySupported()) {\n await this._loadWebAssemblyBackend();\n }\n else {\n await this._loadCPUBackend();\n }\n try {\n await ready();\n this._model = await createDetector(SupportedModels.MediaPipeFaceDetector, {\n runtime: 'tfjs',\n detectorModelUrl: this.faceModelUrl,\n });\n }\n catch (e) {\n throw new Error('There was an error loading the blazeface model. If you are using a custom blazeface model url ensure that it is a fully qualified url that returns a json file.');\n }\n }\n async detectFaces(videoEl) {\n const flipHorizontal = true;\n const predictions = await this._model.estimateFaces(videoEl, {\n flipHorizontal,\n });\n const timestampMs = Date.now();\n const faces = predictions.map((prediction) => {\n const { box, keypoints } = prediction;\n const { xMin: left, yMin: top, width, height } = box;\n const rightEye = this._getCoordinate(keypoints, 'rightEye');\n const leftEye = this._getCoordinate(keypoints, 'leftEye');\n const nose = this._getCoordinate(keypoints, 'noseTip');\n const mouth = this._getCoordinate(keypoints, 'mouthCenter');\n const rightEar = this._getCoordinate(keypoints, 'rightEarTragion');\n const leftEar = this._getCoordinate(keypoints, 'leftEarTragion');\n const probability = [90];\n return {\n top,\n left,\n width,\n height,\n timestampMs,\n probability: probability[0],\n rightEye,\n leftEye,\n mouth,\n nose,\n rightEar,\n leftEar,\n };\n });\n return faces;\n }\n _getCoordinate(keypoints, name) {\n const keypoint = keypoints.find((k) => k.name === name);\n return [keypoint.x, keypoint.y];\n }\n async _loadWebAssemblyBackend() {\n try {\n setWasmPaths(this.binaryPath);\n await jitteredExponentialRetry(async () => {\n const success = await setBackend('wasm');\n if (!success) {\n throw new Error(`Initialization of backend wasm failed`);\n }\n }, []);\n this.modelBackend = 'wasm';\n }\n catch (e) {\n throw new Error('There was an error loading the TFJS WASM backend. If you are using a custom WASM path ensure that it ends with \"/\" and that it is not the full URL as @tensorflow/tfjs-backend-wasm will append the wasm binary file name. Read more: https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/src/backend_wasm.ts#L475.');\n }\n }\n async _loadCPUBackend() {\n await setBackend('cpu');\n this.modelBackend = 'cpu';\n }\n}\n\nexport { BLAZEFACE_VERSION, BlazeFaceFaceDetection, DEFAULT_BLAZEFACE_URL, DEFAULT_TFJS_WASM_URL };\n","import { FaceMatchState } from '../types/liveness.mjs';\nimport { generateBboxFromLandmarks, getOvalBoundingBox, getIntersectionOverUnion } from './liveness.mjs';\nimport { FACE_MATCH_RANGE_MAX, FACE_MATCH_WEIGHT_MAX, FACE_MATCH_WEIGHT_MIN, FACE_MATCH_RANGE_MIN } from './constants.mjs';\n\n/**\n * Returns the state of the provided face with respect to the provided liveness oval.\n */\nfunction getFaceMatchStateInLivenessOval({ face, ovalDetails, initialFaceIntersection, sessionInformation, frameHeight, }) {\n let faceMatchState;\n const challengeConfig = sessionInformation?.Challenge?.FaceMovementAndLightChallenge\n ?.ChallengeConfig;\n if (!challengeConfig ||\n !challengeConfig.OvalIouThreshold ||\n !challengeConfig.OvalIouHeightThreshold ||\n !challengeConfig.OvalIouWidthThreshold ||\n !challengeConfig.FaceIouHeightThreshold ||\n !challengeConfig.FaceIouWidthThreshold) {\n throw new Error('Challenge information not returned from session information.');\n }\n const { OvalIouThreshold, FaceIouHeightThreshold, FaceIouWidthThreshold } = challengeConfig;\n const faceBoundingBox = generateBboxFromLandmarks(face, ovalDetails, frameHeight);\n const minFaceX = faceBoundingBox.left;\n const maxFaceX = faceBoundingBox.right;\n const minFaceY = faceBoundingBox.top;\n const maxFaceY = faceBoundingBox.bottom;\n const { ovalBoundingBox, minOvalX, minOvalY, maxOvalX, maxOvalY } = getOvalBoundingBox(ovalDetails);\n const intersection = getIntersectionOverUnion(faceBoundingBox, ovalBoundingBox);\n const intersectionThreshold = OvalIouThreshold;\n const faceDetectionWidthThreshold = ovalDetails.width * FaceIouWidthThreshold;\n const faceDetectionHeightThreshold = ovalDetails.height * FaceIouHeightThreshold;\n /** From Science\n * p=max(min(1,0.75∗(si−s0)/(st−s0)+0.25)),0)\n */\n const faceMatchPercentage = Math.max(Math.min(FACE_MATCH_RANGE_MAX, (FACE_MATCH_WEIGHT_MAX * (intersection - initialFaceIntersection)) /\n (intersectionThreshold - initialFaceIntersection) +\n FACE_MATCH_WEIGHT_MIN), FACE_MATCH_RANGE_MIN) * 100;\n const isFaceOutsideOvalToTheLeft = minOvalX > minFaceX && maxOvalX > maxFaceX;\n const isFaceOutsideOvalToTheRight = minFaceX > minOvalX && maxFaceX > maxOvalX;\n const isFaceMatched = intersection > intersectionThreshold;\n const isFaceMatchedClosely = minOvalY - minFaceY > faceDetectionHeightThreshold ||\n maxFaceY - maxOvalY > faceDetectionHeightThreshold ||\n (minOvalX - minFaceX > faceDetectionWidthThreshold &&\n maxFaceX - maxOvalX > faceDetectionWidthThreshold);\n if (isFaceMatched) {\n faceMatchState = FaceMatchState.MATCHED;\n }\n else if (isFaceOutsideOvalToTheLeft || isFaceOutsideOvalToTheRight) {\n faceMatchState = FaceMatchState.OFF_CENTER;\n }\n else if (isFaceMatchedClosely) {\n faceMatchState = FaceMatchState.MATCHED;\n }\n else {\n faceMatchState = FaceMatchState.TOO_FAR;\n }\n return { faceMatchState, faceMatchPercentage };\n}\n\nexport { getFaceMatchStateInLivenessOval };\n","export function resolveEventStreamConfig(input) {\n const eventSigner = input.signer;\n const messageSigner = input.signer;\n const eventStreamPayloadHandler = input.eventStreamPayloadHandlerProvider({\n ...input,\n messageSigner,\n });\n return {\n ...input,\n eventSigner,\n eventStreamPayloadHandler,\n };\n}\n","export var HttpAuthLocation;\n(function (HttpAuthLocation) {\n HttpAuthLocation[\"HEADER\"] = \"header\";\n HttpAuthLocation[\"QUERY\"] = \"query\";\n})(HttpAuthLocation || (HttpAuthLocation = {}));\n","export var HttpApiKeyAuthLocation;\n(function (HttpApiKeyAuthLocation) {\n HttpApiKeyAuthLocation[\"HEADER\"] = \"header\";\n HttpApiKeyAuthLocation[\"QUERY\"] = \"query\";\n})(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {}));\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n EndpointURLScheme[\"HTTP\"] = \"http\";\n EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n AlgorithmId[\"MD5\"] = \"md5\";\n AlgorithmId[\"CRC32\"] = \"crc32\";\n AlgorithmId[\"CRC32C\"] = \"crc32c\";\n AlgorithmId[\"SHA1\"] = \"sha1\";\n AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n if (runtimeConfig.sha256 !== undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.SHA256,\n checksumConstructor: () => runtimeConfig.sha256,\n });\n }\n if (runtimeConfig.md5 != undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.MD5,\n checksumConstructor: () => runtimeConfig.md5,\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export var FieldPosition;\n(function (FieldPosition) {\n FieldPosition[FieldPosition[\"HEADER\"] = 0] = \"HEADER\";\n FieldPosition[FieldPosition[\"TRAILER\"] = 1] = \"TRAILER\";\n})(FieldPosition || (FieldPosition = {}));\n","export const SMITHY_CONTEXT_KEY = \"__smithy_context\";\n","export var IniSectionType;\n(function (IniSectionType) {\n IniSectionType[\"PROFILE\"] = \"profile\";\n IniSectionType[\"SSO_SESSION\"] = \"sso-session\";\n IniSectionType[\"SERVICES\"] = \"services\";\n})(IniSectionType || (IniSectionType = {}));\n","export var RequestHandlerProtocol;\n(function (RequestHandlerProtocol) {\n RequestHandlerProtocol[\"HTTP_0_9\"] = \"http/0.9\";\n RequestHandlerProtocol[\"HTTP_1_0\"] = \"http/1.0\";\n RequestHandlerProtocol[\"TDS_8_0\"] = \"tds/8.0\";\n})(RequestHandlerProtocol || (RequestHandlerProtocol = {}));\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const eventStreamHandlingMiddleware = (options) => (next, context) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request))\n return next(args);\n return options.eventStreamPayloadHandler.handle(next, args, context);\n};\nexport const eventStreamHandlingMiddlewareOptions = {\n tags: [\"EVENT_STREAM\", \"SIGNATURE\", \"HANDLE\"],\n name: \"eventStreamHandlingMiddleware\",\n relation: \"after\",\n toMiddleware: \"awsAuthMiddleware\",\n override: true,\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const eventStreamHeaderMiddleware = (next) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request))\n return next(args);\n request.headers = {\n ...request.headers,\n \"content-type\": \"application/vnd.amazon.eventstream\",\n \"x-amz-content-sha256\": \"STREAMING-AWS4-HMAC-SHA256-EVENTS\",\n };\n return next({\n ...args,\n request,\n });\n};\nexport const eventStreamHeaderMiddlewareOptions = {\n step: \"build\",\n tags: [\"EVENT_STREAM\", \"HEADER\", \"CONTENT_TYPE\", \"CONTENT_SHA256\"],\n name: \"eventStreamHeaderMiddleware\",\n override: true,\n};\n","import { eventStreamHandlingMiddleware, eventStreamHandlingMiddlewareOptions } from \"./eventStreamHandlingMiddleware\";\nimport { eventStreamHeaderMiddleware, eventStreamHeaderMiddlewareOptions } from \"./eventStreamHeaderMiddleware\";\nexport const getEventStreamPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(eventStreamHandlingMiddleware(options), eventStreamHandlingMiddlewareOptions);\n clientStack.add(eventStreamHeaderMiddleware, eventStreamHeaderMiddlewareOptions);\n },\n});\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport function resolveHostHeaderConfig(input) {\n return input;\n}\nexport const hostHeaderMiddleware = (options) => (next) => async (args) => {\n if (!HttpRequest.isInstance(args.request))\n return next(args);\n const { request } = args;\n const { handlerProtocol = \"\" } = options.requestHandler.metadata || {};\n if (handlerProtocol.indexOf(\"h2\") >= 0 && !request.headers[\":authority\"]) {\n delete request.headers[\"host\"];\n request.headers[\":authority\"] = request.hostname + (request.port ? \":\" + request.port : \"\");\n }\n else if (!request.headers[\"host\"]) {\n let host = request.hostname;\n if (request.port != null)\n host += `:${request.port}`;\n request.headers[\"host\"] = host;\n }\n return next(args);\n};\nexport const hostHeaderMiddlewareOptions = {\n name: \"hostHeaderMiddleware\",\n step: \"build\",\n priority: \"low\",\n tags: [\"HOST\"],\n override: true,\n};\nexport const getHostHeaderPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(hostHeaderMiddleware(options), hostHeaderMiddlewareOptions);\n },\n});\n","export const loggerMiddleware = () => (next, context) => async (args) => {\n try {\n const response = await next(args);\n const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog ?? context.outputFilterSensitiveLog;\n const { $metadata, ...outputWithoutMetadata } = response.output;\n logger?.info?.({\n clientName,\n commandName,\n input: inputFilterSensitiveLog(args.input),\n output: outputFilterSensitiveLog(outputWithoutMetadata),\n metadata: $metadata,\n });\n return response;\n }\n catch (error) {\n const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n logger?.error?.({\n clientName,\n commandName,\n input: inputFilterSensitiveLog(args.input),\n error,\n metadata: error.$metadata,\n });\n throw error;\n }\n};\nexport const loggerMiddlewareOptions = {\n name: \"loggerMiddleware\",\n tags: [\"LOGGER\"],\n step: \"initialize\",\n override: true,\n};\nexport const getLoggerPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(loggerMiddleware(), loggerMiddlewareOptions);\n },\n});\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst TRACE_ID_HEADER_NAME = \"X-Amzn-Trace-Id\";\nconst ENV_LAMBDA_FUNCTION_NAME = \"AWS_LAMBDA_FUNCTION_NAME\";\nconst ENV_TRACE_ID = \"_X_AMZN_TRACE_ID\";\nexport const recursionDetectionMiddleware = (options) => (next) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request) ||\n options.runtime !== \"node\" ||\n request.headers.hasOwnProperty(TRACE_ID_HEADER_NAME)) {\n return next(args);\n }\n const functionName = process.env[ENV_LAMBDA_FUNCTION_NAME];\n const traceId = process.env[ENV_TRACE_ID];\n const nonEmptyString = (str) => typeof str === \"string\" && str.length > 0;\n if (nonEmptyString(functionName) && nonEmptyString(traceId)) {\n request.headers[TRACE_ID_HEADER_NAME] = traceId;\n }\n return next({\n ...args,\n request,\n });\n};\nexport const addRecursionDetectionMiddlewareOptions = {\n step: \"build\",\n tags: [\"RECURSION_DETECTION\"],\n name: \"recursionDetectionMiddleware\",\n override: true,\n priority: \"low\",\n};\nexport const getRecursionDetectionPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(recursionDetectionMiddleware(options), addRecursionDetectionMiddlewareOptions);\n },\n});\n","export const memoize = (provider, isExpired, requiresRefresh) => {\n let resolved;\n let pending;\n let hasResult;\n let isConstant = false;\n const coalesceProvider = async () => {\n if (!pending) {\n pending = provider();\n }\n try {\n resolved = await pending;\n hasResult = true;\n isConstant = false;\n }\n finally {\n pending = undefined;\n }\n return resolved;\n };\n if (isExpired === undefined) {\n return async (options) => {\n if (!hasResult || options?.forceRefresh) {\n resolved = await coalesceProvider();\n }\n return resolved;\n };\n }\n return async (options) => {\n if (!hasResult || options?.forceRefresh) {\n resolved = await coalesceProvider();\n }\n if (isConstant) {\n return resolved;\n }\n if (requiresRefresh && !requiresRefresh(resolved)) {\n isConstant = true;\n return resolved;\n }\n if (isExpired(resolved)) {\n await coalesceProvider();\n return resolved;\n }\n return resolved;\n };\n};\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport const getSmithyContext = (context) => context[SMITHY_CONTEXT_KEY] || (context[SMITHY_CONTEXT_KEY] = {});\n","export const normalizeProvider = (input) => {\n if (typeof input === \"function\")\n return input;\n const promisified = Promise.resolve(input);\n return () => promisified;\n};\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"./fromUtf8\";\nexport const toUint8Array = (data) => {\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n};\n","export const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport const TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport const REGION_SET_PARAM = \"X-Amz-Region-Set\";\nexport const AUTH_HEADER = \"authorization\";\nexport const AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport const DATE_HEADER = \"date\";\nexport const GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport const SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport const SHA256_HEADER = \"x-amz-content-sha256\";\nexport const TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport const HOST_HEADER = \"host\";\nexport const ALWAYS_UNSIGNABLE_HEADERS = {\n authorization: true,\n \"cache-control\": true,\n connection: true,\n expect: true,\n from: true,\n \"keep-alive\": true,\n \"max-forwards\": true,\n pragma: true,\n referer: true,\n te: true,\n trailer: true,\n \"transfer-encoding\": true,\n upgrade: true,\n \"user-agent\": true,\n \"x-amzn-trace-id\": true,\n};\nexport const PROXY_HEADER_PATTERN = /^proxy-/;\nexport const SEC_HEADER_PATTERN = /^sec-/;\nexport const UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport const ALGORITHM_IDENTIFIER_V4A = \"AWS4-ECDSA-P256-SHA256\";\nexport const EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const MAX_CACHE_SIZE = 50;\nexport const KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport const MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nconst signingKeyCache = {};\nconst cacheQueue = [];\nexport const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${KEY_TYPE_IDENTIFIER}`;\nexport const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {\n const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);\n const cacheKey = `${shortDate}:${region}:${service}:${toHex(credsHash)}:${credentials.sessionToken}`;\n if (cacheKey in signingKeyCache) {\n return signingKeyCache[cacheKey];\n }\n cacheQueue.push(cacheKey);\n while (cacheQueue.length > MAX_CACHE_SIZE) {\n delete signingKeyCache[cacheQueue.shift()];\n }\n let key = `AWS4${credentials.secretAccessKey}`;\n for (const signable of [shortDate, region, service, KEY_TYPE_IDENTIFIER]) {\n key = await hmac(sha256Constructor, key, signable);\n }\n return (signingKeyCache[cacheKey] = key);\n};\nexport const clearCredentialCache = () => {\n cacheQueue.length = 0;\n Object.keys(signingKeyCache).forEach((cacheKey) => {\n delete signingKeyCache[cacheKey];\n });\n};\nconst hmac = (ctor, secret, data) => {\n const hash = new ctor(secret);\n hash.update(toUint8Array(data));\n return hash.digest();\n};\n","import { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\nexport const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {\n const canonical = {};\n for (const headerName of Object.keys(headers).sort()) {\n if (headers[headerName] == undefined) {\n continue;\n }\n const canonicalHeaderName = headerName.toLowerCase();\n if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS ||\n unsignableHeaders?.has(canonicalHeaderName) ||\n PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n continue;\n }\n }\n canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n }\n return canonical;\n};\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\nexport const getCanonicalQuery = ({ query = {} }) => {\n const keys = [];\n const serialized = {};\n for (const key of Object.keys(query)) {\n if (key.toLowerCase() === SIGNATURE_HEADER) {\n continue;\n }\n const encodedKey = escapeUri(key);\n keys.push(encodedKey);\n const value = query[key];\n if (typeof value === \"string\") {\n serialized[encodedKey] = `${encodedKey}=${escapeUri(value)}`;\n }\n else if (Array.isArray(value)) {\n serialized[encodedKey] = value\n .slice(0)\n .reduce((encoded, value) => encoded.concat([`${encodedKey}=${escapeUri(value)}`]), [])\n .sort()\n .join(\"&\");\n }\n }\n return keys\n .sort()\n .map((key) => serialized[key])\n .filter((serialized) => serialized)\n .join(\"&\");\n};\n","export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport const getPayloadHash = async ({ headers, body }, hashConstructor) => {\n for (const headerName of Object.keys(headers)) {\n if (headerName.toLowerCase() === SHA256_HEADER) {\n return headers[headerName];\n }\n }\n if (body == undefined) {\n return \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n }\n else if (typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {\n const hashCtor = new hashConstructor();\n hashCtor.update(toUint8Array(body));\n return toHex(await hashCtor.digest());\n }\n return UNSIGNED_PAYLOAD;\n};\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { fromUtf8 } from \"@smithy/util-utf8\";\nexport class HeaderFormatter {\n format(headers) {\n const chunks = [];\n for (const headerName of Object.keys(headers)) {\n const bytes = fromUtf8(headerName);\n chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n }\n const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n let position = 0;\n for (const chunk of chunks) {\n out.set(chunk, position);\n position += chunk.byteLength;\n }\n return out;\n }\n formatHeaderValue(header) {\n switch (header.type) {\n case \"boolean\":\n return Uint8Array.from([header.value ? 0 : 1]);\n case \"byte\":\n return Uint8Array.from([2, header.value]);\n case \"short\":\n const shortView = new DataView(new ArrayBuffer(3));\n shortView.setUint8(0, 3);\n shortView.setInt16(1, header.value, false);\n return new Uint8Array(shortView.buffer);\n case \"integer\":\n const intView = new DataView(new ArrayBuffer(5));\n intView.setUint8(0, 4);\n intView.setInt32(1, header.value, false);\n return new Uint8Array(intView.buffer);\n case \"long\":\n const longBytes = new Uint8Array(9);\n longBytes[0] = 5;\n longBytes.set(header.value.bytes, 1);\n return longBytes;\n case \"binary\":\n const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n binView.setUint8(0, 6);\n binView.setUint16(1, header.value.byteLength, false);\n const binBytes = new Uint8Array(binView.buffer);\n binBytes.set(header.value, 3);\n return binBytes;\n case \"string\":\n const utf8Bytes = fromUtf8(header.value);\n const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n strView.setUint8(0, 7);\n strView.setUint16(1, utf8Bytes.byteLength, false);\n const strBytes = new Uint8Array(strView.buffer);\n strBytes.set(utf8Bytes, 3);\n return strBytes;\n case \"timestamp\":\n const tsBytes = new Uint8Array(9);\n tsBytes[0] = 8;\n tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n return tsBytes;\n case \"uuid\":\n if (!UUID_PATTERN.test(header.value)) {\n throw new Error(`Invalid UUID received: ${header.value}`);\n }\n const uuidBytes = new Uint8Array(17);\n uuidBytes[0] = 9;\n uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n return uuidBytes;\n }\n }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\nexport class Int64 {\n constructor(bytes) {\n this.bytes = bytes;\n if (bytes.byteLength !== 8) {\n throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n }\n }\n static fromNumber(number) {\n if (number > 9223372036854776000 || number < -9223372036854776000) {\n throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n }\n const bytes = new Uint8Array(8);\n for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n bytes[i] = remaining;\n }\n if (number < 0) {\n negate(bytes);\n }\n return new Int64(bytes);\n }\n valueOf() {\n const bytes = this.bytes.slice(0);\n const negative = bytes[0] & 0b10000000;\n if (negative) {\n negate(bytes);\n }\n return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n }\n toString() {\n return String(this.valueOf());\n }\n}\nfunction negate(bytes) {\n for (let i = 0; i < 8; i++) {\n bytes[i] ^= 0xff;\n }\n for (let i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0)\n break;\n }\n}\n","export const hasHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return true;\n }\n }\n return false;\n};\nexport const getHeaderValue = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return headers[headerName];\n }\n }\n return undefined;\n};\nexport const deleteHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n delete headers[headerName];\n }\n }\n};\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const moveHeadersToQuery = (request, options = {}) => {\n const { headers, query = {} } = HttpRequest.clone(request);\n for (const name of Object.keys(headers)) {\n const lname = name.toLowerCase();\n if ((lname.slice(0, 6) === \"x-amz-\" && !options.unhoistableHeaders?.has(lname)) ||\n options.hoistableHeaders?.has(lname)) {\n query[name] = headers[name];\n delete headers[name];\n }\n }\n return {\n ...request,\n headers,\n query,\n };\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { GENERATED_HEADERS } from \"./constants\";\nexport const prepareRequest = (request) => {\n request = HttpRequest.clone(request);\n for (const headerName of Object.keys(request.headers)) {\n if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n delete request.headers[headerName];\n }\n }\n return request;\n};\n","export const iso8601 = (time) => toDate(time)\n .toISOString()\n .replace(/\\.\\d{3}Z$/, \"Z\");\nexport const toDate = (time) => {\n if (typeof time === \"number\") {\n return new Date(time * 1000);\n }\n if (typeof time === \"string\") {\n if (Number(time)) {\n return new Date(Number(time) * 1000);\n }\n return new Date(time);\n }\n return time;\n};\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nimport { escapeUri } from \"@smithy/util-uri-escape\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { HeaderFormatter } from \"./HeaderFormatter\";\nimport { hasHeader } from \"./headerUtil\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { iso8601 } from \"./utilDate\";\nexport class SignatureV4 {\n constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n this.headerFormatter = new HeaderFormatter();\n this.service = service;\n this.sha256 = sha256;\n this.uriEscapePath = uriEscapePath;\n this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n this.regionProvider = normalizeProvider(region);\n this.credentialProvider = normalizeProvider(credentials);\n }\n async presign(originalRequest, options = {}) {\n const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, hoistableHeaders, signingRegion, signingService, } = options;\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { longDate, shortDate } = formatDate(signingDate);\n if (expiresIn > MAX_PRESIGNED_TTL) {\n return Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\");\n }\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const request = moveHeadersToQuery(prepareRequest(originalRequest), { unhoistableHeaders, hoistableHeaders });\n if (credentials.sessionToken) {\n request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n }\n request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n request.query[CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;\n request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n request.query[SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(canonicalHeaders);\n request.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await getPayloadHash(originalRequest, this.sha256)));\n return request;\n }\n async sign(toSign, options) {\n if (typeof toSign === \"string\") {\n return this.signString(toSign, options);\n }\n else if (toSign.headers && toSign.payload) {\n return this.signEvent(toSign, options);\n }\n else if (toSign.message) {\n return this.signMessage(toSign, options);\n }\n else {\n return this.signRequest(toSign, options);\n }\n }\n async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate, longDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const hashedPayload = await getPayloadHash({ headers: {}, body: payload }, this.sha256);\n const hash = new this.sha256();\n hash.update(headers);\n const hashedHeaders = toHex(await hash.digest());\n const stringToSign = [\n EVENT_ALGORITHM_IDENTIFIER,\n longDate,\n scope,\n priorSignature,\n hashedHeaders,\n hashedPayload,\n ].join(\"\\n\");\n return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });\n }\n async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {\n const promise = this.signEvent({\n headers: this.headerFormatter.format(signableMessage.message.headers),\n payload: signableMessage.message.body,\n }, {\n signingDate,\n signingRegion,\n signingService,\n priorSignature: signableMessage.priorSignature,\n });\n return promise.then((signature) => {\n return { message: signableMessage.message, signature };\n });\n }\n async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate } = formatDate(signingDate);\n const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const request = prepareRequest(requestToSign);\n const { longDate, shortDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n request.headers[AMZ_DATE_HEADER] = longDate;\n if (credentials.sessionToken) {\n request.headers[TOKEN_HEADER] = credentials.sessionToken;\n }\n const payloadHash = await getPayloadHash(request, this.sha256);\n if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n request.headers[SHA256_HEADER] = payloadHash;\n }\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));\n request.headers[AUTH_HEADER] =\n `${ALGORITHM_IDENTIFIER} ` +\n `Credential=${credentials.accessKeyId}/${scope}, ` +\n `SignedHeaders=${getCanonicalHeaderList(canonicalHeaders)}, ` +\n `Signature=${signature}`;\n return request;\n }\n createCanonicalRequest(request, canonicalHeaders, payloadHash) {\n const sortedHeaders = Object.keys(canonicalHeaders).sort();\n return `${request.method}\n${this.getCanonicalPath(request)}\n${getCanonicalQuery(request)}\n${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join(\"\\n\")}\n\n${sortedHeaders.join(\";\")}\n${payloadHash}`;\n }\n async createStringToSign(longDate, credentialScope, canonicalRequest) {\n const hash = new this.sha256();\n hash.update(toUint8Array(canonicalRequest));\n const hashedRequest = await hash.digest();\n return `${ALGORITHM_IDENTIFIER}\n${longDate}\n${credentialScope}\n${toHex(hashedRequest)}`;\n }\n getCanonicalPath({ path }) {\n if (this.uriEscapePath) {\n const normalizedPathSegments = [];\n for (const pathSegment of path.split(\"/\")) {\n if (pathSegment?.length === 0)\n continue;\n if (pathSegment === \".\")\n continue;\n if (pathSegment === \"..\") {\n normalizedPathSegments.pop();\n }\n else {\n normalizedPathSegments.push(pathSegment);\n }\n }\n const normalizedPath = `${path?.startsWith(\"/\") ? \"/\" : \"\"}${normalizedPathSegments.join(\"/\")}${normalizedPathSegments.length > 0 && path?.endsWith(\"/\") ? \"/\" : \"\"}`;\n const doubleEncoded = escapeUri(normalizedPath);\n return doubleEncoded.replace(/%2F/g, \"/\");\n }\n return path;\n }\n async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {\n const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest);\n const hash = new this.sha256(await keyPromise);\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n getSigningKey(credentials, region, shortDate, service) {\n return getSigningKey(this.sha256, credentials, shortDate, region, service || this.service);\n }\n validateResolvedCredentials(credentials) {\n if (typeof credentials !== \"object\" ||\n typeof credentials.accessKeyId !== \"string\" ||\n typeof credentials.secretAccessKey !== \"string\") {\n throw new Error(\"Resolved credential object is not valid\");\n }\n }\n}\nconst formatDate = (now) => {\n const longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n return {\n longDate,\n shortDate: longDate.slice(0, 8),\n };\n};\nconst getCanonicalHeaderList = (headers) => Object.keys(headers).sort().join(\";\");\n","import { memoize } from \"@smithy/property-provider\";\nimport { SignatureV4 } from \"@smithy/signature-v4\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nconst CREDENTIAL_EXPIRE_WINDOW = 300000;\nexport const resolveAwsAuthConfig = (input) => {\n const normalizedCreds = input.credentials\n ? normalizeCredentialProvider(input.credentials)\n : input.credentialDefaultProvider(Object.assign({}, input, {\n parentClientConfig: input,\n }));\n const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;\n let signer;\n if (input.signer) {\n signer = normalizeProvider(input.signer);\n }\n else if (input.regionInfoProvider) {\n signer = () => normalizeProvider(input.region)()\n .then(async (region) => [\n (await input.regionInfoProvider(region, {\n useFipsEndpoint: await input.useFipsEndpoint(),\n useDualstackEndpoint: await input.useDualstackEndpoint(),\n })) || {},\n region,\n ])\n .then(([regionInfo, region]) => {\n const { signingRegion, signingService } = regionInfo;\n input.signingRegion = input.signingRegion || signingRegion || region;\n input.signingName = input.signingName || signingService || input.serviceId;\n const params = {\n ...input,\n credentials: normalizedCreds,\n region: input.signingRegion,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n };\n const SignerCtor = input.signerConstructor || SignatureV4;\n return new SignerCtor(params);\n });\n }\n else {\n signer = async (authScheme) => {\n authScheme = Object.assign({}, {\n name: \"sigv4\",\n signingName: input.signingName || input.defaultSigningName,\n signingRegion: await normalizeProvider(input.region)(),\n properties: {},\n }, authScheme);\n const isSigv4a = authScheme?.name === \"sigv4a\";\n const signingRegion = authScheme.signingRegion;\n const signingService = authScheme.signingName;\n let regionForSigner;\n if (isSigv4a) {\n regionForSigner = input.signingRegion || signingRegion;\n }\n else {\n input.signingRegion = input.signingRegion || signingRegion;\n regionForSigner = input.signingRegion;\n }\n input.signingName = input.signingName || signingService || input.serviceId;\n const params = {\n ...input,\n credentials: normalizedCreds,\n region: regionForSigner,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n };\n const SignerCtor = input.signerConstructor || SignatureV4;\n return new SignerCtor(params);\n };\n }\n return {\n ...input,\n systemClockOffset,\n signingEscapePath,\n credentials: normalizedCreds,\n signer,\n };\n};\nexport const resolveSigV4AuthConfig = (input) => {\n const normalizedCreds = input.credentials\n ? normalizeCredentialProvider(input.credentials)\n : input.credentialDefaultProvider(Object.assign({}, input, {\n parentClientConfig: input,\n }));\n const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;\n let signer;\n if (input.signer) {\n signer = normalizeProvider(input.signer);\n }\n else {\n signer = normalizeProvider(new SignatureV4({\n credentials: normalizedCreds,\n region: input.region,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n }));\n }\n return {\n ...input,\n systemClockOffset,\n signingEscapePath,\n credentials: normalizedCreds,\n signer,\n };\n};\nconst normalizeCredentialProvider = (credentials) => {\n if (typeof credentials === \"function\") {\n return memoize(credentials, (credentials) => credentials.expiration !== undefined &&\n credentials.expiration.getTime() - Date.now() < CREDENTIAL_EXPIRE_WINDOW, (credentials) => credentials.expiration !== undefined);\n }\n return normalizeProvider(credentials);\n};\n","export const getSkewCorrectedDate = (systemClockOffset) => new Date(Date.now() + systemClockOffset);\n","import { getSkewCorrectedDate } from \"./getSkewCorrectedDate\";\nexport const isClockSkewed = (clockTime, systemClockOffset) => Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - clockTime) >= 300000;\n","import { isClockSkewed } from \"./isClockSkewed\";\nexport const getUpdatedSystemClockOffset = (clockTime, currentSystemClockOffset) => {\n const clockTimeInMs = Date.parse(clockTime);\n if (isClockSkewed(clockTimeInMs, currentSystemClockOffset)) {\n return clockTimeInMs - Date.now();\n }\n return currentSystemClockOffset;\n};\n","import { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { getSkewCorrectedDate } from \"./utils/getSkewCorrectedDate\";\nimport { getUpdatedSystemClockOffset } from \"./utils/getUpdatedSystemClockOffset\";\nexport const awsAuthMiddleware = (options) => (next, context) => async function (args) {\n if (!HttpRequest.isInstance(args.request))\n return next(args);\n let authScheme;\n let signer;\n const firstAuthScheme = context.endpointV2?.properties?.authSchemes?.[0];\n const secondAuthScheme = context.endpointV2?.properties?.authSchemes?.[1];\n const firstAuthSchemeIsSigv4a = firstAuthScheme?.name === \"sigv4a\";\n if (firstAuthSchemeIsSigv4a && secondAuthScheme) {\n signer = await options.signer((authScheme = firstAuthScheme));\n const uncheckedSigner = signer;\n const sigv4aAvailable = (() => {\n if (typeof uncheckedSigner?.getSigv4aSigner === \"function\") {\n if (uncheckedSigner?.signerOptions?.runtime !== \"node\") {\n return false;\n }\n try {\n uncheckedSigner.getSigv4aSigner();\n return true;\n }\n catch (e) { }\n }\n return false;\n })();\n if (!sigv4aAvailable) {\n signer = await options.signer((authScheme = secondAuthScheme));\n }\n }\n else {\n signer = await options.signer((authScheme = firstAuthScheme));\n }\n let signedRequest;\n const multiRegionOverride = authScheme?.name === \"sigv4a\" ? authScheme?.signingRegionSet?.join(\",\") : undefined;\n const signingOptions = {\n signingDate: getSkewCorrectedDate(options.systemClockOffset),\n signingRegion: multiRegionOverride || context[\"signing_region\"],\n signingService: context[\"signing_service\"],\n };\n if (context.s3ExpressIdentity) {\n const sigV4MultiRegion = signer;\n signedRequest = await sigV4MultiRegion.signWithCredentials(args.request, context.s3ExpressIdentity, signingOptions);\n if (signedRequest.headers[\"X-Amz-Security-Token\"] || signedRequest.headers[\"x-amz-security-token\"]) {\n throw new Error(\"X-Amz-Security-Token must not be set for s3-express requests.\");\n }\n }\n else {\n signedRequest = await signer.sign(args.request, signingOptions);\n }\n const output = await next({\n ...args,\n request: signedRequest,\n }).catch((error) => {\n const serverTime = error.ServerTime ?? getDateHeader(error.$response);\n if (serverTime) {\n options.systemClockOffset = getUpdatedSystemClockOffset(serverTime, options.systemClockOffset);\n }\n throw error;\n });\n const dateHeader = getDateHeader(output.response);\n if (dateHeader) {\n options.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, options.systemClockOffset);\n }\n return output;\n};\nconst getDateHeader = (response) => HttpResponse.isInstance(response) ? response.headers?.date ?? response.headers?.Date : undefined;\nexport const awsAuthMiddlewareOptions = {\n name: \"awsAuthMiddleware\",\n tags: [\"SIGNATURE\", \"AWSAUTH\"],\n relation: \"after\",\n toMiddleware: \"retryMiddleware\",\n override: true,\n};\nexport const getAwsAuthPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(awsAuthMiddleware(options), awsAuthMiddlewareOptions);\n },\n});\nexport const getSigV4AuthPlugin = getAwsAuthPlugin;\n","export function resolveUserAgentConfig(input) {\n return {\n ...input,\n customUserAgent: typeof input.customUserAgent === \"string\" ? [[input.customUserAgent]] : input.customUserAgent,\n };\n}\n","const IP_V4_REGEX = new RegExp(`^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$`);\nexport const isIpAddress = (value) => IP_V4_REGEX.test(value) || (value.startsWith(\"[\") && value.endsWith(\"]\"));\n","const VALID_HOST_LABEL_REGEX = new RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`);\nexport const isValidHostLabel = (value, allowSubDomains = false) => {\n if (!allowSubDomains) {\n return VALID_HOST_LABEL_REGEX.test(value);\n }\n const labels = value.split(\".\");\n for (const label of labels) {\n if (!isValidHostLabel(label)) {\n return false;\n }\n }\n return true;\n};\n","export const customEndpointFunctions = {};\n","export const debugId = \"endpoints\";\n","export function toDebugString(input) {\n if (typeof input !== \"object\" || input == null) {\n return input;\n }\n if (\"ref\" in input) {\n return `$${toDebugString(input.ref)}`;\n }\n if (\"fn\" in input) {\n return `${input.fn}(${(input.argv || []).map(toDebugString).join(\", \")})`;\n }\n return JSON.stringify(input, null, 2);\n}\n","export class EndpointError extends Error {\n constructor(message) {\n super(message);\n this.name = \"EndpointError\";\n }\n}\n","export const booleanEquals = (value1, value2) => value1 === value2;\n","import { EndpointError } from \"../types\";\nexport const getAttrPathList = (path) => {\n const parts = path.split(\".\");\n const pathList = [];\n for (const part of parts) {\n const squareBracketIndex = part.indexOf(\"[\");\n if (squareBracketIndex !== -1) {\n if (part.indexOf(\"]\") !== part.length - 1) {\n throw new EndpointError(`Path: '${path}' does not end with ']'`);\n }\n const arrayIndex = part.slice(squareBracketIndex + 1, -1);\n if (Number.isNaN(parseInt(arrayIndex))) {\n throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path}'`);\n }\n if (squareBracketIndex !== 0) {\n pathList.push(part.slice(0, squareBracketIndex));\n }\n pathList.push(arrayIndex);\n }\n else {\n pathList.push(part);\n }\n }\n return pathList;\n};\n","import { EndpointError } from \"../types\";\nimport { getAttrPathList } from \"./getAttrPathList\";\nexport const getAttr = (value, path) => getAttrPathList(path).reduce((acc, index) => {\n if (typeof acc !== \"object\") {\n throw new EndpointError(`Index '${index}' in '${path}' not found in '${JSON.stringify(value)}'`);\n }\n else if (Array.isArray(acc)) {\n return acc[parseInt(index)];\n }\n return acc[index];\n}, value);\n","export const isSet = (value) => value != null;\n","export const not = (value) => !value;\n","import { EndpointURLScheme } from \"@smithy/types\";\nimport { isIpAddress } from \"./isIpAddress\";\nconst DEFAULT_PORTS = {\n [EndpointURLScheme.HTTP]: 80,\n [EndpointURLScheme.HTTPS]: 443,\n};\nexport const parseURL = (value) => {\n const whatwgURL = (() => {\n try {\n if (value instanceof URL) {\n return value;\n }\n if (typeof value === \"object\" && \"hostname\" in value) {\n const { hostname, port, protocol = \"\", path = \"\", query = {} } = value;\n const url = new URL(`${protocol}//${hostname}${port ? `:${port}` : \"\"}${path}`);\n url.search = Object.entries(query)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"&\");\n return url;\n }\n return new URL(value);\n }\n catch (error) {\n return null;\n }\n })();\n if (!whatwgURL) {\n console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);\n return null;\n }\n const urlString = whatwgURL.href;\n const { host, hostname, pathname, protocol, search } = whatwgURL;\n if (search) {\n return null;\n }\n const scheme = protocol.slice(0, -1);\n if (!Object.values(EndpointURLScheme).includes(scheme)) {\n return null;\n }\n const isIp = isIpAddress(hostname);\n const inputContainsDefaultPort = urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`) ||\n (typeof value === \"string\" && value.includes(`${host}:${DEFAULT_PORTS[scheme]}`));\n const authority = `${host}${inputContainsDefaultPort ? `:${DEFAULT_PORTS[scheme]}` : ``}`;\n return {\n scheme,\n authority,\n path: pathname,\n normalizedPath: pathname.endsWith(\"/\") ? pathname : `${pathname}/`,\n isIp,\n };\n};\n","export const stringEquals = (value1, value2) => value1 === value2;\n","export const substring = (input, start, stop, reverse) => {\n if (start >= stop || input.length < stop) {\n return null;\n }\n if (!reverse) {\n return input.substring(start, stop);\n }\n return input.substring(input.length - stop, input.length - start);\n};\n","export const uriEncode = (value) => encodeURIComponent(value).replace(/[!*'()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n","import { booleanEquals, getAttr, isSet, isValidHostLabel, not, parseURL, stringEquals, substring, uriEncode, } from \"../lib\";\nexport const endpointFunctions = {\n booleanEquals,\n getAttr,\n isSet,\n isValidHostLabel,\n not,\n parseURL,\n stringEquals,\n substring,\n uriEncode,\n};\n","import { getAttr } from \"../lib\";\nexport const evaluateTemplate = (template, options) => {\n const evaluatedTemplateArr = [];\n const templateContext = {\n ...options.endpointParams,\n ...options.referenceRecord,\n };\n let currentIndex = 0;\n while (currentIndex < template.length) {\n const openingBraceIndex = template.indexOf(\"{\", currentIndex);\n if (openingBraceIndex === -1) {\n evaluatedTemplateArr.push(template.slice(currentIndex));\n break;\n }\n evaluatedTemplateArr.push(template.slice(currentIndex, openingBraceIndex));\n const closingBraceIndex = template.indexOf(\"}\", openingBraceIndex);\n if (closingBraceIndex === -1) {\n evaluatedTemplateArr.push(template.slice(openingBraceIndex));\n break;\n }\n if (template[openingBraceIndex + 1] === \"{\" && template[closingBraceIndex + 1] === \"}\") {\n evaluatedTemplateArr.push(template.slice(openingBraceIndex + 1, closingBraceIndex));\n currentIndex = closingBraceIndex + 2;\n }\n const parameterName = template.substring(openingBraceIndex + 1, closingBraceIndex);\n if (parameterName.includes(\"#\")) {\n const [refName, attrName] = parameterName.split(\"#\");\n evaluatedTemplateArr.push(getAttr(templateContext[refName], attrName));\n }\n else {\n evaluatedTemplateArr.push(templateContext[parameterName]);\n }\n currentIndex = closingBraceIndex + 1;\n }\n return evaluatedTemplateArr.join(\"\");\n};\n","export const getReferenceValue = ({ ref }, options) => {\n const referenceRecord = {\n ...options.endpointParams,\n ...options.referenceRecord,\n };\n return referenceRecord[ref];\n};\n","import { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getReferenceValue } from \"./getReferenceValue\";\nexport const evaluateExpression = (obj, keyName, options) => {\n if (typeof obj === \"string\") {\n return evaluateTemplate(obj, options);\n }\n else if (obj[\"fn\"]) {\n return callFunction(obj, options);\n }\n else if (obj[\"ref\"]) {\n return getReferenceValue(obj, options);\n }\n throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`);\n};\n","import { customEndpointFunctions } from \"./customEndpointFunctions\";\nimport { endpointFunctions } from \"./endpointFunctions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const callFunction = ({ fn, argv }, options) => {\n const evaluatedArgs = argv.map((arg) => [\"boolean\", \"number\"].includes(typeof arg) ? arg : evaluateExpression(arg, \"arg\", options));\n const fnSegments = fn.split(\".\");\n if (fnSegments[0] in customEndpointFunctions && fnSegments[1] != null) {\n return customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs);\n }\n return endpointFunctions[fn](...evaluatedArgs);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nexport const evaluateCondition = ({ assign, ...fnArgs }, options) => {\n if (assign && assign in options.referenceRecord) {\n throw new EndpointError(`'${assign}' is already defined in Reference Record.`);\n }\n const value = callFunction(fnArgs, options);\n options.logger?.debug?.(`${debugId} evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);\n return {\n result: value === \"\" ? true : !!value,\n ...(assign != null && { toAssign: { name: assign, value } }),\n };\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateCondition } from \"./evaluateCondition\";\nexport const evaluateConditions = (conditions = [], options) => {\n const conditionsReferenceRecord = {};\n for (const condition of conditions) {\n const { result, toAssign } = evaluateCondition(condition, {\n ...options,\n referenceRecord: {\n ...options.referenceRecord,\n ...conditionsReferenceRecord,\n },\n });\n if (!result) {\n return { result };\n }\n if (toAssign) {\n conditionsReferenceRecord[toAssign.name] = toAssign.value;\n options.logger?.debug?.(`${debugId} assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`);\n }\n }\n return { result: true, referenceRecord: conditionsReferenceRecord };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointHeaders = (headers, options) => Object.entries(headers).reduce((acc, [headerKey, headerVal]) => ({\n ...acc,\n [headerKey]: headerVal.map((headerValEntry) => {\n const processedExpr = evaluateExpression(headerValEntry, \"Header value entry\", options);\n if (typeof processedExpr !== \"string\") {\n throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);\n }\n return processedExpr;\n }),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nexport const getEndpointProperty = (property, options) => {\n if (Array.isArray(property)) {\n return property.map((propertyEntry) => getEndpointProperty(propertyEntry, options));\n }\n switch (typeof property) {\n case \"string\":\n return evaluateTemplate(property, options);\n case \"object\":\n if (property === null) {\n throw new EndpointError(`Unexpected endpoint property: ${property}`);\n }\n return getEndpointProperties(property, options);\n case \"boolean\":\n return property;\n default:\n throw new EndpointError(`Unexpected endpoint property type: ${typeof property}`);\n }\n};\n","import { getEndpointProperty } from \"./getEndpointProperty\";\nexport const getEndpointProperties = (properties, options) => Object.entries(properties).reduce((acc, [propertyKey, propertyVal]) => ({\n ...acc,\n [propertyKey]: getEndpointProperty(propertyVal, options),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointUrl = (endpointUrl, options) => {\n const expression = evaluateExpression(endpointUrl, \"Endpoint URL\", options);\n if (typeof expression === \"string\") {\n try {\n return new URL(expression);\n }\n catch (error) {\n console.error(`Failed to construct URL with ${expression}`, error);\n throw error;\n }\n }\n throw new EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { getEndpointHeaders } from \"./getEndpointHeaders\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nimport { getEndpointUrl } from \"./getEndpointUrl\";\nexport const evaluateEndpointRule = (endpointRule, options) => {\n const { conditions, endpoint } = endpointRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n const endpointRuleOptions = {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n };\n const { url, properties, headers } = endpoint;\n options.logger?.debug?.(`${debugId} Resolving endpoint from template: ${toDebugString(endpoint)}`);\n return {\n ...(headers != undefined && {\n headers: getEndpointHeaders(headers, endpointRuleOptions),\n }),\n ...(properties != undefined && {\n properties: getEndpointProperties(properties, endpointRuleOptions),\n }),\n url: getEndpointUrl(url, endpointRuleOptions),\n };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const evaluateErrorRule = (errorRule, options) => {\n const { conditions, error } = errorRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n throw new EndpointError(evaluateExpression(error, \"Error\", {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n }));\n};\n","import { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateRules } from \"./evaluateRules\";\nexport const evaluateTreeRule = (treeRule, options) => {\n const { conditions, rules } = treeRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n return evaluateRules(rules, {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n });\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateEndpointRule } from \"./evaluateEndpointRule\";\nimport { evaluateErrorRule } from \"./evaluateErrorRule\";\nimport { evaluateTreeRule } from \"./evaluateTreeRule\";\nexport const evaluateRules = (rules, options) => {\n for (const rule of rules) {\n if (rule.type === \"endpoint\") {\n const endpointOrUndefined = evaluateEndpointRule(rule, options);\n if (endpointOrUndefined) {\n return endpointOrUndefined;\n }\n }\n else if (rule.type === \"error\") {\n evaluateErrorRule(rule, options);\n }\n else if (rule.type === \"tree\") {\n const endpointOrUndefined = evaluateTreeRule(rule, options);\n if (endpointOrUndefined) {\n return endpointOrUndefined;\n }\n }\n else {\n throw new EndpointError(`Unknown endpoint rule: ${rule}`);\n }\n }\n throw new EndpointError(`Rules evaluation failed`);\n};\n","import { debugId, toDebugString } from \"./debug\";\nimport { EndpointError } from \"./types\";\nimport { evaluateRules } from \"./utils\";\nexport const resolveEndpoint = (ruleSetObject, options) => {\n const { endpointParams, logger } = options;\n const { parameters, rules } = ruleSetObject;\n options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);\n const paramsWithDefault = Object.entries(parameters)\n .filter(([, v]) => v.default != null)\n .map(([k, v]) => [k, v.default]);\n if (paramsWithDefault.length > 0) {\n for (const [paramKey, paramDefaultValue] of paramsWithDefault) {\n endpointParams[paramKey] = endpointParams[paramKey] ?? paramDefaultValue;\n }\n }\n const requiredParams = Object.entries(parameters)\n .filter(([, v]) => v.required)\n .map(([k]) => k);\n for (const requiredParam of requiredParams) {\n if (endpointParams[requiredParam] == null) {\n throw new EndpointError(`Missing required parameter: '${requiredParam}'`);\n }\n }\n const endpoint = evaluateRules(rules, { endpointParams, logger, referenceRecord: {} });\n options.logger?.debug?.(`${debugId} Resolved endpoint: ${toDebugString(endpoint)}`);\n return endpoint;\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n if (allowSubDomains) {\n for (const label of value.split(\".\")) {\n if (!isVirtualHostableS3Bucket(label)) {\n return false;\n }\n }\n return true;\n }\n if (!isValidHostLabel(value)) {\n return false;\n }\n if (value.length < 3 || value.length > 63) {\n return false;\n }\n if (value !== value.toLowerCase()) {\n return false;\n }\n if (isIpAddress(value)) {\n return false;\n }\n return true;\n};\n","export const parseArn = (value) => {\n const segments = value.split(\":\");\n if (segments.length < 6)\n return null;\n const [arn, partition, service, region, accountId, ...resourceId] = segments;\n if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourceId[0] === \"\")\n return null;\n return {\n partition,\n service,\n region,\n accountId,\n resourceId: resourceId[0].includes(\"/\") ? resourceId[0].split(\"/\") : resourceId,\n };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n const { partitions } = selectedPartitionsInfo;\n for (const partition of partitions) {\n const { regions, outputs } = partition;\n for (const [region, regionData] of Object.entries(regions)) {\n if (region === value) {\n return {\n ...outputs,\n ...regionData,\n };\n }\n }\n }\n for (const partition of partitions) {\n const { regionRegex, outputs } = partition;\n if (new RegExp(regionRegex).test(value)) {\n return {\n ...outputs,\n };\n }\n }\n const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n if (!DEFAULT_PARTITION) {\n throw new Error(\"Provided region was not found in the partition array or regex,\" +\n \" and default partition with id 'aws' doesn't exist.\");\n }\n return {\n ...DEFAULT_PARTITION.outputs,\n };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n selectedPartitionsInfo = partitionsInfo;\n selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nexport const awsEndpointFunctions = {\n isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n parseArn: parseArn,\n partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export const USER_AGENT = \"user-agent\";\nexport const X_AMZ_USER_AGENT = \"x-amz-user-agent\";\nexport const SPACE = \" \";\nexport const UA_NAME_SEPARATOR = \"/\";\nexport const UA_NAME_ESCAPE_REGEX = /[^\\!\\$\\%\\&\\'\\*\\+\\-\\.\\^\\_\\`\\|\\~\\d\\w]/g;\nexport const UA_VALUE_ESCAPE_REGEX = /[^\\!\\$\\%\\&\\'\\*\\+\\-\\.\\^\\_\\`\\|\\~\\d\\w\\#]/g;\nexport const UA_ESCAPE_CHAR = \"-\";\n","import { getUserAgentPrefix } from \"@aws-sdk/util-endpoints\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { SPACE, UA_ESCAPE_CHAR, UA_NAME_ESCAPE_REGEX, UA_NAME_SEPARATOR, UA_VALUE_ESCAPE_REGEX, USER_AGENT, X_AMZ_USER_AGENT, } from \"./constants\";\nexport const userAgentMiddleware = (options) => (next, context) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request))\n return next(args);\n const { headers } = request;\n const userAgent = context?.userAgent?.map(escapeUserAgent) || [];\n const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);\n const customUserAgent = options?.customUserAgent?.map(escapeUserAgent) || [];\n const prefix = getUserAgentPrefix();\n const sdkUserAgentValue = (prefix ? [prefix] : [])\n .concat([...defaultUserAgent, ...userAgent, ...customUserAgent])\n .join(SPACE);\n const normalUAValue = [\n ...defaultUserAgent.filter((section) => section.startsWith(\"aws-sdk-\")),\n ...customUserAgent,\n ].join(SPACE);\n if (options.runtime !== \"browser\") {\n if (normalUAValue) {\n headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT]\n ? `${headers[USER_AGENT]} ${normalUAValue}`\n : normalUAValue;\n }\n headers[USER_AGENT] = sdkUserAgentValue;\n }\n else {\n headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;\n }\n return next({\n ...args,\n request,\n });\n};\nconst escapeUserAgent = (userAgentPair) => {\n const name = userAgentPair[0]\n .split(UA_NAME_SEPARATOR)\n .map((part) => part.replace(UA_NAME_ESCAPE_REGEX, UA_ESCAPE_CHAR))\n .join(UA_NAME_SEPARATOR);\n const version = userAgentPair[1]?.replace(UA_VALUE_ESCAPE_REGEX, UA_ESCAPE_CHAR);\n const prefixSeparatorIndex = name.indexOf(UA_NAME_SEPARATOR);\n const prefix = name.substring(0, prefixSeparatorIndex);\n let uaName = name.substring(prefixSeparatorIndex + 1);\n if (prefix === \"api\") {\n uaName = uaName.toLowerCase();\n }\n return [prefix, uaName, version]\n .filter((item) => item && item.length > 0)\n .reduce((acc, item, index) => {\n switch (index) {\n case 0:\n return item;\n case 1:\n return `${acc}/${item}`;\n default:\n return `${acc}#${item}`;\n }\n }, \"\");\n};\nexport const getUserAgentMiddlewareOptions = {\n name: \"getUserAgentMiddleware\",\n step: \"build\",\n priority: \"low\",\n tags: [\"SET_USER_AGENT\", \"USER_AGENT\"],\n override: true,\n};\nexport const getUserAgentPlugin = (config) => ({\n applyToStack: (clientStack) => {\n clientStack.add(userAgentMiddleware(config), getUserAgentMiddlewareOptions);\n },\n});\n","import { __values } from \"tslib\";\nimport { uint32ArrayFrom } from \"@aws-crypto/util\";\nexport function crc32(data) {\n return new Crc32().update(data).digest();\n}\nvar Crc32 = /** @class */ (function () {\n function Crc32() {\n this.checksum = 0xffffffff;\n }\n Crc32.prototype.update = function (data) {\n var e_1, _a;\n try {\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var byte = data_1_1.value;\n this.checksum =\n (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return this;\n };\n Crc32.prototype.digest = function () {\n return (this.checksum ^ 0xffffffff) >>> 0;\n };\n return Crc32;\n}());\nexport { Crc32 };\n// prettier-ignore\nvar a_lookUpTable = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,\n];\nvar lookupTable = uint32ArrayFrom(a_lookUpTable);\nexport { AwsCrc32 } from \"./aws_crc32\";\n//# sourceMappingURL=index.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { toHex } from \"@smithy/util-hex-encoding\";\nexport class Int64 {\n constructor(bytes) {\n this.bytes = bytes;\n if (bytes.byteLength !== 8) {\n throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n }\n }\n static fromNumber(number) {\n if (number > 9223372036854776000 || number < -9223372036854776000) {\n throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n }\n const bytes = new Uint8Array(8);\n for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n bytes[i] = remaining;\n }\n if (number < 0) {\n negate(bytes);\n }\n return new Int64(bytes);\n }\n valueOf() {\n const bytes = this.bytes.slice(0);\n const negative = bytes[0] & 0b10000000;\n if (negative) {\n negate(bytes);\n }\n return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n }\n toString() {\n return String(this.valueOf());\n }\n}\nfunction negate(bytes) {\n for (let i = 0; i < 8; i++) {\n bytes[i] ^= 0xff;\n }\n for (let i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0)\n break;\n }\n}\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { Int64 } from \"./Int64\";\nexport class HeaderMarshaller {\n constructor(toUtf8, fromUtf8) {\n this.toUtf8 = toUtf8;\n this.fromUtf8 = fromUtf8;\n }\n format(headers) {\n const chunks = [];\n for (const headerName of Object.keys(headers)) {\n const bytes = this.fromUtf8(headerName);\n chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n }\n const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n let position = 0;\n for (const chunk of chunks) {\n out.set(chunk, position);\n position += chunk.byteLength;\n }\n return out;\n }\n formatHeaderValue(header) {\n switch (header.type) {\n case \"boolean\":\n return Uint8Array.from([header.value ? 0 : 1]);\n case \"byte\":\n return Uint8Array.from([2, header.value]);\n case \"short\":\n const shortView = new DataView(new ArrayBuffer(3));\n shortView.setUint8(0, 3);\n shortView.setInt16(1, header.value, false);\n return new Uint8Array(shortView.buffer);\n case \"integer\":\n const intView = new DataView(new ArrayBuffer(5));\n intView.setUint8(0, 4);\n intView.setInt32(1, header.value, false);\n return new Uint8Array(intView.buffer);\n case \"long\":\n const longBytes = new Uint8Array(9);\n longBytes[0] = 5;\n longBytes.set(header.value.bytes, 1);\n return longBytes;\n case \"binary\":\n const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n binView.setUint8(0, 6);\n binView.setUint16(1, header.value.byteLength, false);\n const binBytes = new Uint8Array(binView.buffer);\n binBytes.set(header.value, 3);\n return binBytes;\n case \"string\":\n const utf8Bytes = this.fromUtf8(header.value);\n const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n strView.setUint8(0, 7);\n strView.setUint16(1, utf8Bytes.byteLength, false);\n const strBytes = new Uint8Array(strView.buffer);\n strBytes.set(utf8Bytes, 3);\n return strBytes;\n case \"timestamp\":\n const tsBytes = new Uint8Array(9);\n tsBytes[0] = 8;\n tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n return tsBytes;\n case \"uuid\":\n if (!UUID_PATTERN.test(header.value)) {\n throw new Error(`Invalid UUID received: ${header.value}`);\n }\n const uuidBytes = new Uint8Array(17);\n uuidBytes[0] = 9;\n uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n return uuidBytes;\n }\n }\n parse(headers) {\n const out = {};\n let position = 0;\n while (position < headers.byteLength) {\n const nameLength = headers.getUint8(position++);\n const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));\n position += nameLength;\n switch (headers.getUint8(position++)) {\n case 0:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true,\n };\n break;\n case 1:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false,\n };\n break;\n case 2:\n out[name] = {\n type: BYTE_TAG,\n value: headers.getInt8(position++),\n };\n break;\n case 3:\n out[name] = {\n type: SHORT_TAG,\n value: headers.getInt16(position, false),\n };\n position += 2;\n break;\n case 4:\n out[name] = {\n type: INT_TAG,\n value: headers.getInt32(position, false),\n };\n position += 4;\n break;\n case 5:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),\n };\n position += 8;\n break;\n case 6:\n const binaryLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),\n };\n position += binaryLength;\n break;\n case 7:\n const stringLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),\n };\n position += stringLength;\n break;\n case 8:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),\n };\n position += 8;\n break;\n case 9:\n const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: `${toHex(uuidBytes.subarray(0, 4))}-${toHex(uuidBytes.subarray(4, 6))}-${toHex(uuidBytes.subarray(6, 8))}-${toHex(uuidBytes.subarray(8, 10))}-${toHex(uuidBytes.subarray(10))}`,\n };\n break;\n default:\n throw new Error(`Unrecognized header type tag`);\n }\n }\n return out;\n }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst BOOLEAN_TAG = \"boolean\";\nconst BYTE_TAG = \"byte\";\nconst SHORT_TAG = \"short\";\nconst INT_TAG = \"integer\";\nconst LONG_TAG = \"long\";\nconst BINARY_TAG = \"binary\";\nconst STRING_TAG = \"string\";\nconst TIMESTAMP_TAG = \"timestamp\";\nconst UUID_TAG = \"uuid\";\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\n","import { Crc32 } from \"@aws-crypto/crc32\";\nconst PRELUDE_MEMBER_LENGTH = 4;\nconst PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\nconst CHECKSUM_LENGTH = 4;\nconst MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\nexport function splitMessage({ byteLength, byteOffset, buffer }) {\n if (byteLength < MINIMUM_MESSAGE_LENGTH) {\n throw new Error(\"Provided message too short to accommodate event stream message overhead\");\n }\n const view = new DataView(buffer, byteOffset, byteLength);\n const messageLength = view.getUint32(0, false);\n if (byteLength !== messageLength) {\n throw new Error(\"Reported message length does not match received message length\");\n }\n const headerLength = view.getUint32(PRELUDE_MEMBER_LENGTH, false);\n const expectedPreludeChecksum = view.getUint32(PRELUDE_LENGTH, false);\n const expectedMessageChecksum = view.getUint32(byteLength - CHECKSUM_LENGTH, false);\n const checksummer = new Crc32().update(new Uint8Array(buffer, byteOffset, PRELUDE_LENGTH));\n if (expectedPreludeChecksum !== checksummer.digest()) {\n throw new Error(`The prelude checksum specified in the message (${expectedPreludeChecksum}) does not match the calculated CRC32 checksum (${checksummer.digest()})`);\n }\n checksummer.update(new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH, byteLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH)));\n if (expectedMessageChecksum !== checksummer.digest()) {\n throw new Error(`The message checksum (${checksummer.digest()}) did not match the expected value of ${expectedMessageChecksum}`);\n }\n return {\n headers: new DataView(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH, headerLength),\n body: new Uint8Array(buffer, byteOffset + PRELUDE_LENGTH + CHECKSUM_LENGTH + headerLength, messageLength - headerLength - (PRELUDE_LENGTH + CHECKSUM_LENGTH + CHECKSUM_LENGTH)),\n };\n}\n","import { Crc32 } from \"@aws-crypto/crc32\";\nimport { HeaderMarshaller } from \"./HeaderMarshaller\";\nimport { splitMessage } from \"./splitMessage\";\nexport class EventStreamCodec {\n constructor(toUtf8, fromUtf8) {\n this.headerMarshaller = new HeaderMarshaller(toUtf8, fromUtf8);\n this.messageBuffer = [];\n this.isEndOfStream = false;\n }\n feed(message) {\n this.messageBuffer.push(this.decode(message));\n }\n endOfStream() {\n this.isEndOfStream = true;\n }\n getMessage() {\n const message = this.messageBuffer.pop();\n const isEndOfStream = this.isEndOfStream;\n return {\n getMessage() {\n return message;\n },\n isEndOfStream() {\n return isEndOfStream;\n },\n };\n }\n getAvailableMessages() {\n const messages = this.messageBuffer;\n this.messageBuffer = [];\n const isEndOfStream = this.isEndOfStream;\n return {\n getMessages() {\n return messages;\n },\n isEndOfStream() {\n return isEndOfStream;\n },\n };\n }\n encode({ headers: rawHeaders, body }) {\n const headers = this.headerMarshaller.format(rawHeaders);\n const length = headers.byteLength + body.byteLength + 16;\n const out = new Uint8Array(length);\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n const checksum = new Crc32();\n view.setUint32(0, length, false);\n view.setUint32(4, headers.byteLength, false);\n view.setUint32(8, checksum.update(out.subarray(0, 8)).digest(), false);\n out.set(headers, 12);\n out.set(body, headers.byteLength + 12);\n view.setUint32(length - 4, checksum.update(out.subarray(8, length - 4)).digest(), false);\n return out;\n }\n decode(message) {\n const { headers, body } = splitMessage(message);\n return { headers: this.headerMarshaller.parse(headers), body };\n }\n formatHeaders(rawHeaders) {\n return this.headerMarshaller.format(rawHeaders);\n }\n}\n","export class MessageDecoderStream {\n constructor(options) {\n this.options = options;\n }\n [Symbol.asyncIterator]() {\n return this.asyncIterator();\n }\n async *asyncIterator() {\n for await (const bytes of this.options.inputStream) {\n const decoded = this.options.decoder.decode(bytes);\n yield decoded;\n }\n }\n}\n","export class MessageEncoderStream {\n constructor(options) {\n this.options = options;\n }\n [Symbol.asyncIterator]() {\n return this.asyncIterator();\n }\n async *asyncIterator() {\n for await (const msg of this.options.messageStream) {\n const encoded = this.options.encoder.encode(msg);\n yield encoded;\n }\n if (this.options.includeEndFrame) {\n yield new Uint8Array(0);\n }\n }\n}\n","export class SmithyMessageDecoderStream {\n constructor(options) {\n this.options = options;\n }\n [Symbol.asyncIterator]() {\n return this.asyncIterator();\n }\n async *asyncIterator() {\n for await (const message of this.options.messageStream) {\n const deserialized = await this.options.deserializer(message);\n if (deserialized === undefined)\n continue;\n yield deserialized;\n }\n }\n}\n","export class SmithyMessageEncoderStream {\n constructor(options) {\n this.options = options;\n }\n [Symbol.asyncIterator]() {\n return this.asyncIterator();\n }\n async *asyncIterator() {\n for await (const chunk of this.options.inputStream) {\n const payloadBuf = this.options.serializer(chunk);\n yield payloadBuf;\n }\n }\n}\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { fromHex } from \"@smithy/util-hex-encoding\";\nexport const getEventSigningTransformStream = (initialSignature, messageSigner, eventStreamCodec, systemClockOffsetProvider) => {\n let priorSignature = initialSignature;\n const transformer = {\n start() { },\n async transform(chunk, controller) {\n try {\n const now = new Date(Date.now() + (await systemClockOffsetProvider()));\n const dateHeader = {\n \":date\": { type: \"timestamp\", value: now },\n };\n const signedMessage = await messageSigner.sign({\n message: {\n body: chunk,\n headers: dateHeader,\n },\n priorSignature: priorSignature,\n }, {\n signingDate: now,\n });\n priorSignature = signedMessage.signature;\n const serializedSigned = eventStreamCodec.encode({\n headers: {\n ...dateHeader,\n \":chunk-signature\": {\n type: \"binary\",\n value: fromHex(signedMessage.signature),\n },\n },\n body: chunk,\n });\n controller.enqueue(serializedSigned);\n }\n catch (error) {\n controller.error(error);\n }\n },\n };\n return new TransformStream({ ...transformer });\n};\n","import { EventStreamCodec } from \"@smithy/eventstream-codec\";\nimport { getEventSigningTransformStream } from \"./get-event-signing-stream\";\nexport class EventStreamPayloadHandler {\n constructor(options) {\n this.messageSigner = options.messageSigner;\n this.eventStreamCodec = new EventStreamCodec(options.utf8Encoder, options.utf8Decoder);\n this.systemClockOffsetProvider = async () => options.systemClockOffset ?? 0;\n }\n async handle(next, args, context = {}) {\n const request = args.request;\n const { body: payload, headers, query } = request;\n if (!(payload instanceof ReadableStream)) {\n throw new Error(\"Eventstream payload must be a ReadableStream.\");\n }\n const placeHolderStream = new TransformStream();\n request.body = placeHolderStream.readable;\n let result;\n try {\n result = await next(args);\n }\n catch (e) {\n request.body.cancel();\n throw e;\n }\n const match = (headers[\"authorization\"] || \"\").match(/Signature=([\\w]+)$/);\n const priorSignature = (match || [])[1] || (query && query[\"X-Amz-Signature\"]) || \"\";\n const signingStream = getEventSigningTransformStream(priorSignature, await this.messageSigner(), this.eventStreamCodec, this.systemClockOffsetProvider);\n const signedPayload = payload.pipeThrough(signingStream);\n signedPayload.pipeThrough(placeHolderStream);\n return result;\n }\n}\n","import { EventStreamPayloadHandler } from \"./EventStreamPayloadHandler\";\nexport const eventStreamPayloadHandlerProvider = (options) => new EventStreamPayloadHandler(options);\n","export const injectSessionIdMiddleware = () => (next) => async (args) => {\n const requestParams = {\n ...args.input,\n };\n const response = await next(args);\n const output = response.output;\n if (requestParams.SessionId && output.SessionId == null) {\n output.SessionId = requestParams.SessionId;\n }\n return response;\n};\nexport const injectSessionIdMiddlewareOptions = {\n step: \"initialize\",\n name: \"injectSessionIdMiddleware\",\n tags: [\"WEBSOCKET\", \"EVENT_STREAM\"],\n override: true,\n};\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport const websocketEndpointMiddleware = (config, options) => (next) => (args) => {\n const { request } = args;\n if (HttpRequest.isInstance(request) &&\n config.requestHandler.metadata?.handlerProtocol?.toLowerCase().includes(\"websocket\")) {\n request.protocol = \"wss:\";\n request.method = \"GET\";\n request.path = `${request.path}-websocket`;\n const { headers } = request;\n delete headers[\"content-type\"];\n delete headers[\"x-amz-content-sha256\"];\n for (const name of Object.keys(headers)) {\n if (name.indexOf(options.headerPrefix) === 0) {\n const chunkedName = name.replace(options.headerPrefix, \"\");\n request.query[chunkedName] = headers[name];\n }\n }\n if (headers[\"x-amz-user-agent\"]) {\n request.query[\"user-agent\"] = headers[\"x-amz-user-agent\"];\n }\n request.headers = { host: headers.host ?? request.hostname };\n }\n return next(args);\n};\nexport const websocketEndpointMiddlewareOptions = {\n name: \"websocketEndpointMiddleware\",\n tags: [\"WEBSOCKET\", \"EVENT_STREAM\"],\n relation: \"after\",\n toMiddleware: \"eventStreamHeaderMiddleware\",\n override: true,\n};\n","import { injectSessionIdMiddleware, injectSessionIdMiddlewareOptions } from \"./middleware-session-id\";\nimport { websocketEndpointMiddleware, websocketEndpointMiddlewareOptions } from \"./middleware-websocket-endpoint\";\nexport const getWebSocketPlugin = (config, options) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(websocketEndpointMiddleware(config, options), websocketEndpointMiddlewareOptions);\n clientStack.add(injectSessionIdMiddleware(), injectSessionIdMiddlewareOptions);\n },\n});\n","export const isWebSocketRequest = (request) => request.protocol === \"ws:\" || request.protocol === \"wss:\";\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { isWebSocketRequest } from \"./utils\";\nexport class WebsocketSignatureV4 {\n constructor(options) {\n this.signer = options.signer;\n }\n presign(originalRequest, options = {}) {\n return this.signer.presign(originalRequest, options);\n }\n async sign(toSign, options) {\n if (HttpRequest.isInstance(toSign) && isWebSocketRequest(toSign)) {\n const signedRequest = await this.signer.presign({ ...toSign, body: \"\" }, {\n ...options,\n expiresIn: 60,\n unsignableHeaders: new Set(Object.keys(toSign.headers).filter((header) => header !== \"host\")),\n });\n return {\n ...signedRequest,\n body: toSign.body,\n };\n }\n else {\n return this.signer.sign(toSign, options);\n }\n }\n}\n","import { WebsocketSignatureV4 } from \"./WebsocketSignatureV4\";\nexport const resolveWebSocketConfig = (input) => ({\n ...input,\n signer: async (authScheme) => {\n const signerObj = await input.signer(authScheme);\n if (validateSigner(signerObj)) {\n return new WebsocketSignatureV4({ signer: signerObj });\n }\n throw new Error(\"Expected WebsocketSignatureV4 signer, please check the client constructor.\");\n },\n});\nconst validateSigner = (signer) => !!signer;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nexport function buildQueryString(query) {\n const parts = [];\n for (let key of Object.keys(query).sort()) {\n const value = query[key];\n key = escapeUri(key);\n if (Array.isArray(value)) {\n for (let i = 0, iLen = value.length; i < iLen; i++) {\n parts.push(`${key}=${escapeUri(value[i])}`);\n }\n }\n else {\n let qsEntry = key;\n if (value || typeof value === \"string\") {\n qsEntry += `=${escapeUri(value)}`;\n }\n parts.push(qsEntry);\n }\n }\n return parts.join(\"&\");\n}\n","import { buildQueryString } from \"@smithy/querystring-builder\";\nexport function formatUrl(request) {\n const { port, query } = request;\n let { protocol, path, hostname } = request;\n if (protocol && protocol.slice(-1) !== \":\") {\n protocol += \":\";\n }\n if (port) {\n hostname += `:${port}`;\n }\n if (path && path.charAt(0) !== \"/\") {\n path = `/${path}`;\n }\n let queryString = query ? buildQueryString(query) : \"\";\n if (queryString && queryString[0] !== \"?\") {\n queryString = `?${queryString}`;\n }\n let auth = \"\";\n if (request.username != null || request.password != null) {\n const username = request.username ?? \"\";\n const password = request.password ?? \"\";\n auth = `${username}:${password}@`;\n }\n let fragment = \"\";\n if (request.fragment) {\n fragment = `#${request.fragment}`;\n }\n return `${protocol}//${auth}${hostname}${path}${queryString}${fragment}`;\n}\n","export const readableStreamtoIterable = (readableStream) => ({\n [Symbol.asyncIterator]: async function* () {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n return;\n yield value;\n }\n }\n finally {\n reader.releaseLock();\n }\n },\n});\nexport const iterableToReadableStream = (asyncIterable) => {\n const iterator = asyncIterable[Symbol.asyncIterator]();\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await iterator.next();\n if (done) {\n return controller.close();\n }\n controller.enqueue(value);\n },\n });\n};\n","export function requestTimeout(timeoutInMs = 0) {\n return new Promise((resolve, reject) => {\n if (timeoutInMs) {\n setTimeout(() => {\n const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n timeoutError.name = \"TimeoutError\";\n reject(timeoutError);\n }, timeoutInMs);\n }\n });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { requestTimeout } from \"./request-timeout\";\nexport const keepAliveSupport = {\n supported: undefined,\n};\nexport class FetchHttpHandler {\n static create(instanceOrOptions) {\n if (typeof instanceOrOptions?.handle === \"function\") {\n return instanceOrOptions;\n }\n return new FetchHttpHandler(instanceOrOptions);\n }\n constructor(options) {\n if (typeof options === \"function\") {\n this.configProvider = options().then((opts) => opts || {});\n }\n else {\n this.config = options ?? {};\n this.configProvider = Promise.resolve(this.config);\n }\n if (keepAliveSupport.supported === undefined) {\n keepAliveSupport.supported = Boolean(typeof Request !== \"undefined\" && \"keepalive\" in new Request(\"https://[::1]\"));\n }\n }\n destroy() {\n }\n async handle(request, { abortSignal } = {}) {\n if (!this.config) {\n this.config = await this.configProvider;\n }\n const requestTimeoutInMs = this.config.requestTimeout;\n const keepAlive = this.config.keepAlive === true;\n const credentials = this.config.credentials;\n if (abortSignal?.aborted) {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n return Promise.reject(abortError);\n }\n let path = request.path;\n const queryString = buildQueryString(request.query || {});\n if (queryString) {\n path += `?${queryString}`;\n }\n if (request.fragment) {\n path += `#${request.fragment}`;\n }\n let auth = \"\";\n if (request.username != null || request.password != null) {\n const username = request.username ?? \"\";\n const password = request.password ?? \"\";\n auth = `${username}:${password}@`;\n }\n const { port, method } = request;\n const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n const requestOptions = {\n body,\n headers: new Headers(request.headers),\n method: method,\n credentials,\n };\n if (this.config?.cache) {\n requestOptions.cache = this.config.cache;\n }\n if (body) {\n requestOptions.duplex = \"half\";\n }\n if (typeof AbortController !== \"undefined\") {\n requestOptions.signal = abortSignal;\n }\n if (keepAliveSupport.supported) {\n requestOptions.keepalive = keepAlive;\n }\n if (typeof this.config.requestInit === \"function\") {\n Object.assign(requestOptions, this.config.requestInit(request));\n }\n let removeSignalEventListener = () => { };\n const fetchRequest = new Request(url, requestOptions);\n const raceOfPromises = [\n fetch(fetchRequest).then((response) => {\n const fetchHeaders = response.headers;\n const transformedHeaders = {};\n for (const pair of fetchHeaders.entries()) {\n transformedHeaders[pair[0]] = pair[1];\n }\n const hasReadableStream = response.body != undefined;\n if (!hasReadableStream) {\n return response.blob().then((body) => ({\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body,\n }),\n }));\n }\n return {\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body: response.body,\n }),\n };\n }),\n requestTimeout(requestTimeoutInMs),\n ];\n if (abortSignal) {\n raceOfPromises.push(new Promise((resolve, reject) => {\n const onAbort = () => {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n if (typeof abortSignal.addEventListener === \"function\") {\n const signal = abortSignal;\n signal.addEventListener(\"abort\", onAbort, { once: true });\n removeSignalEventListener = () => signal.removeEventListener(\"abort\", onAbort);\n }\n else {\n abortSignal.onabort = onAbort;\n }\n }));\n }\n return Promise.race(raceOfPromises).finally(removeSignalEventListener);\n }\n updateHttpClientConfig(key, value) {\n this.config = undefined;\n this.configProvider = this.configProvider.then((config) => {\n config[key] = value;\n return config;\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n}\n","const alphabetByEncoding = {};\nconst alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nconst bitsPerLetter = 6;\nconst bitsPerByte = 8;\nconst maxLetterValue = 0b111111;\nexport { alphabetByEncoding, alphabetByValue, bitsPerLetter, bitsPerByte, maxLetterValue };\n","import { alphabetByEncoding, bitsPerByte, bitsPerLetter } from \"./constants.browser\";\nexport const fromBase64 = (input) => {\n let totalByteLength = (input.length / 4) * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n }\n else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << ((limit - j) * bitsPerLetter);\n bitLength += bitsPerLetter;\n }\n else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = (i / 4) * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & (255 << offset)) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"@smithy/util-utf8\";\nimport { alphabetByValue, bitsPerByte, bitsPerLetter, maxLetterValue } from \"./constants.browser\";\nexport function toBase64(_input) {\n let input;\n if (typeof _input === \"string\") {\n input = fromUtf8(_input);\n }\n else {\n input = _input;\n }\n const isArrayLike = typeof input === \"object\" && typeof input.length === \"number\";\n const isUint8Array = typeof input === \"object\" &&\n typeof input.byteOffset === \"number\" &&\n typeof input.byteLength === \"number\";\n if (!isArrayLike && !isUint8Array) {\n throw new Error(\"@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.\");\n }\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << ((limit - j - 1) * bitsPerByte);\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & (maxLetterValue << offset)) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n","import { formatUrl } from \"@aws-sdk/util-format-url\";\nimport { iterableToReadableStream, readableStreamtoIterable } from \"@smithy/eventstream-serde-browser\";\nimport { FetchHttpHandler } from \"@smithy/fetch-http-handler\";\nimport { HttpResponse } from \"@smithy/protocol-http\";\nimport { isWebSocketRequest } from \"./utils\";\nconst DEFAULT_WS_CONNECTION_TIMEOUT_MS = 2000;\nexport class WebSocketFetchHandler {\n static create(instanceOrOptions, httpHandler = new FetchHttpHandler()) {\n if (typeof instanceOrOptions?.handle === \"function\") {\n return instanceOrOptions;\n }\n return new WebSocketFetchHandler(instanceOrOptions, httpHandler);\n }\n constructor(options, httpHandler = new FetchHttpHandler()) {\n this.metadata = {\n handlerProtocol: \"websocket/h1.1\",\n };\n this.sockets = {};\n this.httpHandler = httpHandler;\n if (typeof options === \"function\") {\n this.config = {};\n this.configPromise = options().then((opts) => (this.config = opts ?? {}));\n }\n else {\n this.config = options ?? {};\n this.configPromise = Promise.resolve(this.config);\n }\n }\n destroy() {\n for (const [key, sockets] of Object.entries(this.sockets)) {\n for (const socket of sockets) {\n socket.close(1000, `Socket closed through destroy() call`);\n }\n delete this.sockets[key];\n }\n }\n async handle(request) {\n if (!isWebSocketRequest(request)) {\n return this.httpHandler.handle(request);\n }\n const url = formatUrl(request);\n const socket = new WebSocket(url);\n if (!this.sockets[url]) {\n this.sockets[url] = [];\n }\n this.sockets[url].push(socket);\n socket.binaryType = \"arraybuffer\";\n this.config = await this.configPromise;\n const { connectionTimeout = DEFAULT_WS_CONNECTION_TIMEOUT_MS } = this.config;\n await this.waitForReady(socket, connectionTimeout);\n const { body } = request;\n const bodyStream = getIterator(body);\n const asyncIterable = this.connect(socket, bodyStream);\n const outputPayload = toReadableStream(asyncIterable);\n return {\n response: new HttpResponse({\n statusCode: 200,\n body: outputPayload,\n }),\n };\n }\n updateHttpClientConfig(key, value) {\n this.configPromise = this.configPromise.then((config) => {\n config[key] = value;\n return config;\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n removeNotUsableSockets(url) {\n this.sockets[url] = (this.sockets[url] ?? []).filter((socket) => ![WebSocket.CLOSING, WebSocket.CLOSED].includes(socket.readyState));\n }\n waitForReady(socket, connectionTimeout) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.removeNotUsableSockets(socket.url);\n reject({\n $metadata: {\n httpStatusCode: 500,\n },\n });\n }, connectionTimeout);\n socket.onopen = () => {\n clearTimeout(timeout);\n resolve();\n };\n });\n }\n connect(socket, data) {\n let streamError = undefined;\n let socketErrorOccurred = false;\n let reject = () => { };\n let resolve = () => { };\n socket.onmessage = (event) => {\n resolve({\n done: false,\n value: new Uint8Array(event.data),\n });\n };\n socket.onerror = (error) => {\n socketErrorOccurred = true;\n socket.close();\n reject(error);\n };\n socket.onclose = () => {\n this.removeNotUsableSockets(socket.url);\n if (socketErrorOccurred)\n return;\n if (streamError) {\n reject(streamError);\n }\n else {\n resolve({\n done: true,\n value: undefined,\n });\n }\n };\n const outputStream = {\n [Symbol.asyncIterator]: () => ({\n next: () => {\n return new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n },\n }),\n };\n const send = async () => {\n try {\n for await (const inputChunk of data) {\n socket.send(inputChunk);\n }\n }\n catch (err) {\n streamError = err;\n }\n finally {\n socket.close(1000);\n }\n };\n send();\n return outputStream;\n }\n}\nconst getIterator = (stream) => {\n if (stream[Symbol.asyncIterator]) {\n return stream;\n }\n if (isReadableStream(stream)) {\n return readableStreamtoIterable(stream);\n }\n return {\n [Symbol.asyncIterator]: async function* () {\n yield stream;\n },\n };\n};\nconst toReadableStream = (asyncIterable) => typeof ReadableStream === \"function\" ? iterableToReadableStream(asyncIterable) : asyncIterable;\nconst isReadableStream = (payload) => typeof ReadableStream === \"function\" && payload instanceof ReadableStream;\n","export var SelectorType;\n(function (SelectorType) {\n SelectorType[\"ENV\"] = \"env\";\n SelectorType[\"CONFIG\"] = \"shared config entry\";\n})(SelectorType || (SelectorType = {}));\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_DUALSTACK_ENDPOINT = \"AWS_USE_DUALSTACK_ENDPOINT\";\nexport const CONFIG_USE_DUALSTACK_ENDPOINT = \"use_dualstack_endpoint\";\nexport const DEFAULT_USE_DUALSTACK_ENDPOINT = false;\nexport const NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_DUALSTACK_ENDPOINT, SelectorType.ENV),\n configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_DUALSTACK_ENDPOINT, SelectorType.CONFIG),\n default: false,\n};\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_FIPS_ENDPOINT = \"AWS_USE_FIPS_ENDPOINT\";\nexport const CONFIG_USE_FIPS_ENDPOINT = \"use_fips_endpoint\";\nexport const DEFAULT_USE_FIPS_ENDPOINT = false;\nexport const NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_FIPS_ENDPOINT, SelectorType.ENV),\n configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_FIPS_ENDPOINT, SelectorType.CONFIG),\n default: false,\n};\n","export const isFipsRegion = (region) => typeof region === \"string\" && (region.startsWith(\"fips-\") || region.endsWith(\"-fips\"));\n","import { isFipsRegion } from \"./isFipsRegion\";\nexport const getRealRegion = (region) => isFipsRegion(region)\n ? [\"fips-aws-global\", \"aws-fips\"].includes(region)\n ? \"us-east-1\"\n : region.replace(/fips-(dkr-|prod-)?|-fips/, \"\")\n : region;\n","import { getRealRegion } from \"./getRealRegion\";\nimport { isFipsRegion } from \"./isFipsRegion\";\nexport const resolveRegionConfig = (input) => {\n const { region, useFipsEndpoint } = input;\n if (!region) {\n throw new Error(\"Region is missing\");\n }\n return {\n ...input,\n region: async () => {\n if (typeof region === \"string\") {\n return getRealRegion(region);\n }\n const providedRegion = await region();\n return getRealRegion(providedRegion);\n },\n useFipsEndpoint: async () => {\n const providedRegion = typeof region === \"string\" ? region : await region();\n if (isFipsRegion(providedRegion)) {\n return true;\n }\n return typeof useFipsEndpoint !== \"function\" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();\n },\n };\n};\n","export const resolveEventStreamSerdeConfig = (input) => ({\n ...input,\n eventStreamMarshaller: input.eventStreamSerdeProvider(input),\n});\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst CONTENT_LENGTH_HEADER = \"content-length\";\nexport function contentLengthMiddleware(bodyLengthChecker) {\n return (next) => async (args) => {\n const request = args.request;\n if (HttpRequest.isInstance(request)) {\n const { body, headers } = request;\n if (body &&\n Object.keys(headers)\n .map((str) => str.toLowerCase())\n .indexOf(CONTENT_LENGTH_HEADER) === -1) {\n try {\n const length = bodyLengthChecker(body);\n request.headers = {\n ...request.headers,\n [CONTENT_LENGTH_HEADER]: String(length),\n };\n }\n catch (error) {\n }\n }\n }\n return next({\n ...args,\n request,\n });\n };\n}\nexport const contentLengthMiddlewareOptions = {\n step: \"build\",\n tags: [\"SET_CONTENT_LENGTH\", \"CONTENT_LENGTH\"],\n name: \"contentLengthMiddleware\",\n override: true,\n};\nexport const getContentLengthPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), contentLengthMiddlewareOptions);\n },\n});\n","export const resolveParamsForS3 = async (endpointParams) => {\n const bucket = endpointParams?.Bucket || \"\";\n if (typeof endpointParams.Bucket === \"string\") {\n endpointParams.Bucket = bucket.replace(/#/g, encodeURIComponent(\"#\")).replace(/\\?/g, encodeURIComponent(\"?\"));\n }\n if (isArnBucketName(bucket)) {\n if (endpointParams.ForcePathStyle === true) {\n throw new Error(\"Path-style addressing cannot be used with ARN buckets\");\n }\n }\n else if (!isDnsCompatibleBucketName(bucket) ||\n (bucket.indexOf(\".\") !== -1 && !String(endpointParams.Endpoint).startsWith(\"http:\")) ||\n bucket.toLowerCase() !== bucket ||\n bucket.length < 3) {\n endpointParams.ForcePathStyle = true;\n }\n if (endpointParams.DisableMultiRegionAccessPoints) {\n endpointParams.disableMultiRegionAccessPoints = true;\n endpointParams.DisableMRAP = true;\n }\n return endpointParams;\n};\nconst DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/;\nconst IP_ADDRESS_PATTERN = /(\\d+\\.){3}\\d+/;\nconst DOTS_PATTERN = /\\.\\./;\nexport const DOT_PATTERN = /\\./;\nexport const S3_HOSTNAME_PATTERN = /^(.+\\.)?s3(-fips)?(\\.dualstack)?[.-]([a-z0-9-]+)\\./;\nexport const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);\nexport const isArnBucketName = (bucketName) => {\n const [arn, partition, service, , , bucket] = bucketName.split(\":\");\n const isArn = arn === \"arn\" && bucketName.split(\":\").length >= 6;\n const isValidArn = Boolean(isArn && partition && service && bucket);\n if (isArn && !isValidArn) {\n throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);\n }\n return isValidArn;\n};\n","export const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config) => {\n const configProvider = async () => {\n const configValue = config[configKey] ?? config[canonicalEndpointParamKey];\n if (typeof configValue === \"function\") {\n return configValue();\n }\n return configValue;\n };\n if (configKey === \"credentialScope\" || canonicalEndpointParamKey === \"CredentialScope\") {\n return async () => {\n const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n const configValue = credentials?.credentialScope ?? credentials?.CredentialScope;\n return configValue;\n };\n }\n if (configKey === \"accountId\" || canonicalEndpointParamKey === \"AccountId\") {\n return async () => {\n const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n const configValue = credentials?.accountId ?? credentials?.AccountId;\n return configValue;\n };\n }\n if (configKey === \"endpoint\" || canonicalEndpointParamKey === \"endpoint\") {\n return async () => {\n const endpoint = await configProvider();\n if (endpoint && typeof endpoint === \"object\") {\n if (\"url\" in endpoint) {\n return endpoint.url.href;\n }\n if (\"hostname\" in endpoint) {\n const { protocol, hostname, port, path } = endpoint;\n return `${protocol}//${hostname}${port ? \":\" + port : \"\"}${path}`;\n }\n }\n return endpoint;\n };\n }\n return configProvider;\n};\n","export const getEndpointFromConfig = async (serviceId) => undefined;\n","export function parseQueryString(querystring) {\n const query = {};\n querystring = querystring.replace(/^\\?/, \"\");\n if (querystring) {\n for (const pair of querystring.split(\"&\")) {\n let [key, value = null] = pair.split(\"=\");\n key = decodeURIComponent(key);\n if (value) {\n value = decodeURIComponent(value);\n }\n if (!(key in query)) {\n query[key] = value;\n }\n else if (Array.isArray(query[key])) {\n query[key].push(value);\n }\n else {\n query[key] = [query[key], value];\n }\n }\n }\n return query;\n}\n","import { parseQueryString } from \"@smithy/querystring-parser\";\nexport const parseUrl = (url) => {\n if (typeof url === \"string\") {\n return parseUrl(new URL(url));\n }\n const { hostname, pathname, port, protocol, search } = url;\n let query;\n if (search) {\n query = parseQueryString(search);\n }\n return {\n hostname,\n port: port ? parseInt(port) : undefined,\n protocol,\n path: pathname,\n query,\n };\n};\n","import { parseUrl } from \"@smithy/url-parser\";\nexport const toEndpointV1 = (endpoint) => {\n if (typeof endpoint === \"object\") {\n if (\"url\" in endpoint) {\n return parseUrl(endpoint.url);\n }\n return endpoint;\n }\n return parseUrl(endpoint);\n};\n","import { resolveParamsForS3 } from \"../service-customizations\";\nimport { createConfigValueProvider } from \"./createConfigValueProvider\";\nimport { getEndpointFromConfig } from \"./getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./toEndpointV1\";\nexport const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {\n if (!clientConfig.endpoint) {\n let endpointFromConfig;\n if (clientConfig.serviceConfiguredEndpoint) {\n endpointFromConfig = await clientConfig.serviceConfiguredEndpoint();\n }\n else {\n endpointFromConfig = await getEndpointFromConfig(clientConfig.serviceId);\n }\n if (endpointFromConfig) {\n clientConfig.endpoint = () => Promise.resolve(toEndpointV1(endpointFromConfig));\n }\n }\n const endpointParams = await resolveParams(commandInput, instructionsSupplier, clientConfig);\n if (typeof clientConfig.endpointProvider !== \"function\") {\n throw new Error(\"config.endpointProvider is not set.\");\n }\n const endpoint = clientConfig.endpointProvider(endpointParams, context);\n return endpoint;\n};\nexport const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {\n const endpointParams = {};\n const instructions = instructionsSupplier?.getEndpointParameterInstructions?.() || {};\n for (const [name, instruction] of Object.entries(instructions)) {\n switch (instruction.type) {\n case \"staticContextParams\":\n endpointParams[name] = instruction.value;\n break;\n case \"contextParams\":\n endpointParams[name] = commandInput[instruction.name];\n break;\n case \"clientContextParams\":\n case \"builtInParams\":\n endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig)();\n break;\n case \"operationContextParams\":\n endpointParams[name] = instruction.get(commandInput);\n break;\n default:\n throw new Error(\"Unrecognized endpoint parameter instruction: \" + JSON.stringify(instruction));\n }\n }\n if (Object.keys(instructions).length === 0) {\n Object.assign(endpointParams, clientConfig);\n }\n if (String(clientConfig.serviceId).toLowerCase() === \"s3\") {\n await resolveParamsForS3(endpointParams);\n }\n return endpointParams;\n};\n","export const deserializerMiddleware = (options, deserializer) => (next) => async (args) => {\n const { response } = await next(args);\n try {\n const parsed = await deserializer(response, options);\n return {\n response,\n output: parsed,\n };\n }\n catch (error) {\n Object.defineProperty(error, \"$response\", {\n value: response,\n });\n if (!(\"$metadata\" in error)) {\n const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;\n error.message += \"\\n \" + hint;\n if (typeof error.$responseBodyText !== \"undefined\") {\n if (error.$response) {\n error.$response.body = error.$responseBodyText;\n }\n }\n }\n throw error;\n }\n};\n","export const serializerMiddleware = (options, serializer) => (next, context) => async (args) => {\n const endpoint = context.endpointV2?.url && options.urlParser\n ? async () => options.urlParser(context.endpointV2.url)\n : options.endpoint;\n if (!endpoint) {\n throw new Error(\"No valid endpoint provider available.\");\n }\n const request = await serializer(args.input, { ...options, endpoint });\n return next({\n ...args,\n request,\n });\n};\n","import { deserializerMiddleware } from \"./deserializerMiddleware\";\nimport { serializerMiddleware } from \"./serializerMiddleware\";\nexport const deserializerMiddlewareOption = {\n name: \"deserializerMiddleware\",\n step: \"deserialize\",\n tags: [\"DESERIALIZER\"],\n override: true,\n};\nexport const serializerMiddlewareOption = {\n name: \"serializerMiddleware\",\n step: \"serialize\",\n tags: [\"SERIALIZER\"],\n override: true,\n};\nexport function getSerdePlugin(config, serializer, deserializer) {\n return {\n applyToStack: (commandStack) => {\n commandStack.add(deserializerMiddleware(config, deserializer), deserializerMiddlewareOption);\n commandStack.add(serializerMiddleware(config, serializer), serializerMiddlewareOption);\n },\n };\n}\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { httpAuthSchemeMiddleware } from \"./httpAuthSchemeMiddleware\";\nexport const httpAuthSchemeMiddlewareOptions = {\n step: \"serialize\",\n tags: [\"HTTP_AUTH_SCHEME\"],\n name: \"httpAuthSchemeMiddleware\",\n override: true,\n relation: \"before\",\n toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getHttpAuthSchemePlugin = (config, { httpAuthSchemeParametersProvider, identityProviderConfigProvider, }) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(httpAuthSchemeMiddleware(config, {\n httpAuthSchemeParametersProvider,\n identityProviderConfigProvider,\n }), httpAuthSchemeMiddlewareOptions);\n },\n});\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","export const toUtf8 = (input) => {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n }\n return new TextDecoder(\"utf-8\").decode(input);\n};\n","import { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { Uint8ArrayBlobAdapter } from \"./Uint8ArrayBlobAdapter\";\nexport function transformToString(payload, encoding = \"utf-8\") {\n if (encoding === \"base64\") {\n return toBase64(payload);\n }\n return toUtf8(payload);\n}\nexport function transformFromString(str, encoding) {\n if (encoding === \"base64\") {\n return Uint8ArrayBlobAdapter.mutate(fromBase64(str));\n }\n return Uint8ArrayBlobAdapter.mutate(fromUtf8(str));\n}\n","import { transformFromString, transformToString } from \"./transforms\";\nexport class Uint8ArrayBlobAdapter extends Uint8Array {\n static fromString(source, encoding = \"utf-8\") {\n switch (typeof source) {\n case \"string\":\n return transformFromString(source, encoding);\n default:\n throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);\n }\n }\n static mutate(source) {\n Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);\n return source;\n }\n transformToString(encoding = \"utf-8\") {\n return transformToString(this, encoding);\n }\n}\n","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { Uint8ArrayBlobAdapter } from \"@smithy/util-stream\";\nexport const collectBody = async (streamBody = new Uint8Array(), context) => {\n if (streamBody instanceof Uint8Array) {\n return Uint8ArrayBlobAdapter.mutate(streamBody);\n }\n if (!streamBody) {\n return Uint8ArrayBlobAdapter.mutate(new Uint8Array());\n }\n const fromContext = context.streamCollector(streamBody);\n return Uint8ArrayBlobAdapter.mutate(await fromContext);\n};\n","export function extendedEncodeURIComponent(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n","import { extendedEncodeURIComponent } from \"./extended-encode-uri-component\";\nexport const resolvedPath = (resolvedPath, input, memberName, labelValueProvider, uriLabel, isGreedyLabel) => {\n if (input != null && input[memberName] !== undefined) {\n const labelValue = labelValueProvider();\n if (labelValue.length <= 0) {\n throw new Error(\"Empty value provided for input HTTP label: \" + memberName + \".\");\n }\n resolvedPath = resolvedPath.replace(uriLabel, isGreedyLabel\n ? labelValue\n .split(\"/\")\n .map((segment) => extendedEncodeURIComponent(segment))\n .join(\"/\")\n : extendedEncodeURIComponent(labelValue));\n }\n else {\n throw new Error(\"No value provided for input HTTP label: \" + memberName + \".\");\n }\n return resolvedPath;\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { resolvedPath } from \"./resolve-path\";\nexport function requestBuilder(input, context) {\n return new RequestBuilder(input, context);\n}\nexport class RequestBuilder {\n constructor(input, context) {\n this.input = input;\n this.context = context;\n this.query = {};\n this.method = \"\";\n this.headers = {};\n this.path = \"\";\n this.body = null;\n this.hostname = \"\";\n this.resolvePathStack = [];\n }\n async build() {\n const { hostname, protocol = \"https\", port, path: basePath } = await this.context.endpoint();\n this.path = basePath;\n for (const resolvePath of this.resolvePathStack) {\n resolvePath(this.path);\n }\n return new HttpRequest({\n protocol,\n hostname: this.hostname || hostname,\n port,\n method: this.method,\n path: this.path,\n query: this.query,\n body: this.body,\n headers: this.headers,\n });\n }\n hn(hostname) {\n this.hostname = hostname;\n return this;\n }\n bp(uriLabel) {\n this.resolvePathStack.push((basePath) => {\n this.path = `${basePath?.endsWith(\"/\") ? basePath.slice(0, -1) : basePath || \"\"}` + uriLabel;\n });\n return this;\n }\n p(memberName, labelValueProvider, uriLabel, isGreedyLabel) {\n this.resolvePathStack.push((path) => {\n this.path = resolvedPath(path, this.input, memberName, labelValueProvider, uriLabel, isGreedyLabel);\n });\n return this;\n }\n h(headers) {\n this.headers = headers;\n return this;\n }\n q(query) {\n this.query = query;\n return this;\n }\n b(body) {\n this.body = body;\n return this;\n }\n m(method) {\n this.method = method;\n return this;\n }\n}\n","export function setFeature(context, feature, value) {\n if (!context.__smithy_context) {\n context.__smithy_context = {\n features: {},\n };\n }\n else if (!context.__smithy_context.features) {\n context.__smithy_context.features = {};\n }\n context.__smithy_context.features[feature] = value;\n}\n","import { setFeature } from \"@smithy/core\";\nimport { getSmithyContext } from \"@smithy/util-middleware\";\nimport { getEndpointFromInstructions } from \"./adaptors/getEndpointFromInstructions\";\nexport const endpointMiddleware = ({ config, instructions, }) => {\n return (next, context) => async (args) => {\n if (config.endpoint) {\n setFeature(context, \"ENDPOINT_OVERRIDE\", \"N\");\n }\n const endpoint = await getEndpointFromInstructions(args.input, {\n getEndpointParameterInstructions() {\n return instructions;\n },\n }, { ...config }, context);\n context.endpointV2 = endpoint;\n context.authSchemes = endpoint.properties?.authSchemes;\n const authScheme = context.authSchemes?.[0];\n if (authScheme) {\n context[\"signing_region\"] = authScheme.signingRegion;\n context[\"signing_service\"] = authScheme.signingName;\n const smithyContext = getSmithyContext(context);\n const httpAuthOption = smithyContext?.selectedHttpAuthScheme?.httpAuthOption;\n if (httpAuthOption) {\n httpAuthOption.signingProperties = Object.assign(httpAuthOption.signingProperties || {}, {\n signing_region: authScheme.signingRegion,\n signingRegion: authScheme.signingRegion,\n signing_service: authScheme.signingName,\n signingName: authScheme.signingName,\n signingRegionSet: authScheme.signingRegionSet,\n }, authScheme.properties);\n }\n }\n return next({\n ...args,\n });\n };\n};\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { endpointMiddleware } from \"./endpointMiddleware\";\nexport const endpointMiddlewareOptions = {\n step: \"serialize\",\n tags: [\"ENDPOINT_PARAMETERS\", \"ENDPOINT_V2\", \"ENDPOINT\"],\n name: \"endpointV2Middleware\",\n override: true,\n relation: \"before\",\n toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getEndpointPlugin = (config, instructions) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(endpointMiddleware({\n config,\n instructions,\n }), endpointMiddlewareOptions);\n },\n});\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { getEndpointFromConfig } from \"./adaptors/getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./adaptors/toEndpointV1\";\nexport const resolveEndpointConfig = (input) => {\n const tls = input.tls ?? true;\n const { endpoint } = input;\n const customEndpointProvider = endpoint != null ? async () => toEndpointV1(await normalizeProvider(endpoint)()) : undefined;\n const isCustomEndpoint = !!endpoint;\n const resolvedConfig = {\n ...input,\n endpoint: customEndpointProvider,\n tls,\n isCustomEndpoint,\n useDualstackEndpoint: normalizeProvider(input.useDualstackEndpoint ?? false),\n useFipsEndpoint: normalizeProvider(input.useFipsEndpoint ?? false),\n };\n let configuredEndpointPromise = undefined;\n resolvedConfig.serviceConfiguredEndpoint = async () => {\n if (input.serviceId && !configuredEndpointPromise) {\n configuredEndpointPromise = getEndpointFromConfig(input.serviceId);\n }\n return configuredEndpointPromise;\n };\n return resolvedConfig;\n};\n","export var RETRY_MODES;\n(function (RETRY_MODES) {\n RETRY_MODES[\"STANDARD\"] = \"standard\";\n RETRY_MODES[\"ADAPTIVE\"] = \"adaptive\";\n})(RETRY_MODES || (RETRY_MODES = {}));\nexport const DEFAULT_MAX_ATTEMPTS = 3;\nexport const DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;\n","export const CLOCK_SKEW_ERROR_CODES = [\n \"AuthFailure\",\n \"InvalidSignatureException\",\n \"RequestExpired\",\n \"RequestInTheFuture\",\n \"RequestTimeTooSkewed\",\n \"SignatureDoesNotMatch\",\n];\nexport const THROTTLING_ERROR_CODES = [\n \"BandwidthLimitExceeded\",\n \"EC2ThrottledException\",\n \"LimitExceededException\",\n \"PriorRequestNotComplete\",\n \"ProvisionedThroughputExceededException\",\n \"RequestLimitExceeded\",\n \"RequestThrottled\",\n \"RequestThrottledException\",\n \"SlowDown\",\n \"ThrottledException\",\n \"Throttling\",\n \"ThrottlingException\",\n \"TooManyRequestsException\",\n \"TransactionInProgressException\",\n];\nexport const TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexport const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexport const NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\n","import { CLOCK_SKEW_ERROR_CODES, NODEJS_TIMEOUT_ERROR_CODES, THROTTLING_ERROR_CODES, TRANSIENT_ERROR_CODES, TRANSIENT_ERROR_STATUS_CODES, } from \"./constants\";\nexport const isRetryableByTrait = (error) => error.$retryable !== undefined;\nexport const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexport const isClockSkewCorrectedError = (error) => error.$metadata?.clockSkewCorrected;\nexport const isThrottlingError = (error) => error.$metadata?.httpStatusCode === 429 ||\n THROTTLING_ERROR_CODES.includes(error.name) ||\n error.$retryable?.throttling == true;\nexport const isTransientError = (error, depth = 0) => isClockSkewCorrectedError(error) ||\n TRANSIENT_ERROR_CODES.includes(error.name) ||\n NODEJS_TIMEOUT_ERROR_CODES.includes(error?.code || \"\") ||\n TRANSIENT_ERROR_STATUS_CODES.includes(error.$metadata?.httpStatusCode || 0) ||\n (error.cause !== undefined && depth <= 10 && isTransientError(error.cause, depth + 1));\nexport const isServerError = (error) => {\n if (error.$metadata?.httpStatusCode !== undefined) {\n const statusCode = error.$metadata.httpStatusCode;\n if (500 <= statusCode && statusCode <= 599 && !isTransientError(error)) {\n return true;\n }\n return false;\n }\n return false;\n};\n","import { isThrottlingError } from \"@smithy/service-error-classification\";\nexport class DefaultRateLimiter {\n constructor(options) {\n this.currentCapacity = 0;\n this.enabled = false;\n this.lastMaxRate = 0;\n this.measuredTxRate = 0;\n this.requestCount = 0;\n this.lastTimestamp = 0;\n this.timeWindow = 0;\n this.beta = options?.beta ?? 0.7;\n this.minCapacity = options?.minCapacity ?? 1;\n this.minFillRate = options?.minFillRate ?? 0.5;\n this.scaleConstant = options?.scaleConstant ?? 0.4;\n this.smooth = options?.smooth ?? 0.8;\n const currentTimeInSeconds = this.getCurrentTimeInSeconds();\n this.lastThrottleTime = currentTimeInSeconds;\n this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds());\n this.fillRate = this.minFillRate;\n this.maxCapacity = this.minCapacity;\n }\n getCurrentTimeInSeconds() {\n return Date.now() / 1000;\n }\n async getSendToken() {\n return this.acquireTokenBucket(1);\n }\n async acquireTokenBucket(amount) {\n if (!this.enabled) {\n return;\n }\n this.refillTokenBucket();\n if (amount > this.currentCapacity) {\n const delay = ((amount - this.currentCapacity) / this.fillRate) * 1000;\n await new Promise((resolve) => DefaultRateLimiter.setTimeoutFn(resolve, delay));\n }\n this.currentCapacity = this.currentCapacity - amount;\n }\n refillTokenBucket() {\n const timestamp = this.getCurrentTimeInSeconds();\n if (!this.lastTimestamp) {\n this.lastTimestamp = timestamp;\n return;\n }\n const fillAmount = (timestamp - this.lastTimestamp) * this.fillRate;\n this.currentCapacity = Math.min(this.maxCapacity, this.currentCapacity + fillAmount);\n this.lastTimestamp = timestamp;\n }\n updateClientSendingRate(response) {\n let calculatedRate;\n this.updateMeasuredRate();\n if (isThrottlingError(response)) {\n const rateToUse = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate);\n this.lastMaxRate = rateToUse;\n this.calculateTimeWindow();\n this.lastThrottleTime = this.getCurrentTimeInSeconds();\n calculatedRate = this.cubicThrottle(rateToUse);\n this.enableTokenBucket();\n }\n else {\n this.calculateTimeWindow();\n calculatedRate = this.cubicSuccess(this.getCurrentTimeInSeconds());\n }\n const newRate = Math.min(calculatedRate, 2 * this.measuredTxRate);\n this.updateTokenBucketRate(newRate);\n }\n calculateTimeWindow() {\n this.timeWindow = this.getPrecise(Math.pow((this.lastMaxRate * (1 - this.beta)) / this.scaleConstant, 1 / 3));\n }\n cubicThrottle(rateToUse) {\n return this.getPrecise(rateToUse * this.beta);\n }\n cubicSuccess(timestamp) {\n return this.getPrecise(this.scaleConstant * Math.pow(timestamp - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate);\n }\n enableTokenBucket() {\n this.enabled = true;\n }\n updateTokenBucketRate(newRate) {\n this.refillTokenBucket();\n this.fillRate = Math.max(newRate, this.minFillRate);\n this.maxCapacity = Math.max(newRate, this.minCapacity);\n this.currentCapacity = Math.min(this.currentCapacity, this.maxCapacity);\n }\n updateMeasuredRate() {\n const t = this.getCurrentTimeInSeconds();\n const timeBucket = Math.floor(t * 2) / 2;\n this.requestCount++;\n if (timeBucket > this.lastTxRateBucket) {\n const currentRate = this.requestCount / (timeBucket - this.lastTxRateBucket);\n this.measuredTxRate = this.getPrecise(currentRate * this.smooth + this.measuredTxRate * (1 - this.smooth));\n this.requestCount = 0;\n this.lastTxRateBucket = timeBucket;\n }\n }\n getPrecise(num) {\n return parseFloat(num.toFixed(8));\n }\n}\nDefaultRateLimiter.setTimeoutFn = setTimeout;\n","export const DEFAULT_RETRY_DELAY_BASE = 100;\nexport const MAXIMUM_RETRY_DELAY = 20 * 1000;\nexport const THROTTLING_RETRY_DELAY_BASE = 500;\nexport const INITIAL_RETRY_TOKENS = 500;\nexport const RETRY_COST = 5;\nexport const TIMEOUT_RETRY_COST = 10;\nexport const NO_RETRY_INCREMENT = 1;\nexport const INVOCATION_ID_HEADER = \"amz-sdk-invocation-id\";\nexport const REQUEST_HEADER = \"amz-sdk-request\";\n","import { DEFAULT_RETRY_DELAY_BASE, MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const getDefaultRetryBackoffStrategy = () => {\n let delayBase = DEFAULT_RETRY_DELAY_BASE;\n const computeNextBackoffDelay = (attempts) => {\n return Math.floor(Math.min(MAXIMUM_RETRY_DELAY, Math.random() * 2 ** attempts * delayBase));\n };\n const setDelayBase = (delay) => {\n delayBase = delay;\n };\n return {\n computeNextBackoffDelay,\n setDelayBase,\n };\n};\n","import { MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const createDefaultRetryToken = ({ retryDelay, retryCount, retryCost, }) => {\n const getRetryCount = () => retryCount;\n const getRetryDelay = () => Math.min(MAXIMUM_RETRY_DELAY, retryDelay);\n const getRetryCost = () => retryCost;\n return {\n getRetryCount,\n getRetryDelay,\n getRetryCost,\n };\n};\n","import { DEFAULT_MAX_ATTEMPTS, RETRY_MODES } from \"./config\";\nimport { DEFAULT_RETRY_DELAY_BASE, INITIAL_RETRY_TOKENS, NO_RETRY_INCREMENT, RETRY_COST, THROTTLING_RETRY_DELAY_BASE, TIMEOUT_RETRY_COST, } from \"./constants\";\nimport { getDefaultRetryBackoffStrategy } from \"./defaultRetryBackoffStrategy\";\nimport { createDefaultRetryToken } from \"./defaultRetryToken\";\nexport class StandardRetryStrategy {\n constructor(maxAttempts) {\n this.maxAttempts = maxAttempts;\n this.mode = RETRY_MODES.STANDARD;\n this.capacity = INITIAL_RETRY_TOKENS;\n this.retryBackoffStrategy = getDefaultRetryBackoffStrategy();\n this.maxAttemptsProvider = typeof maxAttempts === \"function\" ? maxAttempts : async () => maxAttempts;\n }\n async acquireInitialRetryToken(retryTokenScope) {\n return createDefaultRetryToken({\n retryDelay: DEFAULT_RETRY_DELAY_BASE,\n retryCount: 0,\n });\n }\n async refreshRetryTokenForRetry(token, errorInfo) {\n const maxAttempts = await this.getMaxAttempts();\n if (this.shouldRetry(token, errorInfo, maxAttempts)) {\n const errorType = errorInfo.errorType;\n this.retryBackoffStrategy.setDelayBase(errorType === \"THROTTLING\" ? THROTTLING_RETRY_DELAY_BASE : DEFAULT_RETRY_DELAY_BASE);\n const delayFromErrorType = this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount());\n const retryDelay = errorInfo.retryAfterHint\n ? Math.max(errorInfo.retryAfterHint.getTime() - Date.now() || 0, delayFromErrorType)\n : delayFromErrorType;\n const capacityCost = this.getCapacityCost(errorType);\n this.capacity -= capacityCost;\n return createDefaultRetryToken({\n retryDelay,\n retryCount: token.getRetryCount() + 1,\n retryCost: capacityCost,\n });\n }\n throw new Error(\"No retry token available\");\n }\n recordSuccess(token) {\n this.capacity = Math.max(INITIAL_RETRY_TOKENS, this.capacity + (token.getRetryCost() ?? NO_RETRY_INCREMENT));\n }\n getCapacity() {\n return this.capacity;\n }\n async getMaxAttempts() {\n try {\n return await this.maxAttemptsProvider();\n }\n catch (error) {\n console.warn(`Max attempts provider could not resolve. Using default of ${DEFAULT_MAX_ATTEMPTS}`);\n return DEFAULT_MAX_ATTEMPTS;\n }\n }\n shouldRetry(tokenToRenew, errorInfo, maxAttempts) {\n const attempts = tokenToRenew.getRetryCount() + 1;\n return (attempts < maxAttempts &&\n this.capacity >= this.getCapacityCost(errorInfo.errorType) &&\n this.isRetryableError(errorInfo.errorType));\n }\n getCapacityCost(errorType) {\n return errorType === \"TRANSIENT\" ? TIMEOUT_RETRY_COST : RETRY_COST;\n }\n isRetryableError(errorType) {\n return errorType === \"THROTTLING\" || errorType === \"TRANSIENT\";\n }\n}\n","import { RETRY_MODES } from \"./config\";\nimport { DefaultRateLimiter } from \"./DefaultRateLimiter\";\nimport { StandardRetryStrategy } from \"./StandardRetryStrategy\";\nexport class AdaptiveRetryStrategy {\n constructor(maxAttemptsProvider, options) {\n this.maxAttemptsProvider = maxAttemptsProvider;\n this.mode = RETRY_MODES.ADAPTIVE;\n const { rateLimiter } = options ?? {};\n this.rateLimiter = rateLimiter ?? new DefaultRateLimiter();\n this.standardRetryStrategy = new StandardRetryStrategy(maxAttemptsProvider);\n }\n async acquireInitialRetryToken(retryTokenScope) {\n await this.rateLimiter.getSendToken();\n return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope);\n }\n async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {\n this.rateLimiter.updateClientSendingRate(errorInfo);\n return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew, errorInfo);\n }\n recordSuccess(token) {\n this.rateLimiter.updateClientSendingRate({});\n this.standardRetryStrategy.recordSuccess(token);\n }\n}\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static clone(request) {\n const cloned = new HttpRequest({\n ...request,\n headers: { ...request.headers },\n });\n if (cloned.query) {\n cloned.query = cloneQuery(cloned.query);\n }\n return cloned;\n }\n static isInstance(request) {\n if (!request) {\n return false;\n }\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n return HttpRequest.clone(this);\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","export const asSdkError = (error) => {\n if (error instanceof Error)\n return error;\n if (error instanceof Object)\n return Object.assign(new Error(), error);\n if (typeof error === \"string\")\n return new Error(error);\n return new Error(`AWS SDK error wrapper for ${error}`);\n};\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { AdaptiveRetryStrategy, DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE, RETRY_MODES, StandardRetryStrategy, } from \"@smithy/util-retry\";\nexport const ENV_MAX_ATTEMPTS = \"AWS_MAX_ATTEMPTS\";\nexport const CONFIG_MAX_ATTEMPTS = \"max_attempts\";\nexport const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => {\n const value = env[ENV_MAX_ATTEMPTS];\n if (!value)\n return undefined;\n const maxAttempt = parseInt(value);\n if (Number.isNaN(maxAttempt)) {\n throw new Error(`Environment variable ${ENV_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n }\n return maxAttempt;\n },\n configFileSelector: (profile) => {\n const value = profile[CONFIG_MAX_ATTEMPTS];\n if (!value)\n return undefined;\n const maxAttempt = parseInt(value);\n if (Number.isNaN(maxAttempt)) {\n throw new Error(`Shared config file entry ${CONFIG_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n }\n return maxAttempt;\n },\n default: DEFAULT_MAX_ATTEMPTS,\n};\nexport const resolveRetryConfig = (input) => {\n const { retryStrategy } = input;\n const maxAttempts = normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);\n return {\n ...input,\n maxAttempts,\n retryStrategy: async () => {\n if (retryStrategy) {\n return retryStrategy;\n }\n const retryMode = await normalizeProvider(input.retryMode)();\n if (retryMode === RETRY_MODES.ADAPTIVE) {\n return new AdaptiveRetryStrategy(maxAttempts);\n }\n return new StandardRetryStrategy(maxAttempts);\n },\n };\n};\nexport const ENV_RETRY_MODE = \"AWS_RETRY_MODE\";\nexport const CONFIG_RETRY_MODE = \"retry_mode\";\nexport const NODE_RETRY_MODE_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => env[ENV_RETRY_MODE],\n configFileSelector: (profile) => profile[CONFIG_RETRY_MODE],\n default: DEFAULT_RETRY_MODE,\n};\n","const getAllAliases = (name, aliases) => {\n const _aliases = [];\n if (name) {\n _aliases.push(name);\n }\n if (aliases) {\n for (const alias of aliases) {\n _aliases.push(alias);\n }\n }\n return _aliases;\n};\nconst getMiddlewareNameWithAliases = (name, aliases) => {\n return `${name || \"anonymous\"}${aliases && aliases.length > 0 ? ` (a.k.a. ${aliases.join(\",\")})` : \"\"}`;\n};\nexport const constructStack = () => {\n let absoluteEntries = [];\n let relativeEntries = [];\n let identifyOnResolve = false;\n const entriesNameSet = new Set();\n const sort = (entries) => entries.sort((a, b) => stepWeights[b.step] - stepWeights[a.step] ||\n priorityWeights[b.priority || \"normal\"] - priorityWeights[a.priority || \"normal\"]);\n const removeByName = (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n const aliases = getAllAliases(entry.name, entry.aliases);\n if (aliases.includes(toRemove)) {\n isRemoved = true;\n for (const alias of aliases) {\n entriesNameSet.delete(alias);\n }\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n };\n const removeByReference = (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n if (entry.middleware === toRemove) {\n isRemoved = true;\n for (const alias of getAllAliases(entry.name, entry.aliases)) {\n entriesNameSet.delete(alias);\n }\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n };\n const cloneTo = (toStack) => {\n absoluteEntries.forEach((entry) => {\n toStack.add(entry.middleware, { ...entry });\n });\n relativeEntries.forEach((entry) => {\n toStack.addRelativeTo(entry.middleware, { ...entry });\n });\n toStack.identifyOnResolve?.(stack.identifyOnResolve());\n return toStack;\n };\n const expandRelativeMiddlewareList = (from) => {\n const expandedMiddlewareList = [];\n from.before.forEach((entry) => {\n if (entry.before.length === 0 && entry.after.length === 0) {\n expandedMiddlewareList.push(entry);\n }\n else {\n expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n }\n });\n expandedMiddlewareList.push(from);\n from.after.reverse().forEach((entry) => {\n if (entry.before.length === 0 && entry.after.length === 0) {\n expandedMiddlewareList.push(entry);\n }\n else {\n expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n }\n });\n return expandedMiddlewareList;\n };\n const getMiddlewareList = (debug = false) => {\n const normalizedAbsoluteEntries = [];\n const normalizedRelativeEntries = [];\n const normalizedEntriesNameMap = {};\n absoluteEntries.forEach((entry) => {\n const normalizedEntry = {\n ...entry,\n before: [],\n after: [],\n };\n for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n normalizedEntriesNameMap[alias] = normalizedEntry;\n }\n normalizedAbsoluteEntries.push(normalizedEntry);\n });\n relativeEntries.forEach((entry) => {\n const normalizedEntry = {\n ...entry,\n before: [],\n after: [],\n };\n for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n normalizedEntriesNameMap[alias] = normalizedEntry;\n }\n normalizedRelativeEntries.push(normalizedEntry);\n });\n normalizedRelativeEntries.forEach((entry) => {\n if (entry.toMiddleware) {\n const toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];\n if (toMiddleware === undefined) {\n if (debug) {\n return;\n }\n throw new Error(`${entry.toMiddleware} is not found when adding ` +\n `${getMiddlewareNameWithAliases(entry.name, entry.aliases)} ` +\n `middleware ${entry.relation} ${entry.toMiddleware}`);\n }\n if (entry.relation === \"after\") {\n toMiddleware.after.push(entry);\n }\n if (entry.relation === \"before\") {\n toMiddleware.before.push(entry);\n }\n }\n });\n const mainChain = sort(normalizedAbsoluteEntries)\n .map(expandRelativeMiddlewareList)\n .reduce((wholeList, expandedMiddlewareList) => {\n wholeList.push(...expandedMiddlewareList);\n return wholeList;\n }, []);\n return mainChain;\n };\n const stack = {\n add: (middleware, options = {}) => {\n const { name, override, aliases: _aliases } = options;\n const entry = {\n step: \"initialize\",\n priority: \"normal\",\n middleware,\n ...options,\n };\n const aliases = getAllAliases(name, _aliases);\n if (aliases.length > 0) {\n if (aliases.some((alias) => entriesNameSet.has(alias))) {\n if (!override)\n throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n for (const alias of aliases) {\n const toOverrideIndex = absoluteEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n if (toOverrideIndex === -1) {\n continue;\n }\n const toOverride = absoluteEntries[toOverrideIndex];\n if (toOverride.step !== entry.step || entry.priority !== toOverride.priority) {\n throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware with ` +\n `${toOverride.priority} priority in ${toOverride.step} step cannot ` +\n `be overridden by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware with ` +\n `${entry.priority} priority in ${entry.step} step.`);\n }\n absoluteEntries.splice(toOverrideIndex, 1);\n }\n }\n for (const alias of aliases) {\n entriesNameSet.add(alias);\n }\n }\n absoluteEntries.push(entry);\n },\n addRelativeTo: (middleware, options) => {\n const { name, override, aliases: _aliases } = options;\n const entry = {\n middleware,\n ...options,\n };\n const aliases = getAllAliases(name, _aliases);\n if (aliases.length > 0) {\n if (aliases.some((alias) => entriesNameSet.has(alias))) {\n if (!override)\n throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n for (const alias of aliases) {\n const toOverrideIndex = relativeEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n if (toOverrideIndex === -1) {\n continue;\n }\n const toOverride = relativeEntries[toOverrideIndex];\n if (toOverride.toMiddleware !== entry.toMiddleware || toOverride.relation !== entry.relation) {\n throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware ` +\n `${toOverride.relation} \"${toOverride.toMiddleware}\" middleware cannot be overridden ` +\n `by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware ${entry.relation} ` +\n `\"${entry.toMiddleware}\" middleware.`);\n }\n relativeEntries.splice(toOverrideIndex, 1);\n }\n }\n for (const alias of aliases) {\n entriesNameSet.add(alias);\n }\n }\n relativeEntries.push(entry);\n },\n clone: () => cloneTo(constructStack()),\n use: (plugin) => {\n plugin.applyToStack(stack);\n },\n remove: (toRemove) => {\n if (typeof toRemove === \"string\")\n return removeByName(toRemove);\n else\n return removeByReference(toRemove);\n },\n removeByTag: (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n const { tags, name, aliases: _aliases } = entry;\n if (tags && tags.includes(toRemove)) {\n const aliases = getAllAliases(name, _aliases);\n for (const alias of aliases) {\n entriesNameSet.delete(alias);\n }\n isRemoved = true;\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n },\n concat: (from) => {\n const cloned = cloneTo(constructStack());\n cloned.use(from);\n cloned.identifyOnResolve(identifyOnResolve || cloned.identifyOnResolve() || (from.identifyOnResolve?.() ?? false));\n return cloned;\n },\n applyToStack: cloneTo,\n identify: () => {\n return getMiddlewareList(true).map((mw) => {\n const step = mw.step ??\n mw.relation +\n \" \" +\n mw.toMiddleware;\n return getMiddlewareNameWithAliases(mw.name, mw.aliases) + \" - \" + step;\n });\n },\n identifyOnResolve(toggle) {\n if (typeof toggle === \"boolean\")\n identifyOnResolve = toggle;\n return identifyOnResolve;\n },\n resolve: (handler, context) => {\n for (const middleware of getMiddlewareList()\n .map((entry) => entry.middleware)\n .reverse()) {\n handler = middleware(handler, context);\n }\n if (identifyOnResolve) {\n console.log(stack.identify());\n }\n return handler;\n },\n };\n return stack;\n};\nconst stepWeights = {\n initialize: 5,\n serialize: 4,\n build: 3,\n finalizeRequest: 2,\n deserialize: 1,\n};\nconst priorityWeights = {\n high: 3,\n normal: 2,\n low: 1,\n};\n","import { constructStack } from \"@smithy/middleware-stack\";\nexport class Client {\n constructor(config) {\n this.config = config;\n this.middlewareStack = constructStack();\n }\n send(command, optionsOrCb, cb) {\n const options = typeof optionsOrCb !== \"function\" ? optionsOrCb : undefined;\n const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n const useHandlerCache = options === undefined && this.config.cacheMiddleware === true;\n let handler;\n if (useHandlerCache) {\n if (!this.handlers) {\n this.handlers = new WeakMap();\n }\n const handlers = this.handlers;\n if (handlers.has(command.constructor)) {\n handler = handlers.get(command.constructor);\n }\n else {\n handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n handlers.set(command.constructor, handler);\n }\n }\n else {\n delete this.handlers;\n handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n }\n if (callback) {\n handler(command)\n .then((result) => callback(null, result.output), (err) => callback(err))\n .catch(() => { });\n }\n else {\n return handler(command).then((result) => result.output);\n }\n }\n destroy() {\n this.config?.requestHandler?.destroy?.();\n delete this.handlers;\n }\n}\n","import { constructStack } from \"@smithy/middleware-stack\";\nimport { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport class Command {\n constructor() {\n this.middlewareStack = constructStack();\n }\n static classBuilder() {\n return new ClassBuilder();\n }\n resolveMiddlewareWithContext(clientStack, configuration, options, { middlewareFn, clientName, commandName, inputFilterSensitiveLog, outputFilterSensitiveLog, smithyContext, additionalContext, CommandCtor, }) {\n for (const mw of middlewareFn.bind(this)(CommandCtor, clientStack, configuration, options)) {\n this.middlewareStack.use(mw);\n }\n const stack = clientStack.concat(this.middlewareStack);\n const { logger } = configuration;\n const handlerExecutionContext = {\n logger,\n clientName,\n commandName,\n inputFilterSensitiveLog,\n outputFilterSensitiveLog,\n [SMITHY_CONTEXT_KEY]: {\n commandInstance: this,\n ...smithyContext,\n },\n ...additionalContext,\n };\n const { requestHandler } = configuration;\n return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);\n }\n}\nclass ClassBuilder {\n constructor() {\n this._init = () => { };\n this._ep = {};\n this._middlewareFn = () => [];\n this._commandName = \"\";\n this._clientName = \"\";\n this._additionalContext = {};\n this._smithyContext = {};\n this._inputFilterSensitiveLog = (_) => _;\n this._outputFilterSensitiveLog = (_) => _;\n this._serializer = null;\n this._deserializer = null;\n }\n init(cb) {\n this._init = cb;\n }\n ep(endpointParameterInstructions) {\n this._ep = endpointParameterInstructions;\n return this;\n }\n m(middlewareSupplier) {\n this._middlewareFn = middlewareSupplier;\n return this;\n }\n s(service, operation, smithyContext = {}) {\n this._smithyContext = {\n service,\n operation,\n ...smithyContext,\n };\n return this;\n }\n c(additionalContext = {}) {\n this._additionalContext = additionalContext;\n return this;\n }\n n(clientName, commandName) {\n this._clientName = clientName;\n this._commandName = commandName;\n return this;\n }\n f(inputFilter = (_) => _, outputFilter = (_) => _) {\n this._inputFilterSensitiveLog = inputFilter;\n this._outputFilterSensitiveLog = outputFilter;\n return this;\n }\n ser(serializer) {\n this._serializer = serializer;\n return this;\n }\n de(deserializer) {\n this._deserializer = deserializer;\n return this;\n }\n build() {\n const closure = this;\n let CommandRef;\n return (CommandRef = class extends Command {\n static getEndpointParameterInstructions() {\n return closure._ep;\n }\n constructor(...[input]) {\n super();\n this.serialize = closure._serializer;\n this.deserialize = closure._deserializer;\n this.input = input ?? {};\n closure._init(this);\n }\n resolveMiddleware(stack, configuration, options) {\n return this.resolveMiddlewareWithContext(stack, configuration, options, {\n CommandCtor: CommandRef,\n middlewareFn: closure._middlewareFn,\n clientName: closure._clientName,\n commandName: closure._commandName,\n inputFilterSensitiveLog: closure._inputFilterSensitiveLog,\n outputFilterSensitiveLog: closure._outputFilterSensitiveLog,\n smithyContext: closure._smithyContext,\n additionalContext: closure._additionalContext,\n });\n }\n });\n }\n}\n","export const parseBoolean = (value) => {\n switch (value) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n default:\n throw new Error(`Unable to parse boolean value \"${value}\"`);\n }\n};\nexport const expectBoolean = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"number\") {\n if (value === 0 || value === 1) {\n logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n }\n if (value === 0) {\n return false;\n }\n if (value === 1) {\n return true;\n }\n }\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"false\" || lower === \"true\") {\n logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n }\n if (lower === \"false\") {\n return false;\n }\n if (lower === \"true\") {\n return true;\n }\n }\n if (typeof value === \"boolean\") {\n return value;\n }\n throw new TypeError(`Expected boolean, got ${typeof value}: ${value}`);\n};\nexport const expectNumber = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n const parsed = parseFloat(value);\n if (!Number.isNaN(parsed)) {\n if (String(parsed) !== String(value)) {\n logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));\n }\n return parsed;\n }\n }\n if (typeof value === \"number\") {\n return value;\n }\n throw new TypeError(`Expected number, got ${typeof value}: ${value}`);\n};\nconst MAX_FLOAT = Math.ceil(2 ** 127 * (2 - 2 ** -23));\nexport const expectFloat32 = (value) => {\n const expected = expectNumber(value);\n if (expected !== undefined && !Number.isNaN(expected) && expected !== Infinity && expected !== -Infinity) {\n if (Math.abs(expected) > MAX_FLOAT) {\n throw new TypeError(`Expected 32-bit float, got ${value}`);\n }\n }\n return expected;\n};\nexport const expectLong = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Number.isInteger(value) && !Number.isNaN(value)) {\n return value;\n }\n throw new TypeError(`Expected integer, got ${typeof value}: ${value}`);\n};\nexport const expectInt = expectLong;\nexport const expectInt32 = (value) => expectSizedInt(value, 32);\nexport const expectShort = (value) => expectSizedInt(value, 16);\nexport const expectByte = (value) => expectSizedInt(value, 8);\nconst expectSizedInt = (value, size) => {\n const expected = expectLong(value);\n if (expected !== undefined && castInt(expected, size) !== expected) {\n throw new TypeError(`Expected ${size}-bit integer, got ${value}`);\n }\n return expected;\n};\nconst castInt = (value, size) => {\n switch (size) {\n case 32:\n return Int32Array.of(value)[0];\n case 16:\n return Int16Array.of(value)[0];\n case 8:\n return Int8Array.of(value)[0];\n }\n};\nexport const expectNonNull = (value, location) => {\n if (value === null || value === undefined) {\n if (location) {\n throw new TypeError(`Expected a non-null value for ${location}`);\n }\n throw new TypeError(\"Expected a non-null value\");\n }\n return value;\n};\nexport const expectObject = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n const receivedType = Array.isArray(value) ? \"array\" : typeof value;\n throw new TypeError(`Expected object, got ${receivedType}: ${value}`);\n};\nexport const expectString = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if ([\"boolean\", \"number\", \"bigint\"].includes(typeof value)) {\n logger.warn(stackTraceWarning(`Expected string, got ${typeof value}: ${value}`));\n return String(value);\n }\n throw new TypeError(`Expected string, got ${typeof value}: ${value}`);\n};\nexport const expectUnion = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n const asObject = expectObject(value);\n const setKeys = Object.entries(asObject)\n .filter(([, v]) => v != null)\n .map(([k]) => k);\n if (setKeys.length === 0) {\n throw new TypeError(`Unions must have exactly one non-null member. None were found.`);\n }\n if (setKeys.length > 1) {\n throw new TypeError(`Unions must have exactly one non-null member. Keys ${setKeys} were not null.`);\n }\n return asObject;\n};\nexport const strictParseDouble = (value) => {\n if (typeof value == \"string\") {\n return expectNumber(parseNumber(value));\n }\n return expectNumber(value);\n};\nexport const strictParseFloat = strictParseDouble;\nexport const strictParseFloat32 = (value) => {\n if (typeof value == \"string\") {\n return expectFloat32(parseNumber(value));\n }\n return expectFloat32(value);\n};\nconst NUMBER_REGEX = /(-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(-?Infinity)|(NaN)/g;\nconst parseNumber = (value) => {\n const matches = value.match(NUMBER_REGEX);\n if (matches === null || matches[0].length !== value.length) {\n throw new TypeError(`Expected real number, got implicit NaN`);\n }\n return parseFloat(value);\n};\nexport const limitedParseDouble = (value) => {\n if (typeof value == \"string\") {\n return parseFloatString(value);\n }\n return expectNumber(value);\n};\nexport const handleFloat = limitedParseDouble;\nexport const limitedParseFloat = limitedParseDouble;\nexport const limitedParseFloat32 = (value) => {\n if (typeof value == \"string\") {\n return parseFloatString(value);\n }\n return expectFloat32(value);\n};\nconst parseFloatString = (value) => {\n switch (value) {\n case \"NaN\":\n return NaN;\n case \"Infinity\":\n return Infinity;\n case \"-Infinity\":\n return -Infinity;\n default:\n throw new Error(`Unable to parse float value: ${value}`);\n }\n};\nexport const strictParseLong = (value) => {\n if (typeof value === \"string\") {\n return expectLong(parseNumber(value));\n }\n return expectLong(value);\n};\nexport const strictParseInt = strictParseLong;\nexport const strictParseInt32 = (value) => {\n if (typeof value === \"string\") {\n return expectInt32(parseNumber(value));\n }\n return expectInt32(value);\n};\nexport const strictParseShort = (value) => {\n if (typeof value === \"string\") {\n return expectShort(parseNumber(value));\n }\n return expectShort(value);\n};\nexport const strictParseByte = (value) => {\n if (typeof value === \"string\") {\n return expectByte(parseNumber(value));\n }\n return expectByte(value);\n};\nconst stackTraceWarning = (message) => {\n return String(new TypeError(message).stack || message)\n .split(\"\\n\")\n .slice(0, 5)\n .filter((s) => !s.includes(\"stackTraceWarning\"))\n .join(\"\\n\");\n};\nexport const logger = {\n warn: console.warn,\n};\n","export class ServiceException extends Error {\n constructor(options) {\n super(options.message);\n Object.setPrototypeOf(this, ServiceException.prototype);\n this.name = options.name;\n this.$fault = options.$fault;\n this.$metadata = options.$metadata;\n }\n static isInstance(value) {\n if (!value)\n return false;\n const candidate = value;\n return (Boolean(candidate.$fault) &&\n Boolean(candidate.$metadata) &&\n (candidate.$fault === \"client\" || candidate.$fault === \"server\"));\n }\n}\nexport const decorateServiceException = (exception, additions = {}) => {\n Object.entries(additions)\n .filter(([, v]) => v !== undefined)\n .forEach(([k, v]) => {\n if (exception[k] == undefined || exception[k] === \"\") {\n exception[k] = v;\n }\n });\n const message = exception.message || exception.Message || \"UnknownError\";\n exception.message = message;\n delete exception.Message;\n return exception;\n};\n","import { decorateServiceException } from \"./exceptions\";\nexport const throwDefaultError = ({ output, parsedBody, exceptionCtor, errorCode }) => {\n const $metadata = deserializeMetadata(output);\n const statusCode = $metadata.httpStatusCode ? $metadata.httpStatusCode + \"\" : undefined;\n const response = new exceptionCtor({\n name: parsedBody?.code || parsedBody?.Code || errorCode || statusCode || \"UnknownError\",\n $fault: \"client\",\n $metadata,\n });\n throw decorateServiceException(response, parsedBody);\n};\nexport const withBaseException = (ExceptionCtor) => {\n return ({ output, parsedBody, errorCode }) => {\n throwDefaultError({ output, parsedBody, exceptionCtor: ExceptionCtor, errorCode });\n };\n};\nconst deserializeMetadata = (output) => ({\n httpStatusCode: output.statusCode,\n requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n extendedRequestId: output.headers[\"x-amz-id-2\"],\n cfId: output.headers[\"x-amz-cf-id\"],\n});\n","export const loadConfigsForDefaultMode = (mode) => {\n switch (mode) {\n case \"standard\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 3100,\n };\n case \"in-region\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 1100,\n };\n case \"cross-region\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 3100,\n };\n case \"mobile\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 30000,\n };\n default:\n return {};\n }\n};\n","import { AlgorithmId } from \"@smithy/types\";\nexport { AlgorithmId };\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n for (const id in AlgorithmId) {\n const algorithmId = AlgorithmId[id];\n if (runtimeConfig[algorithmId] === undefined) {\n continue;\n }\n checksumAlgorithms.push({\n algorithmId: () => algorithmId,\n checksumConstructor: () => runtimeConfig[algorithmId],\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export const getRetryConfiguration = (runtimeConfig) => {\n let _retryStrategy = runtimeConfig.retryStrategy;\n return {\n setRetryStrategy(retryStrategy) {\n _retryStrategy = retryStrategy;\n },\n retryStrategy() {\n return _retryStrategy;\n },\n };\n};\nexport const resolveRetryRuntimeConfig = (retryStrategyConfiguration) => {\n const runtimeConfig = {};\n runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();\n return runtimeConfig;\n};\n","import { getChecksumConfiguration, resolveChecksumRuntimeConfig } from \"./checksum\";\nimport { getRetryConfiguration, resolveRetryRuntimeConfig } from \"./retry\";\nexport const getDefaultExtensionConfiguration = (runtimeConfig) => {\n return {\n ...getChecksumConfiguration(runtimeConfig),\n ...getRetryConfiguration(runtimeConfig),\n };\n};\nexport const getDefaultClientConfiguration = getDefaultExtensionConfiguration;\nexport const resolveDefaultRuntimeConfig = (config) => {\n return {\n ...resolveChecksumRuntimeConfig(config),\n ...resolveRetryRuntimeConfig(config),\n };\n};\n","export class NoOpLogger {\n trace() { }\n debug() { }\n info() { }\n warn() { }\n error() { }\n}\n","export function map(arg0, arg1, arg2) {\n let target;\n let filter;\n let instructions;\n if (typeof arg1 === \"undefined\" && typeof arg2 === \"undefined\") {\n target = {};\n instructions = arg0;\n }\n else {\n target = arg0;\n if (typeof arg1 === \"function\") {\n filter = arg1;\n instructions = arg2;\n return mapWithFilter(target, filter, instructions);\n }\n else {\n instructions = arg1;\n }\n }\n for (const key of Object.keys(instructions)) {\n if (!Array.isArray(instructions[key])) {\n target[key] = instructions[key];\n continue;\n }\n applyInstruction(target, null, instructions, key);\n }\n return target;\n}\nexport const convertMap = (target) => {\n const output = {};\n for (const [k, v] of Object.entries(target || {})) {\n output[k] = [, v];\n }\n return output;\n};\nexport const take = (source, instructions) => {\n const out = {};\n for (const key in instructions) {\n applyInstruction(out, source, instructions, key);\n }\n return out;\n};\nconst mapWithFilter = (target, filter, instructions) => {\n return map(target, Object.entries(instructions).reduce((_instructions, [key, value]) => {\n if (Array.isArray(value)) {\n _instructions[key] = value;\n }\n else {\n if (typeof value === \"function\") {\n _instructions[key] = [filter, value()];\n }\n else {\n _instructions[key] = [filter, value];\n }\n }\n return _instructions;\n }, {}));\n};\nconst applyInstruction = (target, source, instructions, targetKey) => {\n if (source !== null) {\n let instruction = instructions[targetKey];\n if (typeof instruction === \"function\") {\n instruction = [, instruction];\n }\n const [filter = nonNullish, valueFn = pass, sourceKey = targetKey] = instruction;\n if ((typeof filter === \"function\" && filter(source[sourceKey])) || (typeof filter !== \"function\" && !!filter)) {\n target[targetKey] = valueFn(source[sourceKey]);\n }\n return;\n }\n let [filter, value] = instructions[targetKey];\n if (typeof value === \"function\") {\n let _value;\n const defaultFilterPassed = filter === undefined && (_value = value()) != null;\n const customFilterPassed = (typeof filter === \"function\" && !!filter(void 0)) || (typeof filter !== \"function\" && !!filter);\n if (defaultFilterPassed) {\n target[targetKey] = _value;\n }\n else if (customFilterPassed) {\n target[targetKey] = value();\n }\n }\n else {\n const defaultFilterPassed = filter === undefined && value != null;\n const customFilterPassed = (typeof filter === \"function\" && !!filter(value)) || (typeof filter !== \"function\" && !!filter);\n if (defaultFilterPassed || customFilterPassed) {\n target[targetKey] = value;\n }\n }\n};\nconst nonNullish = (_) => _ != null;\nconst pass = (_) => _;\n","export const serializeFloat = (value) => {\n if (value !== value) {\n return \"NaN\";\n }\n switch (value) {\n case Infinity:\n return \"Infinity\";\n case -Infinity:\n return \"-Infinity\";\n default:\n return value;\n }\n};\nexport const serializeDateTime = (date) => date.toISOString().replace(\".000Z\", \"Z\");\n","export const _json = (obj) => {\n if (obj == null) {\n return {};\n }\n if (Array.isArray(obj)) {\n return obj.filter((_) => _ != null).map(_json);\n }\n if (typeof obj === \"object\") {\n const target = {};\n for (const key of Object.keys(obj)) {\n if (obj[key] == null) {\n continue;\n }\n target[key] = _json(obj[key]);\n }\n return target;\n }\n return obj;\n};\n","export const isStreamingPayload = (request) => request?.body instanceof ReadableStream;\n","import { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { isServerError, isThrottlingError, isTransientError } from \"@smithy/service-error-classification\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { INVOCATION_ID_HEADER, REQUEST_HEADER } from \"@smithy/util-retry\";\nimport { v4 } from \"uuid\";\nimport { isStreamingPayload } from \"./isStreamingPayload/isStreamingPayload\";\nimport { asSdkError } from \"./util\";\nexport const retryMiddleware = (options) => (next, context) => async (args) => {\n let retryStrategy = await options.retryStrategy();\n const maxAttempts = await options.maxAttempts();\n if (isRetryStrategyV2(retryStrategy)) {\n retryStrategy = retryStrategy;\n let retryToken = await retryStrategy.acquireInitialRetryToken(context[\"partition_id\"]);\n let lastError = new Error();\n let attempts = 0;\n let totalRetryDelay = 0;\n const { request } = args;\n const isRequest = HttpRequest.isInstance(request);\n if (isRequest) {\n request.headers[INVOCATION_ID_HEADER] = v4();\n }\n while (true) {\n try {\n if (isRequest) {\n request.headers[REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;\n }\n const { response, output } = await next(args);\n retryStrategy.recordSuccess(retryToken);\n output.$metadata.attempts = attempts + 1;\n output.$metadata.totalRetryDelay = totalRetryDelay;\n return { response, output };\n }\n catch (e) {\n const retryErrorInfo = getRetryErrorInfo(e);\n lastError = asSdkError(e);\n if (isRequest && isStreamingPayload(request)) {\n (context.logger instanceof NoOpLogger ? console : context.logger)?.warn(\"An error was encountered in a non-retryable streaming request.\");\n throw lastError;\n }\n try {\n retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);\n }\n catch (refreshError) {\n if (!lastError.$metadata) {\n lastError.$metadata = {};\n }\n lastError.$metadata.attempts = attempts + 1;\n lastError.$metadata.totalRetryDelay = totalRetryDelay;\n throw lastError;\n }\n attempts = retryToken.getRetryCount();\n const delay = retryToken.getRetryDelay();\n totalRetryDelay += delay;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n else {\n retryStrategy = retryStrategy;\n if (retryStrategy?.mode)\n context.userAgent = [...(context.userAgent || []), [\"cfg/retry-mode\", retryStrategy.mode]];\n return retryStrategy.retry(next, args);\n }\n};\nconst isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== \"undefined\" &&\n typeof retryStrategy.refreshRetryTokenForRetry !== \"undefined\" &&\n typeof retryStrategy.recordSuccess !== \"undefined\";\nconst getRetryErrorInfo = (error) => {\n const errorInfo = {\n error,\n errorType: getRetryErrorType(error),\n };\n const retryAfterHint = getRetryAfterHint(error.$response);\n if (retryAfterHint) {\n errorInfo.retryAfterHint = retryAfterHint;\n }\n return errorInfo;\n};\nconst getRetryErrorType = (error) => {\n if (isThrottlingError(error))\n return \"THROTTLING\";\n if (isTransientError(error))\n return \"TRANSIENT\";\n if (isServerError(error))\n return \"SERVER_ERROR\";\n return \"CLIENT_ERROR\";\n};\nexport const retryMiddlewareOptions = {\n name: \"retryMiddleware\",\n tags: [\"RETRY\"],\n step: \"finalizeRequest\",\n priority: \"high\",\n override: true,\n};\nexport const getRetryPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(retryMiddleware(options), retryMiddlewareOptions);\n },\n});\nexport const getRetryAfterHint = (response) => {\n if (!HttpResponse.isInstance(response))\n return;\n const retryAfterHeaderName = Object.keys(response.headers).find((key) => key.toLowerCase() === \"retry-after\");\n if (!retryAfterHeaderName)\n return;\n const retryAfter = response.headers[retryAfterHeaderName];\n const retryAfterSeconds = Number(retryAfter);\n if (!Number.isNaN(retryAfterSeconds))\n return new Date(retryAfterSeconds * 1000);\n const retryAfterDate = new Date(retryAfter);\n return retryAfterDate;\n};\n","export const resolveClientEndpointParameters = (options) => {\n return {\n ...options,\n useDualstackEndpoint: options.useDualstackEndpoint ?? false,\n useFipsEndpoint: options.useFipsEndpoint ?? false,\n defaultSigningName: \"rekognition\",\n };\n};\nexport const commonParams = {\n UseFIPS: { type: \"builtInParams\", name: \"useFipsEndpoint\" },\n Endpoint: { type: \"builtInParams\", name: \"endpoint\" },\n Region: { type: \"builtInParams\", name: \"region\" },\n UseDualStack: { type: \"builtInParams\", name: \"useDualstackEndpoint\" },\n};\n","export var SHA_256_HASH = { name: \"SHA-256\" };\nexport var SHA_256_HMAC_ALGO = {\n name: \"HMAC\",\n hash: SHA_256_HASH\n};\nexport var EMPTY_DATA_SHA_256 = new Uint8Array([\n 227,\n 176,\n 196,\n 66,\n 152,\n 252,\n 28,\n 20,\n 154,\n 251,\n 244,\n 200,\n 153,\n 111,\n 185,\n 36,\n 39,\n 174,\n 65,\n 228,\n 100,\n 155,\n 147,\n 76,\n 164,\n 149,\n 153,\n 27,\n 120,\n 82,\n 184,\n 85\n]);\n//# sourceMappingURL=constants.js.map","const fallbackWindow = {};\nexport function locateWindow() {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else if (typeof self !== \"undefined\") {\n return self;\n }\n return fallbackWindow;\n}\n","import { isEmptyData, convertToBuffer } from \"@aws-crypto/util\";\nimport { EMPTY_DATA_SHA_256, SHA_256_HASH, SHA_256_HMAC_ALGO, } from \"./constants\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.toHash = new Uint8Array(0);\n this.secret = secret;\n this.reset();\n }\n Sha256.prototype.update = function (data) {\n if (isEmptyData(data)) {\n return;\n }\n var update = convertToBuffer(data);\n var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n typedArray.set(this.toHash, 0);\n typedArray.set(update, this.toHash.byteLength);\n this.toHash = typedArray;\n };\n Sha256.prototype.digest = function () {\n var _this = this;\n if (this.key) {\n return this.key.then(function (key) {\n return locateWindow()\n .crypto.subtle.sign(SHA_256_HMAC_ALGO, key, _this.toHash)\n .then(function (data) { return new Uint8Array(data); });\n });\n }\n if (isEmptyData(this.toHash)) {\n return Promise.resolve(EMPTY_DATA_SHA_256);\n }\n return Promise.resolve()\n .then(function () {\n return locateWindow().crypto.subtle.digest(SHA_256_HASH, _this.toHash);\n })\n .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n };\n Sha256.prototype.reset = function () {\n var _this = this;\n this.toHash = new Uint8Array(0);\n if (this.secret && this.secret !== void 0) {\n this.key = new Promise(function (resolve, reject) {\n locateWindow()\n .crypto.subtle.importKey(\"raw\", convertToBuffer(_this.secret), SHA_256_HMAC_ALGO, false, [\"sign\"])\n .then(resolve, reject);\n });\n this.key.catch(function () { });\n }\n };\n return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=webCryptoSha256.js.map","import { __awaiter, __generator } from \"tslib\";\nvar subtleCryptoMethods = [\n \"decrypt\",\n \"digest\",\n \"encrypt\",\n \"exportKey\",\n \"generateKey\",\n \"importKey\",\n \"sign\",\n \"verify\"\n];\nexport function supportsWebCrypto(window) {\n if (supportsSecureRandom(window) &&\n typeof window.crypto.subtle === \"object\") {\n var subtle = window.crypto.subtle;\n return supportsSubtleCrypto(subtle);\n }\n return false;\n}\nexport function supportsSecureRandom(window) {\n if (typeof window === \"object\" && typeof window.crypto === \"object\") {\n var getRandomValues = window.crypto.getRandomValues;\n return typeof getRandomValues === \"function\";\n }\n return false;\n}\nexport function supportsSubtleCrypto(subtle) {\n return (subtle &&\n subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === \"function\"; }));\n}\nexport function supportsZeroByteGCM(subtle) {\n return __awaiter(this, void 0, void 0, function () {\n var key, zeroByteAuthTag, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!supportsSubtleCrypto(subtle))\n return [2 /*return*/, false];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, , 5]);\n return [4 /*yield*/, subtle.generateKey({ name: \"AES-GCM\", length: 128 }, false, [\"encrypt\"])];\n case 2:\n key = _b.sent();\n return [4 /*yield*/, subtle.encrypt({\n name: \"AES-GCM\",\n iv: new Uint8Array(Array(12)),\n additionalData: new Uint8Array(Array(16)),\n tagLength: 128\n }, key, new Uint8Array(0))];\n case 3:\n zeroByteAuthTag = _b.sent();\n return [2 /*return*/, zeroByteAuthTag.byteLength === 16];\n case 4:\n _a = _b.sent();\n return [2 /*return*/, false];\n case 5: return [2 /*return*/];\n }\n });\n });\n}\n//# sourceMappingURL=supportsWebCrypto.js.map","import { Sha256 as WebCryptoSha256 } from \"./webCryptoSha256\";\nimport { Sha256 as JsSha256 } from \"@aws-crypto/sha256-js\";\nimport { supportsWebCrypto } from \"@aws-crypto/supports-web-crypto\";\nimport { locateWindow } from \"@aws-sdk/util-locate-window\";\nimport { convertToBuffer } from \"@aws-crypto/util\";\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n if (supportsWebCrypto(locateWindow())) {\n this.hash = new WebCryptoSha256(secret);\n }\n else {\n this.hash = new JsSha256(secret);\n }\n }\n Sha256.prototype.update = function (data, encoding) {\n this.hash.update(convertToBuffer(data));\n };\n Sha256.prototype.digest = function () {\n return this.hash.digest();\n };\n Sha256.prototype.reset = function () {\n this.hash.reset();\n };\n return Sha256;\n}());\nexport { Sha256 };\n//# sourceMappingURL=crossPlatformSha256.js.map","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n 'Amazon Silk': 'amazon_silk',\n 'Android Browser': 'android',\n Bada: 'bada',\n BlackBerry: 'blackberry',\n Chrome: 'chrome',\n Chromium: 'chromium',\n Electron: 'electron',\n Epiphany: 'epiphany',\n Firefox: 'firefox',\n Focus: 'focus',\n Generic: 'generic',\n 'Google Search': 'google_search',\n Googlebot: 'googlebot',\n 'Internet Explorer': 'ie',\n 'K-Meleon': 'k_meleon',\n Maxthon: 'maxthon',\n 'Microsoft Edge': 'edge',\n 'MZ Browser': 'mz',\n 'NAVER Whale Browser': 'naver',\n Opera: 'opera',\n 'Opera Coast': 'opera_coast',\n PhantomJS: 'phantomjs',\n Puffin: 'puffin',\n QupZilla: 'qupzilla',\n QQ: 'qq',\n QQLite: 'qqlite',\n Safari: 'safari',\n Sailfish: 'sailfish',\n 'Samsung Internet for Android': 'samsung_internet',\n SeaMonkey: 'seamonkey',\n Sleipnir: 'sleipnir',\n Swing: 'swing',\n Tizen: 'tizen',\n 'UC Browser': 'uc',\n Vivaldi: 'vivaldi',\n 'WebOS Browser': 'webos',\n WeChat: 'wechat',\n 'Yandex Browser': 'yandex',\n Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n amazon_silk: 'Amazon Silk',\n android: 'Android Browser',\n bada: 'Bada',\n blackberry: 'BlackBerry',\n chrome: 'Chrome',\n chromium: 'Chromium',\n electron: 'Electron',\n epiphany: 'Epiphany',\n firefox: 'Firefox',\n focus: 'Focus',\n generic: 'Generic',\n googlebot: 'Googlebot',\n google_search: 'Google Search',\n ie: 'Internet Explorer',\n k_meleon: 'K-Meleon',\n maxthon: 'Maxthon',\n edge: 'Microsoft Edge',\n mz: 'MZ Browser',\n naver: 'NAVER Whale Browser',\n opera: 'Opera',\n opera_coast: 'Opera Coast',\n phantomjs: 'PhantomJS',\n puffin: 'Puffin',\n qupzilla: 'QupZilla',\n qq: 'QQ Browser',\n qqlite: 'QQ Browser Lite',\n safari: 'Safari',\n sailfish: 'Sailfish',\n samsung_internet: 'Samsung Internet for Android',\n seamonkey: 'SeaMonkey',\n sleipnir: 'Sleipnir',\n swing: 'Swing',\n tizen: 'Tizen',\n uc: 'UC Browser',\n vivaldi: 'Vivaldi',\n webos: 'WebOS Browser',\n wechat: 'WeChat',\n yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n tablet: 'tablet',\n mobile: 'mobile',\n desktop: 'desktop',\n tv: 'tv',\n};\n\nexport const OS_MAP = {\n WindowsPhone: 'Windows Phone',\n Windows: 'Windows',\n MacOS: 'macOS',\n iOS: 'iOS',\n Android: 'Android',\n WebOS: 'WebOS',\n BlackBerry: 'BlackBerry',\n Bada: 'Bada',\n Tizen: 'Tizen',\n Linux: 'Linux',\n ChromeOS: 'Chrome OS',\n PlayStation4: 'PlayStation 4',\n Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n EdgeHTML: 'EdgeHTML',\n Blink: 'Blink',\n Trident: 'Trident',\n Presto: 'Presto',\n Gecko: 'Gecko',\n WebKit: 'WebKit',\n};\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n /**\n * Get first matched item for a string\n * @param {RegExp} regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getFirstMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n /**\n * Get second matched item for a string\n * @param regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getSecondMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n /**\n * Match a regexp and return a constant or undefined\n * @param {RegExp} regexp\n * @param {String} ua\n * @param {*} _const Any const that will be returned if regexp matches the string\n * @return {*}\n */\n static matchAndReturnConst(regexp, ua, _const) {\n if (regexp.test(ua)) {\n return _const;\n }\n return void (0);\n }\n\n static getWindowsVersionName(version) {\n switch (version) {\n case 'NT': return 'NT';\n case 'XP': return 'XP';\n case 'NT 5.0': return '2000';\n case 'NT 5.1': return 'XP';\n case 'NT 5.2': return '2003';\n case 'NT 6.0': return 'Vista';\n case 'NT 6.1': return '7';\n case 'NT 6.2': return '8';\n case 'NT 6.3': return '8.1';\n case 'NT 10.0': return '10';\n default: return undefined;\n }\n }\n\n /**\n * Get macOS version name\n * 10.5 - Leopard\n * 10.6 - Snow Leopard\n * 10.7 - Lion\n * 10.8 - Mountain Lion\n * 10.9 - Mavericks\n * 10.10 - Yosemite\n * 10.11 - El Capitan\n * 10.12 - Sierra\n * 10.13 - High Sierra\n * 10.14 - Mojave\n * 10.15 - Catalina\n *\n * @example\n * getMacOSVersionName(\"10.14\") // 'Mojave'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getMacOSVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] !== 10) return undefined;\n switch (v[1]) {\n case 5: return 'Leopard';\n case 6: return 'Snow Leopard';\n case 7: return 'Lion';\n case 8: return 'Mountain Lion';\n case 9: return 'Mavericks';\n case 10: return 'Yosemite';\n case 11: return 'El Capitan';\n case 12: return 'Sierra';\n case 13: return 'High Sierra';\n case 14: return 'Mojave';\n case 15: return 'Catalina';\n default: return undefined;\n }\n }\n\n /**\n * Get Android version name\n * 1.5 - Cupcake\n * 1.6 - Donut\n * 2.0 - Eclair\n * 2.1 - Eclair\n * 2.2 - Froyo\n * 2.x - Gingerbread\n * 3.x - Honeycomb\n * 4.0 - Ice Cream Sandwich\n * 4.1 - Jelly Bean\n * 4.4 - KitKat\n * 5.x - Lollipop\n * 6.x - Marshmallow\n * 7.x - Nougat\n * 8.x - Oreo\n * 9.x - Pie\n *\n * @example\n * getAndroidVersionName(\"7.0\") // 'Nougat'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getAndroidVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] === 1 && v[1] < 5) return undefined;\n if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n if (v[0] === 1 && v[1] >= 6) return 'Donut';\n if (v[0] === 2 && v[1] < 2) return 'Eclair';\n if (v[0] === 2 && v[1] === 2) return 'Froyo';\n if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n if (v[0] === 3) return 'Honeycomb';\n if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n if (v[0] === 5) return 'Lollipop';\n if (v[0] === 6) return 'Marshmallow';\n if (v[0] === 7) return 'Nougat';\n if (v[0] === 8) return 'Oreo';\n if (v[0] === 9) return 'Pie';\n return undefined;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n static getVersionPrecision(version) {\n return version.split('.').length;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions('1.10.2.1', '1.8.2.1.90') // 1\n * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1\n * compareVersions('1.10.2.1', '1.10.2.1'); // 0\n * compareVersions('1.10.2.1', '1.0800.2'); // -1\n * compareVersions('1.10.2.1', '1.10', true); // 0\n *\n * @param {String} versionA versions versions to compare\n * @param {String} versionB versions versions to compare\n * @param {boolean} [isLoose] enable loose comparison\n * @return {Number} comparison result: -1 when versionA is lower,\n * 1 when versionA is bigger, 0 when both equal\n */\n /* eslint consistent-return: 1 */\n static compareVersions(versionA, versionB, isLoose = false) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n const versionAPrecision = Utils.getVersionPrecision(versionA);\n const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n let precision = Math.max(versionAPrecision, versionBPrecision);\n let lastPrecision = 0;\n\n const chunks = Utils.map([versionA, versionB], (version) => {\n const delta = precision - Utils.getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n const _version = version + new Array(delta + 1).join('.0');\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n });\n\n // adjust precision for loose comparison\n if (isLoose) {\n lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n }\n\n // iterate in reverse order by reversed chunks array\n precision -= 1;\n while (precision >= lastPrecision) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n\n if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === lastPrecision) {\n // all version chunks are same\n return 0;\n }\n\n precision -= 1;\n } else if (chunks[0][precision] < chunks[1][precision]) {\n return -1;\n }\n }\n\n return undefined;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n static map(arr, iterator) {\n const result = [];\n let i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i += 1) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Array::find polyfill\n *\n * @param {Array} arr\n * @param {Function} predicate\n * @return {Array}\n */\n static find(arr, predicate) {\n let i;\n let l;\n if (Array.prototype.find) {\n return Array.prototype.find.call(arr, predicate);\n }\n for (i = 0, l = arr.length; i < l; i += 1) {\n const value = arr[i];\n if (predicate(value, i)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Object::assign polyfill\n *\n * @param {Object} obj\n * @param {Object} ...objs\n * @return {Object}\n */\n static assign(obj, ...assigners) {\n const result = obj;\n let i;\n let l;\n if (Object.assign) {\n return Object.assign(obj, ...assigners);\n }\n for (i = 0, l = assigners.length; i < l; i += 1) {\n const assigner = assigners[i];\n if (typeof assigner === 'object' && assigner !== null) {\n const keys = Object.keys(assigner);\n keys.forEach((key) => {\n result[key] = assigner[key];\n });\n }\n }\n return obj;\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('Microsoft Edge') // edge\n *\n * @param {string} browserName\n * @return {string}\n */\n static getBrowserAlias(browserName) {\n return BROWSER_ALIASES_MAP[browserName];\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('edge') // Microsoft Edge\n *\n * @param {string} browserAlias\n * @return {string}\n */\n static getBrowserTypeByAlias(browserAlias) {\n return BROWSER_MAP[browserAlias] || '';\n }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe(ua) {\n const browser = {\n name: 'Googlebot',\n };\n const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera < 13.0 */\n {\n test: [/opera/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera > 13.0 */\n {\n test: [/opr\\/|opios/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/SamsungBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Samsung Internet for Android',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Whale/i],\n describe(ua) {\n const browser = {\n name: 'NAVER Whale Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MZBrowser/i],\n describe(ua) {\n const browser = {\n name: 'MZ Browser',\n };\n const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/focus/i],\n describe(ua) {\n const browser = {\n name: 'Focus',\n };\n const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/swing/i],\n describe(ua) {\n const browser = {\n name: 'Swing',\n };\n const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/coast/i],\n describe(ua) {\n const browser = {\n name: 'Opera Coast',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe(ua) {\n const browser = {\n name: 'Opera Touch',\n };\n const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/yabrowser/i],\n describe(ua) {\n const browser = {\n name: 'Yandex Browser',\n };\n const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/ucbrowser/i],\n describe(ua) {\n const browser = {\n name: 'UC Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Maxthon|mxios/i],\n describe(ua) {\n const browser = {\n name: 'Maxthon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/epiphany/i],\n describe(ua) {\n const browser = {\n name: 'Epiphany',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/puffin/i],\n describe(ua) {\n const browser = {\n name: 'Puffin',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sleipnir/i],\n describe(ua) {\n const browser = {\n name: 'Sleipnir',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/k-meleon/i],\n describe(ua) {\n const browser = {\n name: 'K-Meleon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/micromessenger/i],\n describe(ua) {\n const browser = {\n name: 'WeChat',\n };\n const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qqbrowser/i],\n describe(ua) {\n const browser = {\n name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n };\n const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/msie|trident/i],\n describe(ua) {\n const browser = {\n name: 'Internet Explorer',\n };\n const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/\\sedg\\//i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/edg([ea]|ios)/i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/vivaldi/i],\n describe(ua) {\n const browser = {\n name: 'Vivaldi',\n };\n const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/seamonkey/i],\n describe(ua) {\n const browser = {\n name: 'SeaMonkey',\n };\n const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sailfish/i],\n describe(ua) {\n const browser = {\n name: 'Sailfish',\n };\n\n const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/silk/i],\n describe(ua) {\n const browser = {\n name: 'Amazon Silk',\n };\n const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/phantom/i],\n describe(ua) {\n const browser = {\n name: 'PhantomJS',\n };\n const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/slimerjs/i],\n describe(ua) {\n const browser = {\n name: 'SlimerJS',\n };\n const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const browser = {\n name: 'BlackBerry',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const browser = {\n name: 'WebOS Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/bada/i],\n describe(ua) {\n const browser = {\n name: 'Bada',\n };\n const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/tizen/i],\n describe(ua) {\n const browser = {\n name: 'Tizen',\n };\n const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qupzilla/i],\n describe(ua) {\n const browser = {\n name: 'QupZilla',\n };\n const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe(ua) {\n const browser = {\n name: 'Firefox',\n };\n const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/electron/i],\n describe(ua) {\n const browser = {\n name: 'Electron',\n };\n const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MiuiBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Miui',\n };\n const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chromium/i],\n describe(ua) {\n const browser = {\n name: 'Chromium',\n };\n const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chrome|crios|crmo/i],\n describe(ua) {\n const browser = {\n name: 'Chrome',\n };\n const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/GSA/i],\n describe(ua) {\n const browser = {\n name: 'Google Search',\n };\n const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Android Browser */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const browser = {\n name: 'Android Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* PlayStation 4 */\n {\n test: [/playstation 4/i],\n describe(ua) {\n const browser = {\n name: 'PlayStation 4',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Safari */\n {\n test: [/safari|applewebkit/i],\n describe(ua) {\n const browser = {\n name: 'Safari',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Something else */\n {\n test: [/.*/i],\n describe(ua) {\n /* Here we try to make sure that there are explicit details about the device\n * in order to decide what regexp exactly we want to apply\n * (as there is a specific decision based on that conclusion)\n */\n const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n const hasDeviceSpec = ua.search('\\\\(') !== -1;\n const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n return {\n name: Utils.getFirstMatch(regexp, ua),\n version: Utils.getSecondMatch(regexp, ua),\n };\n },\n },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n /* Roku */\n {\n test: [/Roku\\/DVP/],\n describe(ua) {\n const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n return {\n name: OS_MAP.Roku,\n version,\n };\n },\n },\n\n /* Windows Phone */\n {\n test: [/windows phone/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.WindowsPhone,\n version,\n };\n },\n },\n\n /* Windows */\n {\n test: [/windows /i],\n describe(ua) {\n const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n const versionName = Utils.getWindowsVersionName(version);\n\n return {\n name: OS_MAP.Windows,\n version,\n versionName,\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe(ua) {\n const result = {\n name: OS_MAP.iOS,\n };\n const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n if (version) {\n result.version = version;\n }\n return result;\n },\n },\n\n /* macOS */\n {\n test: [/macintosh/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n const versionName = Utils.getMacOSVersionName(version);\n\n const os = {\n name: OS_MAP.MacOS,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* iOS */\n {\n test: [/(ipod|iphone|ipad)/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n return {\n name: OS_MAP.iOS,\n version,\n };\n },\n },\n\n /* Android */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n const versionName = Utils.getAndroidVersionName(version);\n const os = {\n name: OS_MAP.Android,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* WebOS */\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n const os = {\n name: OS_MAP.WebOS,\n };\n\n if (version && version.length) {\n os.version = version;\n }\n return os;\n },\n },\n\n /* BlackBerry */\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n return {\n name: OS_MAP.BlackBerry,\n version,\n };\n },\n },\n\n /* Bada */\n {\n test: [/bada/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Bada,\n version,\n };\n },\n },\n\n /* Tizen */\n {\n test: [/tizen/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Tizen,\n version,\n };\n },\n },\n\n /* Linux */\n {\n test: [/linux/i],\n describe() {\n return {\n name: OS_MAP.Linux,\n };\n },\n },\n\n /* Chrome OS */\n {\n test: [/CrOS/],\n describe() {\n return {\n name: OS_MAP.ChromeOS,\n };\n },\n },\n\n /* Playstation 4 */\n {\n test: [/PlayStation 4/],\n describe(ua) {\n const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.PlayStation4,\n version,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe() {\n return {\n type: 'bot',\n vendor: 'Google',\n };\n },\n },\n\n /* Huawei */\n {\n test: [/huawei/i],\n describe(ua) {\n const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n const platform = {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Huawei',\n };\n if (model) {\n platform.model = model;\n }\n return platform;\n },\n },\n\n /* Nexus Tablet */\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Nexus',\n };\n },\n },\n\n /* iPad */\n {\n test: [/ipad/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Amazon Kindle Fire */\n {\n test: [/kftt build/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n model: 'Kindle Fire HD 7',\n };\n },\n },\n\n /* Another Amazon Tablet with Silk */\n {\n test: [/silk/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n };\n },\n },\n\n /* Tablet */\n {\n test: [/tablet(?! pc)/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* iPod/iPhone */\n {\n test(parser) {\n const iDevice = parser.test(/ipod|iphone/i);\n const likeIDevice = parser.test(/like (ipod|iphone)/i);\n return iDevice && !likeIDevice;\n },\n describe(ua) {\n const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Apple',\n model,\n };\n },\n },\n\n /* Nexus Mobile */\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Nexus',\n };\n },\n },\n\n /* Mobile */\n {\n test: [/[^-]mobi/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* BlackBerry */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'blackberry';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'BlackBerry',\n };\n },\n },\n\n /* Bada */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'bada';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* Windows Phone */\n {\n test(parser) {\n return parser.getBrowserName() === 'windows phone';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Microsoft',\n };\n },\n },\n\n /* Android Tablet */\n {\n test(parser) {\n const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* Android Mobile */\n {\n test(parser) {\n return parser.getOSName(true) === 'android';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* desktop */\n {\n test(parser) {\n return parser.getOSName(true) === 'macos';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n vendor: 'Apple',\n };\n },\n },\n\n /* Windows */\n {\n test(parser) {\n return parser.getOSName(true) === 'windows';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* Linux */\n {\n test(parser) {\n return parser.getOSName(true) === 'linux';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* PlayStation 4 */\n {\n test(parser) {\n return parser.getOSName(true) === 'playstation 4';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n\n /* Roku */\n {\n test(parser) {\n return parser.getOSName(true) === 'roku';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n /* EdgeHTML */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'microsoft edge';\n },\n describe(ua) {\n const isBlinkBased = /\\sedg\\//i.test(ua);\n\n // return blink if it's blink-based one\n if (isBlinkBased) {\n return {\n name: ENGINE_MAP.Blink,\n };\n }\n\n // otherwise match the version and return EdgeHTML\n const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n return {\n name: ENGINE_MAP.EdgeHTML,\n version,\n };\n },\n },\n\n /* Trident */\n {\n test: [/trident/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Trident,\n };\n\n const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Presto */\n {\n test(parser) {\n return parser.test(/presto/i);\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Presto,\n };\n\n const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Gecko */\n {\n test(parser) {\n const isGecko = parser.test(/gecko/i);\n const likeGecko = parser.test(/like gecko/i);\n return isGecko && !likeGecko;\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Gecko,\n };\n\n const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Blink */\n {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe() {\n return {\n name: ENGINE_MAP.Blink,\n };\n },\n },\n\n /* WebKit */\n {\n test: [/(apple)?webkit/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.WebKit,\n };\n\n const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n /**\n * Create instance of Parser\n *\n * @param {String} UA User-Agent string\n * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n * improvements if you need to make a more particular parsing\n * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n *\n * @throw {Error} in case of empty UA String\n *\n * @constructor\n */\n constructor(UA, skipParsing = false) {\n if (UA === void (0) || UA === null || UA === '') {\n throw new Error(\"UserAgent parameter can't be empty\");\n }\n\n this._ua = UA;\n\n /**\n * @typedef ParsedResult\n * @property {Object} browser\n * @property {String|undefined} [browser.name]\n * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n * @property {Object} os\n * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n * @property {Object} platform\n * @property {String|undefined} [platform.type]\n * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n * @property {String|undefined} [platform.vendor] Vendor of the device,\n * like `\"Apple\"` or `\"Samsung\"`\n * @property {String|undefined} [platform.model] Device model,\n * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n * @property {Object} engine\n * @property {String|undefined} [engine.name]\n * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n * @property {String|undefined} [engine.version] String version of the engine\n */\n this.parsedResult = {};\n\n if (skipParsing !== true) {\n this.parse();\n }\n }\n\n /**\n * Get UserAgent string of current Parser instance\n * @return {String} User-Agent String of the current object\n *\n * @public\n */\n getUA() {\n return this._ua;\n }\n\n /**\n * Test a UA string for a regexp\n * @param {RegExp} regex\n * @return {Boolean}\n */\n test(regex) {\n return regex.test(this._ua);\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n */\n parseBrowser() {\n this.parsedResult.browser = {};\n\n const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n if (typeof _browser.test === 'function') {\n return _browser.test(this);\n }\n\n if (_browser.test instanceof Array) {\n return _browser.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (browserDescriptor) {\n this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n }\n\n return this.parsedResult.browser;\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n *\n * @public\n */\n getBrowser() {\n if (this.parsedResult.browser) {\n return this.parsedResult.browser;\n }\n\n return this.parseBrowser();\n }\n\n /**\n * Get browser's name\n * @return {String} Browser's name or an empty string\n *\n * @public\n */\n getBrowserName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getBrowser().name).toLowerCase() || '';\n }\n return this.getBrowser().name || '';\n }\n\n\n /**\n * Get browser's version\n * @return {String} version of browser\n *\n * @public\n */\n getBrowserVersion() {\n return this.getBrowser().version;\n }\n\n /**\n * Get OS\n * @return {Object}\n *\n * @example\n * this.getOS();\n * {\n * name: 'macOS',\n * version: '10.11.12'\n * }\n */\n getOS() {\n if (this.parsedResult.os) {\n return this.parsedResult.os;\n }\n\n return this.parseOS();\n }\n\n /**\n * Parse OS and save it to this.parsedResult.os\n * @return {*|{}}\n */\n parseOS() {\n this.parsedResult.os = {};\n\n const os = Utils.find(osParsersList, (_os) => {\n if (typeof _os.test === 'function') {\n return _os.test(this);\n }\n\n if (_os.test instanceof Array) {\n return _os.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (os) {\n this.parsedResult.os = os.describe(this.getUA());\n }\n\n return this.parsedResult.os;\n }\n\n /**\n * Get OS name\n * @param {Boolean} [toLowerCase] return lower-cased value\n * @return {String} name of the OS — macOS, Windows, Linux, etc.\n */\n getOSName(toLowerCase) {\n const { name } = this.getOS();\n\n if (toLowerCase) {\n return String(name).toLowerCase() || '';\n }\n\n return name || '';\n }\n\n /**\n * Get OS version\n * @return {String} full version with dots ('10.11.12', '5.6', etc)\n */\n getOSVersion() {\n return this.getOS().version;\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n getPlatform() {\n if (this.parsedResult.platform) {\n return this.parsedResult.platform;\n }\n\n return this.parsePlatform();\n }\n\n /**\n * Get platform name\n * @param {Boolean} [toLowerCase=false]\n * @return {*}\n */\n getPlatformType(toLowerCase = false) {\n const { type } = this.getPlatform();\n\n if (toLowerCase) {\n return String(type).toLowerCase() || '';\n }\n\n return type || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parsePlatform() {\n this.parsedResult.platform = {};\n\n const platform = Utils.find(platformParsersList, (_platform) => {\n if (typeof _platform.test === 'function') {\n return _platform.test(this);\n }\n\n if (_platform.test instanceof Array) {\n return _platform.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (platform) {\n this.parsedResult.platform = platform.describe(this.getUA());\n }\n\n return this.parsedResult.platform;\n }\n\n /**\n * Get parsed engine\n * @return {{}}\n */\n getEngine() {\n if (this.parsedResult.engine) {\n return this.parsedResult.engine;\n }\n\n return this.parseEngine();\n }\n\n /**\n * Get engines's name\n * @return {String} Engines's name or an empty string\n *\n * @public\n */\n getEngineName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getEngine().name).toLowerCase() || '';\n }\n return this.getEngine().name || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parseEngine() {\n this.parsedResult.engine = {};\n\n const engine = Utils.find(enginesParsersList, (_engine) => {\n if (typeof _engine.test === 'function') {\n return _engine.test(this);\n }\n\n if (_engine.test instanceof Array) {\n return _engine.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (engine) {\n this.parsedResult.engine = engine.describe(this.getUA());\n }\n\n return this.parsedResult.engine;\n }\n\n /**\n * Parse full information about the browser\n * @returns {Parser}\n */\n parse() {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n this.parseEngine();\n\n return this;\n }\n\n /**\n * Get parsed result\n * @return {ParsedResult}\n */\n getResult() {\n return Utils.assign({}, this.parsedResult);\n }\n\n /**\n * Check if parsed browser matches certain conditions\n *\n * @param {Object} checkTree It's one or two layered object,\n * which can include a platform or an OS on the first layer\n * and should have browsers specs on the bottom-laying layer\n *\n * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n * Returns `undefined` when the browser is no described in the checkTree object.\n *\n * @example\n * const browser = Bowser.getParser(window.navigator.userAgent);\n * if (browser.satisfies({chrome: '>118.01.1322' }))\n * // or with os\n * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n * // or with platforms\n * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n */\n satisfies(checkTree) {\n const platformsAndOSes = {};\n let platformsAndOSCounter = 0;\n const browsers = {};\n let browsersCounter = 0;\n\n const allDefinitions = Object.keys(checkTree);\n\n allDefinitions.forEach((key) => {\n const currentDefinition = checkTree[key];\n if (typeof currentDefinition === 'string') {\n browsers[key] = currentDefinition;\n browsersCounter += 1;\n } else if (typeof currentDefinition === 'object') {\n platformsAndOSes[key] = currentDefinition;\n platformsAndOSCounter += 1;\n }\n });\n\n if (platformsAndOSCounter > 0) {\n const platformsAndOSNames = Object.keys(platformsAndOSes);\n const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n if (OSMatchingDefinition) {\n const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n if (osResult !== void 0) {\n return osResult;\n }\n }\n\n const platformMatchingDefinition = Utils.find(\n platformsAndOSNames,\n name => (this.isPlatform(name)),\n );\n if (platformMatchingDefinition) {\n const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n if (platformResult !== void 0) {\n return platformResult;\n }\n }\n }\n\n if (browsersCounter > 0) {\n const browserNames = Object.keys(browsers);\n const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n if (matchingDefinition !== void 0) {\n return this.compareVersion(browsers[matchingDefinition]);\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the browser name equals the passed string\n * @param browserName The string to compare with the browser name\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {boolean}\n */\n isBrowser(browserName, includingAlias = false) {\n const defaultBrowserName = this.getBrowserName().toLowerCase();\n let browserNameLower = browserName.toLowerCase();\n const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n if (includingAlias && alias) {\n browserNameLower = alias.toLowerCase();\n }\n return browserNameLower === defaultBrowserName;\n }\n\n compareVersion(version) {\n let expectedResults = [0];\n let comparableVersion = version;\n let isLoose = false;\n\n const currentBrowserVersion = this.getBrowserVersion();\n\n if (typeof currentBrowserVersion !== 'string') {\n return void 0;\n }\n\n if (version[0] === '>' || version[0] === '<') {\n comparableVersion = version.substr(1);\n if (version[1] === '=') {\n isLoose = true;\n comparableVersion = version.substr(2);\n } else {\n expectedResults = [];\n }\n if (version[0] === '>') {\n expectedResults.push(1);\n } else {\n expectedResults.push(-1);\n }\n } else if (version[0] === '=') {\n comparableVersion = version.substr(1);\n } else if (version[0] === '~') {\n isLoose = true;\n comparableVersion = version.substr(1);\n }\n\n return expectedResults.indexOf(\n Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n ) > -1;\n }\n\n isOS(osName) {\n return this.getOSName(true) === String(osName).toLowerCase();\n }\n\n isPlatform(platformType) {\n return this.getPlatformType(true) === String(platformType).toLowerCase();\n }\n\n isEngine(engineName) {\n return this.getEngineName(true) === String(engineName).toLowerCase();\n }\n\n /**\n * Is anything? Check if the browser is called \"anything\",\n * the OS called \"anything\" or the platform called \"anything\"\n * @param {String} anything\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {Boolean}\n */\n is(anything, includingAlias = false) {\n return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n || this.isPlatform(anything);\n }\n\n /**\n * Check if any of the given values satisfies this.is(anything)\n * @param {String[]} anythings\n * @returns {Boolean}\n */\n some(anythings = []) {\n return anythings.some(anything => this.is(anything));\n }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n BROWSER_MAP,\n ENGINE_MAP,\n OS_MAP,\n PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n /**\n * Creates a {@link Parser} instance\n *\n * @param {String} UA UserAgent string\n * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n * explicitly. Same as `skipParsing` for {@link Parser}.\n * @returns {Parser}\n * @throws {Error} when UA is not a String\n *\n * @example\n * const parser = Bowser.getParser(window.navigator.userAgent);\n * const result = parser.getResult();\n */\n static getParser(UA, skipParsing = false) {\n if (typeof UA !== 'string') {\n throw new Error('UserAgent should be a string');\n }\n return new Parser(UA, skipParsing);\n }\n\n /**\n * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n *\n * @param UA\n * @return {ParsedResult}\n *\n * @example\n * const result = Bowser.parse(window.navigator.userAgent);\n */\n static parse(UA) {\n return (new Parser(UA)).getResult();\n }\n\n static get BROWSER_MAP() {\n return BROWSER_MAP;\n }\n\n static get ENGINE_MAP() {\n return ENGINE_MAP;\n }\n\n static get OS_MAP() {\n return OS_MAP;\n }\n\n static get PLATFORMS_MAP() {\n return PLATFORMS_MAP;\n }\n}\n\nexport default Bowser;\n","import bowser from \"bowser\";\nexport const defaultUserAgent = ({ serviceId, clientVersion }) => async () => {\n const parsedUA = typeof window !== \"undefined\" && window?.navigator?.userAgent\n ? bowser.parse(window.navigator.userAgent)\n : undefined;\n const sections = [\n [\"aws-sdk-js\", clientVersion],\n [\"ua\", \"2.0\"],\n [`os/${parsedUA?.os?.name || \"other\"}`, parsedUA?.os?.version],\n [\"lang/js\"],\n [\"md/browser\", `${parsedUA?.browser?.name ?? \"unknown\"}_${parsedUA?.browser?.version ?? \"unknown\"}`],\n ];\n if (serviceId) {\n sections.push([`api/${serviceId}`, clientVersion]);\n }\n return sections;\n};\n","export function getChunkedStream(source) {\n let currentMessageTotalLength = 0;\n let currentMessagePendingLength = 0;\n let currentMessage = null;\n let messageLengthBuffer = null;\n const allocateMessage = (size) => {\n if (typeof size !== \"number\") {\n throw new Error(\"Attempted to allocate an event message where size was not a number: \" + size);\n }\n currentMessageTotalLength = size;\n currentMessagePendingLength = 4;\n currentMessage = new Uint8Array(size);\n const currentMessageView = new DataView(currentMessage.buffer);\n currentMessageView.setUint32(0, size, false);\n };\n const iterator = async function* () {\n const sourceIterator = source[Symbol.asyncIterator]();\n while (true) {\n const { value, done } = await sourceIterator.next();\n if (done) {\n if (!currentMessageTotalLength) {\n return;\n }\n else if (currentMessageTotalLength === currentMessagePendingLength) {\n yield currentMessage;\n }\n else {\n throw new Error(\"Truncated event message received.\");\n }\n return;\n }\n const chunkLength = value.length;\n let currentOffset = 0;\n while (currentOffset < chunkLength) {\n if (!currentMessage) {\n const bytesRemaining = chunkLength - currentOffset;\n if (!messageLengthBuffer) {\n messageLengthBuffer = new Uint8Array(4);\n }\n const numBytesForTotal = Math.min(4 - currentMessagePendingLength, bytesRemaining);\n messageLengthBuffer.set(value.slice(currentOffset, currentOffset + numBytesForTotal), currentMessagePendingLength);\n currentMessagePendingLength += numBytesForTotal;\n currentOffset += numBytesForTotal;\n if (currentMessagePendingLength < 4) {\n break;\n }\n allocateMessage(new DataView(messageLengthBuffer.buffer).getUint32(0, false));\n messageLengthBuffer = null;\n }\n const numBytesToWrite = Math.min(currentMessageTotalLength - currentMessagePendingLength, chunkLength - currentOffset);\n currentMessage.set(value.slice(currentOffset, currentOffset + numBytesToWrite), currentMessagePendingLength);\n currentMessagePendingLength += numBytesToWrite;\n currentOffset += numBytesToWrite;\n if (currentMessageTotalLength && currentMessageTotalLength === currentMessagePendingLength) {\n yield currentMessage;\n currentMessage = null;\n currentMessageTotalLength = 0;\n currentMessagePendingLength = 0;\n }\n }\n }\n };\n return {\n [Symbol.asyncIterator]: iterator,\n };\n}\n","export function getUnmarshalledStream(source, options) {\n const messageUnmarshaller = getMessageUnmarshaller(options.deserializer, options.toUtf8);\n return {\n [Symbol.asyncIterator]: async function* () {\n for await (const chunk of source) {\n const message = options.eventStreamCodec.decode(chunk);\n const type = await messageUnmarshaller(message);\n if (type === undefined)\n continue;\n yield type;\n }\n },\n };\n}\nexport function getMessageUnmarshaller(deserializer, toUtf8) {\n return async function (message) {\n const { value: messageType } = message.headers[\":message-type\"];\n if (messageType === \"error\") {\n const unmodeledError = new Error(message.headers[\":error-message\"].value || \"UnknownError\");\n unmodeledError.name = message.headers[\":error-code\"].value;\n throw unmodeledError;\n }\n else if (messageType === \"exception\") {\n const code = message.headers[\":exception-type\"].value;\n const exception = { [code]: message };\n const deserializedException = await deserializer(exception);\n if (deserializedException.$unknown) {\n const error = new Error(toUtf8(message.body));\n error.name = code;\n throw error;\n }\n throw deserializedException[code];\n }\n else if (messageType === \"event\") {\n const event = {\n [message.headers[\":event-type\"].value]: message,\n };\n const deserialized = await deserializer(event);\n if (deserialized.$unknown)\n return;\n return deserialized;\n }\n else {\n throw Error(`Unrecognizable event type: ${message.headers[\":event-type\"].value}`);\n }\n };\n}\n","import { EventStreamCodec, MessageDecoderStream, MessageEncoderStream, SmithyMessageDecoderStream, SmithyMessageEncoderStream, } from \"@smithy/eventstream-codec\";\nimport { getChunkedStream } from \"./getChunkedStream\";\nimport { getMessageUnmarshaller } from \"./getUnmarshalledStream\";\nexport class EventStreamMarshaller {\n constructor({ utf8Encoder, utf8Decoder }) {\n this.eventStreamCodec = new EventStreamCodec(utf8Encoder, utf8Decoder);\n this.utfEncoder = utf8Encoder;\n }\n deserialize(body, deserializer) {\n const inputStream = getChunkedStream(body);\n return new SmithyMessageDecoderStream({\n messageStream: new MessageDecoderStream({ inputStream, decoder: this.eventStreamCodec }),\n deserializer: getMessageUnmarshaller(deserializer, this.utfEncoder),\n });\n }\n serialize(inputStream, serializer) {\n return new MessageEncoderStream({\n messageStream: new SmithyMessageEncoderStream({ inputStream, serializer }),\n encoder: this.eventStreamCodec,\n includeEndFrame: true,\n });\n }\n}\n","export const readableStreamtoIterable = (readableStream) => ({\n [Symbol.asyncIterator]: async function* () {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n return;\n yield value;\n }\n }\n finally {\n reader.releaseLock();\n }\n },\n});\nexport const iterableToReadableStream = (asyncIterable) => {\n const iterator = asyncIterable[Symbol.asyncIterator]();\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await iterator.next();\n if (done) {\n return controller.close();\n }\n controller.enqueue(value);\n },\n });\n};\n","import { EventStreamMarshaller as UniversalEventStreamMarshaller } from \"@smithy/eventstream-serde-universal\";\nimport { iterableToReadableStream, readableStreamtoIterable } from \"./utils\";\nexport class EventStreamMarshaller {\n constructor({ utf8Encoder, utf8Decoder }) {\n this.universalMarshaller = new UniversalEventStreamMarshaller({\n utf8Decoder,\n utf8Encoder,\n });\n }\n deserialize(body, deserializer) {\n const bodyIterable = isReadableStream(body) ? readableStreamtoIterable(body) : body;\n return this.universalMarshaller.deserialize(bodyIterable, deserializer);\n }\n serialize(input, serializer) {\n const serialziedIterable = this.universalMarshaller.serialize(input, serializer);\n return typeof ReadableStream === \"function\" ? iterableToReadableStream(serialziedIterable) : serialziedIterable;\n }\n}\nconst isReadableStream = (body) => typeof ReadableStream === \"function\" && body instanceof ReadableStream;\n","import { EventStreamMarshaller } from \"./EventStreamMarshaller\";\nexport const eventStreamSerdeProvider = (options) => new EventStreamMarshaller(options);\n","export const getHttpHandlerExtensionConfiguration = (runtimeConfig) => {\n let httpHandler = runtimeConfig.httpHandler;\n return {\n setHttpHandler(handler) {\n httpHandler = handler;\n },\n httpHandler() {\n return httpHandler;\n },\n updateHttpClientConfig(key, value) {\n httpHandler.updateHttpClientConfig(key, value);\n },\n httpHandlerConfigs() {\n return httpHandler.httpHandlerConfigs();\n },\n };\n};\nexport const resolveHttpHandlerRuntimeConfig = (httpHandlerExtensionConfiguration) => {\n return {\n httpHandler: httpHandlerExtensionConfiguration.httpHandler(),\n };\n};\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","export function requestTimeout(timeoutInMs = 0) {\n return new Promise((resolve, reject) => {\n if (timeoutInMs) {\n setTimeout(() => {\n const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n timeoutError.name = \"TimeoutError\";\n reject(timeoutError);\n }, timeoutInMs);\n }\n });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { requestTimeout } from \"./request-timeout\";\nexport const keepAliveSupport = {\n supported: undefined,\n};\nexport class FetchHttpHandler {\n static create(instanceOrOptions) {\n if (typeof instanceOrOptions?.handle === \"function\") {\n return instanceOrOptions;\n }\n return new FetchHttpHandler(instanceOrOptions);\n }\n constructor(options) {\n if (typeof options === \"function\") {\n this.configProvider = options().then((opts) => opts || {});\n }\n else {\n this.config = options ?? {};\n this.configProvider = Promise.resolve(this.config);\n }\n if (keepAliveSupport.supported === undefined) {\n keepAliveSupport.supported = Boolean(typeof Request !== \"undefined\" && \"keepalive\" in new Request(\"https://[::1]\"));\n }\n }\n destroy() {\n }\n async handle(request, { abortSignal } = {}) {\n if (!this.config) {\n this.config = await this.configProvider;\n }\n const requestTimeoutInMs = this.config.requestTimeout;\n const keepAlive = this.config.keepAlive === true;\n const credentials = this.config.credentials;\n if (abortSignal?.aborted) {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n return Promise.reject(abortError);\n }\n let path = request.path;\n const queryString = buildQueryString(request.query || {});\n if (queryString) {\n path += `?${queryString}`;\n }\n if (request.fragment) {\n path += `#${request.fragment}`;\n }\n let auth = \"\";\n if (request.username != null || request.password != null) {\n const username = request.username ?? \"\";\n const password = request.password ?? \"\";\n auth = `${username}:${password}@`;\n }\n const { port, method } = request;\n const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n const requestOptions = {\n body,\n headers: new Headers(request.headers),\n method: method,\n credentials,\n };\n if (this.config?.cache) {\n requestOptions.cache = this.config.cache;\n }\n if (body) {\n requestOptions.duplex = \"half\";\n }\n if (typeof AbortController !== \"undefined\") {\n requestOptions.signal = abortSignal;\n }\n if (keepAliveSupport.supported) {\n requestOptions.keepalive = keepAlive;\n }\n if (typeof this.config.requestInit === \"function\") {\n Object.assign(requestOptions, this.config.requestInit(request));\n }\n let removeSignalEventListener = () => { };\n const fetchRequest = new Request(url, requestOptions);\n const raceOfPromises = [\n fetch(fetchRequest).then((response) => {\n const fetchHeaders = response.headers;\n const transformedHeaders = {};\n for (const pair of fetchHeaders.entries()) {\n transformedHeaders[pair[0]] = pair[1];\n }\n const hasReadableStream = response.body != undefined;\n if (!hasReadableStream) {\n return response.blob().then((body) => ({\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body,\n }),\n }));\n }\n return {\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body: response.body,\n }),\n };\n }),\n requestTimeout(requestTimeoutInMs),\n ];\n if (abortSignal) {\n raceOfPromises.push(new Promise((resolve, reject) => {\n const onAbort = () => {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n if (typeof abortSignal.addEventListener === \"function\") {\n const signal = abortSignal;\n signal.addEventListener(\"abort\", onAbort, { once: true });\n removeSignalEventListener = () => signal.removeEventListener(\"abort\", onAbort);\n }\n else {\n abortSignal.onabort = onAbort;\n }\n }));\n }\n return Promise.race(raceOfPromises).finally(removeSignalEventListener);\n }\n updateHttpClientConfig(key, value) {\n this.config = undefined;\n this.configProvider = this.configProvider.then((config) => {\n config[key] = value;\n return config;\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n}\n","import { fromBase64 } from \"@smithy/util-base64\";\nexport const streamCollector = (stream) => {\n if (typeof Blob === \"function\" && stream instanceof Blob) {\n return collectBlob(stream);\n }\n return collectStream(stream);\n};\nasync function collectBlob(blob) {\n const base64 = await readToBase64(blob);\n const arrayBuffer = fromBase64(base64);\n return new Uint8Array(arrayBuffer);\n}\nasync function collectStream(stream) {\n const chunks = [];\n const reader = stream.getReader();\n let isDone = false;\n let length = 0;\n while (!isDone) {\n const { done, value } = await reader.read();\n if (value) {\n chunks.push(value);\n length += value.length;\n }\n isDone = done;\n }\n const collected = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) {\n collected.set(chunk, offset);\n offset += chunk.length;\n }\n return collected;\n}\nfunction readToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (reader.readyState !== 2) {\n return reject(new Error(\"Reader aborted too early\"));\n }\n const result = (reader.result ?? \"\");\n const commaIndex = result.indexOf(\",\");\n const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;\n resolve(result.substring(dataOffset));\n };\n reader.onabort = () => reject(new Error(\"Read aborted\"));\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n}\n","export const invalidProvider = (message) => () => Promise.reject(message);\n","const TEXT_ENCODER = typeof TextEncoder == \"function\" ? new TextEncoder() : null;\nexport const calculateBodyLength = (body) => {\n if (typeof body === \"string\") {\n if (TEXT_ENCODER) {\n return TEXT_ENCODER.encode(body).byteLength;\n }\n let len = body.length;\n for (let i = len - 1; i >= 0; i--) {\n const code = body.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff)\n len++;\n else if (code > 0x7ff && code <= 0xffff)\n len += 2;\n if (code >= 0xdc00 && code <= 0xdfff)\n i--;\n }\n return len;\n }\n else if (typeof body.byteLength === \"number\") {\n return body.byteLength;\n }\n else if (typeof body.size === \"number\") {\n return body.size;\n }\n throw new Error(`Body Length computation failed for ${body}`);\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","export const toUtf8 = (input) => {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n }\n return new TextDecoder(\"utf-8\").decode(input);\n};\n","const q = \"required\", r = \"fn\", s = \"argv\", t = \"ref\";\nconst a = \"isSet\", b = \"tree\", c = \"error\", d = \"endpoint\", e = \"PartitionResult\", f = { [q]: false, \"type\": \"String\" }, g = { [q]: true, \"default\": false, \"type\": \"Boolean\" }, h = { [t]: \"Endpoint\" }, i = { [r]: \"booleanEquals\", [s]: [{ [t]: \"UseFIPS\" }, true] }, j = { [r]: \"booleanEquals\", [s]: [{ [t]: \"UseDualStack\" }, true] }, k = {}, l = { [r]: \"booleanEquals\", [s]: [true, { [r]: \"getAttr\", [s]: [{ [t]: e }, \"supportsFIPS\"] }] }, m = { [r]: \"booleanEquals\", [s]: [true, { [r]: \"getAttr\", [s]: [{ [t]: e }, \"supportsDualStack\"] }] }, n = [i], o = [j], p = [{ [t]: \"Region\" }];\nconst _data = { version: \"1.0\", parameters: { Region: f, UseDualStack: g, UseFIPS: g, Endpoint: f }, rules: [{ conditions: [{ [r]: a, [s]: [h] }], type: b, rules: [{ conditions: n, error: \"Invalid Configuration: FIPS and custom endpoint are not supported\", type: c }, { type: b, rules: [{ conditions: o, error: \"Invalid Configuration: Dualstack and custom endpoint are not supported\", type: c }, { endpoint: { url: h, properties: k, headers: k }, type: d }] }] }, { type: b, rules: [{ conditions: [{ [r]: a, [s]: p }], type: b, rules: [{ conditions: [{ [r]: \"aws.partition\", [s]: p, assign: e }], type: b, rules: [{ conditions: [i, j], type: b, rules: [{ conditions: [l, m], type: b, rules: [{ type: b, rules: [{ endpoint: { url: \"https://streaming-rekognition-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: k, headers: k }, type: d }] }] }, { error: \"FIPS and DualStack are enabled, but this partition does not support one or both\", type: c }] }, { conditions: n, type: b, rules: [{ conditions: [l], type: b, rules: [{ type: b, rules: [{ endpoint: { url: \"https://streaming-rekognition-fips.{Region}.{PartitionResult#dnsSuffix}\", properties: k, headers: k }, type: d }] }] }, { error: \"FIPS is enabled but this partition does not support FIPS\", type: c }] }, { conditions: o, type: b, rules: [{ conditions: [m], type: b, rules: [{ type: b, rules: [{ endpoint: { url: \"https://streaming-rekognition.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: k, headers: k }, type: d }] }] }, { error: \"DualStack is enabled but this partition does not support DualStack\", type: c }] }, { type: b, rules: [{ endpoint: { url: \"https://streaming-rekognition.{Region}.{PartitionResult#dnsSuffix}\", properties: k, headers: k }, type: d }] }] }] }, { error: \"Invalid Configuration: Missing Region\", type: c }] }] };\nexport const ruleSet = _data;\n","import { awsEndpointFunctions } from \"@aws-sdk/util-endpoints\";\nimport { customEndpointFunctions, resolveEndpoint } from \"@smithy/util-endpoints\";\nimport { ruleSet } from \"./ruleset\";\nexport const defaultEndpointResolver = (endpointParams, context = {}) => {\n return resolveEndpoint(ruleSet, {\n endpointParams: endpointParams,\n logger: context.logger,\n });\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","import { NoOpLogger } from \"@smithy/smithy-client\";\nimport { parseUrl } from \"@smithy/url-parser\";\nimport { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { defaultEndpointResolver } from \"./endpoint/endpointResolver\";\nexport const getRuntimeConfig = (config) => {\n return {\n apiVersion: \"2022-05-30\",\n base64Decoder: config?.base64Decoder ?? fromBase64,\n base64Encoder: config?.base64Encoder ?? toBase64,\n disableHostPrefix: config?.disableHostPrefix ?? false,\n endpointProvider: config?.endpointProvider ?? defaultEndpointResolver,\n extensions: config?.extensions ?? [],\n logger: config?.logger ?? new NoOpLogger(),\n serviceId: config?.serviceId ?? \"RekognitionStreaming\",\n urlParser: config?.urlParser ?? parseUrl,\n utf8Decoder: config?.utf8Decoder ?? fromUtf8,\n utf8Encoder: config?.utf8Encoder ?? toUtf8,\n };\n};\n","export const DEFAULTS_MODE_OPTIONS = [\"in-region\", \"cross-region\", \"mobile\", \"standard\", \"legacy\"];\n","import { memoize } from \"@smithy/property-provider\";\nimport bowser from \"bowser\";\nimport { DEFAULTS_MODE_OPTIONS } from \"./constants\";\nexport const resolveDefaultsModeConfig = ({ defaultsMode, } = {}) => memoize(async () => {\n const mode = typeof defaultsMode === \"function\" ? await defaultsMode() : defaultsMode;\n switch (mode?.toLowerCase()) {\n case \"auto\":\n return Promise.resolve(isMobileBrowser() ? \"mobile\" : \"standard\");\n case \"mobile\":\n case \"in-region\":\n case \"cross-region\":\n case \"standard\":\n case \"legacy\":\n return Promise.resolve(mode?.toLocaleLowerCase());\n case undefined:\n return Promise.resolve(\"legacy\");\n default:\n throw new Error(`Invalid parameter for \"defaultsMode\", expect ${DEFAULTS_MODE_OPTIONS.join(\", \")}, got ${mode}`);\n }\n});\nconst isMobileBrowser = () => {\n const parsedUA = typeof window !== \"undefined\" && window?.navigator?.userAgent\n ? bowser.parse(window.navigator.userAgent)\n : undefined;\n const platform = parsedUA?.platform?.type;\n return platform === \"tablet\" || platform === \"mobile\";\n};\n","import packageInfo from \"../package.json\";\nimport { Sha256 } from \"@aws-crypto/sha256-browser\";\nimport { WebSocketFetchHandler as WebSocketRequestHandler, eventStreamPayloadHandlerProvider, } from \"@aws-sdk/middleware-websocket\";\nimport { defaultUserAgent } from \"@aws-sdk/util-user-agent-browser\";\nimport { DEFAULT_USE_DUALSTACK_ENDPOINT, DEFAULT_USE_FIPS_ENDPOINT } from \"@smithy/config-resolver\";\nimport { eventStreamSerdeProvider } from \"@smithy/eventstream-serde-browser\";\nimport { FetchHttpHandler as HttpRequestHandler, streamCollector } from \"@smithy/fetch-http-handler\";\nimport { invalidProvider } from \"@smithy/invalid-dependency\";\nimport { calculateBodyLength } from \"@smithy/util-body-length-browser\";\nimport { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE } from \"@smithy/util-retry\";\nimport { getRuntimeConfig as getSharedRuntimeConfig } from \"./runtimeConfig.shared\";\nimport { loadConfigsForDefaultMode } from \"@smithy/smithy-client\";\nimport { resolveDefaultsModeConfig } from \"@smithy/util-defaults-mode-browser\";\nexport const getRuntimeConfig = (config) => {\n const defaultsMode = resolveDefaultsModeConfig(config);\n const defaultConfigProvider = () => defaultsMode().then(loadConfigsForDefaultMode);\n const clientSharedValues = getSharedRuntimeConfig(config);\n return {\n ...clientSharedValues,\n ...config,\n runtime: \"browser\",\n defaultsMode,\n bodyLengthChecker: config?.bodyLengthChecker ?? calculateBodyLength,\n credentialDefaultProvider: config?.credentialDefaultProvider ?? ((_) => () => Promise.reject(new Error(\"Credential is missing\"))),\n defaultUserAgentProvider: config?.defaultUserAgentProvider ??\n defaultUserAgent({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),\n eventStreamPayloadHandlerProvider: config?.eventStreamPayloadHandlerProvider ?? eventStreamPayloadHandlerProvider,\n eventStreamSerdeProvider: config?.eventStreamSerdeProvider ?? eventStreamSerdeProvider,\n maxAttempts: config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n region: config?.region ?? invalidProvider(\"Region is missing\"),\n requestHandler: WebSocketRequestHandler.create(config?.requestHandler ?? defaultConfigProvider, HttpRequestHandler.create(defaultConfigProvider)),\n retryMode: config?.retryMode ?? (async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE),\n sha256: config?.sha256 ?? Sha256,\n streamCollector: config?.streamCollector ?? streamCollector,\n useDualstackEndpoint: config?.useDualstackEndpoint ?? (() => Promise.resolve(DEFAULT_USE_DUALSTACK_ENDPOINT)),\n useFipsEndpoint: config?.useFipsEndpoint ?? (() => Promise.resolve(DEFAULT_USE_FIPS_ENDPOINT)),\n };\n};\n","export const getAwsRegionExtensionConfiguration = (runtimeConfig) => {\n let runtimeConfigRegion = async () => {\n if (runtimeConfig.region === undefined) {\n throw new Error(\"Region is missing from runtimeConfig\");\n }\n const region = runtimeConfig.region;\n if (typeof region === \"string\") {\n return region;\n }\n return region();\n };\n return {\n setRegion(region) {\n runtimeConfigRegion = region;\n },\n region() {\n return runtimeConfigRegion;\n },\n };\n};\nexport const resolveAwsRegionExtensionConfiguration = (awsRegionExtensionConfiguration) => {\n return {\n region: awsRegionExtensionConfiguration.region(),\n };\n};\n","import { getAwsRegionExtensionConfiguration, resolveAwsRegionExtensionConfiguration, } from \"@aws-sdk/region-config-resolver\";\nimport { getHttpHandlerExtensionConfiguration, resolveHttpHandlerRuntimeConfig } from \"@smithy/protocol-http\";\nimport { getDefaultExtensionConfiguration, resolveDefaultRuntimeConfig } from \"@smithy/smithy-client\";\nconst asPartial = (t) => t;\nexport const resolveRuntimeExtensions = (runtimeConfig, extensions) => {\n const extensionConfiguration = {\n ...asPartial(getAwsRegionExtensionConfiguration(runtimeConfig)),\n ...asPartial(getDefaultExtensionConfiguration(runtimeConfig)),\n ...asPartial(getHttpHandlerExtensionConfiguration(runtimeConfig)),\n };\n extensions.forEach((extension) => extension.configure(extensionConfiguration));\n return {\n ...runtimeConfig,\n ...resolveAwsRegionExtensionConfiguration(extensionConfiguration),\n ...resolveDefaultRuntimeConfig(extensionConfiguration),\n ...resolveHttpHandlerRuntimeConfig(extensionConfiguration),\n };\n};\n","import { resolveEventStreamConfig, } from \"@aws-sdk/middleware-eventstream\";\nimport { getHostHeaderPlugin, resolveHostHeaderConfig, } from \"@aws-sdk/middleware-host-header\";\nimport { getLoggerPlugin } from \"@aws-sdk/middleware-logger\";\nimport { getRecursionDetectionPlugin } from \"@aws-sdk/middleware-recursion-detection\";\nimport { getAwsAuthPlugin, resolveAwsAuthConfig, } from \"@aws-sdk/middleware-signing\";\nimport { getUserAgentPlugin, resolveUserAgentConfig, } from \"@aws-sdk/middleware-user-agent\";\nimport { resolveWebSocketConfig } from \"@aws-sdk/middleware-websocket\";\nimport { resolveRegionConfig } from \"@smithy/config-resolver\";\nimport { resolveEventStreamSerdeConfig, } from \"@smithy/eventstream-serde-config-resolver\";\nimport { getContentLengthPlugin } from \"@smithy/middleware-content-length\";\nimport { resolveEndpointConfig } from \"@smithy/middleware-endpoint\";\nimport { getRetryPlugin, resolveRetryConfig } from \"@smithy/middleware-retry\";\nimport { Client as __Client, } from \"@smithy/smithy-client\";\nimport { resolveClientEndpointParameters, } from \"./endpoint/EndpointParameters\";\nimport { getRuntimeConfig as __getRuntimeConfig } from \"./runtimeConfig\";\nimport { resolveRuntimeExtensions } from \"./runtimeExtensions\";\nexport { __Client };\nexport class RekognitionStreamingClient extends __Client {\n constructor(...[configuration]) {\n const _config_0 = __getRuntimeConfig(configuration || {});\n const _config_1 = resolveClientEndpointParameters(_config_0);\n const _config_2 = resolveRegionConfig(_config_1);\n const _config_3 = resolveEndpointConfig(_config_2);\n const _config_4 = resolveHostHeaderConfig(_config_3);\n const _config_5 = resolveAwsAuthConfig(_config_4);\n const _config_6 = resolveEventStreamConfig(_config_5);\n const _config_7 = resolveWebSocketConfig(_config_6);\n const _config_8 = resolveUserAgentConfig(_config_7);\n const _config_9 = resolveRetryConfig(_config_8);\n const _config_10 = resolveEventStreamSerdeConfig(_config_9);\n const _config_11 = resolveRuntimeExtensions(_config_10, configuration?.extensions || []);\n super(_config_11);\n this.config = _config_11;\n this.middlewareStack.use(getHostHeaderPlugin(this.config));\n this.middlewareStack.use(getLoggerPlugin(this.config));\n this.middlewareStack.use(getRecursionDetectionPlugin(this.config));\n this.middlewareStack.use(getAwsAuthPlugin(this.config));\n this.middlewareStack.use(getUserAgentPlugin(this.config));\n this.middlewareStack.use(getRetryPlugin(this.config));\n this.middlewareStack.use(getContentLengthPlugin(this.config));\n }\n destroy() {\n super.destroy();\n }\n}\n","import { ServiceException as __ServiceException, } from \"@smithy/smithy-client\";\nexport { __ServiceException };\nexport class RekognitionStreamingServiceException extends __ServiceException {\n constructor(options) {\n super(options);\n Object.setPrototypeOf(this, RekognitionStreamingServiceException.prototype);\n }\n}\n","import { RekognitionStreamingServiceException as __BaseException } from \"./RekognitionStreamingServiceException\";\nexport class AccessDeniedException extends __BaseException {\n constructor(opts) {\n super({\n name: \"AccessDeniedException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"AccessDeniedException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, AccessDeniedException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport var ClientChallenge;\n(function (ClientChallenge) {\n ClientChallenge.visit = (value, visitor) => {\n if (value.FaceMovementAndLightChallenge !== undefined)\n return visitor.FaceMovementAndLightChallenge(value.FaceMovementAndLightChallenge);\n return visitor._(value.$unknown[0], value.$unknown[1]);\n };\n})(ClientChallenge || (ClientChallenge = {}));\nexport const LightChallengeType = {\n SEQUENTIAL: \"SEQUENTIAL\",\n};\nexport class InternalServerException extends __BaseException {\n constructor(opts) {\n super({\n name: \"InternalServerException\",\n $fault: \"server\",\n ...opts,\n });\n this.name = \"InternalServerException\";\n this.$fault = \"server\";\n Object.setPrototypeOf(this, InternalServerException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport var LivenessRequestStream;\n(function (LivenessRequestStream) {\n LivenessRequestStream.visit = (value, visitor) => {\n if (value.VideoEvent !== undefined)\n return visitor.VideoEvent(value.VideoEvent);\n if (value.ClientSessionInformationEvent !== undefined)\n return visitor.ClientSessionInformationEvent(value.ClientSessionInformationEvent);\n return visitor._(value.$unknown[0], value.$unknown[1]);\n };\n})(LivenessRequestStream || (LivenessRequestStream = {}));\nexport var ServerChallenge;\n(function (ServerChallenge) {\n ServerChallenge.visit = (value, visitor) => {\n if (value.FaceMovementAndLightChallenge !== undefined)\n return visitor.FaceMovementAndLightChallenge(value.FaceMovementAndLightChallenge);\n return visitor._(value.$unknown[0], value.$unknown[1]);\n };\n})(ServerChallenge || (ServerChallenge = {}));\nexport class ServiceQuotaExceededException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ServiceQuotaExceededException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ServiceQuotaExceededException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ServiceQuotaExceededException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport class ServiceUnavailableException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ServiceUnavailableException\",\n $fault: \"server\",\n ...opts,\n });\n this.name = \"ServiceUnavailableException\";\n this.$fault = \"server\";\n Object.setPrototypeOf(this, ServiceUnavailableException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport class ThrottlingException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ThrottlingException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ThrottlingException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ThrottlingException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport class ValidationException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ValidationException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ValidationException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ValidationException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport var LivenessResponseStream;\n(function (LivenessResponseStream) {\n LivenessResponseStream.visit = (value, visitor) => {\n if (value.ServerSessionInformationEvent !== undefined)\n return visitor.ServerSessionInformationEvent(value.ServerSessionInformationEvent);\n if (value.DisconnectionEvent !== undefined)\n return visitor.DisconnectionEvent(value.DisconnectionEvent);\n if (value.ValidationException !== undefined)\n return visitor.ValidationException(value.ValidationException);\n if (value.InternalServerException !== undefined)\n return visitor.InternalServerException(value.InternalServerException);\n if (value.ThrottlingException !== undefined)\n return visitor.ThrottlingException(value.ThrottlingException);\n if (value.ServiceQuotaExceededException !== undefined)\n return visitor.ServiceQuotaExceededException(value.ServiceQuotaExceededException);\n if (value.ServiceUnavailableException !== undefined)\n return visitor.ServiceUnavailableException(value.ServiceUnavailableException);\n return visitor._(value.$unknown[0], value.$unknown[1]);\n };\n})(LivenessResponseStream || (LivenessResponseStream = {}));\nexport class SessionNotFoundException extends __BaseException {\n constructor(opts) {\n super({\n name: \"SessionNotFoundException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"SessionNotFoundException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, SessionNotFoundException.prototype);\n this.Message = opts.Message;\n this.Code = opts.Code;\n }\n}\nexport const LivenessRequestStreamFilterSensitiveLog = (obj) => {\n if (obj.VideoEvent !== undefined)\n return { VideoEvent: obj.VideoEvent };\n if (obj.ClientSessionInformationEvent !== undefined)\n return { ClientSessionInformationEvent: obj.ClientSessionInformationEvent };\n if (obj.$unknown !== undefined)\n return { [obj.$unknown[0]]: \"UNKNOWN\" };\n};\nexport const LivenessResponseStreamFilterSensitiveLog = (obj) => {\n if (obj.ServerSessionInformationEvent !== undefined)\n return { ServerSessionInformationEvent: obj.ServerSessionInformationEvent };\n if (obj.DisconnectionEvent !== undefined)\n return { DisconnectionEvent: obj.DisconnectionEvent };\n if (obj.ValidationException !== undefined)\n return { ValidationException: obj.ValidationException };\n if (obj.InternalServerException !== undefined)\n return { InternalServerException: obj.InternalServerException };\n if (obj.ThrottlingException !== undefined)\n return { ThrottlingException: obj.ThrottlingException };\n if (obj.ServiceQuotaExceededException !== undefined)\n return { ServiceQuotaExceededException: obj.ServiceQuotaExceededException };\n if (obj.ServiceUnavailableException !== undefined)\n return { ServiceUnavailableException: obj.ServiceUnavailableException };\n if (obj.$unknown !== undefined)\n return { [obj.$unknown[0]]: \"UNKNOWN\" };\n};\nexport const StartFaceLivenessSessionRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.LivenessRequestStream && { LivenessRequestStream: \"STREAMING_CONTENT\" }),\n});\nexport const StartFaceLivenessSessionResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.LivenessResponseStream && { LivenessResponseStream: \"STREAMING_CONTENT\" }),\n});\n","import { expectUnion } from \"@smithy/smithy-client\";\nexport const awsExpectUnion = (value) => {\n if (value == null) {\n return undefined;\n }\n if (typeof value === \"object\" && \"__type\" in value) {\n delete value.__type;\n }\n return expectUnion(value);\n};\n","import { collectBody } from \"@smithy/smithy-client\";\nexport const collectBodyString = (streamBody, context) => collectBody(streamBody, context).then((body) => context.utf8Encoder(body));\n","import { collectBodyString } from \"../common\";\nexport const parseJsonBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {\n if (encoded.length) {\n try {\n return JSON.parse(encoded);\n }\n catch (e) {\n if (e?.name === \"SyntaxError\") {\n Object.defineProperty(e, \"$responseBodyText\", {\n value: encoded,\n });\n }\n throw e;\n }\n }\n return {};\n});\nexport const parseJsonErrorBody = async (errorBody, context) => {\n const value = await parseJsonBody(errorBody, context);\n value.message = value.message ?? value.Message;\n return value;\n};\nexport const loadRestJsonErrorCode = (output, data) => {\n const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());\n const sanitizeErrorCode = (rawValue) => {\n let cleanValue = rawValue;\n if (typeof cleanValue === \"number\") {\n cleanValue = cleanValue.toString();\n }\n if (cleanValue.indexOf(\",\") >= 0) {\n cleanValue = cleanValue.split(\",\")[0];\n }\n if (cleanValue.indexOf(\":\") >= 0) {\n cleanValue = cleanValue.split(\":\")[0];\n }\n if (cleanValue.indexOf(\"#\") >= 0) {\n cleanValue = cleanValue.split(\"#\")[1];\n }\n return cleanValue;\n };\n const headerKey = findKey(output.headers, \"x-amzn-errortype\");\n if (headerKey !== undefined) {\n return sanitizeErrorCode(output.headers[headerKey]);\n }\n if (data.code !== undefined) {\n return sanitizeErrorCode(data.code);\n }\n if (data[\"__type\"] !== undefined) {\n return sanitizeErrorCode(data[\"__type\"]);\n }\n};\n","import { awsExpectUnion as __expectUnion, loadRestJsonErrorCode, parseJsonBody as parseBody, parseJsonErrorBody as parseErrorBody, } from \"@aws-sdk/core\";\nimport { requestBuilder as rb } from \"@smithy/core\";\nimport { _json, collectBody, decorateServiceException as __decorateServiceException, expectInt32 as __expectInt32, expectString as __expectString, limitedParseFloat32 as __limitedParseFloat32, map, serializeFloat as __serializeFloat, take, withBaseException, } from \"@smithy/smithy-client\";\nimport { AccessDeniedException, ClientChallenge, InternalServerException, LivenessRequestStream, ServiceQuotaExceededException, ServiceUnavailableException, SessionNotFoundException, ThrottlingException, ValidationException, } from \"../models/models_0\";\nimport { RekognitionStreamingServiceException as __BaseException } from \"../models/RekognitionStreamingServiceException\";\nexport const se_StartFaceLivenessSessionCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xarslsi]: input[_SI],\n [_xarslvw]: input[_VW],\n [_xarslvh]: input[_VH],\n [_xarslcv]: input[_CV],\n });\n b.bp(\"/start-face-liveness-session\");\n let body;\n if (input.LivenessRequestStream !== undefined) {\n body = se_LivenessRequestStream(input.LivenessRequestStream, context);\n }\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const de_StartFaceLivenessSessionCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_CommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n [_SI]: [, output.headers[_xarslsi]],\n });\n const data = output.body;\n contents.LivenessResponseStream = de_LivenessResponseStream(data, context);\n return contents;\n};\nconst de_CommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"AccessDeniedException\":\n case \"com.amazonaws.rekognitionstreaming#AccessDeniedException\":\n throw await de_AccessDeniedExceptionRes(parsedOutput, context);\n case \"InternalServerException\":\n case \"com.amazonaws.rekognitionstreaming#InternalServerException\":\n throw await de_InternalServerExceptionRes(parsedOutput, context);\n case \"ServiceQuotaExceededException\":\n case \"com.amazonaws.rekognitionstreaming#ServiceQuotaExceededException\":\n throw await de_ServiceQuotaExceededExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.rekognitionstreaming#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"SessionNotFoundException\":\n case \"com.amazonaws.rekognitionstreaming#SessionNotFoundException\":\n throw await de_SessionNotFoundExceptionRes(parsedOutput, context);\n case \"ThrottlingException\":\n case \"com.amazonaws.rekognitionstreaming#ThrottlingException\":\n throw await de_ThrottlingExceptionRes(parsedOutput, context);\n case \"ValidationException\":\n case \"com.amazonaws.rekognitionstreaming#ValidationException\":\n throw await de_ValidationExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nconst throwDefaultError = withBaseException(__BaseException);\nconst de_AccessDeniedExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new AccessDeniedException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_InternalServerExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new InternalServerException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ServiceQuotaExceededExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ServiceQuotaExceededException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ServiceUnavailableExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ServiceUnavailableException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_SessionNotFoundExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new SessionNotFoundException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ThrottlingExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ThrottlingException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ValidationExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ValidationException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst se_LivenessRequestStream = (input, context) => {\n const eventMarshallingVisitor = (event) => LivenessRequestStream.visit(event, {\n VideoEvent: (value) => se_VideoEvent_event(value, context),\n ClientSessionInformationEvent: (value) => se_ClientSessionInformationEvent_event(value, context),\n _: (value) => value,\n });\n return context.eventStreamMarshaller.serialize(input, eventMarshallingVisitor);\n};\nconst se_ClientSessionInformationEvent_event = (input, context) => {\n const headers = {\n \":event-type\": { type: \"string\", value: \"ClientSessionInformationEvent\" },\n \":message-type\": { type: \"string\", value: \"event\" },\n \":content-type\": { type: \"string\", value: \"application/json\" },\n };\n let body = new Uint8Array();\n body = se_ClientSessionInformationEvent(input, context);\n body = context.utf8Decoder(JSON.stringify(body));\n return { headers, body };\n};\nconst se_VideoEvent_event = (input, context) => {\n const headers = {\n \":event-type\": { type: \"string\", value: \"VideoEvent\" },\n \":message-type\": { type: \"string\", value: \"event\" },\n \":content-type\": { type: \"string\", value: \"application/json\" },\n };\n let body = new Uint8Array();\n body = se_VideoEvent(input, context);\n body = context.utf8Decoder(JSON.stringify(body));\n return { headers, body };\n};\nconst de_LivenessResponseStream = (output, context) => {\n return context.eventStreamMarshaller.deserialize(output, async (event) => {\n if (event[\"ServerSessionInformationEvent\"] != null) {\n return {\n ServerSessionInformationEvent: await de_ServerSessionInformationEvent_event(event[\"ServerSessionInformationEvent\"], context),\n };\n }\n if (event[\"DisconnectionEvent\"] != null) {\n return {\n DisconnectionEvent: await de_DisconnectionEvent_event(event[\"DisconnectionEvent\"], context),\n };\n }\n if (event[\"ValidationException\"] != null) {\n return {\n ValidationException: await de_ValidationException_event(event[\"ValidationException\"], context),\n };\n }\n if (event[\"InternalServerException\"] != null) {\n return {\n InternalServerException: await de_InternalServerException_event(event[\"InternalServerException\"], context),\n };\n }\n if (event[\"ThrottlingException\"] != null) {\n return {\n ThrottlingException: await de_ThrottlingException_event(event[\"ThrottlingException\"], context),\n };\n }\n if (event[\"ServiceQuotaExceededException\"] != null) {\n return {\n ServiceQuotaExceededException: await de_ServiceQuotaExceededException_event(event[\"ServiceQuotaExceededException\"], context),\n };\n }\n if (event[\"ServiceUnavailableException\"] != null) {\n return {\n ServiceUnavailableException: await de_ServiceUnavailableException_event(event[\"ServiceUnavailableException\"], context),\n };\n }\n return { $unknown: output };\n });\n};\nconst de_DisconnectionEvent_event = async (output, context) => {\n const contents = {};\n const data = await parseBody(output.body, context);\n Object.assign(contents, _json(data));\n return contents;\n};\nconst de_InternalServerException_event = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseBody(output.body, context),\n };\n return de_InternalServerExceptionRes(parsedOutput, context);\n};\nconst de_ServerSessionInformationEvent_event = async (output, context) => {\n const contents = {};\n const data = await parseBody(output.body, context);\n Object.assign(contents, de_ServerSessionInformationEvent(data, context));\n return contents;\n};\nconst de_ServiceQuotaExceededException_event = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseBody(output.body, context),\n };\n return de_ServiceQuotaExceededExceptionRes(parsedOutput, context);\n};\nconst de_ServiceUnavailableException_event = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseBody(output.body, context),\n };\n return de_ServiceUnavailableExceptionRes(parsedOutput, context);\n};\nconst de_ThrottlingException_event = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseBody(output.body, context),\n };\n return de_ThrottlingExceptionRes(parsedOutput, context);\n};\nconst de_ValidationException_event = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseBody(output.body, context),\n };\n return de_ValidationExceptionRes(parsedOutput, context);\n};\nconst se_BoundingBox = (input, context) => {\n return take(input, {\n Height: __serializeFloat,\n Left: __serializeFloat,\n Top: __serializeFloat,\n Width: __serializeFloat,\n });\n};\nconst se_ClientChallenge = (input, context) => {\n return ClientChallenge.visit(input, {\n FaceMovementAndLightChallenge: (value) => ({\n FaceMovementAndLightChallenge: se_FaceMovementAndLightClientChallenge(value, context),\n }),\n _: (name, value) => ({ name: value }),\n });\n};\nconst se_ClientSessionInformationEvent = (input, context) => {\n return take(input, {\n Challenge: (_) => se_ClientChallenge(_, context),\n });\n};\nconst se_FaceMovementAndLightClientChallenge = (input, context) => {\n return take(input, {\n ChallengeId: [],\n ColorDisplayed: _json,\n InitialFace: (_) => se_InitialFace(_, context),\n TargetFace: (_) => se_TargetFace(_, context),\n VideoEndTimestamp: [],\n VideoStartTimestamp: [],\n });\n};\nconst se_InitialFace = (input, context) => {\n return take(input, {\n BoundingBox: (_) => se_BoundingBox(_, context),\n InitialFaceDetectedTimestamp: [],\n });\n};\nconst se_TargetFace = (input, context) => {\n return take(input, {\n BoundingBox: (_) => se_BoundingBox(_, context),\n FaceDetectedInTargetPositionEndTimestamp: [],\n FaceDetectedInTargetPositionStartTimestamp: [],\n });\n};\nconst se_VideoEvent = (input, context) => {\n return take(input, {\n TimestampMillis: [],\n VideoChunk: context.base64Encoder,\n });\n};\nconst de_ChallengeConfig = (output, context) => {\n return take(output, {\n BlazeFaceDetectionThreshold: __limitedParseFloat32,\n FaceDistanceThreshold: __limitedParseFloat32,\n FaceDistanceThresholdMax: __limitedParseFloat32,\n FaceDistanceThresholdMin: __limitedParseFloat32,\n FaceIouHeightThreshold: __limitedParseFloat32,\n FaceIouWidthThreshold: __limitedParseFloat32,\n OvalFitTimeout: __expectInt32,\n OvalHeightWidthRatio: __limitedParseFloat32,\n OvalIouHeightThreshold: __limitedParseFloat32,\n OvalIouThreshold: __limitedParseFloat32,\n OvalIouWidthThreshold: __limitedParseFloat32,\n });\n};\nconst de_ColorSequence = (output, context) => {\n return take(output, {\n DownscrollDuration: __limitedParseFloat32,\n FlatDisplayDuration: __limitedParseFloat32,\n FreshnessColor: _json,\n });\n};\nconst de_ColorSequences = (output, context) => {\n const retVal = (output || [])\n .filter((e) => e != null)\n .map((entry) => {\n return de_ColorSequence(entry, context);\n });\n return retVal;\n};\nconst de_FaceMovementAndLightServerChallenge = (output, context) => {\n return take(output, {\n ChallengeConfig: (_) => de_ChallengeConfig(_, context),\n ColorSequences: (_) => de_ColorSequences(_, context),\n LightChallengeType: __expectString,\n OvalParameters: (_) => de_OvalParameters(_, context),\n });\n};\nconst de_OvalParameters = (output, context) => {\n return take(output, {\n CenterX: __limitedParseFloat32,\n CenterY: __limitedParseFloat32,\n Height: __limitedParseFloat32,\n Width: __limitedParseFloat32,\n });\n};\nconst de_ServerChallenge = (output, context) => {\n if (output.FaceMovementAndLightChallenge != null) {\n return {\n FaceMovementAndLightChallenge: de_FaceMovementAndLightServerChallenge(output.FaceMovementAndLightChallenge, context),\n };\n }\n return { $unknown: Object.entries(output)[0] };\n};\nconst de_ServerSessionInformationEvent = (output, context) => {\n return take(output, {\n SessionInformation: (_) => de_SessionInformation(_, context),\n });\n};\nconst de_SessionInformation = (output, context) => {\n return take(output, {\n Challenge: (_) => de_ServerChallenge(__expectUnion(_), context),\n });\n};\nconst deserializeMetadata = (output) => ({\n httpStatusCode: output.statusCode,\n requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n extendedRequestId: output.headers[\"x-amz-id-2\"],\n cfId: output.headers[\"x-amz-cf-id\"],\n});\nconst collectBodyString = (streamBody, context) => collectBody(streamBody, context).then((body) => context.utf8Encoder(body));\nconst isSerializableHeaderValue = (value) => value !== undefined &&\n value !== null &&\n value !== \"\" &&\n (!Object.getOwnPropertyNames(value).includes(\"length\") || value.length != 0) &&\n (!Object.getOwnPropertyNames(value).includes(\"size\") || value.size != 0);\nconst _CV = \"ChallengeVersions\";\nconst _SI = \"SessionId\";\nconst _VH = \"VideoHeight\";\nconst _VW = \"VideoWidth\";\nconst _xarslcv = \"x-amz-rekognition-streaming-liveness-challenge-versions\";\nconst _xarslsi = \"x-amz-rekognition-streaming-liveness-session-id\";\nconst _xarslvh = \"x-amz-rekognition-streaming-liveness-video-height\";\nconst _xarslvw = \"x-amz-rekognition-streaming-liveness-video-width\";\n","import { getEventStreamPlugin } from \"@aws-sdk/middleware-eventstream\";\nimport { getWebSocketPlugin } from \"@aws-sdk/middleware-websocket\";\nimport { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { StartFaceLivenessSessionRequestFilterSensitiveLog, StartFaceLivenessSessionResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_StartFaceLivenessSessionCommand, se_StartFaceLivenessSessionCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class StartFaceLivenessSessionCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n getEventStreamPlugin(config),\n getWebSocketPlugin(config, { headerPrefix: \"x-amz-rekognition-streaming-liveness-\" }),\n ];\n})\n .s(\"RekognitionStreamingService\", \"StartFaceLivenessSession\", {\n eventStream: {\n input: true,\n output: true,\n },\n})\n .n(\"RekognitionStreamingClient\", \"StartFaceLivenessSessionCommand\")\n .f(StartFaceLivenessSessionRequestFilterSensitiveLog, StartFaceLivenessSessionResponseFilterSensitiveLog)\n .ser(se_StartFaceLivenessSessionCommand)\n .de(de_StartFaceLivenessSessionCommand)\n .build() {\n}\n","function isNewerIpad() {\n // iPads on iOS13+ return as if a desktop Mac\n // so check for maxTouchPoints also.\n return (/Macintosh/i.test(navigator.userAgent) &&\n !!navigator.maxTouchPoints &&\n navigator.maxTouchPoints > 1);\n}\nfunction isMobileScreen() {\n const isMobileDevice = \n // Test Android/iPhone/iPad\n /Android|iPhone|iPad/i.test(navigator.userAgent) || isNewerIpad();\n return isMobileDevice;\n}\n/**\n * Use window.matchMedia to direct landscape orientation\n * screen.orientation is not supported in Safari so we will use\n * media query detection to listen for changes instead.\n * @returns MediaQueryList object\n */\nfunction getLandscapeMediaQuery() {\n return window.matchMedia('(orientation: landscape)');\n}\n// minor version 146+ is confirmed to have the fix https://issues.chromium.org/issues/343199623#comment34\nfunction isAndroidChromeWithBrokenH264() {\n const groups = /Chrome\\/125\\.[0-9]+\\.[0-9]+\\.([0-9]+)/i.exec(navigator.userAgent);\n if (!groups) {\n return false;\n }\n const minorVersion = groups[1];\n return (/Android/i.test(navigator.userAgent) &&\n /Chrome\\/125/i.test(navigator.userAgent) &&\n parseInt(minorVersion) < 146);\n}\n\nexport { getLandscapeMediaQuery, isAndroidChromeWithBrokenH264, isMobileScreen };\n","import { isAndroidChromeWithBrokenH264 } from '../../utils/device.mjs';\n\n// Equivalent to 2 Kbps - needed for maintaining video quality at 60 FPS\nconst BITS_PER_SECOND = 2000000;\n// Only to be used with Chrome for the Android Chrome H264 Bug - https://issues.chromium.org/issues/343199623\nconst ALTERNATE_CHROME_MIME_TYPE = 'video/x-matroska;codecs=vp8';\n/**\n * Helper wrapper class over the native MediaRecorder.\n */\nclass VideoRecorder {\n constructor(stream) {\n if (typeof MediaRecorder === 'undefined') {\n throw Error('MediaRecorder is not supported by this browser');\n }\n this._stream = stream;\n this._chunks = [];\n this._recorder = new MediaRecorder(stream, {\n bitsPerSecond: BITS_PER_SECOND,\n mimeType: isAndroidChromeWithBrokenH264()\n ? ALTERNATE_CHROME_MIME_TYPE\n : undefined,\n });\n this._setupCallbacks();\n }\n getState() {\n return this._recorder.state;\n }\n start(timeSlice) {\n this.clearRecordedData();\n this.recordingStartApiTimestamp = Date.now();\n this._recorder.start(timeSlice);\n }\n async stop() {\n if (this.getState() === 'recording') {\n this._recorder.stop();\n }\n return this._recorderStopped;\n }\n pause() {\n this._recorder.pause();\n }\n clearRecordedData() {\n this._chunks = [];\n }\n dispatch(event) {\n this._recorder.dispatchEvent(event);\n }\n getVideoChunkSize() {\n return this._chunks.length;\n }\n _setupCallbacks() {\n // Creates a Readablestream of video chunks. Waits to receive a clientSessionInfo event before pushing\n // a livenessActionDocument to the ReadableStream and finally closing the ReadableStream\n this.videoStream = new ReadableStream({\n start: (controller) => {\n if (!this._recorder) {\n return;\n }\n this._recorder.ondataavailable = (e) => {\n if (e.data && e.data.size > 0) {\n if (this._chunks.length === 0) {\n this.firstChunkTimestamp = Date.now();\n }\n this._chunks.push(e.data);\n controller.enqueue(e.data);\n }\n };\n this._recorder.addEventListener('clientSesssionInfo', (e) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n controller.enqueue(e.data.clientInfo);\n });\n this._recorder.addEventListener('stopVideo', () => {\n controller.enqueue('stopVideo');\n });\n this._recorder.addEventListener('endStream', () => {\n controller.close();\n });\n this._recorder.addEventListener('endStreamWithCode', (e) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n controller.enqueue({\n type: 'endStreamWithCode',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n code: e.data.code,\n });\n });\n },\n });\n this.recorderStarted = new Promise((resolve) => {\n this._recorder.onstart = () => {\n this.recorderStartTimestamp = Date.now();\n resolve();\n };\n });\n this._recorderStopped = new Promise((resolve) => {\n this._recorder.onstop = () => {\n this.recorderEndTimestamp = Date.now();\n resolve();\n };\n });\n this._recorder.onerror = () => {\n if (this.getState() !== 'stopped') {\n this.stop();\n }\n };\n }\n}\n\nexport { VideoRecorder };\n","const VERSION = '3.3.5';\n\nexport { VERSION };\n","import { VERSION } from '../../../version.mjs';\n\nconst BASE_USER_AGENT = `ui-react-liveness/${VERSION}`;\nconst getLivenessUserAgent = () => {\n return BASE_USER_AGENT;\n};\n\nexport { getLivenessUserAgent };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const fromUtf8 = (input) => {\n const bytes = [];\n for (let i = 0, len = input.length; i < len; i++) {\n const value = input.charCodeAt(i);\n if (value < 0x80) {\n bytes.push(value);\n }\n else if (value < 0x800) {\n bytes.push((value >> 6) | 0b11000000, (value & 0b111111) | 0b10000000);\n }\n else if (i + 1 < input.length && (value & 0xfc00) === 0xd800 && (input.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n const surrogatePair = 0x10000 + ((value & 0b1111111111) << 10) + (input.charCodeAt(++i) & 0b1111111111);\n bytes.push((surrogatePair >> 18) | 0b11110000, ((surrogatePair >> 12) & 0b111111) | 0b10000000, ((surrogatePair >> 6) & 0b111111) | 0b10000000, (surrogatePair & 0b111111) | 0b10000000);\n }\n else {\n bytes.push((value >> 12) | 0b11100000, ((value >> 6) & 0b111111) | 0b10000000, (value & 0b111111) | 0b10000000);\n }\n }\n return Uint8Array.from(bytes);\n};\nexport const toUtf8 = (input) => {\n let decoded = \"\";\n for (let i = 0, len = input.length; i < len; i++) {\n const byte = input[i];\n if (byte < 0x80) {\n decoded += String.fromCharCode(byte);\n }\n else if (0b11000000 <= byte && byte < 0b11100000) {\n const nextByte = input[++i];\n decoded += String.fromCharCode(((byte & 0b11111) << 6) | (nextByte & 0b111111));\n }\n else if (0b11110000 <= byte && byte < 0b101101101) {\n const surrogatePair = [byte, input[++i], input[++i], input[++i]];\n const encoded = \"%\" + surrogatePair.map((byteValue) => byteValue.toString(16)).join(\"%\");\n decoded += decodeURIComponent(encoded);\n }\n else {\n decoded += String.fromCharCode(((byte & 0b1111) << 12) | ((input[++i] & 0b111111) << 6) | (input[++i] & 0b111111));\n }\n }\n return decoded;\n};\n","export function fromUtf8(input) {\n return new TextEncoder().encode(input);\n}\nexport function toUtf8(input) {\n return new TextDecoder(\"utf-8\").decode(input);\n}\n","import { fromUtf8 as jsFromUtf8, toUtf8 as jsToUtf8 } from \"./pureJs\";\nimport { fromUtf8 as textEncoderFromUtf8, toUtf8 as textEncoderToUtf8 } from \"./whatwgEncodingApi\";\nexport const fromUtf8 = (input) => typeof TextEncoder === \"function\" ? textEncoderFromUtf8(input) : jsFromUtf8(input);\nexport const toUtf8 = (input) => typeof TextDecoder === \"function\" ? textEncoderToUtf8(input) : jsToUtf8(input);\n","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToBuffer = void 0;\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : util_utf8_browser_1.fromUtf8;\nfunction convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\nexports.convertToBuffer = convertToBuffer;\n//# sourceMappingURL=convertToBuffer.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numToUint8 = void 0;\nfunction numToUint8(num) {\n return new Uint8Array([\n (num & 0xff000000) >> 24,\n (num & 0x00ff0000) >> 16,\n (num & 0x0000ff00) >> 8,\n num & 0x000000ff,\n ]);\n}\nexports.numToUint8 = numToUint8;\n//# sourceMappingURL=numToUint8.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = void 0;\n// IE 11 does not support Array.from, so we do it manually\nfunction uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\nexports.uint32ArrayFrom = uint32ArrayFrom;\n//# sourceMappingURL=uint32ArrayFrom.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;\nvar convertToBuffer_1 = require(\"./convertToBuffer\");\nObject.defineProperty(exports, \"convertToBuffer\", { enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nObject.defineProperty(exports, \"isEmptyData\", { enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } });\nvar numToUint8_1 = require(\"./numToUint8\");\nObject.defineProperty(exports, \"numToUint8\", { enumerable: true, get: function () { return numToUint8_1.numToUint8; } });\nvar uint32ArrayFrom_1 = require(\"./uint32ArrayFrom\");\nObject.defineProperty(exports, \"uint32ArrayFrom\", { enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar index_1 = require(\"./index\");\nvar AwsCrc32 = /** @class */ (function () {\n function AwsCrc32() {\n this.crc32 = new index_1.Crc32();\n }\n AwsCrc32.prototype.update = function (toHash) {\n if ((0, util_1.isEmptyData)(toHash))\n return;\n this.crc32.update((0, util_1.convertToBuffer)(toHash));\n };\n AwsCrc32.prototype.digest = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, (0, util_1.numToUint8)(this.crc32.digest())];\n });\n });\n };\n AwsCrc32.prototype.reset = function () {\n this.crc32 = new index_1.Crc32();\n };\n return AwsCrc32;\n}());\nexports.AwsCrc32 = AwsCrc32;\n//# sourceMappingURL=aws_crc32.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = exports.Crc32 = exports.crc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nfunction crc32(data) {\n return new Crc32().update(data).digest();\n}\nexports.crc32 = crc32;\nvar Crc32 = /** @class */ (function () {\n function Crc32() {\n this.checksum = 0xffffffff;\n }\n Crc32.prototype.update = function (data) {\n var e_1, _a;\n try {\n for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var byte = data_1_1.value;\n this.checksum =\n (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return this;\n };\n Crc32.prototype.digest = function () {\n return (this.checksum ^ 0xffffffff) >>> 0;\n };\n return Crc32;\n}());\nexports.Crc32 = Crc32;\n// prettier-ignore\nvar a_lookUpTable = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,\n];\nvar lookupTable = (0, util_1.uint32ArrayFrom)(a_lookUpTable);\nvar aws_crc32_1 = require(\"./aws_crc32\");\nObject.defineProperty(exports, \"AwsCrc32\", { enumerable: true, get: function () { return aws_crc32_1.AwsCrc32; } });\n//# sourceMappingURL=index.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { Int64 } from \"./Int64\";\nexport class HeaderMarshaller {\n constructor(toUtf8, fromUtf8) {\n this.toUtf8 = toUtf8;\n this.fromUtf8 = fromUtf8;\n }\n format(headers) {\n const chunks = [];\n for (const headerName of Object.keys(headers)) {\n const bytes = this.fromUtf8(headerName);\n chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n }\n const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n let position = 0;\n for (const chunk of chunks) {\n out.set(chunk, position);\n position += chunk.byteLength;\n }\n return out;\n }\n formatHeaderValue(header) {\n switch (header.type) {\n case \"boolean\":\n return Uint8Array.from([header.value ? 0 : 1]);\n case \"byte\":\n return Uint8Array.from([2, header.value]);\n case \"short\":\n const shortView = new DataView(new ArrayBuffer(3));\n shortView.setUint8(0, 3);\n shortView.setInt16(1, header.value, false);\n return new Uint8Array(shortView.buffer);\n case \"integer\":\n const intView = new DataView(new ArrayBuffer(5));\n intView.setUint8(0, 4);\n intView.setInt32(1, header.value, false);\n return new Uint8Array(intView.buffer);\n case \"long\":\n const longBytes = new Uint8Array(9);\n longBytes[0] = 5;\n longBytes.set(header.value.bytes, 1);\n return longBytes;\n case \"binary\":\n const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n binView.setUint8(0, 6);\n binView.setUint16(1, header.value.byteLength, false);\n const binBytes = new Uint8Array(binView.buffer);\n binBytes.set(header.value, 3);\n return binBytes;\n case \"string\":\n const utf8Bytes = this.fromUtf8(header.value);\n const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n strView.setUint8(0, 7);\n strView.setUint16(1, utf8Bytes.byteLength, false);\n const strBytes = new Uint8Array(strView.buffer);\n strBytes.set(utf8Bytes, 3);\n return strBytes;\n case \"timestamp\":\n const tsBytes = new Uint8Array(9);\n tsBytes[0] = 8;\n tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n return tsBytes;\n case \"uuid\":\n if (!UUID_PATTERN.test(header.value)) {\n throw new Error(`Invalid UUID received: ${header.value}`);\n }\n const uuidBytes = new Uint8Array(17);\n uuidBytes[0] = 9;\n uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n return uuidBytes;\n }\n }\n parse(headers) {\n const out = {};\n let position = 0;\n while (position < headers.byteLength) {\n const nameLength = headers.getUint8(position++);\n const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));\n position += nameLength;\n switch (headers.getUint8(position++)) {\n case 0:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true,\n };\n break;\n case 1:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false,\n };\n break;\n case 2:\n out[name] = {\n type: BYTE_TAG,\n value: headers.getInt8(position++),\n };\n break;\n case 3:\n out[name] = {\n type: SHORT_TAG,\n value: headers.getInt16(position, false),\n };\n position += 2;\n break;\n case 4:\n out[name] = {\n type: INT_TAG,\n value: headers.getInt32(position, false),\n };\n position += 4;\n break;\n case 5:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),\n };\n position += 8;\n break;\n case 6:\n const binaryLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),\n };\n position += binaryLength;\n break;\n case 7:\n const stringLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),\n };\n position += stringLength;\n break;\n case 8:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),\n };\n position += 8;\n break;\n case 9:\n const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: `${toHex(uuidBytes.subarray(0, 4))}-${toHex(uuidBytes.subarray(4, 6))}-${toHex(uuidBytes.subarray(6, 8))}-${toHex(uuidBytes.subarray(8, 10))}-${toHex(uuidBytes.subarray(10))}`,\n };\n break;\n default:\n throw new Error(`Unrecognized header type tag`);\n }\n }\n return out;\n }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst BOOLEAN_TAG = \"boolean\";\nconst BYTE_TAG = \"byte\";\nconst SHORT_TAG = \"short\";\nconst INT_TAG = \"integer\";\nconst LONG_TAG = \"long\";\nconst BINARY_TAG = \"binary\";\nconst STRING_TAG = \"string\";\nconst TIMESTAMP_TAG = \"timestamp\";\nconst UUID_TAG = \"uuid\";\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\n","export const readableStreamtoIterable = (readableStream) => ({\n [Symbol.asyncIterator]: async function* () {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n return;\n yield value;\n }\n }\n finally {\n reader.releaseLock();\n }\n },\n});\nexport const iterableToReadableStream = (asyncIterable) => {\n const iterator = asyncIterable[Symbol.asyncIterator]();\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await iterator.next();\n if (done) {\n return controller.close();\n }\n controller.enqueue(value);\n },\n });\n};\n","export var HttpAuthLocation;\n(function (HttpAuthLocation) {\n HttpAuthLocation[\"HEADER\"] = \"header\";\n HttpAuthLocation[\"QUERY\"] = \"query\";\n})(HttpAuthLocation || (HttpAuthLocation = {}));\n","export var HttpApiKeyAuthLocation;\n(function (HttpApiKeyAuthLocation) {\n HttpApiKeyAuthLocation[\"HEADER\"] = \"header\";\n HttpApiKeyAuthLocation[\"QUERY\"] = \"query\";\n})(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {}));\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n EndpointURLScheme[\"HTTP\"] = \"http\";\n EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n AlgorithmId[\"MD5\"] = \"md5\";\n AlgorithmId[\"CRC32\"] = \"crc32\";\n AlgorithmId[\"CRC32C\"] = \"crc32c\";\n AlgorithmId[\"SHA1\"] = \"sha1\";\n AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n if (runtimeConfig.sha256 !== undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.SHA256,\n checksumConstructor: () => runtimeConfig.sha256,\n });\n }\n if (runtimeConfig.md5 != undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.MD5,\n checksumConstructor: () => runtimeConfig.md5,\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export var FieldPosition;\n(function (FieldPosition) {\n FieldPosition[FieldPosition[\"HEADER\"] = 0] = \"HEADER\";\n FieldPosition[FieldPosition[\"TRAILER\"] = 1] = \"TRAILER\";\n})(FieldPosition || (FieldPosition = {}));\n","export var IniSectionType;\n(function (IniSectionType) {\n IniSectionType[\"PROFILE\"] = \"profile\";\n IniSectionType[\"SSO_SESSION\"] = \"sso-session\";\n IniSectionType[\"SERVICES\"] = \"services\";\n})(IniSectionType || (IniSectionType = {}));\n","export var RequestHandlerProtocol;\n(function (RequestHandlerProtocol) {\n RequestHandlerProtocol[\"HTTP_0_9\"] = \"http/0.9\";\n RequestHandlerProtocol[\"HTTP_1_0\"] = \"http/1.0\";\n RequestHandlerProtocol[\"TDS_8_0\"] = \"tds/8.0\";\n})(RequestHandlerProtocol || (RequestHandlerProtocol = {}));\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nexport function buildQueryString(query) {\n const parts = [];\n for (let key of Object.keys(query).sort()) {\n const value = query[key];\n key = escapeUri(key);\n if (Array.isArray(value)) {\n for (let i = 0, iLen = value.length; i < iLen; i++) {\n parts.push(`${key}=${escapeUri(value[i])}`);\n }\n }\n else {\n let qsEntry = key;\n if (value || typeof value === \"string\") {\n qsEntry += `=${escapeUri(value)}`;\n }\n parts.push(qsEntry);\n }\n }\n return parts.join(\"&\");\n}\n","export function requestTimeout(timeoutInMs = 0) {\n return new Promise((resolve, reject) => {\n if (timeoutInMs) {\n setTimeout(() => {\n const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n timeoutError.name = \"TimeoutError\";\n reject(timeoutError);\n }, timeoutInMs);\n }\n });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { requestTimeout } from \"./request-timeout\";\nexport const keepAliveSupport = {\n supported: Boolean(typeof Request !== \"undefined\" && \"keepalive\" in new Request(\"https://[::1]\")),\n};\nexport class FetchHttpHandler {\n static create(instanceOrOptions) {\n if (typeof instanceOrOptions?.handle === \"function\") {\n return instanceOrOptions;\n }\n return new FetchHttpHandler(instanceOrOptions);\n }\n constructor(options) {\n if (typeof options === \"function\") {\n this.configProvider = options().then((opts) => opts || {});\n }\n else {\n this.config = options ?? {};\n this.configProvider = Promise.resolve(this.config);\n }\n }\n destroy() {\n }\n async handle(request, { abortSignal } = {}) {\n if (!this.config) {\n this.config = await this.configProvider;\n }\n const requestTimeoutInMs = this.config.requestTimeout;\n const keepAlive = this.config.keepAlive === true;\n if (abortSignal?.aborted) {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n return Promise.reject(abortError);\n }\n let path = request.path;\n const queryString = buildQueryString(request.query || {});\n if (queryString) {\n path += `?${queryString}`;\n }\n if (request.fragment) {\n path += `#${request.fragment}`;\n }\n let auth = \"\";\n if (request.username != null || request.password != null) {\n const username = request.username ?? \"\";\n const password = request.password ?? \"\";\n auth = `${username}:${password}@`;\n }\n const { port, method } = request;\n const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n const requestOptions = { body, headers: new Headers(request.headers), method: method };\n if (typeof AbortController !== \"undefined\") {\n requestOptions[\"signal\"] = abortSignal;\n }\n if (keepAliveSupport.supported) {\n requestOptions[\"keepalive\"] = keepAlive;\n }\n const fetchRequest = new Request(url, requestOptions);\n const raceOfPromises = [\n fetch(fetchRequest).then((response) => {\n const fetchHeaders = response.headers;\n const transformedHeaders = {};\n for (const pair of fetchHeaders.entries()) {\n transformedHeaders[pair[0]] = pair[1];\n }\n const hasReadableStream = response.body != undefined;\n if (!hasReadableStream) {\n return response.blob().then((body) => ({\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body,\n }),\n }));\n }\n return {\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body: response.body,\n }),\n };\n }),\n requestTimeout(requestTimeoutInMs),\n ];\n if (abortSignal) {\n raceOfPromises.push(new Promise((resolve, reject) => {\n abortSignal.onabort = () => {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n }));\n }\n return Promise.race(raceOfPromises);\n }\n updateHttpClientConfig(key, value) {\n this.config = undefined;\n this.configProvider = this.configProvider.then((config) => {\n config[key] = value;\n return config;\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n}\n","const alphabetByEncoding = {};\nconst alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nconst bitsPerLetter = 6;\nconst bitsPerByte = 8;\nconst maxLetterValue = 0b111111;\nexport { alphabetByEncoding, alphabetByValue, bitsPerLetter, bitsPerByte, maxLetterValue };\n","import { formatUrl } from '@aws-sdk/util-format-url';\nimport { readableStreamtoIterable, iterableToReadableStream } from '@smithy/eventstream-serde-browser';\nimport { FetchHttpHandler } from '@smithy/fetch-http-handler';\nimport { HttpResponse } from '@smithy/protocol-http';\nimport { WS_CLOSURE_CODE } from '../constants.mjs';\n\n/**\n * Note: This file was copied from https://github.com/aws/aws-sdk-js-v3/blob/main/packages/middleware-websocket/src/websocket-fetch-handler.ts#L176\n * Because of this the file is not fully typed at this time but we should eventually work on fully typing this file.\n */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/require-await */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nconst DEFAULT_WS_CONNECTION_TIMEOUT_MS = 2000;\nconst WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE = 'Websocket connection timeout';\nconst isWebSocketRequest = (request) => request.protocol === 'ws:' || request.protocol === 'wss:';\nconst isReadableStream = (payload) => typeof ReadableStream === 'function' && payload instanceof ReadableStream;\n/**\n * Transfer payload data to an AsyncIterable.\n * When the ReadableStream API is available in the runtime(e.g. browser), and\n * the request body is ReadableStream, so we need to transfer it to AsyncIterable\n * to make the stream consumable by WebSocket.\n */\nconst getIterator = (stream) => {\n // Noop if stream is already an async iterable\n if (stream[Symbol.asyncIterator]) {\n return stream;\n }\n if (isReadableStream(stream)) {\n // If stream is a ReadableStream, transfer the ReadableStream to async iterable.\n return readableStreamtoIterable(stream);\n }\n // For other types, just wrap them with an async iterable.\n return {\n [Symbol.asyncIterator]: async function* () {\n yield stream;\n },\n };\n};\n/**\n * Convert async iterable to a ReadableStream when ReadableStream API\n * is available(browsers). Otherwise, leave as it is(ReactNative).\n */\nconst toReadableStream = (asyncIterable) => typeof ReadableStream === 'function'\n ? iterableToReadableStream(asyncIterable)\n : asyncIterable;\n/**\n * Base handler for websocket requests and HTTP request. By default, the request input and output\n * body will be in a ReadableStream, because of interface consistency among middleware.\n * If ReadableStream is not available, like in React-Native, the response body\n * will be an async iterable.\n */\nclass CustomWebSocketFetchHandler {\n constructor(options, httpHandler = new FetchHttpHandler()) {\n this.metadata = {\n handlerProtocol: 'websocket/h1.1',\n };\n this.sockets = {};\n this.utf8decoder = new TextDecoder(); // default 'utf-8' or 'utf8'\n this.httpHandler = httpHandler;\n if (typeof options === 'function') {\n this.config = {};\n this.configPromise = options().then((opts) => (this.config = opts ?? {}));\n }\n else {\n this.config = options ?? {};\n this.configPromise = Promise.resolve(this.config);\n }\n }\n /**\n * Destroys the WebSocketHandler.\n * Closes all sockets from the socket pool.\n */\n destroy() {\n for (const [key, sockets] of Object.entries(this.sockets)) {\n for (const socket of sockets) {\n socket.close(1000, `Socket closed through destroy() call`);\n }\n delete this.sockets[key];\n }\n }\n async handle(request) {\n if (!isWebSocketRequest(request)) {\n return this.httpHandler.handle(request);\n }\n const url = formatUrl(request);\n const socket = new WebSocket(url);\n // Add socket to sockets pool\n if (!this.sockets[url]) {\n this.sockets[url] = [];\n }\n this.sockets[url].push(socket);\n socket.binaryType = 'arraybuffer';\n const { connectionTimeout = DEFAULT_WS_CONNECTION_TIMEOUT_MS } = await this.configPromise;\n await this.waitForReady(socket, connectionTimeout);\n const { body } = request;\n const bodyStream = getIterator(body);\n const asyncIterable = this.connect(socket, bodyStream);\n const outputPayload = toReadableStream(asyncIterable);\n return {\n response: new HttpResponse({\n statusCode: 200,\n body: outputPayload,\n }),\n };\n }\n updateHttpClientConfig(key, value) {\n this.configPromise = this.configPromise.then((config) => {\n return {\n ...config,\n [key]: value,\n };\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n /**\n * Removes all closing/closed sockets from the socket pool for URL.\n */\n removeNotUsableSockets(url) {\n this.sockets[url] = (this.sockets[url] ?? []).filter((socket) => !(socket.readyState === WebSocket.CLOSING ||\n socket.readyState === WebSocket.CLOSED));\n }\n waitForReady(socket, connectionTimeout) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.removeNotUsableSockets(socket.url);\n reject(new Error(WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE));\n }, connectionTimeout);\n socket.onopen = () => {\n clearTimeout(timeout);\n resolve();\n };\n });\n }\n connect(socket, data) {\n // To notify output stream any error thrown after response\n // is returned while data keeps streaming.\n let streamError = undefined;\n // To notify onclose event that error has occurred.\n let socketErrorOccurred = false;\n // initialize as no-op.\n let reject = () => { };\n let resolve = () => { };\n socket.onmessage = (event) => {\n resolve({\n done: false,\n value: new Uint8Array(event.data),\n });\n };\n socket.onerror = (error) => {\n socketErrorOccurred = true;\n socket.close();\n reject(error);\n };\n socket.onclose = () => {\n this.removeNotUsableSockets(socket.url);\n if (socketErrorOccurred)\n return;\n if (streamError) {\n reject(streamError);\n }\n else {\n resolve({\n done: true,\n value: undefined,\n });\n }\n };\n const outputStream = {\n [Symbol.asyncIterator]: () => ({\n next: () => {\n return new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n },\n }),\n };\n const send = async () => {\n try {\n for await (const inputChunk of data) {\n const decodedString = this.utf8decoder.decode(inputChunk);\n if (decodedString.includes('closeCode')) {\n const match = decodedString.match(/\"closeCode\":([0-9]*)/);\n if (match) {\n const closeCode = match[1];\n socket.close(parseInt(closeCode));\n }\n continue;\n }\n socket.send(inputChunk);\n }\n }\n catch (err) {\n // We don't throw the error here because the send()'s returned\n // would already be settled by the time sending chunk throws error.\n // Instead, the notify the output stream to throw if there's\n // exceptions\n if (err instanceof Error) {\n streamError = err;\n }\n }\n finally {\n // WS status code: https://tools.ietf.org/html/rfc6455#section-7.4\n socket.close(WS_CLOSURE_CODE.SUCCESS_CODE);\n }\n };\n send();\n return outputStream;\n }\n}\n\nexport { CustomWebSocketFetchHandler, WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE };\n","import { fetchAuthSession } from 'aws-amplify/auth';\n\nconst isCredentialsProvider = (credentialsProvider) => typeof credentialsProvider === 'function';\n// the return interface of `fetchAuthSession` includes `credentials` as\n// optional, but `credentials` is always returned. If `fetchAuthSession`\n// is called for an unauthenticated end user, values of `accessKeyId`\n// and `secretAccessKey` are `undefined`\nconst isCredentials = (credentials) => !!(credentials?.accessKeyId && credentials?.secretAccessKey);\n/**\n * Resolves the `credentials` param to be passed to `RekognitionStreamingClient` which accepts either:\n * - a `credentials` object\n * - a `credentialsProvider` callback\n *\n * @param credentialsProvider optional `credentialsProvider` callback\n * @returns {Promise} `credentials` object or valid `credentialsProvider` callback\n */\nasync function resolveCredentials(credentialsProvider) {\n const hasCredentialsProvider = isCredentialsProvider(credentialsProvider);\n if (hasCredentialsProvider) {\n return credentialsProvider;\n }\n if (credentialsProvider && !hasCredentialsProvider) {\n throw new Error('Invalid credentialsProvider');\n }\n try {\n const result = (await fetchAuthSession()).credentials;\n if (isCredentials(result)) {\n return result;\n }\n throw new Error('Missing credentials');\n }\n catch (e) {\n const { message } = e;\n throw new Error(`Invalid credentials: ${message}`);\n }\n}\n\nexport { resolveCredentials };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToBuffer = void 0;\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : util_utf8_browser_1.fromUtf8;\nfunction convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\nexports.convertToBuffer = convertToBuffer;\n//# sourceMappingURL=convertToBuffer.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numToUint8 = void 0;\nfunction numToUint8(num) {\n return new Uint8Array([\n (num & 0xff000000) >> 24,\n (num & 0x00ff0000) >> 16,\n (num & 0x0000ff00) >> 8,\n num & 0x000000ff,\n ]);\n}\nexports.numToUint8 = numToUint8;\n//# sourceMappingURL=numToUint8.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = void 0;\n// IE 11 does not support Array.from, so we do it manually\nfunction uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\nexports.uint32ArrayFrom = uint32ArrayFrom;\n//# sourceMappingURL=uint32ArrayFrom.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;\nvar convertToBuffer_1 = require(\"./convertToBuffer\");\nObject.defineProperty(exports, \"convertToBuffer\", { enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nObject.defineProperty(exports, \"isEmptyData\", { enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } });\nvar numToUint8_1 = require(\"./numToUint8\");\nObject.defineProperty(exports, \"numToUint8\", { enumerable: true, get: function () { return numToUint8_1.numToUint8; } });\nvar uint32ArrayFrom_1 = require(\"./uint32ArrayFrom\");\nObject.defineProperty(exports, \"uint32ArrayFrom\", { enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar index_1 = require(\"./index\");\nvar AwsCrc32 = /** @class */ (function () {\n function AwsCrc32() {\n this.crc32 = new index_1.Crc32();\n }\n AwsCrc32.prototype.update = function (toHash) {\n if ((0, util_1.isEmptyData)(toHash))\n return;\n this.crc32.update((0, util_1.convertToBuffer)(toHash));\n };\n AwsCrc32.prototype.digest = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, (0, util_1.numToUint8)(this.crc32.digest())];\n });\n });\n };\n AwsCrc32.prototype.reset = function () {\n this.crc32 = new index_1.Crc32();\n };\n return AwsCrc32;\n}());\nexports.AwsCrc32 = AwsCrc32;\n//# sourceMappingURL=aws_crc32.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = exports.Crc32 = exports.crc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nfunction crc32(data) {\n return new Crc32().update(data).digest();\n}\nexports.crc32 = crc32;\nvar Crc32 = /** @class */ (function () {\n function Crc32() {\n this.checksum = 0xffffffff;\n }\n Crc32.prototype.update = function (data) {\n var e_1, _a;\n try {\n for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var byte = data_1_1.value;\n this.checksum =\n (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return this;\n };\n Crc32.prototype.digest = function () {\n return (this.checksum ^ 0xffffffff) >>> 0;\n };\n return Crc32;\n}());\nexports.Crc32 = Crc32;\n// prettier-ignore\nvar a_lookUpTable = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,\n];\nvar lookupTable = (0, util_1.uint32ArrayFrom)(a_lookUpTable);\nvar aws_crc32_1 = require(\"./aws_crc32\");\nObject.defineProperty(exports, \"AwsCrc32\", { enumerable: true, get: function () { return aws_crc32_1.AwsCrc32; } });\n//# sourceMappingURL=index.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { toHex } from \"@smithy/util-hex-encoding\";\nexport class Int64 {\n constructor(bytes) {\n this.bytes = bytes;\n if (bytes.byteLength !== 8) {\n throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n }\n }\n static fromNumber(number) {\n if (number > 9223372036854776000 || number < -9223372036854776000) {\n throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n }\n const bytes = new Uint8Array(8);\n for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n bytes[i] = remaining;\n }\n if (number < 0) {\n negate(bytes);\n }\n return new Int64(bytes);\n }\n valueOf() {\n const bytes = this.bytes.slice(0);\n const negative = bytes[0] & 0b10000000;\n if (negative) {\n negate(bytes);\n }\n return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n }\n toString() {\n return String(this.valueOf());\n }\n}\nfunction negate(bytes) {\n for (let i = 0; i < 8; i++) {\n bytes[i] ^= 0xff;\n }\n for (let i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0)\n break;\n }\n}\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { Int64 } from \"./Int64\";\nexport class HeaderMarshaller {\n constructor(toUtf8, fromUtf8) {\n this.toUtf8 = toUtf8;\n this.fromUtf8 = fromUtf8;\n }\n format(headers) {\n const chunks = [];\n for (const headerName of Object.keys(headers)) {\n const bytes = this.fromUtf8(headerName);\n chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n }\n const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n let position = 0;\n for (const chunk of chunks) {\n out.set(chunk, position);\n position += chunk.byteLength;\n }\n return out;\n }\n formatHeaderValue(header) {\n switch (header.type) {\n case \"boolean\":\n return Uint8Array.from([header.value ? 0 : 1]);\n case \"byte\":\n return Uint8Array.from([2, header.value]);\n case \"short\":\n const shortView = new DataView(new ArrayBuffer(3));\n shortView.setUint8(0, 3);\n shortView.setInt16(1, header.value, false);\n return new Uint8Array(shortView.buffer);\n case \"integer\":\n const intView = new DataView(new ArrayBuffer(5));\n intView.setUint8(0, 4);\n intView.setInt32(1, header.value, false);\n return new Uint8Array(intView.buffer);\n case \"long\":\n const longBytes = new Uint8Array(9);\n longBytes[0] = 5;\n longBytes.set(header.value.bytes, 1);\n return longBytes;\n case \"binary\":\n const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n binView.setUint8(0, 6);\n binView.setUint16(1, header.value.byteLength, false);\n const binBytes = new Uint8Array(binView.buffer);\n binBytes.set(header.value, 3);\n return binBytes;\n case \"string\":\n const utf8Bytes = this.fromUtf8(header.value);\n const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n strView.setUint8(0, 7);\n strView.setUint16(1, utf8Bytes.byteLength, false);\n const strBytes = new Uint8Array(strView.buffer);\n strBytes.set(utf8Bytes, 3);\n return strBytes;\n case \"timestamp\":\n const tsBytes = new Uint8Array(9);\n tsBytes[0] = 8;\n tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n return tsBytes;\n case \"uuid\":\n if (!UUID_PATTERN.test(header.value)) {\n throw new Error(`Invalid UUID received: ${header.value}`);\n }\n const uuidBytes = new Uint8Array(17);\n uuidBytes[0] = 9;\n uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n return uuidBytes;\n }\n }\n parse(headers) {\n const out = {};\n let position = 0;\n while (position < headers.byteLength) {\n const nameLength = headers.getUint8(position++);\n const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));\n position += nameLength;\n switch (headers.getUint8(position++)) {\n case 0:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true,\n };\n break;\n case 1:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false,\n };\n break;\n case 2:\n out[name] = {\n type: BYTE_TAG,\n value: headers.getInt8(position++),\n };\n break;\n case 3:\n out[name] = {\n type: SHORT_TAG,\n value: headers.getInt16(position, false),\n };\n position += 2;\n break;\n case 4:\n out[name] = {\n type: INT_TAG,\n value: headers.getInt32(position, false),\n };\n position += 4;\n break;\n case 5:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),\n };\n position += 8;\n break;\n case 6:\n const binaryLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),\n };\n position += binaryLength;\n break;\n case 7:\n const stringLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),\n };\n position += stringLength;\n break;\n case 8:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),\n };\n position += 8;\n break;\n case 9:\n const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: `${toHex(uuidBytes.subarray(0, 4))}-${toHex(uuidBytes.subarray(4, 6))}-${toHex(uuidBytes.subarray(6, 8))}-${toHex(uuidBytes.subarray(8, 10))}-${toHex(uuidBytes.subarray(10))}`,\n };\n break;\n default:\n throw new Error(`Unrecognized header type tag`);\n }\n }\n return out;\n }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst BOOLEAN_TAG = \"boolean\";\nconst BYTE_TAG = \"byte\";\nconst SHORT_TAG = \"short\";\nconst INT_TAG = \"integer\";\nconst LONG_TAG = \"long\";\nconst BINARY_TAG = \"binary\";\nconst STRING_TAG = \"string\";\nconst TIMESTAMP_TAG = \"timestamp\";\nconst UUID_TAG = \"uuid\";\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\n","export var HttpAuthLocation;\n(function (HttpAuthLocation) {\n HttpAuthLocation[\"HEADER\"] = \"header\";\n HttpAuthLocation[\"QUERY\"] = \"query\";\n})(HttpAuthLocation || (HttpAuthLocation = {}));\n","export var HttpApiKeyAuthLocation;\n(function (HttpApiKeyAuthLocation) {\n HttpApiKeyAuthLocation[\"HEADER\"] = \"header\";\n HttpApiKeyAuthLocation[\"QUERY\"] = \"query\";\n})(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {}));\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n EndpointURLScheme[\"HTTP\"] = \"http\";\n EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n AlgorithmId[\"MD5\"] = \"md5\";\n AlgorithmId[\"CRC32\"] = \"crc32\";\n AlgorithmId[\"CRC32C\"] = \"crc32c\";\n AlgorithmId[\"SHA1\"] = \"sha1\";\n AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n if (runtimeConfig.sha256 !== undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.SHA256,\n checksumConstructor: () => runtimeConfig.sha256,\n });\n }\n if (runtimeConfig.md5 != undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.MD5,\n checksumConstructor: () => runtimeConfig.md5,\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export var FieldPosition;\n(function (FieldPosition) {\n FieldPosition[FieldPosition[\"HEADER\"] = 0] = \"HEADER\";\n FieldPosition[FieldPosition[\"TRAILER\"] = 1] = \"TRAILER\";\n})(FieldPosition || (FieldPosition = {}));\n","export var IniSectionType;\n(function (IniSectionType) {\n IniSectionType[\"PROFILE\"] = \"profile\";\n IniSectionType[\"SSO_SESSION\"] = \"sso-session\";\n IniSectionType[\"SERVICES\"] = \"services\";\n})(IniSectionType || (IniSectionType = {}));\n","export var RequestHandlerProtocol;\n(function (RequestHandlerProtocol) {\n RequestHandlerProtocol[\"HTTP_0_9\"] = \"http/0.9\";\n RequestHandlerProtocol[\"HTTP_1_0\"] = \"http/1.0\";\n RequestHandlerProtocol[\"TDS_8_0\"] = \"tds/8.0\";\n})(RequestHandlerProtocol || (RequestHandlerProtocol = {}));\n","export const normalizeProvider = (input) => {\n if (typeof input === \"function\")\n return input;\n const promisified = Promise.resolve(input);\n return () => promisified;\n};\n","export const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport const TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport const REGION_SET_PARAM = \"X-Amz-Region-Set\";\nexport const AUTH_HEADER = \"authorization\";\nexport const AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport const DATE_HEADER = \"date\";\nexport const GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport const SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport const SHA256_HEADER = \"x-amz-content-sha256\";\nexport const TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport const HOST_HEADER = \"host\";\nexport const ALWAYS_UNSIGNABLE_HEADERS = {\n authorization: true,\n \"cache-control\": true,\n connection: true,\n expect: true,\n from: true,\n \"keep-alive\": true,\n \"max-forwards\": true,\n pragma: true,\n referer: true,\n te: true,\n trailer: true,\n \"transfer-encoding\": true,\n upgrade: true,\n \"user-agent\": true,\n \"x-amzn-trace-id\": true,\n};\nexport const PROXY_HEADER_PATTERN = /^proxy-/;\nexport const SEC_HEADER_PATTERN = /^sec-/;\nexport const UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport const ALGORITHM_IDENTIFIER_V4A = \"AWS4-ECDSA-P256-SHA256\";\nexport const EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const MAX_CACHE_SIZE = 50;\nexport const KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport const MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nconst signingKeyCache = {};\nconst cacheQueue = [];\nexport const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${KEY_TYPE_IDENTIFIER}`;\nexport const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {\n const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);\n const cacheKey = `${shortDate}:${region}:${service}:${toHex(credsHash)}:${credentials.sessionToken}`;\n if (cacheKey in signingKeyCache) {\n return signingKeyCache[cacheKey];\n }\n cacheQueue.push(cacheKey);\n while (cacheQueue.length > MAX_CACHE_SIZE) {\n delete signingKeyCache[cacheQueue.shift()];\n }\n let key = `AWS4${credentials.secretAccessKey}`;\n for (const signable of [shortDate, region, service, KEY_TYPE_IDENTIFIER]) {\n key = await hmac(sha256Constructor, key, signable);\n }\n return (signingKeyCache[cacheKey] = key);\n};\nexport const clearCredentialCache = () => {\n cacheQueue.length = 0;\n Object.keys(signingKeyCache).forEach((cacheKey) => {\n delete signingKeyCache[cacheKey];\n });\n};\nconst hmac = (ctor, secret, data) => {\n const hash = new ctor(secret);\n hash.update(toUint8Array(data));\n return hash.digest();\n};\n","import { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\nexport const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {\n const canonical = {};\n for (const headerName of Object.keys(headers).sort()) {\n if (headers[headerName] == undefined) {\n continue;\n }\n const canonicalHeaderName = headerName.toLowerCase();\n if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS ||\n unsignableHeaders?.has(canonicalHeaderName) ||\n PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n continue;\n }\n }\n canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n }\n return canonical;\n};\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\nexport const getCanonicalQuery = ({ query = {} }) => {\n const keys = [];\n const serialized = {};\n for (const key of Object.keys(query).sort()) {\n if (key.toLowerCase() === SIGNATURE_HEADER) {\n continue;\n }\n keys.push(key);\n const value = query[key];\n if (typeof value === \"string\") {\n serialized[key] = `${escapeUri(key)}=${escapeUri(value)}`;\n }\n else if (Array.isArray(value)) {\n serialized[key] = value\n .slice(0)\n .reduce((encoded, value) => encoded.concat([`${escapeUri(key)}=${escapeUri(value)}`]), [])\n .sort()\n .join(\"&\");\n }\n }\n return keys\n .map((key) => serialized[key])\n .filter((serialized) => serialized)\n .join(\"&\");\n};\n","export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport const getPayloadHash = async ({ headers, body }, hashConstructor) => {\n for (const headerName of Object.keys(headers)) {\n if (headerName.toLowerCase() === SHA256_HEADER) {\n return headers[headerName];\n }\n }\n if (body == undefined) {\n return \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n }\n else if (typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {\n const hashCtor = new hashConstructor();\n hashCtor.update(toUint8Array(body));\n return toHex(await hashCtor.digest());\n }\n return UNSIGNED_PAYLOAD;\n};\n","export const hasHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return true;\n }\n }\n return false;\n};\nexport const getHeaderValue = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return headers[headerName];\n }\n }\n return undefined;\n};\nexport const deleteHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n delete headers[headerName];\n }\n }\n};\n","export const cloneRequest = ({ headers, query, ...rest }) => ({\n ...rest,\n headers: { ...headers },\n query: query ? cloneQuery(query) : undefined,\n});\nexport const cloneQuery = (query) => Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n}, {});\n","import { cloneRequest } from \"./cloneRequest\";\nexport const moveHeadersToQuery = (request, options = {}) => {\n const { headers, query = {} } = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request);\n for (const name of Object.keys(headers)) {\n const lname = name.toLowerCase();\n if (lname.slice(0, 6) === \"x-amz-\" && !options.unhoistableHeaders?.has(lname)) {\n query[name] = headers[name];\n delete headers[name];\n }\n }\n return {\n ...request,\n headers,\n query,\n };\n};\n","import { cloneRequest } from \"./cloneRequest\";\nimport { GENERATED_HEADERS } from \"./constants\";\nexport const prepareRequest = (request) => {\n request = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request);\n for (const headerName of Object.keys(request.headers)) {\n if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n delete request.headers[headerName];\n }\n }\n return request;\n};\n","export const iso8601 = (time) => toDate(time)\n .toISOString()\n .replace(/\\.\\d{3}Z$/, \"Z\");\nexport const toDate = (time) => {\n if (typeof time === \"number\") {\n return new Date(time * 1000);\n }\n if (typeof time === \"string\") {\n if (Number(time)) {\n return new Date(Number(time) * 1000);\n }\n return new Date(time);\n }\n return time;\n};\n","import { HeaderMarshaller } from \"@smithy/eventstream-codec\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nimport { fromUtf8, toUint8Array, toUtf8 } from \"@smithy/util-utf8\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { hasHeader } from \"./headerUtil\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { iso8601 } from \"./utilDate\";\nexport class SignatureV4 {\n constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n this.headerMarshaller = new HeaderMarshaller(toUtf8, fromUtf8);\n this.service = service;\n this.sha256 = sha256;\n this.uriEscapePath = uriEscapePath;\n this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n this.regionProvider = normalizeProvider(region);\n this.credentialProvider = normalizeProvider(credentials);\n }\n async presign(originalRequest, options = {}) {\n const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, signingRegion, signingService, } = options;\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { longDate, shortDate } = formatDate(signingDate);\n if (expiresIn > MAX_PRESIGNED_TTL) {\n return Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\");\n }\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const request = moveHeadersToQuery(prepareRequest(originalRequest), { unhoistableHeaders });\n if (credentials.sessionToken) {\n request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n }\n request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n request.query[CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;\n request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n request.query[SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(canonicalHeaders);\n request.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await getPayloadHash(originalRequest, this.sha256)));\n return request;\n }\n async sign(toSign, options) {\n if (typeof toSign === \"string\") {\n return this.signString(toSign, options);\n }\n else if (toSign.headers && toSign.payload) {\n return this.signEvent(toSign, options);\n }\n else if (toSign.message) {\n return this.signMessage(toSign, options);\n }\n else {\n return this.signRequest(toSign, options);\n }\n }\n async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate, longDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const hashedPayload = await getPayloadHash({ headers: {}, body: payload }, this.sha256);\n const hash = new this.sha256();\n hash.update(headers);\n const hashedHeaders = toHex(await hash.digest());\n const stringToSign = [\n EVENT_ALGORITHM_IDENTIFIER,\n longDate,\n scope,\n priorSignature,\n hashedHeaders,\n hashedPayload,\n ].join(\"\\n\");\n return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });\n }\n async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {\n const promise = this.signEvent({\n headers: this.headerMarshaller.format(signableMessage.message.headers),\n payload: signableMessage.message.body,\n }, {\n signingDate,\n signingRegion,\n signingService,\n priorSignature: signableMessage.priorSignature,\n });\n return promise.then((signature) => {\n return { message: signableMessage.message, signature };\n });\n }\n async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate } = formatDate(signingDate);\n const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const request = prepareRequest(requestToSign);\n const { longDate, shortDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n request.headers[AMZ_DATE_HEADER] = longDate;\n if (credentials.sessionToken) {\n request.headers[TOKEN_HEADER] = credentials.sessionToken;\n }\n const payloadHash = await getPayloadHash(request, this.sha256);\n if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n request.headers[SHA256_HEADER] = payloadHash;\n }\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));\n request.headers[AUTH_HEADER] =\n `${ALGORITHM_IDENTIFIER} ` +\n `Credential=${credentials.accessKeyId}/${scope}, ` +\n `SignedHeaders=${getCanonicalHeaderList(canonicalHeaders)}, ` +\n `Signature=${signature}`;\n return request;\n }\n createCanonicalRequest(request, canonicalHeaders, payloadHash) {\n const sortedHeaders = Object.keys(canonicalHeaders).sort();\n return `${request.method}\n${this.getCanonicalPath(request)}\n${getCanonicalQuery(request)}\n${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join(\"\\n\")}\n\n${sortedHeaders.join(\";\")}\n${payloadHash}`;\n }\n async createStringToSign(longDate, credentialScope, canonicalRequest) {\n const hash = new this.sha256();\n hash.update(toUint8Array(canonicalRequest));\n const hashedRequest = await hash.digest();\n return `${ALGORITHM_IDENTIFIER}\n${longDate}\n${credentialScope}\n${toHex(hashedRequest)}`;\n }\n getCanonicalPath({ path }) {\n if (this.uriEscapePath) {\n const normalizedPathSegments = [];\n for (const pathSegment of path.split(\"/\")) {\n if (pathSegment?.length === 0)\n continue;\n if (pathSegment === \".\")\n continue;\n if (pathSegment === \"..\") {\n normalizedPathSegments.pop();\n }\n else {\n normalizedPathSegments.push(pathSegment);\n }\n }\n const normalizedPath = `${path?.startsWith(\"/\") ? \"/\" : \"\"}${normalizedPathSegments.join(\"/\")}${normalizedPathSegments.length > 0 && path?.endsWith(\"/\") ? \"/\" : \"\"}`;\n const doubleEncoded = encodeURIComponent(normalizedPath);\n return doubleEncoded.replace(/%2F/g, \"/\");\n }\n return path;\n }\n async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {\n const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest);\n const hash = new this.sha256(await keyPromise);\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n getSigningKey(credentials, region, shortDate, service) {\n return getSigningKey(this.sha256, credentials, shortDate, region, service || this.service);\n }\n validateResolvedCredentials(credentials) {\n if (typeof credentials !== \"object\" ||\n typeof credentials.accessKeyId !== \"string\" ||\n typeof credentials.secretAccessKey !== \"string\") {\n throw new Error(\"Resolved credential object is not valid\");\n }\n }\n}\nconst formatDate = (now) => {\n const longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n return {\n longDate,\n shortDate: longDate.slice(0, 8),\n };\n};\nconst getCanonicalHeaderList = (headers) => Object.keys(headers).sort().join(\";\");\n","import { SignatureV4 } from '@smithy/signature-v4';\n\n// override aws sdk default value of 60\nconst REQUEST_EXPIRY = 299;\nclass Signer extends SignatureV4 {\n presign(request, options) {\n return super.presign(request, {\n ...options,\n expiresIn: REQUEST_EXPIRY,\n // `headers` that should not be signed. Liveness WebSocket\n // request omits `headers` except for required `host` header. Signature\n // could be a mismatch if other `headers` are signed\n unsignableHeaders: new Set(Object.keys(request.headers).filter((header) => header !== 'host')),\n });\n }\n}\n\nexport { REQUEST_EXPIRY, Signer };\n","import { RekognitionStreamingClient } from '@aws-sdk/client-rekognitionstreaming';\nimport { getAmplifyUserAgent } from '@aws-amplify/core/internals/utils';\nimport { getLivenessUserAgent } from '../../../utils/platform.mjs';\nimport { CustomWebSocketFetchHandler } from './CustomWebSocketFetchHandler.mjs';\nimport { resolveCredentials } from './resolveCredentials.mjs';\nimport { Signer } from './Signer.mjs';\n\nconst CONNECTION_TIMEOUT = 10000;\nconst CUSTOM_USER_AGENT = `${getAmplifyUserAgent()} ${getLivenessUserAgent()}`;\nasync function createStreamingClient({ credentialsProvider, endpointOverride, region, systemClockOffset, }) {\n const credentials = await resolveCredentials(credentialsProvider);\n const clientconfig = {\n credentials,\n customUserAgent: CUSTOM_USER_AGENT,\n region,\n requestHandler: new CustomWebSocketFetchHandler({\n connectionTimeout: CONNECTION_TIMEOUT,\n }),\n signerConstructor: Signer,\n systemClockOffset,\n };\n if (endpointOverride) {\n clientconfig.endpointProvider = () => ({ url: new URL(endpointOverride) });\n }\n return new RekognitionStreamingClient(clientconfig);\n}\n\nexport { createStreamingClient };\n","import { StartFaceLivenessSessionCommand } from '@aws-sdk/client-rekognitionstreaming';\nimport { VideoRecorder } from './videoRecorder.mjs';\nimport { createStreamingClient } from './createStreamingClient/createStreamingClient.mjs';\n\nconst TIME_SLICE = 1000;\nfunction isBlob(obj) {\n return obj.arrayBuffer !== undefined;\n}\nfunction isClientSessionInformationEvent(obj) {\n return obj.Challenge !== undefined;\n}\nfunction isEndStreamWithCodeEvent(obj) {\n return obj.code !== undefined;\n}\nclass LivenessStreamProvider {\n constructor({ sessionId, region, stream, videoEl, credentialProvider, endpointOverride, systemClockOffset, }) {\n this.sessionId = sessionId;\n this.region = region;\n this.stream = stream;\n this.videoEl = videoEl;\n this.videoRecorder = new VideoRecorder(stream);\n this.credentialProvider = credentialProvider;\n this.endpointOverride = endpointOverride;\n this.systemClockOffset = systemClockOffset;\n this.initPromise = this.init();\n }\n async getResponseStream() {\n await this.initPromise;\n return this.responseStream;\n }\n startRecordingLivenessVideo() {\n this.videoRecorder.start(TIME_SLICE);\n }\n sendClientInfo(clientInfo) {\n this.videoRecorder.dispatch(new MessageEvent('clientSesssionInfo', { data: { clientInfo } }));\n }\n async stopVideo() {\n await this.videoRecorder.stop();\n }\n dispatchStopVideoEvent() {\n this.videoRecorder.dispatch(new Event('stopVideo'));\n }\n async endStreamWithCode(code) {\n if (this.videoRecorder.getState() === 'recording') {\n await this.stopVideo();\n }\n this.videoRecorder.dispatch(new MessageEvent('endStreamWithCode', { data: { code } }));\n return;\n }\n async init() {\n this._client = await createStreamingClient({\n credentialsProvider: this.credentialProvider,\n endpointOverride: this.endpointOverride,\n region: this.region,\n systemClockOffset: this.systemClockOffset,\n });\n this.responseStream = await this.startLivenessVideoConnection();\n }\n // Creates a generator from a stream of video chunks and livenessActionDocuments and yields VideoEvent and ClientEvents\n getAsyncGeneratorFromReadableStream(stream) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const current = this;\n this._reader = stream.getReader();\n return async function* () {\n while (true) {\n const { done, value } = (await current._reader.read());\n if (done) {\n return;\n }\n // Video chunks blobs should be sent as video events\n if (value === 'stopVideo') {\n // sending an empty video chunk signals that we have ended sending video\n yield {\n VideoEvent: {\n VideoChunk: new Uint8Array([]),\n TimestampMillis: Date.now(),\n },\n };\n }\n else if (isBlob(value)) {\n const buffer = await value.arrayBuffer();\n const chunk = new Uint8Array(buffer);\n if (chunk.length > 0) {\n yield {\n VideoEvent: {\n VideoChunk: chunk,\n TimestampMillis: Date.now(),\n },\n };\n }\n }\n else if (isClientSessionInformationEvent(value)) {\n yield {\n ClientSessionInformationEvent: {\n Challenge: value.Challenge,\n },\n };\n }\n else if (isEndStreamWithCodeEvent(value)) {\n yield {\n VideoEvent: {\n VideoChunk: new Uint8Array([]),\n // this is a custom type that does not match LivenessRequestStream.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n TimestampMillis: { closeCode: value.code },\n },\n };\n }\n }\n };\n }\n async startLivenessVideoConnection() {\n const livenessRequestGenerator = this.getAsyncGeneratorFromReadableStream(this.videoRecorder.videoStream)();\n const mediaSettings = this.stream.getTracks()[0].getSettings();\n const response = await this._client.send(new StartFaceLivenessSessionCommand({\n ChallengeVersions: 'FaceMovementAndLightChallenge_1.0.0',\n SessionId: this.sessionId,\n LivenessRequestStream: livenessRequestGenerator,\n VideoWidth: (mediaSettings.width ?? this.videoEl.width).toString(),\n VideoHeight: (mediaSettings.height ?? this.videoEl.height).toString(),\n }));\n return response.LivenessResponseStream;\n }\n}\n\nexport { LivenessStreamProvider };\n","import { fillOverlayCanvasFractional, getRGBArrayFromColorString } from './liveness.mjs';\n\nconst TICK_RATE = 10; // ms -- the rate at which we will render/check colors\nvar COLOR_STAGE;\n(function (COLOR_STAGE) {\n COLOR_STAGE[\"SCROLLING\"] = \"SCROLLING\";\n COLOR_STAGE[\"FLAT\"] = \"FLAT\";\n})(COLOR_STAGE || (COLOR_STAGE = {}));\nclass FreshnessColorDisplay {\n constructor(context, freshnessColorsSequence) {\n this.context = context;\n this.freshnessColorsSequence = freshnessColorsSequence;\n this.isFirstTick = true;\n }\n async displayColorTick() {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n this.displayNextColorTick(resolve, reject);\n }, Math.min(TICK_RATE));\n });\n }\n init() {\n this.stageIndex = 0;\n this.currColorIndex = 0;\n this.currColorSequence = this.freshnessColorsSequence[0];\n this.prevColorSequence = this.freshnessColorsSequence[0];\n this.stage = COLOR_STAGE.FLAT;\n this.timeLastFlatOrScrollChange = Date.now();\n this.timeLastFaceMatchChecked = Date.now();\n }\n displayNextColorTick(resolve, _) {\n const { freshnessColorEl } = this.context.freshnessColorAssociatedParams;\n const { ovalDetails, scaleFactor } = this.context.ovalAssociatedParams;\n const { videoEl } = this.context.videoAssociatedParams;\n const tickStartTime = Date.now();\n // Send a colorStart time only for the first tick of the first color\n if (this.isFirstTick) {\n this.init();\n this.isFirstTick = false;\n this.sendColorStartTime({\n tickStartTime: tickStartTime,\n currColor: this.currColorSequence.color,\n prevColor: this.currColorSequence.color,\n currColorIndex: this.stageIndex,\n });\n }\n let timeSinceLastColorChange = tickStartTime - this.timeLastFlatOrScrollChange;\n freshnessColorEl.style.display = 'block';\n // Every 10 ms tick we will check if the threshold for flat or scrolling, if so we will try to go to the next stage\n if ((this.stage === COLOR_STAGE.FLAT &&\n timeSinceLastColorChange >=\n this.currColorSequence.flatDisplayDuration) ||\n (this.stage === COLOR_STAGE.SCROLLING &&\n timeSinceLastColorChange >= this.currColorSequence.downscrollDuration)) {\n this.incrementStageIndex(tickStartTime);\n timeSinceLastColorChange = 0;\n }\n // Every 10 ms tick we will update the colors displayed\n if (this.currColorIndex < this.freshnessColorsSequence.length) {\n const heightFraction = timeSinceLastColorChange /\n (this.stage === COLOR_STAGE.SCROLLING\n ? this.currColorSequence.downscrollDuration\n : this.currColorSequence.flatDisplayDuration);\n fillOverlayCanvasFractional({\n overlayCanvas: freshnessColorEl,\n prevColor: this.prevColorSequence.color,\n nextColor: this.currColorSequence.color,\n videoEl: videoEl,\n ovalDetails: ovalDetails,\n heightFraction,\n scaleFactor: scaleFactor,\n });\n resolve(false);\n }\n else {\n freshnessColorEl.style.display = 'none';\n resolve(true);\n }\n }\n // FLAT - prev = 0, curr = 0\n // SCROLL - prev = 0, curr = 1\n // FLAT - prev = 1, curr = 1\n // SCROLL - prev = 1, curr = 2\n // SCROLL - prev = 2, curr = 3\n incrementStageIndex(tickStartTime) {\n this.stageIndex += 1;\n this.prevColorSequence = this.freshnessColorsSequence[this.currColorIndex];\n if (this.stage === COLOR_STAGE.FLAT) {\n this.currColorIndex += 1;\n this.stage = COLOR_STAGE.SCROLLING;\n }\n else if (this.stage === COLOR_STAGE.SCROLLING) {\n const nextFlatColor = this.freshnessColorsSequence[this.currColorIndex];\n if (nextFlatColor.flatDisplayDuration > 0) {\n this.stage = COLOR_STAGE.FLAT;\n }\n else {\n this.stage = COLOR_STAGE.SCROLLING;\n this.currColorIndex += 1;\n }\n }\n this.currColorSequence = this.freshnessColorsSequence[this.currColorIndex];\n this.timeLastFlatOrScrollChange = Date.now();\n if (this.currColorSequence) {\n this.sendColorStartTime({\n tickStartTime: tickStartTime,\n currColor: this.currColorSequence.color,\n prevColor: this.prevColorSequence.color,\n currColorIndex: this.stageIndex,\n });\n }\n }\n sendColorStartTime({ tickStartTime, currColor, prevColor, currColorIndex, }) {\n const { livenessStreamProvider, challengeId } = this.context;\n livenessStreamProvider.sendClientInfo({\n Challenge: {\n FaceMovementAndLightChallenge: {\n ChallengeId: challengeId,\n ColorDisplayed: {\n CurrentColor: { RGB: getRGBArrayFromColorString(currColor) },\n PreviousColor: { RGB: getRGBArrayFromColorString(prevColor) },\n SequenceNumber: currColorIndex,\n CurrentColorStartTimestamp: tickStartTime,\n },\n },\n },\n });\n }\n}\n\nexport { FreshnessColorDisplay };\n","import { WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE } from './createStreamingClient/CustomWebSocketFetchHandler.mjs';\n\nconst isServerSesssionInformationEvent = (value) => {\n return !!value\n ?.ServerSessionInformationEvent;\n};\nconst isConnectionTimeoutError = (error) => {\n const { message } = error;\n return message.includes(WEBSOCKET_CONNECTION_TIMEOUT_MESSAGE);\n};\nconst isDisconnectionEvent = (value) => {\n return !!value\n ?.DisconnectionEvent;\n};\nconst isValidationExceptionEvent = (value) => {\n return !!value\n ?.ValidationException;\n};\nconst isInternalServerExceptionEvent = (value) => {\n return !!value\n ?.InternalServerException;\n};\nconst isThrottlingExceptionEvent = (value) => {\n return !!value\n ?.ThrottlingException;\n};\nconst isServiceQuotaExceededExceptionEvent = (value) => {\n return !!value\n ?.ServiceQuotaExceededException;\n};\nconst isInvalidSignatureRegionException = (error) => {\n const { message, name } = error;\n return (name === 'InvalidSignatureException' && message.includes('valid region'));\n};\n\nexport { isConnectionTimeoutError, isDisconnectionEvent, isInternalServerExceptionEvent, isInvalidSignatureRegionException, isServerSesssionInformationEvent, isServiceQuotaExceededExceptionEvent, isThrottlingExceptionEvent, isValidationExceptionEvent };\n","const STATIC_VIDEO_CONSTRAINTS = {\n width: {\n min: 320,\n ideal: 640,\n },\n height: {\n min: 240,\n ideal: 480,\n },\n frameRate: { min: 15, ideal: 30, max: 60 },\n facingMode: 'user',\n};\n\nexport { STATIC_VIDEO_CONSTRAINTS };\n","import { nanoid } from 'nanoid';\nimport { createMachine, assign, spawn, actions } from 'xstate';\nimport { drawStaticOval, getBoundingBox, getColorsSequencesFromSessionInformation, isCameraDeviceVirtual, getFaceMatchState, isFaceDistanceBelowThreshold, estimateIllumination, getOvalDetailsFromSessionInformation, generateBboxFromLandmarks, drawLivenessOvalInCanvas, getOvalBoundingBox, getIntersectionOverUnion, getStaticLivenessOvalDetails } from '../utils/liveness.mjs';\nimport { FaceMatchState } from '../types/liveness.mjs';\nimport { LivenessErrorState } from '../types/error.mjs';\nimport { BlazeFaceFaceDetection } from '../utils/blazefaceFaceDetection.mjs';\nimport { getFaceMatchStateInLivenessOval } from '../utils/getFaceMatchStateInLivenessOval.mjs';\nimport { LivenessStreamProvider } from '../utils/streamProvider.mjs';\nimport { FreshnessColorDisplay } from '../utils/freshnessColorDisplay.mjs';\nimport { isServerSesssionInformationEvent, isDisconnectionEvent, isValidationExceptionEvent, isInternalServerExceptionEvent, isThrottlingExceptionEvent, isServiceQuotaExceededExceptionEvent, isInvalidSignatureRegionException, isConnectionTimeoutError } from '../utils/eventUtils.mjs';\nimport { STATIC_VIDEO_CONSTRAINTS } from '../../utils/helpers.mjs';\nimport { WS_CLOSURE_CODE } from '../utils/constants.mjs';\n\nconst CAMERA_ID_KEY = 'AmplifyLivenessCameraId';\nconst DEFAULT_FACE_FIT_TIMEOUT = 7000;\nlet responseStream;\nconst responseStreamActor = async (callback) => {\n try {\n const stream = await responseStream;\n for await (const event of stream) {\n if (isServerSesssionInformationEvent(event)) {\n callback({\n type: 'SET_SESSION_INFO',\n data: {\n sessionInfo: event.ServerSessionInformationEvent.SessionInformation,\n },\n });\n }\n else if (isDisconnectionEvent(event)) {\n callback({ type: 'DISCONNECT_EVENT' });\n }\n else if (isValidationExceptionEvent(event)) {\n callback({\n type: 'SERVER_ERROR',\n data: { error: { ...event.ValidationException } },\n });\n }\n else if (isInternalServerExceptionEvent(event)) {\n callback({\n type: 'SERVER_ERROR',\n data: { error: { ...event.InternalServerException } },\n });\n }\n else if (isThrottlingExceptionEvent(event)) {\n callback({\n type: 'SERVER_ERROR',\n data: { error: { ...event.ThrottlingException } },\n });\n }\n else if (isServiceQuotaExceededExceptionEvent(event)) {\n callback({\n type: 'SERVER_ERROR',\n data: { error: { ...event.ServiceQuotaExceededException } },\n });\n }\n }\n }\n catch (error) {\n if (isInvalidSignatureRegionException(error)) {\n callback({\n type: 'SERVER_ERROR',\n data: {\n error: new Error('Invalid region in FaceLivenessDetector or credentials are scoped to the wrong region.'),\n },\n });\n }\n else if (error instanceof Error) {\n callback({\n type: isConnectionTimeoutError(error)\n ? 'CONNECTION_TIMEOUT'\n : 'SERVER_ERROR',\n data: { error },\n });\n }\n }\n};\nfunction getLastSelectedCameraId() {\n return localStorage.getItem(CAMERA_ID_KEY);\n}\nfunction setLastSelectedCameraId(deviceId) {\n localStorage.setItem(CAMERA_ID_KEY, deviceId);\n}\nconst livenessMachine = createMachine({\n id: 'livenessMachine',\n initial: 'cameraCheck',\n predictableActionArguments: true,\n context: {\n challengeId: nanoid(),\n maxFailedAttempts: 0,\n failedAttempts: 0,\n componentProps: undefined,\n serverSessionInformation: undefined,\n videoAssociatedParams: {\n videoConstraints: STATIC_VIDEO_CONSTRAINTS,\n selectableDevices: [],\n },\n ovalAssociatedParams: undefined,\n faceMatchAssociatedParams: {\n illuminationState: undefined,\n faceMatchState: undefined,\n /**\n * faceMatchPercentage is a starting point we set as a baseline\n * for what we want our progress bar to visually start at. This correlates\n * to the formula we use to calculate the faceMatchPercentage\n * in getFaceMatchStateInLivenessOval\n */\n faceMatchPercentage: 25,\n currentDetectedFace: undefined,\n startFace: undefined,\n endFace: undefined,\n },\n freshnessColorAssociatedParams: {\n freshnessColorEl: undefined,\n freshnessColors: [],\n freshnessColorsComplete: false,\n freshnessColorDisplay: undefined,\n },\n errorState: undefined,\n livenessStreamProvider: undefined,\n responseStreamActorRef: undefined,\n shouldDisconnect: false,\n faceMatchStateBeforeStart: undefined,\n isFaceFarEnoughBeforeRecording: undefined,\n isRecordingStopped: false,\n },\n on: {\n CANCEL: 'userCancel',\n TIMEOUT: {\n target: 'retryableTimeout',\n actions: 'updateErrorStateForTimeout',\n },\n SET_SESSION_INFO: {\n internal: true,\n actions: 'updateSessionInfo',\n },\n DISCONNECT_EVENT: {\n internal: true,\n actions: 'updateShouldDisconnect',\n },\n SET_DOM_AND_CAMERA_DETAILS: {\n actions: 'setDOMAndCameraDetails',\n },\n UPDATE_DEVICE_AND_STREAM: {\n actions: 'updateDeviceAndStream',\n },\n SERVER_ERROR: {\n target: 'error',\n actions: 'updateErrorStateForServer',\n },\n CONNECTION_TIMEOUT: {\n target: 'error',\n actions: 'updateErrorStateForConnectionTimeout',\n },\n RUNTIME_ERROR: {\n target: 'error',\n actions: 'updateErrorStateForRuntime',\n },\n MOBILE_LANDSCAPE_WARNING: {\n target: 'mobileLandscapeWarning',\n actions: 'updateErrorStateForServer',\n },\n },\n states: {\n cameraCheck: {\n entry: 'resetErrorState',\n invoke: {\n src: 'checkVirtualCameraAndGetStream',\n onDone: {\n target: 'waitForDOMAndCameraDetails',\n actions: 'updateVideoMediaStream',\n },\n onError: {\n target: 'permissionDenied',\n },\n },\n },\n waitForDOMAndCameraDetails: {\n after: {\n 0: {\n target: 'start',\n cond: 'hasDOMAndCameraDetails',\n },\n 10: { target: 'waitForDOMAndCameraDetails' },\n },\n },\n start: {\n entry: ['drawStaticOval', 'initializeFaceDetector'],\n always: [\n {\n target: 'detectFaceBeforeStart',\n cond: 'shouldSkipStartScreen',\n },\n ],\n on: {\n BEGIN: 'detectFaceBeforeStart',\n },\n },\n detectFaceBeforeStart: {\n invoke: {\n src: 'detectFace',\n onDone: {\n target: 'checkFaceDetectedBeforeStart',\n actions: 'updateFaceMatchBeforeStartDetails',\n },\n },\n },\n checkFaceDetectedBeforeStart: {\n after: {\n 0: {\n target: 'detectFaceDistanceBeforeRecording',\n cond: 'hasSingleFaceBeforeStart',\n },\n 100: { target: 'detectFaceBeforeStart' },\n },\n },\n detectFaceDistanceBeforeRecording: {\n invoke: {\n src: 'detectFaceDistance',\n onDone: {\n target: 'checkFaceDistanceBeforeRecording',\n actions: 'updateFaceDistanceBeforeRecording',\n },\n },\n },\n checkFaceDistanceBeforeRecording: {\n after: {\n 0: {\n target: 'initializeLivenessStream',\n cond: 'hasEnoughFaceDistanceBeforeRecording',\n },\n 100: { target: 'detectFaceDistanceBeforeRecording' },\n },\n },\n initializeLivenessStream: {\n invoke: {\n src: 'openLivenessStreamConnection',\n onDone: {\n target: 'notRecording',\n actions: [\n 'updateLivenessStreamProvider',\n 'spawnResponseStreamActor',\n ],\n },\n },\n },\n notRecording: {\n initial: 'waitForSessionInfo',\n states: {\n waitForSessionInfo: {\n after: {\n 0: {\n target: '#livenessMachine.recording',\n cond: 'hasServerSessionInfo',\n },\n 100: { target: 'waitForSessionInfo' },\n },\n },\n },\n },\n recording: {\n entry: [\n 'clearErrorState',\n 'startRecording',\n 'sendTimeoutAfterOvalDrawingDelay',\n ],\n initial: 'ovalDrawing',\n states: {\n ovalDrawing: {\n invoke: {\n src: 'detectInitialFaceAndDrawOval',\n onDone: {\n target: 'checkFaceDetected',\n actions: [\n 'updateOvalAndFaceDetailsPostDraw',\n 'sendTimeoutAfterOvalMatchDelay',\n ],\n },\n onError: {\n target: '#livenessMachine.error',\n actions: 'updateErrorStateForRuntime',\n },\n },\n },\n checkFaceDetected: {\n after: {\n 0: {\n target: 'cancelOvalDrawingTimeout',\n cond: 'hasSingleFace',\n },\n 100: { target: 'ovalDrawing' },\n },\n },\n cancelOvalDrawingTimeout: {\n entry: [\n 'cancelOvalDrawingTimeout',\n 'sendTimeoutAfterRecordingDelay',\n ],\n after: {\n 0: {\n target: 'checkRecordingStarted',\n },\n },\n },\n checkRecordingStarted: {\n after: {\n 0: {\n target: 'ovalMatching',\n cond: 'hasRecordingStarted',\n actions: 'updateRecordingStartTimestampMs',\n },\n 100: { target: 'checkRecordingStarted' },\n },\n },\n // Evaluates face match and moves to checkMatch\n // which continually checks for match until either timeout or face match\n ovalMatching: {\n entry: 'cancelRecordingTimeout',\n invoke: {\n src: 'detectFaceAndMatchOval',\n onDone: {\n target: 'checkMatch',\n actions: 'updateFaceDetailsPostMatch',\n },\n },\n },\n // If `hasFaceMatchedInOval` is true, then move to `delayBeforeFlash`, which pauses\n // for one second to show \"Hold still\" text before moving to `flashFreshnessColors`.\n // If not, move back to ovalMatching and re-evaluate match state\n checkMatch: {\n after: {\n 0: {\n target: 'delayBeforeFlash',\n cond: 'hasFaceMatchedInOval',\n actions: [\n 'setFaceMatchTimeAndStartFace',\n 'updateEndFaceMatch',\n 'setupFlashFreshnessColors',\n 'cancelOvalMatchTimeout',\n 'cancelOvalDrawingTimeout',\n ],\n },\n 1: {\n target: 'ovalMatching',\n },\n },\n },\n delayBeforeFlash: {\n after: {\n 1000: 'flashFreshnessColors',\n },\n },\n flashFreshnessColors: {\n invoke: {\n src: 'flashColors',\n onDone: [\n {\n target: 'success',\n cond: 'hasFreshnessColorShown',\n },\n {\n target: 'flashFreshnessColors',\n actions: 'updateFreshnessDetails',\n },\n ],\n },\n },\n success: {\n entry: 'stopRecording',\n type: 'final',\n },\n },\n onDone: 'uploading',\n },\n uploading: {\n initial: 'pending',\n states: {\n pending: {\n entry: ['pauseVideoStream'],\n invoke: {\n src: 'stopVideo',\n onDone: 'waitForDisconnectEvent',\n onError: {\n target: '#livenessMachine.error',\n actions: 'updateErrorStateForRuntime',\n },\n },\n },\n waitForDisconnectEvent: {\n after: {\n 0: {\n target: 'getLivenessResult',\n cond: 'getShouldDisconnect',\n },\n 100: { target: 'waitForDisconnectEvent' },\n },\n },\n getLivenessResult: {\n entry: ['freezeStream'],\n invoke: {\n src: 'getLiveness',\n onError: {\n target: '#livenessMachine.error',\n actions: 'updateErrorStateForServer',\n },\n },\n },\n },\n },\n retryableTimeout: {\n entry: 'updateFailedAttempts',\n always: [\n {\n target: 'timeout',\n cond: 'shouldTimeoutOnFailedAttempts',\n },\n { target: 'notRecording' },\n ],\n },\n permissionDenied: {\n entry: 'callUserPermissionDeniedCallback',\n on: { RETRY_CAMERA_CHECK: 'cameraCheck' },\n },\n mobileLandscapeWarning: {\n entry: 'callMobileLandscapeWarningCallback',\n always: { target: 'error' },\n },\n timeout: {\n entry: ['cleanUpResources', 'callUserTimeoutCallback', 'freezeStream'],\n },\n error: {\n entry: [\n 'cleanUpResources',\n 'callErrorCallback',\n 'cancelOvalDrawingTimeout',\n 'cancelOvalMatchTimeout',\n 'cancelRecordingTimeout',\n 'freezeStream',\n ],\n },\n userCancel: {\n entry: ['cleanUpResources', 'callUserCancelCallback', 'resetContext'],\n always: { target: 'cameraCheck' },\n },\n },\n}, {\n actions: {\n spawnResponseStreamActor: assign({\n responseStreamActorRef: () => spawn(responseStreamActor),\n }),\n updateFailedAttempts: assign({\n failedAttempts: (context) => context.failedAttempts + 1,\n }),\n updateVideoMediaStream: assign({\n videoAssociatedParams: (context, event) => ({\n ...context.videoAssociatedParams,\n videoMediaStream: event.data\n ?.stream,\n selectedDeviceId: event.data\n ?.selectedDeviceId,\n selectableDevices: event.data\n ?.selectableDevices,\n }),\n }),\n initializeFaceDetector: assign({\n ovalAssociatedParams: (context) => {\n const { componentProps } = context;\n const { faceModelUrl, binaryPath } = componentProps.config;\n const faceDetector = new BlazeFaceFaceDetection(binaryPath, faceModelUrl);\n faceDetector.triggerModelLoading();\n return { ...context.ovalAssociatedParams, faceDetector };\n },\n }),\n updateLivenessStreamProvider: assign({\n livenessStreamProvider: (context, event) => event.data?.livenessStreamProvider,\n }),\n setDOMAndCameraDetails: assign({\n videoAssociatedParams: (context, event) => ({\n ...context.videoAssociatedParams,\n videoEl: event.data?.videoEl,\n canvasEl: event.data?.canvasEl,\n isMobile: event.data?.isMobile,\n }),\n freshnessColorAssociatedParams: (context, event) => ({\n ...context.freshnessColorAssociatedParams,\n freshnessColorEl: event.data\n ?.freshnessColorEl,\n }),\n }),\n updateDeviceAndStream: assign({\n videoAssociatedParams: (context, event) => {\n setLastSelectedCameraId(event.data?.newDeviceId);\n return {\n ...context.videoAssociatedParams,\n selectedDeviceId: event.data\n ?.newDeviceId,\n videoMediaStream: event.data\n ?.newStream,\n };\n },\n }),\n drawStaticOval: (context) => {\n const { canvasEl, videoEl, videoMediaStream } = context.videoAssociatedParams;\n drawStaticOval(canvasEl, videoEl, videoMediaStream);\n },\n updateRecordingStartTimestampMs: assign({\n videoAssociatedParams: (context) => {\n const { challengeId, videoAssociatedParams, ovalAssociatedParams, livenessStreamProvider, } = context;\n const { recordingStartApiTimestamp, recorderStartTimestamp } = livenessStreamProvider.videoRecorder;\n const { videoMediaStream } = videoAssociatedParams;\n const { initialFace } = ovalAssociatedParams;\n /**\n * This calculation is provided by Science team after doing analysis\n * of unreliable .onstart() (recorderStartTimestamp) timestamp that is\n * returned from mediaRecorder.\n */\n const timestamp = Math.round(0.73 * (recorderStartTimestamp - recordingStartApiTimestamp) +\n recordingStartApiTimestamp);\n // Send client info for initial face position\n const { width, height } = videoMediaStream\n .getTracks()[0]\n .getSettings();\n const flippedInitialFaceLeft = width - initialFace.left - initialFace.width;\n context.livenessStreamProvider.sendClientInfo({\n Challenge: {\n FaceMovementAndLightChallenge: {\n ChallengeId: challengeId,\n VideoStartTimestamp: timestamp,\n InitialFace: {\n InitialFaceDetectedTimestamp: initialFace.timestampMs,\n BoundingBox: getBoundingBox({\n deviceHeight: height,\n deviceWidth: width,\n height: initialFace.height,\n width: initialFace.width,\n top: initialFace.top,\n left: flippedInitialFaceLeft,\n }),\n },\n },\n },\n });\n return {\n ...context.videoAssociatedParams,\n recordingStartTimestampMs: timestamp,\n };\n },\n }),\n startRecording: assign({\n videoAssociatedParams: (context) => {\n if (!context.serverSessionInformation) {\n throw new Error('Session information was not received from response stream');\n }\n if (context.livenessStreamProvider.videoRecorder &&\n context.livenessStreamProvider.videoRecorder.getState() !==\n 'recording') {\n context.livenessStreamProvider.startRecordingLivenessVideo();\n }\n return { ...context.videoAssociatedParams };\n },\n }),\n stopRecording: () => { },\n updateFaceMatchBeforeStartDetails: assign({\n faceMatchStateBeforeStart: (_, event) => event.data.faceMatchState,\n }),\n updateFaceDistanceBeforeRecording: assign({\n isFaceFarEnoughBeforeRecording: (_, event) => !!event.data.isFaceFarEnoughBeforeRecording,\n }),\n updateFaceDistanceWhileLoading: assign({\n isFaceFarEnoughBeforeRecording: (_, event) => !!event.data.isFaceFarEnoughBeforeRecording,\n errorState: (_, event) => event.data?.error,\n }),\n updateOvalAndFaceDetailsPostDraw: assign({\n ovalAssociatedParams: (context, event) => ({\n ...context.ovalAssociatedParams,\n initialFace: event.data\n .initialFace,\n ovalDetails: event.data\n .ovalDetails,\n scaleFactor: event.data\n .scaleFactor,\n }),\n faceMatchAssociatedParams: (context, event) => ({\n ...context.faceMatchAssociatedParams,\n faceMatchState: event.data\n .faceMatchState,\n illuminationState: event.data\n .illuminationState,\n }),\n }),\n updateFaceDetailsPostMatch: assign({\n faceMatchAssociatedParams: (context, event) => ({\n ...context.faceMatchAssociatedParams,\n faceMatchState: event.data\n .faceMatchState,\n faceMatchPercentage: event.data\n .faceMatchPercentage,\n illuminationState: event.data\n .illuminationState,\n currentDetectedFace: event.data\n .detectedFace,\n }),\n }),\n updateEndFaceMatch: assign({\n faceMatchAssociatedParams: (context) => ({\n ...context.faceMatchAssociatedParams,\n endFace: context.faceMatchAssociatedParams.currentDetectedFace,\n }),\n }),\n setFaceMatchTimeAndStartFace: assign({\n faceMatchAssociatedParams: (context) => {\n return {\n ...context.faceMatchAssociatedParams,\n startFace: context.faceMatchAssociatedParams.startFace === undefined\n ? context.faceMatchAssociatedParams.currentDetectedFace\n : context.faceMatchAssociatedParams.startFace,\n };\n },\n }),\n resetErrorState: assign({ errorState: (_) => undefined }),\n updateErrorStateForConnectionTimeout: assign({\n errorState: (_) => LivenessErrorState.CONNECTION_TIMEOUT,\n }),\n updateErrorStateForTimeout: assign({\n errorState: (_, event) => event.data?.errorState || LivenessErrorState.TIMEOUT,\n errorMessage: (_, event) => event.data?.message,\n }),\n updateErrorStateForRuntime: assign({\n errorState: (_, event) => event.data?.errorState ||\n LivenessErrorState.RUNTIME_ERROR,\n }),\n updateErrorStateForServer: assign({\n errorState: (_) => LivenessErrorState.SERVER_ERROR,\n }),\n clearErrorState: assign({ errorState: (_) => undefined }),\n updateSessionInfo: assign({\n serverSessionInformation: (_, event) => {\n return event.data.sessionInfo;\n },\n }),\n updateShouldDisconnect: assign({ shouldDisconnect: () => true }),\n updateFreshnessDetails: assign({\n freshnessColorAssociatedParams: (context, event) => {\n return {\n ...context.freshnessColorAssociatedParams,\n freshnessColorsComplete: event.data\n .freshnessColorsComplete,\n };\n },\n }),\n setupFlashFreshnessColors: assign({\n freshnessColorAssociatedParams: (context) => {\n const { serverSessionInformation } = context;\n const freshnessColors = getColorsSequencesFromSessionInformation(serverSessionInformation);\n const freshnessColorDisplay = new FreshnessColorDisplay(context, freshnessColors);\n return {\n ...context.freshnessColorAssociatedParams,\n freshnessColorDisplay,\n };\n },\n }),\n // timeouts\n sendTimeoutAfterOvalDrawingDelay: actions.send({\n type: 'RUNTIME_ERROR',\n data: {\n message: 'Client failed to draw oval.',\n },\n }, {\n delay: 5000,\n id: 'ovalDrawingTimeout',\n }),\n cancelOvalDrawingTimeout: actions.cancel('ovalDrawingTimeout'),\n sendTimeoutAfterRecordingDelay: actions.send({\n type: 'RUNTIME_ERROR',\n data: {\n message: 'Client failed to start recording.',\n },\n }, {\n delay: 5000,\n id: 'recordingTimeout',\n }),\n cancelRecordingTimeout: actions.cancel('recordingTimeout'),\n sendTimeoutAfterOvalMatchDelay: actions.send({\n type: 'TIMEOUT',\n data: {\n message: 'Client timed out waiting for face to match oval.',\n },\n }, {\n delay: (context) => {\n return (context.serverSessionInformation?.Challenge\n ?.FaceMovementAndLightChallenge?.ChallengeConfig\n ?.OvalFitTimeout ?? DEFAULT_FACE_FIT_TIMEOUT);\n },\n id: 'ovalMatchTimeout',\n }),\n cancelOvalMatchTimeout: actions.cancel('ovalMatchTimeout'),\n // callbacks\n callUserPermissionDeniedCallback: assign({\n errorState: (context, event) => {\n let errorState;\n if (event.data.message.includes('15 fps')) {\n errorState = LivenessErrorState.CAMERA_FRAMERATE_ERROR;\n }\n else {\n errorState = LivenessErrorState.CAMERA_ACCESS_ERROR;\n }\n const errorMessage = event.data.message || event.data.Message;\n const error = new Error(errorMessage);\n const livenessError = {\n state: errorState,\n error: error,\n };\n context.componentProps.onError?.(livenessError);\n return errorState;\n },\n }),\n callMobileLandscapeWarningCallback: assign({\n errorState: () => LivenessErrorState.MOBILE_LANDSCAPE_ERROR,\n }),\n callUserCancelCallback: (context) => {\n context.componentProps.onUserCancel?.();\n },\n callUserTimeoutCallback: (context) => {\n const error = new Error(context.errorMessage ?? 'Client Timeout');\n error.name = context.errorState;\n const livenessError = {\n state: context.errorState,\n error: error,\n };\n context.componentProps.onError?.(livenessError);\n },\n callErrorCallback: (context, event) => {\n const livenessError = {\n state: context.errorState,\n error: event.data?.error || event.data,\n };\n context.componentProps.onError?.(livenessError);\n },\n cleanUpResources: (context) => {\n const { freshnessColorEl } = context.freshnessColorAssociatedParams;\n if (freshnessColorEl) {\n freshnessColorEl.style.display = 'none';\n }\n let closureCode = WS_CLOSURE_CODE.DEFAULT_ERROR_CODE;\n if (context.errorState === LivenessErrorState.TIMEOUT) {\n closureCode = WS_CLOSURE_CODE.FACE_FIT_TIMEOUT;\n }\n else if (context.errorState === LivenessErrorState.RUNTIME_ERROR) {\n closureCode = WS_CLOSURE_CODE.RUNTIME_ERROR;\n }\n else if (context.errorState === LivenessErrorState.FACE_DISTANCE_ERROR ||\n context.errorState === LivenessErrorState.MULTIPLE_FACES_ERROR) {\n closureCode = WS_CLOSURE_CODE.USER_ERROR_DURING_CONNECTION;\n }\n else if (context.errorState === undefined) {\n closureCode = WS_CLOSURE_CODE.USER_CANCEL;\n }\n context.livenessStreamProvider?.endStreamWithCode(closureCode);\n },\n freezeStream: (context) => {\n const { videoMediaStream, videoEl } = context.videoAssociatedParams;\n context.isRecordingStopped = true;\n videoEl?.pause();\n videoMediaStream?.getTracks().forEach(function (track) {\n track.stop();\n });\n },\n pauseVideoStream: (context) => {\n const { videoEl } = context.videoAssociatedParams;\n context.isRecordingStopped = true;\n videoEl.pause();\n },\n resetContext: assign({\n challengeId: nanoid(),\n maxFailedAttempts: 0,\n failedAttempts: 0,\n componentProps: (context) => context.componentProps,\n serverSessionInformation: (_) => undefined,\n videoAssociatedParams: (_) => {\n return {\n videoConstraints: STATIC_VIDEO_CONSTRAINTS,\n };\n },\n ovalAssociatedParams: (_) => undefined,\n errorState: (_) => undefined,\n livenessStreamProvider: (_) => undefined,\n responseStreamActorRef: (_) => undefined,\n shouldDisconnect: false,\n faceMatchStateBeforeStart: (_) => undefined,\n isFaceFarEnoughBeforeRecording: (_) => undefined,\n isRecordingStopped: false,\n }),\n },\n guards: {\n shouldTimeoutOnFailedAttempts: (context) => context.failedAttempts >= context.maxFailedAttempts,\n hasFaceMatchedInOval: (context) => {\n return (context.faceMatchAssociatedParams.faceMatchState ===\n FaceMatchState.MATCHED);\n },\n hasSingleFace: (context) => {\n return (context.faceMatchAssociatedParams.faceMatchState ===\n FaceMatchState.FACE_IDENTIFIED);\n },\n hasSingleFaceBeforeStart: (context) => {\n return (context.faceMatchStateBeforeStart === FaceMatchState.FACE_IDENTIFIED);\n },\n hasEnoughFaceDistanceBeforeRecording: (context) => {\n return context.isFaceFarEnoughBeforeRecording;\n },\n hasNotEnoughFaceDistanceBeforeRecording: (context) => {\n return !context.isFaceFarEnoughBeforeRecording;\n },\n hasFreshnessColorShown: (context) => context.freshnessColorAssociatedParams.freshnessColorsComplete,\n hasServerSessionInfo: (context) => {\n return context.serverSessionInformation !== undefined;\n },\n hasDOMAndCameraDetails: (context) => {\n return (context.videoAssociatedParams.videoEl !== undefined &&\n context.videoAssociatedParams.canvasEl !== undefined &&\n context.freshnessColorAssociatedParams.freshnessColorEl !== undefined);\n },\n getShouldDisconnect: (context) => {\n return !!context.shouldDisconnect;\n },\n hasRecordingStarted: (context) => {\n return (context.livenessStreamProvider.videoRecorder.firstChunkTimestamp !==\n undefined);\n },\n shouldSkipStartScreen: (context) => {\n return !!context.componentProps?.disableStartScreen;\n },\n },\n services: {\n async checkVirtualCameraAndGetStream(context) {\n const { videoConstraints } = context.videoAssociatedParams;\n // Get initial stream to enumerate devices with non-empty labels\n const existingDeviceId = getLastSelectedCameraId();\n const initialStream = await navigator.mediaDevices.getUserMedia({\n video: {\n ...videoConstraints,\n ...(existingDeviceId ? { deviceId: existingDeviceId } : {}),\n },\n audio: false,\n });\n const devices = await navigator.mediaDevices.enumerateDevices();\n const realVideoDevices = devices\n .filter((device) => device.kind === 'videoinput')\n .filter((device) => !isCameraDeviceVirtual(device));\n if (!realVideoDevices.length) {\n throw new Error('No real video devices found');\n }\n // Ensure that at least one of the cameras is capable of at least 15 fps\n const tracksWithMoreThan15Fps = initialStream\n .getTracks()\n .filter((track) => {\n const settings = track.getSettings();\n return settings.frameRate >= 15;\n });\n if (tracksWithMoreThan15Fps.length < 1) {\n throw new Error('No camera found with more than 15 fps');\n }\n // If the initial stream is of real camera, use it otherwise use the first real camera\n const initialStreamDeviceId = tracksWithMoreThan15Fps[0].getSettings().deviceId;\n const isInitialStreamFromRealDevice = realVideoDevices.some((device) => device.deviceId === initialStreamDeviceId);\n const deviceId = isInitialStreamFromRealDevice\n ? initialStreamDeviceId\n : realVideoDevices[0].deviceId;\n let realVideoDeviceStream = initialStream;\n if (!isInitialStreamFromRealDevice) {\n realVideoDeviceStream = await navigator.mediaDevices.getUserMedia({\n video: {\n ...videoConstraints,\n deviceId: { exact: deviceId },\n },\n audio: false,\n });\n }\n setLastSelectedCameraId(deviceId);\n return {\n stream: realVideoDeviceStream,\n selectedDeviceId: initialStreamDeviceId,\n selectableDevices: realVideoDevices,\n };\n },\n // eslint-disable-next-line @typescript-eslint/require-await\n async openLivenessStreamConnection(context) {\n const { config } = context.componentProps;\n const { credentialProvider, endpointOverride, systemClockOffset } = config;\n const livenessStreamProvider = new LivenessStreamProvider({\n sessionId: context.componentProps.sessionId,\n region: context.componentProps.region,\n systemClockOffset,\n stream: context.videoAssociatedParams.videoMediaStream,\n videoEl: context.videoAssociatedParams.videoEl,\n credentialProvider,\n endpointOverride,\n });\n responseStream = livenessStreamProvider.getResponseStream();\n return { livenessStreamProvider };\n },\n async detectFace(context) {\n const { videoEl } = context.videoAssociatedParams;\n const { faceDetector } = context.ovalAssociatedParams;\n // initialize models\n try {\n await faceDetector.modelLoadingPromise;\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.log({ err });\n }\n // detect face\n const faceMatchState = await getFaceMatchState(faceDetector, videoEl);\n return { faceMatchState };\n },\n async detectFaceDistance(context) {\n const { isFaceFarEnoughBeforeRecording: faceDistanceCheckBeforeRecording, } = context;\n const { videoEl, videoMediaStream, isMobile } = context.videoAssociatedParams;\n const { faceDetector } = context.ovalAssociatedParams;\n const { width, height } = videoMediaStream\n .getTracks()[0]\n .getSettings();\n const ovalDetails = getStaticLivenessOvalDetails({\n width: width,\n height: height,\n });\n const { isDistanceBelowThreshold: isFaceFarEnoughBeforeRecording } = await isFaceDistanceBelowThreshold({\n faceDetector: faceDetector,\n videoEl: videoEl,\n ovalDetails,\n reduceThreshold: faceDistanceCheckBeforeRecording,\n isMobile,\n });\n return { isFaceFarEnoughBeforeRecording };\n },\n async detectFaceDistanceWhileLoading(context) {\n const { isFaceFarEnoughBeforeRecording: faceDistanceCheckBeforeRecording, } = context;\n const { videoEl, videoMediaStream, isMobile } = context.videoAssociatedParams;\n const { faceDetector } = context.ovalAssociatedParams;\n const { width, height } = videoMediaStream\n .getTracks()[0]\n .getSettings();\n const ovalDetails = getStaticLivenessOvalDetails({\n width: width,\n height: height,\n });\n const { isDistanceBelowThreshold: isFaceFarEnoughBeforeRecording, error, } = await isFaceDistanceBelowThreshold({\n faceDetector: faceDetector,\n isMobile,\n ovalDetails,\n videoEl: videoEl,\n // if this is the second face distance check reduce the threshold\n reduceThreshold: faceDistanceCheckBeforeRecording,\n });\n return { isFaceFarEnoughBeforeRecording, error };\n },\n async detectInitialFaceAndDrawOval(context) {\n const { serverSessionInformation, livenessStreamProvider } = context;\n const { videoEl, canvasEl, isMobile } = context.videoAssociatedParams;\n const { faceDetector } = context.ovalAssociatedParams;\n // initialize models\n try {\n await faceDetector.modelLoadingPromise;\n await livenessStreamProvider.videoRecorder.recorderStarted;\n }\n catch (err) {\n // eslint-disable-next-line no-console\n console.log({ err });\n }\n // detect face\n const detectedFaces = await faceDetector.detectFaces(videoEl);\n let initialFace;\n let faceMatchState;\n let illuminationState;\n switch (detectedFaces.length) {\n case 0: {\n // no face detected;\n faceMatchState = FaceMatchState.CANT_IDENTIFY;\n illuminationState = estimateIllumination(videoEl);\n break;\n }\n case 1: {\n //exactly one face detected;\n faceMatchState = FaceMatchState.FACE_IDENTIFIED;\n initialFace = detectedFaces[0];\n break;\n }\n default: {\n //more than one face detected ;\n faceMatchState = FaceMatchState.TOO_MANY;\n break;\n }\n }\n if (!initialFace) {\n return { faceMatchState, illuminationState };\n }\n // Get width/height of video element so we can compute scaleFactor\n // and set canvas width/height.\n const { width: videoScaledWidth, height: videoScaledHeight } = videoEl.getBoundingClientRect();\n if (isMobile) {\n canvasEl.width = window.innerWidth;\n canvasEl.height = window.innerHeight;\n }\n else {\n canvasEl.width = videoScaledWidth;\n canvasEl.height = videoScaledHeight;\n }\n // Compute scaleFactor which is how much our video element is scaled\n // vs the intrinsic video resolution\n const scaleFactor = videoScaledWidth / videoEl.videoWidth;\n // generate oval details from initialFace and video dimensions\n const ovalDetails = getOvalDetailsFromSessionInformation({\n sessionInformation: serverSessionInformation,\n videoWidth: videoEl.width,\n });\n // renormalize initial face\n const renormalizedFace = generateBboxFromLandmarks(initialFace, ovalDetails, videoEl.videoHeight);\n initialFace.top = renormalizedFace.top;\n initialFace.left = renormalizedFace.left;\n initialFace.height = renormalizedFace.bottom - renormalizedFace.top;\n initialFace.width = renormalizedFace.right - renormalizedFace.left;\n // Draw oval in canvas using ovalDetails and scaleFactor\n drawLivenessOvalInCanvas({\n canvas: canvasEl,\n oval: ovalDetails,\n scaleFactor,\n videoEl: videoEl,\n });\n return {\n faceMatchState,\n ovalDetails,\n scaleFactor,\n initialFace,\n };\n },\n async detectFaceAndMatchOval(context) {\n const { serverSessionInformation } = context;\n const { videoEl } = context.videoAssociatedParams;\n const { faceDetector, ovalDetails, initialFace } = context.ovalAssociatedParams;\n // detect face\n const detectedFaces = await faceDetector.detectFaces(videoEl);\n let faceMatchState;\n let faceMatchPercentage = 0;\n let detectedFace;\n let illuminationState;\n const initialFaceBoundingBox = generateBboxFromLandmarks(initialFace, ovalDetails, videoEl.videoHeight);\n const { ovalBoundingBox } = getOvalBoundingBox(ovalDetails);\n const initialFaceIntersection = getIntersectionOverUnion(initialFaceBoundingBox, ovalBoundingBox);\n switch (detectedFaces.length) {\n case 0: {\n //no face detected;\n faceMatchState = FaceMatchState.CANT_IDENTIFY;\n illuminationState = estimateIllumination(videoEl);\n break;\n }\n case 1: {\n //exactly one face detected, match face with oval;\n detectedFace = detectedFaces[0];\n const { faceMatchState: faceMatchStateInLivenessOval, faceMatchPercentage: faceMatchPercentageInLivenessOval, } = getFaceMatchStateInLivenessOval({\n face: detectedFace,\n ovalDetails: ovalDetails,\n initialFaceIntersection,\n sessionInformation: serverSessionInformation,\n frameHeight: videoEl.videoHeight,\n });\n faceMatchState = faceMatchStateInLivenessOval;\n faceMatchPercentage = faceMatchPercentageInLivenessOval;\n break;\n }\n default: {\n //more than one face detected ;\n faceMatchState = FaceMatchState.TOO_MANY;\n break;\n }\n }\n return {\n faceMatchState,\n faceMatchPercentage,\n illuminationState,\n detectedFace,\n };\n },\n async flashColors(context) {\n const { freshnessColorsComplete, freshnessColorDisplay } = context.freshnessColorAssociatedParams;\n if (freshnessColorsComplete) {\n return;\n }\n const completed = await freshnessColorDisplay.displayColorTick();\n return { freshnessColorsComplete: completed };\n },\n async stopVideo(context) {\n const { challengeId, livenessStreamProvider } = context;\n const { videoMediaStream } = context.videoAssociatedParams;\n const { initialFace, ovalDetails } = context.ovalAssociatedParams;\n const { startFace, endFace } = context.faceMatchAssociatedParams;\n const { width, height } = videoMediaStream\n .getTracks()[0]\n .getSettings();\n const flippedInitialFaceLeft = width - initialFace.left - initialFace.width;\n await livenessStreamProvider.stopVideo();\n const livenessActionDocument = {\n Challenge: {\n FaceMovementAndLightChallenge: {\n ChallengeId: challengeId,\n InitialFace: {\n InitialFaceDetectedTimestamp: initialFace.timestampMs,\n BoundingBox: getBoundingBox({\n deviceHeight: height,\n deviceWidth: width,\n height: initialFace.height,\n width: initialFace.width,\n top: initialFace.top,\n left: flippedInitialFaceLeft,\n }),\n },\n TargetFace: {\n FaceDetectedInTargetPositionStartTimestamp: startFace.timestampMs,\n FaceDetectedInTargetPositionEndTimestamp: endFace.timestampMs,\n BoundingBox: getBoundingBox({\n deviceHeight: height,\n deviceWidth: width,\n height: ovalDetails.height,\n width: ovalDetails.width,\n top: ovalDetails.centerY - ovalDetails.height / 2,\n left: ovalDetails.centerX - ovalDetails.width / 2,\n }),\n },\n VideoEndTimestamp: livenessStreamProvider.videoRecorder.recorderEndTimestamp,\n },\n },\n };\n if (livenessStreamProvider.videoRecorder.getVideoChunkSize() === 0) {\n throw new Error('Video chunks not recorded successfully.');\n }\n livenessStreamProvider.sendClientInfo(livenessActionDocument);\n livenessStreamProvider.dispatchStopVideoEvent();\n },\n async getLiveness(context) {\n const { onAnalysisComplete } = context.componentProps;\n // Get liveness result\n await onAnalysisComplete();\n },\n },\n});\n\nexport { livenessMachine };\n","import React__default from 'react';\n\nconst FaceLivenessDetectorContext = React__default.createContext(null);\nfunction FaceLivenessDetectorProvider({ children, ...props }) {\n return (React__default.createElement(FaceLivenessDetectorContext.Provider, { value: props }, children));\n}\nfunction useFaceLivenessDetector() {\n const props = React__default.useContext(FaceLivenessDetectorContext);\n if (props === null) {\n throw new Error('useFaceLivenessDetector must be used within a FaceLivenessDetectorProvider');\n }\n return props;\n}\n\nexport { FaceLivenessDetectorProvider, useFaceLivenessDetector };\n","import { useTheme } from './useTheme.mjs';\nimport { useBreakpoint } from '../primitives/shared/responsive/useBreakpoint.mjs';\n\n/**\n * @internal For internal Amplify UI use only. May be removed in a future release.\n *\n * Hook to get the current breakpoint of the provided theme.\n * @returns {Breakpoint}\n */\nconst useThemeBreakpoint = () => {\n const { breakpoints: { values: breakpoints, defaultBreakpoint }, } = useTheme();\n const breakpoint = useBreakpoint({\n breakpoints,\n defaultBreakpoint,\n });\n return breakpoint;\n};\n\nexport { useThemeBreakpoint };\n","import { useActor } from '@xstate/react';\nimport { useFaceLivenessDetector } from '../providers/FaceLivenessDetectorProvider.mjs';\n\n// TODO: Add type annotations. Currently typing the actors returned from Xstate is difficult\n// because the interpreter and state can not be used to form a type.\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction useLivenessActor() {\n const { service } = useFaceLivenessDetector();\n const actor = useActor(service);\n return actor;\n}\n\nexport { useLivenessActor };\n","import { useSelector } from '@xstate/react';\nimport { useFaceLivenessDetector } from '../providers/FaceLivenessDetectorProvider.mjs';\n\nfunction createLivenessSelector(selector) {\n return selector;\n}\nfunction useLivenessSelector(selector) {\n const { service } = useFaceLivenessDetector();\n return useSelector(service, selector);\n}\n\nexport { createLivenessSelector, useLivenessSelector };\n","import { useRef, useState, useEffect } from 'react';\nimport { isObject } from '@aws-amplify/ui';\nimport { STATIC_VIDEO_CONSTRAINTS } from '../utils/helpers.mjs';\n\nfunction useMediaStreamInVideo(stream) {\n const height = STATIC_VIDEO_CONSTRAINTS.height.ideal;\n const width = STATIC_VIDEO_CONSTRAINTS.width.ideal;\n const videoRef = useRef(null);\n const [videoHeight, setVideoHeight] = useState(height);\n const [videoWidth, setVideoWidth] = useState(width);\n useEffect(() => {\n if (stream) {\n if (isObject(videoRef.current)) {\n videoRef.current.srcObject = stream;\n }\n const { height: streamHeight, width: streamWidth } = stream\n .getTracks()[0]\n .getSettings();\n setVideoHeight(streamHeight);\n setVideoWidth(streamWidth);\n }\n return () => {\n if (stream) {\n stream.getTracks().forEach((track) => {\n stream.removeTrack(track);\n track.stop();\n });\n }\n };\n }, [stream]);\n return {\n videoRef,\n videoHeight,\n videoWidth,\n };\n}\n\nexport { useMediaStreamInVideo };\n","var LivenessClassNames;\n(function (LivenessClassNames) {\n LivenessClassNames[\"CameraModule\"] = \"amplify-liveness-camera-module\";\n LivenessClassNames[\"CancelContainer\"] = \"amplify-liveness-cancel-container\";\n LivenessClassNames[\"CancelButton\"] = \"amplify-liveness-cancel-button\";\n LivenessClassNames[\"CountdownContainer\"] = \"amplify-liveness-countdown-container\";\n LivenessClassNames[\"DescriptionBullet\"] = \"amplify-liveness-description-bullet\";\n LivenessClassNames[\"DescriptionBulletIndex\"] = \"amplify-liveness-description-bullet__index\";\n LivenessClassNames[\"DescriptionBulletIndexText\"] = \"amplify-liveness-description-bullet__index__text\";\n LivenessClassNames[\"DescriptionBulletMessage\"] = \"amplify-liveness-description-bullet__message\";\n LivenessClassNames[\"ErrorModal\"] = \"amplify-liveness-error-modal\";\n LivenessClassNames[\"ErrorModalHeading\"] = \"amplify-liveness-error-modal__heading\";\n LivenessClassNames[\"FadeOut\"] = \"amplify-liveness-fade-out\";\n LivenessClassNames[\"FreshnessCanvas\"] = \"amplify-liveness-freshness-canvas\";\n LivenessClassNames[\"InstructionList\"] = \"amplify-liveness-instruction-list\";\n LivenessClassNames[\"InstructionOverlay\"] = \"amplify-liveness-instruction-overlay\";\n LivenessClassNames[\"Hint\"] = \"amplify-liveness-hint\";\n LivenessClassNames[\"HintText\"] = \"amplify-liveness-hint__text\";\n LivenessClassNames[\"LandscapeErrorModal\"] = \"amplify-liveness-landscape-error-modal\";\n LivenessClassNames[\"LandscapeErrorModalButton\"] = \"amplify-liveness-landscape-error-modal__button\";\n LivenessClassNames[\"LandscapeErrorModalHeader\"] = \"amplify-liveness-landscape-error-modal__header\";\n LivenessClassNames[\"Loader\"] = \"amplify-liveness-loader\";\n LivenessClassNames[\"MatchIndicator\"] = \"amplify-liveness-match-indicator\";\n LivenessClassNames[\"OvalCanvas\"] = \"amplify-liveness-oval-canvas\";\n LivenessClassNames[\"OpaqueOverlay\"] = \"amplify-liveness-overlay-opaque\";\n LivenessClassNames[\"Overlay\"] = \"amplify-liveness-overlay\";\n LivenessClassNames[\"Popover\"] = \"amplify-liveness-popover\";\n LivenessClassNames[\"PopoverContainer\"] = \"amplify-liveness-popover__container\";\n LivenessClassNames[\"PopoverAnchor\"] = \"amplify-liveness-popover__anchor\";\n LivenessClassNames[\"PopoverAnchorSecondary\"] = \"amplify-liveness-popover__anchor-secondary\";\n LivenessClassNames[\"RecordingIconContainer\"] = \"amplify-liveness-recording-icon-container\";\n LivenessClassNames[\"RecordingIcon\"] = \"amplify-liveness-recording-icon\";\n LivenessClassNames[\"StartScreenCameraSelect\"] = \"amplify-liveness-start-screen-camera-select\";\n LivenessClassNames[\"StartScreenCameraSelectContainer\"] = \"amplify-liveness-start-screen-camera-select__container\";\n LivenessClassNames[\"StartScreenCameraWaiting\"] = \"amplify-liveness-start-screen-camera-waiting\";\n LivenessClassNames[\"StartScreenHeader\"] = \"amplify-liveness-start-screen-header\";\n LivenessClassNames[\"StartScreenHeaderBody\"] = \"amplify-liveness-start-screen-header__body\";\n LivenessClassNames[\"StartScreenHeaderHeading\"] = \"amplify-liveness-start-screen-header__heading\";\n LivenessClassNames[\"StartScreenWarning\"] = \"amplify-liveness-start-screen-warning\";\n LivenessClassNames[\"StartScreenInstructions\"] = \"amplify-liveness-start-screen-instructions\";\n LivenessClassNames[\"StartScreenInstructionsHeading\"] = \"amplify-liveness-start-screen-instructions__heading\";\n LivenessClassNames[\"Toast\"] = \"amplify-liveness-toast\";\n LivenessClassNames[\"ToastContainer\"] = \"amplify-liveness-toast__container\";\n LivenessClassNames[\"ToastMessage\"] = \"amplify-liveness-toast__message\";\n LivenessClassNames[\"Video\"] = \"amplify-liveness-video\";\n LivenessClassNames[\"VideoAnchor\"] = \"amplify-liveness-video-anchor\";\n})(LivenessClassNames || (LivenessClassNames = {}));\n\nexport { LivenessClassNames };\n","import * as React from 'react';\nimport { useTheme, View, Flex } from '@aws-amplify/ui-react';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst Toast = ({ variation = 'default', size = 'medium', children, isInitial = false, ...rest }) => {\n const { tokens } = useTheme();\n return (React.createElement(View, { className: `${LivenessClassNames.Toast} ${LivenessClassNames.Toast}--${variation} ${LivenessClassNames.Toast}--${size}`, ...(isInitial && { backgroundColor: tokens.colors.background.primary }), ...rest },\n React.createElement(Flex, { className: LivenessClassNames.ToastContainer },\n React.createElement(Flex, { className: LivenessClassNames.ToastMessage, ...(isInitial ? { color: tokens.colors.font.primary } : {}) }, children))));\n};\n\nexport { Toast };\n","import * as React from 'react';\nimport { Flex, Loader, View } from '@aws-amplify/ui-react';\nimport { LivenessClassNames } from '../types/classNames.mjs';\nimport { Toast } from './Toast.mjs';\n\nconst ToastWithLoader = ({ displayText, }) => {\n return (React.createElement(Toast, { \"aria-live\": \"polite\" },\n React.createElement(Flex, { className: LivenessClassNames.HintText },\n React.createElement(Loader, null),\n React.createElement(View, null, displayText))));\n};\n\nexport { ToastWithLoader };\n","import * as React from 'react';\nimport { VisuallyHidden, View } from '@aws-amplify/ui-react';\nimport '../service/machine/machine.mjs';\nimport { FaceMatchState, IlluminationState } from '../service/types/liveness.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport '../service/utils/createStreamingClient/createStreamingClient.mjs';\nimport '../service/utils/freshnessColorDisplay.mjs';\nimport { useLivenessActor } from '../hooks/useLivenessActor.mjs';\nimport { createLivenessSelector, useLivenessSelector } from '../hooks/useLivenessSelector.mjs';\nimport '@aws-amplify/ui';\nimport { Toast } from './Toast.mjs';\nimport { ToastWithLoader } from './ToastWithLoader.mjs';\n\nconst selectErrorState = createLivenessSelector((state) => state.context.errorState);\nconst selectFaceMatchState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.faceMatchState);\nconst selectIlluminationState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.illuminationState);\nconst selectIsFaceFarEnoughBeforeRecording = createLivenessSelector((state) => state.context.isFaceFarEnoughBeforeRecording);\nconst selectFaceMatchStateBeforeStart = createLivenessSelector((state) => state.context.faceMatchStateBeforeStart);\nconst selectFaceMatchPercentage = createLivenessSelector((state) => state.context.faceMatchAssociatedParams?.faceMatchPercentage);\nconst DefaultToast = ({ text, isInitial = false, }) => {\n return (React.createElement(Toast, { size: \"large\", variation: \"primary\", isInitial: isInitial },\n React.createElement(View, { \"aria-live\": \"assertive\" }, text)));\n};\nconst Hint = ({ hintDisplayText }) => {\n const [state] = useLivenessActor();\n // NOTE: Do not change order of these selectors as the unit tests depend on this order\n const errorState = useLivenessSelector(selectErrorState);\n const faceMatchState = useLivenessSelector(selectFaceMatchState);\n const illuminationState = useLivenessSelector(selectIlluminationState);\n const faceMatchStateBeforeStart = useLivenessSelector(selectFaceMatchStateBeforeStart);\n const isFaceFarEnoughBeforeRecordingState = useLivenessSelector(selectIsFaceFarEnoughBeforeRecording);\n const faceMatchPercentage = useLivenessSelector(selectFaceMatchPercentage);\n const isCheckFaceDetectedBeforeStart = state.matches('checkFaceDetectedBeforeStart') ||\n state.matches('detectFaceBeforeStart');\n const isCheckFaceDistanceBeforeRecording = state.matches('checkFaceDistanceBeforeRecording') ||\n state.matches('detectFaceDistanceBeforeRecording');\n const isStartView = state.matches('start') || state.matches('userCancel');\n const isRecording = state.matches('recording');\n const isNotRecording = state.matches('notRecording');\n const isUploading = state.matches('uploading');\n const isCheckSuccessful = state.matches('checkSucceeded');\n const isCheckFailed = state.matches('checkFailed');\n const isFlashingFreshness = state.matches({\n recording: 'flashFreshnessColors',\n });\n const FaceMatchStateStringMap = {\n [FaceMatchState.CANT_IDENTIFY]: hintDisplayText.hintCanNotIdentifyText,\n [FaceMatchState.FACE_IDENTIFIED]: hintDisplayText.hintTooFarText,\n [FaceMatchState.TOO_MANY]: hintDisplayText.hintTooManyFacesText,\n [FaceMatchState.TOO_FAR]: hintDisplayText.hintTooFarText,\n [FaceMatchState.MATCHED]: hintDisplayText.hintHoldFaceForFreshnessText,\n [FaceMatchState.OFF_CENTER]: hintDisplayText.hintFaceOffCenterText,\n };\n const IlluminationStateStringMap = {\n [IlluminationState.BRIGHT]: hintDisplayText.hintIlluminationTooBrightText,\n [IlluminationState.DARK]: hintDisplayText.hintIlluminationTooDarkText,\n [IlluminationState.NORMAL]: hintDisplayText.hintIlluminationNormalText,\n };\n if (isStartView) {\n return (React.createElement(React.Fragment, null,\n React.createElement(VisuallyHidden, { role: \"alert\" }, hintDisplayText.hintCenterFaceInstructionText),\n React.createElement(DefaultToast, { text: hintDisplayText.hintCenterFaceText, isInitial: true })));\n }\n if (errorState ?? (isCheckFailed || isCheckSuccessful)) {\n return null;\n }\n if (!isRecording) {\n if (isCheckFaceDetectedBeforeStart) {\n if (faceMatchStateBeforeStart === FaceMatchState.TOO_MANY) {\n return React.createElement(DefaultToast, { text: hintDisplayText.hintTooManyFacesText });\n }\n return (React.createElement(DefaultToast, { text: hintDisplayText.hintMoveFaceFrontOfCameraText }));\n }\n // Specifically checking for false here because initially the value is undefined and we do not want to show the instruction\n if (isCheckFaceDistanceBeforeRecording &&\n isFaceFarEnoughBeforeRecordingState === false) {\n return React.createElement(DefaultToast, { text: hintDisplayText.hintTooCloseText });\n }\n if (isNotRecording) {\n return (React.createElement(ToastWithLoader, { displayText: hintDisplayText.hintConnectingText }));\n }\n if (isUploading) {\n return (React.createElement(React.Fragment, null,\n React.createElement(VisuallyHidden, { \"aria-live\": \"assertive\" }, hintDisplayText.hintCheckCompleteText),\n React.createElement(ToastWithLoader, { displayText: hintDisplayText.hintVerifyingText })));\n }\n if (illuminationState && illuminationState !== IlluminationState.NORMAL) {\n return (React.createElement(DefaultToast, { text: IlluminationStateStringMap[illuminationState] }));\n }\n }\n if (isFlashingFreshness) {\n return React.createElement(DefaultToast, { text: hintDisplayText.hintHoldFaceForFreshnessText });\n }\n if (isRecording && !isFlashingFreshness) {\n // During face matching, we want to only show the\n // TOO_FAR texts. For FACE_IDENTIFIED, CANT_IDENTIFY, TOO_MANY\n // we are defaulting to the TOO_FAR text (for now).\n let resultHintString = FaceMatchStateStringMap[FaceMatchState.TOO_FAR];\n if (faceMatchState === FaceMatchState.MATCHED) {\n resultHintString = FaceMatchStateStringMap[faceMatchState];\n }\n // If the face is outside the oval set the aria-label to a string about centering face in oval\n let a11yHintString = resultHintString;\n if (faceMatchState === FaceMatchState.OFF_CENTER) {\n a11yHintString = FaceMatchStateStringMap[faceMatchState];\n }\n else if (\n // If the face match percentage reaches 50% append it to the a11y label\n faceMatchState === FaceMatchState.TOO_FAR &&\n faceMatchPercentage > 50) {\n a11yHintString = hintDisplayText.hintMatchIndicatorText;\n }\n return (React.createElement(Toast, { size: \"large\", variation: 'primary' },\n React.createElement(VisuallyHidden, { \"aria-live\": \"assertive\" }, a11yHintString),\n React.createElement(View, { \"aria-label\": a11yHintString }, resultHintString)));\n }\n return null;\n};\n\nexport { Hint, selectErrorState, selectFaceMatchState, selectFaceMatchStateBeforeStart, selectIlluminationState, selectIsFaceFarEnoughBeforeRecording };\n","import React__default from 'react';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst MatchIndicator = ({ percentage, initialPercentage = 25, testId, }) => {\n const [matchPercentage, setMatchPercentage] = React__default.useState(initialPercentage);\n React__default.useEffect(() => {\n if (percentage < 0) {\n setMatchPercentage(0);\n }\n else if (percentage > 100) {\n setMatchPercentage(100);\n }\n else {\n setMatchPercentage(percentage);\n }\n }, [percentage]);\n const percentageStyles = {\n '--percentage': `${matchPercentage}%`,\n };\n return (React__default.createElement(\"div\", { className: LivenessClassNames.MatchIndicator, \"data-testid\": testId },\n React__default.createElement(\"div\", { className: `${LivenessClassNames.MatchIndicator}__bar`, style: percentageStyles, role: \"progressbar\", \"aria-label\": \"MatchIndicator\", \"aria-valuenow\": percentage, \"aria-valuetext\": `${percentage}% face fit` })));\n};\n\nexport { MatchIndicator };\n","import * as React from 'react';\nimport { Flex } from '@aws-amplify/ui-react';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst Overlay = ({ children, horizontal = 'center', vertical = 'center', className, ...rest }) => {\n return (React.createElement(Flex, { className: `${LivenessClassNames.Overlay} ${className}`, alignItems: horizontal, justifyContent: vertical, ...rest }, children));\n};\n\nexport { Overlay };\n","const defaultErrorDisplayText = {\n errorLabelText: 'Error',\n connectionTimeoutHeaderText: 'Connection time out',\n connectionTimeoutMessageText: 'Connection has timed out.',\n timeoutHeaderText: 'Time out',\n timeoutMessageText: \"Face didn't fit inside oval in time limit. Try again and completely fill the oval with face in it.\",\n faceDistanceHeaderText: 'Forward movement detected',\n faceDistanceMessageText: 'Avoid moving closer when connecting.',\n multipleFacesHeaderText: 'Multiple faces detected',\n multipleFacesMessageText: 'Ensure only one face is present in front of the camera when connecting.',\n clientHeaderText: 'Client error',\n clientMessageText: 'Check failed due to client issue',\n serverHeaderText: 'Server issue',\n serverMessageText: 'Cannot complete check due to server issue',\n landscapeHeaderText: 'Landscape orientation not supported',\n landscapeMessageText: 'Rotate your device to portrait (vertical) orientation.',\n portraitMessageText: 'Ensure your device remains in portrait (vertical) orientation for the check’s duration.',\n tryAgainText: 'Try again',\n};\nconst defaultLivenessDisplayText = {\n cameraMinSpecificationsHeadingText: 'Camera does not meet minimum specifications',\n cameraMinSpecificationsMessageText: 'Camera must support at least 320*240 resolution and 15 frames per second.',\n cameraNotFoundHeadingText: 'Camera is not accessible.',\n cameraNotFoundMessageText: 'Check that a camera is connected and there is not another application using the camera. You may have to go into settings to grant camera permissions and close out all instances of your browser and retry.',\n a11yVideoLabelText: 'Webcam for liveness check',\n cancelLivenessCheckText: 'Cancel Liveness check',\n goodFitCaptionText: 'Good fit',\n goodFitAltText: \"Ilustration of a person's face, perfectly fitting inside of an oval.\",\n hintCenterFaceText: 'Center your face',\n hintCenterFaceInstructionText: 'Instruction: Before starting the check, make sure your camera is at the center top of your screen and center your face to the camera. When the check starts an oval will show up in the center. You will be prompted to move forward into the oval and then prompted to hold still. After holding still for a few seconds, you should hear check complete.',\n hintFaceOffCenterText: 'Face is not in the oval, center your face to the camera.',\n hintMoveFaceFrontOfCameraText: 'Move face in front of camera',\n hintTooManyFacesText: 'Ensure only one face is in front of camera',\n hintFaceDetectedText: 'Face detected',\n hintCanNotIdentifyText: 'Move face in front of camera',\n hintTooCloseText: 'Move back',\n hintTooFarText: 'Move closer',\n hintConnectingText: 'Connecting...',\n hintVerifyingText: 'Verifying...',\n hintCheckCompleteText: 'Check complete',\n hintIlluminationTooBrightText: 'Move to dimmer area',\n hintIlluminationTooDarkText: 'Move to brighter area',\n hintIlluminationNormalText: 'Lighting conditions normal',\n hintHoldFaceForFreshnessText: 'Hold still',\n hintMatchIndicatorText: '50% completed. Keep moving closer.',\n photosensitivityWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',\n photosensitivityWarningHeadingText: 'Photosensitivity warning',\n photosensitivityWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',\n photosensitivityWarningLabelText: 'More information about photosensitivity',\n photosensitivyWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',\n photosensitivyWarningHeadingText: 'Photosensitivity warning',\n photosensitivyWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',\n photosensitivyWarningLabelText: 'More information about photosensitivity',\n retryCameraPermissionsText: 'Retry',\n recordingIndicatorText: 'Rec',\n startScreenBeginCheckText: 'Start video check',\n tooFarCaptionText: 'Too far',\n tooFarAltText: \"Illustration of a person's face inside of an oval; there is a gap between the perimeter of the face and the boundaries of the oval.\",\n waitingCameraPermissionText: 'Waiting for you to allow camera permission.',\n ...defaultErrorDisplayText,\n};\n\nexport { defaultErrorDisplayText, defaultLivenessDisplayText };\n","import React__default from 'react';\nimport { Flex, Text, Button } from '@aws-amplify/ui-react';\nimport { AlertIcon } from '@aws-amplify/ui-react/internal';\nimport '../service/machine/machine.mjs';\nimport '../service/types/liveness.mjs';\nimport { LivenessErrorState } from '../service/types/error.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport '../service/utils/createStreamingClient/createStreamingClient.mjs';\nimport '../service/utils/freshnessColorDisplay.mjs';\nimport { Toast } from './Toast.mjs';\nimport { Overlay } from './Overlay.mjs';\nimport { defaultErrorDisplayText } from '../displayText.mjs';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst renderToastErrorModal = (props) => {\n const { error: errorState, displayText } = props;\n const { connectionTimeoutHeaderText, connectionTimeoutMessageText, errorLabelText, timeoutHeaderText, timeoutMessageText, faceDistanceHeaderText, faceDistanceMessageText, multipleFacesHeaderText, multipleFacesMessageText, clientHeaderText, clientMessageText, serverHeaderText, serverMessageText, } = displayText;\n let heading;\n let message;\n switch (errorState) {\n case LivenessErrorState.CONNECTION_TIMEOUT:\n heading = connectionTimeoutHeaderText;\n message = connectionTimeoutMessageText;\n break;\n case LivenessErrorState.TIMEOUT:\n heading = timeoutHeaderText;\n message = timeoutMessageText;\n break;\n case LivenessErrorState.FACE_DISTANCE_ERROR:\n heading = faceDistanceHeaderText;\n message = faceDistanceMessageText;\n break;\n case LivenessErrorState.MULTIPLE_FACES_ERROR:\n heading = multipleFacesHeaderText;\n message = multipleFacesMessageText;\n break;\n case LivenessErrorState.RUNTIME_ERROR:\n heading = clientHeaderText;\n message = clientMessageText;\n break;\n case LivenessErrorState.SERVER_ERROR:\n default:\n heading = serverHeaderText;\n message = serverMessageText;\n }\n return (React__default.createElement(React__default.Fragment, null,\n React__default.createElement(Flex, { className: LivenessClassNames.ErrorModal },\n React__default.createElement(AlertIcon, { ariaLabel: errorLabelText, role: \"img\", variation: \"error\" }),\n React__default.createElement(Text, { className: LivenessClassNames.ErrorModalHeading, id: \"amplify-liveness-error-heading\" }, heading)),\n React__default.createElement(Text, { id: \"amplify-liveness-error-message\" }, message)));\n};\nconst renderErrorModal = ({ errorState, overrideErrorDisplayText, }) => {\n const displayText = {\n ...defaultErrorDisplayText,\n ...overrideErrorDisplayText,\n };\n if (errorState === LivenessErrorState.CAMERA_ACCESS_ERROR ||\n errorState === LivenessErrorState.CAMERA_FRAMERATE_ERROR ||\n errorState === LivenessErrorState.MOBILE_LANDSCAPE_ERROR) {\n return null;\n }\n else {\n return renderToastErrorModal({\n error: errorState,\n displayText,\n });\n }\n};\nconst FaceLivenessErrorModal = (props) => {\n const { children, onRetry, displayText: overrideErrorDisplayText } = props;\n const displayText = {\n ...defaultErrorDisplayText,\n ...overrideErrorDisplayText,\n };\n const { tryAgainText } = displayText;\n return (React__default.createElement(Overlay, { className: LivenessClassNames.OpaqueOverlay },\n React__default.createElement(Toast, { \"aria-labelledby\": \"amplify-liveness-error-heading\", \"aria-describedby\": \"amplify-liveness-error-message\", role: \"alertdialog\" },\n children,\n React__default.createElement(Flex, { justifyContent: \"center\" },\n React__default.createElement(Button, { variation: \"primary\", type: \"button\", onClick: onRetry }, tryAgainText)))));\n};\n\nexport { FaceLivenessErrorModal, renderErrorModal };\n","import React__default from 'react';\nimport { Button } from '@aws-amplify/ui-react';\nimport { IconClose } from '@aws-amplify/ui-react/internal';\nimport { useLivenessActor } from '../hooks/useLivenessActor.mjs';\nimport '@xstate/react';\nimport '../providers/FaceLivenessDetectorProvider.mjs';\nimport '@aws-amplify/ui';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst CancelButton = ({ ariaLabel }) => {\n const [state, send] = useLivenessActor();\n const isFinalState = state.done;\n const handleClick = () => {\n send({\n type: 'CANCEL',\n });\n };\n if (isFinalState)\n return null;\n return (React__default.createElement(Button, { autoFocus: true, variation: \"link\", onClick: handleClick, size: \"large\", className: LivenessClassNames.CancelButton, \"aria-label\": ariaLabel },\n React__default.createElement(IconClose, { \"aria-hidden\": \"true\", \"data-testid\": \"close-icon\" })));\n};\n\nexport { CancelButton };\n","import React__default from 'react';\nimport { Flex, Icon, Text } from '@aws-amplify/ui-react';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst RecordingIcon = ({ children }) => {\n return (React__default.createElement(Flex, { className: LivenessClassNames.RecordingIcon },\n React__default.createElement(Flex, { \"data-testid\": \"rec-icon\", justifyContent: \"center\" },\n React__default.createElement(Icon, { viewBox: { width: 20, height: 20 }, width: \"20\", height: \"20\" },\n React__default.createElement(\"circle\", { cx: \"10\", cy: \"10\", r: \"8\", fill: \"red\" }))),\n React__default.createElement(Text, { as: \"span\", fontWeight: \"bold\" }, children)));\n};\n\nexport { RecordingIcon };\n","import * as React from 'react';\nimport { Button, Flex } from '@aws-amplify/ui-react';\nimport { useThemeBreakpoint, AlertIcon } from '@aws-amplify/ui-react/internal';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\n/**\n * Copied from src/primitives/Alert/AlertIcon.tsx because we want to re-use the icon but it is not currently expored by AlertIcon.\n * We currently don't want to make a change to the AlertIcon primitive itself and may expose the icon in the future but for now so as not to introduce cross component dependencies we have duplicated it.\n */\nconst LivenessIconWithPopover = ({ children, headingText, labelText }) => {\n const breakpoint = useThemeBreakpoint();\n const [shouldShowPopover, setShouldShowPopover] = React.useState(false);\n const wrapperRef = React.useRef(null);\n const isMobileScreen = breakpoint === 'base';\n React.useEffect(() => {\n function handleClickOutside(event) {\n if (shouldShowPopover &&\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target)) {\n setShouldShowPopover(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [wrapperRef, shouldShowPopover]);\n return (React.createElement(\"div\", { className: LivenessClassNames.Popover, ref: wrapperRef },\n React.createElement(Button, { \"aria-controls\": \"photosensitivity-description\", \"aria-expanded\": shouldShowPopover, role: \"alertdialog\", \"aria-label\": labelText, \"aria-describedby\": \"photosensitivity-description\", colorTheme: \"info\", id: \"popover-button\", onClick: () => setShouldShowPopover(!shouldShowPopover), testId: \"popover-icon\" },\n React.createElement(AlertIcon, { ariaHidden: true, variation: \"info\" })),\n shouldShowPopover && (React.createElement(React.Fragment, null,\n React.createElement(Flex, { className: LivenessClassNames.PopoverAnchor }),\n React.createElement(Flex, { className: LivenessClassNames.PopoverAnchorSecondary }),\n React.createElement(Flex, { \"aria-hidden\": !shouldShowPopover, \"aria-label\": headingText, className: LivenessClassNames.PopoverContainer, \"data-testid\": \"popover-text\", id: \"photosensitivity-description\", left: isMobileScreen ? -190 : -108, role: \"alertdialog\" }, children)))));\n};\nLivenessIconWithPopover.displayName = 'LivenessIconWithPopover';\n\nexport { LivenessIconWithPopover };\n","import React__default from 'react';\nimport { ComponentClassName } from '@aws-amplify/ui';\nimport { View, Flex } from '@aws-amplify/ui-react';\nimport { CancelButton } from './CancelButton.mjs';\nimport '../service/machine/machine.mjs';\nimport '../service/types/liveness.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport '../service/utils/createStreamingClient/createStreamingClient.mjs';\nimport '../service/utils/freshnessColorDisplay.mjs';\nimport '@xstate/react';\nimport '../providers/FaceLivenessDetectorProvider.mjs';\nimport { LivenessClassNames } from '../types/classNames.mjs';\nimport { RecordingIcon } from './RecordingIcon.mjs';\nimport { LivenessIconWithPopover } from './LivenessIconWithPopover.mjs';\n\nconst DefaultPhotosensitiveWarning = ({ bodyText, headingText, infoText, labelText, }) => {\n return (React__default.createElement(Flex, { className: `${ComponentClassName.Alert} ${LivenessClassNames.StartScreenWarning}`, style: { zIndex: '3' } },\n React__default.createElement(View, { flex: \"1\" },\n React__default.createElement(View, { className: ComponentClassName.AlertHeading }, headingText),\n React__default.createElement(View, { className: ComponentClassName.AlertBody }, bodyText)),\n React__default.createElement(LivenessIconWithPopover, { labelText: labelText, headingText: headingText }, infoText)));\n};\nconst DefaultRecordingIcon = ({ recordingIndicatorText, }) => {\n return (React__default.createElement(View, { className: LivenessClassNames.RecordingIconContainer },\n React__default.createElement(RecordingIcon, null, recordingIndicatorText)));\n};\nconst DefaultCancelButton = ({ cancelLivenessCheckText, }) => {\n return (React__default.createElement(View, { className: LivenessClassNames.CancelContainer },\n React__default.createElement(CancelButton, { ariaLabel: cancelLivenessCheckText })));\n};\n\nexport { DefaultCancelButton, DefaultPhotosensitiveWarning, DefaultRecordingIcon };\n","import React__default, { useRef, useState } from 'react';\nimport { classNames } from '@aws-amplify/ui';\nimport { Loader, View, Flex, Text, Label, SelectField, Button } from '@aws-amplify/ui-react';\nimport { useColorMode } from '@aws-amplify/ui-react/internal';\nimport '../service/machine/machine.mjs';\nimport { FaceMatchState } from '../service/types/liveness.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport { drawStaticOval, clearOvalCanvas } from '../service/utils/liveness.mjs';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport '../service/utils/createStreamingClient/createStreamingClient.mjs';\nimport '../service/utils/freshnessColorDisplay.mjs';\nimport { useLivenessActor } from '../hooks/useLivenessActor.mjs';\nimport { useLivenessSelector, createLivenessSelector } from '../hooks/useLivenessSelector.mjs';\nimport { useMediaStreamInVideo } from '../hooks/useMediaStreamInVideo.mjs';\nimport { LivenessClassNames } from '../types/classNames.mjs';\nimport { selectErrorState, Hint } from '../shared/Hint.mjs';\nimport { MatchIndicator } from '../shared/MatchIndicator.mjs';\nimport { Overlay } from '../shared/Overlay.mjs';\nimport { renderErrorModal, FaceLivenessErrorModal } from '../shared/FaceLivenessErrorModal.mjs';\nimport { DefaultRecordingIcon, DefaultCancelButton, DefaultPhotosensitiveWarning } from '../shared/DefaultStartScreenComponents.mjs';\n\nconst selectVideoConstraints = createLivenessSelector((state) => state.context.videoAssociatedParams?.videoConstraints);\nconst selectVideoStream = createLivenessSelector((state) => state.context.videoAssociatedParams?.videoMediaStream);\nconst selectFaceMatchPercentage = createLivenessSelector((state) => state.context.faceMatchAssociatedParams?.faceMatchPercentage);\nconst selectFaceMatchState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams?.faceMatchState);\nconst selectSelectedDeviceId = createLivenessSelector((state) => state.context.videoAssociatedParams?.selectedDeviceId);\nconst selectSelectableDevices = createLivenessSelector((state) => state.context.videoAssociatedParams?.selectableDevices);\nconst centeredLoader = (React__default.createElement(Loader, { size: \"large\", className: LivenessClassNames.Loader, \"data-testid\": \"centered-loader\" }));\nconst showMatchIndicatorStates = [\n FaceMatchState.TOO_FAR,\n FaceMatchState.CANT_IDENTIFY,\n FaceMatchState.FACE_IDENTIFIED,\n FaceMatchState.OFF_CENTER,\n];\n/**\n * For now we want to memoize the HOC for MatchIndicator because to optimize renders\n * The LivenessCameraModule still needs to be optimized for re-renders and at that time\n * we should be able to remove this memoization\n */\nconst MemoizedMatchIndicator = React__default.memo(MatchIndicator);\nconst LivenessCameraModule = (props) => {\n const { isMobileScreen, isRecordingStopped, instructionDisplayText, streamDisplayText, hintDisplayText, errorDisplayText, cameraDisplayText, components: customComponents, testId, } = props;\n const { cancelLivenessCheckText, recordingIndicatorText } = streamDisplayText;\n const { ErrorView = FaceLivenessErrorModal, PhotosensitiveWarning = DefaultPhotosensitiveWarning, } = customComponents ?? {};\n const [state, send] = useLivenessActor();\n const videoStream = useLivenessSelector(selectVideoStream);\n const videoConstraints = useLivenessSelector(selectVideoConstraints);\n const selectedDeviceId = useLivenessSelector(selectSelectedDeviceId);\n const selectableDevices = useLivenessSelector(selectSelectableDevices);\n const faceMatchPercentage = useLivenessSelector(selectFaceMatchPercentage);\n const faceMatchState = useLivenessSelector(selectFaceMatchState);\n const errorState = useLivenessSelector(selectErrorState);\n const colorMode = useColorMode();\n const { videoRef, videoWidth, videoHeight } = useMediaStreamInVideo(videoStream);\n const canvasRef = useRef(null);\n const freshnessColorRef = useRef(null);\n const [isCameraReady, setIsCameraReady] = useState(false);\n const isCheckingCamera = state.matches('cameraCheck');\n const isWaitingForCamera = state.matches('waitForDOMAndCameraDetails');\n const isStartView = state.matches('start') || state.matches('userCancel');\n const isDetectFaceBeforeStart = state.matches('detectFaceBeforeStart');\n const isRecording = state.matches('recording');\n const isCheckSucceeded = state.matches('checkSucceeded');\n const isFlashingFreshness = state.matches({\n recording: 'flashFreshnessColors',\n });\n // Android/Firefox and iOS flip the values of width/height returned from\n // getUserMedia, so we'll reset these in useLayoutEffect with the videoRef\n // element's intrinsic videoWidth and videoHeight attributes\n const [mediaWidth, setMediaWidth] = useState(videoWidth);\n const [mediaHeight, setMediaHeight] = useState(videoHeight);\n const [aspectRatio, setAspectRatio] = useState(() => videoWidth && videoHeight ? videoWidth / videoHeight : 0);\n React__default.useEffect(() => {\n if (canvasRef?.current && videoRef?.current && videoStream && isStartView) {\n drawStaticOval(canvasRef.current, videoRef.current, videoStream);\n }\n }, [canvasRef, videoRef, videoStream, colorMode, isStartView]);\n React__default.useEffect(() => {\n const updateColorModeHandler = (e) => {\n if (e.matches &&\n canvasRef?.current &&\n videoRef?.current &&\n videoStream &&\n isStartView) {\n drawStaticOval(canvasRef.current, videoRef.current, videoStream);\n }\n };\n const darkModePreference = window.matchMedia('(prefers-color-scheme: dark)');\n const lightModePreference = window.matchMedia('(prefers-color-scheme: light)');\n darkModePreference.addEventListener('change', updateColorModeHandler);\n lightModePreference.addEventListener('change', updateColorModeHandler);\n return () => {\n darkModePreference.removeEventListener('change', updateColorModeHandler);\n lightModePreference.addEventListener('change', updateColorModeHandler);\n };\n }, [canvasRef, videoRef, videoStream, isStartView]);\n React__default.useLayoutEffect(() => {\n if (isCameraReady) {\n send({\n type: 'SET_DOM_AND_CAMERA_DETAILS',\n data: {\n videoEl: videoRef.current,\n canvasEl: canvasRef.current,\n freshnessColorEl: freshnessColorRef.current,\n isMobile: isMobileScreen,\n },\n });\n }\n if (videoRef.current) {\n setMediaWidth(videoRef.current.videoWidth);\n setMediaHeight(videoRef.current.videoHeight);\n setAspectRatio(videoRef.current.videoWidth / videoRef.current.videoHeight);\n }\n }, [send, videoRef, isCameraReady, isMobileScreen]);\n React__default.useEffect(() => {\n if (isDetectFaceBeforeStart) {\n clearOvalCanvas({ canvas: canvasRef.current });\n }\n }, [isDetectFaceBeforeStart]);\n const photoSensitivityWarning = React__default.useMemo(() => {\n return (React__default.createElement(View, { style: { visibility: isStartView ? 'visible' : 'hidden' } },\n React__default.createElement(PhotosensitiveWarning, { bodyText: instructionDisplayText.photosensitivityWarningBodyText, headingText: instructionDisplayText.photosensitivityWarningHeadingText, infoText: instructionDisplayText.photosensitivityWarningInfoText, labelText: instructionDisplayText.photosensitivityWarningLabelText })));\n }, [PhotosensitiveWarning, instructionDisplayText, isStartView]);\n const handleMediaPlay = () => {\n setIsCameraReady(true);\n };\n const beginLivenessCheck = React__default.useCallback(() => {\n send({\n type: 'BEGIN',\n });\n }, [send]);\n const onCameraChange = React__default.useCallback((e) => {\n const newDeviceId = e.target.value;\n const changeCamera = async () => {\n const newStream = await navigator.mediaDevices.getUserMedia({\n video: {\n ...videoConstraints,\n deviceId: { exact: newDeviceId },\n },\n audio: false,\n });\n send({\n type: 'UPDATE_DEVICE_AND_STREAM',\n data: { newDeviceId, newStream },\n });\n };\n changeCamera();\n }, [videoConstraints, send]);\n if (isCheckingCamera) {\n return (React__default.createElement(Flex, { justifyContent: 'center', className: LivenessClassNames.StartScreenCameraWaiting },\n React__default.createElement(Loader, { size: \"large\", className: LivenessClassNames.Loader, \"data-testid\": \"centered-loader\", position: \"unset\" }),\n React__default.createElement(Text, { fontSize: \"large\", fontWeight: \"bold\", \"data-testid\": \"waiting-camera-permission\", className: `${LivenessClassNames.StartScreenCameraWaiting}__text` }, cameraDisplayText.waitingCameraPermissionText)));\n }\n // We don't show full screen camera on the pre check screen (isStartView/isWaitingForCamera)\n const shouldShowFullScreenCamera = isMobileScreen && !isStartView && !isWaitingForCamera;\n return (React__default.createElement(React__default.Fragment, null,\n photoSensitivityWarning,\n React__default.createElement(Flex, { className: classNames(LivenessClassNames.CameraModule, shouldShowFullScreenCamera &&\n `${LivenessClassNames.CameraModule}--mobile`), \"data-testid\": testId, gap: \"zero\" },\n !isCameraReady && centeredLoader,\n React__default.createElement(Overlay, { horizontal: \"center\", vertical: isRecording && !isFlashingFreshness ? 'start' : 'space-between', className: LivenessClassNames.InstructionOverlay },\n isRecording && (React__default.createElement(DefaultRecordingIcon, { recordingIndicatorText: recordingIndicatorText })),\n !isStartView && !isWaitingForCamera && !isCheckSucceeded && (React__default.createElement(DefaultCancelButton, { cancelLivenessCheckText: cancelLivenessCheckText })),\n React__default.createElement(Flex, { className: classNames(LivenessClassNames.Hint, shouldShowFullScreenCamera && `${LivenessClassNames.Hint}--mobile`) },\n React__default.createElement(Hint, { hintDisplayText: hintDisplayText })),\n errorState && (React__default.createElement(ErrorView, { onRetry: () => {\n send({ type: 'CANCEL' });\n }, displayText: errorDisplayText }, renderErrorModal({\n errorState,\n overrideErrorDisplayText: errorDisplayText,\n }))),\n isRecording &&\n !isFlashingFreshness &&\n showMatchIndicatorStates.includes(faceMatchState) ? (React__default.createElement(MemoizedMatchIndicator, { percentage: Math.ceil(faceMatchPercentage) })) : null),\n React__default.createElement(View, { as: \"canvas\", ref: freshnessColorRef, className: LivenessClassNames.FreshnessCanvas, hidden: true }),\n React__default.createElement(View, { className: LivenessClassNames.VideoAnchor, style: {\n aspectRatio: `${aspectRatio}`,\n } },\n React__default.createElement(\"video\", { ref: videoRef, muted: true, autoPlay: true, playsInline: true, width: mediaWidth, height: mediaHeight, onCanPlay: handleMediaPlay, \"data-testid\": \"video\", className: classNames(LivenessClassNames.Video, isRecordingStopped && LivenessClassNames.FadeOut), \"aria-label\": cameraDisplayText.a11yVideoLabelText }),\n React__default.createElement(Flex, { className: classNames(LivenessClassNames.OvalCanvas, shouldShowFullScreenCamera &&\n `${LivenessClassNames.OvalCanvas}--mobile`, isRecordingStopped && LivenessClassNames.FadeOut) },\n React__default.createElement(View, { as: \"canvas\", ref: canvasRef })),\n isStartView &&\n !isMobileScreen &&\n selectableDevices &&\n selectableDevices.length > 1 && (React__default.createElement(Flex, { className: LivenessClassNames.StartScreenCameraSelect },\n React__default.createElement(View, { className: LivenessClassNames.StartScreenCameraSelectContainer },\n React__default.createElement(Label, { htmlFor: \"amplify-liveness-camera-select\", className: `${LivenessClassNames.StartScreenCameraSelect}__label` }, \"Camera:\"),\n React__default.createElement(SelectField, { id: \"amplify-liveness-camera-select\", label: \"Camera\", labelHidden: true, value: selectedDeviceId, onChange: onCameraChange }, selectableDevices?.map((device) => (React__default.createElement(\"option\", { value: device.deviceId, key: device.deviceId }, device.label))))))))),\n isStartView && (React__default.createElement(Flex, { justifyContent: \"center\" },\n React__default.createElement(Button, { variation: \"primary\", type: \"button\", onClick: beginLivenessCheck }, instructionDisplayText.startScreenBeginCheckText)))));\n};\n\nexport { LivenessCameraModule, selectFaceMatchPercentage, selectFaceMatchState, selectSelectableDevices, selectSelectedDeviceId, selectVideoConstraints, selectVideoStream };\n","import * as React from 'react';\nimport { Flex, Text, Button } from '@aws-amplify/ui-react';\nimport { getLandscapeMediaQuery } from '../utils/device.mjs';\nimport { LivenessClassNames } from '../types/classNames.mjs';\n\nconst LandscapeErrorModal = (props) => {\n const { onRetry, header, portraitMessage, landscapeMessage, tryAgainText } = props;\n const [isLandscape, setIsLandscape] = React.useState(true);\n React.useLayoutEffect(() => {\n // Get orientation: landscape media query\n const landscapeMediaQuery = getLandscapeMediaQuery();\n // Set ui state for initial orientation\n setIsLandscape(landscapeMediaQuery.matches);\n // Listen for future orientation changes\n landscapeMediaQuery.addEventListener('change', (e) => {\n setIsLandscape(e.matches);\n });\n // Remove matchMedia event listener\n return () => {\n landscapeMediaQuery.removeEventListener('change', (e) => setIsLandscape(e.matches));\n };\n }, []);\n return (React.createElement(Flex, { className: LivenessClassNames.LandscapeErrorModal, height: isLandscape ? 'auto' : 480 },\n React.createElement(Text, { className: LivenessClassNames.LandscapeErrorModalHeader }, header),\n React.createElement(Text, null, isLandscape ? landscapeMessage : portraitMessage),\n !isLandscape ? (React.createElement(Flex, { className: LivenessClassNames.LandscapeErrorModalButton },\n React.createElement(Button, { variation: \"primary\", type: \"button\", onClick: onRetry }, tryAgainText))) : null));\n};\n\nexport { LandscapeErrorModal };\n","import * as React from 'react';\nimport { Flex, Text, Button, View } from '@aws-amplify/ui-react';\nimport '../service/machine/machine.mjs';\nimport '../service/types/liveness.mjs';\nimport { LivenessErrorState } from '../service/types/error.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport { getLandscapeMediaQuery, isMobileScreen } from '../utils/device.mjs';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport '../service/utils/createStreamingClient/createStreamingClient.mjs';\nimport '../service/utils/freshnessColorDisplay.mjs';\nimport { LivenessCameraModule } from './LivenessCameraModule.mjs';\nimport { useLivenessActor } from '../hooks/useLivenessActor.mjs';\nimport { useLivenessSelector, createLivenessSelector } from '../hooks/useLivenessSelector.mjs';\nimport '@aws-amplify/ui';\nimport { CancelButton } from '../shared/CancelButton.mjs';\nimport { defaultErrorDisplayText } from '../displayText.mjs';\nimport { LandscapeErrorModal } from '../shared/LandscapeErrorModal.mjs';\nimport { selectErrorState } from '../shared/Hint.mjs';\nimport '../types/classNames.mjs';\n\nconst CHECK_CLASS_NAME = 'liveness-detector-check';\nconst CAMERA_ERROR_TEXT_WIDTH = 420;\nconst selectIsRecordingStopped = createLivenessSelector((state) => state.context.isRecordingStopped);\nconst LivenessCheck = ({ instructionDisplayText, hintDisplayText, cameraDisplayText, streamDisplayText, errorDisplayText, components, }) => {\n const [state, send] = useLivenessActor();\n const errorState = useLivenessSelector(selectErrorState);\n const isRecordingStopped = useLivenessSelector(selectIsRecordingStopped);\n const isPermissionDenied = state.matches('permissionDenied');\n const isMobile = isMobileScreen();\n const recheckCameraPermissions = () => {\n send({ type: 'RETRY_CAMERA_CHECK' });\n };\n const { cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, retryCameraPermissionsText, } = cameraDisplayText;\n const { cancelLivenessCheckText } = streamDisplayText;\n React.useLayoutEffect(() => {\n if (isMobile) {\n const sendLandscapeWarning = (isLandscapeMatched) => {\n if (isLandscapeMatched) {\n send({ type: 'MOBILE_LANDSCAPE_WARNING' });\n }\n };\n // Get orientation: landscape media query\n const landscapeMediaQuery = getLandscapeMediaQuery();\n // Send warning based on initial orientation\n sendLandscapeWarning(landscapeMediaQuery.matches);\n // Listen for future orientation changes and send warning\n landscapeMediaQuery.addEventListener('change', (e) => {\n sendLandscapeWarning(e.matches);\n });\n // Remove matchMedia event listener\n return () => {\n landscapeMediaQuery.removeEventListener('change', (e) => sendLandscapeWarning(e.matches));\n };\n }\n }, [isMobile, send]);\n const renderCheck = () => {\n if (errorState === LivenessErrorState.MOBILE_LANDSCAPE_ERROR) {\n const displayText = {\n ...defaultErrorDisplayText,\n ...errorDisplayText,\n };\n const { landscapeHeaderText, portraitMessageText, landscapeMessageText, tryAgainText, } = displayText;\n return (React.createElement(Flex, { backgroundColor: \"background.primary\", direction: \"column\", textAlign: \"center\", alignItems: \"center\", justifyContent: \"center\", position: \"absolute\", width: \"100%\" },\n React.createElement(LandscapeErrorModal, { header: landscapeHeaderText, portraitMessage: portraitMessageText, landscapeMessage: landscapeMessageText, tryAgainText: tryAgainText, onRetry: () => {\n send({\n type: 'CANCEL',\n });\n } })));\n }\n else if (isPermissionDenied) {\n return (React.createElement(Flex, { backgroundColor: \"background.primary\", direction: \"column\", textAlign: \"center\", alignItems: \"center\", justifyContent: \"center\", width: \"100%\", height: 480 },\n React.createElement(Text, { fontSize: \"large\", fontWeight: \"bold\" }, errorState === LivenessErrorState.CAMERA_FRAMERATE_ERROR\n ? cameraMinSpecificationsHeadingText\n : cameraNotFoundHeadingText),\n React.createElement(Text, { maxWidth: CAMERA_ERROR_TEXT_WIDTH }, errorState === LivenessErrorState.CAMERA_FRAMERATE_ERROR\n ? cameraMinSpecificationsMessageText\n : cameraNotFoundMessageText),\n React.createElement(Button, { variation: \"primary\", type: \"button\", onClick: recheckCameraPermissions }, retryCameraPermissionsText),\n React.createElement(View, { position: \"absolute\", top: \"medium\", right: \"medium\" },\n React.createElement(CancelButton, { ariaLabel: cancelLivenessCheckText }))));\n }\n else {\n return (React.createElement(LivenessCameraModule, { isMobileScreen: isMobile, isRecordingStopped: isRecordingStopped, instructionDisplayText: instructionDisplayText, streamDisplayText: streamDisplayText, hintDisplayText: hintDisplayText, errorDisplayText: errorDisplayText, cameraDisplayText: cameraDisplayText, components: components }));\n }\n };\n return (React.createElement(Flex, { direction: \"column\", position: \"relative\", testId: CHECK_CLASS_NAME, className: CHECK_CLASS_NAME, gap: \"xl\" }, renderCheck()));\n};\n\nexport { LivenessCheck, selectIsRecordingStopped };\n","import { defaultLivenessDisplayText } from '../displayText.mjs';\n\nfunction getMergedDisplayText(overrideDisplayText) {\n const mergeField = (correctKey, deprecatedKey) => {\n if (overrideDisplayText[correctKey] &&\n overrideDisplayText[correctKey] !== defaultLivenessDisplayText[correctKey]) {\n return overrideDisplayText[correctKey];\n }\n else if (overrideDisplayText[deprecatedKey] &&\n overrideDisplayText[deprecatedKey] !==\n defaultLivenessDisplayText[correctKey]) {\n return overrideDisplayText[deprecatedKey];\n }\n else {\n return defaultLivenessDisplayText[correctKey];\n }\n };\n return {\n photosensitivityWarningBodyText: mergeField('photosensitivityWarningBodyText', 'photosensitivyWarningBodyText'),\n photosensitivityWarningHeadingText: mergeField('photosensitivityWarningHeadingText', 'photosensitivyWarningHeadingText'),\n photosensitivityWarningInfoText: mergeField('photosensitivityWarningInfoText', 'photosensitivyWarningInfoText'),\n photosensitivityWarningLabelText: mergeField('photosensitivityWarningLabelText', 'photosensitivyWarningLabelText'),\n };\n}\n/**\n * Merges optional displayText prop with\n * defaultLivenessDisplayText and returns more bite size portions to pass\n * down to child components of FaceLivenessDetector.\n * @param overrideDisplayText\n * @returns hintDisplayText, cameraDisplayText, instructionDisplayText, cancelLivenessCheckText\n */\nfunction getDisplayText(overrideDisplayText) {\n const mergedDisplayText = getMergedDisplayText(overrideDisplayText ?? {});\n const displayText = {\n ...defaultLivenessDisplayText,\n ...overrideDisplayText,\n ...mergedDisplayText,\n };\n const { a11yVideoLabelText, cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, cancelLivenessCheckText, connectionTimeoutHeaderText, connectionTimeoutMessageText, clientHeaderText, clientMessageText, errorLabelText, hintCanNotIdentifyText, hintCenterFaceText, hintCenterFaceInstructionText, hintFaceOffCenterText, hintConnectingText, hintFaceDetectedText, hintHoldFaceForFreshnessText, hintIlluminationNormalText, hintIlluminationTooBrightText, hintIlluminationTooDarkText, hintMoveFaceFrontOfCameraText, hintTooManyFacesText, hintTooCloseText, hintTooFarText, hintVerifyingText, hintCheckCompleteText, hintMatchIndicatorText, faceDistanceHeaderText, faceDistanceMessageText, goodFitCaptionText, goodFitAltText, landscapeHeaderText, landscapeMessageText, multipleFacesHeaderText, multipleFacesMessageText, photosensitivityWarningBodyText, photosensitivityWarningHeadingText, photosensitivityWarningInfoText, photosensitivityWarningLabelText, photosensitivyWarningBodyText, photosensitivyWarningHeadingText, photosensitivyWarningInfoText, photosensitivyWarningLabelText, portraitMessageText, retryCameraPermissionsText, recordingIndicatorText, serverHeaderText, serverMessageText, startScreenBeginCheckText, timeoutHeaderText, timeoutMessageText, tooFarCaptionText, tooFarAltText, tryAgainText, waitingCameraPermissionText, } = displayText;\n const hintDisplayText = {\n hintMoveFaceFrontOfCameraText,\n hintTooManyFacesText,\n hintFaceDetectedText,\n hintCanNotIdentifyText,\n hintTooCloseText,\n hintTooFarText,\n hintConnectingText,\n hintVerifyingText,\n hintCheckCompleteText,\n hintIlluminationTooBrightText,\n hintIlluminationTooDarkText,\n hintIlluminationNormalText,\n hintHoldFaceForFreshnessText,\n hintCenterFaceText,\n hintCenterFaceInstructionText,\n hintFaceOffCenterText,\n hintMatchIndicatorText,\n };\n const cameraDisplayText = {\n cameraMinSpecificationsHeadingText,\n cameraMinSpecificationsMessageText,\n cameraNotFoundHeadingText,\n cameraNotFoundMessageText,\n retryCameraPermissionsText,\n waitingCameraPermissionText,\n a11yVideoLabelText,\n };\n const instructionDisplayText = {\n photosensitivityWarningBodyText,\n photosensitivityWarningHeadingText,\n photosensitivityWarningInfoText,\n photosensitivityWarningLabelText,\n photosensitivyWarningBodyText,\n photosensitivyWarningHeadingText,\n photosensitivyWarningInfoText,\n photosensitivyWarningLabelText,\n goodFitCaptionText,\n goodFitAltText,\n tooFarCaptionText,\n tooFarAltText,\n startScreenBeginCheckText,\n };\n const streamDisplayText = {\n cancelLivenessCheckText,\n recordingIndicatorText,\n };\n const errorDisplayText = {\n connectionTimeoutHeaderText,\n connectionTimeoutMessageText,\n errorLabelText,\n timeoutHeaderText,\n timeoutMessageText,\n faceDistanceHeaderText,\n faceDistanceMessageText,\n multipleFacesHeaderText,\n multipleFacesMessageText,\n clientHeaderText,\n clientMessageText,\n serverHeaderText,\n serverMessageText,\n landscapeHeaderText,\n landscapeMessageText,\n portraitMessageText,\n tryAgainText,\n };\n return {\n hintDisplayText,\n cameraDisplayText,\n instructionDisplayText,\n streamDisplayText,\n errorDisplayText,\n };\n}\n\nexport { getDisplayText };\n","import * as React from 'react';\nimport { useInterpret } from '@xstate/react';\nimport { livenessMachine } from './service/machine/machine.mjs';\nimport './service/types/liveness.mjs';\nimport '@tensorflow/tfjs-core';\nimport '@tensorflow-models/face-detection';\nimport '@tensorflow/tfjs-backend-wasm';\nimport '@tensorflow/tfjs-backend-cpu';\nimport '@aws-amplify/core/internals/utils';\nimport '@aws-sdk/client-rekognitionstreaming';\nimport './service/utils/createStreamingClient/createStreamingClient.mjs';\nimport './service/utils/freshnessColorDisplay.mjs';\nimport { View, Flex } from '@aws-amplify/ui-react';\nimport { FaceLivenessDetectorProvider } from './providers/FaceLivenessDetectorProvider.mjs';\nimport { LivenessCheck } from './LivenessCheck/LivenessCheck.mjs';\nimport { getDisplayText } from './utils/getDisplayText.mjs';\n\nconst DETECTOR_CLASS_NAME = 'liveness-detector';\nfunction FaceLivenessDetectorCore(props) {\n const { components, config, displayText } = props;\n const currElementRef = React.useRef(null);\n const { hintDisplayText, cameraDisplayText, instructionDisplayText, streamDisplayText, errorDisplayText, } = getDisplayText(displayText);\n const service = useInterpret(livenessMachine, {\n devTools: process.env.NODE_ENV === 'development',\n context: {\n componentProps: {\n ...props,\n config: config ?? {},\n },\n },\n });\n return (React.createElement(View, { className: DETECTOR_CLASS_NAME, testId: DETECTOR_CLASS_NAME },\n React.createElement(FaceLivenessDetectorProvider, { componentProps: props, service: service },\n React.createElement(Flex, { direction: \"column\", ref: currElementRef },\n React.createElement(LivenessCheck, { instructionDisplayText: instructionDisplayText, hintDisplayText: hintDisplayText, cameraDisplayText: cameraDisplayText, streamDisplayText: streamDisplayText, errorDisplayText: errorDisplayText, components: components })))));\n}\n\nexport { FaceLivenessDetectorCore as default };\n","import * as React from 'react';\nimport { fetchAuthSession } from 'aws-amplify/auth';\nimport FaceLivenessDetectorCore from './FaceLivenessDetectorCore.mjs';\n\nconst credentialProvider = async () => {\n const { credentials } = await fetchAuthSession();\n if (!credentials) {\n throw new Error('No credentials provided');\n }\n return credentials;\n};\nfunction FaceLivenessDetector(props) {\n const { config, ...rest } = props;\n return (React.createElement(FaceLivenessDetectorCore, { ...rest, config: { credentialProvider, ...config } }));\n}\n\nexport { FaceLivenessDetector as default };\n","import { ThemeProvider } from '@aws-amplify/ui-react'\nimport { FaceLivenessDetector } from '@aws-amplify/ui-react-liveness'\nimport { FC, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\n\nimport { useAuth } from '../useAuth'\n\nconst FaceLivenessCheck: FC = () => {\n\tconst sessionId = localStorage.getItem('sessionId')\n\tconst { t, i18n } = useTranslation('unauthorized')\n\tconst { tg } = useTelegram()\n\tconst { MainButton } = useButton()\n\tconst {\n\t\tisLivenessFinishSessionLoading,\n\t\tlivenessFinishSession,\n\t\terrorLivenessFinishSession,\n\t\tisLivenessFinishSessionError,\n\t\tisLivenessFinishSessionSuccess\n\t} = useAuth()\n\tconst { event } = useAmplitude()\n\tconst navigate = useNavigate()\n\n\tuseEffect(() => {\n\t\tconst handleMutations = mutations => {\n\t\t\tmutations.forEach(mutation => {\n\t\t\t\tif (mutation.type === 'childList') {\n\t\t\t\t\tconst parentElement = document.querySelector(\n\t\t\t\t\t\t'.amplify-flex.amplify-liveness-oval-canvas'\n\t\t\t\t\t)\n\n\t\t\t\t\tif (parentElement) {\n\t\t\t\t\t\tconst canvas = parentElement.querySelector('canvas')\n\t\t\t\t\t\tconst context = canvas.getContext('2d')\n\t\t\t\t\t\tcontext.fillStyle = '#F2F2F7'\n\t\t\t\t\t}\n\n\t\t\t\t\tconst messageElement = document.querySelector(\n\t\t\t\t\t\t'.amplify-liveness-toast__message'\n\t\t\t\t\t)\n\t\t\t\t\tif (messageElement) {\n\t\t\t\t\t\tconst lastDiv = messageElement.querySelector('div:last-of-type')\n\t\t\t\t\t\tconst element = document.querySelector('.amplify-liveness-toast')\n\t\t\t\t\t\tif (lastDiv) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tlastDiv.textContent ===\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'registration.face_liveness_check.display_text.hint_hold_face_for_freshness_text'\n\t\t\t\t\t\t\t\t\t) ||\n\t\t\t\t\t\t\t\tlastDiv.textContent ===\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'registration.face_liveness_check.display_text.hint_too_close_text'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\telement.classList.add('warning')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telement.classList.remove('warning')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tconst observer = new MutationObserver(handleMutations)\n\t\tconst config = { childList: true, subtree: true }\n\t\tobserver.observe(document.body, config)\n\t\ttg.BackButton.onClick(() => navigate('/face-liveness/start'))\n\t\tMainButton.hide()\n\n\t\treturn () => observer.disconnect()\n\t}, [])\n\n\tconst handleAnalysisComplete = () => {\n\t\tlivenessFinishSession(sessionId)\n\t\tevent('liveness_processed')\n\t}\n\n\tconst handleError = (error: string) => {\n\t\tnavigate('/face-liveness/error', {\n\t\t\tstate: {\n\t\t\t\terror\n\t\t\t}\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\tif (isLivenessFinishSessionSuccess) {\n\t\t\tnavigate('/congrats')\n\t\t}\n\t\tif (isLivenessFinishSessionError) {\n\t\t\tconst error = errorLivenessFinishSession.response.data.error || ''\n\t\t\tevent('liveness_failed', {\n\t\t\t\treason: error\n\t\t\t})\n\t\t\thandleError(error)\n\t\t}\n\t}, [isLivenessFinishSessionLoading])\n\n\tconst convertKeysToCamelCase = (obj: Object) => {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(obj).map(([key, value]) => [\n\t\t\t\tkey\n\t\t\t\t\t.split('_')\n\t\t\t\t\t.map((word, index) => {\n\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\treturn word\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn word.charAt(0).toUpperCase() + word.slice(1)\n\t\t\t\t\t})\n\t\t\t\t\t.join(''),\n\t\t\t\tvalue\n\t\t\t])\n\t\t)\n\t}\n\n\tconst convertedObject = convertKeysToCamelCase(\n\t\ti18n.getResourceBundle(i18n.language, 'unauthorized').registration\n\t\t\t.face_liveness_check.display_text\n\t)\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t {\n\t\t\t\t\t\t\treturn
\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tdisplayText={convertedObject}\n\t\t\t\t\tregion='us-east-1'\n\t\t\t\t\tonUserCancel={() => {\n\t\t\t\t\t\tnavigate('/face-liveness/start')\n\t\t\t\t\t}}\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tonAnalysisComplete={handleAnalysisComplete}\n\t\t\t\t\tonError={error => {\n\t\t\t\t\t\tevent('liveness_failed', {\n\t\t\t\t\t\t\treason: error.state,\n\t\t\t\t\t\t\tdetails: error?.error?.message\n\t\t\t\t\t\t})\n\t\t\t\t\t\thandleError(error.state.toLowerCase())\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default FaceLivenessCheck\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { NAME_REGEX } from '@/utils/regex'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Name: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst navigate = useNavigate()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setValue, setError, clearErrors } = useForm<{\n\t\tname: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\tname: profile?.name || ''\n\t\t}\n\t})\n\tconst { name } = watch()\n\tconst disabled = Boolean(\n\t\t!name || !name.split(' ').every(word => word.length >= 2)\n\t)\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ name })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tconst isEdited = profile?.name ? name !== profile?.name : false\n\t\t\tevent('name_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tprefill: !!profile?.name,\n\t\t\t\tedited: isEdited\n\t\t\t})\n\t\t\tnavigate('/date')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t\tsetError('name', {})\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.onClick(() => navigate('/welcome'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\tdisabled: disabled\n\t\t})\n\t}, [name])\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t? tg.HapticFeedback.notificationOccurred('error')\n\t\t\t\t\t\t\t: onSubmit()\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tcontrol={control}\n\t\t\t\tonChange={e => {\n\t\t\t\t\tif (NAME_REGEX.test(e.target.value)) {\n\t\t\t\t\t\tclearErrors('name')\n\t\t\t\t\t\tsetValue('name', e.target.value)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\t\t\t\tsetError('name', {})\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tclearErrors('name')\n\t\t\t\t\t\t}, 250)\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tname='name'\n\t\t\t\ttype='text'\n\t\t\t\tplaceholder={t('registration.name.placeholder')}\n\t\t\t\tenterKeyHint='done'\n\t\t\t/>\n\t\t\n\t)\n}\n\nexport default Name\n","import { FC, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { WelcomeScreen } from '@/components/ui'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\n\nconst Welcome: FC = () => {\n\tconst { t } = useTranslation('unauthorized')\n\tconst navigate = useNavigate()\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst { tg } = useTelegram()\n\tconst { MainButton } = useButton()\n\n\tconst onSubmit = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\tconst time = getTimeSpent()\n\t\tevent('registration_start', {\n\t\t\tduration: time\n\t\t})\n\t\tnavigate('/name')\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.hide()\n\t\tMainButton.setParams({\n\t\t\tvariant: 'primary',\n\t\t\ttext: t('welcome.button_create')\n\t\t})\n\t\ttg.setBackgroundColor('#EF3B35')\n\t\tMainButton.onClick(onSubmit)\n\n\t\treturn () => {\n\t\t\ttg.setBackgroundColor('#F2F2F7')\n\t\t}\n\t}, [])\n\n\treturn \n}\n\nexport default Welcome\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { countCharacters } from '@/utils/countCharacters'\nimport { DATE_REGEX } from '@/utils/regex'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Address: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst { event, getTimeSpent, setProperties } = useAmplitude()\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setValue, setError, clearErrors } = useForm<{\n\t\tdate: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\tdate: profile?.birthday || ''\n\t\t}\n\t})\n\tconst { date } = watch()\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ birthday: date })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tevent('date_of_birth_entered', {\n\t\t\t\tduration: time\n\t\t\t})\n\t\t\tsetProperties('year_of_birth', date.slice(-4))\n\t\t\tnavigate('/address')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t\tsetError('date', {})\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.onClick(() => navigate('/name'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\n\t\tconst disabled = Boolean(!date || countCharacters(date) !== 10)\n\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\tdisabled\n\t\t})\n\t}, [date])\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\tconst target = e.target as HTMLInputElement\n\t\t\t\t\t\ttarget.blur()\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tinputMode='numeric'\n\t\t\t\tonChange={e => {\n\t\t\t\t\tif (DATE_REGEX.test(e.target.value.replace(/\\//g, ''))) {\n\t\t\t\t\t\tclearErrors('date')\n\t\t\t\t\t\tlet formattedDate = e.target.value\n\n\t\t\t\t\t\tif (formattedDate.length <= 8) {\n\t\t\t\t\t\t\tformattedDate = e.target.value.replace(/(\\d{2})(?=\\d)/g, '$1/')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (formattedDate.endsWith('/')) {\n\t\t\t\t\t\t\tformattedDate = formattedDate.slice(0, -1)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetValue('date', formattedDate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\t\t\t\tsetError('date', {})\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tclearErrors('date')\n\t\t\t\t\t\t}, 250)\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tcontrol={control}\n\t\t\t\tname='date'\n\t\t\t\tplaceholder={t('registration.date.placeholder')}\n\t\t\t\tenterKeyHint='done'\n\t\t\t/>\n\t\t\n\t)\n}\n\nexport default Address\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { ADDRESS_REGEX } from '@/utils/regex'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Address: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setValue, setError, clearErrors } = useForm<{\n\t\taddress: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\taddress: profile?.address || ''\n\t\t}\n\t})\n\tconst { address } = watch()\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ address })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tconst isEdited = profile?.address ? address !== profile?.address : false\n\t\t\tevent('city_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tprefill: !!profile?.address,\n\t\t\t\tedited: isEdited,\n\t\t\t\tflow: 'registration'\n\t\t\t})\n\t\t\tnavigate('/email')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t\tsetError('address', {})\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.onClick(() => navigate('/date'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\n\t\tMainButton.setParams({\n\t\t\tdisabled: !address\n\t\t})\n\t}, [address])\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\t!address\n\t\t\t\t\t\t\t? tg.HapticFeedback.notificationOccurred('error')\n\t\t\t\t\t\t\t: onSubmit()\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tcontrol={control}\n\t\t\t\tonChange={e => {\n\t\t\t\t\tif (ADDRESS_REGEX.test(e.target.value)) {\n\t\t\t\t\t\tclearErrors('address')\n\t\t\t\t\t\tsetValue('address', e.target.value)\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\t\t\t\tsetError('address', {})\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tclearErrors('address')\n\t\t\t\t\t\t}, 250)\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tname='address'\n\t\t\t\tenterKeyHint='done'\n\t\t\t\ttype='text'\n\t\t\t\tplaceholder={t('registration.address.placeholder')}\n\t\t\t/>\n\t\t\n\t)\n}\n\nexport default Address\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { EMAIL_REGEX } from '@/utils/regex'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Email: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst { event, getTimeSpent, setProperties } = useAmplitude()\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setError, clearErrors } = useForm<{\n\t\temail: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\temail: profile?.email || ''\n\t\t}\n\t})\n\tconst { email } = watch()\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ email })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tsetProperties('email', email)\n\t\t\tevent('email_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tflow: 'registration'\n\t\t\t})\n\t\t\tnavigate('/contacts')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t\tnotifyMessage({ type: 'error', message: t('registration.email.error') })\n\t\t\tsetError('email', {})\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.onClick(() => navigate('/address'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\n\t\tconst disabled = Boolean(!email || !EMAIL_REGEX.test(email))\n\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\tdisabled\n\t\t})\n\t}, [email])\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\tif (!email || !EMAIL_REGEX.test(email)) {\n\t\t\t\t\t\t\ttg.HapticFeedback.notificationOccurred('error')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSubmit()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonBlur={e => {\n\t\t\t\t\tif (!e.target.value || EMAIL_REGEX.test(e.target.value)) {\n\t\t\t\t\t\tclearErrors('email')\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\t\t\t\tnotifyMessage({\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tmessage: t('registration.email.error')\n\t\t\t\t\t\t})\n\t\t\t\t\t\tsetError('email', {})\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tplaceholder='example@gmail.com'\n\t\t\t\tinputMode='email'\n\t\t\t\tname='email'\n\t\t\t\ticon='email'\n\t\t\t\ttype='email'\n\t\t\t\tautoComplete='email'\n\t\t\t\tspellCheck='false'\n\t\t\t\tenterKeyHint='done'\n\t\t\t/>\n\t\t\n\t)\n}\n\nexport default Email\n","import cn from 'clsx'\nimport { useAtomValue } from 'jotai'\nimport { ChangeEvent, FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field, Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { INSTAGRAM_REGEX } from '@/utils/regex'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Contacts: FC = () => {\n\tconst { tg, user } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst navigate = useNavigate()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { event, getTimeSpent, setProperties } = useAmplitude()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setValue, setError, clearErrors } = useForm<{\n\t\ttelegram: string\n\t\tinstagram: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\ttelegram: `t.me/${user.username || profile.telegram || ''}`,\n\t\t\tinstagram: profile?.instagram\n\t\t\t\t? `instagram.com/${profile?.instagram}`\n\t\t\t\t: 'instagram.com/'\n\t\t}\n\t})\n\tconst { telegram, instagram } = watch()\n\n\tuseEffect(() => {\n\t\tif (!user.username) {\n\t\t\tsetError('telegram', {\n\t\t\t\ttype: 'required',\n\t\t\t\tmessage: t('registration.contacts.telegram.warning')\n\t\t\t})\n\t\t}\n\t}, [])\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\n\t\tif (!user.username && !telegram.slice(5)) {\n\t\t\tsetError('telegram', {\n\t\t\t\ttype: 'required',\n\t\t\t\tmessage: t('registration.contacts.telegram.warning')\n\t\t\t})\n\t\t\ttg.requestContact((success, response) => {\n\t\t\t\tevent('phone_requested')\n\n\t\t\t\tif (success) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst phone_number = response.responseUnsafe.contact.phone_number\n\t\t\t\t\tsetValue('telegram', `t.me/+${phone_number}`)\n\t\t\t\t\tMainButton.showProgress()\n\t\t\t\t\tuploadProfile({\n\t\t\t\t\t\ttelegram: `+${phone_number}`,\n\t\t\t\t\t\tinstagram: instagram.slice(14)\n\t\t\t\t\t})\n\t\t\t\t\tsetProperties('username', `+${phone_number}`)\n\t\t\t\t\tevent('phone_sended')\n\t\t\t\t} else {\n\t\t\t\t\tevent('phone_canceled')\n\t\t\t\t\tsetError('telegram', {\n\t\t\t\t\t\tmessage: t('registration.contacts.telegram.warning')\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tMainButton.showProgress()\n\t\t\tuploadProfile({\n\t\t\t\ttelegram: user.username ? user.username : telegram.slice(5),\n\t\t\t\tinstagram: instagram.slice(14)\n\t\t\t})\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t\tif (instagram.slice(14)) setProperties('instagram', instagram.slice(14))\n\t\t\tconst time = getTimeSpent()\n\t\t\tevent('social_media_entered', {\n\t\t\t\tis_instagram_added: !!instagram.slice(14),\n\t\t\t\tduration: time,\n\t\t\t\tflow: 'registration'\n\t\t\t})\n\t\t\tnavigate('/preview-photo')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\tMainButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/email'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\t}, [instagram])\n\n\tconst handleInstagramChange = (e: ChangeEvent) => {\n\t\tconst value = e.target.value\n\t\tconst instagramPrefix = 'instagram.com/'\n\t\tconst userInput = value.slice(instagramPrefix.length)\n\t\tif (INSTAGRAM_REGEX.test(userInput)) {\n\t\t\tclearErrors('instagram')\n\t\t\tsetValue('instagram', instagramPrefix + userInput)\n\t\t} else {\n\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\tsetError('instagram', {})\n\t\t\tsetTimeout(() => {\n\t\t\t\tclearErrors('instagram')\n\t\t\t}, 250)\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tif (e.key === 'Enter') onSubmit()\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={event => {\n\t\t\t\t\t\tconst instagramPrefixLength = 'instagram.com/'.length\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tif (event.target.selectionStart < instagramPrefixLength) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tevent.target.setSelectionRange(instagram.length, instagram.length)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonChange={handleInstagramChange}\n\t\t\t\t\tplaceholder='instagram.com/'\n\t\t\t\t\tname='instagram'\n\t\t\t\t\ticon='instagram'\n\t\t\t\t\tenterKeyHint='done'\n\t\t\t\t/>\n\t\t\t\t {\n\t\t\t\t\t\tif (user.username) return\n\t\t\t\t\t\ttg.openTelegramLink('tg://settings/edit_profile')\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{!user.username && (\n\t\t\t\t\t\n\t\t\t\t\t\tНажми “Продолжить”, чтобы дать приложению доступ к номеру телефона в\n\t\t\t\t\t\tTelegram. Не забудь разрешить сообщения от всех пользователей, чтобы\n\t\t\t\t\t\tподруги могли написать тебе\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t\n\t)\n}\n\nexport default Contacts\n","import cn from 'clsx'\nimport { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Field, Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { countCharacters } from '@/utils/countCharacters'\nimport { EMOJI_REGEX } from '@/utils/regex'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Emoji: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { MainButton } = useButton()\n\tconst navigate = useNavigate()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst { control, watch, setValue, setError, clearErrors } = useForm<{\n\t\temoji: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: {\n\t\t\temoji: profile?.emoji || ''\n\t\t}\n\t})\n\tconst { emoji } = watch()\n\tconst disabled = Boolean(!emoji || countCharacters(emoji) < 10)\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ emoji })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tnavigate('/face-liveness/start')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t\tconst time = getTimeSpent()\n\t\t\tevent('emoji_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tnumber_of_emoji: countCharacters(emoji),\n\t\t\t\temoji: emoji,\n\t\t\t\tflow: 'registration'\n\t\t\t})\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t\tsetError('emoji', {})\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.onClick(() => navigate('/goals'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\tdisabled\n\t\t})\n\t}, [emoji])\n\n\tconst handleEmojiChange = (value: string) => {\n\t\tif (countCharacters(value) > 20) {\n\t\t\tsetError('emoji', {})\n\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\tsetTimeout(() => {\n\t\t\t\tclearErrors('emoji')\n\t\t\t}, 250)\n\t\t\treturn\n\t\t}\n\t\tif (EMOJI_REGEX.test(value)) {\n\t\t\tsetValue('emoji', value)\n\t\t} else {\n\t\t\tif (countCharacters(value)) {\n\t\t\t\tsetError('emoji', {})\n\t\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tclearErrors('emoji')\n\t\t\t\t}, 250)\n\t\t\t}\n\t\t\tconst filteredValue = value.slice(0, -1)\n\t\t\tsetValue('emoji', filteredValue)\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tif (e.key === 'Enter') {\n\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t? tg.HapticFeedback.notificationOccurred('error')\n\t\t\t\t\t\t\t: onSubmit()\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tautoFocus\n\t\t\t\tclassName={cn(\n\t\t\t\t\temoji\n\t\t\t\t\t\t? tg.platform === 'ios'\n\t\t\t\t\t\t\t? 'text-[26px] tracking-[3px] leading-[28px]'\n\t\t\t\t\t\t\t: tg.platform === 'android'\n\t\t\t\t\t\t\t? 'text-[20px] tracking-[3px] leading-[28px]'\n\t\t\t\t\t\t\t: 'text-[26px] tracking-[3px] leading-[28px]'\n\t\t\t\t\t\t: 'py-5'\n\t\t\t\t)}\n\t\t\t\tcontrol={control}\n\t\t\t\tonChange={e =>\n\t\t\t\t\thandleEmojiChange(e.target.value.replace(/[\\r\\n]+/g, ''))\n\t\t\t\t}\n\t\t\t\theight={['macos', 'windows'].includes(tg.platform) ? 110 : 90}\n\t\t\t\tname='emoji'\n\t\t\t\ttype='text'\n\t\t\t\ttypeField='textarea'\n\t\t\t\tenterKeyHint='done'\n\t\t\t/>\n\t\t\t\n\t\t\t\t{countCharacters(emoji)}/20\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Emoji\n","import { useAtomValue } from 'jotai/index'\nimport { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Checkbox, Icon, Typography } from '@/components/ui'\n\nimport { IGoals } from '@/shared/types/auth.interface'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\n\nimport AuthLayout from '../AuthLayout'\n\nconst Goals: FC = () => {\n\tconst { MainButton } = useButton()\n\tconst { t } = useTranslation('common')\n\tconst { tg } = useTelegram()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { event, getTimeSpent, setProperties } = useAmplitude()\n\tconst navigate = useNavigate()\n\tconst {\n\t\tuploadProfile,\n\t\tisUploadProfileSuccess,\n\t\tisUploadProfileError,\n\t\tisUploadProfileLoading\n\t} = useProfile()\n\tconst [goals, setGoals] = useState({\n\t\tonline_chat: profile.goals?.online_chat || false,\n\t\twalks_talks: profile.goals?.walks_talks || false,\n\t\tfun_activities: profile.goals?.fun_activities || false,\n\t\tother: profile.goals?.other || false\n\t})\n\n\tconst options = [\n\t\t{\n\t\t\ticon: 'online-chat',\n\t\t\tvalue: 'online_chat',\n\t\t\tlabel: t('goals.options.online_chat')\n\t\t},\n\t\t{\n\t\t\ticon: 'walks-talks',\n\t\t\tvalue: 'walks_talks',\n\t\t\tlabel: t('goals.options.walks_talks')\n\t\t},\n\t\t{\n\t\t\ticon: 'fun-activities',\n\t\t\tvalue: 'fun_activities',\n\t\t\tlabel: t('goals.options.fun_activities')\n\t\t},\n\t\t{ icon: 'other', value: 'other', label: t('goals.options.other') }\n\t]\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadProfile({ goals })\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadProfileSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tsetProperties('goal_online_chat', goals.online_chat.toString())\n\t\t\tsetProperties('goal_walks_talks', goals.walks_talks.toString())\n\t\t\tsetProperties('goal_fun_activities', goals.fun_activities.toString())\n\t\t\tsetProperties('goal_other', goals.other.toString())\n\t\t\tevent('goals_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tflow: 'registration',\n\t\t\t\t...goals\n\t\t\t})\n\t\t\tnavigate('/emoji')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t}\n\t}, [isUploadProfileLoading])\n\n\tuseEffect(() => {\n\t\tMainButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/authentic/description'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\t\tif (!Object.values(goals).some(value => value)) {\n\t\t\tMainButton.disable()\n\t\t} else {\n\t\t\tMainButton.enable()\n\t\t}\n\t}, [goals])\n\n\tconst handleChange = (value: string) => {\n\t\ttg.HapticFeedback.selectionChanged()\n\t\tsetGoals(prevGoals => ({\n\t\t\t...prevGoals,\n\t\t\t[value]: !prevGoals[value]\n\t\t}))\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{options.map(item => (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t handleChange(item.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Goals\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Icon, Radio, Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\n\nimport AuthLayout from '../AuthLayout'\n\nconst PersonalityType: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('common')\n\tconst { MainButton } = useButton()\n\tconst {\n\t\tuploadDescription,\n\t\tisUploadDescriptionSuccess,\n\t\tisUploadDescriptionLoading,\n\t\tisUploadDescriptionError\n\t} = useProfile()\n\tconst { event, getTimeSpent, setProperties } = useAmplitude()\n\tconst navigate = useNavigate()\n\tconst profile = useAtomValue(profileAtom)\n\tconst [introvert, setIntrovert] = useState(\n\t\tprofile?.description && profile.description.beautiful\n\t\t\t? profile.description.beautiful.introvert\n\t\t\t: false\n\t)\n\n\tconst options = [\n\t\t{\n\t\t\ticon: 'extrovert-outline',\n\t\t\tvalue: false,\n\t\t\tlabel: t('personality_type.options.extrovert')\n\t\t},\n\t\t{\n\t\t\ticon: 'introvert-outline',\n\t\t\tvalue: true,\n\t\t\tlabel: t('personality_type.options.introvert')\n\t\t}\n\t]\n\n\tconst onSubmit = () => {\n\t\tconst activeElement = document.activeElement as HTMLElement\n\t\tactiveElement?.blur()\n\t\tMainButton.showProgress()\n\t\tuploadDescription({\n\t\t\tbeautiful: {\n\t\t\t\tintrovert: introvert\n\t\t\t}\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\tif (isUploadDescriptionSuccess) {\n\t\t\tconst time = getTimeSpent()\n\t\t\tevent('personality_type_entered', {\n\t\t\t\tduration: time,\n\t\t\t\tflow: 'registration'\n\t\t\t})\n\t\t\tsetProperties('introvert', introvert.toString())\n\t\t\tnavigate('/beautiful/description')\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t}\n\t\tif (isUploadDescriptionError) {\n\t\t\tMainButton.hideProgress()\n\t\t}\n\t}, [isUploadDescriptionLoading])\n\n\tuseEffect(() => {\n\t\tMainButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/preview-personal'))\n\t}, [])\n\n\tuseEffect(() => {\n\t\tMainButton.onClick(onSubmit)\n\t}, [introvert])\n\n\tconst handleChange = (newIntrovert: boolean) => {\n\t\ttg.HapticFeedback.selectionChanged()\n\t\tsetIntrovert(newIntrovert)\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{options.map((item, index) => (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t handleChange(item.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default PersonalityType\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function getMoveDirection(prevIndex, nextIndex, length) {\n prevIndex = prevIndex % length;\n nextIndex = nextIndex % length;\n if (nextIndex === prevIndex + 1) {\n return 'next';\n } else if (nextIndex === prevIndex - 1) {\n return 'previous';\n }\n return;\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n if (moveDirection === 'next') {\n swiper.slideNext();\n } else if (moveDirection === 'previous') {\n swiper.slidePrev();\n } else {\n swiper.slideToLoop(index);\n }\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.find(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.find(slideEl => slideEl.classList.contains('swiper-slide-active'));\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","import cn from 'clsx'\nimport { FC, useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport { Autoplay } from 'swiper/modules'\nimport { Swiper, SwiperSlide } from 'swiper/react'\n\nimport { Typography } from '@/components/ui'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\n\nimport AuthLayout from '../AuthLayout'\n\nconst images = [\n\t'https://res.cloudinary.com/wowreels/image/upload/v1739207526/preview-photo-beautiful.png',\n\t'https://res.cloudinary.com/wowreels/image/upload/v1739207531/preview-photo-professional.png',\n\t'https://res.cloudinary.com/wowreels/image/upload/v1739207526/preview-photo-authentic.png'\n]\n\nconst PreviewPhoto: FC = () => {\n\tconst [currentSlide, setCurrentSlide] = useState(0)\n\tconst { t } = useTranslation('unauthorized')\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst { MainButton } = useButton()\n\tconst { tg } = useTelegram()\n\tconst navigate = useNavigate()\n\n\tconst onSubmit = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\tnavigate('/beautiful/photo')\n\t\tconst time = getTimeSpent()\n\t\tevent('photo_intro_viewed', {\n\t\t\tduration: time,\n\t\t\tflow: 'registration'\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/contacts'))\n\t\tMainButton.show()\n\t\tMainButton.onClick(onSubmit)\n\t}, [])\n\n\tconst getTitle = useCallback(() => {\n\t\tswitch (currentSlide) {\n\t\t\tcase 0:\n\t\t\t\treturn t('registration.preview_photo.categories.beautiful')\n\t\t\tcase 1:\n\t\t\t\treturn t('registration.preview_photo.categories.professional')\n\t\t\tcase 2:\n\t\t\t\treturn t('registration.preview_photo.categories.authentic')\n\t\t}\n\t}, [currentSlide])\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{t('registration.preview_photo.title')}{' '}\n\t\t\t\t{getTitle()}!\n\t\t\t\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tsetCurrentSlide(swiper.realIndex)\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{images.map((image, index) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t))}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default PreviewPhoto\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { ButtonLayout, StarImage, Typography } from '@/components/ui'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\nimport { createCloudinaryUrl } from '@/utils/createCloudinaryUrl'\n\nconst PreviewPersonal: FC = () => {\n\tconst { MainButton } = useButton()\n\tconst { t } = useTranslation('unauthorized')\n\tconst { event, getTimeSpent } = useAmplitude()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { tg } = useTelegram()\n\tconst navigate = useNavigate()\n\n\tconst onSubmit = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\tnavigate('/personality-type')\n\t\tconst time = getTimeSpent()\n\t\tevent('photo_outro_viewed', {\n\t\t\tduration: time,\n\t\t\tflow: 'registration'\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/authentic/photo'))\n\t\tMainButton.show()\n\t\tMainButton.onClick(onSubmit)\n\t}, [])\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{t('registration.preview_personal.title')}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{t('registration.preview_personal.description')}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default PreviewPersonal\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { Icon, Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { profileAtom } from '@/store'\n\nconst Congrats: FC = () => {\n\tconst profile = useAtomValue(profileAtom)\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation('common')\n\tconst { MainButton } = useButton()\n\tconst { refetchInitProfile, isInitProfileLoading, isInitProfileError } =\n\t\tuseProfile()\n\tconst { event, getTimeSpent } = useAmplitude()\n\n\tconst onSubmit = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\tlocalStorage.clear()\n\t\tlocalStorage.setItem('instruction', 'true')\n\t\tconst time = getTimeSpent()\n\t\tevent('registration_completed', {\n\t\t\tduration: time\n\t\t})\n\t\trefetchInitProfile()\n\t\tMainButton.showProgress()\n\t}\n\n\tuseEffect(() => {\n\t\tif (isInitProfileError) {\n\t\t\tMainButton.hideProgress()\n\t\t}\n\t}, [isInitProfileLoading])\n\n\tuseEffect(() => {\n\t\ttg.BackButton.hide()\n\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\tbackground: 'bg-neutral-black',\n\t\t\ttext: t('congrats.button_find_friends')\n\t\t})\n\t\tMainButton.onClick(onSubmit)\n\t}, [])\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{t('congrats.title', { name: profile.name.split(' ')[0] })}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{t('congrats.description')}\n\t\t\t\t\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Congrats\n","import {\n\tAddress,\n\tAuthenticDescription,\n\tAuthenticPhoto,\n\tBeautifulDescription,\n\tBeautifulPhoto,\n\tCongrats,\n\tContacts,\n\tDate,\n\tEmail,\n\tEmoji,\n\tFaceLivenessCheck,\n\tFaceLivenessError,\n\tFaceLivenessStart,\n\tGoals,\n\tName,\n\tPersonalityType,\n\tPreviewPersonal,\n\tPreviewPhoto,\n\tProfessionalDescription,\n\tProfessionalPhoto,\n\tWelcome\n} from '@/components/screens/unauthorized/registration'\n\nimport { IRoute } from '../navigation.types'\n\nconst registrationRoutes: IRoute[] = [\n\t{\n\t\tpath: '/welcome',\n\t\tcomponent: Welcome\n\t},\n\t{\n\t\tpath: '/name',\n\t\tcomponent: Name\n\t},\n\t{\n\t\tpath: '/date',\n\t\tcomponent: Date\n\t},\n\t{\n\t\tpath: '/address',\n\t\tcomponent: Address\n\t},\n\t{\n\t\tpath: '/emoji',\n\t\tcomponent: Emoji\n\t},\n\t{\n\t\tpath: '/email',\n\t\tcomponent: Email\n\t},\n\t{\n\t\tpath: '/congrats',\n\t\tcomponent: Congrats\n\t},\n\t{\n\t\tpath: '/preview-photo',\n\t\tcomponent: PreviewPhoto\n\t},\n\t{\n\t\tpath: '/personality-type',\n\t\tcomponent: PersonalityType\n\t},\n\t{\n\t\tpath: '/preview-personal',\n\t\tcomponent: PreviewPersonal\n\t},\n\t{\n\t\tpath: '/goals',\n\t\tcomponent: Goals\n\t},\n\t{\n\t\tpath: '/contacts',\n\t\tcomponent: Contacts\n\t},\n\t{\n\t\tpath: '/beautiful/photo',\n\t\tcomponent: BeautifulPhoto\n\t},\n\t{\n\t\tpath: '/professional/photo',\n\t\tcomponent: ProfessionalPhoto\n\t},\n\t{\n\t\tpath: '/authentic/photo',\n\t\tcomponent: AuthenticPhoto\n\t},\n\t{\n\t\tpath: '/beautiful/description',\n\t\tcomponent: BeautifulDescription\n\t},\n\t{\n\t\tpath: '/professional/description',\n\t\tcomponent: ProfessionalDescription\n\t},\n\t{\n\t\tpath: '/authentic/description',\n\t\tcomponent: AuthenticDescription\n\t},\n\t{\n\t\tpath: '/face-liveness/start',\n\t\tcomponent: FaceLivenessStart\n\t},\n\t{\n\t\tpath: '/face-liveness/error',\n\t\tcomponent: FaceLivenessError\n\t},\n\t{\n\t\tpath: '/face-liveness/check',\n\t\tcomponent: FaceLivenessCheck\n\t}\n]\n\nexport default registrationRoutes\n","import cn from 'clsx'\nimport { ComponentProps, FC } from 'react'\n\nimport { Icon } from '@/components/ui'\n\ninterface IProps extends ComponentProps<'button'> {\n\ticon: string\n\tloading?: boolean\n\ticonColor?: string\n\tactive?: boolean\n}\n\nconst SearchButton: FC = ({\n\ticon,\n\tloading,\n\tactive,\n\tclassName,\n\ticonColor = '#fff',\n\t...props\n}) => {\n\treturn (\n\t\t\n\t\t\t{!loading && (\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t{loading &&
}\n\n\t\t\t{active && (\n\t\t\t\t
\n\t\t\t)}\n\t\t\n\t)\n}\n\nexport default SearchButton\n","import { useQueryClient } from '@tanstack/react-query'\nimport cn from 'clsx'\nimport { useAtom, useAtomValue } from 'jotai'\nimport {\n\tChangeEvent,\n\tDispatch,\n\tFC,\n\tKeyboardEvent,\n\tSetStateAction,\n\tuseEffect,\n\tuseState\n} from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport { Slide } from 'react-toastify'\n\nimport { Field } from '@/components/ui'\n\nimport { ISearch } from '@/shared/types/card.interface'\n\nimport { useAmplitude, useSearch, useTelegram } from '@/hooks'\nimport { communityAtom, profileAtom } from '@/store'\nimport { ADDRESS_REGEX } from '@/utils/regex'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\nimport { IPosition } from '../slider/slider.interface'\n\nimport SearchButton from './SearchButton'\n\ninterface IProps {\n\tisOpen: boolean\n\tsetIsOpen: Dispatch>\n\tposition: IPosition\n\tsetPosition: (position: IPosition) => void\n\tsetDisableTransition: Dispatch>\n}\n\nconst SearchModal: FC = ({\n\tisOpen,\n\tsetIsOpen,\n\tposition,\n\tsetPosition,\n\tsetDisableTransition\n}) => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation(['authorized', 'common'])\n\tconst { getData, isLoading, isSuccess, isError, searchData } = useSearch()\n\tconst { event, getTimeSpentInMilliseconds } = useAmplitude()\n\tconst [community, setCommunity] = useAtom(communityAtom)\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\n\tconst queryClient = useQueryClient()\n\tconst hasSearched = community.isSearching\n\n\tconst [durationRequest, setDurationRequest] = useState(0)\n\tconst [lastDistance, setLastDistance] = useState(0)\n\tconst [lastIndex, setLastIndex] = useState(0)\n\n\tconst {\n\t\tcontrol,\n\t\twatch,\n\t\tsetValue,\n\t\tsetError,\n\t\tclearErrors,\n\t\tformState,\n\t\tsetFocus\n\t} = useForm<{\n\t\tsearch: string\n\t}>({\n\t\tmode: 'onChange',\n\t\tdefaultValues: { search: '' }\n\t})\n\tconst { search } = watch()\n\n\tconst handleClose = () => {\n\t\tsetIsOpen(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (isSuccess) {\n\t\t\tconst data = searchData.find(item => item.view === 'search').data.response\n\t\t\tconst duration_ms = getTimeSpentInMilliseconds() - durationRequest\n\t\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\t\tsetLastIndex(position.currentIndex)\n\t\t\tsetLastDistance(position.distance)\n\n\t\t\tif (!data.length) {\n\t\t\t\tevent('search_empty', {\n\t\t\t\t\trequest: search.toUpperCase(),\n\t\t\t\t\trequest_raw: search,\n\t\t\t\t\tduration_ms\n\t\t\t\t})\n\t\t\t\tnotifyMessage({\n\t\t\t\t\ttransition: Slide,\n\t\t\t\t\tposition: 'top-right',\n\t\t\t\t\tmessage: t('community.search.messages.search_empty.message'),\n\t\t\t\t\tdescription: t('community.search.messages.search_empty.description'),\n\t\t\t\t\ticon: 'search',\n\t\t\t\t\ticonColor: '#EF3B35',\n\t\t\t\t\tclassName: 'absolute top-20 w-[calc(100%-33px)]',\n\t\t\t\t\tonClick: handleResetValue\n\t\t\t\t})\n\n\t\t\t\tsetFocus('search')\n\t\t\t} else {\n\t\t\t\tevent('search_success', {\n\t\t\t\t\tusers: data.length,\n\t\t\t\t\trequest: search.toUpperCase(),\n\t\t\t\t\trequest_raw: search,\n\t\t\t\t\tduration_ms\n\t\t\t\t})\n\t\t\t\tsetDisableTransition(true)\n\t\t\t\tsetPosition({\n\t\t\t\t\tcurrentIndex: 0,\n\t\t\t\t\tdistance: 0\n\t\t\t\t})\n\t\t\t\tsetIsOpen(false)\n\n\t\t\t\tsetTimeout(() => setDisableTransition(false), 50)\n\t\t\t}\n\t\t}\n\n\t\tif (isError) {\n\t\t\tconst duration_ms = getTimeSpentInMilliseconds() - durationRequest\n\t\t\tevent('search_error', {\n\t\t\t\trequest: search.toUpperCase(),\n\t\t\t\trequest_raw: search,\n\t\t\t\tduration_ms\n\t\t\t})\n\t\t\tnotifyMessage({\n\t\t\t\ttype: 'error',\n\t\t\t\ttransition: Slide,\n\t\t\t\tposition: 'top-right',\n\t\t\t\tmessage: t('notify_error.message', { ns: 'common' }),\n\t\t\t\tdescription: t('notify_error.description', { ns: 'common' }),\n\t\t\t\tclassName: 'absolute top-20 w-[calc(100%-33px)]',\n\t\t\t\tonClick: handleResetValue\n\t\t\t})\n\t\t}\n\t}, [isLoading])\n\n\tconst handleSearchSubmit = async () => {\n\t\tif (!search.length) {\n\t\t\treturn handleClose()\n\t\t}\n\n\t\tif (formState.errors.search) return\n\n\t\tevent('search_started', {\n\t\t\trequest: search.toUpperCase(),\n\t\t\trequest_raw: search\n\t\t})\n\n\t\tconst time = getTimeSpentInMilliseconds()\n\t\tsetDurationRequest(time)\n\t\tqueryClient.setQueryData(['search', { view: 'community' }], community)\n\t\tawait getData([\n\t\t\t{\n\t\t\t\tview: 'search',\n\t\t\t\tquery: search\n\t\t\t}\n\t\t])\n\t}\n\n\tconst handleInputChange = (e: ChangeEvent) => {\n\t\tconst value = e.target.value\n\n\t\tif (search.length >= 200) {\n\t\t\tsetError('search', {})\n\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tclearErrors('search')\n\t\t\t}, 250)\n\t\t}\n\n\t\tif (ADDRESS_REGEX.test(value)) {\n\t\t\tsetValue('search', value)\n\t\t\tclearErrors('search')\n\t\t} else {\n\t\t\ttg.HapticFeedback.notificationOccurred('warning')\n\t\t\tsetError('search', {})\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tclearErrors('search')\n\t\t\t}, 250)\n\t\t}\n\t}\n\n\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter') {\n\t\t\tconst target = e.target as HTMLInputElement\n\t\t\ttarget.blur()\n\t\t\thandleSearchSubmit()\n\t\t}\n\t}\n\n\tconst handleResetFilter = () => {\n\t\tconst cachedData = queryClient.getQueryData([\n\t\t\t'search',\n\t\t\t{ view: 'community' }\n\t\t])\n\t\tqueryClient.setQueryData(['search', { view: 'search' }], community)\n\n\t\tsetCommunity({ isSearching: false, ...cachedData })\n\t\tsetDisableTransition(true)\n\t\tsetPosition({\n\t\t\tcurrentIndex: lastIndex,\n\t\t\tdistance: lastDistance\n\t\t})\n\t\thandleResetValue()\n\t\tclearErrors('search')\n\t\tsetTimeout(() => setDisableTransition(false), 50)\n\t}\n\n\tconst handleResetValue = () => {\n\t\tevent('search_cleared')\n\t\tsetFocus('search')\n\t\tsetValue('search', '')\n\t}\n\n\tuseEffect(() => {\n\t\tif (!hasSearched) {\n\t\t\thandleResetValue()\n\t\t}\n\t}, [hasSearched])\n\n\tuseEffect(() => {\n\t\tconst cardMenu = document.getElementById('layout')\n\t\tconst bottomMenu = document.getElementById('bottom-menu')\n\n\t\tconst handleEventChange = () => {\n\t\t\tif (isOpen && tg.platform !== 'ios') {\n\t\t\t\tcardMenu.style.height = '100vh'\n\t\t\t\tbottomMenu.style.display = 'none'\n\t\t\t}\n\t\t}\n\n\t\ttg.onEvent('viewportChanged', handleEventChange)\n\n\t\treturn () => {\n\t\t\tcardMenu.style.height = `calc(100vh - ${\n\t\t\t\ttg.platform === 'ios' ? '73' : '57'\n\t\t\t}px)`\n\t\t\tbottomMenu.style.display = 'flex'\n\t\t\ttg.offEvent('viewportChanged', handleEventChange)\n\t\t}\n\t}, [isOpen, tg])\n\n\tuseEffect(() => {\n\t\tif (hasSearched && !search.length) {\n\t\t\thandleResetFilter()\n\t\t}\n\t}, [search])\n\n\tuseEffect(() => {\n\t\tif (hasSearched) {\n\t\t\ttg.BackButton.show()\n\n\t\t\ttg.BackButton.onClick(handleResetFilter)\n\t\t} else {\n\t\t\ttg.BackButton.hide()\n\t\t}\n\n\t\treturn () => {\n\t\t\ttg.BackButton.offClick(handleResetFilter)\n\t\t}\n\t}, [hasSearched])\n\n\tconst handleClickSearch = () => {\n\t\tevent('search_clicked', {\n\t\t\tprefill: hasSearched\n\t\t})\n\n\t\tif (profile.paid) {\n\t\t\tsetIsOpen(prevState => {\n\t\t\t\t!prevState && tg.HapticFeedback.notificationOccurred('success')\n\t\t\t\treturn !prevState\n\t\t\t})\n\t\t} else {\n\t\t\tnavigate('/payment', {\n\t\t\t\tstate: {\n\t\t\t\t\tstate: 'search',\n\t\t\t\t\tsource: 'search'\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tif (!isOpen) {\n\t\treturn (\n\t\t\t\n\t\t)\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\n\t\t\t\n\n\t\t\t{(!search.length || isLoading) && (\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t{!isLoading && !!search.length && (\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t)\n}\n\nexport default SearchModal\n","import cn from 'clsx'\nimport { useAtom } from 'jotai/index'\nimport { FC, useEffect, useState } from 'react'\n\nimport { Card, EmptyState } from '@/components/ui'\n\nimport { useSearch, useTelegram } from '@/hooks'\nimport { communityAtom, communityPositionAtom } from '@/store'\n\nimport SearchModal from '../search-modal/SearchModal'\n\nimport { IPosition, ISlider } from './slider.interface'\n\nconst Slider: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { getData, isLoading, isSuccess } = useSearch()\n\tconst [community, setCommunity] = useAtom(communityAtom)\n\tconst [communityPosition, setCommunityPosition] = useAtom(\n\t\tcommunityPositionAtom\n\t)\n\tconst [currentIndex, setCurrentIndex] = useState(\n\t\tcommunityPosition.currentIndex\n\t)\n\tconst [distance, setDistance] = useState(communityPosition.distance)\n\tconst [onTouch, setOnTouch] = useState(false)\n\tconst hasSearched = community.isSearching\n\n\tconst [refreshPercent, setRefreshPercent] = useState(0)\n\tconst [isRefresh, setIsRefresh] = useState(false)\n\tconst [touchStartY, setTouchStartY] = useState(0)\n\tconst [touchStartX, setTouchStartX] = useState(0)\n\tconst [disableSliderScroll, setDisableSliderScroll] = useState(false)\n\tconst [disableTransition, setDisableTransition] = useState(false)\n\tconst [cardHeight] = useState(\n\t\twindow.innerHeight - (tg.platform === 'ios' ? 73 : 57)\n\t)\n\tconst [lastTouchTime, setLastTouchTime] = useState(0)\n\tconst [isMouseClick, setIsMouseClick] = useState(false)\n\tconst [isSearching, setIsSearching] = useState(false)\n\n\tconst handleChangePosition = (position: IPosition) => {\n\t\tsetDistance(position.distance)\n\t\tsetCurrentIndex(position.currentIndex)\n\t}\n\n\tuseEffect(() => {\n\t\tsetCommunityPosition({\n\t\t\tdistance,\n\t\t\tcurrentIndex\n\t\t})\n\t}, [distance, currentIndex])\n\n\tconst removeCard = (user_id: number) => {\n\t\tsetCommunity(prevState => ({\n\t\t\t...prevState,\n\t\t\tcards: prevState.cards.filter(card => card.user_id !== user_id)\n\t\t}))\n\t\tif (\n\t\t\tcommunity.cards.findIndex(card => card.user_id === user_id) ===\n\t\t\tcommunity.cards.length - (hasSearched ? 1 : 0)\n\t\t) {\n\t\t\tconst newIndex = currentIndex - 1\n\t\t\tsetCurrentIndex(newIndex)\n\t\t\tsetOnTouch(true)\n\t\t\tsetDistance(-cardHeight * newIndex)\n\t\t}\n\t}\n\n\tconst onMouseOut = () => {\n\t\tif (isRefresh) return\n\n\t\tsetIsMouseClick(false)\n\t\tsetOnTouch(false)\n\t\tsetDistance(-cardHeight * currentIndex)\n\t}\n\n\tconst handleTouchStart = e => {\n\t\tif (!community.cards.length || isSearching) return\n\n\t\tconst currentY = e?.button === 0 ? e?.clientY : e?.touches?.[0]?.clientY\n\t\tconst currentX = e?.button === 0 ? e?.clientX : e?.touches?.[0]?.clientX\n\t\tif (e?.button === 0) setIsMouseClick(true)\n\t\tsetOnTouch(true)\n\t\tsetLastTouchTime(Date.now())\n\t\tsetTouchStartY(currentY)\n\t\tsetTouchStartX(currentX)\n\t}\n\n\tconst handleTouchMove = e => {\n\t\tif (!community.cards.length || isSearching || disableSliderScroll) return\n\n\t\tconst currentY =\n\t\t\te?.button === 0 && isMouseClick ? e?.clientY : e?.touches?.[0]?.clientY\n\t\tconst currentX =\n\t\t\te?.button === 0 && isMouseClick ? e?.clientX : e?.touches?.[0]?.clientX\n\t\tconst deltaY = currentY - touchStartY\n\t\tconst deltaX = currentX - touchStartX\n\n\t\tif (\n\t\t\tMath.abs(deltaY) < Math.abs(deltaX) ||\n\t\t\tMath.abs(deltaX) > 100 ||\n\t\t\tMath.abs(deltaY) > 200\n\t\t)\n\t\t\treturn\n\n\t\tif (!currentY || Math.abs(currentY - touchStartY) < 15) return\n\n\t\tif (currentIndex === 0 && deltaY > 10) {\n\t\t\tsetRefreshPercent(Math.min(Math.max((deltaY / 100) * 100, 0), 100))\n\t\t}\n\n\t\tif (currentIndex === 0 && deltaY > 50) {\n\t\t\tsetDistance(50 + (deltaY - 50) / 5)\n\t\t} else if (\n\t\t\tcurrentIndex === community.cards.length - (hasSearched ? 1 : 0) &&\n\t\t\tdeltaY < -50\n\t\t) {\n\t\t\tsetDistance(\n\t\t\t\t-(\n\t\t\t\t\t(community.cards.length - (hasSearched ? 1 : 0)) * cardHeight +\n\t\t\t\t\t50 +\n\t\t\t\t\t(Math.abs(deltaY) - 50) / 5\n\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\tsetDistance(currentIndex * -cardHeight + deltaY)\n\t\t}\n\t}\n\n\tconst handleTouchEnd = () => {\n\t\tsetOnTouch(false)\n\t\tsetIsMouseClick(false)\n\t\tconst newDistance = distance - currentIndex * -cardHeight\n\t\tconst deltaTime = Date.now() - lastTouchTime\n\t\tconst velocity = newDistance / deltaTime\n\t\tconst minVelocity = ['ios', 'android'].includes(tg.platform) ? 0.6 : 0.2\n\n\t\tif (refreshPercent < 100) {\n\t\t\tsetRefreshPercent(0)\n\t\t}\n\n\t\tif (!currentIndex) {\n\t\t\tif (\n\t\t\t\tnewDistance > 0 ||\n\t\t\t\t(Math.abs(velocity) < minVelocity &&\n\t\t\t\t\tMath.abs(newDistance) <= cardHeight / 4)\n\t\t\t) {\n\t\t\t\tsetDistance(0)\n\t\t\t} else {\n\t\t\t\tsetDistance(-cardHeight)\n\t\t\t\tsetCurrentIndex(1)\n\t\t\t}\n\t\t} else if (\n\t\t\tcurrentIndex ===\n\t\t\tcommunity.cards.length - (hasSearched ? 1 : 0)\n\t\t) {\n\t\t\tif (\n\t\t\t\tnewDistance < 0 ||\n\t\t\t\t(Math.abs(velocity) < minVelocity &&\n\t\t\t\t\tMath.abs(newDistance) <= cardHeight)\n\t\t\t) {\n\t\t\t\tsetDistance(-cardHeight * currentIndex)\n\t\t\t} else {\n\t\t\t\tsetDistance(-cardHeight * (currentIndex - 1))\n\t\t\t\tsetCurrentIndex(currentIndex - 1)\n\t\t\t}\n\t\t} else {\n\t\t\tif (\n\t\t\t\tMath.abs(velocity) < minVelocity &&\n\t\t\t\tMath.abs(newDistance) <= cardHeight / 4\n\t\t\t) {\n\t\t\t\tsetDistance(-cardHeight * currentIndex)\n\t\t\t} else {\n\t\t\t\tif (newDistance > 0) {\n\t\t\t\t\tsetDistance(-cardHeight * (currentIndex - 1))\n\t\t\t\t\tsetCurrentIndex(prevSlide => prevSlide - 1)\n\t\t\t\t} else {\n\t\t\t\t\tsetDistance(-cardHeight * (currentIndex + 1))\n\t\t\t\t\tsetCurrentIndex(prevSlide => prevSlide + 1)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowUp': {\n\t\t\t\tsetCurrentIndex(prevIndex => {\n\t\t\t\t\tif (prevIndex > 0) {\n\t\t\t\t\t\tconst newIndex = prevIndex - 1\n\t\t\t\t\t\tsetDistance(-cardHeight * newIndex)\n\t\t\t\t\t\treturn newIndex\n\t\t\t\t\t}\n\t\t\t\t\treturn prevIndex\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'ArrowDown': {\n\t\t\t\tsetCurrentIndex(prevIndex => {\n\t\t\t\t\tif (prevIndex < community.cards.length - (hasSearched ? 1 : 0)) {\n\t\t\t\t\t\tconst newIndex = prevIndex + 1\n\t\t\t\t\t\tsetDistance(-cardHeight * newIndex)\n\t\t\t\t\t\treturn newIndex\n\t\t\t\t\t}\n\t\t\t\t\treturn prevIndex\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleRefresh = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\tgetData([{ view: 'community' }])\n\t}\n\n\tuseEffect(() => {\n\t\tif (refreshPercent === 100) {\n\t\t\tsetIsRefresh(true)\n\t\t}\n\t\tconst degrees = (refreshPercent / 100) * 360\n\n\t\tdocument.documentElement.style.setProperty('--progress', `${degrees}deg`)\n\t}, [refreshPercent])\n\n\tuseEffect(() => {\n\t\tif (isRefresh) {\n\t\t\thandleRefresh()\n\t\t}\n\t}, [isRefresh])\n\n\tuseEffect(() => {\n\t\tif (!isLoading) {\n\t\t\tsetIsRefresh(false)\n\t\t}\n\t\tif (isSuccess) {\n\t\t\tsetRefreshPercent(0)\n\t\t\tsetIsRefresh(false)\n\t\t\tsetDistance(0)\n\t\t\tsetCurrentIndex(0)\n\t\t}\n\t}, [isLoading])\n\n\tuseEffect(() => {\n\t\tif (isSearching) return\n\n\t\tdocument.addEventListener('keydown', handleKeyDown)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', handleKeyDown)\n\t\t}\n\t}, [community.cards, isSearching])\n\n\tif (!community.cards) {\n\t\treturn (\n\t\t\t\n\t\t)\n\t}\n\n\treturn (\n\t\t\n\t\t\t{refreshPercent > 0 && (\n\t\t\t\t
\n\t\t\t\t\t= 100 && 'animation')}\n\t\t\t\t\t/>\n\t\t\t\t
\n\t\t\t)}\n\t\t\t\n\t\t\t\t{community.cards.map((card, index) => {\n\t\t\t\t\tconst isPrev = index === currentIndex - 1\n\t\t\t\t\tconst isCurrent = index === currentIndex\n\t\t\t\t\tconst isNext = index === currentIndex + 1\n\t\t\t\t\tconst isDoubleNext = index === currentIndex + 2\n\t\t\t\t\tconst shouldDisplay = isCurrent || isPrev || isNext || isDoubleNext\n\n\t\t\t\t\tif (shouldDisplay) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t 0\n\t\t\t\t\t\t\t\t\t\t\t? community.cards.filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(_, index) => index < currentIndex - 1\n\t\t\t\t\t\t\t\t\t\t\t ).length * cardHeight\n\t\t\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\t\t\theight: cardHeight\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t})}\n\t\t\t\t{!hasSearched && (\n\t\t\t\t\t 0\n\t\t\t\t\t\t\t\t\t? community.cards.filter(\n\t\t\t\t\t\t\t\t\t\t\t(_, index) => index < currentIndex - 1\n\t\t\t\t\t\t\t\t\t ).length * cardHeight\n\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\theight: cardHeight\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Slider\n","import { FC } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\n\nimport { Button, Icon, Typography } from '@/components/ui'\n\nimport { useTelegram } from '@/hooks'\n\ninterface IProps {\n\thandleClose: () => void\n}\n\nconst Instruction: FC = ({ handleClose }) => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation()\n\n\tconst optionsHowItWorks = t('community.instruction.how_it_works.options', {\n\t\treturnObjects: true\n\t}) as string[]\n\n\tconst optionsPremium = t('community.instruction.premium.options', {\n\t\treturnObjects: true\n\t}) as string[]\n\n\tconst handleSubmit = () => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\thandleClose()\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{t('community.instruction.how_it_works.title')}\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t{optionsHowItWorks.map((item, index) => (\n\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\ticon: (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t))}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{t('community.instruction.premium.title')}\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t{optionsPremium.map((item, index) => (\n\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
  • \n\t\t\t\t\t\t))}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\t{t('community.instruction.button_ok')}\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Instruction\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useAtom, useAtomValue } from 'jotai'\nimport { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { MainLayout } from '@/components/ui'\n\nimport { ISearch } from '@/shared/types/card.interface'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\nimport { communityAtom, profileAtom } from '@/store'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\nimport { Instruction, Slider } from './components'\n\nconst Community: FC = () => {\n\tconst { t } = useTranslation()\n\tconst { tg } = useTelegram()\n\tconst { event } = useAmplitude()\n\tconst queryClient = useQueryClient()\n\tconst profile = useAtomValue(profileAtom)\n\tconst [community, setCommunity] = useAtom(communityAtom)\n\tconst [showInstruction, setShowInstruction] = useState(\n\t\tlocalStorage.getItem('instruction') === 'true'\n\t)\n\n\tuseEffect(() => {\n\t\tif (profile.paid) return\n\n\t\tconst { cards } = community\n\t\tconst isHasLikes = cards.some(item => item.status === 'like')\n\t\tconst visibleFriendRequest =\n\t\t\tlocalStorage.getItem('visibleFriendRequest') === 'true'\n\n\t\tif (isHasLikes && visibleFriendRequest) {\n\t\t\tlocalStorage.setItem('visibleFriendRequest', 'false')\n\n\t\t\tconst usersLikes = cards.filter(item => item.status === 'like')\n\n\t\t\tevent('friend_request_received', {\n\t\t\t\tlikes: usersLikes.length,\n\t\t\t\tusers: cards.length\n\t\t\t})\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tnotifyMessage({\n\t\t\t\t\ticon: 'add-user-outline',\n\t\t\t\t\tautoClose: 5000,\n\t\t\t\t\tposition: 'top-left',\n\t\t\t\t\tmessage: t('community.friend_request.message'),\n\t\t\t\t\tdescription: t('community.friend_request.description')\n\t\t\t\t})\n\t\t\t}, 1000)\n\t\t}\n\t}, [community])\n\n\tconst resetCommunity = () => {\n\t\tconst cachedData = queryClient.getQueryData([\n\t\t\t'search',\n\t\t\t{ view: 'community' }\n\t\t])\n\t\tsetCommunity(prevState => {\n\t\t\tif (cachedData && prevState.isSearching) {\n\t\t\t\treturn { isSearching: false, ...cachedData }\n\t\t\t}\n\t\t\treturn prevState\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.hide()\n\t\tif (showInstruction) {\n\t\t\tlocalStorage.setItem('instruction', 'false')\n\t\t}\n\t\treturn () => {\n\t\t\tresetCommunity()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t\n\t\t\t{showInstruction && (\n\t\t\t\t setShowInstruction(false)} />\n\t\t\t)}\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Community\n","import cn from 'clsx'\nimport { FC, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport 'swiper/css'\nimport { Autoplay, Pagination } from 'swiper/modules'\nimport { Swiper, SwiperSlide } from 'swiper/react'\n\nimport { Icon, Typography } from '@/components/ui'\n\nimport { useTelegram } from '@/hooks'\n\ninterface ISlide {\n\timages?: string[]\n\ttitle: string\n\tdescription: string\n\ticon?: string\n}\n\nconst Slide: FC = ({ images, title, description, icon }) => {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{images &&\n\t\t\t\t\timages.map((url, index) => (\n\t\t\t\t\t\t\n\t\t\t\t\t))}\n\t\t\t\t{icon && }\n\t\t\t
\n\t\t\t\n\t\t\t\t{title}\n\t\t\t\n\t\t\t\n\t\t\t\t{description}\n\t\t\t\n\t\t
\n\t)\n}\n\ninterface ISlider {\n\tstate: string\n}\n\nconst Slider: FC = ({ state }) => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation()\n\tconst [currentSlide, setCurrentSlide] = useState(0)\n\n\tconst slides = [\n\t\t{\n\t\t\timages: [\n\t\t\t\t'https://res.cloudinary.com/wowreels/image/upload/v1739207521/payment-inbox-1.png',\n\t\t\t\t'https://res.cloudinary.com/wowreels/image/upload/v1739207533/payment-inbox-2.png',\n\t\t\t\t'https://res.cloudinary.com/wowreels/image/upload/v1739207525/payment-inbox-3.png'\n\t\t\t],\n\t\t\ttitle: t('payment.slider.inbox.title'),\n\t\t\tdescription: t('payment.slider.inbox.description')\n\t\t},\n\t\t{\n\t\t\ttitle: t('payment.slider.search.title'),\n\t\t\tdescription: t('payment.slider.search.description'),\n\t\t\ticon: 'search'\n\t\t},\n\t\t{\n\t\t\ttitle: t('payment.slider.instagram.title'),\n\t\t\tdescription: t('payment.slider.instagram.description'),\n\t\t\ticon: 'instagram'\n\t\t}\n\t]\n\n\treturn (\n\t\t
\n\t\t\t {\n\t\t\t\t\tsetCurrentSlide(swiper.activeIndex)\n\t\t\t\t\ttg.HapticFeedback.selectionChanged()\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{slides.map((slide, index) => (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t\n\t\t\t
\n\t\t\t\t{Array.from({ length: 3 }).map((_, index) => (\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Slider\n","import cn from 'clsx'\nimport { Dispatch, FC, Fragment, SetStateAction } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { Icon, Radio, Typography } from '@/components/ui'\n\nimport { useTelegram } from '@/hooks'\n\ninterface ITariff {\n\tkey: string\n\tperiod: string\n\tsubtitle: string\n\tprice: string\n}\n\ninterface ITariffs {\n\tplan: string\n\tsetPlan: Dispatch>\n}\n\ninterface ITariffItem {\n\titem: ITariff\n\tplan: string\n\tsetPlan: Dispatch>\n}\n\nconst TariffItem: FC = ({ item, plan, setPlan }) => {\n\tconst { tg } = useTelegram()\n\tconst isActive = plan === item.key\n\n\tconst handleChange = () => {\n\t\ttg.HapticFeedback.selectionChanged()\n\t\tsetPlan(item.key)\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{item.period}\n\t\t\t\t\t\n\t\t\t\t\t\t{item.subtitle}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{item.price}\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t)\n}\n\nconst Tariffs: FC = ({ plan, setPlan }) => {\n\tconst { t } = useTranslation()\n\n\tconst tariffs: ITariff[] = [\n\t\t{\n\t\t\tkey: '1_month_sub',\n\t\t\tperiod: t('payment.tariffs.1_month.period'),\n\t\t\tsubtitle: t('payment.tariffs.1_month.subtitle'),\n\t\t\tprice: '750'\n\t\t},\n\t\t{\n\t\t\tkey: '3_month_sub',\n\t\t\tperiod: t('payment.tariffs.3_month.period'),\n\t\t\tsubtitle: t('payment.tariffs.3_month.subtitle'),\n\t\t\tprice: '1500'\n\t\t}\n\t]\n\n\treturn (\n\t\t
\n\t\t\t{tariffs.map((item, index) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{index < tariffs.length - 1 && (\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t)\n}\n\nexport default Tariffs\n","import { IPay, IPayRequest } from '@/shared/types/auth.interface'\n\nimport { request } from '@/services/api/request.api'\n\nimport { URL } from '@/config/api.config'\n\nexport const PaymentService = {\n\tasync getPay(data: IPay) {\n\t\tconst paramsObject: Record = {\n\t\t\ttg_id: String(data.tg_id),\n\t\t\tmethod_type: data.method_type,\n\t\t\tplan: data.plan\n\t\t}\n\n\t\tconst searchParams = new URLSearchParams(paramsObject)\n\n\t\treturn request({\n\t\t\tbaseURL: URL,\n\t\t\turl: `/pay?${searchParams}`,\n\t\t\tmethod: 'POST'\n\t\t})\n\t},\n\tasync paySuccess(payment_id: number) {\n\t\treturn request({\n\t\t\tbaseURL: URL,\n\t\t\turl: `/pay/stars/success?payment_id=${payment_id}`,\n\t\t\tmethod: 'POST'\n\t\t})\n\t},\n\tasync payCancel(payment_id: number) {\n\t\treturn request({\n\t\t\tbaseURL: URL,\n\t\t\turl: `/pay/stars/cancel?payment_id=${payment_id}`,\n\t\t\tmethod: 'POST'\n\t\t})\n\t}\n}\n","import { useMutation, useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { useState } from 'react'\n\nimport { IPay } from '@/shared/types/auth.interface'\n\nimport { PaymentService } from '@/services/payment.service'\n\nimport { useProfile } from '@/hooks'\nimport { profileAtom } from '@/store'\n\nexport const usePayment = () => {\n\tconst profile = useAtomValue(profileAtom)\n\tconst { refetchInitProfile } = useProfile()\n\tconst [paymentId, setPaymentId] = useState()\n\n\tconst { data, isLoading, isSuccess, isError, mutate } = useMutation(\n\t\t['getPay'],\n\t\t({ plan }: Partial) =>\n\t\t\tPaymentService.getPay({\n\t\t\t\ttg_id: profile.user_id,\n\t\t\t\tplan,\n\t\t\t\tmethod_type: 'stars'\n\t\t\t}),\n\t\t{\n\t\t\tonSuccess: data => {\n\t\t\t\tsetPaymentId(data.payment_id)\n\t\t\t}\n\t\t}\n\t)\n\n\tconst { refetch: refetchPaySuccess } = useQuery(\n\t\t['paySuccess'],\n\t\t() => PaymentService.paySuccess(paymentId),\n\t\t{\n\t\t\tenabled: false,\n\t\t\tonSuccess: () => {\n\t\t\t\trefetchInitProfile()\n\t\t\t}\n\t\t}\n\t)\n\n\tconst { refetch: refetchPayCancel } = useQuery(\n\t\t['payCancel'],\n\t\t() => PaymentService.payCancel(paymentId),\n\t\t{\n\t\t\tenabled: false,\n\t\t\tonSuccess: () => {\n\t\t\t\trefetchInitProfile()\n\t\t\t}\n\t\t}\n\t)\n\n\treturn {\n\t\tdata,\n\t\tgetPayment: mutate,\n\t\trefetchPaySuccess,\n\t\trefetchPayCancel,\n\t\tisError,\n\t\tisLoading,\n\t\tisSuccess\n\t}\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { FC, useEffect, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { ButtonLayout, Icon, Typography } from '@/components/ui'\n\nimport { TPlan } from '@/shared/types/auth.interface'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { useButton } from '@/providers'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\nimport { Slider, Tariffs } from './components'\nimport { usePayment } from './usePayment'\n\nconst Payment: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation(['authorized', 'common'])\n\tconst { MainButton } = useButton()\n\tconst {\n\t\tisSuccess,\n\t\tdata,\n\t\tisLoading,\n\t\tisError,\n\t\tgetPayment,\n\t\trefetchPaySuccess,\n\t\trefetchPayCancel\n\t} = usePayment()\n\tconst {\n\t\trefetchInitProfile,\n\t\tisInitProfileError,\n\t\tisInitProfileSuccess,\n\t\tinitData\n\t} = useProfile()\n\tconst queryClient = useQueryClient()\n\tconst navigate = useNavigate()\n\tconst { event } = useAmplitude()\n\tconst location = useLocation()\n\tconst state = location.state?.state\n\tconst source = location.state?.source\n\tconst [plan, setPlan] = useState('1_month_sub')\n\tconst [waiting, setWaiting] = useState(false)\n\n\tconst onSubmit = () => {\n\t\tgetPayment({ plan })\n\t\tMainButton.showProgress()\n\t}\n\n\tuseEffect(() => {\n\t\tif (isSuccess) {\n\t\t\tMainButton.hideProgress()\n\t\t\tevent('payment_started', {\n\t\t\t\tcurrency: 'stars',\n\t\t\t\tplan,\n\t\t\t\tpayment_system: 'telegram'\n\t\t\t})\n\t\t\ttg.openInvoice(data.url, status => {\n\t\t\t\tswitch (status) {\n\t\t\t\t\tcase 'paid': {\n\t\t\t\t\t\trefetchPaySuccess()\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'failed': {\n\t\t\t\t\t\thandleError()\n\t\t\t\t\t\trefetchPayCancel()\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'cancelled':\n\t\t\t\t\tcase 'pending': {\n\t\t\t\t\t\trefetchPayCancel()\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tif (isError) {\n\t\t\tMainButton.hideProgress()\n\t\t}\n\t}, [isLoading])\n\n\tconst handleReset = () => {\n\t\tswitch (state) {\n\t\t\tcase 'inbox':\n\t\t\tcase 'instagram': {\n\t\t\t\tnavigate('/friends')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'search': {\n\t\t\t\tnavigate('/community')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'settings': {\n\t\t\t\tnavigate('/settings')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tnavigate('/community')\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleBack = () => {\n\t\tevent('payment_closed', {\n\t\t\ttype: 'back'\n\t\t})\n\t\thandleReset()\n\t}\n\n\tconst handleError = () => {\n\t\tevent('payment_error', {\n\t\t\tcurrency: 'stars',\n\t\t\tplan: plan,\n\t\t\tpayment_system: 'telegram'\n\t\t})\n\t\tnotifyMessage({\n\t\t\ttype: 'error',\n\t\t\tmessage: t('payment.error')\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\tif (isInitProfileError) {\n\t\t\tsetWaiting(true)\n\t\t\ttg.BackButton.onClick(() => {})\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tqueryClient.resetQueries(['initProfile'])\n\t\t\t\trefetchInitProfile()\n\t\t\t}, 2000)\n\t\t}\n\t}, [isInitProfileError])\n\n\tuseEffect(() => {\n\t\tif (isInitProfileSuccess) {\n\t\t\tsetWaiting(false)\n\t\t\ttg.BackButton.onClick(handleBack)\n\n\t\t\tif (initData.payment_error) handleError()\n\n\t\t\tif (initData.data.paid && !initData.payment_error) {\n\t\t\t\tnavigate('/premium', {\n\t\t\t\t\tstate: {\n\t\t\t\t\t\tstate\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}, [isInitProfileSuccess])\n\n\tuseEffect(() => {\n\t\tconst flow = ['inbox', 'instagram'].includes(state)\n\t\t\t? 'friends'\n\t\t\t: state === 'search'\n\t\t\t? 'community'\n\t\t\t: 'settings'\n\t\tevent('payment_opened', {\n\t\t\tflow: flow,\n\t\t\t...(source && { source })\n\t\t})\n\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(handleBack)\n\n\t\tMainButton.onClick(onSubmit)\n\t\tMainButton.setParams({\n\t\t\tvariant: 'secondary',\n\t\t\ttext: t('payment.button_payment')\n\t\t})\n\t}, [plan])\n\n\tconst handleClose = () => {\n\t\tevent('payment_closed', {\n\t\t\ttype: 'close'\n\t\t})\n\t\thandleReset()\n\t}\n\n\treturn (\n\t\t\n\t\t\t{waiting && (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t)}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tprivacy: (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Payment\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Card, MainLayout } from '@/components/ui'\n\nimport { useTelegram } from '@/hooks'\nimport { profileAtom } from '@/store'\n\nconst Profile: FC = () => {\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\tconst { tg } = useTelegram()\n\n\tconst handleBack = () => {\n\t\tnavigate('/community')\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(handleBack)\n\n\t\treturn () => {\n\t\t\ttg.BackButton.offClick(handleBack)\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Profile\n","import { useMemo as L, useCallback as w, useSyncExternalStore as yt, useLayoutEffect as wt, useEffect as z, useInsertionEffect as xt, useState as b, useRef as C, createElement as Z, isValidElement as At, cloneElement as St } from \"react\";\nconst Mt = \"matchMedia\" in globalThis && typeof globalThis.matchMedia == \"function\";\nfunction _t(e, t = !1) {\n const n = L(\n () => Mt ? globalThis.matchMedia(e) : void 0,\n [e]\n ), r = w(\n (s) => n ? (n.addEventListener(\"change\", s), () => n.removeEventListener(\"change\", s)) : () => {\n },\n [n]\n );\n return yt(\n r,\n () => n?.matches ?? !1,\n () => t\n // value on the server\n );\n}\nconst ct = typeof window < \"u\" && typeof window.document < \"u\" && typeof window.document.createElement < \"u\", H = ct ? wt : z, G = ct ? xt : z, v = /* @__PURE__ */ new Map(), kt = (e, t) => {\n const [n] = b(() => e), [r] = b(\n () => (\n /* note: `document` can be `undefined` in some environments like SSR */\n t.current ? t.current.ownerDocument : globalThis.document\n )\n );\n G(() => {\n if (!(!n || typeof r > \"u\")) {\n if (!v.has(r)) {\n const s = r.createElement(\"style\");\n s.innerHTML = n, s.setAttribute(\"data-spoiled\", \"\"), v.set(r, { element: s, refCount: 0 }), r.head.appendChild(s);\n }\n v.get(r).refCount++;\n }\n }, []), G(() => () => {\n if (!n || typeof r > \"u\") return;\n const s = v.get(r);\n s && --s.refCount <= 0 && (v.delete(r), r.head.removeChild(s.element));\n }, []);\n}, Wt = (e) => {\n for (; e && e.parentNode; ) {\n const t = e.parentNode;\n if (t.nodeType === 1 && (t.offsetWidth !== 0 || t.offsetHeight !== 0))\n return t;\n e = t;\n }\n return e;\n}, J = (e, t) => {\n let { width: n, height: r } = e.getBoundingClientRect();\n return t > 1 && (n = Math.round(n / t) * t, r = Math.round(r / t) * t), [n, r];\n};\nfunction Pt(e, t = 4) {\n const [n, r] = b(() => e.current ? J(e.current, t) : [0, 0]);\n return z(() => {\n if (!e.current || typeof ResizeObserver > \"u\") return;\n const s = Wt(e.current), i = new ResizeObserver((a) => {\n if (!e.current) return;\n const [o, u] = J(e.current, t);\n (o !== n[0] || u !== n[1]) && r([o, u]);\n });\n return i.observe(s), () => {\n i.disconnect();\n };\n }, [e, t]), n;\n}\nvar Et = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, f = function(e) {\n return typeof e == \"string\" ? e.length > 0 : typeof e == \"number\";\n}, l = function(e, t, n) {\n return t === void 0 && (t = 0), n === void 0 && (n = Math.pow(10, t)), Math.round(n * e) / n + 0;\n}, d = function(e, t, n) {\n return t === void 0 && (t = 0), n === void 0 && (n = 1), e > n ? n : e > t ? e : t;\n}, lt = function(e) {\n return (e = isFinite(e) ? e % 360 : 0) > 0 ? e : e + 360;\n}, X = function(e) {\n return { r: d(e.r, 0, 255), g: d(e.g, 0, 255), b: d(e.b, 0, 255), a: d(e.a) };\n}, N = function(e) {\n return { r: l(e.r), g: l(e.g), b: l(e.b), a: l(e.a, 3) };\n}, It = /^#([0-9a-f]{3,8})$/i, W = function(e) {\n var t = e.toString(16);\n return t.length < 2 ? \"0\" + t : t;\n}, dt = function(e) {\n var t = e.r, n = e.g, r = e.b, s = e.a, i = Math.max(t, n, r), a = i - Math.min(t, n, r), o = a ? i === t ? (n - r) / a : i === n ? 2 + (r - t) / a : 4 + (t - n) / a : 0;\n return { h: 60 * (o < 0 ? o + 6 : o), s: i ? a / i * 100 : 0, v: i / 255 * 100, a: s };\n}, ut = function(e) {\n var t = e.h, n = e.s, r = e.v, s = e.a;\n t = t / 360 * 6, n /= 100, r /= 100;\n var i = Math.floor(t), a = r * (1 - n), o = r * (1 - (t - i) * n), u = r * (1 - (1 - t + i) * n), c = i % 6;\n return { r: 255 * [r, o, a, a, u, r][c], g: 255 * [u, r, r, o, a, a][c], b: 255 * [a, a, u, r, r, o][c], a: s };\n}, tt = function(e) {\n return { h: lt(e.h), s: d(e.s, 0, 100), l: d(e.l, 0, 100), a: d(e.a) };\n}, et = function(e) {\n return { h: l(e.h), s: l(e.s), l: l(e.l), a: l(e.a, 3) };\n}, nt = function(e) {\n return ut((n = (t = e).s, { h: t.h, s: (n *= ((r = t.l) < 50 ? r : 100 - r) / 100) > 0 ? 2 * n / (r + n) * 100 : 0, v: r + n, a: t.a }));\n var t, n, r;\n}, x = function(e) {\n return { h: (t = dt(e)).h, s: (s = (200 - (n = t.s)) * (r = t.v) / 100) > 0 && s < 200 ? n * r / 100 / (s <= 100 ? s : 200 - s) * 100 : 0, l: s / 2, a: t.a };\n var t, n, r, s;\n}, Dt = /^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i, Ft = /^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i, Rt = /^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i, Ct = /^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i, rt = { string: [[function(e) {\n var t = It.exec(e);\n return t ? (e = t[1]).length <= 4 ? { r: parseInt(e[0] + e[0], 16), g: parseInt(e[1] + e[1], 16), b: parseInt(e[2] + e[2], 16), a: e.length === 4 ? l(parseInt(e[3] + e[3], 16) / 255, 2) : 1 } : e.length === 6 || e.length === 8 ? { r: parseInt(e.substr(0, 2), 16), g: parseInt(e.substr(2, 2), 16), b: parseInt(e.substr(4, 2), 16), a: e.length === 8 ? l(parseInt(e.substr(6, 2), 16) / 255, 2) : 1 } : null : null;\n}, \"hex\"], [function(e) {\n var t = Rt.exec(e) || Ct.exec(e);\n return t ? t[2] !== t[4] || t[4] !== t[6] ? null : X({ r: Number(t[1]) / (t[2] ? 100 / 255 : 1), g: Number(t[3]) / (t[4] ? 100 / 255 : 1), b: Number(t[5]) / (t[6] ? 100 / 255 : 1), a: t[7] === void 0 ? 1 : Number(t[7]) / (t[8] ? 100 : 1) }) : null;\n}, \"rgb\"], [function(e) {\n var t = Dt.exec(e) || Ft.exec(e);\n if (!t) return null;\n var n, r, s = tt({ h: (n = t[1], r = t[2], r === void 0 && (r = \"deg\"), Number(n) * (Et[r] || 1)), s: Number(t[3]), l: Number(t[4]), a: t[5] === void 0 ? 1 : Number(t[5]) / (t[6] ? 100 : 1) });\n return nt(s);\n}, \"hsl\"]], object: [[function(e) {\n var t = e.r, n = e.g, r = e.b, s = e.a, i = s === void 0 ? 1 : s;\n return f(t) && f(n) && f(r) ? X({ r: Number(t), g: Number(n), b: Number(r), a: Number(i) }) : null;\n}, \"rgb\"], [function(e) {\n var t = e.h, n = e.s, r = e.l, s = e.a, i = s === void 0 ? 1 : s;\n if (!f(t) || !f(n) || !f(r)) return null;\n var a = tt({ h: Number(t), s: Number(n), l: Number(r), a: Number(i) });\n return nt(a);\n}, \"hsl\"], [function(e) {\n var t = e.h, n = e.s, r = e.v, s = e.a, i = s === void 0 ? 1 : s;\n if (!f(t) || !f(n) || !f(r)) return null;\n var a = function(o) {\n return { h: lt(o.h), s: d(o.s, 0, 100), v: d(o.v, 0, 100), a: d(o.a) };\n }({ h: Number(t), s: Number(n), v: Number(r), a: Number(i) });\n return ut(a);\n}, \"hsv\"]] }, st = function(e, t) {\n for (var n = 0; n < t.length; n++) {\n var r = t[n][0](e);\n if (r) return [r, t[n][1]];\n }\n return [null, void 0];\n}, Ht = function(e) {\n return typeof e == \"string\" ? st(e.trim(), rt.string) : typeof e == \"object\" && e !== null ? st(e, rt.object) : [null, void 0];\n}, O = function(e, t) {\n var n = x(e);\n return { h: n.h, s: d(n.s + 100 * t, 0, 100), l: n.l, a: n.a };\n}, T = function(e) {\n return (299 * e.r + 587 * e.g + 114 * e.b) / 1e3 / 255;\n}, it = function(e, t) {\n var n = x(e);\n return { h: n.h, s: n.s, l: d(n.l + 100 * t, 0, 100), a: n.a };\n}, at = function() {\n function e(t) {\n this.parsed = Ht(t)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };\n }\n return e.prototype.isValid = function() {\n return this.parsed !== null;\n }, e.prototype.brightness = function() {\n return l(T(this.rgba), 2);\n }, e.prototype.isDark = function() {\n return T(this.rgba) < 0.5;\n }, e.prototype.isLight = function() {\n return T(this.rgba) >= 0.5;\n }, e.prototype.toHex = function() {\n return t = N(this.rgba), n = t.r, r = t.g, s = t.b, a = (i = t.a) < 1 ? W(l(255 * i)) : \"\", \"#\" + W(n) + W(r) + W(s) + a;\n var t, n, r, s, i, a;\n }, e.prototype.toRgb = function() {\n return N(this.rgba);\n }, e.prototype.toRgbString = function() {\n return t = N(this.rgba), n = t.r, r = t.g, s = t.b, (i = t.a) < 1 ? \"rgba(\" + n + \", \" + r + \", \" + s + \", \" + i + \")\" : \"rgb(\" + n + \", \" + r + \", \" + s + \")\";\n var t, n, r, s, i;\n }, e.prototype.toHsl = function() {\n return et(x(this.rgba));\n }, e.prototype.toHslString = function() {\n return t = et(x(this.rgba)), n = t.h, r = t.s, s = t.l, (i = t.a) < 1 ? \"hsla(\" + n + \", \" + r + \"%, \" + s + \"%, \" + i + \")\" : \"hsl(\" + n + \", \" + r + \"%, \" + s + \"%)\";\n var t, n, r, s, i;\n }, e.prototype.toHsv = function() {\n return t = dt(this.rgba), { h: l(t.h), s: l(t.s), v: l(t.v), a: l(t.a, 3) };\n var t;\n }, e.prototype.invert = function() {\n return p({ r: 255 - (t = this.rgba).r, g: 255 - t.g, b: 255 - t.b, a: t.a });\n var t;\n }, e.prototype.saturate = function(t) {\n return t === void 0 && (t = 0.1), p(O(this.rgba, t));\n }, e.prototype.desaturate = function(t) {\n return t === void 0 && (t = 0.1), p(O(this.rgba, -t));\n }, e.prototype.grayscale = function() {\n return p(O(this.rgba, -1));\n }, e.prototype.lighten = function(t) {\n return t === void 0 && (t = 0.1), p(it(this.rgba, t));\n }, e.prototype.darken = function(t) {\n return t === void 0 && (t = 0.1), p(it(this.rgba, -t));\n }, e.prototype.rotate = function(t) {\n return t === void 0 && (t = 15), this.hue(this.hue() + t);\n }, e.prototype.alpha = function(t) {\n return typeof t == \"number\" ? p({ r: (n = this.rgba).r, g: n.g, b: n.b, a: t }) : l(this.rgba.a, 3);\n var n;\n }, e.prototype.hue = function(t) {\n var n = x(this.rgba);\n return typeof t == \"number\" ? p({ h: t, s: n.s, l: n.l, a: n.a }) : l(n.h);\n }, e.prototype.isEqual = function(t) {\n return this.toHex() === p(t).toHex();\n }, e;\n}(), p = function(e) {\n return e instanceof at ? e : new at(e);\n};\nconst Nt = `const _IS_WORKLET = typeof registerPaint !== \"undefined\";\nconst M = Math;\n\nconst lcgrand =\n (seed = 1) =>\n (a = 0, b = 1) =>\n a +\n (M.abs(b - a) * (M.imul(48271, (seed = M.imul(214013, seed) + 2531011)) & 0x7fffffff)) /\n 0x7fffffff;\n\n// vector utils\nconst pol2vec = (l, a = 0) => [l * M.cos(a), l * M.sin(a)];\nconst vecmag = ([x, y]) => M.sqrt(x * x + y * y);\nconst vecnorm = ([x, y], l = vecmag([x, y])) => (l === 0 ? [0, 0] : [x / l, y / l]);\n\n// ..____.\n// ____/ \\\\___\n// -1..0.a...b..l...\nconst trapezoidalWave = (l, a, b) => {\n const s = M.max(a, l - b);\n\n return (t) => {\n if (t < a) return M.max(0, t / a);\n if (t > s) return M.max(0, 1 - (t - s) / (l - s));\n return 1;\n };\n};\n\nconst _cycle = (x, n) => ((x % n) + n) % n;\nconst _mirror = (x, n, r) => (x < r ? n + x : x > n - r ? x - n : x);\nconst clamp = (min, x, max) => Math.max(min, Math.min(x, max));\n\nconst cycleBounds = ([x, y], [w, h], r) => {\n const [tx, ty] = [_cycle(x, w), _cycle(y, h)];\n return [\n [tx, ty],\n [_mirror(tx, w, r), _mirror(ty, h, r)],\n ];\n};\n\n/**\n * WORKLET\n */\n\nconst getCSSVar = (props, name) => {\n const val = props.get(name);\n\n if (typeof val === \"string\") return val;\n return val?.length >= 1 ? val[0] : undefined;\n};\n\nclass SpoilerPainterWorklet {\n static get contextOptions() {\n return { alpha: true };\n }\n\n /*\n use this function to retrieve any custom properties (or regular properties, such as 'height')\n defined for the element, return them in the specified array\n */\n static get inputProperties() {\n return [\"--t\", \"--t-stop\", \"--fade\", \"--gap\", \"--accent\", \"--words\", \"--density\"];\n }\n\n paint(ctx, size, props) {\n const rand = lcgrand(4011505); // predictable random\n\n const // \\`devicePixelRatio\\` and \\`dprx\\` are not the same\n // user agents use higher density bitmaps for canvases when\n // painting from worklets, so 1px stands for 1px on the screen\n dprx = _IS_WORKLET ? 1.0 : devicePixelRatio,\n // hsl format\n accent = (getCSSVar(props, \"--accent\") || \"0 0% 0%\").split(\" \"), // default: black\n mimicWords = getCSSVar(props, \"--words\") === \"true\",\n frict = 0,\n vmin = 2,\n vmax = 12,\n width = size.width / dprx,\n height = size.height / dprx,\n // gaps to the edges\n [hgap, vgap] = (getCSSVar(props, \"--gap\") || \"0px 0px\").split(\" \").map(parseFloat),\n density = parseFloat(getCSSVar(props, \"--density\")) || 0.08,\n // size deviation, disabled for low DPR devices, so we don't end up with\n // particles that have initial size of 0 px\n sizedev = devicePixelRatio > 1 ? 0.5 : 0.0,\n fadeDuration = parseFloat(getCSSVar(props, \"--fade\")) || 0.0;\n\n const World = {\n // global world time in seconds (always increasing)\n t: parseFloat(getCSSVar(props, \"--t\") ?? 0.0),\n\n // fade in animation starts after this point in time\n tStop: parseFloat(getCSSVar(props, \"--t-stop\") ?? \"Infinity\"),\n\n // fade out animation starts after this point in time\n tStart: 0,\n\n // given \\`density\\`, total number of particles depends\n // on the sq area, but we limit it so it doesn't hurt performance\n n: M.round(M.min(5000, density * (width - 2 * hgap) * (height - 2 * vgap))),\n };\n\n const lineWidth = width - 2 * hgap,\n lineHeight = height - 2 * vgap;\n\n const wordDist = mimicWords\n ? // we assume that the space character is 4 times smaller than a character,\n // (which is an average difference between an EM and a whitespace)\n // however it can't be too small otherwise it will be barely visible\n makeWordDistribution(lineWidth, lineHeight, Math.max(12, lineHeight / 4))\n : (x) => x * (width - 2 * hgap);\n\n ctx.clearRect(0, 0, size.width, size.height);\n\n for (let i = 0; i < World.n; ++i) {\n /** Initial values */\n const x0 = hgap + wordDist(rand());\n const y0 = rand(vgap, height - vgap);\n\n const v0mag = rand(vmin, vmax),\n size0 = rand(1.0, 1.0 + sizedev);\n\n const _l = parseInt(accent[2]);\n const ldir = _l > 50 ? -1 : 1; // light or dark\n const lightness = M.floor(clamp(0, _l + ldir * rand(0, 30), 100));\n\n const v0 = pol2vec(v0mag, rand(0, M.PI * 2));\n const [vx0norm, vy0norm] = vecnorm(v0);\n const [vx0, vy0] = v0;\n\n const shape = rand() > 0.5 ? \"square\" : \"circle\";\n\n /** Time */\n const lifetime = rand(0.3, 1.5); // in sec\n const respawn = rand(0, 1); // how long until the next respawn\n\n // make particles appear in 0.15s and disappear in 0.3s\n const visibilityFn = trapezoidalWave(lifetime, 0.15, 0.3);\n\n // ensures that particles don't all spawn at the same time\n const phase = rand(0, lifetime + respawn);\n\n const cantSpawnNoMore =\n Math.floor((World.tStop + phase) / (lifetime + respawn)) <\n Math.floor((World.t + phase) / (lifetime + respawn));\n\n if (cantSpawnNoMore) continue; // can not respawn after \\`tstop\\`\n\n let t = M.min(lifetime, (World.t + phase) % (lifetime + respawn));\n\n const vx = vx0 - 0.5 * frict * t * vx0norm;\n const vy = vy0 - 0.5 * frict * t * vy0norm;\n\n const x = x0 + vx * t;\n const y = y0 + vy * t;\n\n const fade = animateFadeInOut(World, i, fadeDuration);\n\n const alpha = fade * (1 - t / lifetime);\n const size = fade * (size0 * visibilityFn(t));\n\n for (const [wx, wy] of cycleBounds([x, y], [width, height], size / 2)) {\n ctx.beginPath();\n\n ctx.fillStyle = \\`hsl(\\${accent[0]} \\${accent[1]} \\${lightness}% / \\${M.round(alpha * 100)}%)\\`;\n\n // Two types of shapes ■ and ●\n if (shape === \"square\") {\n ctx.rect(dprx * wx, dprx * wy, dprx * size, dprx * size);\n } else {\n ctx.arc(dprx * wx, dprx * wy, (dprx * size) / 2, 0, M.PI * 2);\n }\n\n ctx.closePath();\n ctx.fill();\n }\n }\n }\n}\n\n/**\n * Returns a fade in/out scale factor for a particle at a given index\n * @param {object} World world state, including current time and stop points\n * @param {number} idx index of the particle\n * @param {number} duration total time of the animation\n * @returns number between 0 and 1 (fully opaque)\n *\n * How animation is performed. Particles start to animate sequentially, from\n * 0 to 2 / 3 of the duration, the animation lasts for 1 / 3 of the duration.\n *\n * ___duration___\n * [....+....+....]\n * 1 5 10.....\n */\nconst animateFadeInOut = (World, idx, duration, ease = easeOutCubic) => {\n const direction = World.tStop <= World.t ? \"out\" : \"in\";\n const animationStartT = direction === \"in\" ? World.tStart : World.tStop;\n\n // when this particle should start fading\n const t = animationStartT + ((2 / 3) * duration * idx) / World.n;\n const fadeFor = (1 / 3) * duration;\n\n let progress = 0.0;\n\n if (direction === \"in\") {\n progress = (fadeFor + t - World.t) / fadeFor || 0;\n } else {\n progress = (World.t - t) / fadeFor || 1;\n }\n\n return ease(1.0 - clamp(0, progress, 1));\n};\n\nfunction easeOutCubic(t) {\n return --t * t * t + 1;\n}\n\nconst FAKE_WORDS = [5, 3, 4, 4, 2, 4, 7, 6, 8, 6, 3, 1, 6];\n\n/**\n *\n * @param {number} line width of the line\n * @param {number} em width of a character\n * @param {number} space whitespace width\n * @returns\n */\nconst makeWordDistribution = (line, em, space) => {\n let marker = 0,\n i = 0,\n wordslen = 0,\n chunks = [];\n\n do {\n const endOfWord = Math.min(line, marker + FAKE_WORDS[i++ % FAKE_WORDS.length] * em);\n wordslen += endOfWord - marker; // total length of words excl gaps\n\n chunks.push([marker, (marker = endOfWord)]);\n } while ((marker += space) < line);\n\n // ensure the last word always ends at the end of the line\n if (chunks.length >= 0) chunks[chunks.length - 1][1] = line;\n\n return (t) => {\n const w = t * wordslen;\n\n let m = 0.0;\n\n for (const [start, end] of chunks) {\n const wordLength = end - start;\n\n if (m < w && w <= m + wordLength) {\n return start + w - m;\n }\n\n m += wordLength;\n }\n\n return 0;\n };\n};\n\nexport { SpoilerPainterWorklet };\nif (_IS_WORKLET) registerPaint(\"spoiler\", SpoilerPainterWorklet);\n`, I = typeof CSS < \"u\" && CSS.paintWorklet !== void 0, y = {\n fps: 24,\n gap: 6,\n density: 0.12,\n mimicWords: !1,\n fallback: \"black\"\n}, Ot = 24, P = 293, Tt = 333, Bt = 1.5, B = 8, ot = \"matchMedia\" in globalThis && typeof globalThis.matchMedia == \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nclass Lt {\n el;\n maxFPS = Ot;\n #i = !1;\n constructor(t, n = {}) {\n this.el = t, this.#t = 0, this.update(n), n.onlyInViewport === !0 && this.#h();\n }\n #a = !1;\n /**\n * Stops everything and reverts the styles\n */\n destroy() {\n this.#a = !0, this.stopAnimation(), [\"background\", \"--t\", \"--t-stop\", \"--fade\", \"--gap\", \"--words\", \"--density\"].forEach((t) => {\n this.el.style.removeProperty(t);\n }), this.#n && (this.#n.disconnect(), this.#n = null);\n }\n /**\n * `fps` - the maximum frames per second\n * `mimicWords` - if true, the spoiler will try to mimic the shape of words (cssvar)\n * `density` - overrides the density of the noise (cssvar)\n * `gap` - in px a gap that particles won't spawn within (ignored for elements that exceed\n * the size limit)\n */\n update({\n fps: t = y.fps,\n gap: n = y.gap,\n mimicWords: r = y.mimicWords,\n density: s = y.density,\n fallback: i = y.fallback,\n forceFallback: a,\n accentColor: o\n } = {}) {\n if (this.#a)\n throw new Error(\"Painter has been destroyed and can't be used again.\");\n if (this.maxFPS = ot ? 0 : t, this.#i = !!a, !I || a) {\n this.el.style.setProperty(\"--fallback\", i || \"initial\");\n return;\n }\n const u = getComputedStyle(this.el).getPropertyValue(\"display\") !== \"inline\";\n if (this.useBackgroundStyle(\"auto\", \"auto\", { tile: !1 }), u) {\n r = !1;\n const c = this.el.getBoundingClientRect();\n if (c.width * c.height > P * P)\n this.useBackgroundStyle(\n Math.min(c.width, P),\n Math.min(c.height, P),\n { tile: !0 }\n );\n else {\n const m = Math.floor(\n Math.min(Number(n), c.width / B, c.height / B)\n );\n this.el.style.setProperty(\"--gap\", `${m}px ${m}px`);\n }\n }\n if (!u) {\n const c = [...this.el.getClientRects()], m = Math.min(...c.map((S) => S.height));\n this.useBackgroundStyle(Tt, m, { tile: !0 });\n const A = Math.floor(Math.min(m / B, Number(n)));\n this.el.style.setProperty(\"--gap\", `0 ${A}px`);\n }\n if (this.el.style.setProperty(\"--words\", String(r)), this.el.style.setProperty(\"--density\", String(s)), o) {\n const c = p(o).toHsl();\n this.el.style.setProperty(\"--accent\", `${c.h}deg ${c.s}% ${c.l}%`);\n } else\n this.el.style.removeProperty(\"--accent\");\n }\n useBackgroundStyle(t, n, r) {\n t = typeof t == \"number\" ? `${t}px` : t, n = typeof n == \"number\" ? `${n}px` : n;\n const s = r?.tile ? \"repeat left center\" : \"no-repeat center center\";\n this.el.style.background = `paint(spoiler) ${s} / ${t} ${n}`;\n }\n /**\n * Hides and reveals the content. Turns the noise animation on and off.\n */\n #o = !1;\n get isHidden() {\n return this.#o;\n }\n #c = 0;\n set #r(t) {\n this.el.style.setProperty(\"--fade\", `${this.#c = Number(t)}s`);\n }\n get #r() {\n return this.#c;\n }\n parseFadeDuration(t) {\n return ot ? 0 : t === !0 ? Bt : Number(t);\n }\n hide({ animate: t = !0 } = {}) {\n if (this.#o = !0, !I || this.#i) {\n this.el.style.setProperty(\"background\", \"var(--fallback)\");\n return;\n }\n this.#r = this.parseFadeDuration(t), this.#t = null, this.t = 0, this.startAnimation();\n }\n reveal({ animate: t = !0 } = {}) {\n if (this.#o = !1, !I || this.#i) {\n this.el.style.removeProperty(\"background\");\n return;\n }\n const n = this.parseFadeDuration(t);\n this.#r = n, this.#t = this.t, n <= 0 && this.stopAnimation();\n }\n /**\n * Clock states\n */\n #l = 0;\n #s = 0;\n #d = null;\n get #t() {\n return this.#d;\n }\n set #t(t) {\n this.#d = t, t !== null ? this.el.style.setProperty(\"--t-stop\", t.toFixed(3)) : this.el.style.removeProperty(\"--t-stop\");\n }\n get t() {\n return this.#l;\n }\n set t(t) {\n this.#l = t, this.el.style.setProperty(\"--t\", t.toFixed(3));\n }\n // animation loop\n #u = (t) => {\n if (this.#a) return;\n const n = this.#t && this.t > this.#t + this.#r;\n this.maxFPS > 0 && !n && (this.#e = requestAnimationFrame(this.#u));\n const r = t - this.#s;\n r > 0 && r < 1e3 / this.maxFPS || (this.t += r / 1e3, this.#s = t);\n };\n /** Animation state */\n #e = null;\n startAnimation() {\n this.#s = performance.now(), this.#u(this.#s);\n }\n stopAnimation() {\n this.#e && (cancelAnimationFrame(this.#e), this.#e = null);\n }\n get isAnimating() {\n return this.#e !== null;\n }\n #n = null;\n #h() {\n typeof IntersectionObserver > \"u\" || (this.#n = new IntersectionObserver(\n (t) => {\n t.forEach((n) => {\n n.isIntersecting ? this.startAnimation() : this.stopAnimation();\n });\n },\n {\n root: null,\n // observes the element in the viewport\n threshold: 0.1\n // trigger if 10% of the element is visible\n }\n ), this.#n.observe(this.el));\n }\n}\nI && CSS.paintWorklet.addModule(\n URL.createObjectURL(new Blob([Nt], { type: \"application/javascript\" }))\n);\nconst zt = \"_spoiler_1cf3f_1\", $t = \"_hidden_1cf3f_1\", Vt = \"_transition_1cf3f_1\", Qt = \"_fade_1cf3f_17\", Ut = \"_iris_1cf3f_51\", E = {\n spoiler: zt,\n hidden: $t,\n transition: Vt,\n fade: Qt,\n iris: Ut,\n \"remove-mask\": \"_remove-mask_1cf3f_1\"\n}, Kt = \"data:image/webp;base64,UklGRuIAAABXRUJQVlA4WAoAAAAQAAAAHwAAHwAAQUxQSHEAAAABJyAQSOFmFxERg4PatlLpIgE0wLcAYwWQ/qXegzuLBBH9nwDsfPyUc2EYAMcwk/ABgDDsZBoAINgFtRWmeuYwzDTczGsw4QHwKgtqfZgjM3o3RBiWwAc7BsO0ophZfcQxZofRzEQPF3Z8WaYVpjrm/wBWUDggSgAAAHADAJ0BKiAAIAA+nUCYSaWkIqE36ACwE4lnAM50PvlSI7/wMAD+7rf8db9v/7SWp6hM/Twt6Iatza3v6Hxf/+ugJP+n55BGQsAA\", qt = \"data:image/webp;base64,UklGRswAAABXRUJQVlA4WAoAAAAQAAAAHwAAHwAAQUxQSHEAAAABJyAQSOFmFxERg4PatlLpIgE0wLcAYwWQ/qXegzuLBBH9nwDsfPyUc2EYAMcwk/ABgDDsZBoAINgFtRWmeuYwzDTczGsw4QHwKgtqfZgjM3o3RBiWwAc7BsO0ophZfcQxZofRzEQPF3Z8WaYVpjrm/wBWUDggNAAAAFADAJ0BKiAAIAA/MYKzVK6opKM3+qgB0CYJZwAAd47WlJcAAP7tvYyWGro6+OiP70TIoAA=\";\nlet Yt = { css: null };\nconst jt = (e) => {\n const [t] = b(() => e.hidden !== void 0), [n, r] = b(e.defaultHidden ?? !0);\n if (t !== (e.hidden !== void 0))\n throw new Error(\"Cannot change from controlled to uncontrolled or vice versa.\");\n const s = w(\n (i) => {\n t || r(i), e.onHiddenChange?.(i);\n },\n [t, e.onHiddenChange]\n );\n return t ? [\n e.hidden,\n // we know that it is not `undefined` because of the useState initializer\n s\n ] : [n, s];\n}, Zt = (e, t) => {\n const [n, r] = t, s = w(() => r(!1), [r]), i = w(() => r(!0), [r]), a = w(() => r(!n), [n, r]);\n return L(() => {\n switch (e) {\n case \"hover\":\n return { onMouseEnter: s, onMouseLeave: i };\n case \"click\":\n return { onClick: a };\n default:\n return {};\n }\n }, [e, s, i, a]);\n}, Gt = (e) => {\n const t = _t(\"(prefers-color-scheme: dark)\");\n return e === \"system\" ? t : e === \"dark\";\n}, Jt = (e, t) => {\n const [n, r = n] = [e].flat();\n return t ? r : n;\n}, te = (e) => {\n const {\n asChild: t = !1,\n tagName: n = \"span\",\n transition: r = \"iris\",\n hidden: s,\n revealOn: i = s === void 0 ? \"hover\" : !1,\n defaultHidden: a,\n onHiddenChange: o,\n // background noise settings\n accentColor: u = [\"#333\", \"#fff\"],\n theme: c = \"system\",\n mimicWords: m = !0,\n fps: A = 24,\n gap: S,\n density: $,\n noiseFadeDuration: V,\n fallback: Q,\n forceFallback: U = !1,\n // inherited props\n className: ht,\n children: M,\n ...pt\n } = e, _ = C(null), k = C(), [ft, mt] = Pt(_, 4), K = jt(e), [g] = K, D = Gt(c), q = Jt(u, D), F = C(V);\n F.current = V, kt(Yt.css, _);\n const R = L(() => {\n let h = Q ?? // image is 32x32\n `repeat top left / 16px 16px url(${D ? qt : Kt})`;\n return {\n fps: A,\n gap: S,\n density: $,\n mimicWords: m,\n accentColor: q,\n fallback: h,\n forceFallback: U\n };\n }, [\n A,\n S,\n $,\n m,\n q,\n Q,\n D,\n ft,\n mt,\n U\n ]), [gt] = b(() => R);\n H(() => {\n const h = new Lt(_.current, gt);\n return k.current = h, () => {\n h.destroy(), k.current = void 0;\n };\n }, []), H(() => {\n const h = k.current, j = F.current !== void 0 ? { animate: F.current } : {};\n h && g !== h.isHidden && (g ? h.hide(j) : h.reveal(j));\n }, [g]), H(() => {\n k.current?.update(R);\n }, [R]);\n const bt = [\n E.spoiler,\n g ? `${E.hidden}` : \"\",\n // append className provided above\n ht\n ].filter((h) => h).join(\" \");\n let Y = M;\n (r === \"fade\" || r === \"iris\") && (Y = Z(n, {\n className: `${E.transition} ${E[r]}`,\n children: M\n }));\n const vt = t && At(M) ? M : Z(n, {\n children: Y,\n \"aria-expanded\": !g,\n \"data-hidden\": g ? !0 : void 0\n });\n return St(vt, {\n ref: _,\n className: bt,\n ...Zt(i, K),\n ...pt\n });\n};\nexport {\n Lt as S,\n Yt as _,\n te as a\n};\n","\"use client\";\nimport { _ as S } from \"./Spoiler-BFPnjl0F.js\";\nimport { a as o, S as s } from \"./Spoiler-BFPnjl0F.js\";\nS.css = \"._spoiler_1cf3f_1._hidden_1cf3f_1:not(:has(>._transition_1cf3f_1)){color:transparent;border-color:transparent;text-decoration-color:transparent;-webkit-text-emphasis-color:transparent;text-emphasis-color:transparent}._spoiler_1cf3f_1._hidden_1cf3f_1:not(:has(>._transition_1cf3f_1))>*{opacity:0}._transition_1cf3f_1._fade_1cf3f_17{--hide-transition: .2s ease-out;--reveal-transition: .5s ease-out;transition:opacity var(--reveal-transition),filter var(--reveal-transition)}._spoiler_1cf3f_1._hidden_1cf3f_1>._transition_1cf3f_1._fade_1cf3f_17{opacity:0;transition:opacity var(--hide-transition),filter var(--hide-transition);filter:blur(.5px)}@property --iris-gradient-length{syntax: \\\"\\\"; inherits: false; initial-value: 100%;}@property --iris-radius{syntax: \\\" | \\\"; inherits: false; initial-value: 16px;}._spoiler_1cf3f_1>._transition_1cf3f_1._iris_1cf3f_51{--hide-duration: .15s;--reveal-duration: .3s}._spoiler_1cf3f_1._hidden_1cf3f_1>._transition_1cf3f_1._iris_1cf3f_51{--iris-gradient-length: 0%;--iris-radius: 0px;opacity:0;filter:blur(1px);transition:--iris-gradient-length 0s linear var(--hide-duration),filter 0s linear var(--hide-duration),opacity var(--hide-duration) ease-out}._transition_1cf3f_1._iris_1cf3f_51{-webkit-mask:radial-gradient(circle closest-corner,black var(--iris-gradient-length),transparent calc(var(--iris-gradient-length) + var(--iris-radius))) no-repeat center;mask:radial-gradient(circle closest-corner,black var(--iris-gradient-length),transparent calc(var(--iris-gradient-length) + var(--iris-radius))) no-repeat center;transition:--iris-gradient-length var(--reveal-duration) ease-out,opacity var(--reveal-duration) ease-out,filter var(--reveal-duration) ease-out}@keyframes _remove-mask_1cf3f_1{to{-webkit-mask-image:none;mask-image:none}}._spoiler_1cf3f_1:not(._hidden_1cf3f_1)>._transition_1cf3f_1._iris_1cf3f_51{animation:0s linear var(--reveal-duration) 1 forwards _remove-mask_1cf3f_1}\\n\";\nexport {\n o as Spoiler,\n s as SpoilerPainter,\n S as __SPOILER_STYLES_CSS\n};\n","import cn from 'clsx'\nimport { useAtomValue, useSetAtom } from 'jotai'\nimport { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\nimport { Spoiler } from 'spoiled'\n\nimport { Icon, Typography } from '@/components/ui'\n\nimport { ICard } from '@/shared/types/card.interface'\n\nimport { useAmplitude, useSearch, useTelegram } from '@/hooks'\nimport { friendsAtom, inboxAtom, profileAtom } from '@/store'\nimport { createCloudinaryUrl } from '@/utils/createCloudinaryUrl'\nimport { getRandomMessage } from '@/utils/getRandomMessage'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\ninterface IProps {\n\tcard: ICard\n\ttype: 'friends' | 'inbox'\n\tsearchId: string\n\tonLike?: (card: ICard) => void\n}\n\nconst Card: FC = ({ card, searchId, type, onLike }) => {\n\tconst { feedback, feedbackData } = useSearch(searchId, card.user_id)\n\tconst { t } = useTranslation('common')\n\tconst setInbox = useSetAtom(inboxAtom)\n\tconst [isLoading, setIsLoading] = useState(false)\n\tconst profile = useAtomValue(profileAtom)\n\tconst setFriends = useSetAtom(friendsAtom)\n\tconst maxWidth =\n\t\twindow.innerWidth -\n\t\t(profile.paid ? 112 : 62) -\n\t\t(type === 'friends' ? 28 : 60)\n\tconst [isLike, setIsLike] = useState(false)\n\tconst { tg } = useTelegram()\n\tconst { event } = useAmplitude()\n\tconst navigate = useNavigate()\n\n\tconst handleClickFriend = () => {\n\t\tif (!profile.paid && type === 'inbox') {\n\t\t\tnavigate('/payment', {\n\t\t\t\tstate: {\n\t\t\t\t\tstate: 'inbox',\n\t\t\t\t\tsource: 'request_profile'\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn\n\t\t}\n\n\t\tif (isLoading) return\n\n\t\tif (type === 'inbox' && isLike) {\n\t\t\tsetFriends(prevState => ({\n\t\t\t\t...prevState,\n\t\t\t\tcards: prevState.cards.some(item => item.user_id === card.user_id)\n\t\t\t\t\t? prevState.cards\n\t\t\t\t\t: [card, ...prevState.cards]\n\t\t\t}))\n\t\t\tnavigate('/friend', {\n\t\t\t\tstate: {\n\t\t\t\t\tuser_id: card.user_id\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tnavigate('/friend', {\n\t\t\t\tstate: {\n\t\t\t\t\tuser_id: card.user_id\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tconst handleTelegram = e => {\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\t\te.stopPropagation()\n\t\tevent('go_to_telegram', {\n\t\t\tscreen: 'friends',\n\t\t\tsearch_id: searchId,\n\t\t\tprofile_id: card.user_id\n\t\t})\n\n\t\tif (!card.telegram) return\n\n\t\ttg.CloudStorage.getItem('messagesProfiles', (error, value) => {\n\t\t\tconst telegram = card.telegram\n\t\t\tconst addedProfiles = value ? JSON.parse(value) : []\n\n\t\t\tif (!addedProfiles.includes(telegram)) {\n\t\t\t\taddedProfiles.push(telegram)\n\t\t\t\ttg.CloudStorage.setItem(\n\t\t\t\t\t'messagesProfiles',\n\t\t\t\t\tJSON.stringify(addedProfiles)\n\t\t\t\t)\n\t\t\t\tconst link = `https://t.me/${telegram}${\n\t\t\t\t\t['ios', 'android'].includes(tg.platform)\n\t\t\t\t\t\t? `?text=${getRandomMessage(card.name.split(' ')[0])}`\n\t\t\t\t\t\t: ''\n\t\t\t\t}`\n\t\t\t\ttg.openTelegramLink(link)\n\t\t\t} else {\n\t\t\t\ttg.openTelegramLink(`https://t.me/${telegram}`)\n\t\t\t}\n\t\t})\n\t}\n\n\tuseEffect(() => {\n\t\tif (feedbackData && feedbackData.is_match) {\n\t\t\tsetInbox(prevState => ({\n\t\t\t\t...prevState,\n\t\t\t\tcards: prevState.cards.map(item =>\n\t\t\t\t\titem.user_id === card.user_id\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...item,\n\t\t\t\t\t\t\t\ttelegram: feedbackData.telegram,\n\t\t\t\t\t\t\t\tinstagram: feedbackData.instagram\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: item\n\t\t\t\t)\n\t\t\t}))\n\t\t\tonLike(card)\n\t\t\tsetIsLoading(false)\n\t\t}\n\t\tif (feedbackData && !feedbackData.is_match) {\n\t\t\tnotifyMessage({\n\t\t\t\ttype: 'error',\n\t\t\t\tposition: 'top-left',\n\t\t\t\tmessage: t('notify_error.message'),\n\t\t\t\tdescription: t('notify_error.description')\n\t\t\t})\n\t\t\tsetIsLike(false)\n\t\t\tsetIsLoading(false)\n\t\t}\n\t}, [feedbackData])\n\n\tconst handleLike = e => {\n\t\te.stopPropagation()\n\t\ttg.HapticFeedback.notificationOccurred('success')\n\n\t\tsetIsLike(true)\n\t\tevent('like_clicked', {\n\t\t\tscreen: 'friends',\n\t\t\tsearch_id: searchId,\n\t\t\tprofile_id: card.user_id\n\t\t})\n\t\tevent('matched', {\n\t\t\tscreen: 'friends',\n\t\t\tsearch_id: searchId,\n\t\t\tprofile_id: card.user_id\n\t\t})\n\t\tfeedback('like')\n\t\tsetIsLoading(true)\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t{type === 'inbox' && !profile.paid ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{card.name ? card.name : 'hidden'}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{card.paid && }\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{card.name}\n\t\t\t\t\t\t\t\t{card.paid && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{card.country.flag} {card.city['ru']}\n\t\t\t\t\t\t{card.country['ru'] !== '' ? `, ${card.country['ru']}` : ''}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t{(type === 'friends' || (type === 'inbox' && isLike && !isLoading)) && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{type === 'inbox' && isLoading && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{type === 'inbox' && !isLike && profile.paid && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Card\n","import { AnimatePresence, motion } from 'framer-motion'\nimport { useAtom, useAtomValue } from 'jotai'\nimport { FC, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport {\n\tButton,\n\tEmptyState,\n\tIcon,\n\tMainLayout,\n\tTypography\n} from '@/components/ui'\n\nimport { ICard } from '@/shared/types/card.interface'\n\nimport { useTelegram } from '@/hooks'\nimport { friendsAtom, inboxAtom, profileAtom } from '@/store'\n\nimport { Card } from './components'\n\nconst Friends: FC = () => {\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\tconst { t } = useTranslation()\n\tconst { tg } = useTelegram()\n\tconst [friends, setFriends] = useAtom(friendsAtom)\n\tconst [inbox, setInbox] = useAtom(inboxAtom)\n\tconst hasFriends = friends.cards.length > 0\n\tconst hasInbox = inbox.cards.length > 0\n\tconst [visibleAllInbox, setVisibleAllInbox] = useState(false)\n\tconst likedCard = useRef([])\n\tconst [countLike, setCountLike] = useState(0)\n\n\tconst handleBack = () => {\n\t\tnavigate('/community')\n\t}\n\n\tconst addLikedCard = (card: ICard) => {\n\t\tlikedCard.current = [card, ...likedCard.current]\n\t\tsetCountLike(prevState => prevState + 1)\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(handleBack)\n\n\t\treturn () => {\n\t\t\ttransferLikedCard()\n\t\t\ttg.BackButton.offClick(handleBack)\n\t\t}\n\t}, [])\n\n\tconst transferLikedCard = () => {\n\t\tif (!likedCard.current.length) return\n\n\t\tlikedCard.current.map(card => {\n\t\t\tsetFriends(prevState => ({\n\t\t\t\t...prevState,\n\t\t\t\tcards: prevState.cards.some(item => item.user_id === card.user_id)\n\t\t\t\t\t? prevState.cards\n\t\t\t\t\t: [card, ...prevState.cards]\n\t\t\t}))\n\t\t\tsetInbox(prevState => ({\n\t\t\t\t...prevState,\n\t\t\t\tcards: prevState.cards.filter(item => item.user_id !== card.user_id)\n\t\t\t}))\n\t\t})\n\t}\n\n\tconst handleGoToPayment = () => {\n\t\tnavigate('/payment', {\n\t\t\tstate: {\n\t\t\t\tstate: 'inbox',\n\t\t\t\tsource: 'request_button'\n\t\t\t}\n\t\t})\n\t}\n\n\tif (!hasFriends && !hasInbox) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t)\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{hasInbox && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{t('friends.inbox.title', {\n\t\t\t\t\t\t\t\tcount: inbox.cards.length - countLike\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{inbox.cards.slice(0, 2).map(item => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{inbox.cards.slice(2).map(item => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{inbox.cards.length >= 1 && !visibleAllInbox && !profile.paid && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{inbox.cards.length > 2 && !visibleAllInbox && profile.paid && (\n\t\t\t\t\t\t\t setVisibleAllInbox(true)}\n\t\t\t\t\t\t\t\tclassName='flex gap-0.5 items-end justify-center'\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t('friends.inbox.button_view_all')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t{hasFriends && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{t('friends.friends.title', {\n\t\t\t\t\t\t\t\tcount: friends.cards.length + countLike\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{friends.cards.map(item => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Friends\n","import { useAtom, useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { Card, MainLayout } from '@/components/ui'\n\nimport { useTelegram } from '@/hooks'\nimport { friendsAtom, inboxAtom } from '@/store'\n\nconst Friend: FC = () => {\n\tconst { state } = useLocation()\n\tconst { tg } = useTelegram()\n\tconst navigate = useNavigate()\n\tconst [inbox, setInbox] = useAtom(inboxAtom)\n\tconst friends = useAtomValue(friendsAtom)\n\tconst data = [inbox, friends].find(source =>\n\t\tsource.cards.some(card => card.user_id === Number(state.user_id))\n\t)\n\tconst sourceType = data === inbox ? 'inbox' : 'friends'\n\tconst profile = data?.cards.find(\n\t\tcard => card.user_id === Number(state.user_id)\n\t)\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(() => navigate('/friends'))\n\n\t\treturn () => {\n\t\t\ttg.BackButton.offClick(() => navigate('/friends'))\n\t\t}\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!profile) {\n\t\t\treturn navigate('/friends')\n\t\t}\n\n\t\tif (profile.like && sourceType === 'inbox') {\n\t\t\tsetInbox(prevState => ({\n\t\t\t\t...prevState,\n\t\t\t\tcards: prevState.cards.filter(item => item.user_id !== profile.user_id)\n\t\t\t}))\n\t\t}\n\t}, [profile])\n\n\tif (!profile) return null\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t)\n}\n\nexport default Friend\n","import { FC, Fragment } from 'react'\n\nimport { Icon, Typography } from '@/components/ui'\n\nimport { IAction } from '../settings.interface'\n\ninterface IActions {\n\tactions: IAction[]\n}\n\nconst Action: FC = ({ icon, text, onClick, hiddenArrow }) => {\n\tconst iconColor = icon === 'star' ? '#FF5016' : '#202022'\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{text}\n\n\t\t\t{!hiddenArrow && (\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t)\n}\n\nconst Actions: FC = ({ actions }) => {\n\treturn (\n\t\t
\n\t\t\t{actions.map((action, index) => {\n\t\t\t\tconst isLastIndex = index !== actions.length - 1\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{isLastIndex && (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t})}\n\t\t
\n\t)\n}\n\nexport default Actions\n","import { FC } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { Icon, Typography } from '@/components/ui'\n\nimport { useAmplitude, useTelegram } from '@/hooks'\n\nconst BannerSupport: FC = () => {\n\tconst { tg } = useTelegram()\n\tconst { event } = useAmplitude()\n\tconst { t } = useTranslation()\n\n\tconst handleSupport = () => {\n\t\tevent('support_clicked', {\n\t\t\tflow: 'settings'\n\t\t})\n\t\ttg.openTelegramLink('https://t.me/frienda_cc_bot?start=w34503817')\n\t\ttg.close()\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{t('settings.banner_support.title')}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{t('settings.banner_support.description')}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\t\t
\n\t)\n}\n\nexport default BannerSupport\n","import { FC } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\n\nimport { Button, Icon, Typography } from '@/components/ui'\n\ninterface IProps {\n\thandlePayment: () => void\n}\n\nconst BannerBuyPremium: FC = ({ handlePayment }) => {\n\tconst { t } = useTranslation()\n\n\tconst options = [\n\t\tt('settings.banner_buy_premium.options.inbox'),\n\t\tt('settings.banner_buy_premium.options.search'),\n\t\tt('settings.banner_buy_premium.options.instagram')\n\t]\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t{options.map((item, index) => (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t))}\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default BannerBuyPremium\n","import { useAtomValue } from 'jotai'\nimport { FC, useEffect } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { BottomSheet, Button, Icon, Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { profileAtom } from '@/store'\nimport { notifyMessage } from '@/utils/toastNotifications'\n\ninterface IProps {\n\tisOpen: boolean\n\tonClose: () => void\n\tdaysLeft: number\n}\n\nconst ModalPremium: FC = ({ isOpen, onClose, daysLeft }) => {\n\tconst { t } = useTranslation()\n\tconst {\n\t\tcancelPremium,\n\t\trefetchInitProfile,\n\t\tisCancelPremiumSuccess,\n\t\tisCancelPremiumLoading\n\t} = useProfile()\n\tconst { tg } = useTelegram()\n\tconst { event } = useAmplitude()\n\tconst profile = useAtomValue(profileAtom)\n\tconst navigate = useNavigate()\n\n\tconst formattedDate = new Date(profile?.sub_until)\n\t\t.toLocaleDateString('ru-RU', {\n\t\t\tday: 'numeric',\n\t\t\tmonth: 'long',\n\t\t\tyear: 'numeric'\n\t\t})\n\t\t.slice(0, -3)\n\n\tconst handleCancelSubscription = () => {\n\t\tonClose()\n\n\t\ttg.showPopup(\n\t\t\t{\n\t\t\t\ttitle: t('settings.modal_cancel_subscription.title'),\n\t\t\t\tmessage: t('settings.modal_cancel_subscription.description', {\n\t\t\t\t\tdate: formattedDate\n\t\t\t\t}),\n\t\t\t\tbuttons: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'confirm',\n\t\t\t\t\t\ttype: 'destructive',\n\t\t\t\t\t\ttext: t('settings.modal_cancel_subscription.buttons.button_confirm')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'cancel',\n\t\t\t\t\t\ttype: 'default',\n\t\t\t\t\t\ttext: t('settings.modal_cancel_subscription.buttons.button_cancel')\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbuttonId => {\n\t\t\t\tif (buttonId === 'confirm') {\n\t\t\t\t\tcancelPremium()\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t}\n\n\tuseEffect(() => {\n\t\tif (isCancelPremiumSuccess) {\n\t\t\trefetchInitProfile()\n\t\t\tevent('premium_canceled', {\n\t\t\t\tdays_left: daysLeft,\n\t\t\t\tflow: 'settings'\n\t\t\t})\n\t\t\tnotifyMessage({\n\t\t\t\ttype: 'error',\n\t\t\t\tclassName: 'absolute top-1 w-[calc(100%-33px)]',\n\t\t\t\tmessage: t('settings.modal_cancel_subscription.message'),\n\t\t\t\ticon: 'star'\n\t\t\t})\n\t\t}\n\t}, [isCancelPremiumLoading])\n\n\tconst handlePremium = () => {\n\t\tevent('premium_info_clicked', {\n\t\t\tflow: 'settings'\n\t\t})\n\t\tnavigate('/premium')\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{profile?.sub_recurring && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default ModalPremium\n","import { FC } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\n\nimport { Icon, Typography } from '@/components/ui'\n\nconst version = import.meta.env.VITE_APP_VERSION\n\nconst Footer: FC = () => {\n\tconst { t } = useTranslation(['authorized', 'common'])\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tВерсия {version}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t)\n}\n\nexport default Footer\n","import cn from 'clsx'\nimport { useAtomValue } from 'jotai'\nimport { FC, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Typography } from '@/components/ui'\n\nimport { useAmplitude, useProfile, useTelegram } from '@/hooks'\nimport { profileAtom } from '@/store'\n\nimport {\n\tActions,\n\tBannerBuyPremium,\n\tBannerSupport,\n\tFooter,\n\tModalPremium\n} from './components'\nimport { IAction } from './settings.interface'\n\nconst Settings: FC = () => {\n\tconst navigate = useNavigate()\n\tconst { tg } = useTelegram()\n\tconst { t } = useTranslation()\n\tconst profile = useAtomValue(profileAtom)\n\tconst { event } = useAmplitude()\n\tconst { deleteProfile } = useProfile()\n\tconst [showPremiumModal, setShowPremiumModal] = useState(false)\n\n\tconst subscriptionEndDate = new Date(profile?.sub_until)\n\tconst timeDifference = subscriptionEndDate.getTime() - new Date().getTime()\n\tconst daysLeft = timeDifference / (1000 * 60 * 60 * 24)\n\t// const isContinueSubscription = daysLeft <= 30\n\n\tconst toggleShowPremiumModal = () => setShowPremiumModal(prev => !prev)\n\n\tconst handleBack = () => {\n\t\tnavigate('/profile')\n\t}\n\n\tuseEffect(() => {\n\t\ttg.BackButton.show()\n\t\ttg.BackButton.onClick(handleBack)\n\n\t\treturn () => {\n\t\t\ttg.BackButton.offClick(handleBack)\n\t\t}\n\t}, [])\n\n\tconst actions: IAction[] = [\n\t\tprofile?.paid && {\n\t\t\ticon: 'star',\n\t\t\ttext: t('settings.actions.subscription'),\n\t\t\tonClick: toggleShowPremiumModal\n\t\t},\n\t\t{\n\t\t\ticon: 'contacts',\n\t\t\ttext: t('settings.actions.contacts'),\n\t\t\tonClick: () => navigate('/settings/contacts')\n\t\t},\n\t\t{\n\t\t\ticon: 'photo',\n\t\t\ttext: t('settings.actions.photo'),\n\t\t\tonClick: () => navigate('/settings/media/beautiful')\n\t\t},\n\t\t{\n\t\t\ticon: 'goals',\n\t\t\ttext: t('settings.actions.goals'),\n\t\t\tonClick: () => navigate('/settings/goals')\n\t\t},\n\t\t{\n\t\t\ticon: 'description',\n\t\t\ttext: t('settings.actions.description'),\n\t\t\tonClick: () => navigate('/settings/description')\n\t\t},\n\t\t{\n\t\t\ticon: 'emoji',\n\t\t\ttext: t('settings.actions.emoji'),\n\t\t\tonClick: () => navigate('/settings/emoji')\n\t\t},\n\t\t{\n\t\t\ticon: 'delete-profile',\n\t\t\thiddenArrow: true,\n\t\t\ttext: t('settings.actions.delete_profile'),\n\t\t\tonClick: () => handleDeleteProfile()\n\t\t}\n\t].filter(Boolean)\n\n\tconst handlePayment = () => {\n\t\t// TODO: сделать продление на backend\n\t\t/*const state = !profile.paid\n\t\t\t? 'buy'\n\t\t\t: isContinueSubscription\n\t\t\t? 'renew'\n\t\t\t: 'otherState'*/\n\t\tevent('premium_buy_clicked', {\n\t\t\t/*state: state,\n\t\t\t...(profile.paid &&\n\t\t\t\tisContinueSubscription && {\n\t\t\t\t\tdays_left: daysLeft\n\t\t\t\t}),*/\n\t\t\tflow: 'settings'\n\t\t})\n\t\tnavigate('/payment', {\n\t\t\tstate: {\n\t\t\t\tstate: 'settings',\n\t\t\t\tsource: 'settings_promo'\n\t\t\t}\n\t\t})\n\t}\n\n\tconst handleDeleteProfile = () => {\n\t\ttg.showPopup(\n\t\t\t{\n\t\t\t\ttitle: t('settings.modal_delete_profile.title'),\n\t\t\t\tmessage: profile?.paid\n\t\t\t\t\t? t('settings.modal_delete_profile.description_premium')\n\t\t\t\t\t: t('settings.modal_delete_profile.description'),\n\t\t\t\tbuttons: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'cancel',\n\t\t\t\t\t\ttype: 'cancel',\n\t\t\t\t\t\ttext: t('settings.modal_delete_profile.buttons.button_cancel')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'delete',\n\t\t\t\t\t\ttype: 'destructive',\n\t\t\t\t\t\ttext: t('settings.modal_delete_profile.buttons.button_delete')\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbuttonId => {\n\t\t\t\tif (buttonId === 'delete') {\n\t\t\t\t\tdeleteProfile()\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{t('settings.title')}\n\t\t\t\t\n\t\t\t\t{!profile?.paid && }\n\t\t\t\t{/* {profile.paid && isContinueSubscription && (\n\t\t\t\t\t\n\t\t\t\t)} */}\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t